From 1903ac606582799370b63efc84677d250f34f757 Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Wed, 9 Dec 2020 23:53:36 -0600 Subject: [PATCH 01/93] bugfix: temporarily cancels unwanted test case (#3359) --- core/src/test/java/io/seata/core/context/RootContextTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/core/src/test/java/io/seata/core/context/RootContextTest.java b/core/src/test/java/io/seata/core/context/RootContextTest.java index 595723e6c49..710b63582cc 100644 --- a/core/src/test/java/io/seata/core/context/RootContextTest.java +++ b/core/src/test/java/io/seata/core/context/RootContextTest.java @@ -44,10 +44,6 @@ public void testBind_And_Unbind() { RootContext.unbind(); assertThat(RootContext.getXID()).isNull(); - - Assertions.assertThrows(IllegalArgumentException.class, () -> RootContext.bind(null)); - Assertions.assertThrows(IllegalArgumentException.class, () -> RootContext.bind("")); - Assertions.assertThrows(IllegalArgumentException.class, () -> RootContext.bind(" ")); } /** From c5edee5ffe3ef25365a8a972d3aa93262c602970 Mon Sep 17 00:00:00 2001 From: jimin Date: Mon, 14 Dec 2020 10:13:21 +0800 Subject: [PATCH 02/93] optimize: optimize ParameterParserTest test case failed (#3365) --- .../main/java/io/seata/server/ParameterParser.java | 14 ++++++++++++-- .../java/io/seata/server/ParameterParserTest.java | 6 +++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/io/seata/server/ParameterParser.java b/server/src/main/java/io/seata/server/ParameterParser.java index d0faaa42473..43ef0dcda3c 100644 --- a/server/src/main/java/io/seata/server/ParameterParser.java +++ b/server/src/main/java/io/seata/server/ParameterParser.java @@ -24,14 +24,14 @@ import io.seata.core.constants.ConfigurationKeys; import io.seata.server.env.ContainerHelper; -import static io.seata.config.ConfigurationFactory.ENV_PROPERTY_KEY; import static io.seata.common.DefaultValues.SERVER_DEFAULT_PORT; import static io.seata.common.DefaultValues.SERVER_DEFAULT_STORE_MODE; +import static io.seata.config.ConfigurationFactory.ENV_PROPERTY_KEY; /** * The type Parameter parser. * - * @author xingfudeshi@gmail.com + * @author xingfudeshi @gmail.com */ public class ParameterParser { @@ -51,6 +51,7 @@ public class ParameterParser { @Parameter(names = {"--seataEnv", "-e"}, description = "The name used for multi-configuration isolation.", order = 5) private String seataEnv; + /** * Instantiates a new Parameter parser. * @@ -154,4 +155,13 @@ public String getSeataEnv() { return seataEnv; } + /** + * Clean up. + */ + public void cleanUp() { + if (null != System.getProperty(ENV_PROPERTY_KEY)) { + System.clearProperty(ENV_PROPERTY_KEY); + } + } + } diff --git a/server/src/test/java/io/seata/server/ParameterParserTest.java b/server/src/test/java/io/seata/server/ParameterParserTest.java index 483dcf7ad51..799950793dd 100644 --- a/server/src/test/java/io/seata/server/ParameterParserTest.java +++ b/server/src/test/java/io/seata/server/ParameterParserTest.java @@ -43,6 +43,7 @@ private void init() { @Test public void testEmptyMode() { String[] args = new String[] {"-h", "127.0.0.1", "-p", "8088"}; + parameterParser.cleanUp(); parameterParser = new ParameterParser(args); //always set store.mode=file in test/resource/file.conf, if not will cause SessionStoreTest's case fail. Assertions.assertEquals("file", parameterParser.getStoreMode()); @@ -85,7 +86,10 @@ public void testGetSeataEnv() { */ @AfterEach public void cleanUp() { - parameterParser = null; + if (null != parameterParser) { + parameterParser.cleanUp(); + parameterParser = null; + } } } From 1f9e7cf851b379bf149868b35031f0eceb1ccb36 Mon Sep 17 00:00:00 2001 From: "Geng Zhang (Kenneth)" Date: Mon, 14 Dec 2020 11:28:33 +0800 Subject: [PATCH 03/93] migrate: Migrate CI provider from Travis CI to Github Actions. (#3343) --- .github/workflows/build.yml | 38 +++++++++++++++++++ README.md | 2 +- .../core/rpc/netty/RmNettyRemotingClient.java | 1 - .../core/rpc/netty/TmNettyRemotingClient.java | 25 ++++++------ 4 files changed, 51 insertions(+), 15 deletions(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000000..abeba436169 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,38 @@ +name: build + +on: + push: + branches: [ develop ] + pull_request: + branches: [ develop ] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + java: [8, 11] + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK + uses: actions/setup-java@v1 + with: + java-version: ${{ matrix.java }} + - name: Set up ENV + # https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable + run: if [ "${{ matrix.java }}" == "8" ]; then + echo "IMAGE_NAME=openjdk:8u212-jre-alpine" >> $GITHUB_ENV; + elif [ "${{ matrix.java }}" == "11" ]; then + echo "IMAGE_NAME=openjdk:11-jre-stretch" >> $GITHUB_ENV; + fi + - name: Build with Maven + # https://docs.github.com/cn/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context + run: if [ "${{github.event_name}}" == "push" ] && [ "${{github.ref}}" == "refs/heads/develop" ]; then + mvn clean install -DskipTests=false -Dcheckstyle.skip=false -Dlicense.skip=false -P image -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn; + else + mvn clean install -DskipTests=false -Dcheckstyle.skip=false -Dlicense.skip=false -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn; + fi + - name: Codecov + uses: codecov/codecov-action@v1 \ No newline at end of file diff --git a/README.md b/README.md index c992ae2ef58..afeeb7bf605 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # Seata: Simple Extensible Autonomous Transaction Architecture -[![Build Status](https://travis-ci.org/seata/seata.svg?branch=develop)](https://travis-ci.org/seata/seata) +[![Build Status](https://github.com/seata/seata/workflows/build/badge.svg?branch=develop)](https://github.com/seata/seata/actions) [![codecov](https://codecov.io/gh/seata/seata/branch/develop/graph/badge.svg)](https://codecov.io/gh/seata/seata) [![license](https://img.shields.io/github/license/seata/seata.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) [![maven](https://img.shields.io/maven-central/v/io.seata/seata-parent.svg)](https://search.maven.org/search?q=io.seata) diff --git a/core/src/main/java/io/seata/core/rpc/netty/RmNettyRemotingClient.java b/core/src/main/java/io/seata/core/rpc/netty/RmNettyRemotingClient.java index ac4398997c9..e2b4323d932 100644 --- a/core/src/main/java/io/seata/core/rpc/netty/RmNettyRemotingClient.java +++ b/core/src/main/java/io/seata/core/rpc/netty/RmNettyRemotingClient.java @@ -16,7 +16,6 @@ package io.seata.core.rpc.netty; import io.netty.channel.Channel; -import io.netty.channel.ChannelHandler.Sharable; import io.netty.util.concurrent.EventExecutorGroup; import io.seata.common.exception.FrameworkErrorCode; import io.seata.common.exception.FrameworkException; diff --git a/core/src/main/java/io/seata/core/rpc/netty/TmNettyRemotingClient.java b/core/src/main/java/io/seata/core/rpc/netty/TmNettyRemotingClient.java index 18e0175f2dc..b1eacbc047e 100644 --- a/core/src/main/java/io/seata/core/rpc/netty/TmNettyRemotingClient.java +++ b/core/src/main/java/io/seata/core/rpc/netty/TmNettyRemotingClient.java @@ -22,7 +22,6 @@ import java.util.function.Function; import io.netty.channel.Channel; -import io.netty.channel.ChannelHandler.Sharable; import io.netty.util.concurrent.EventExecutorGroup; import io.seata.common.exception.FrameworkException; import io.seata.common.loader.EnhancedServiceLoader; @@ -113,12 +112,12 @@ public static TmNettyRemotingClient getInstance() { if (instance == null) { NettyClientConfig nettyClientConfig = new NettyClientConfig(); final ThreadPoolExecutor messageExecutor = new ThreadPoolExecutor( - nettyClientConfig.getClientWorkerThreads(), nettyClientConfig.getClientWorkerThreads(), - KEEP_ALIVE_TIME, TimeUnit.SECONDS, - new LinkedBlockingQueue<>(MAX_QUEUE_SIZE), - new NamedThreadFactory(nettyClientConfig.getTmDispatchThreadPrefix(), - nettyClientConfig.getClientWorkerThreads()), - RejectedPolicies.runsOldestTaskPolicy()); + nettyClientConfig.getClientWorkerThreads(), nettyClientConfig.getClientWorkerThreads(), + KEEP_ALIVE_TIME, TimeUnit.SECONDS, + new LinkedBlockingQueue<>(MAX_QUEUE_SIZE), + new NamedThreadFactory(nettyClientConfig.getTmDispatchThreadPrefix(), + nettyClientConfig.getClientWorkerThreads()), + RejectedPolicies.runsOldestTaskPolicy()); instance = new TmNettyRemotingClient(nettyClientConfig, null, messageExecutor); } } @@ -187,8 +186,8 @@ public String getTransactionServiceGroup() { @Override public void onRegisterMsgSuccess(String serverAddress, Channel channel, Object response, AbstractMessage requestMessage) { - RegisterTMRequest registerTMRequest = (RegisterTMRequest)requestMessage; - RegisterTMResponse registerTMResponse = (RegisterTMResponse)response; + RegisterTMRequest registerTMRequest = (RegisterTMRequest) requestMessage; + RegisterTMResponse registerTMResponse = (RegisterTMResponse) response; if (LOGGER.isInfoEnabled()) { LOGGER.info("register TM success. client version:{}, server version:{},channel:{}", registerTMRequest.getVersion(), registerTMResponse.getVersion(), channel); } @@ -198,10 +197,10 @@ public void onRegisterMsgSuccess(String serverAddress, Channel channel, Object r @Override public void onRegisterMsgFail(String serverAddress, Channel channel, Object response, AbstractMessage requestMessage) { - RegisterTMRequest registerTMRequest = (RegisterTMRequest)requestMessage; - RegisterTMResponse registerTMResponse = (RegisterTMResponse)response; + RegisterTMRequest registerTMRequest = (RegisterTMRequest) requestMessage; + RegisterTMResponse registerTMResponse = (RegisterTMResponse) response; String errMsg = String.format( - "register TM failed. client version: %s,server version: %s, errorMsg: %s, " + "channel: %s", registerTMRequest.getVersion(), registerTMResponse.getVersion(), registerTMResponse.getMsg(), channel); + "register TM failed. client version: %s,server version: %s, errorMsg: %s, " + "channel: %s", registerTMRequest.getVersion(), registerTMResponse.getVersion(), registerTMResponse.getMsg(), channel); throw new FrameworkException(errMsg); } @@ -223,7 +222,7 @@ protected Function getPoolKeyFunction() { private void registerProcessor() { // 1.registry TC response processor ClientOnResponseProcessor onResponseProcessor = - new ClientOnResponseProcessor(mergeMsgMap, super.getFutures(), getTransactionMessageHandler()); + new ClientOnResponseProcessor(mergeMsgMap, super.getFutures(), getTransactionMessageHandler()); super.registerProcessor(MessageType.TYPE_SEATA_MERGE_RESULT, onResponseProcessor, null); super.registerProcessor(MessageType.TYPE_GLOBAL_BEGIN_RESULT, onResponseProcessor, null); super.registerProcessor(MessageType.TYPE_GLOBAL_COMMIT_RESULT, onResponseProcessor, null); From d171a81f59bccea0e86e644c139638e53e94e06a Mon Sep 17 00:00:00 2001 From: jimin Date: Mon, 14 Dec 2020 15:32:57 +0800 Subject: [PATCH 04/93] optimize: add github action secrets env for dockerHub (#3369) --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index abeba436169..fe3cadc4595 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,6 +28,9 @@ jobs: echo "IMAGE_NAME=openjdk:11-jre-stretch" >> $GITHUB_ENV; fi - name: Build with Maven + env: + REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }} + REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }} # https://docs.github.com/cn/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context run: if [ "${{github.event_name}}" == "push" ] && [ "${{github.ref}}" == "refs/heads/develop" ]; then mvn clean install -DskipTests=false -Dcheckstyle.skip=false -Dlicense.skip=false -P image -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn; From f5ee231947f632f7932b50522b529285fa2c8c28 Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Mon, 14 Dec 2020 00:47:44 -0800 Subject: [PATCH 05/93] optimize: mysql jdbc connect param (#3291) --- .../test/java/io/seata/rm/datasource/mock/MockDataSource.java | 2 +- script/config-center/config.txt | 2 +- script/server/config/file.conf | 3 ++- script/server/config/file.properties | 3 ++- script/server/config/file.yml | 3 ++- server/src/main/resources/file.conf | 3 ++- server/src/main/resources/file.conf.example | 3 ++- server/src/test/resources/file.conf | 3 ++- 8 files changed, 14 insertions(+), 8 deletions(-) diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/mock/MockDataSource.java b/rm-datasource/src/test/java/io/seata/rm/datasource/mock/MockDataSource.java index a7d11e60694..1deebb95e12 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/mock/MockDataSource.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/mock/MockDataSource.java @@ -28,7 +28,7 @@ public class MockDataSource implements DataSource { @Override public Connection getConnection() throws SQLException { - return new MockConnection(new MockDriver(), "jdbc:mysql://127.0.0.1:3306/seata", null); + return new MockConnection(new MockDriver(), "jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true", null); } @Override diff --git a/script/config-center/config.txt b/script/config-center/config.txt index e8384fecc08..a73f60767f7 100644 --- a/script/config-center/config.txt +++ b/script/config-center/config.txt @@ -41,7 +41,7 @@ store.file.sessionReloadReadSize=100 store.db.datasource=druid store.db.dbType=mysql store.db.driverClassName=com.mysql.jdbc.Driver -store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true +store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true store.db.user=username store.db.password=password store.db.minConn=5 diff --git a/script/server/config/file.conf b/script/server/config/file.conf index 55f583ebbd1..f3fa6afecd8 100644 --- a/script/server/config/file.conf +++ b/script/server/config/file.conf @@ -27,7 +27,8 @@ store { ## mysql/oracle/postgresql/h2/oceanbase etc. dbType = "mysql" driverClassName = "com.mysql.jdbc.Driver" - url = "jdbc:mysql://127.0.0.1:3306/seata" + ## if using mysql to store the data, recommend add rewriteBatchedStatements=true in jdbc connection param + url = "jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true" user = "mysql" password = "mysql" minConn = 5 diff --git a/script/server/config/file.properties b/script/server/config/file.properties index f3ee19aa943..6cf651aadd4 100644 --- a/script/server/config/file.properties +++ b/script/server/config/file.properties @@ -8,7 +8,8 @@ store.file.flushDiskMode=async store.db.datasource=druid store.db.dbType=mysql store.db.driverClassName=com.mysql.jdbc.Driver -store.db.url=jdbc:mysql://127.0.0.1:3306/seata +# if using mysql to store the data, recommend add rewriteBatchedStatements=true in jdbc connection param +store.db.url=jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true store.db.user=mysql store.db.password=mysql store.db.minConn=5 diff --git a/script/server/config/file.yml b/script/server/config/file.yml index 791545a211b..bf90cf56958 100644 --- a/script/server/config/file.yml +++ b/script/server/config/file.yml @@ -25,7 +25,8 @@ store: ## mysql/oracle/postgresql/h2/oceanbase etc. dbType: mysql driverClassName: com.mysql.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/seata + ## if using mysql to store the data, recommend add rewriteBatchedStatements=true in jdbc connection param + url: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true user: mysql password: mysql minConn: 5 diff --git a/server/src/main/resources/file.conf b/server/src/main/resources/file.conf index 21f157827dc..3d862f1f6a1 100644 --- a/server/src/main/resources/file.conf +++ b/server/src/main/resources/file.conf @@ -26,7 +26,8 @@ store { ## mysql/oracle/postgresql/h2/oceanbase etc. dbType = "mysql" driverClassName = "com.mysql.jdbc.Driver" - url = "jdbc:mysql://127.0.0.1:3306/seata" + ## if using mysql to store the data, recommend add rewriteBatchedStatements=true in jdbc connection param + url = "jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true" user = "mysql" password = "mysql" minConn = 5 diff --git a/server/src/main/resources/file.conf.example b/server/src/main/resources/file.conf.example index 0e9b3765427..bf8c5a774dc 100644 --- a/server/src/main/resources/file.conf.example +++ b/server/src/main/resources/file.conf.example @@ -56,7 +56,8 @@ store { ## mysql/oracle/postgresql/h2/oceanbase etc. dbType = "mysql" driverClassName = "com.mysql.jdbc.Driver" - url = "jdbc:mysql://127.0.0.1:3306/seata" + ## if using mysql to store the data, recommend add rewriteBatchedStatements=true in jdbc connection param + url = "jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true" user = "mysql" password = "mysql" minConn = 5 diff --git a/server/src/test/resources/file.conf b/server/src/test/resources/file.conf index 0e6c990638a..7e6f7009a3b 100644 --- a/server/src/test/resources/file.conf +++ b/server/src/test/resources/file.conf @@ -17,7 +17,8 @@ store { ## mysql/oracle/h2/oceanbase etc. dbType = "mysql" driverClassName = "com.mysql.jdbc.Driver" - url = "jdbc:mysql://127.0.0.1:3306/seata" + ## if using mysql to store the data, recommend add rewriteBatchedStatements=true in jdbc connection param + url = "jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true" user = "mysql" password = "mysql" } From f6193e30498ef791a22cf8cba9e6571f13c07d10 Mon Sep 17 00:00:00 2001 From: jsbxyyx Date: Mon, 14 Dec 2020 20:50:59 +0800 Subject: [PATCH 06/93] optimize: get netty config property from system properties. (#3336) --- .../core/rpc/netty/NettyServerConfig.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/io/seata/core/rpc/netty/NettyServerConfig.java b/core/src/main/java/io/seata/core/rpc/netty/NettyServerConfig.java index 71ff7b5d1cf..11d0c4e1e46 100644 --- a/core/src/main/java/io/seata/core/rpc/netty/NettyServerConfig.java +++ b/core/src/main/java/io/seata/core/rpc/netty/NettyServerConfig.java @@ -33,16 +33,24 @@ */ public class NettyServerConfig extends NettyBaseConfig { - private int serverSelectorThreads = WORKER_THREAD_SIZE; - private int serverSocketSendBufSize = 153600; - private int serverSocketResvBufSize = 153600; - private int serverWorkerThreads = WORKER_THREAD_SIZE; - private int soBackLogSize = 1024; - private int writeBufferHighWaterMark = 67108864; - private int writeBufferLowWaterMark = 1048576; + private int serverSelectorThreads = Integer.parseInt(System.getProperty( + ConfigurationKeys.TRANSPORT_PREFIX + "serverSelectorThreads", String.valueOf(WORKER_THREAD_SIZE))); + private int serverSocketSendBufSize = Integer.parseInt(System.getProperty( + ConfigurationKeys.TRANSPORT_PREFIX + "serverSocketSendBufSize", String.valueOf(153600))); + private int serverSocketResvBufSize = Integer.parseInt(System.getProperty( + ConfigurationKeys.TRANSPORT_PREFIX + "serverSocketResvBufSize", String.valueOf(153600))); + private int serverWorkerThreads = Integer.parseInt(System.getProperty( + ConfigurationKeys.TRANSPORT_PREFIX + "serverWorkerThreads", String.valueOf(WORKER_THREAD_SIZE))); + private int soBackLogSize = Integer.parseInt(System.getProperty( + ConfigurationKeys.TRANSPORT_PREFIX + "soBackLogSize", String.valueOf(1024))); + private int writeBufferHighWaterMark = Integer.parseInt(System.getProperty( + ConfigurationKeys.TRANSPORT_PREFIX + "writeBufferHighWaterMark", String.valueOf(67108864))); + private int writeBufferLowWaterMark = Integer.parseInt(System.getProperty( + ConfigurationKeys.TRANSPORT_PREFIX + "writeBufferLowWaterMark", String.valueOf(1048576))); private static final int DEFAULT_LISTEN_PORT = 8091; private static final int RPC_REQUEST_TIMEOUT = 30 * 1000; - private int serverChannelMaxIdleTimeSeconds = 30; + private int serverChannelMaxIdleTimeSeconds = Integer.parseInt(System.getProperty( + ConfigurationKeys.TRANSPORT_PREFIX + "serverChannelMaxIdleTimeSeconds", String.valueOf(30))); private static final String EPOLL_WORKER_THREAD_PREFIX = "NettyServerEPollWorker"; /** From 0944fe578430c1816f122a766abe0c6e88b8c94d Mon Sep 17 00:00:00 2001 From: selfishlover <1581926496@qq.com> Date: Tue, 15 Dec 2020 11:24:23 +0800 Subject: [PATCH 07/93] optimize: improve UUIDGenerator using "history time" version of snowflake algorithm (#3175) --- .../java/io/seata/common/util/IdWorker.java | 197 ++++++++++-------- .../io/seata/common/util/IdWorkerTest.java | 46 ++++ .../java/io/seata/server/ParameterParser.java | 4 - .../java/io/seata/server/UUIDGenerator.java | 24 ++- 4 files changed, 166 insertions(+), 105 deletions(-) create mode 100644 common/src/test/java/io/seata/common/util/IdWorkerTest.java diff --git a/common/src/main/java/io/seata/common/util/IdWorker.java b/common/src/main/java/io/seata/common/util/IdWorker.java index 7ee5416742f..b7e801370f2 100644 --- a/common/src/main/java/io/seata/common/util/IdWorker.java +++ b/common/src/main/java/io/seata/common/util/IdWorker.java @@ -14,161 +14,174 @@ * limitations under the License. */ package io.seata.common.util; -import java.net.InetAddress; -import java.net.UnknownHostException; + +import java.net.NetworkInterface; +import java.util.Enumeration; +import java.util.Random; +import java.util.concurrent.atomic.AtomicLong; /** * @author funkye + * @author selfishlover */ public class IdWorker { - private volatile static IdWorker idWorker = null; - /** * Start time cut (2020-05-03) */ private final long twepoch = 1588435200000L; /** - * The number of bits occupied by the machine id + * The number of bits occupied by workerId */ - private final long workerIdBits = 10L; + private final int workerIdBits = 10; /** - * Maximum supported machine id, the result is 1023 (this shift algorithm can quickly calculate the largest decimal - * number that can be represented by a few binary numbers) + * The number of bits occupied by timestamp */ - private final long maxWorkerId = -1L ^ (-1L << workerIdBits); + private final int timestampBits = 41; /** - * The number of bits the sequence occupies in id + * The number of bits occupied by sequence */ - private final long sequenceBits = 12L; + private final int sequenceBits = 12; /** - * Machine ID left 12 digits + * Maximum supported machine id, the result is 1023 */ - private final long workerIdShift = sequenceBits; + private final int maxWorkerId = ~(-1 << workerIdBits); /** - * Time truncated to the left by 22 bits (10 + 12) + * business meaning: machine ID (0 ~ 1023) + * actual layout in memory: + * highest 1 bit: 0 + * middle 10 bit: workerId + * lowest 53 bit: all 0 */ - private final long timestampLeftShift = sequenceBits + workerIdBits; + private long workerId; /** - * Generate sequence mask + * timestamp and sequence mix in one Long + * highest 11 bit: not used + * middle 41 bit: timestamp + * lowest 12 bit: sequence */ - private final long sequenceMask = -1L ^ (-1L << sequenceBits); + private AtomicLong timestampAndSequence; /** - * Machine ID (0 ~ 1023) + * mask that help to extract timestamp and sequence from a long */ - private long workerId; + private final long timestampAndSequenceMask = ~(-1L << (timestampBits + sequenceBits)); /** - * Sequence in milliseconds (0 ~ 4095) + * instantiate an IdWorker using given workerId + * @param workerId if null, then will auto assign one */ - private long sequence = 0L; + public IdWorker(Long workerId) { + initTimestampAndSequence(); + initWorkerId(workerId); + } /** - * Time of last ID generation + * init first timestamp and sequence immediately */ - private long lastTimestamp = -1L; + private void initTimestampAndSequence() { + long timestamp = getNewestTimestamp(); + long timestampWithSequence = timestamp << sequenceBits; + this.timestampAndSequence = new AtomicLong(timestampWithSequence); + } /** - * Constructor - * - * @param workerId - * Job ID (0 ~ 1023) + * init workerId + * @param workerId if null, then auto generate one */ - public IdWorker(long workerId) { + private void initWorkerId(Long workerId) { + if (workerId == null) { + workerId = generateWorkerId(); + } if (workerId > maxWorkerId || workerId < 0) { - throw new IllegalArgumentException( - String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); + String message = String.format("worker Id can't be greater than %d or less than 0", maxWorkerId); + throw new IllegalArgumentException(message); } - this.workerId = workerId; + this.workerId = workerId << (timestampBits + sequenceBits); } /** - * Get the next ID (the method is thread-safe) - * - * @return SnowflakeId + * get next UUID(base on snowflake algorithm), which look like: + * highest 1 bit: always 0 + * next 10 bit: workerId + * next 41 bit: timestamp + * lowest 12 bit: sequence + * @return UUID */ - public synchronized long nextId() { - long timestamp = timeGen(); - - if (timestamp < lastTimestamp) { - throw new RuntimeException(String.format( - "clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); - } - - if (lastTimestamp == timestamp) { - sequence = (sequence + 1) & sequenceMask; - if (sequence == 0) { - timestamp = tilNextMillis(lastTimestamp); - } - } else { - sequence = 0L; - } - lastTimestamp = timestamp; - - return ((timestamp - twepoch) << timestampLeftShift) | (workerId << workerIdShift) | sequence; + public long nextId() { + waitIfNecessary(); + long next = timestampAndSequence.incrementAndGet(); + long timestampWithSequence = next & timestampAndSequenceMask; + return workerId | timestampWithSequence; } /** - * Block until the next millisecond until a new timestamp is obtained - * - * @param lastTimestamp - * Time of last ID generation - * @return Current timestamp + * block current thread if the QPS of acquiring UUID is too high + * that current sequence space is exhausted */ - protected long tilNextMillis(long lastTimestamp) { - long timestamp = timeGen(); - while (timestamp <= lastTimestamp) { - timestamp = timeGen(); + private void waitIfNecessary() { + long currentWithSequence = timestampAndSequence.get(); + long current = currentWithSequence >>> sequenceBits; + long newest = getNewestTimestamp(); + if (current >= newest) { + try { + Thread.sleep(5); + } catch (InterruptedException ignore) { + // don't care + } } - return timestamp; } /** - * Returns the current time in milliseconds - * - * @return Current time (ms) + * get newest timestamp relative to twepoch */ - protected long timeGen() { - return System.currentTimeMillis(); - } - - public static IdWorker getInstance() { - if (idWorker == null) { - synchronized (IdWorker.class) { - if (idWorker == null) { - init(initWorkerId()); - } - } - } - return idWorker; + private long getNewestTimestamp() { + return System.currentTimeMillis() - twepoch; } - public static long initWorkerId() { - InetAddress address; + /** + * auto generate workerId, try using mac first, if failed, then randomly generate one + * @return workerId + */ + private long generateWorkerId() { try { - address = InetAddress.getLocalHost(); - } catch (final UnknownHostException e) { - throw new IllegalStateException("Cannot get LocalHost InetAddress, please check your network!",e); + return generateWorkerIdBaseOnMac(); + } catch (Exception e) { + return generateRandomWorkerId(); } - byte[] ipAddressByteArray = address.getAddress(); - return ((ipAddressByteArray[ipAddressByteArray.length - 2] & 0B11) << Byte.SIZE) + (ipAddressByteArray[ipAddressByteArray.length - 1] & 0xFF); } - public static void init(Long serverNodeId) { - if (idWorker == null) { - synchronized (IdWorker.class) { - if (idWorker == null) { - idWorker = new IdWorker(serverNodeId); - } + /** + * use lowest 10 bit of available MAC as workerId + * @return workerId + * @throws Exception when there is no available mac found + */ + private long generateWorkerIdBaseOnMac() throws Exception { + Enumeration all = NetworkInterface.getNetworkInterfaces(); + while (all.hasMoreElements()) { + NetworkInterface networkInterface = all.nextElement(); + boolean isLoopback = networkInterface.isLoopback(); + boolean isVirtual = networkInterface.isVirtual(); + if (isLoopback || isVirtual) { + continue; } + byte[] mac = networkInterface.getHardwareAddress(); + return ((mac[4] & 0B11) << 8) | (mac[5] & 0xFF); } + throw new RuntimeException("no available mac found"); } + /** + * randomly generate one as workerId + * @return workerId + */ + private long generateRandomWorkerId() { + return new Random().nextInt(maxWorkerId + 1); + } } diff --git a/common/src/test/java/io/seata/common/util/IdWorkerTest.java b/common/src/test/java/io/seata/common/util/IdWorkerTest.java new file mode 100644 index 00000000000..196c092ad9d --- /dev/null +++ b/common/src/test/java/io/seata/common/util/IdWorkerTest.java @@ -0,0 +1,46 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.common.util; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class IdWorkerTest { + + @Test + void testNegativeWorkerId() { + assertThrows(IllegalArgumentException.class, () -> { + new IdWorker(-1L); + }, "should throw IllegalArgumentException when workerId is negative"); + } + + @Test + void testTooLargeWorkerId() { + assertThrows(IllegalArgumentException.class, () -> { + new IdWorker(1024L); + }, "should throw IllegalArgumentException when workerId is bigger than 1023"); + } + + @Test + void testNextId() { + IdWorker worker = new IdWorker(null); + long id1 = worker.nextId(); + long id2 = worker.nextId(); + assertEquals(1L, id2 - id1, "increment step should be 1"); + } +} \ No newline at end of file diff --git a/server/src/main/java/io/seata/server/ParameterParser.java b/server/src/main/java/io/seata/server/ParameterParser.java index 43ef0dcda3c..a10d2d73eac 100644 --- a/server/src/main/java/io/seata/server/ParameterParser.java +++ b/server/src/main/java/io/seata/server/ParameterParser.java @@ -18,7 +18,6 @@ import com.beust.jcommander.JCommander; import com.beust.jcommander.Parameter; import com.beust.jcommander.ParameterException; -import io.seata.common.util.IdWorker; import io.seata.common.util.StringUtils; import io.seata.config.ConfigurationFactory; import io.seata.core.constants.ConfigurationKeys; @@ -78,9 +77,6 @@ private void init(String[] args) { System.exit(0); } } - if (this.serverNode == null) { - this.serverNode = IdWorker.initWorkerId(); - } if (StringUtils.isNotBlank(seataEnv)) { System.setProperty(ENV_PROPERTY_KEY, seataEnv); } diff --git a/server/src/main/java/io/seata/server/UUIDGenerator.java b/server/src/main/java/io/seata/server/UUIDGenerator.java index 422d65860b8..11aa492e934 100644 --- a/server/src/main/java/io/seata/server/UUIDGenerator.java +++ b/server/src/main/java/io/seata/server/UUIDGenerator.java @@ -24,22 +24,28 @@ */ public class UUIDGenerator { + private static volatile IdWorker idWorker; + /** - * Generate uuid long. - * - * @return the long + * generate UUID using snowflake algorithm + * @return UUID */ public static long generateUUID() { - return IdWorker.getInstance().nextId(); + if (idWorker == null) { + synchronized (UUIDGenerator.class) { + if (idWorker == null) { + init(null); + } + } + } + return idWorker.nextId(); } /** - * Init. - * - * @param serverNode the server node id + * init IdWorker + * @param serverNode the server node id, consider as machine id in snowflake */ public static void init(Long serverNode) { - IdWorker.init(serverNode); + idWorker = new IdWorker(serverNode); } - } From aeeda4202797a83d950db4c1a31656f60738648f Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Mon, 14 Dec 2020 21:10:57 -0800 Subject: [PATCH 08/93] feature: support rollback info compress (#3172) --- .../java/io/seata/common/DefaultValues.java | 15 ++++ .../java/io/seata/common/util/SizeUtil.java | 60 ++++++++++++++++ .../io/seata/common/util/SizeUtilTest.java | 30 ++++++++ compressor/seata-compressor-all/pom.xml | 5 ++ .../constants/ClientTableColumnsName.java | 6 ++ .../core/constants/ConfigurationKeys.java | 20 ++++++ .../rpc/processor/server/BatchLogHandler.java | 1 - rm-datasource/pom.xml | 5 ++ .../rm/datasource/exec/InsertExecutor.java | 1 - .../rm/datasource/sql/serial/SerialArray.java | 1 - .../undo/AbstractUndoLogManager.java | 50 +++++++++++-- .../rm/datasource/undo/UndoLogConstants.java | 2 + .../undo/mysql/MySQLUndoLogManager.java | 27 +++---- .../undo/oracle/OracleUndoLogManager.java | 47 ++++++------ .../postgresql/PostgresqlUndoLogManager.java | 45 ++++++------ .../rm/datasource/SqlGenerateUtilsTest.java | 1 - .../datasource/undo/UndoLogManagerTest.java | 1 - .../undo/h2/keyword/H2KeywordChecker.java | 15 ++++ .../undo/mysql/MySQLUndoLogManagerTest.java | 72 ++++++++++++++++++- script/client/conf/file.conf | 8 +++ script/client/spring/application.properties | 3 + script/client/spring/application.yml | 4 ++ script/config-center/config.txt | 3 + .../autoconfigure/SeataAutoConfiguration.java | 21 +++--- .../boot/autoconfigure/StarterConstants.java | 1 + .../client/UndoCompressProperties.java | 60 ++++++++++++++++ ...itional-spring-configuration-metadata.json | 29 ++++++++ .../sqlparser/struct/NotPlaceholderExpr.java | 1 - 28 files changed, 445 insertions(+), 89 deletions(-) create mode 100755 common/src/main/java/io/seata/common/util/SizeUtil.java create mode 100755 common/src/test/java/io/seata/common/util/SizeUtilTest.java create mode 100755 seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/client/UndoCompressProperties.java diff --git a/common/src/main/java/io/seata/common/DefaultValues.java b/common/src/main/java/io/seata/common/DefaultValues.java index cd840b0aeeb..11c228e441b 100644 --- a/common/src/main/java/io/seata/common/DefaultValues.java +++ b/common/src/main/java/io/seata/common/DefaultValues.java @@ -95,4 +95,19 @@ public interface DefaultValues { String DEFAULT_LOAD_BALANCE = "RandomLoadBalance"; int VIRTUAL_NODES_DEFAULT = 10; + + /** + * the constant DEFAULT_CLIENT_UNDO_COMPRESS_ENABLE + */ + boolean DEFAULT_CLIENT_UNDO_COMPRESS_ENABLE = true; + + /** + * the constant DEFAULT_CLIENT_UNDO_COMPRESS_TYPE + */ + String DEFAULT_CLIENT_UNDO_COMPRESS_TYPE = "zip"; + + /** + * the constant DEFAULT_CLIENT_UNDO_COMPRESS_THRESHOLD + */ + String DEFAULT_CLIENT_UNDO_COMPRESS_THRESHOLD = "64k"; } diff --git a/common/src/main/java/io/seata/common/util/SizeUtil.java b/common/src/main/java/io/seata/common/util/SizeUtil.java new file mode 100755 index 00000000000..0db04237b33 --- /dev/null +++ b/common/src/main/java/io/seata/common/util/SizeUtil.java @@ -0,0 +1,60 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.common.util; + +/** + * @author chd + */ +public class SizeUtil { + private static final long RADIX = 1024; + /** + * case size to byte length + * example: + * 2k => 2 * 1024 + * 2m => 2 * 1024 * 1024 + * 2g => 2 * 1024 * 1024 * 1024 + * 2t => 2 * 1024 * 1024 * 1024 * 1024 + * @param size the string size with unit + * @return the byte length + */ + public static long size2Long(String size) { + if (null == size || size.length() <= 1) { + throw new IllegalArgumentException("could not convert '" + size + "' to byte length"); + } + + String size2Lower = size.toLowerCase(); + char unit = size2Lower.charAt(size.length() - 1); + long number; + try { + number = NumberUtils.toLong(size2Lower.substring(0, size.length() - 1)); + } catch (NumberFormatException | NullPointerException ex) { + throw new IllegalArgumentException("could not convert '" + size + "' to byte length"); + } + + switch (unit) { + case 'k': + return number * RADIX; + case 'm': + return number * RADIX * RADIX; + case 'g': + return number * RADIX * RADIX * RADIX; + case 't': + return number * RADIX * RADIX * RADIX * RADIX; + default: + throw new IllegalArgumentException("could not convert '" + size + "' to byte length"); + } + } +} diff --git a/common/src/test/java/io/seata/common/util/SizeUtilTest.java b/common/src/test/java/io/seata/common/util/SizeUtilTest.java new file mode 100755 index 00000000000..5fd545cfae3 --- /dev/null +++ b/common/src/test/java/io/seata/common/util/SizeUtilTest.java @@ -0,0 +1,30 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.common.util; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class SizeUtilTest { + @Test + void size2Long() { + assertThat(SizeUtil.size2Long("2k")).isEqualTo(2L * 1024); + assertThat(SizeUtil.size2Long("2m")).isEqualTo(2L * 1024 * 1024); + assertThat(SizeUtil.size2Long("2G")).isEqualTo(2L * 1024 * 1024 * 1024); + assertThat(SizeUtil.size2Long("2t")).isEqualTo(2L * 1024 * 1024 * 1024 * 1024); + } +} \ No newline at end of file diff --git a/compressor/seata-compressor-all/pom.xml b/compressor/seata-compressor-all/pom.xml index cd6294db34e..9b15fd00f6d 100644 --- a/compressor/seata-compressor-all/pom.xml +++ b/compressor/seata-compressor-all/pom.xml @@ -47,6 +47,11 @@ seata-compressor-zip ${project.version} + + ${project.groupId} + seata-compressor-lz4 + ${project.version} + ${project.groupId} seata-compressor-deflater diff --git a/core/src/main/java/io/seata/core/constants/ClientTableColumnsName.java b/core/src/main/java/io/seata/core/constants/ClientTableColumnsName.java index 00099040c00..dc177360e8a 100644 --- a/core/src/main/java/io/seata/core/constants/ClientTableColumnsName.java +++ b/core/src/main/java/io/seata/core/constants/ClientTableColumnsName.java @@ -22,6 +22,12 @@ */ public interface ClientTableColumnsName { + /** + * The constant undo_log column name xid + * this field is not use in mysql + */ + String UNDO_LOG_ID = "id"; + /** * The constant undo_log column name xid */ diff --git a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java index 8d494ed7f7c..ede07f29150 100644 --- a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java +++ b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java @@ -297,6 +297,26 @@ public interface ConfigurationKeys { */ String TRANSACTION_UNDO_ONLY_CARE_UPDATE_COLUMNS = CLIENT_UNDO_PREFIX + "onlyCareUpdateColumns"; + /** + * the constant CLIENT_UNDO_COMPRESS_PREFIX + */ + String CLIENT_UNDO_COMPRESS_PREFIX = CLIENT_UNDO_PREFIX + "compress."; + + /** + * the constant CLIENT_UNDO_COMPRESS_TYPE + */ + String CLIENT_UNDO_COMPRESS_TYPE = CLIENT_UNDO_COMPRESS_PREFIX + "type"; + + /** + * the constant CLIENT_UNDO_COMPRESS_ENABLE + */ + String CLIENT_UNDO_COMPRESS_ENABLE = CLIENT_UNDO_COMPRESS_PREFIX + "enable"; + + /** + * the constant CLIENT_UNDO_COMPRESS_THRESHOLD + */ + String CLIENT_UNDO_COMPRESS_THRESHOLD = CLIENT_UNDO_COMPRESS_PREFIX + "threshold"; + /** * The constant METRICS_PREFIX. */ diff --git a/core/src/main/java/io/seata/core/rpc/processor/server/BatchLogHandler.java b/core/src/main/java/io/seata/core/rpc/processor/server/BatchLogHandler.java index 616126c539b..6ba53c9195f 100644 --- a/core/src/main/java/io/seata/core/rpc/processor/server/BatchLogHandler.java +++ b/core/src/main/java/io/seata/core/rpc/processor/server/BatchLogHandler.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package io.seata.core.rpc.processor.server; import io.seata.common.thread.NamedThreadFactory; diff --git a/rm-datasource/pom.xml b/rm-datasource/pom.xml index 54817689062..4972c71d07a 100644 --- a/rm-datasource/pom.xml +++ b/rm-datasource/pom.xml @@ -44,6 +44,11 @@ seata-sqlparser-core ${project.version} + + ${project.groupId} + seata-compressor-all + ${project.version} + com.github.ben-manes.caffeine caffeine diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/InsertExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/InsertExecutor.java index 54b069beaf1..ad5b1a36241 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/InsertExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/InsertExecutor.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package io.seata.rm.datasource.exec; import java.sql.SQLException; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/serial/SerialArray.java b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/serial/SerialArray.java index ce70feda4bb..a9afd5b7a2e 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/serial/SerialArray.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/serial/SerialArray.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package io.seata.rm.datasource.sql.serial; import javax.sql.rowset.serial.SerialBlob; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoLogManager.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoLogManager.java index 6da3ddc3489..6d29cc4fb4d 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoLogManager.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoLogManager.java @@ -28,7 +28,10 @@ import io.seata.common.Constants; import io.seata.common.util.CollectionUtils; +import io.seata.common.util.SizeUtil; import io.seata.config.ConfigurationFactory; +import io.seata.core.compressor.CompressorFactory; +import io.seata.core.compressor.CompressorType; import io.seata.core.constants.ClientTableColumnsName; import io.seata.core.constants.ConfigurationKeys; import io.seata.core.exception.BranchTransactionException; @@ -42,6 +45,9 @@ import org.slf4j.LoggerFactory; import static io.seata.common.DefaultValues.DEFAULT_TRANSACTION_UNDO_LOG_TABLE; +import static io.seata.common.DefaultValues.DEFAULT_CLIENT_UNDO_COMPRESS_ENABLE; +import static io.seata.common.DefaultValues.DEFAULT_CLIENT_UNDO_COMPRESS_TYPE; +import static io.seata.common.DefaultValues.DEFAULT_CLIENT_UNDO_COMPRESS_THRESHOLD; import static io.seata.core.exception.TransactionExceptionCode.BranchRollbackFailed_Retriable; /** @@ -83,6 +89,15 @@ public int getValue() { protected static final String DELETE_UNDO_LOG_SQL = "DELETE FROM " + UNDO_LOG_TABLE_NAME + " WHERE " + ClientTableColumnsName.UNDO_LOG_BRANCH_XID + " = ? AND " + ClientTableColumnsName.UNDO_LOG_XID + " = ?"; + protected static final boolean ROLLBACK_INFO_COMPRESS_ENABLE = ConfigurationFactory.getInstance().getBoolean( + ConfigurationKeys.CLIENT_UNDO_COMPRESS_ENABLE, DEFAULT_CLIENT_UNDO_COMPRESS_ENABLE); + + protected static final CompressorType ROLLBACK_INFO_COMPRESS_TYPE = CompressorType.getByName(ConfigurationFactory.getInstance().getConfig( + ConfigurationKeys.CLIENT_UNDO_COMPRESS_TYPE, DEFAULT_CLIENT_UNDO_COMPRESS_TYPE)); + + protected static final long ROLLBACK_INFO_COMPRESS_THRESHOLD = SizeUtil.size2Long(ConfigurationFactory.getInstance().getConfig( + ConfigurationKeys.CLIENT_UNDO_COMPRESS_THRESHOLD, DEFAULT_CLIENT_UNDO_COMPRESS_THRESHOLD)); + private static final ThreadLocal SERIALIZER_LOCAL = new ThreadLocal<>(); public static String getCurrentSerializer() { @@ -179,9 +194,10 @@ protected static boolean canUndo(int state) { return state == State.Normal.getValue(); } - protected String buildContext(String serializer) { + protected String buildContext(String serializer, CompressorType compressorType) { Map map = new HashMap<>(); map.put(UndoLogConstants.SERIALIZER_KEY, serializer); + map.put(UndoLogConstants.COMPRESSOR_TYPE_KEY, compressorType.name()); return CollectionUtils.encodeMap(map); } @@ -213,12 +229,17 @@ public void flushUndoLogs(ConnectionProxy cp) throws SQLException { UndoLogParser parser = UndoLogParserFactory.getInstance(); byte[] undoLogContent = parser.encode(branchUndoLog); + CompressorType compressorType = CompressorType.NONE; + if (needCompress(undoLogContent)) { + compressorType = ROLLBACK_INFO_COMPRESS_TYPE; + undoLogContent = CompressorFactory.getCompressor(compressorType.getCode()).compress(undoLogContent); + } + if (LOGGER.isDebugEnabled()) { LOGGER.debug("Flushing UNDO LOG: {}", new String(undoLogContent, Constants.DEFAULT_CHARSET)); } - insertUndoLogWithNormal(xid, branchId, buildContext(parser.getName()), undoLogContent, - cp.getTargetConnection()); + insertUndoLogWithNormal(xid, branchId, buildContext(parser.getName(), compressorType), undoLogContent, cp.getTargetConnection()); } /** @@ -382,8 +403,8 @@ protected abstract void insertUndoLogWithGlobalFinished(String xid, long branchI * @param conn sql connection * @throws SQLException */ - protected abstract void insertUndoLogWithNormal(String xid, long branchId, String rollbackCtx, - byte[] undoLogContent, Connection conn) throws SQLException; + protected abstract void insertUndoLogWithNormal(String xid, long branchId, String rollbackCtx, byte[] undoLogContent, + Connection conn) throws SQLException; /** * RollbackInfo to bytes @@ -392,5 +413,22 @@ protected abstract void insertUndoLogWithNormal(String xid, long branchId, Strin * @return * @throws SQLException */ - protected abstract byte[] getRollbackInfo(ResultSet rs) throws SQLException; + protected byte[] getRollbackInfo(ResultSet rs) throws SQLException { + byte[] rollbackInfo = rs.getBytes(ClientTableColumnsName.UNDO_LOG_ROLLBACK_INFO); + + String rollbackInfoContext = rs.getString(ClientTableColumnsName.UNDO_LOG_CONTEXT); + Map context = CollectionUtils.decodeMap(rollbackInfoContext); + CompressorType compressorType = CompressorType.getByName(context.getOrDefault(UndoLogConstants.COMPRESSOR_TYPE_KEY, + CompressorType.NONE.name())); + return CompressorFactory.getCompressor(compressorType.getCode()).decompress(rollbackInfo); + } + + /** + * if the undoLogContent is big enough to be compress + * @param undoLogContent + * @return + */ + protected boolean needCompress(byte[] undoLogContent) { + return ROLLBACK_INFO_COMPRESS_ENABLE && undoLogContent.length > ROLLBACK_INFO_COMPRESS_THRESHOLD; + } } diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/UndoLogConstants.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/UndoLogConstants.java index 38227c0db8f..6e30c7fd19a 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/UndoLogConstants.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/UndoLogConstants.java @@ -29,4 +29,6 @@ public interface UndoLogConstants { String DEFAULT_SERIALIZER = ConfigurationFactory.getInstance() .getConfig(ConfigurationKeys.TRANSACTION_UNDO_LOG_SERIALIZATION, DEFAULT_TRANSACTION_UNDO_LOG_SERIALIZATION); + + String COMPRESSOR_TYPE_KEY = "compressorType"; } diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java index 229e1814cec..79302409260 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java @@ -15,15 +15,14 @@ */ package io.seata.rm.datasource.undo.mysql; -import java.sql.Blob; import java.sql.Connection; import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; import io.seata.common.loader.LoadLevel; import io.seata.common.util.BlobUtils; +import io.seata.core.compressor.CompressorType; import io.seata.core.constants.ClientTableColumnsName; import io.seata.rm.datasource.undo.AbstractUndoLogManager; import io.seata.rm.datasource.undo.UndoLogParser; @@ -46,11 +45,11 @@ public class MySQLUndoLogManager extends AbstractUndoLogManager { " (" + ClientTableColumnsName.UNDO_LOG_BRANCH_XID + ", " + ClientTableColumnsName.UNDO_LOG_XID + ", " + ClientTableColumnsName.UNDO_LOG_CONTEXT + ", " + ClientTableColumnsName.UNDO_LOG_ROLLBACK_INFO + ", " + ClientTableColumnsName.UNDO_LOG_LOG_STATUS + ", " + ClientTableColumnsName.UNDO_LOG_LOG_CREATED + ", " - + ClientTableColumnsName.UNDO_LOG_LOG_MODIFIED + ")" + - " VALUES (?, ?, ?, ?, ?, now(6), now(6))"; + + ClientTableColumnsName.UNDO_LOG_LOG_MODIFIED + ")" + + " VALUES (?, ?, ?, ?, ?, now(6), now(6))"; private static final String DELETE_UNDO_LOG_BY_CREATE_SQL = "DELETE FROM " + UNDO_LOG_TABLE_NAME + - " WHERE log_created <= ? LIMIT ?"; + " WHERE " + ClientTableColumnsName.UNDO_LOG_LOG_CREATED + " <= ? LIMIT ?"; @Override public int deleteUndoLogByLogCreated(Date logCreated, int limitRows, Connection conn) throws SQLException { @@ -71,26 +70,18 @@ public int deleteUndoLogByLogCreated(Date logCreated, int limitRows, Connection } @Override - protected void insertUndoLogWithNormal(String xid, long branchId, String rollbackCtx, - byte[] undoLogContent, Connection conn) throws SQLException { + protected void insertUndoLogWithNormal(String xid, long branchId, String rollbackCtx, byte[] undoLogContent, + Connection conn) throws SQLException { insertUndoLog(xid, branchId, rollbackCtx, undoLogContent, State.Normal, conn); } - @Override - protected byte[] getRollbackInfo(ResultSet rs) throws SQLException { - Blob b = rs.getBlob(ClientTableColumnsName.UNDO_LOG_ROLLBACK_INFO); - byte[] rollbackInfo = BlobUtils.blob2Bytes(b); - return rollbackInfo; - } - @Override protected void insertUndoLogWithGlobalFinished(String xid, long branchId, UndoLogParser parser, Connection conn) throws SQLException { - insertUndoLog(xid, branchId, buildContext(parser.getName()), - parser.getDefaultContent(), State.GlobalFinished, conn); + insertUndoLog(xid, branchId, buildContext(parser.getName(), CompressorType.NONE), parser.getDefaultContent(), State.GlobalFinished, conn); } - private void insertUndoLog(String xid, long branchId, String rollbackCtx, - byte[] undoLogContent, State state, Connection conn) throws SQLException { + private void insertUndoLog(String xid, long branchId, String rollbackCtx, byte[] undoLogContent, + State state, Connection conn) throws SQLException { try (PreparedStatement pst = conn.prepareStatement(INSERT_UNDO_LOG_SQL)) { pst.setLong(1, branchId); pst.setString(2, xid); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoLogManager.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoLogManager.java index 88c524d2d02..e5dbfedb327 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoLogManager.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoLogManager.java @@ -15,8 +15,15 @@ */ package io.seata.rm.datasource.undo.oracle; + +import java.io.ByteArrayInputStream; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.Date; + import io.seata.common.loader.LoadLevel; -import io.seata.common.util.BlobUtils; +import io.seata.core.compressor.CompressorType; import io.seata.core.constants.ClientTableColumnsName; import io.seata.rm.datasource.undo.AbstractUndoLogManager; import io.seata.rm.datasource.undo.UndoLogParser; @@ -24,14 +31,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.ByteArrayInputStream; -import java.sql.Blob; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Date; - /** * @author jsbxyyx */ @@ -41,12 +40,15 @@ public class OracleUndoLogManager extends AbstractUndoLogManager { private static final Logger LOGGER = LoggerFactory.getLogger(OracleUndoLogManager.class); - private static final String INSERT_UNDO_LOG_SQL = "INSERT INTO " + UNDO_LOG_TABLE_NAME + "\n" + - "\t(id,branch_id, xid,context, rollback_info, log_status, log_created, log_modified)\n" + - "VALUES (UNDO_LOG_SEQ.nextval,?, ?,?, ?, ?, sysdate, sysdate)"; + private static final String INSERT_UNDO_LOG_SQL = "INSERT INTO " + UNDO_LOG_TABLE_NAME + + " (" + ClientTableColumnsName.UNDO_LOG_ID + "," + ClientTableColumnsName.UNDO_LOG_BRANCH_XID + ", " + + ClientTableColumnsName.UNDO_LOG_XID + ", " + ClientTableColumnsName.UNDO_LOG_CONTEXT + ", " + + ClientTableColumnsName.UNDO_LOG_ROLLBACK_INFO + ", " + ClientTableColumnsName.UNDO_LOG_LOG_STATUS + ", " + + ClientTableColumnsName.UNDO_LOG_LOG_CREATED + ", " + ClientTableColumnsName.UNDO_LOG_LOG_MODIFIED + ")" + + "VALUES (UNDO_LOG_SEQ.nextval, ?, ?, ?, ?, ?, sysdate, sysdate)"; private static final String DELETE_UNDO_LOG_BY_CREATE_SQL = "DELETE FROM " + UNDO_LOG_TABLE_NAME + - " WHERE log_created <= ? and ROWNUM <= ?"; + " WHERE " + ClientTableColumnsName.UNDO_LOG_LOG_CREATED + " <= ? and ROWNUM <= ?"; @Override public int deleteUndoLogByLogCreated(Date logCreated, int limitRows, Connection conn) throws SQLException { @@ -67,27 +69,20 @@ public int deleteUndoLogByLogCreated(Date logCreated, int limitRows, Connection } @Override - protected void insertUndoLogWithNormal(String xid, long branchId, String rollbackCtx, - byte[] undoLogContent, Connection conn) throws SQLException { + protected void insertUndoLogWithNormal(String xid, long branchId, String rollbackCtx, byte[] undoLogContent, + Connection conn) throws SQLException { insertUndoLog(xid, branchId,rollbackCtx, undoLogContent, State.Normal, conn); } - @Override - protected byte[] getRollbackInfo(ResultSet rs) throws SQLException { - Blob b = rs.getBlob(ClientTableColumnsName.UNDO_LOG_ROLLBACK_INFO); - byte[] rollbackInfo = BlobUtils.blob2Bytes(b); - return rollbackInfo; - } - @Override protected void insertUndoLogWithGlobalFinished(String xid, long branchId, UndoLogParser parser, Connection conn) throws SQLException { - insertUndoLog(xid, branchId, buildContext(parser.getName()), - parser.getDefaultContent(), State.GlobalFinished, conn); + insertUndoLog(xid, branchId, buildContext(parser.getName(), CompressorType.NONE), parser.getDefaultContent(), + State.GlobalFinished, conn); } - private void insertUndoLog(String xid, long branchID, String rollbackCtx, - byte[] undoLogContent, State state, Connection conn) throws SQLException { + private void insertUndoLog(String xid, long branchID, String rollbackCtx, byte[] undoLogContent, + State state, Connection conn) throws SQLException { try (PreparedStatement pst = conn.prepareStatement(INSERT_UNDO_LOG_SQL)) { pst.setLong(1, branchID); pst.setString(2, xid); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/PostgresqlUndoLogManager.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/PostgresqlUndoLogManager.java index 7621b9f58d2..0facf727a61 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/PostgresqlUndoLogManager.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/PostgresqlUndoLogManager.java @@ -15,16 +15,17 @@ */ package io.seata.rm.datasource.undo.postgresql; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.Date; + import io.seata.common.loader.LoadLevel; +import io.seata.core.compressor.CompressorType; import io.seata.core.constants.ClientTableColumnsName; import io.seata.rm.datasource.undo.AbstractUndoLogManager; import io.seata.rm.datasource.undo.UndoLogParser; import io.seata.sqlparser.util.JdbcConstants; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,13 +37,17 @@ public class PostgresqlUndoLogManager extends AbstractUndoLogManager { private static final Logger LOGGER = LoggerFactory.getLogger(PostgresqlUndoLogManager.class); - private static final String INSERT_UNDO_LOG_SQL = "INSERT INTO " + UNDO_LOG_TABLE_NAME + "\n" + - "\t(id,branch_id, xid,context, rollback_info, log_status, log_created, log_modified)\n" + - "VALUES (nextval('undo_log_id_seq'),?, ?,?, ?, ?, now(), now())"; + private static final String INSERT_UNDO_LOG_SQL = "INSERT INTO " + UNDO_LOG_TABLE_NAME + + " (" + ClientTableColumnsName.UNDO_LOG_ID + "," + ClientTableColumnsName.UNDO_LOG_BRANCH_XID + ", " + + ClientTableColumnsName.UNDO_LOG_XID + ", " + ClientTableColumnsName.UNDO_LOG_CONTEXT + ", " + + ClientTableColumnsName.UNDO_LOG_ROLLBACK_INFO + ", " + ClientTableColumnsName.UNDO_LOG_LOG_STATUS + ", " + + ClientTableColumnsName.UNDO_LOG_LOG_CREATED + ", " + ClientTableColumnsName.UNDO_LOG_LOG_MODIFIED + ")" + + "VALUES (nextval('undo_log_id_seq'), ?, ?, ?, ?, ?, now(), now())"; - private static final String DELETE_UNDO_LOG_BY_CREATE_SQL = "DELETE FROM " + UNDO_LOG_TABLE_NAME + " WHERE ID IN (" + - "SELECT ID FROM " + UNDO_LOG_TABLE_NAME + " WHERE LOG_CREATED <= ? LIMIT ?" + - ")"; + private static final String DELETE_UNDO_LOG_BY_CREATE_SQL = "DELETE FROM " + UNDO_LOG_TABLE_NAME + " WHERE " + + ClientTableColumnsName.UNDO_LOG_ID + " IN (" + + "SELECT " + ClientTableColumnsName.UNDO_LOG_ID + " FROM " + UNDO_LOG_TABLE_NAME + + " WHERE " + ClientTableColumnsName.UNDO_LOG_LOG_CREATED + " <= ? LIMIT ?" + ")"; @Override public int deleteUndoLogByLogCreated(Date logCreated, int limitRows, Connection conn) throws SQLException { @@ -69,26 +74,20 @@ public int deleteUndoLogByLogCreated(Date logCreated, int limitRows, Connection } @Override - protected void insertUndoLogWithNormal(String xid, long branchID, String rollbackCtx, - byte[] undoLogContent, Connection conn) throws SQLException { + protected void insertUndoLogWithNormal(String xid, long branchID, String rollbackCtx, byte[] undoLogContent, + Connection conn) throws SQLException { insertUndoLog(xid, branchID, rollbackCtx, undoLogContent, State.Normal, conn); } - @Override - protected byte[] getRollbackInfo(ResultSet rs) throws SQLException { - byte[] rollbackInfo = rs.getBytes(ClientTableColumnsName.UNDO_LOG_ROLLBACK_INFO); - return rollbackInfo; - } - @Override protected void insertUndoLogWithGlobalFinished(String xid, long branchId, UndoLogParser parser, Connection conn) throws SQLException { - insertUndoLog(xid, branchId, buildContext(parser.getName()), - parser.getDefaultContent(), State.GlobalFinished, conn); + insertUndoLog(xid, branchId, buildContext(parser.getName(), CompressorType.NONE), parser.getDefaultContent(), + State.GlobalFinished, conn); } - private void insertUndoLog(String xid, long branchID, String rollbackCtx, - byte[] undoLogContent, State state, Connection conn) throws SQLException { + private void insertUndoLog(String xid, long branchID, String rollbackCtx, byte[] undoLogContent, + State state, Connection conn) throws SQLException { PreparedStatement pst = null; try { pst = conn.prepareStatement(INSERT_UNDO_LOG_SQL); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/SqlGenerateUtilsTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/SqlGenerateUtilsTest.java index 5d4ce1d5a17..0a56ec3c6a4 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/SqlGenerateUtilsTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/SqlGenerateUtilsTest.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package io.seata.rm.datasource; import java.sql.SQLException; diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/UndoLogManagerTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/UndoLogManagerTest.java index 85856b702b0..8498485296f 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/UndoLogManagerTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/UndoLogManagerTest.java @@ -87,5 +87,4 @@ public void testAppendInParam() { AbstractUndoLogManager.appendInParam(APPEND_IN_SIZE, sqlBuilder); assertThat(sqlBuilder.toString()).isEqualTo(THE_APPEND_IN_SIZE_PARAM_STRING); } - } diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/h2/keyword/H2KeywordChecker.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/h2/keyword/H2KeywordChecker.java index 6b853cb9af0..46f19169652 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/h2/keyword/H2KeywordChecker.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/h2/keyword/H2KeywordChecker.java @@ -1,3 +1,18 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package io.seata.rm.datasource.undo.h2.keyword; import io.seata.common.loader.LoadLevel; diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManagerTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManagerTest.java index 7fb3a462ef0..c6a9f26613b 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManagerTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManagerTest.java @@ -15,21 +15,34 @@ */ package io.seata.rm.datasource.undo.mysql; +import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.SQLException; import java.sql.Types; +import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; import com.alibaba.druid.pool.DruidDataSource; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import io.seata.core.compressor.CompressorType; import io.seata.rm.datasource.ConnectionContext; import io.seata.rm.datasource.ConnectionProxy; import io.seata.rm.datasource.DataSourceProxy; import io.seata.rm.datasource.mock.MockDriver; +import io.seata.rm.datasource.sql.struct.Row; +import io.seata.rm.datasource.sql.struct.TableMeta; +import io.seata.rm.datasource.sql.struct.TableRecords; +import io.seata.rm.datasource.undo.AbstractUndoLogManager; +import io.seata.rm.datasource.undo.BranchUndoLog; +import io.seata.rm.datasource.undo.SQLUndoLog; +import io.seata.rm.datasource.undo.UndoLogParser; +import io.seata.rm.datasource.undo.UndoLogParserFactory; import io.seata.rm.datasource.undo.parser.JacksonUndoLogParser; +import io.seata.sqlparser.SQLType; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -60,6 +73,8 @@ public class MySQLUndoLogManagerTest { private MySQLUndoLogManager undoLogManager; + private TableMeta tableMeta; + @BeforeEach public void init() throws SQLException { MockDriver mockDriver = new MockDriver(returnValueColumnLabels, returnValue, columnMetas, indexMetas); @@ -70,6 +85,8 @@ public void init() throws SQLException { dataSourceProxy = new DataSourceProxy(dataSource); connectionProxy = new ConnectionProxy(dataSourceProxy, dataSource.getConnection().getConnection()); undoLogManager = new MySQLUndoLogManager(); + tableMeta = new TableMeta(); + tableMeta.setTableName("table_plain_executor_test"); } @Test @@ -112,19 +129,72 @@ public void testBatchDeleteUndoLog() { } @Test - public void testFlushUndoLogs() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + public void testFlushUndoLogs() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, NoSuchFieldException { connectionProxy.bind("xid"); ConnectionContext context = connectionProxy.getContext(); Method method = context.getClass().getDeclaredMethod("setBranchId", Long.class); method.setAccessible(true); method.invoke(context, 1L); + SQLUndoLog undoLogItem = getUndoLogItem(1); + undoLogItem.setTableName("test"); + Method appendUndoItemMethod = context.getClass().getDeclaredMethod("appendUndoItem", SQLUndoLog.class); + appendUndoItemMethod.setAccessible(true); + appendUndoItemMethod.invoke(context, undoLogItem); Assertions.assertDoesNotThrow(() -> undoLogManager.flushUndoLogs(connectionProxy)); } + @Test + public void testNeedCompress() throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { + SQLUndoLog smallUndoItem = getUndoLogItem(1); + BranchUndoLog smallBranchUndoLog = new BranchUndoLog(); + smallBranchUndoLog.setBranchId(1L); + smallBranchUndoLog.setXid("test_xid"); + smallBranchUndoLog.setSqlUndoLogs(Collections.singletonList(smallUndoItem)); + UndoLogParser parser = UndoLogParserFactory.getInstance(); + byte[] smallUndoLogContent = parser.encode(smallBranchUndoLog); + + Method method = AbstractUndoLogManager.class.getDeclaredMethod("needCompress", byte[].class); + method.setAccessible(true); + Assertions.assertFalse((Boolean) method.invoke(undoLogManager, smallUndoLogContent)); + + SQLUndoLog hugeUndoItem = getUndoLogItem(10000); + BranchUndoLog hugeBranchUndoLog = new BranchUndoLog(); + hugeBranchUndoLog.setBranchId(2L); + hugeBranchUndoLog.setXid("test_xid1"); + hugeBranchUndoLog.setSqlUndoLogs(Collections.singletonList(hugeUndoItem)); + byte[] hugeUndoLogContent = parser.encode(hugeBranchUndoLog); + Assertions.assertTrue((Boolean) method.invoke(undoLogManager, hugeUndoLogContent)); + } + @Test public void testUndo() throws SQLException { Assertions.assertDoesNotThrow(() -> undoLogManager.undo(dataSourceProxy, "xid", 1L)); } + + private SQLUndoLog getUndoLogItem(int size) throws NoSuchFieldException, IllegalAccessException { + SQLUndoLog sqlUndoLog = new SQLUndoLog(); + sqlUndoLog.setTableName("table_plain_executor_test"); + sqlUndoLog.setSqlType(SQLType.INSERT); + sqlUndoLog.setTableMeta(tableMeta); + + Field rowsField = TableRecords.class.getDeclaredField("rows"); + rowsField.setAccessible(true); + + List rows = new ArrayList<>(size); + for (int i = 0; i < size; i ++) { + Row row = new Row(); + row.add(new io.seata.rm.datasource.sql.struct.Field("id", 1, "value_id_" + i)); + row.add(new io.seata.rm.datasource.sql.struct.Field("name", 1, "value_name_" + i)); + rows.add(row); + } + + sqlUndoLog.setAfterImage(TableRecords.empty(tableMeta)); + TableRecords afterImage = new TableRecords(tableMeta); + rowsField.set(afterImage, rows); + sqlUndoLog.setAfterImage(afterImage); + + return sqlUndoLog; + } } diff --git a/script/client/conf/file.conf b/script/client/conf/file.conf index ac70dcb7e0f..08aef22beef 100644 --- a/script/client/conf/file.conf +++ b/script/client/conf/file.conf @@ -65,6 +65,14 @@ client { onlyCareUpdateColumns = true logSerialization = "jackson" logTable = "undo_log" + compress { + enable = true + # allow zip, gzip, deflater, 7z, lz4, bzip2, default is zip + type = zip + # if rollback info size > threshold, then will be compress + # allow k m g t + threshold = 64k + } } } log { diff --git a/script/client/spring/application.properties b/script/client/spring/application.properties index 2bd4f05331f..2704a7fcdd5 100755 --- a/script/client/spring/application.properties +++ b/script/client/spring/application.properties @@ -40,6 +40,9 @@ seata.client.undo.data-validation=true seata.client.undo.log-serialization=jackson seata.client.undo.only-care-update-columns=true seata.client.undo.log-table=undo_log +seata.client.undo.compress.enable=true +seata.client.undo.compress.type=zip +seata.client.undo.compress.threshold=64k seata.log.exception-rate=100 seata.service.vgroup-mapping.my_test_tx_group=default seata.service.grouplist.default=127.0.0.1:8091 diff --git a/script/client/spring/application.yml b/script/client/spring/application.yml index 12e2583a3e3..e0934cd2557 100755 --- a/script/client/spring/application.yml +++ b/script/client/spring/application.yml @@ -30,6 +30,10 @@ seata: log-serialization: jackson log-table: undo_log only-care-update-columns: true + compress: + enable: true + type: zip + threshold: 64k service: vgroup-mapping: my_test_tx_group: default diff --git a/script/config-center/config.txt b/script/config-center/config.txt index a73f60767f7..53ef859b82b 100644 --- a/script/config-center/config.txt +++ b/script/config-center/config.txt @@ -71,6 +71,9 @@ client.undo.onlyCareUpdateColumns=true server.undo.logSaveDays=7 server.undo.logDeletePeriod=86400000 client.undo.logTable=undo_log +client.undo.compress.enable=true +client.undo.compress.type=zip +client.undo.compress.threshold=64k log.exceptionRate=100 transport.serialization=seata transport.compressor=none diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java index 38d9c6e30db..2f1572633c6 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java @@ -28,6 +28,7 @@ import io.seata.spring.boot.autoconfigure.properties.client.TmProperties; import io.seata.spring.boot.autoconfigure.properties.client.TransportProperties; import io.seata.spring.boot.autoconfigure.properties.client.UndoProperties; +import io.seata.spring.boot.autoconfigure.properties.client.UndoCompressProperties; import io.seata.spring.boot.autoconfigure.properties.config.ConfigApolloProperties; import io.seata.spring.boot.autoconfigure.properties.config.ConfigConsulProperties; import io.seata.spring.boot.autoconfigure.properties.config.ConfigCustomProperties; @@ -90,6 +91,7 @@ import static io.seata.spring.boot.autoconfigure.StarterConstants.THREAD_FACTORY_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.TRANSPORT_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.UNDO_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.COMPRESS_PREFIX; /** * @author xingfudeshi@gmail.com @@ -102,15 +104,15 @@ public class SeataAutoConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(SeataAutoConfiguration.class); public SeataAutoConfiguration(SeataProperties seataProperties, - RmProperties rmProperties, TmProperties tmProperties, LockProperties lockProperties, - ServiceProperties serviceProperties, ShutdownProperties shutdownProperties, ThreadFactoryProperties threadFactoryProperties, - UndoProperties undoProperties, LogProperties logProperties, TransportProperties transportProperties, - ConfigProperties configProperties, ConfigFileProperties configFileProperties, RegistryProperties registryProperties, - ConfigNacosProperties configNacosProperties, ConfigConsulProperties configConsulProperties, ConfigZooKeeperProperties configZooKeeperProperties, - ConfigApolloProperties configApolloProperties, ConfigEtcd3Properties configEtcd3Properties, ConfigCustomProperties configCustomProperties, - RegistryConsulProperties registryConsulProperties, RegistryEtcd3Properties registryEtcd3Properties, RegistryEurekaProperties registryEurekaProperties, - RegistryNacosProperties registryNacosProperties, RegistryRedisProperties registryRedisProperties, RegistrySofaProperties registrySofaProperties, - RegistryZooKeeperProperties registryZooKeeperProperties, RegistryCustomProperties registryCustomProperties) { + RmProperties rmProperties, TmProperties tmProperties, LockProperties lockProperties, + ServiceProperties serviceProperties, ShutdownProperties shutdownProperties, ThreadFactoryProperties threadFactoryProperties, + UndoProperties undoProperties, UndoCompressProperties undoCompressProperties, LogProperties logProperties, TransportProperties transportProperties, + ConfigProperties configProperties, ConfigFileProperties configFileProperties, RegistryProperties registryProperties, + ConfigNacosProperties configNacosProperties, ConfigConsulProperties configConsulProperties, ConfigZooKeeperProperties configZooKeeperProperties, + ConfigApolloProperties configApolloProperties, ConfigEtcd3Properties configEtcd3Properties, ConfigCustomProperties configCustomProperties, + RegistryConsulProperties registryConsulProperties, RegistryEtcd3Properties registryEtcd3Properties, RegistryEurekaProperties registryEurekaProperties, + RegistryNacosProperties registryNacosProperties, RegistryRedisProperties registryRedisProperties, RegistrySofaProperties registrySofaProperties, + RegistryZooKeeperProperties registryZooKeeperProperties, RegistryCustomProperties registryCustomProperties) { PROPERTY_BEAN_MAP.put(SEATA_PREFIX, seataProperties); PROPERTY_BEAN_MAP.put(CLIENT_RM_PREFIX, rmProperties); @@ -120,6 +122,7 @@ public SeataAutoConfiguration(SeataProperties seataProperties, PROPERTY_BEAN_MAP.put(SHUTDOWN_PREFIX, shutdownProperties); PROPERTY_BEAN_MAP.put(THREAD_FACTORY_PREFIX, threadFactoryProperties); PROPERTY_BEAN_MAP.put(UNDO_PREFIX, undoProperties); + PROPERTY_BEAN_MAP.put(COMPRESS_PREFIX, undoCompressProperties); PROPERTY_BEAN_MAP.put(LOG_PREFIX, logProperties); PROPERTY_BEAN_MAP.put(TRANSPORT_PREFIX, transportProperties); PROPERTY_BEAN_MAP.put(CONFIG_PREFIX, configProperties); diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java index fab24863996..b478ebd0f9c 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java @@ -34,6 +34,7 @@ public interface StarterConstants { String LOCK_PREFIX = CLIENT_RM_PREFIX + ".lock"; String UNDO_PREFIX = CLIENT_PREFIX + ".undo"; String LOG_PREFIX = SEATA_PREFIX + ".log"; + String COMPRESS_PREFIX = UNDO_PREFIX + ".compress"; String REGISTRY_PREFIX = SEATA_PREFIX + ".registry"; String REGISTRY_NACOS_PREFIX = REGISTRY_PREFIX + ".nacos"; diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/client/UndoCompressProperties.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/client/UndoCompressProperties.java new file mode 100755 index 00000000000..1e490e95087 --- /dev/null +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/client/UndoCompressProperties.java @@ -0,0 +1,60 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.spring.boot.autoconfigure.properties.client; + +import io.seata.common.DefaultValues; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import static io.seata.spring.boot.autoconfigure.StarterConstants.COMPRESS_PREFIX; + +/** + * @author chd + */ +@Component +@ConfigurationProperties(prefix = COMPRESS_PREFIX) +public class UndoCompressProperties { + private boolean enable = DefaultValues.DEFAULT_CLIENT_UNDO_COMPRESS_ENABLE; + private String type = DefaultValues.DEFAULT_CLIENT_UNDO_COMPRESS_TYPE; + private String threshold = DefaultValues.DEFAULT_CLIENT_UNDO_COMPRESS_THRESHOLD; + + public boolean isEnable() { + return enable; + } + + public UndoCompressProperties setEnable(boolean enable) { + this.enable = enable; + return this; + } + + public String getType() { + return type; + } + + public UndoCompressProperties setType(String type) { + this.type = type; + return this; + } + + public String getThreshold() { + return threshold; + } + + public UndoCompressProperties setThreshold(String threshold) { + this.threshold = threshold; + return this; + } +} diff --git a/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 8df86013dc8..a49c6d1601f 100644 --- a/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -150,6 +150,24 @@ "sourceType": "io.seata.spring.boot.autoconfigure.properties.client.UndoProperties", "defaultValue": true }, + { + "name": "seata.client.undo.compress.enable", + "type": "java.lang.Boolean", + "sourceType": "io.seata.spring.boot.autoconfigure.properties.client.UndoCompressProperties", + "defaultValue": true + }, + { + "name": "seata.client.undo.compress.type", + "type": "java.lang.String", + "sourceType": "io.seata.spring.boot.autoconfigure.properties.client.UndoCompressProperties", + "defaultValue": "zip" + }, + { + "name": "seata.client.undo.compress.threshold", + "type": "java.lang.String", + "sourceType": "io.seata.spring.boot.autoconfigure.properties.client.UndoCompressProperties", + "defaultValue": "64k" + }, { "name": "seata.client.log.exception-rate", "type": "java.lang.Integer", @@ -392,6 +410,17 @@ } ] }, + { + "name": "seata.client.undo.compress.type", + "providers": [ + { + "name": "handle-as", + "parameters": { + "target": "io.seata.core.compressor.CompressorType" + } + } + ] + }, { "name": "seata.transport.thread-factory.worker-thread-size", "providers": [ diff --git a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/struct/NotPlaceholderExpr.java b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/struct/NotPlaceholderExpr.java index a60cfbfa103..5d67c0b7e44 100644 --- a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/struct/NotPlaceholderExpr.java +++ b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/struct/NotPlaceholderExpr.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package io.seata.sqlparser.struct; /** From 607571689abfb3de74971d14d4f4ca7f908d1861 Mon Sep 17 00:00:00 2001 From: jsbxyyx Date: Wed, 16 Dec 2020 22:16:56 +0800 Subject: [PATCH 09/93] bugfix: configuration cache get value cast exception. (#3293) --- .../test/java/io/seata/common/BranchDO.java | 16 +++ .../io/seata/common/rpc/RpcStatusTest.java | 16 +++ .../io/seata/config/ConfigurationCache.java | 98 ++++++++++++++++--- .../ConfigurationCacheTests.java | 60 ++++++++++++ .../undo/h2/keyword/H2KeywordChecker.java | 1 + 5 files changed, 176 insertions(+), 15 deletions(-) create mode 100644 config/seata-config-core/src/test/java/io.seata.config/ConfigurationCacheTests.java diff --git a/common/src/test/java/io/seata/common/BranchDO.java b/common/src/test/java/io/seata/common/BranchDO.java index 83121f8b859..b9935d26de5 100644 --- a/common/src/test/java/io/seata/common/BranchDO.java +++ b/common/src/test/java/io/seata/common/BranchDO.java @@ -1,3 +1,19 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package io.seata.common; import java.util.Date; diff --git a/common/src/test/java/io/seata/common/rpc/RpcStatusTest.java b/common/src/test/java/io/seata/common/rpc/RpcStatusTest.java index 97615dab3b6..8dac9448408 100644 --- a/common/src/test/java/io/seata/common/rpc/RpcStatusTest.java +++ b/common/src/test/java/io/seata/common/rpc/RpcStatusTest.java @@ -1,3 +1,19 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package io.seata.common.rpc; import org.junit.jupiter.api.Assertions; diff --git a/config/seata-config-core/src/main/java/io/seata/config/ConfigurationCache.java b/config/seata-config-core/src/main/java/io/seata/config/ConfigurationCache.java index c7ea9305473..470f9b28135 100644 --- a/config/seata-config-core/src/main/java/io/seata/config/ConfigurationCache.java +++ b/config/seata-config-core/src/main/java/io/seata/config/ConfigurationCache.java @@ -13,12 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package io.seata.config; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; + +import io.seata.common.util.DurationUtil; import io.seata.common.util.StringUtils; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; @@ -32,7 +36,7 @@ public class ConfigurationCache implements ConfigurationChangeListener { private static final String METHOD_LATEST_CONFIG = METHOD_PREFIX + "LatestConfig"; - private static final ConcurrentHashMap CONFIG_CACHE = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap CONFIG_CACHE = new ConcurrentHashMap<>(); private Map> configListenersMap = new HashMap<>(); @@ -64,13 +68,19 @@ public static ConfigurationCache getInstance() { @Override public void onChangeEvent(ConfigurationChangeEvent event) { - Object oldValue = CONFIG_CACHE.get(event.getDataId()); - if (null == oldValue || !oldValue.equals(event.getNewValue())) { - if (StringUtils.isNotBlank(event.getNewValue())) { - CONFIG_CACHE.put(event.getDataId(), event.getNewValue()); + ObjectWrapper wrapper = CONFIG_CACHE.get(event.getDataId()); + // The wrapper.data only exists in the cache when it is not null. + if (StringUtils.isNotBlank(event.getNewValue())) { + if (wrapper == null) { + CONFIG_CACHE.put(event.getDataId(), new ObjectWrapper(event.getNewValue(), null)); } else { - CONFIG_CACHE.remove(event.getDataId()); + Object newValue = new ObjectWrapper(event.getNewValue(), null).convertData(wrapper.getType()); + if (!Objects.equals(wrapper.getData(), newValue)) { + CONFIG_CACHE.put(event.getDataId(), new ObjectWrapper(newValue, wrapper.getType())); + } } + } else { + CONFIG_CACHE.remove(event.getDataId()); } } @@ -78,19 +88,22 @@ public Configuration proxy(Configuration originalConfiguration) { return (Configuration)Enhancer.create(Configuration.class, (MethodInterceptor)(proxy, method, args, methodProxy) -> { if (method.getName().startsWith(METHOD_PREFIX) - && !method.getName().equalsIgnoreCase(METHOD_LATEST_CONFIG)) { + && !method.getName().equalsIgnoreCase(METHOD_LATEST_CONFIG)) { String rawDataId = (String)args[0]; - Object result = CONFIG_CACHE.get(rawDataId); - if (null == result) { - result = method.invoke(originalConfiguration, args); + ObjectWrapper wrapper = CONFIG_CACHE.get(rawDataId); + String type = method.getName().substring(METHOD_PREFIX.length()); + if (!ObjectWrapper.supportType(type)) { + type = null; + } + if (null == wrapper) { + Object result = method.invoke(originalConfiguration, args); + // The wrapper.data only exists in the cache when it is not null. if (result != null) { - CONFIG_CACHE.put(rawDataId, result); + wrapper = new ObjectWrapper(result, type); + CONFIG_CACHE.put(rawDataId, wrapper); } } - if (null != result && method.getReturnType().equals(String.class)) { - return String.valueOf(result); - } - return result; + return wrapper == null ? null : wrapper.convertData(type); } return method.invoke(originalConfiguration, args); }); @@ -103,4 +116,59 @@ private static class ConfigurationCacheInstance { public void clear() { CONFIG_CACHE.clear(); } + + private static class ObjectWrapper { + + static final String INT = "Int"; + static final String BOOLEAN = "Boolean"; + static final String DURATION = "Duration"; + static final String LONG = "Long"; + static final String SHORT = "Short"; + + private final Object data; + private final String type; + + ObjectWrapper(Object data, String type) { + this.data = data; + this.type = type; + } + + public Object getData() { + return data; + } + + public String getType() { + return type; + } + + public Object convertData(String aType) { + if (data != null && Objects.equals(type, aType)) { + return data; + } + if (data != null) { + if (INT.equals(aType)) { + return Integer.parseInt(data.toString()); + } else if (BOOLEAN.equals(aType)) { + return Boolean.parseBoolean(data.toString()); + } else if (DURATION.equals(aType)) { + return DurationUtil.parse(data.toString()); + } else if (LONG.equals(aType)) { + return Long.parseLong(data.toString()); + } else if (SHORT.equals(aType)) { + return Short.parseShort(data.toString()); + } + return String.valueOf(data); + } + return null; + } + + public static boolean supportType(String type) { + return INT.equalsIgnoreCase(type) + || BOOLEAN.equalsIgnoreCase(type) + || DURATION.equalsIgnoreCase(type) + || LONG.equalsIgnoreCase(type) + || SHORT.equalsIgnoreCase(type); + } + } + } diff --git a/config/seata-config-core/src/test/java/io.seata.config/ConfigurationCacheTests.java b/config/seata-config-core/src/test/java/io.seata.config/ConfigurationCacheTests.java new file mode 100644 index 00000000000..12e7d6149fb --- /dev/null +++ b/config/seata-config-core/src/test/java/io.seata.config/ConfigurationCacheTests.java @@ -0,0 +1,60 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.seata.config; + +import io.seata.common.util.DurationUtil; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.time.Duration; + +/** + * @author jsbxyyx + */ +public class ConfigurationCacheTests { + + @Test + public void testChangeValue() throws Exception { + Configuration configuration = new FileConfiguration("registry"); + configuration = ConfigurationCache.getInstance().proxy(configuration); + configuration.getBoolean("aaa", false); + ConfigurationCache.getInstance().onChangeEvent(new ConfigurationChangeEvent("aaa", "true")); + boolean aaa = configuration.getBoolean("aaa", false); + Assertions.assertTrue(aaa); + + configuration.getShort("bbb", (short) 0); + ConfigurationCache.getInstance().onChangeEvent(new ConfigurationChangeEvent("bbb", "1")); + short bbb = configuration.getShort("bbb", (short) 0); + Assertions.assertEquals((short) 1, bbb); + + configuration.getDuration("ccc", Duration.ZERO); + ConfigurationCache.getInstance().onChangeEvent(new ConfigurationChangeEvent("ccc", "1s")); + Duration ccc = configuration.getDuration("ccc", Duration.ZERO); + Assertions.assertEquals(ccc, DurationUtil.parse("1s")); + + configuration.getInt("ddd", 0); + ConfigurationCache.getInstance().onChangeEvent(new ConfigurationChangeEvent("ddd", "1")); + int ddd = configuration.getInt("ddd", 0); + Assertions.assertEquals(1, ddd); + + configuration.getLong("eee", 0); + ConfigurationCache.getInstance().onChangeEvent(new ConfigurationChangeEvent("eee", "1")); + long eee = configuration.getLong("eee", 0); + Assertions.assertEquals((long) 1, eee); + } + +} diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/h2/keyword/H2KeywordChecker.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/h2/keyword/H2KeywordChecker.java index 46f19169652..d7660aad672 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/h2/keyword/H2KeywordChecker.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/h2/keyword/H2KeywordChecker.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package io.seata.rm.datasource.undo.h2.keyword; import io.seata.common.loader.LoadLevel; From de56e1703982074283c271ddc2d7211c99aa4fe4 Mon Sep 17 00:00:00 2001 From: jimin Date: Mon, 21 Dec 2020 09:55:49 +0800 Subject: [PATCH 10/93] optimize: optimize github action (#3385) --- .github/workflows/build.yml | 15 ++++++++------- .../PreparedStatementProxyTest.java | 13 ++++++++++++- .../rm/datasource/StatementProxyTest.java | 15 +++++++++++++++ .../exec/SelectForUpdateExecutorTest.java | 1 + .../undo/mysql/MySQLUndoLogManagerTest.java | 18 +++++++++++++++++- .../io/seata/rm/xa/ConnectionProxyXATest.java | 7 +++++++ .../io/seata/rm/xa/DataSourceProxyXATest.java | 6 ++++++ .../io.seata.sqlparser.SQLRecognizerFactory | 17 +++++++++++++++++ ...sqlparser.druid.SQLOperateRecognizerHolder | 19 +++++++++++++++++++ .../io.seata.sqlparser.util.DbTypeParser | 17 +++++++++++++++++ 10 files changed, 119 insertions(+), 9 deletions(-) create mode 100644 rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.SQLRecognizerFactory create mode 100644 rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.druid.SQLOperateRecognizerHolder create mode 100644 rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.util.DbTypeParser diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fe3cadc4595..d257cae269b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,18 +2,19 @@ name: build on: push: - branches: [ develop ] + branches: [ develop,master ] pull_request: - branches: [ develop ] + branches: [ develop,master ] jobs: build: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} strategy: + max-parallel: 1 matrix: java: [8, 11] - + os: [ ubuntu-18.04 ] steps: - uses: actions/checkout@v2 - name: Set up JDK @@ -33,9 +34,9 @@ jobs: REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }} # https://docs.github.com/cn/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context run: if [ "${{github.event_name}}" == "push" ] && [ "${{github.ref}}" == "refs/heads/develop" ]; then - mvn clean install -DskipTests=false -Dcheckstyle.skip=false -Dlicense.skip=false -P image -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn; - else - mvn clean install -DskipTests=false -Dcheckstyle.skip=false -Dlicense.skip=false -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn; + ./mvnw clean install -DskipTests=false -Dcheckstyle.skip=false -Dlicense.skip=false -P image -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn; + else + ./mvnw clean install -DskipTests=false -Dcheckstyle.skip=false -Dlicense.skip=false -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn; fi - name: Codecov uses: codecov/codecov-action@v1 \ No newline at end of file diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/PreparedStatementProxyTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/PreparedStatementProxyTest.java index 28352303ff0..cd7c58cb9df 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/PreparedStatementProxyTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/PreparedStatementProxyTest.java @@ -39,11 +39,18 @@ import com.alibaba.druid.pool.DruidDataSource; import com.google.common.collect.Lists; +import io.seata.common.loader.EnhancedServiceLoader; import io.seata.rm.datasource.mock.MockBlob; import io.seata.rm.datasource.mock.MockClob; import io.seata.rm.datasource.mock.MockConnection; import io.seata.rm.datasource.mock.MockDriver; +import io.seata.sqlparser.SQLRecognizerFactory; +import io.seata.sqlparser.SqlParserType; +import io.seata.sqlparser.druid.DruidDelegatingSQLRecognizerFactory; +import io.seata.sqlparser.druid.SQLOperateRecognizerHolder; +import io.seata.sqlparser.druid.SQLOperateRecognizerHolderFactory; import io.seata.sqlparser.struct.Null; +import io.seata.sqlparser.util.JdbcConstants; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -84,13 +91,17 @@ public static void init() throws SQLException { ConnectionProxy connectionProxy = new ConnectionProxy(dataSourceProxy, dataSource.getConnection().getConnection()); - String sql = "update from prepared_statement_proxy set name = ?"; + String sql = "update prepared_statement_proxy set name = ?"; PreparedStatement preparedStatement = mockDriver.createSeataMockPreparedStatement( (MockConnection)connectionProxy.getTargetConnection(), sql); preparedStatementProxy = new PreparedStatementProxy(connectionProxy, preparedStatement, sql); unusedConstructorPreparedStatementProxy = new TestUnusedConstructorPreparedStatementProxy(connectionProxy, preparedStatement); + EnhancedServiceLoader.load(SQLOperateRecognizerHolder.class, JdbcConstants.MYSQL, + SQLOperateRecognizerHolderFactory.class.getClassLoader()); + DruidDelegatingSQLRecognizerFactory recognizerFactory = (DruidDelegatingSQLRecognizerFactory) EnhancedServiceLoader + .load(SQLRecognizerFactory.class, SqlParserType.SQL_PARSER_TYPE_DRUID); } @Test diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/StatementProxyTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/StatementProxyTest.java index 9e6684bfcf3..4a9ff503513 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/StatementProxyTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/StatementProxyTest.java @@ -25,16 +25,27 @@ import com.alibaba.druid.mock.MockStatement; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.util.jdbc.ResultSetMetaDataBase; + import com.google.common.collect.Lists; +import io.seata.common.loader.EnhancedServiceLoader; import io.seata.rm.datasource.mock.MockConnection; import io.seata.rm.datasource.mock.MockDriver; +import io.seata.sqlparser.SQLRecognizerFactory; +import io.seata.sqlparser.SqlParserType; +import io.seata.sqlparser.druid.DruidDelegatingSQLRecognizerFactory; +import io.seata.sqlparser.druid.SQLOperateRecognizerHolder; +import io.seata.sqlparser.druid.SQLOperateRecognizerHolderFactory; +import io.seata.sqlparser.util.JdbcConstants; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author will */ +@TestMethodOrder(MethodOrderer.Alphanumeric.class) public class StatementProxyTest { private static List returnValueColumnLabels = Lists.newArrayList("id", "name"); @@ -76,6 +87,10 @@ public static void init() throws SQLException { ((MockStatement) statement).setGeneratedKeys(mockResultSet); statementProxy = new StatementProxy(connectionProxy, statement); + EnhancedServiceLoader.load(SQLOperateRecognizerHolder.class, JdbcConstants.MYSQL, + SQLOperateRecognizerHolderFactory.class.getClassLoader()); + DruidDelegatingSQLRecognizerFactory recognizerFactory = (DruidDelegatingSQLRecognizerFactory) EnhancedServiceLoader + .load(SQLRecognizerFactory.class, SqlParserType.SQL_PARSER_TYPE_DRUID); } @Test diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/SelectForUpdateExecutorTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/SelectForUpdateExecutorTest.java index 87f30fd58f6..46d4ca0f75a 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/SelectForUpdateExecutorTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/SelectForUpdateExecutorTest.java @@ -50,6 +50,7 @@ public class SelectForUpdateExecutorTest { @BeforeAll public static void init() { + RootContext.unbind(); List returnValueColumnLabels = Lists.newArrayList("id", "name"); Object[][] returnValue = new Object[][] { new Object[] {1, "Tom"}, diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManagerTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManagerTest.java index c6a9f26613b..b0741ace6ae 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManagerTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManagerTest.java @@ -26,9 +26,10 @@ import java.util.List; import com.alibaba.druid.pool.DruidDataSource; + import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import io.seata.core.compressor.CompressorType; +import io.seata.common.loader.EnhancedServiceLoader; import io.seata.rm.datasource.ConnectionContext; import io.seata.rm.datasource.ConnectionProxy; import io.seata.rm.datasource.DataSourceProxy; @@ -42,8 +43,15 @@ import io.seata.rm.datasource.undo.UndoLogParser; import io.seata.rm.datasource.undo.UndoLogParserFactory; import io.seata.rm.datasource.undo.parser.JacksonUndoLogParser; +import io.seata.sqlparser.SQLRecognizerFactory; import io.seata.sqlparser.SQLType; +import io.seata.sqlparser.SqlParserType; +import io.seata.sqlparser.druid.DruidDelegatingSQLRecognizerFactory; +import io.seata.sqlparser.druid.SQLOperateRecognizerHolder; +import io.seata.sqlparser.druid.SQLOperateRecognizerHolderFactory; +import io.seata.sqlparser.util.JdbcConstants; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -75,6 +83,14 @@ public class MySQLUndoLogManagerTest { private TableMeta tableMeta; + @BeforeAll + public static void setup(){ + EnhancedServiceLoader.load(SQLOperateRecognizerHolder.class, JdbcConstants.MYSQL, + SQLOperateRecognizerHolderFactory.class.getClassLoader()); + DruidDelegatingSQLRecognizerFactory recognizerFactory = (DruidDelegatingSQLRecognizerFactory) EnhancedServiceLoader + .load(SQLRecognizerFactory.class, SqlParserType.SQL_PARSER_TYPE_DRUID); + } + @BeforeEach public void init() throws SQLException { MockDriver mockDriver = new MockDriver(returnValueColumnLabels, returnValue, columnMetas, indexMetas); diff --git a/rm-datasource/src/test/java/io/seata/rm/xa/ConnectionProxyXATest.java b/rm-datasource/src/test/java/io/seata/rm/xa/ConnectionProxyXATest.java index 8960a700230..66eea05ac43 100644 --- a/rm-datasource/src/test/java/io/seata/rm/xa/ConnectionProxyXATest.java +++ b/rm-datasource/src/test/java/io/seata/rm/xa/ConnectionProxyXATest.java @@ -15,6 +15,7 @@ */ package io.seata.rm.xa; +import io.seata.core.context.RootContext; import io.seata.core.model.BranchType; import io.seata.core.model.Resource; import io.seata.core.model.ResourceManager; @@ -22,6 +23,7 @@ import io.seata.rm.DefaultResourceManager; import io.seata.rm.datasource.xa.ConnectionProxyXA; import io.seata.rm.datasource.xa.StatementProxyXA; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -203,4 +205,9 @@ public void testCreateStatement() throws Throwable { Statement statement = connectionProxyXA.createStatement(); Assertions.assertTrue(statement instanceof StatementProxyXA); } + + @AfterAll + public static void tearDown(){ + RootContext.unbind(); + } } diff --git a/rm-datasource/src/test/java/io/seata/rm/xa/DataSourceProxyXATest.java b/rm-datasource/src/test/java/io/seata/rm/xa/DataSourceProxyXATest.java index bc6af43bd91..f0d83c16820 100644 --- a/rm-datasource/src/test/java/io/seata/rm/xa/DataSourceProxyXATest.java +++ b/rm-datasource/src/test/java/io/seata/rm/xa/DataSourceProxyXATest.java @@ -22,6 +22,7 @@ import io.seata.rm.datasource.mock.MockDataSource; import io.seata.rm.datasource.xa.ConnectionProxyXA; import io.seata.rm.datasource.xa.DataSourceProxyXA; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -86,4 +87,9 @@ public void testGetConnection() throws SQLException { Connection connectionInXA = xaConnection.getConnection(); Assertions.assertTrue(connectionInXA instanceof JDBC4ConnectionWrapper); } + + @AfterAll + public static void tearDown(){ + RootContext.unbind(); + } } diff --git a/rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.SQLRecognizerFactory b/rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.SQLRecognizerFactory new file mode 100644 index 00000000000..f4b2f829968 --- /dev/null +++ b/rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.SQLRecognizerFactory @@ -0,0 +1,17 @@ +# +# Copyright 1999-2019 Seata.io Group. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +io.seata.sqlparser.druid.DruidDelegatingSQLRecognizerFactory diff --git a/rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.druid.SQLOperateRecognizerHolder b/rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.druid.SQLOperateRecognizerHolder new file mode 100644 index 00000000000..e7a870fdf31 --- /dev/null +++ b/rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.druid.SQLOperateRecognizerHolder @@ -0,0 +1,19 @@ +# +# Copyright 1999-2019 Seata.io Group. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +io.seata.sqlparser.druid.mysql.MySQLOperateRecognizerHolder +io.seata.sqlparser.druid.oracle.OracleOperateRecognizerHolder +io.seata.sqlparser.druid.postgresql.PostgresqlOperateRecognizerHolder \ No newline at end of file diff --git a/rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.util.DbTypeParser b/rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.util.DbTypeParser new file mode 100644 index 00000000000..983f0c35c92 --- /dev/null +++ b/rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.util.DbTypeParser @@ -0,0 +1,17 @@ +# +# Copyright 1999-2019 Seata.io Group. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +io.seata.sqlparser.druid.DruidDelegatingDbTypeParser From 80ea72af38108807bb52ef82fde9906b8e150837 Mon Sep 17 00:00:00 2001 From: selfishlover <1581926496@qq.com> Date: Mon, 21 Dec 2020 10:42:54 +0800 Subject: [PATCH 11/93] bugfix: fix AsyncWorker potential OOM problem (#3258) --- .../io/seata/rm/datasource/AsyncWorker.java | 271 ++++++++---------- .../rm/datasource/DataSourceManager.java | 50 +--- .../seata/rm/datasource/AsyncWorkerTest.java | 73 +++++ 3 files changed, 208 insertions(+), 186 deletions(-) create mode 100644 rm-datasource/src/test/java/io/seata/rm/datasource/AsyncWorkerTest.java diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/AsyncWorker.java b/rm-datasource/src/main/java/io/seata/rm/datasource/AsyncWorker.java index f673943c0c0..c95a0f05be4 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/AsyncWorker.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/AsyncWorker.java @@ -17,28 +17,25 @@ import java.sql.Connection; import java.sql.SQLException; -import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashSet; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; -import io.seata.common.exception.NotSupportYetException; -import io.seata.common.exception.ShouldNeverHappenException; +import com.google.common.collect.Lists; import io.seata.common.thread.NamedThreadFactory; -import io.seata.common.util.CollectionUtils; import io.seata.config.ConfigurationFactory; -import io.seata.core.exception.TransactionException; import io.seata.core.model.BranchStatus; -import io.seata.core.model.BranchType; -import io.seata.core.model.ResourceManagerInbound; -import io.seata.rm.DefaultResourceManager; +import io.seata.rm.datasource.undo.UndoLogManager; import io.seata.rm.datasource.undo.UndoLogManagerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,7 +48,7 @@ * * @author sharajava */ -public class AsyncWorker implements ResourceManagerInbound { +public class AsyncWorker { private static final Logger LOGGER = LoggerFactory.getLogger(AsyncWorker.class); @@ -59,170 +56,152 @@ public class AsyncWorker implements ResourceManagerInbound { private static final int UNDOLOG_DELETE_LIMIT_SIZE = 1000; + private static final int ASYNC_COMMIT_BUFFER_LIMIT = ConfigurationFactory.getInstance().getInt( + CLIENT_ASYNC_COMMIT_BUFFER_LIMIT, DEFAULT_CLIENT_ASYNC_COMMIT_BUFFER_LIMIT); - private static class Phase2Context { + private final DataSourceManager dataSourceManager; - /** - * Instantiates a new Phase 2 context. - * - * @param branchType the branchType - * @param xid the xid - * @param branchId the branch id - * @param resourceId the resource id - * @param applicationData the application data - */ - public Phase2Context(BranchType branchType, String xid, long branchId, String resourceId, - String applicationData) { - this.xid = xid; - this.branchId = branchId; - this.resourceId = resourceId; - this.applicationData = applicationData; - this.branchType = branchType; - } + private final BlockingQueue commitQueue; - /** - * The Xid. - */ - String xid; - /** - * The Branch id. - */ - long branchId; - /** - * The Resource id. - */ - String resourceId; - /** - * The Application data. - */ - String applicationData; + private final ScheduledExecutorService scheduledExecutor; - /** - * the branch Type - */ - BranchType branchType; - } + public AsyncWorker(DataSourceManager dataSourceManager) { + this.dataSourceManager = dataSourceManager; - private static int ASYNC_COMMIT_BUFFER_LIMIT = ConfigurationFactory.getInstance().getInt( - CLIENT_ASYNC_COMMIT_BUFFER_LIMIT, DEFAULT_CLIENT_ASYNC_COMMIT_BUFFER_LIMIT); + LOGGER.info("Async Commit Buffer Limit: {}", ASYNC_COMMIT_BUFFER_LIMIT); + commitQueue = new LinkedBlockingQueue<>(ASYNC_COMMIT_BUFFER_LIMIT); - private static final BlockingQueue ASYNC_COMMIT_BUFFER = new LinkedBlockingQueue<>( - ASYNC_COMMIT_BUFFER_LIMIT); + ThreadFactory threadFactory = new NamedThreadFactory("AsyncWorker", 2, true); + scheduledExecutor = new ScheduledThreadPoolExecutor(2, threadFactory); + scheduledExecutor.scheduleAtFixedRate(this::doBranchCommitSafely, 10, 1000, TimeUnit.MILLISECONDS); + } - @Override - public BranchStatus branchCommit(BranchType branchType, String xid, long branchId, String resourceId, - String applicationData) throws TransactionException { - if (!ASYNC_COMMIT_BUFFER.offer(new Phase2Context(branchType, xid, branchId, resourceId, applicationData))) { - LOGGER.warn("Async commit buffer is FULL. Rejected branch [{}/{}] will be handled by housekeeping later.", branchId, xid); - } + public BranchStatus branchCommit(String xid, long branchId, String resourceId) { + Phase2Context context = new Phase2Context(xid, branchId, resourceId); + addToCommitQueue(context); return BranchStatus.PhaseTwo_Committed; } /** - * Init. + * try add context to commitQueue directly, if fail(which means the queue is full), + * then doBranchCommit urgently(so that the queue could be empty again) and retry this process. */ - public synchronized void init() { - LOGGER.info("Async Commit Buffer Limit: {}", ASYNC_COMMIT_BUFFER_LIMIT); - ScheduledExecutorService timerExecutor = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("AsyncWorker", 1, true)); - timerExecutor.scheduleAtFixedRate(() -> { - try { + private void addToCommitQueue(Phase2Context context) { + if (commitQueue.offer(context)) { + return; + } + CompletableFuture.runAsync(this::doBranchCommitSafely, scheduledExecutor) + .thenRun(() -> addToCommitQueue(context)); + } + + void doBranchCommitSafely() { + try { + doBranchCommit(); + } catch (Throwable e) { + LOGGER.error("Exception occur when doing branch commit", e); + } + } - doBranchCommits(); + private void doBranchCommit() { + if (commitQueue.isEmpty()) { + return; + } - } catch (Throwable e) { - LOGGER.info("Failed at async committing ... {}", e.getMessage()); + // transfer all context currently received to this list + List allContexts = new LinkedList<>(); + commitQueue.drainTo(allContexts); - } - }, 10, 1000 * 1, TimeUnit.MILLISECONDS); + // group context by their resourceId + Map> groupedContexts = groupedByResourceId(allContexts); + + groupedContexts.forEach(this::dealWithGroupedContexts); + } + + Map> groupedByResourceId(List contexts) { + Map> groupedContexts = new HashMap<>(DEFAULT_RESOURCE_SIZE); + contexts.forEach(context -> { + List group = groupedContexts.computeIfAbsent(context.resourceId, key -> new LinkedList<>()); + group.add(context); + }); + return groupedContexts; } - private void doBranchCommits() { - if (ASYNC_COMMIT_BUFFER.isEmpty()) { + private void dealWithGroupedContexts(String resourceId, List contexts) { + DataSourceProxy dataSourceProxy = dataSourceManager.get(resourceId); + if (dataSourceProxy == null) { + LOGGER.warn("Failed to find resource for {}", resourceId); return; } - Map> mappedContexts = new HashMap<>(DEFAULT_RESOURCE_SIZE); - List contextsGroupedByResourceId; - while (!ASYNC_COMMIT_BUFFER.isEmpty()) { - Phase2Context commitContext = ASYNC_COMMIT_BUFFER.poll(); - contextsGroupedByResourceId = CollectionUtils.computeIfAbsent(mappedContexts, commitContext.resourceId, key -> new ArrayList<>()); - contextsGroupedByResourceId.add(commitContext); + Connection conn; + try { + conn = dataSourceProxy.getPlainConnection(); + } catch (SQLException sqle) { + LOGGER.error("Failed to get connection for async committing on {}", resourceId, sqle); + return; } - for (Map.Entry> entry : mappedContexts.entrySet()) { - Connection conn = null; - DataSourceProxy dataSourceProxy; + UndoLogManager undoLogManager = UndoLogManagerFactory.getUndoLogManager(dataSourceProxy.getDbType()); + + // split contexts into several lists, with each list contain no more element than limit size + List> splitByLimit = Lists.partition(contexts, UNDOLOG_DELETE_LIMIT_SIZE); + splitByLimit.forEach(partition -> deleteUndoLog(conn, undoLogManager, partition)); + } + + private void deleteUndoLog(Connection conn, UndoLogManager undoLogManager, List contexts) { + Set xids = new LinkedHashSet<>(contexts.size()); + Set branchIds = new LinkedHashSet<>(contexts.size()); + contexts.forEach(context -> { + xids.add(context.xid); + branchIds.add(context.branchId); + }); + + try { + undoLogManager.batchDeleteUndoLog(xids, branchIds, conn); + if (!conn.getAutoCommit()) { + conn.commit(); + } + } catch (SQLException e) { + LOGGER.error("Failed to batch delete undo log", e); + try { + conn.rollback(); + } catch (SQLException rollbackEx) { + LOGGER.error("Failed to rollback JDBC resource after deleting undo log failed", rollbackEx); + } + } finally { try { - try { - DataSourceManager resourceManager = (DataSourceManager) DefaultResourceManager.get() - .getResourceManager(BranchType.AT); - dataSourceProxy = resourceManager.get(entry.getKey()); - if (dataSourceProxy == null) { - throw new ShouldNeverHappenException("Failed to find resource on " + entry.getKey()); - } - conn = dataSourceProxy.getPlainConnection(); - } catch (SQLException sqle) { - LOGGER.warn("Failed to get connection for async committing on " + entry.getKey(), sqle); - continue; - } - contextsGroupedByResourceId = entry.getValue(); - Set xids = new LinkedHashSet<>(UNDOLOG_DELETE_LIMIT_SIZE); - Set branchIds = new LinkedHashSet<>(UNDOLOG_DELETE_LIMIT_SIZE); - for (Phase2Context commitContext : contextsGroupedByResourceId) { - xids.add(commitContext.xid); - branchIds.add(commitContext.branchId); - int maxSize = Math.max(xids.size(), branchIds.size()); - if (maxSize == UNDOLOG_DELETE_LIMIT_SIZE) { - try { - UndoLogManagerFactory.getUndoLogManager(dataSourceProxy.getDbType()).batchDeleteUndoLog( - xids, branchIds, conn); - } catch (Exception ex) { - LOGGER.warn("Failed to batch delete undo log [" + branchIds + "/" + xids + "]", ex); - } - xids.clear(); - branchIds.clear(); - } - } - - if (CollectionUtils.isEmpty(xids) || CollectionUtils.isEmpty(branchIds)) { - return; - } - - try { - UndoLogManagerFactory.getUndoLogManager(dataSourceProxy.getDbType()).batchDeleteUndoLog(xids, - branchIds, conn); - } catch (Exception ex) { - LOGGER.warn("Failed to batch delete undo log [" + branchIds + "/" + xids + "]", ex); - } - - if (!conn.getAutoCommit()) { - conn.commit(); - } - } catch (Throwable e) { - LOGGER.error(e.getMessage(), e); - try { - if (conn != null) { - conn.rollback(); - } - } catch (SQLException rollbackEx) { - LOGGER.warn("Failed to rollback JDBC resource while deleting undo_log ", rollbackEx); - } - } finally { - if (conn != null) { - try { - conn.close(); - } catch (SQLException closeEx) { - LOGGER.warn("Failed to close JDBC resource while deleting undo_log ", closeEx); - } - } + conn.close(); + } catch (SQLException closeEx) { + LOGGER.error("Failed to close JDBC resource after deleting undo log", closeEx); } } } - @Override - public BranchStatus branchRollback(BranchType branchType, String xid, long branchId, String resourceId, - String applicationData) throws TransactionException { - throw new NotSupportYetException(); + static class Phase2Context { + /** + * AT Phase 2 context + * @param xid the xid + * @param branchId the branch id + * @param resourceId the resource id + */ + public Phase2Context(String xid, long branchId, String resourceId) { + this.xid = xid; + this.branchId = branchId; + this.resourceId = resourceId; + } + + /** + * The Xid. + */ + String xid; + /** + * The Branch id. + */ + long branchId; + /** + * The Resource id. + */ + String resourceId; } } diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceManager.java b/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceManager.java index be3979cd82b..90fca3898b1 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceManager.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceManager.java @@ -21,7 +21,6 @@ import io.seata.common.exception.NotSupportYetException; import io.seata.common.exception.ShouldNeverHappenException; -import io.seata.common.executor.Initialize; import io.seata.core.context.RootContext; import io.seata.core.exception.RmTransactionException; import io.seata.core.exception.TransactionException; @@ -30,7 +29,6 @@ import io.seata.core.model.BranchStatus; import io.seata.core.model.BranchType; import io.seata.core.model.Resource; -import io.seata.core.model.ResourceManagerInbound; import io.seata.core.protocol.ResultCode; import io.seata.core.protocol.transaction.GlobalLockQueryRequest; import io.seata.core.protocol.transaction.GlobalLockQueryResponse; @@ -45,33 +43,22 @@ * * @author sharajava */ -public class DataSourceManager extends AbstractResourceManager implements Initialize { +public class DataSourceManager extends AbstractResourceManager { private static final Logger LOGGER = LoggerFactory.getLogger(DataSourceManager.class); - private ResourceManagerInbound asyncWorker; + private final AsyncWorker asyncWorker = new AsyncWorker(this); - private Map dataSourceCache = new ConcurrentHashMap<>(); - - /** - * Sets async worker. - * - * @param asyncWorker the async worker - */ - public void setAsyncWorker(ResourceManagerInbound asyncWorker) { - this.asyncWorker = asyncWorker; - } + private final Map dataSourceCache = new ConcurrentHashMap<>(); @Override - public boolean lockQuery(BranchType branchType, String resourceId, String xid, String lockKeys) - throws TransactionException { + public boolean lockQuery(BranchType branchType, String resourceId, String xid, String lockKeys) throws TransactionException { + GlobalLockQueryRequest request = new GlobalLockQueryRequest(); + request.setXid(xid); + request.setLockKey(lockKeys); + request.setResourceId(resourceId); try { - GlobalLockQueryRequest request = new GlobalLockQueryRequest(); - request.setXid(xid); - request.setLockKey(lockKeys); - request.setResourceId(resourceId); - - GlobalLockQueryResponse response = null; + GlobalLockQueryResponse response; if (RootContext.inGlobalTransaction() || RootContext.requireGlobalLock()) { response = (GlobalLockQueryResponse) RmNettyRemotingClient.getInstance().sendSyncRequest(request); } else { @@ -88,16 +75,6 @@ public boolean lockQuery(BranchType branchType, String resourceId, String xid, S } catch (RuntimeException rex) { throw new RmTransactionException(TransactionExceptionCode.LockableCheckFailed, "Runtime", rex); } - - } - - /** - * Init. - * - * @param asyncWorker the async worker - */ - public synchronized void initAsyncWorker(ResourceManagerInbound asyncWorker) { - setAsyncWorker(asyncWorker); } /** @@ -106,13 +83,6 @@ public synchronized void initAsyncWorker(ResourceManagerInbound asyncWorker) { public DataSourceManager() { } - @Override - public void init() { - AsyncWorker asyncWorker = new AsyncWorker(); - asyncWorker.init(); - initAsyncWorker(asyncWorker); - } - @Override public void registerResource(Resource resource) { DataSourceProxy dataSourceProxy = (DataSourceProxy) resource; @@ -138,7 +108,7 @@ public DataSourceProxy get(String resourceId) { @Override public BranchStatus branchCommit(BranchType branchType, String xid, long branchId, String resourceId, String applicationData) throws TransactionException { - return asyncWorker.branchCommit(branchType, xid, branchId, resourceId, applicationData); + return asyncWorker.branchCommit(xid, branchId, resourceId); } @Override diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/AsyncWorkerTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/AsyncWorkerTest.java new file mode 100644 index 00000000000..a7b831de320 --- /dev/null +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/AsyncWorkerTest.java @@ -0,0 +1,73 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.rm.datasource; + +import io.seata.core.model.BranchStatus; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +class AsyncWorkerTest { + + private final AsyncWorker worker = new AsyncWorker(null); + + private final Random random = new Random(); + + @Test + void branchCommit() { + BranchStatus status = worker.branchCommit("test", 0, null); + assertEquals(BranchStatus.PhaseTwo_Committed, status, "should return PhaseTwo_Committed"); + } + + @Test + void doBranchCommitSafely() { + assertDoesNotThrow(worker::doBranchCommitSafely, "this method should never throw anything"); + } + + @Test + void groupedByResourceId() { + List contexts = getRandomContexts(); + Map> groupedContexts = worker.groupedByResourceId(contexts); + groupedContexts.forEach((resourceId, group) -> group.forEach(context -> { + String message = "each context in the group should has the same resourceId"; + assertEquals(resourceId, context.resourceId, message); + })); + } + + private List getRandomContexts() { + return random.ints().limit(16) + .mapToObj(String::valueOf) + .flatMap(this::generateContextStream) + .collect(Collectors.toList()); + } + + private Stream generateContextStream(String resourceId) { + int size = random.nextInt(10); + return IntStream.range(0, size).mapToObj(i -> buildContext(resourceId)); + } + + private AsyncWorker.Phase2Context buildContext(String resourceId) { + return new AsyncWorker.Phase2Context("test", 0, resourceId); + } +} \ No newline at end of file From 5d4c9915ef3db59ab49e3ca441409b828f1819c8 Mon Sep 17 00:00:00 2001 From: Hover Ruan Date: Mon, 21 Dec 2020 10:43:42 +0800 Subject: [PATCH 12/93] optimize: get config from file system even without file: prefix (#3341) --- .../io/seata/config/FileConfiguration.java | 104 +++++++++++------- 1 file changed, 64 insertions(+), 40 deletions(-) diff --git a/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java b/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java index 6c89ec9609c..3bbd2f08a2e 100644 --- a/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java +++ b/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java @@ -19,6 +19,7 @@ import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -112,7 +113,7 @@ public FileConfiguration(String name, boolean allowDynamicRefresh) { targetFilePath = file.getPath(); fileConfig = FileConfigFactory.load(file, name); } - /** + /* * For seata-server side the conf file should always exists. * For application(or client) side,conf file may not exists when using seata-spring-boot-starter */ @@ -135,58 +136,81 @@ private File getConfigFile(String name) { if (name == null) { throw new IllegalArgumentException("name can't be null"); } - String filePath = null; + boolean filePathCustom = name.startsWith(SYS_FILE_RESOURCE_PREFIX); - if (filePathCustom) { - filePath = name.substring(SYS_FILE_RESOURCE_PREFIX.length()); - } else { - // projectDir first - filePath = this.getClass().getClassLoader().getResource("").getPath() + name; - } - filePath = URLDecoder.decode(filePath, "utf-8"); - File targetFile = new File(filePath); - if (!targetFile.exists()) { - for (String s : FileConfigFactory.getSuffixSet()) { - targetFile = new File(filePath + ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR + s); - if (targetFile.exists()) { - if (LOGGER.isInfoEnabled()) { - LOGGER.info("The configuration file used is {}", targetFile.getPath()); - } - return targetFile; - } - } - } else { + String filePath = filePathCustom ? name.substring(SYS_FILE_RESOURCE_PREFIX.length()) : name; + String decodedPath = URLDecoder.decode(filePath, StandardCharsets.UTF_8.name()); + + File targetFile = getFileFromFileSystem(decodedPath); + if (targetFile != null) { if (LOGGER.isInfoEnabled()) { - LOGGER.info("The configuration file used is {}", name); + LOGGER.info("The configuration file used is {}", targetFile.getPath()); } return targetFile; } + if (!filePathCustom) { - URL resource = this.getClass().getClassLoader().getResource(name); - if (resource == null) { - for (String s : FileConfigFactory.getSuffixSet()) { - resource = this.getClass().getClassLoader().getResource(name + ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR + s); - if (resource != null) { - if (LOGGER.isInfoEnabled()) { - LOGGER.info("The configuration file used is {}", resource.getPath()); - } - String path = resource.getPath(); - path = URLDecoder.decode(path, "utf-8"); - return new File(path); - } - } - } else { + File classpathFile = getFileFromClasspath(name); + if (classpathFile != null) { + return classpathFile; + } + } + } catch (UnsupportedEncodingException e) { + LOGGER.error("decode name error: {}", e.getMessage(), e); + } + + return null; + } + + private File getFileFromFileSystem(String decodedPath) { + String[] tryPaths = new String[] { + // first: project dir + this.getClass().getClassLoader().getResource("").getPath() + decodedPath, + // second: system path + decodedPath + }; + + for (String tryPath : tryPaths) { + File targetFile = new File(tryPath); + if (targetFile.exists()) { + return targetFile; + } + + // try to append config suffix + for (String s : FileConfigFactory.getSuffixSet()) { + targetFile = new File(tryPath + ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR + s); + if (targetFile.exists()) { + return targetFile; + } + } + } + + return null; + } + + private File getFileFromClasspath(String name) throws UnsupportedEncodingException { + URL resource = this.getClass().getClassLoader().getResource(name); + if (resource == null) { + for (String s : FileConfigFactory.getSuffixSet()) { + resource = this.getClass().getClassLoader().getResource(name + ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR + s); + if (resource != null) { if (LOGGER.isInfoEnabled()) { - LOGGER.info("The configuration file used is {}", name); + LOGGER.info("The configuration file used is {}", resource.getPath()); } String path = resource.getPath(); - path = URLDecoder.decode(path, "utf-8"); + path = URLDecoder.decode(path, StandardCharsets.UTF_8.name()); return new File(path); } } - } catch (UnsupportedEncodingException e) { - LOGGER.error("file not found--" + e.getMessage(), e); + } else { + if (LOGGER.isInfoEnabled()) { + LOGGER.info("The configuration file used is {}", name); + } + String path = resource.getPath(); + path = URLDecoder.decode(path, StandardCharsets.UTF_8.name()); + return new File(path); } + return null; } From 2bd39c9e7e034dea109c102961819aa7f0029d44 Mon Sep 17 00:00:00 2001 From: will <349071347@qq.com> Date: Tue, 22 Dec 2020 12:49:53 +0800 Subject: [PATCH 13/93] optimize: optimize StatementProxyTest unit test (#3383) --- .../java/io/seata/rm/datasource/StatementProxyTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/StatementProxyTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/StatementProxyTest.java index 4a9ff503513..8260ef81e7e 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/StatementProxyTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/StatementProxyTest.java @@ -30,12 +30,15 @@ import io.seata.common.loader.EnhancedServiceLoader; import io.seata.rm.datasource.mock.MockConnection; import io.seata.rm.datasource.mock.MockDriver; + import io.seata.sqlparser.SQLRecognizerFactory; import io.seata.sqlparser.SqlParserType; import io.seata.sqlparser.druid.DruidDelegatingSQLRecognizerFactory; import io.seata.sqlparser.druid.SQLOperateRecognizerHolder; import io.seata.sqlparser.druid.SQLOperateRecognizerHolderFactory; import io.seata.sqlparser.util.JdbcConstants; + +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.MethodOrderer; @@ -93,6 +96,11 @@ public static void init() throws SQLException { .load(SQLRecognizerFactory.class, SqlParserType.SQL_PARSER_TYPE_DRUID); } + @AfterEach + public void clear() throws SQLException { + statementProxy.clearBatch(); + } + @Test public void testStatementProxy() { Assertions.assertNotNull(statementProxy); @@ -116,6 +124,7 @@ public void testExecute() throws SQLException { Assertions.assertDoesNotThrow(() -> statementProxy.execute(sql, new int[]{1})); Assertions.assertDoesNotThrow(() -> statementProxy.execute(sql, new String[]{"id"})); Assertions.assertDoesNotThrow(() -> statementProxy.executeBatch()); + Assertions.assertDoesNotThrow(() -> statementProxy.clearBatch()); } @Test From 2598b167990415cfd132958d372924e91ccbe26b Mon Sep 17 00:00:00 2001 From: Ifdevil <384867771@qq.com> Date: Wed, 23 Dec 2020 11:59:11 +0800 Subject: [PATCH 14/93] test: add test case for tmClient (#3381) --- .../test/java/io/seata/tm/TMClientTest.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 tm/src/test/java/io/seata/tm/TMClientTest.java diff --git a/tm/src/test/java/io/seata/tm/TMClientTest.java b/tm/src/test/java/io/seata/tm/TMClientTest.java new file mode 100644 index 00000000000..8c21d3a2b9e --- /dev/null +++ b/tm/src/test/java/io/seata/tm/TMClientTest.java @@ -0,0 +1,37 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.tm; + +import io.seata.core.rpc.netty.TmNettyRemotingClient; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +/** + * test for tmClient + * @author Ifdevil + */ +public class TMClientTest { + + private static final String APPLICATION_ID = "my_app_test"; + private static final String SERVICE_GROUP = "my_test_tx_group"; + + @Test + public void testInit(){ + TMClient.init(APPLICATION_ID,SERVICE_GROUP); + TmNettyRemotingClient tmNettyRemotingClient = TmNettyRemotingClient.getInstance(); + Assertions.assertEquals(tmNettyRemotingClient.getTransactionServiceGroup(),SERVICE_GROUP); + } +} From 491a9d75de45a103e7c80a01853a1e552f7316b4 Mon Sep 17 00:00:00 2001 From: Yaoyu Li <573459407@qq.com> Date: Thu, 24 Dec 2020 11:36:07 +0800 Subject: [PATCH 15/93] feature: Saga support customize whether update last retry log (#3372) * feature: support customize if persist retry and compensate execution log --- .../java/io/seata/common/DefaultValues.java | 3 + .../core/constants/ConfigurationKeys.java | 10 ++ .../engine/config/DbStateMachineConfig.java | 6 + .../store/db/DbAndReportTcStateLogStore.java | 102 +++++++++++---- .../engine/store/db/StateLogStoreSqls.java | 12 +- .../impl/DefaultStateMachineConfig.java | 20 +++ .../ServiceTaskHandlerInterceptor.java | 1 + .../statelang/domain/ServiceTaskState.java | 14 +++ .../saga/statelang/domain/StateInstance.java | 14 +++ .../saga/statelang/domain/StateMachine.java | 14 +++ .../domain/impl/AbstractTaskState.java | 18 +++ .../domain/impl/StateInstanceImpl.java | 11 ++ .../domain/impl/StateMachineImpl.java | 20 +++ .../parser/impl/AbstractTaskStateParser.java | 12 ++ .../parser/impl/StateMachineParserImpl.java | 12 ++ script/client/conf/file.conf | 3 + script/client/saga/db/db2.sql | 1 + script/client/saga/db/h2.sql | 1 + script/client/saga/db/mysql.sql | 1 + script/client/saga/db/oracle.sql | 1 + script/client/saga/db/postgresql.sql | 3 +- script/client/spring/application.properties | 2 + script/client/spring/application.yml | 2 + .../properties/client/RmProperties.java | 20 +++ ...itional-spring-configuration-metadata.json | 12 ++ .../boot/autoconfigure/PropertiesTest.java | 2 + .../saga/engine/db/StateMachineDBTests.java | 93 ++++++++++++++ test/src/test/resources/file.conf | 2 + .../spring/statemachine_engine_db_test.xml | 2 + test/src/test/resources/saga/sql/db2_init.sql | 1 + test/src/test/resources/saga/sql/h2_init.sql | 1 + .../test/resources/saga/sql/mysql_init.sql | 1 + .../test/resources/saga/sql/oracle_init.sql | 1 + ...ang_with_compensation_and_sub_machine.json | 23 ++++ ...le_statelang_with_persist_update_mode.json | 116 ++++++++++++++++++ 35 files changed, 529 insertions(+), 28 deletions(-) create mode 100644 test/src/test/resources/saga/statelang/simple_statelang_with_persist_update_mode.json diff --git a/common/src/main/java/io/seata/common/DefaultValues.java b/common/src/main/java/io/seata/common/DefaultValues.java index 11c228e441b..971648ffeb4 100644 --- a/common/src/main/java/io/seata/common/DefaultValues.java +++ b/common/src/main/java/io/seata/common/DefaultValues.java @@ -33,6 +33,9 @@ public interface DefaultValues { boolean DEFAULT_CLIENT_TABLE_META_CHECK_ENABLE = false; boolean DEFAULT_TM_DEGRADE_CHECK = false; boolean DEFAULT_CLIENT_SAGA_BRANCH_REGISTER_ENABLE = false; + boolean DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE = false; + boolean DEFAULT_CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE = false; + /** * Shutdown timeout default 3s */ diff --git a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java index ede07f29150..036eae57582 100644 --- a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java +++ b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java @@ -133,6 +133,16 @@ public interface ConfigurationKeys { */ String CLIENT_SAGA_JSON_PARSER = CLIENT_RM_PREFIX + "sagaJsonParser"; + /** + * The constant CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE. + */ + String CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE = CLIENT_RM_PREFIX + "sagaRetryPersistModeUpdate"; + + /** + * The constant CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE. + */ + String CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE = CLIENT_RM_PREFIX + "sagaCompensatePersistModeUpdate"; + /** * The constant CLIENT_REPORT_RETRY_COUNT. */ diff --git a/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/config/DbStateMachineConfig.java b/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/config/DbStateMachineConfig.java index 0ccdab187b6..50f2fbf9da5 100644 --- a/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/config/DbStateMachineConfig.java +++ b/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/config/DbStateMachineConfig.java @@ -36,6 +36,8 @@ import static io.seata.common.DefaultValues.DEFAULT_CLIENT_REPORT_SUCCESS_ENABLE; import static io.seata.common.DefaultValues.DEFAULT_CLIENT_SAGA_BRANCH_REGISTER_ENABLE; +import static io.seata.common.DefaultValues.DEFAULT_CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE; +import static io.seata.common.DefaultValues.DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE; import static io.seata.common.DefaultValues.DEFAULT_SAGA_JSON_PARSER; /** @@ -66,6 +68,10 @@ public DbStateMachineConfig() { setSagaJsonParser(configuration.getConfig(ConfigurationKeys.CLIENT_SAGA_JSON_PARSER, DEFAULT_SAGA_JSON_PARSER)); this.applicationId = configuration.getConfig(ConfigurationKeys.APPLICATION_ID); this.txServiceGroup = configuration.getConfig(ConfigurationKeys.TX_SERVICE_GROUP); + setSagaRetryPersistModeUpdate(configuration.getBoolean(ConfigurationKeys.CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE, + DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE)); + setSagaCompensatePersistModeUpdate(configuration.getBoolean(ConfigurationKeys.CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE, + DEFAULT_CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE)); } } catch (Exception e) { LOGGER.warn("Load SEATA configuration failed, use default configuration instead.", e); diff --git a/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java b/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java index 9d3450d69fd..fcf41c42349 100644 --- a/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java +++ b/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java @@ -36,6 +36,8 @@ import io.seata.saga.engine.StateMachineConfig; import io.seata.saga.engine.config.DbStateMachineConfig; import io.seata.saga.engine.exception.EngineExecutionException; +import io.seata.saga.engine.impl.DefaultStateMachineConfig; +import io.seata.saga.engine.pcext.StateInstruction; import io.seata.saga.engine.pcext.utils.EngineUtils; import io.seata.saga.engine.sequence.SeqGenerator; import io.seata.saga.engine.serializer.Serializer; @@ -46,7 +48,9 @@ import io.seata.saga.statelang.domain.DomainConstants; import io.seata.saga.statelang.domain.ExecutionStatus; import io.seata.saga.statelang.domain.StateInstance; +import io.seata.saga.statelang.domain.StateMachine; import io.seata.saga.statelang.domain.StateMachineInstance; +import io.seata.saga.statelang.domain.impl.ServiceTaskStateImpl; import io.seata.saga.statelang.domain.impl.StateInstanceImpl; import io.seata.saga.statelang.domain.impl.StateMachineInstanceImpl; import io.seata.saga.tm.SagaTransactionalTemplate; @@ -90,11 +94,7 @@ public void recordStateMachineStarted(StateMachineInstance machineInstance, Proc //if parentId is not null, machineInstance is a SubStateMachine, do not start a new global transaction, //use parent transaction instead. String parentId = machineInstance.getParentId(); - if (StringUtils.hasLength(parentId)) { - if (StringUtils.isEmpty(machineInstance.getId())) { - machineInstance.setId(parentId); - } - } else { + if (StringUtils.isEmpty(parentId)) { beginTransaction(machineInstance, context); } @@ -263,28 +263,39 @@ public void recordStateMachineRestarted(StateMachineInstance machineInstance, Pr @Override public void recordStateStarted(StateInstance stateInstance, ProcessContext context) { if (stateInstance != null) { - //if this state is for retry, do not register branch, but generate id - if (StringUtils.hasLength(stateInstance.getStateIdRetriedFor())) { - stateInstance.setId(generateRetryStateInstanceId(stateInstance)); - } - //if this state is for compensation, do not register branch, but generate id - else if (StringUtils.hasLength(stateInstance.getStateIdCompensatedFor())) { + boolean isUpdateMode = isUpdateMode(stateInstance, context); - stateInstance.setId(generateCompensateStateInstanceId(stateInstance)); + // if this state is for retry, do not register branch + if (StringUtils.hasLength(stateInstance.getStateIdRetriedFor())) { + if (isUpdateMode) { + stateInstance.setId(stateInstance.getStateIdRetriedFor()); + } else { + // generate id by default + stateInstance.setId(generateRetryStateInstanceId(stateInstance)); + } } - else { + // if this state is for compensation, do not register branch + else if (StringUtils.hasLength(stateInstance.getStateIdCompensatedFor())) { + stateInstance.setId(generateCompensateStateInstanceId(stateInstance, isUpdateMode)); + } else { branchRegister(stateInstance, context); } - if (StringUtils.isEmpty(stateInstance.getId()) && seqGenerator != null) { stateInstance.setId(seqGenerator.generate(DomainConstants.SEQ_ENTITY_STATE_INST)); } stateInstance.setSerializedInputParams(paramsSerializer.serialize(stateInstance.getInputParams())); - executeUpdate(stateLogStoreSqls.getRecordStateStartedSql(dbType), STATE_INSTANCE_TO_STATEMENT_FOR_INSERT, - stateInstance); + if (!isUpdateMode) { + executeUpdate(stateLogStoreSqls.getRecordStateStartedSql(dbType), + STATE_INSTANCE_TO_STATEMENT_FOR_INSERT, stateInstance); + } else { + // if this retry/compensate state do not need persist, just update last inst + executeUpdate(stateLogStoreSqls.getUpdateStateExecutionStatusSql(dbType), + stateInstance.getStatus().name(), new Timestamp(System.currentTimeMillis()), + stateInstance.getMachineInstanceId(), stateInstance.getId()); + } } } @@ -376,9 +387,13 @@ private String generateRetryStateInstanceId(StateInstance stateInstance) { * @param stateInstance * @return */ - private String generateCompensateStateInstanceId(StateInstance stateInstance) { + private String generateCompensateStateInstanceId(StateInstance stateInstance, boolean isUpdateMode) { String originalCompensateStateInstId = stateInstance.getStateIdCompensatedFor(); int maxIndex = 1; + // if update mode, means update last compensate inst + if (isUpdateMode) { + return originalCompensateStateInstId + "-" + maxIndex; + } for (StateInstance aStateInstance : stateInstance.getStateMachineInstance().getStateList()) { if (aStateInstance != stateInstance && originalCompensateStateInstId.equals(aStateInstance.getStateIdCompensatedFor())) { @@ -405,6 +420,40 @@ private int getIdIndex(String stateInstanceId, String separator) { return -1; } + private boolean isUpdateMode(StateInstance stateInstance, ProcessContext context) { + DefaultStateMachineConfig stateMachineConfig = (DefaultStateMachineConfig)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_CONFIG); + StateInstruction instruction = context.getInstruction(StateInstruction.class); + ServiceTaskStateImpl state = (ServiceTaskStateImpl)instruction.getState(context); + StateMachine stateMachine = stateInstance.getStateMachineInstance().getStateMachine(); + + if (StringUtils.hasLength(stateInstance.getStateIdRetriedFor())) { + + if (null != state.isRetryPersistModeUpdate()) { + return state.isRetryPersistModeUpdate(); + } else if (null != stateMachine.isRetryPersistModeUpdate()) { + return stateMachine.isRetryPersistModeUpdate(); + } + return stateMachineConfig.isSagaRetryPersistModeUpdate(); + + } else if (StringUtils.hasLength(stateInstance.getStateIdCompensatedFor())) { + + // find if this compensate has been executed + for (StateInstance aStateInstance : stateInstance.getStateMachineInstance().getStateList()) { + if (aStateInstance.isForCompensation() && aStateInstance.getName().equals(stateInstance.getName())) { + if (null != state.isCompensatePersistModeUpdate()) { + return state.isCompensatePersistModeUpdate(); + } else if (null != stateMachine.isCompensatePersistModeUpdate()) { + return stateMachine.isCompensatePersistModeUpdate(); + } + return stateMachineConfig.isSagaCompensatePersistModeUpdate(); + } + } + return false; + } + return false; + } + @Override public void recordStateFinished(StateInstance stateInstance, ProcessContext context) { if (stateInstance != null) { @@ -444,7 +493,11 @@ protected void branchReport(StateInstance stateInstance, ProcessContext context) StateInstance originalStateInst = null; if (StringUtils.hasLength(stateInstance.getStateIdRetriedFor())) { - originalStateInst = findOutOriginalStateInstanceOfRetryState(stateInstance); + if (isUpdateMode(stateInstance, context)) { + originalStateInst = stateInstance; + } else { + originalStateInst = findOutOriginalStateInstanceOfRetryState(stateInstance); + } if (ExecutionStatus.SU.equals(stateInstance.getStatus())) { branchStatus = BranchStatus.PhaseTwo_Committed; @@ -457,7 +510,12 @@ protected void branchReport(StateInstance stateInstance, ProcessContext context) } else if (StringUtils.hasLength(stateInstance.getStateIdCompensatedFor())) { - originalStateInst = findOutOriginalStateInstanceOfCompensateState(stateInstance); + if (isUpdateMode(stateInstance, context)) { + originalStateInst = stateInstance.getStateMachineInstance().getStateMap().get( + stateInstance.getStateIdCompensatedFor()); + } else { + originalStateInst = findOutOriginalStateInstanceOfCompensateState(stateInstance); + } } if (originalStateInst == null) { @@ -774,6 +832,7 @@ public void toStatement(StateInstance stateInstance, PreparedStatement statement statement.setString(12, stateInstance.getBusinessKey()); statement.setString(13, stateInstance.getStateIdCompensatedFor()); statement.setString(14, stateInstance.getStateIdRetriedFor()); + statement.setTimestamp(15, new Timestamp(stateInstance.getGmtUpdated().getTime())); } } @@ -785,8 +844,9 @@ public void toStatement(StateInstance stateInstance, PreparedStatement statement stateInstance.getException() != null ? (byte[]) stateInstance.getSerializedException() : null); statement.setString(3, stateInstance.getStatus().name()); statement.setObject(4, stateInstance.getSerializedOutputParams()); - statement.setString(5, stateInstance.getId()); - statement.setString(6, stateInstance.getMachineInstanceId()); + statement.setTimestamp(5, new Timestamp(stateInstance.getGmtEnd().getTime())); + statement.setString(6, stateInstance.getId()); + statement.setString(7, stateInstance.getMachineInstanceId()); } } diff --git a/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/store/db/StateLogStoreSqls.java b/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/store/db/StateLogStoreSqls.java index 06b3c15bfa6..3c237ae64a0 100644 --- a/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/store/db/StateLogStoreSqls.java +++ b/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/store/db/StateLogStoreSqls.java @@ -68,15 +68,15 @@ public class StateLogStoreSqls { private static final String RECORD_STATE_STARTED_SQL = "INSERT INTO ${TABLE_PREFIX}state_inst (id, machine_inst_id, name, type," + " gmt_started, service_name, service_method, service_type, is_for_update, input_params, status, " - + "business_key, " - + "state_id_compensated_for, state_id_retried_for)\n" + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + + "business_key, state_id_compensated_for, state_id_retried_for, gmt_updated)\n" + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; - private static final String RECORD_STATE_FINISHED_SQL - = "UPDATE ${TABLE_PREFIX}state_inst SET gmt_end = ?, excep = ?, status = ?, output_params = ? WHERE id = ? " - + "AND machine_inst_id = ?"; + private static final String RECORD_STATE_FINISHED_SQL = + "UPDATE ${TABLE_PREFIX}state_inst SET gmt_end = ?, excep = ?, status = ?, output_params = ?, gmt_updated = ? " + + "WHERE id = ? AND machine_inst_id = ?"; private static final String UPDATE_STATE_EXECUTION_STATUS_SQL - = "UPDATE ${TABLE_PREFIX}state_inst SET status = ? WHERE machine_inst_id = ? AND id = ?"; + = "UPDATE ${TABLE_PREFIX}state_inst SET status = ?, gmt_updated = ? WHERE machine_inst_id = ? AND id = ?"; private static final String QUERY_STATE_INSTANCES_BY_MACHINE_INSTANCE_ID_SQL = "SELECT " + STATE_INSTANCE_FIELDS + " FROM ${TABLE_PREFIX}state_inst WHERE machine_inst_id = ? ORDER BY gmt_started, ID ASC"; diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/DefaultStateMachineConfig.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/DefaultStateMachineConfig.java index 86853017c91..5ec5299ee96 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/DefaultStateMachineConfig.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/DefaultStateMachineConfig.java @@ -70,6 +70,8 @@ import javax.script.ScriptEngineManager; +import static io.seata.common.DefaultValues.DEFAULT_CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE; +import static io.seata.common.DefaultValues.DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE; import static io.seata.common.DefaultValues.DEFAULT_SAGA_JSON_PARSER; /** @@ -108,6 +110,8 @@ public class DefaultStateMachineConfig implements StateMachineConfig, Applicatio private String defaultTenantId = "000001"; private ScriptEngineManager scriptEngineManager; private String sagaJsonParser = DEFAULT_SAGA_JSON_PARSER; + private boolean sagaRetryPersistModeUpdate = DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE; + private boolean sagaCompensatePersistModeUpdate = DEFAULT_CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE; protected void init() throws Exception { @@ -477,4 +481,20 @@ public String getSagaJsonParser() { public void setSagaJsonParser(String sagaJsonParser) { this.sagaJsonParser = sagaJsonParser; } + + public boolean isSagaRetryPersistModeUpdate() { + return sagaRetryPersistModeUpdate; + } + + public void setSagaRetryPersistModeUpdate(boolean sagaRetryPersistModeUpdate) { + this.sagaRetryPersistModeUpdate = sagaRetryPersistModeUpdate; + } + + public boolean isSagaCompensatePersistModeUpdate() { + return sagaCompensatePersistModeUpdate; + } + + public void setSagaCompensatePersistModeUpdate(boolean sagaCompensatePersistModeUpdate) { + this.sagaCompensatePersistModeUpdate = sagaCompensatePersistModeUpdate; + } } \ No newline at end of file diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/interceptors/ServiceTaskHandlerInterceptor.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/interceptors/ServiceTaskHandlerInterceptor.java index d879b39a69d..a24064b3b44 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/interceptors/ServiceTaskHandlerInterceptor.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/interceptors/ServiceTaskHandlerInterceptor.java @@ -122,6 +122,7 @@ public void preProcess(ProcessContext context) throws EngineExecutionException { stateInstance.setStateMachineInstance(stateMachineInstance); stateInstance.setName(state.getName()); stateInstance.setGmtStarted(new Date()); + stateInstance.setGmtUpdated(stateInstance.getGmtStarted()); stateInstance.setStatus(ExecutionStatus.RU); stateInstance.setStateIdRetriedFor( diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/ServiceTaskState.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/ServiceTaskState.java index d35f33ff8c8..d4c877c0ff0 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/ServiceTaskState.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/ServiceTaskState.java @@ -58,4 +58,18 @@ public interface ServiceTaskState extends TaskState { * @return */ boolean isPersist(); + + /** + * Is update last retry execution log, default append new + * + * @return + */ + Boolean isRetryPersistModeUpdate(); + + /** + * Is update last compensate execution log, default append new + * + * @return + */ + Boolean isCompensatePersistModeUpdate(); } \ No newline at end of file diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/StateInstance.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/StateInstance.java index 4b037581a13..d6a92fc3328 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/StateInstance.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/StateInstance.java @@ -150,6 +150,20 @@ public interface StateInstance { */ void setGmtStarted(Date gmtStarted); + /** + * get update time + * + * @return + */ + Date getGmtUpdated(); + + /** + * set update time + * + * @param gmtUpdated + */ + void setGmtUpdated(Date gmtUpdated); + /** * get end time * diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/StateMachine.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/StateMachine.java index c5684ff1d3b..080cb78d2c7 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/StateMachine.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/StateMachine.java @@ -142,6 +142,20 @@ public interface StateMachine { */ boolean isPersist(); + /** + * Is update last retry execution log, default append new + * + * @return + */ + Boolean isRetryPersistModeUpdate(); + + /** + * Is update last compensate execution log, default append new + * + * @return + */ + Boolean isCompensatePersistModeUpdate(); + /** * State language text * diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/AbstractTaskState.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/AbstractTaskState.java index 487eed98417..173ce6e9b90 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/AbstractTaskState.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/AbstractTaskState.java @@ -39,6 +39,8 @@ public abstract class AbstractTaskState extends BaseState implements TaskState { private List inputExpressions; private Map outputExpressions; private boolean isPersist = true; + private Boolean retryPersistModeUpdate; + private Boolean compensatePersistModeUpdate; @Override public String getCompensateState() { @@ -113,6 +115,22 @@ public void setPersist(boolean persist) { isPersist = persist; } + public Boolean isRetryPersistModeUpdate() { + return retryPersistModeUpdate; + } + + public void setRetryPersistModeUpdate(Boolean retryPersistModeUpdate) { + this.retryPersistModeUpdate = retryPersistModeUpdate; + } + + public Boolean isCompensatePersistModeUpdate() { + return compensatePersistModeUpdate; + } + + public void setCompensatePersistModeUpdate(Boolean compensatePersistModeUpdate) { + this.compensatePersistModeUpdate = compensatePersistModeUpdate; + } + public List getInputExpressions() { return inputExpressions; } diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/StateInstanceImpl.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/StateInstanceImpl.java index a2daecb89b6..8222619efc3 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/StateInstanceImpl.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/StateInstanceImpl.java @@ -38,6 +38,7 @@ public class StateInstanceImpl implements StateInstance { private String serviceType; private String businessKey; private Date gmtStarted; + private Date gmtUpdated; private Date gmtEnd; private boolean isForUpdate; private Exception exception; @@ -143,6 +144,16 @@ public void setGmtStarted(Date gmtStarted) { this.gmtStarted = gmtStarted; } + @Override + public Date getGmtUpdated() { + return gmtUpdated; + } + + @Override + public void setGmtUpdated(Date gmtUpdated) { + this.gmtUpdated = gmtUpdated; + } + @Override public Date getGmtEnd() { return gmtEnd; diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/StateMachineImpl.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/StateMachineImpl.java index b6135526d2d..159e81e3657 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/StateMachineImpl.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/StateMachineImpl.java @@ -40,6 +40,8 @@ public class StateMachineImpl implements StateMachine { private Status status = Status.AC; private RecoverStrategy recoverStrategy; private boolean isPersist = true; + private Boolean retryPersistModeUpdate; + private Boolean compensatePersistModeUpdate; private String type = "STATE_LANG"; private transient String content; private Date gmtCreate; @@ -189,4 +191,22 @@ public Date getGmtCreate() { public void setGmtCreate(Date gmtCreate) { this.gmtCreate = gmtCreate; } + + @Override + public Boolean isRetryPersistModeUpdate() { + return retryPersistModeUpdate; + } + + public void setRetryPersistModeUpdate(Boolean retryPersistModeUpdate) { + this.retryPersistModeUpdate = retryPersistModeUpdate; + } + + @Override + public Boolean isCompensatePersistModeUpdate() { + return compensatePersistModeUpdate; + } + + public void setCompensatePersistModeUpdate(Boolean compensatePersistModeUpdate) { + this.compensatePersistModeUpdate = compensatePersistModeUpdate; + } } \ No newline at end of file diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/AbstractTaskStateParser.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/AbstractTaskStateParser.java index 263dd411d47..3f1065e7829 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/AbstractTaskStateParser.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/AbstractTaskStateParser.java @@ -46,6 +46,18 @@ protected void parseTaskAttributes(AbstractTaskState state, Object node) { state.setPersist(false); } + // customize if update origin or append new retryStateInstLog + Object isRetryPersistModeUpdate = nodeMap.get("IsRetryPersistModeUpdate"); + if (isRetryPersistModeUpdate instanceof Boolean) { + state.setRetryPersistModeUpdate(Boolean.TRUE.equals(isRetryPersistModeUpdate)); + } + + // customize if update last or append new compensateStateInstLog + Object isCompensatePersistModeUpdate = nodeMap.get("IsCompensatePersistModeUpdate"); + if (isCompensatePersistModeUpdate instanceof Boolean) { + state.setCompensatePersistModeUpdate(Boolean.TRUE.equals(isCompensatePersistModeUpdate)); + } + List retryList = (List) nodeMap.get("Retry"); if (retryList != null) { state.setRetry(parseRetry(retryList)); diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/StateMachineParserImpl.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/StateMachineParserImpl.java index b548bb9af18..5fd73e75f0e 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/StateMachineParserImpl.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/StateMachineParserImpl.java @@ -79,6 +79,18 @@ public StateMachine parse(String json) { stateMachine.setPersist(false); } + // customize if update origin or append new retryStateInstLog + Object isRetryPersistModeUpdate = node.get("IsRetryPersistModeUpdate"); + if (isRetryPersistModeUpdate instanceof Boolean) { + stateMachine.setRetryPersistModeUpdate(Boolean.TRUE.equals(isRetryPersistModeUpdate)); + } + + // customize if update last or append new compensateStateInstLog + Object isCompensatePersistModeUpdate = node.get("IsCompensatePersistModeUpdate"); + if (isCompensatePersistModeUpdate instanceof Boolean) { + stateMachine.setCompensatePersistModeUpdate(Boolean.TRUE.equals(isCompensatePersistModeUpdate)); + } + Map statesNode = (Map) node.get("States"); statesNode.forEach((stateName, value) -> { Map stateNode = (Map) value; diff --git a/script/client/conf/file.conf b/script/client/conf/file.conf index 08aef22beef..7c58ec1ef0f 100644 --- a/script/client/conf/file.conf +++ b/script/client/conf/file.conf @@ -51,6 +51,9 @@ client { tableMetaCheckEnable = false reportSuccessEnable = false sagaBranchRegisterEnable = false + sagaJsonParser = jackson + sagaRetryPersistModeUpdate = false + sagaCompensatePersistModeUpdate = false } tm { commitRetryCount = 5 diff --git a/script/client/saga/db/db2.sql b/script/client/saga/db/db2.sql index 78de4769e6f..3a8d48d0a65 100644 --- a/script/client/saga/db/db2.sql +++ b/script/client/saga/db/db2.sql @@ -58,6 +58,7 @@ create table seata_state_inst output_params clob(65536) inline length 1024, status varchar(2) not null, excep blob(10240), + gmt_updated timestamp(3), gmt_end timestamp(3), primary key(id, machine_inst_id) ); \ No newline at end of file diff --git a/script/client/saga/db/h2.sql b/script/client/saga/db/h2.sql index 19ba12e7ca7..8493c64277c 100644 --- a/script/client/saga/db/h2.sql +++ b/script/client/saga/db/h2.sql @@ -52,6 +52,7 @@ create table if not exists seata_state_inst output_params clob comment 'output parameters', status varchar(2) not null comment 'status(SU succeed|FA failed|UN unknown|SK skipped|RU running)', excep blob comment 'exception', + gmt_updated timestamp(3) comment 'update time', gmt_end timestamp(3) comment 'end time', primary key (id, machine_inst_id) ); \ No newline at end of file diff --git a/script/client/saga/db/mysql.sql b/script/client/saga/db/mysql.sql index 35f45824e69..429e04fb3c7 100644 --- a/script/client/saga/db/mysql.sql +++ b/script/client/saga/db/mysql.sql @@ -57,6 +57,7 @@ CREATE TABLE IF NOT EXISTS `seata_state_inst` `output_params` TEXT COMMENT 'output parameters', `status` VARCHAR(2) NOT NULL COMMENT 'status(SU succeed|FA failed|UN unknown|SK skipped|RU running)', `excep` BLOB COMMENT 'exception', + `gmt_updated` DATETIME(3) COMMENT 'update time', `gmt_end` DATETIME(3) COMMENT 'end time', PRIMARY KEY (`id`, `machine_inst_id`) ) ENGINE = InnoDB diff --git a/script/client/saga/db/oracle.sql b/script/client/saga/db/oracle.sql index 825e69f44ae..6e16506b44e 100644 --- a/script/client/saga/db/oracle.sql +++ b/script/client/saga/db/oracle.sql @@ -58,6 +58,7 @@ CREATE TABLE seata_state_inst output_params CLOB, status VARCHAR(2) NOT NULL, excep BLOB, + gmt_updated TIMESTAMP(3), gmt_end TIMESTAMP(3), PRIMARY KEY (id, machine_inst_id) ); diff --git a/script/client/saga/db/postgresql.sql b/script/client/saga/db/postgresql.sql index b74e278c1a8..3110c8713e1 100644 --- a/script/client/saga/db/postgresql.sql +++ b/script/client/saga/db/postgresql.sql @@ -52,7 +52,8 @@ CREATE TABLE IF NOT EXISTS public.seata_state_inst input_params TEXT, output_params TEXT, status VARCHAR(2) NOT NULL, - excep BYTEA, + excep BYTEA, + gmt_updated TIMESTAMP(3) DEFAULT now(), gmt_end TIMESTAMP(3) DEFAULT now(), CONSTRAINT pk_seata_state_inst PRIMARY KEY (id, machine_inst_id) ); diff --git a/script/client/spring/application.properties b/script/client/spring/application.properties index 2704a7fcdd5..8da397cb8e5 100755 --- a/script/client/spring/application.properties +++ b/script/client/spring/application.properties @@ -27,6 +27,8 @@ seata.client.rm.table-meta-check-enable=false seata.client.rm.report-success-enable=false seata.client.rm.saga-branch-register-enable=false seata.client.rm.saga-json-parser=fastjson +seata.client.rm.saga-retry-persist-mode-update=false +seata.client.rm.saga-compensate-persist-mode-update=false seata.client.rm.lock.retry-interval=10 seata.client.rm.lock.retry-times=30 seata.client.rm.lock.retry-policy-branch-rollback-on-conflict=true diff --git a/script/client/spring/application.yml b/script/client/spring/application.yml index e0934cd2557..5fcb18f3849 100755 --- a/script/client/spring/application.yml +++ b/script/client/spring/application.yml @@ -14,6 +14,8 @@ seata: report-success-enable: false saga-branch-register-enable: false saga-json-parser: fastjson + saga-retry-persist-mode-update: false + saga-compensate-persist-mode-update: false lock: retry-interval: 10 retry-times: 30 diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/client/RmProperties.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/client/RmProperties.java index dd69e1bd4b1..2f5115ab52d 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/client/RmProperties.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/client/RmProperties.java @@ -22,6 +22,8 @@ import static io.seata.common.DefaultValues.DEFAULT_CLIENT_REPORT_RETRY_COUNT; import static io.seata.common.DefaultValues.DEFAULT_CLIENT_REPORT_SUCCESS_ENABLE; import static io.seata.common.DefaultValues.DEFAULT_CLIENT_SAGA_BRANCH_REGISTER_ENABLE; +import static io.seata.common.DefaultValues.DEFAULT_CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE; +import static io.seata.common.DefaultValues.DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE; import static io.seata.common.DefaultValues.DEFAULT_CLIENT_TABLE_META_CHECK_ENABLE; import static io.seata.common.DefaultValues.DEFAULT_SAGA_JSON_PARSER; import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_RM_PREFIX; @@ -38,6 +40,8 @@ public class RmProperties { private boolean reportSuccessEnable = DEFAULT_CLIENT_REPORT_SUCCESS_ENABLE; private boolean sagaBranchRegisterEnable = DEFAULT_CLIENT_SAGA_BRANCH_REGISTER_ENABLE; private String sagaJsonParser = DEFAULT_SAGA_JSON_PARSER; + private boolean sagaRetryPersistModeUpdate = DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE; + private boolean sagaCompensatePersistModeUpdate = DEFAULT_CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE; public int getAsyncCommitBufferLimit() { return asyncCommitBufferLimit; @@ -90,4 +94,20 @@ public String getSagaJsonParser() { public void setSagaJsonParser(String sagaJsonParser) { this.sagaJsonParser = sagaJsonParser; } + + public boolean isSagaRetryPersistModeUpdate() { + return sagaRetryPersistModeUpdate; + } + + public void setSagaRetryPersistModeUpdate(boolean sagaRetryPersistModeUpdate) { + this.sagaRetryPersistModeUpdate = sagaRetryPersistModeUpdate; + } + + public boolean isSagaCompensatePersistModeUpdate() { + return sagaCompensatePersistModeUpdate; + } + + public void setSagaCompensatePersistModeUpdate(boolean sagaCompensatePersistModeUpdate) { + this.sagaCompensatePersistModeUpdate = sagaCompensatePersistModeUpdate; + } } diff --git a/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json index a49c6d1601f..cd36eac2af0 100644 --- a/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -72,6 +72,18 @@ "sourceType": "io.seata.spring.boot.autoconfigure.properties.client.RmProperties", "defaultValue": "fastjson" }, + { + "name": "seata.client.rm.saga-retry-persist-mode-update", + "type": "java.lang.Boolean", + "sourceType": "io.seata.spring.boot.autoconfigure.properties.client.RmProperties", + "defaultValue": false + }, + { + "name": "seata.client.rm.saga-compensate-persist-mode-update", + "type": "java.lang.Boolean", + "sourceType": "io.seata.spring.boot.autoconfigure.properties.client.RmProperties", + "defaultValue": false + }, { "name": "seata.client.rm.lock.retry-interval", "type": "java.lang.Integer", diff --git a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertiesTest.java b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertiesTest.java index 9459039aa9f..104c43df73d 100644 --- a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertiesTest.java +++ b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertiesTest.java @@ -91,6 +91,8 @@ public void testRmProperties() { assertEquals(5, context.getBean(RmProperties.class).getReportRetryCount()); assertFalse(context.getBean(RmProperties.class).isTableMetaCheckEnable()); assertFalse(context.getBean(RmProperties.class).isReportSuccessEnable()); + assertFalse(context.getBean(RmProperties.class).isSagaRetryPersistModeUpdate()); + assertFalse(context.getBean(RmProperties.class).isSagaCompensatePersistModeUpdate()); } @Test diff --git a/test/src/test/java/io/seata/saga/engine/db/StateMachineDBTests.java b/test/src/test/java/io/seata/saga/engine/db/StateMachineDBTests.java index 774ad2e2830..ba74a08b40d 100644 --- a/test/src/test/java/io/seata/saga/engine/db/StateMachineDBTests.java +++ b/test/src/test/java/io/seata/saga/engine/db/StateMachineDBTests.java @@ -740,6 +740,99 @@ public void testStateMachineRecordFailed() { Assertions.assertNull(RootContext.getXID()); } + @Test + public void testSimpleRetryStateAsUpdateMode() throws Exception { + long start = System.currentTimeMillis(); + + Map paramMap = new HashMap<>(1); + paramMap.put("a", 1); + paramMap.put("barThrowException", "true"); + + String stateMachineName = "simpleUpdateStateMachine"; + + StateMachineInstance inst = stateMachineEngine.start(stateMachineName, null, paramMap); + + long cost = System.currentTimeMillis() - start; + System.out.println("====== cost :" + cost); + + Assertions.assertNotNull(inst.getException()); + Assertions.assertEquals(inst.getStatus(), ExecutionStatus.UN); + + Thread.sleep(sleepTime); + inst = stateMachineEngine.getStateMachineConfig().getStateLogStore().getStateMachineInstance(inst.getId()); + Assertions.assertEquals(inst.getStateList().size(), 2); + } + + @Test + public void testSimpleCompensateStateAsUpdateMode() throws Exception { + long start = System.currentTimeMillis(); + + Map paramMap = new HashMap<>(1); + paramMap.put("a", 2); + paramMap.put("barThrowException", "true"); + paramMap.put("compensateBarThrowException", "true"); + + String stateMachineName = "simpleUpdateStateMachine"; + + StateMachineInstance inst = stateMachineEngine.start(stateMachineName, null, paramMap); + + long cost = System.currentTimeMillis() - start; + System.out.println("====== cost :" + cost); + + Assertions.assertNotNull(inst.getException()); + Assertions.assertEquals(inst.getStatus(), ExecutionStatus.UN); + + Thread.sleep(sleepTime); + inst = stateMachineEngine.getStateMachineConfig().getStateLogStore().getStateMachineInstance(inst.getId()); + Assertions.assertEquals(inst.getStateList().size(), 3); + } + + @Test + public void testSimpleSubRetryStateAsUpdateMode() throws Exception { + long start = System.currentTimeMillis(); + + Map paramMap = new HashMap<>(1); + paramMap.put("a", 3); + paramMap.put("barThrowException", "true"); + + String stateMachineName = "simpleStateMachineWithCompensationAndSubMachine"; + + StateMachineInstance inst = stateMachineEngine.start(stateMachineName, null, paramMap); + + long cost = System.currentTimeMillis() - start; + System.out.println("====== cost :" + cost); + + Assertions.assertEquals(inst.getStatus(), ExecutionStatus.UN); + + Thread.sleep(sleepTime); + inst = stateMachineEngine.getStateMachineConfig().getStateLogStore().getStateMachineInstance(inst.getId()); + + Assertions.assertEquals(inst.getStateList().size(), 2); + } + + @Test + public void testSimpleSubCompensateStateAsUpdateMode() throws Exception { + long start = System.currentTimeMillis(); + + Map paramMap = new HashMap<>(1); + paramMap.put("a", 4); + paramMap.put("barThrowException", "true"); + + String stateMachineName = "simpleStateMachineWithCompensationAndSubMachine"; + + StateMachineInstance inst = stateMachineEngine.start(stateMachineName, null, paramMap); + + long cost = System.currentTimeMillis() - start; + System.out.println("====== cost :" + cost); + + Assertions.assertEquals(inst.getStatus(), ExecutionStatus.UN); + + Thread.sleep(sleepTime); + inst = stateMachineEngine.getStateMachineConfig().getStateLogStore().getStateMachineInstance(inst.getId()); + + Assertions.assertEquals(inst.getStateList().size(), 2); + } + private void doTestStateMachineTransTimeout(Map paramMap) throws Exception { long start = System.currentTimeMillis(); diff --git a/test/src/test/resources/file.conf b/test/src/test/resources/file.conf index e9fb03b7601..7873ab23568 100644 --- a/test/src/test/resources/file.conf +++ b/test/src/test/resources/file.conf @@ -12,5 +12,7 @@ client { reportSuccessEnable = false sagaBranchRegisterEnable = false sagaJsonParser = jackson + sagaRetryPersistModeUpdate = false + sagaCompensatePersistModeUpdate = false } } \ No newline at end of file diff --git a/test/src/test/resources/saga/spring/statemachine_engine_db_test.xml b/test/src/test/resources/saga/spring/statemachine_engine_db_test.xml index 83bd60ae51b..3a7a05f9972 100644 --- a/test/src/test/resources/saga/spring/statemachine_engine_db_test.xml +++ b/test/src/test/resources/saga/spring/statemachine_engine_db_test.xml @@ -52,6 +52,8 @@ + + Date: Thu, 24 Dec 2020 14:05:03 +0800 Subject: [PATCH 16/93] optimize: add the change records folder (#3397) --- CONTRIBUTING.md | 1 + changes/1.5.0.md | 62 ++++++++++++++++++++++++++++++++++++++++++ changes/en-us/1.5.0.md | 62 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+) create mode 100644 changes/1.5.0.md create mode 100644 changes/en-us/1.5.0.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6f85c4a7ed3..c018960a978 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -139,6 +139,7 @@ Commit content represents all content changes included in one commit. We had bet * avoid very large change in a commit; * complete and reviewable for each commit. * check git config(`user.name`, `user.email`) when committing to ensure that it is associated with your github ID. +* when submitting pr, please add a brief description of the current changes to the X.X.X.md file under the 'changes/' folder In addition, in the code change part, we suggest that all contributors should read the [code style of Seata](#code-style). diff --git a/changes/1.5.0.md b/changes/1.5.0.md new file mode 100644 index 00000000000..2cd44f4fcb9 --- /dev/null +++ b/changes/1.5.0.md @@ -0,0 +1,62 @@ +### 1.5.0 + + [source](https://github.com/seata/seata/archive/v1.5.0.zip) | + [binary](https://github.com/seata/seata/releases/download/v1.5.0/seata-server-1.5.0.zip) + +
+ Release notes + + + ### Seata 1.5.0 + +Seata 1.5.0 发布。 + +Seata 是一款开源的分布式事务解决方案,提供高性能和简单易用的分布式事务服务。 + +此版本更新如下: + + ### feature: + + - [[#3172](https://github.com/seata/seata/pull/3172)] 支持undolog压缩 + + + ### bugfix: + + - [[#3258](https://github.com/seata/seata/pull/3258)] 修复AsyncWorker潜在的OOM问题 + - [[#3293](https://github.com/seata/seata/pull/3293)] 修复配置缓存获取值时类型不匹配的bug + + + ### optimize: + + - [[#3383](https://github.com/seata/seata/pull/3383)] 优化StatementProxyTest单元测试 + - [[#3341](https://github.com/seata/seata/pull/3341)] 可获取无file:前缀的配置文件 + - [[#3385](https://github.com/seata/seata/pull/3385)] 优化github action + - [[#3175](https://github.com/seata/seata/pull/3175)] 重构雪花id算法 + - [[#3291](https://github.com/seata/seata/pull/3291)] 优化mysql连接参数 + - [[#3336](https://github.com/seata/seata/pull/3336)] 从环境变量中获取netty配置属性 + - [[#3369](https://github.com/seata/seata/pull/3369)] 添加github action的dockerHub秘钥 + - [[#3343](https://github.com/seata/seata/pull/3343)] 将CI程序从Travis CI迁移到Github Actions + - [[#3365](https://github.com/seata/seata/pull/3365)] 修复ParameterParserTest测试用例 + - [[#3359](https://github.com/seata/seata/pull/3359)] 删除未使用的测试用例 + - [[#3397](https://github.com/seata/seata/pull/3397)] 添加更改记录文件夹 + + 非常感谢以下 contributors 的代码贡献。若有无意遗漏,请报告。 + + - [slievrly](https://github.com/slievrly) + - [selfishlover](https://github.com/selfishlover) + - [l8189352](https://github.com/l81893521) + - [hoverruan](https://github.com/hoverruan ) + - [jsbxyyx](https://github.com/jsbxyyx) + - [caohdgege](https://github.com/caohdgege) + - [a364176773](https://github.com/a364176773) + +同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 + + #### Link + + - **Seata:** https://github.com/seata/seata + - **Seata-Samples:** https://github.com/seata/seata-samples + - **Release:** https://github.com/seata/seata/releases + - **WebSite:** https://seata.io + +
\ No newline at end of file diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md new file mode 100644 index 00000000000..9f2d557e7eb --- /dev/null +++ b/changes/en-us/1.5.0.md @@ -0,0 +1,62 @@ +### 1.5.0 + + [source](https://github.com/seata/seata/archive/v1.5.0.zip) | + [binary](https://github.com/seata/seata/releases/download/v1.5.0/seata-server-1.5.0.zip) + +
+ Release notes + + + ### Seata 1.5.0 + + Seata 1.5.0 Released. + + Seata is an easy-to-use, high-performance, open source distributed transaction solution. + + The version is updated as follows: + + ### feature: + + - [[#3172](https://github.com/seata/seata/pull/3172)] support rollback info compress + + + ### bugfix: + + - [[#3258](https://github.com/seata/seata/pull/3258)] fix AsyncWorker potential OOM problem + - [[#3293](https://github.com/seata/seata/pull/3293)] configuration cache get value cast exception + + + ### optimize: + + - [[#3383](https://github.com/seata/seata/pull/3383)] optimize StatementProxyTest unit test + - [[#3341](https://github.com/seata/seata/pull/3341)] get config from file system even without file: prefix + - [[#3385](https://github.com/seata/seata/pull/3385)] optimize github action + - [[#3175](https://github.com/seata/seata/pull/3175)] improve UUIDGenerator using "history time" version of snowflake algorithm + - [[#3291](https://github.com/seata/seata/pull/3291)] mysql jdbc connect param + - [[#3336](https://github.com/seata/seata/pull/3336)] get netty config property from system properties + - [[#3369](https://github.com/seata/seata/pull/3369)] add github action secrets env for dockerHub + - [[#3343](https://github.com/seata/seata/pull/3343)] Migrate CI provider from Travis CI to Github Actions + - [[#3365](https://github.com/seata/seata/pull/3365)] optimize ParameterParserTest test case failed + - [[#3359](https://github.com/seata/seata/pull/3359)] remove unused test case + - [[#3397](https://github.com/seata/seata/pull/3397)] add the change records folder + + Thanks to these contributors for their code commits. Please report an unintended omission. + + - [slievrly](https://github.com/slievrly) + - [selfishlover](https://github.com/selfishlover) + - [l8189352](https://github.com/l81893521) + - [hoverruan](https://github.com/hoverruan ) + - [jsbxyyx](https://github.com/jsbxyyx) + - [caohdgege](https://github.com/caohdgege) + - [a364176773](https://github.com/a364176773) + + Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. + + #### Link + + - **Seata:** https://github.com/seata/seata + - **Seata-Samples:** https://github.com/seata/seata-samples + - **Release:** https://github.com/seata/seata/releases + - **WebSite:** https://seata.io + +
\ No newline at end of file From 08fbcef5314e212d1b40a2509640316bab57b733 Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Wed, 23 Dec 2020 22:47:05 -0800 Subject: [PATCH 17/93] bugfix: forbidden use order by or limit in multi sql (#3241) --- .github/workflows/build.yml | 1 - changes/1.5.0.md | 12 ++++++++ changes/en-us/1.5.0.md | 10 ++++++- .../datasource/exec/MultiDeleteExecutor.java | 11 +++++++ .../datasource/exec/MultiUpdateExecutor.java | 11 +++++++ .../rm/datasource/exec/MultiExecutorTest.java | 30 +++++++++++++++++++ 6 files changed, 73 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d257cae269b..1e8139d651d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,7 +11,6 @@ jobs: runs-on: ${{ matrix.os }} strategy: - max-parallel: 1 matrix: java: [8, 11] os: [ ubuntu-18.04 ] diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 2cd44f4fcb9..45a2301aab1 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -18,12 +18,15 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 ### feature: - [[#3172](https://github.com/seata/seata/pull/3172)] 支持undolog压缩 + - [[#3372](https://github.com/seata/seata/pull/3372)] saga模式下支撑用户自定义是否更新最后一次重试日志 ### bugfix: - [[#3258](https://github.com/seata/seata/pull/3258)] 修复AsyncWorker潜在的OOM问题 - [[#3293](https://github.com/seata/seata/pull/3293)] 修复配置缓存获取值时类型不匹配的bug + - [[#3241](https://github.com/seata/seata/pull/3241)] 禁止在多SQL的情况下使用 limit 和 order by 语法 + ### optimize: @@ -39,6 +42,13 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3365](https://github.com/seata/seata/pull/3365)] 修复ParameterParserTest测试用例 - [[#3359](https://github.com/seata/seata/pull/3359)] 删除未使用的测试用例 - [[#3397](https://github.com/seata/seata/pull/3397)] 添加更改记录文件夹 + + + + ### test + + - [[#3381](https://github.com/seata/seata/pull/3381)] 添加 TmClient 的测试用例 + 非常感谢以下 contributors 的代码贡献。若有无意遗漏,请报告。 @@ -49,6 +59,8 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [jsbxyyx](https://github.com/jsbxyyx) - [caohdgege](https://github.com/caohdgege) - [a364176773](https://github.com/a364176773) + - [anselleeyy](https://github.com/anselleeyy) + - [Ifdevil](https://github.com/Ifdevil) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 9f2d557e7eb..2c4e1a55935 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -18,12 +18,14 @@ ### feature: - [[#3172](https://github.com/seata/seata/pull/3172)] support rollback info compress + - [[#3372](https://github.com/seata/seata/pull/3372)] Saga support customize whether update last retry log ### bugfix: - [[#3258](https://github.com/seata/seata/pull/3258)] fix AsyncWorker potential OOM problem - [[#3293](https://github.com/seata/seata/pull/3293)] configuration cache get value cast exception + - [[#3241](https://github.com/seata/seata/pull/3241)] forbidden use order by or limit in multi sql ### optimize: @@ -39,6 +41,10 @@ - [[#3365](https://github.com/seata/seata/pull/3365)] optimize ParameterParserTest test case failed - [[#3359](https://github.com/seata/seata/pull/3359)] remove unused test case - [[#3397](https://github.com/seata/seata/pull/3397)] add the change records folder + + ### test + + - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient Thanks to these contributors for their code commits. Please report an unintended omission. @@ -48,7 +54,9 @@ - [hoverruan](https://github.com/hoverruan ) - [jsbxyyx](https://github.com/jsbxyyx) - [caohdgege](https://github.com/caohdgege) - - [a364176773](https://github.com/a364176773) + - [a364176773](https://github.com/a364176773) + - [anselleeyy](https://github.com/anselleeyy) + - [Ifdevil](https://github.com/Ifdevil) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiDeleteExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiDeleteExecutor.java index 1c8d34e63bc..5eb2418b033 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiDeleteExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiDeleteExecutor.java @@ -15,6 +15,7 @@ */ package io.seata.rm.datasource.exec; +import io.seata.common.exception.NotSupportYetException; import io.seata.common.util.StringUtils; @@ -22,6 +23,7 @@ import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.sql.struct.TableMeta; import io.seata.rm.datasource.sql.struct.TableRecords; +import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLDeleteRecognizer; import io.seata.sqlparser.SQLRecognizer; @@ -55,6 +57,15 @@ protected TableRecords beforeImage() throws SQLException { for (SQLRecognizer recognizer : sqlRecognizers) { sqlRecognizer = recognizer; SQLDeleteRecognizer visitor = (SQLDeleteRecognizer) recognizer; + + ParametersHolder parametersHolder = statementProxy instanceof ParametersHolder ? (ParametersHolder)statementProxy : null; + if (StringUtils.isNotBlank(visitor.getLimit(parametersHolder, paramAppenderList))) { + throw new NotSupportYetException("Multi delete SQL with limit condition is not support yet !"); + } + if (StringUtils.isNotBlank(visitor.getOrderBy())) { + throw new NotSupportYetException("Multi delete SQL with orderBy condition is not support yet !"); + } + String whereConditionStr = buildWhereCondition(visitor, paramAppenderList); if (StringUtils.isBlank(whereConditionStr)) { whereCondition = new StringBuilder(); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiUpdateExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiUpdateExecutor.java index 13101f3a329..ff69ebae7ab 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiUpdateExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiUpdateExecutor.java @@ -25,6 +25,7 @@ import java.util.HashSet; import java.util.StringJoiner; +import io.seata.common.exception.NotSupportYetException; import io.seata.common.util.IOUtil; import io.seata.common.util.StringUtils; import io.seata.config.Configuration; @@ -36,6 +37,7 @@ import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.sql.struct.TableMeta; import io.seata.rm.datasource.sql.struct.TableRecords; +import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLRecognizer; import io.seata.sqlparser.SQLUpdateRecognizer; @@ -79,6 +81,15 @@ protected TableRecords beforeImage() throws SQLException { for (SQLRecognizer recognizer : sqlRecognizers) { sqlRecognizer = recognizer; SQLUpdateRecognizer sqlUpdateRecognizer = (SQLUpdateRecognizer) recognizer; + + ParametersHolder parametersHolder = statementProxy instanceof ParametersHolder ? (ParametersHolder)statementProxy : null; + if (StringUtils.isNotBlank(sqlUpdateRecognizer.getLimit(parametersHolder, paramAppenderList))) { + throw new NotSupportYetException("Multi update SQL with limit condition is not support yet !"); + } + if (StringUtils.isNotBlank(sqlUpdateRecognizer.getOrderBy())) { + throw new NotSupportYetException("Multi update SQL with orderBy condition is not support yet !"); + } + List updateColumns = sqlUpdateRecognizer.getUpdateColumns(); updateColumnsSet.addAll(updateColumns); if (noWhereCondition) { diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MultiExecutorTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MultiExecutorTest.java index 9d89a3e9664..4da7b39d823 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MultiExecutorTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MultiExecutorTest.java @@ -22,6 +22,7 @@ import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.util.JdbcConstants; import com.google.common.collect.Lists; +import io.seata.common.exception.NotSupportYetException; import io.seata.rm.datasource.ConnectionProxy; import io.seata.rm.datasource.DataSourceProxy; import io.seata.rm.datasource.StatementProxy; @@ -174,9 +175,38 @@ public void testBeforeImageAndAfterImages() throws SQLException { Assertions.assertTrue(itemSet.contains("table_update_executor_test2")); Assertions.assertEquals(items.size(), 2); + // contains limit delete + sql = "delete from table_update_executor_test2 where id = 2;delete from table_update_executor_test2 where id = 2 limit 1;"; + multi = SQLVisitorFactory.get(sql, JdbcConstants.MYSQL); + executor = new MultiExecutor(statementProxy, (statement, args) -> { + return null; + }, multi); + Assertions.assertThrows(NotSupportYetException.class, executor::beforeImage); + // contains order by and limit delete + sql = "delete from table_update_executor_test2 where id = 2;delete from table_update_executor_test2 where id = 2 order by id desc limit 1;"; + multi = SQLVisitorFactory.get(sql, JdbcConstants.MYSQL); + executor = new MultiExecutor(statementProxy, (statement, args) -> { + return null; + }, multi); + Assertions.assertThrows(NotSupportYetException.class, executor::beforeImage); + //contains order by update + sql = "update table_update_executor_test set name = 'WILL' where id = 1;update table_update_executor_test set name = 'WILL' where id = 1 order by id desc;"; + multi = SQLVisitorFactory.get(sql, JdbcConstants.MYSQL); + executor = new MultiExecutor(statementProxy, (statement, args) -> { + return null; + }, multi); + Assertions.assertThrows(NotSupportYetException.class, executor::beforeImage); + + //contains order by and limit update + sql = "update table_update_executor_test set name = 'WILL' where id = 1;update table_update_executor_test set name = 'WILL' where id = 1 order by id desc limit 1;"; + multi = SQLVisitorFactory.get(sql, JdbcConstants.MYSQL); + executor = new MultiExecutor(statementProxy, (statement, args) -> { + return null; + }, multi); + Assertions.assertThrows(NotSupportYetException.class, executor::beforeImage); } } From 96016f0c104e980e06e3b1e53b0e8343df03a210 Mon Sep 17 00:00:00 2001 From: Rubbernecker <62733397+Rubbernecker@users.noreply.github.com> Date: Fri, 25 Dec 2020 12:50:45 +0800 Subject: [PATCH 18/93] feature:Support to obtain multiple configurations through a single dataid in Nacos (#3303) --- changes/1.5.0.md | 2 + changes/en-us/1.5.0.md | 2 + .../config/nacos/NacosConfiguration.java | 130 +++++++++++++++--- script/client/conf/registry.conf | 1 + script/server/config/registry.conf | 1 + script/server/config/registry.properties | 1 + script/server/config/registry.yml | 9 +- .../config/ConfigNacosProperties.java | 10 ++ server/src/main/resources/registry.conf | 1 + 9 files changed, 137 insertions(+), 20 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 45a2301aab1..69f9d75a568 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -42,6 +42,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3365](https://github.com/seata/seata/pull/3365)] 修复ParameterParserTest测试用例 - [[#3359](https://github.com/seata/seata/pull/3359)] 删除未使用的测试用例 - [[#3397](https://github.com/seata/seata/pull/3397)] 添加更改记录文件夹 + - [[#3303](https://github.com/seata/seata/pull/3303)] 支持从nacos单一dataId中读取所有配置 @@ -61,6 +62,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [a364176773](https://github.com/a364176773) - [anselleeyy](https://github.com/anselleeyy) - [Ifdevil](https://github.com/Ifdevil) + - [Rubbernecker](https://github.com/Rubbernecker) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 2c4e1a55935..fb4364e984e 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -41,6 +41,7 @@ - [[#3365](https://github.com/seata/seata/pull/3365)] optimize ParameterParserTest test case failed - [[#3359](https://github.com/seata/seata/pull/3359)] remove unused test case - [[#3397](https://github.com/seata/seata/pull/3397)] add the change records folder + - [[#3303](https://github.com/seata/seata/pull/3303)] supports reading all configurations from a single Nacos dataId ### test @@ -57,6 +58,7 @@ - [a364176773](https://github.com/a364176773) - [anselleeyy](https://github.com/anselleeyy) - [Ifdevil](https://github.com/Ifdevil) + - [Rubbernecker](https://github.com/Rubbernecker) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/config/seata-config-nacos/src/main/java/io/seata/config/nacos/NacosConfiguration.java b/config/seata-config-nacos/src/main/java/io/seata/config/nacos/NacosConfiguration.java index bdf45b9eed9..c544810f25b 100644 --- a/config/seata-config-nacos/src/main/java/io/seata/config/nacos/NacosConfiguration.java +++ b/config/seata-config-nacos/src/main/java/io/seata/config/nacos/NacosConfiguration.java @@ -15,6 +15,12 @@ */ package io.seata.config.nacos; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.util.Enumeration; import java.util.Map; import java.util.Objects; import java.util.Properties; @@ -50,8 +56,10 @@ public class NacosConfiguration extends AbstractConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(NacosConfiguration.class); private static final String DEFAULT_GROUP = "SEATA_GROUP"; + private static final String DEFAULT_DATA_ID = "seata.properties"; private static final String GROUP_KEY = "group"; private static final String PRO_SERVER_ADDR_KEY = "serverAddr"; + private static final String NACOS_DATA_ID_KEY = "dataId"; private static final String ENDPOINT_KEY = "endpoint"; private static final String CONFIG_TYPE = "nacos"; private static final String DEFAULT_NAMESPACE = ""; @@ -63,8 +71,9 @@ public class NacosConfiguration extends AbstractConfiguration { private static final Configuration FILE_CONFIG = ConfigurationFactory.CURRENT_FILE_INSTANCE; private static volatile ConfigService configService; private static final int MAP_INITIAL_CAPACITY = 8; - private ConcurrentMap> configListenersMap - = new ConcurrentHashMap<>(MAP_INITIAL_CAPACITY); + private static final ConcurrentMap> CONFIG_LISTENERS_MAP + = new ConcurrentHashMap<>(MAP_INITIAL_CAPACITY); + private static volatile Properties seataConfig = new Properties(); /** * Get instance of NacosConfiguration @@ -89,6 +98,7 @@ private NacosConfiguration() { if (configService == null) { try { configService = NacosFactory.createConfigService(getConfigProperties()); + initSeataConfig(); } catch (NacosException e) { throw new RuntimeException(e); } @@ -101,11 +111,17 @@ public String getLatestConfig(String dataId, String defaultValue, long timeoutMi if (value != null) { return value; } - try { - value = configService.getConfig(dataId, getNacosGroup(), timeoutMills); - } catch (NacosException exx) { - LOGGER.error(exx.getErrMsg()); + + value = seataConfig.getProperty(dataId); + + if (null == value) { + try { + value = configService.getConfig(dataId, getNacosGroup(), timeoutMills); + } catch (NacosException exx) { + LOGGER.error(exx.getErrMsg()); + } } + return value == null ? defaultValue : value; } @@ -113,7 +129,12 @@ public String getLatestConfig(String dataId, String defaultValue, long timeoutMi public boolean putConfig(String dataId, String content, long timeoutMills) { boolean result = false; try { - result = configService.publishConfig(dataId, getNacosGroup(), content); + if (!seataConfig.isEmpty()) { + seataConfig.setProperty(dataId, content); + result = configService.publishConfig(getNacosDataId(), getNacosGroup(), getSeataConfigStr()); + } else { + result = configService.publishConfig(dataId, getNacosGroup(), content); + } } catch (NacosException exx) { LOGGER.error(exx.getErrMsg()); } @@ -129,7 +150,12 @@ public boolean putConfigIfAbsent(String dataId, String content, long timeoutMill public boolean removeConfig(String dataId, long timeoutMills) { boolean result = false; try { - result = configService.removeConfig(dataId, getNacosGroup()); + if (!seataConfig.isEmpty()) { + seataConfig.remove(dataId); + result = configService.publishConfig(getNacosDataId(), getNacosGroup(), getSeataConfigStr()); + } else { + result = configService.removeConfig(dataId, getNacosGroup()); + } } catch (NacosException exx) { LOGGER.error(exx.getErrMsg()); } @@ -143,7 +169,7 @@ public void addConfigListener(String dataId, ConfigurationChangeListener listene } try { NacosListener nacosListener = new NacosListener(dataId, listener); - configListenersMap.computeIfAbsent(dataId, key -> new ConcurrentHashMap<>()) + CONFIG_LISTENERS_MAP.computeIfAbsent(dataId, key -> new ConcurrentHashMap<>()) .put(listener, nacosListener); configService.addListener(dataId, getNacosGroup(), nacosListener); } catch (Exception exx) { @@ -161,7 +187,7 @@ public void removeConfigListener(String dataId, ConfigurationChangeListener list for (ConfigurationChangeListener entry : configChangeListeners) { if (listener.equals(entry)) { NacosListener nacosListener = null; - Map configListeners = configListenersMap.get(dataId); + Map configListeners = CONFIG_LISTENERS_MAP.get(dataId); if (configListeners != null) { nacosListener = configListeners.get(listener); configListeners.remove(entry); @@ -177,7 +203,7 @@ public void removeConfigListener(String dataId, ConfigurationChangeListener list @Override public Set getConfigListeners(String dataId) { - Map configListeners = configListenersMap.get(dataId); + Map configListeners = CONFIG_LISTENERS_MAP.get(dataId); if (CollectionUtils.isNotEmpty(configListeners)) { return configListeners.keySet(); } else { @@ -210,10 +236,10 @@ private static Properties getConfigProperties() { properties.setProperty(PRO_NAMESPACE_KEY, namespace); } String userName = StringUtils.isNotBlank(System.getProperty(USER_NAME)) ? System.getProperty(USER_NAME) - : FILE_CONFIG.getConfig(getNacosUserName()); + : FILE_CONFIG.getConfig(getNacosUserName()); if (StringUtils.isNotBlank(userName)) { String password = StringUtils.isNotBlank(System.getProperty(PASSWORD)) ? System.getProperty(PASSWORD) - : FILE_CONFIG.getConfig(getNacosPassword()); + : FILE_CONFIG.getConfig(getNacosPassword()); if (StringUtils.isNotBlank(password)) { properties.setProperty(USER_NAME, userName); properties.setProperty(PASSWORD, password); @@ -234,20 +260,57 @@ private static String getNacosGroupKey() { return String.join(ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR, ConfigurationKeys.FILE_ROOT_CONFIG, CONFIG_TYPE, GROUP_KEY); } + private static String getNacosDataIdKey() { + return String.join(ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR, ConfigurationKeys.FILE_ROOT_CONFIG, CONFIG_TYPE, NACOS_DATA_ID_KEY); + } + private static String getNacosUserName() { return String.join(ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR, ConfigurationKeys.FILE_ROOT_CONFIG, CONFIG_TYPE, - USER_NAME); + USER_NAME); } private static String getNacosPassword() { return String.join(ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR, ConfigurationKeys.FILE_ROOT_CONFIG, CONFIG_TYPE, - PASSWORD); + PASSWORD); } private static String getNacosGroup() { return FILE_CONFIG.getConfig(getNacosGroupKey(), DEFAULT_GROUP); } + private static String getNacosDataId() { + return FILE_CONFIG.getConfig(getNacosDataIdKey(), DEFAULT_DATA_ID); + } + + private static String getSeataConfigStr() { + StringBuilder sb = new StringBuilder(); + + Enumeration enumeration = seataConfig.propertyNames(); + while (enumeration.hasMoreElements()) { + String key = (String) enumeration.nextElement(); + String property = seataConfig.getProperty(key); + sb.append(key).append("=").append(property).append("\n"); + } + + return sb.toString(); + } + + private static void initSeataConfig() { + try { + String nacosDataId = getNacosDataId(); + String config = configService.getConfig(nacosDataId, getNacosGroup(), DEFAULT_CONFIG_TIMEOUT); + if (StringUtils.isNotBlank(config)) { + try (Reader reader = new InputStreamReader(new ByteArrayInputStream(config.getBytes()), StandardCharsets.UTF_8)) { + seataConfig.load(reader); + } + NacosListener nacosListener = new NacosListener(nacosDataId, null); + configService.addListener(nacosDataId, getNacosGroup(), nacosListener); + } + } catch (NacosException | IOException e) { + LOGGER.error("init config properties error", e); + } + } + @Override public String getTypeName() { return CONFIG_TYPE; @@ -282,8 +345,43 @@ public ConfigurationChangeListener getTargetListener() { @Override public void innerReceive(String dataId, String group, String configInfo) { + //The new configuration method to puts all configurations into a dateId + if (getNacosDataId().equals(dataId)) { + Properties seataConfigNew = new Properties(); + if (StringUtils.isNotBlank(configInfo)) { + try (Reader reader = new InputStreamReader(new ByteArrayInputStream(configInfo.getBytes()), StandardCharsets.UTF_8)) { + seataConfigNew.load(reader); + } catch (IOException e) { + LOGGER.error("load config properties error", e); + return; + } + } + + //Get all the monitored dataids and judge whether it has been modified + for (Map.Entry> entry : CONFIG_LISTENERS_MAP.entrySet()) { + String listenedDataId = entry.getKey(); + String propertyOld = seataConfig.getProperty(listenedDataId, ""); + String propertyNew = seataConfigNew.getProperty(listenedDataId, ""); + if (!propertyOld.equals(propertyNew)) { + ConfigurationChangeEvent event = new ConfigurationChangeEvent() + .setDataId(listenedDataId) + .setNewValue(propertyNew) + .setNamespace(group); + + ConcurrentMap configListeners = entry.getValue(); + for (ConfigurationChangeListener configListener : configListeners.keySet()) { + configListener.onProcessEvent(event); + } + } + } + + seataConfig = seataConfigNew; + return; + } + + //Compatible with old writing ConfigurationChangeEvent event = new ConfigurationChangeEvent().setDataId(dataId).setNewValue(configInfo) - .setNamespace(group); + .setNamespace(group); listener.onProcessEvent(event); } } diff --git a/script/client/conf/registry.conf b/script/client/conf/registry.conf index b984696dc07..fc04bb37f05 100644 --- a/script/client/conf/registry.conf +++ b/script/client/conf/registry.conf @@ -60,6 +60,7 @@ config { group = "SEATA_GROUP" username = "" password = "" + dataId = "seata.properties" } consul { serverAddr = "127.0.0.1:8500" diff --git a/script/server/config/registry.conf b/script/server/config/registry.conf index cd85ac73558..fefd59e6198 100644 --- a/script/server/config/registry.conf +++ b/script/server/config/registry.conf @@ -65,6 +65,7 @@ config { group = "SEATA_GROUP" username = "" password = "" + dataId = "seataServer.properties" } consul { serverAddr = "127.0.0.1:8500" diff --git a/script/server/config/registry.properties b/script/server/config/registry.properties index 9c859befefb..b478f506199 100644 --- a/script/server/config/registry.properties +++ b/script/server/config/registry.properties @@ -40,6 +40,7 @@ config.nacos.namespace= config.nacos.group=SEATA_GROUP config.nacos.username= config.nacos.password= +config.nacos.dataId=seataServer.properties config.consul.serverAddr=127.0.0.1:8500 config.apollo.appId=seata-server config.apollo.apolloMeta=http://192.168.1.204:8801 diff --git a/script/server/config/registry.yml b/script/server/config/registry.yml index 13d0d9cae86..45ca471a2c5 100644 --- a/script/server/config/registry.yml +++ b/script/server/config/registry.yml @@ -11,8 +11,8 @@ registry: namespace: cluster: default username: - password: - + password: + eureka: serviceUrl: http://localhost:8761/eureka application: default @@ -64,11 +64,12 @@ config: namespace: group: SEATA_GROUP username: - password: + password: + dataId: seataServer.properties consul: serverAddr: 127.0.0.1:8500 - + apollo: appId: seata-server apolloMeta: http://192.168.1.204:8801 diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/config/ConfigNacosProperties.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/config/ConfigNacosProperties.java index 798c9e73dab..2d75286cf27 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/config/ConfigNacosProperties.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/config/ConfigNacosProperties.java @@ -31,6 +31,7 @@ public class ConfigNacosProperties { private String group = "SEATA_GROUP"; private String username = ""; private String password = ""; + private String dataId = "seata.properties"; public String getServerAddr() { return serverAddr; @@ -76,4 +77,13 @@ public ConfigNacosProperties setPassword(String password) { this.password = password; return this; } + + public String getDataId() { + return dataId; + } + + public ConfigNacosProperties setDataId(String dataId) { + this.dataId = dataId; + return this; + } } diff --git a/server/src/main/resources/registry.conf b/server/src/main/resources/registry.conf index 97f8d0b78b6..7f0210050a1 100644 --- a/server/src/main/resources/registry.conf +++ b/server/src/main/resources/registry.conf @@ -65,6 +65,7 @@ config { group = "SEATA_GROUP" username = "" password = "" + dataId = "seataServer.properties" } consul { serverAddr = "127.0.0.1:8500" From ee18dad45f6dc1926bdf8725e7150b658ea09a1b Mon Sep 17 00:00:00 2001 From: liujian <46431414+lj2018110133@users.noreply.github.com> Date: Sat, 26 Dec 2020 16:30:00 +0800 Subject: [PATCH 19/93] optimize: globalTransactionScanner listener optimize (#3380) --- changes/1.5.0.md | 2 ++ changes/en-us/1.5.0.md | 2 ++ .../seata/spring/annotation/GlobalTransactionScanner.java | 8 ++++---- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 69f9d75a568..60495cf5953 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -43,6 +43,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3359](https://github.com/seata/seata/pull/3359)] 删除未使用的测试用例 - [[#3397](https://github.com/seata/seata/pull/3397)] 添加更改记录文件夹 - [[#3303](https://github.com/seata/seata/pull/3303)] 支持从nacos单一dataId中读取所有配置 + - [[#3380](https://github.com/seata/seata/pull/3380)] 优化globalTransactionScanner监听器 @@ -63,6 +64,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [anselleeyy](https://github.com/anselleeyy) - [Ifdevil](https://github.com/Ifdevil) - [Rubbernecker](https://github.com/Rubbernecker) + - [lj2018110133](https://github.com/lj2018110133) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index fb4364e984e..45ff694fc78 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -42,6 +42,7 @@ - [[#3359](https://github.com/seata/seata/pull/3359)] remove unused test case - [[#3397](https://github.com/seata/seata/pull/3397)] add the change records folder - [[#3303](https://github.com/seata/seata/pull/3303)] supports reading all configurations from a single Nacos dataId + - [[#3380](https://github.com/seata/seata/pull/3380)] globalTransactionScanner listener optimize ### test @@ -59,6 +60,7 @@ - [anselleeyy](https://github.com/anselleeyy) - [Ifdevil](https://github.com/Ifdevil) - [Rubbernecker](https://github.com/Rubbernecker) + - [lj2018110133](https://github.com/lj2018110133) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/spring/src/main/java/io/seata/spring/annotation/GlobalTransactionScanner.java b/spring/src/main/java/io/seata/spring/annotation/GlobalTransactionScanner.java index a03ed9d784c..6afe974d8eb 100644 --- a/spring/src/main/java/io/seata/spring/annotation/GlobalTransactionScanner.java +++ b/spring/src/main/java/io/seata/spring/annotation/GlobalTransactionScanner.java @@ -329,12 +329,12 @@ protected Object[] getAdvicesAndAdvisorsForBean(Class beanClass, String beanName @Override public void afterPropertiesSet() { - ConfigurationCache.addConfigListener(ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION, - (ConfigurationChangeListener)this); if (disableGlobalTransaction) { if (LOGGER.isInfoEnabled()) { LOGGER.info("Global transaction is disabled."); } + ConfigurationCache.addConfigListener(ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION, + (ConfigurationChangeListener)this); return; } if (initialized.compareAndSet(false, true)) { @@ -351,10 +351,10 @@ public void setApplicationContext(ApplicationContext applicationContext) throws @Override public void onChangeEvent(ConfigurationChangeEvent event) { if (ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION.equals(event.getDataId())) { - LOGGER.info("{} config changed, old value:{}, new value:{}", ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION, - disableGlobalTransaction, event.getNewValue()); disableGlobalTransaction = Boolean.parseBoolean(event.getNewValue().trim()); if (!disableGlobalTransaction && initialized.compareAndSet(false, true)) { + LOGGER.info("{} config changed, old value:{}, new value:{}", ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION, + disableGlobalTransaction, event.getNewValue()); initClient(); } } From f4349f9a0b5f6e472fa8e27e9ded02bfaf0a9890 Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Sun, 27 Dec 2020 12:24:29 +0800 Subject: [PATCH 20/93] bugfix: fix the value can not be push to nacos when special charset in config.txt (#3406) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + script/config-center/nacos/nacos-config.py | 7 ++++--- script/config-center/nacos/nacos-config.sh | 13 ++++++++++++- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 60495cf5953..364bd827615 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -26,6 +26,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3258](https://github.com/seata/seata/pull/3258)] 修复AsyncWorker潜在的OOM问题 - [[#3293](https://github.com/seata/seata/pull/3293)] 修复配置缓存获取值时类型不匹配的bug - [[#3241](https://github.com/seata/seata/pull/3241)] 禁止在多SQL的情况下使用 limit 和 order by 语法 + - [[#3406](https://github.com/seata/seata/pull/3406)] 修复当config.txt中包含特殊字符时,键值对无法被推上nacos diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 45ff694fc78..5fbe1f8ac81 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -26,6 +26,7 @@ - [[#3258](https://github.com/seata/seata/pull/3258)] fix AsyncWorker potential OOM problem - [[#3293](https://github.com/seata/seata/pull/3293)] configuration cache get value cast exception - [[#3241](https://github.com/seata/seata/pull/3241)] forbidden use order by or limit in multi sql + - [[#3406](https://github.com/seata/seata/pull/3406)] fix the value can not be push to nacos when special charset in config.txt ### optimize: diff --git a/script/config-center/nacos/nacos-config.py b/script/config-center/nacos/nacos-config.py index 014caf18320..7d41dd13b64 100644 --- a/script/config-center/nacos/nacos-config.py +++ b/script/config-center/nacos/nacos-config.py @@ -3,6 +3,7 @@ import http.client import sys +import urllib.parse if len(sys.argv) <= 2: print ('python nacos-config.py nacosAddr') @@ -14,7 +15,7 @@ hasError = False for line in open('../config.txt'): - pair = line.split('=') + pair = line.rstrip("\n").split('=') if len(pair) < 2: continue print (line), @@ -22,9 +23,9 @@ conn = http.client.HTTPConnection(url_prefix) if len(sys.argv) == 3: namespace=sys.argv[2] - url_postfix = '/nacos/v1/cs/configs?dataId={0}&group=SEATA_GROUP&content={1}&tenant={2}'.format(str(pair[0]),str(line[line.index('=')+1:]).strip(),namespace) + url_postfix = '/nacos/v1/cs/configs?dataId={0}&group=SEATA_GROUP&content={1}&tenant={2}'.format(urllib.parse.quote(str(pair[0])),urllib.parse.quote(str(pair[1])).strip(),namespace) else: - url_postfix = '/nacos/v1/cs/configs?dataId={}&group=SEATA_GROUP&content={}'.format(str(pair[0]),str(line[line.index('=')+1:])).strip() + url_postfix = '/nacos/v1/cs/configs?dataId={}&group=SEATA_GROUP&content={}'.format(urllib.parse.quote(str(pair[0])),urllib.parse.quote(str(pair[1]))).strip() conn.request("POST", url_postfix, headers=headers) res = conn.getresponse() data = res.read() diff --git a/script/config-center/nacos/nacos-config.sh b/script/config-center/nacos/nacos-config.sh index 0f47b52e851..a2f7be91c53 100644 --- a/script/config-center/nacos/nacos-config.sh +++ b/script/config-center/nacos/nacos-config.sh @@ -41,6 +41,17 @@ do esac done +urlencode() { + for ((i=0; i < ${#1}; i++)) + do + char="${1:$i:1}" + case $char in + [a-zA-Z0-9.~_-]) printf $char ;; + *) printf '%%%02X' "'$char" ;; + esac + done +} + if [[ -z ${host} ]]; then host=localhost fi @@ -69,7 +80,7 @@ echo "set group=$group" failCount=0 tempLog=$(mktemp -u) function addConfig() { - curl -X POST -H "${contentType}" "http://$nacosAddr/nacos/v1/cs/configs?dataId=$1&group=$group&content=$2&tenant=$tenant&username=$username&password=$password" >"${tempLog}" 2>/dev/null + curl -X POST -H "${contentType}" "http://$nacosAddr/nacos/v1/cs/configs?dataId=$(urlencode $1)&group=$group&content=$(urlencode $2)&tenant=$tenant&username=$username&password=$password" >"${tempLog}" 2>/dev/null if [[ -z $(cat "${tempLog}") ]]; then echo " Please check the cluster status. " exit 1 From 5fb5b38430be16c85781fe18bd22c0fa6db727f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?WangLiang/=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Mon, 28 Dec 2020 09:36:12 +0800 Subject: [PATCH 21/93] optimize: The server directory is build by version, and build only when the profile is 'release-seata' (#3123) --- .gitignore | 13 ++-- distribution/pom.xml | 2 +- server/pom.xml | 146 +++++++++++++++++++++++-------------------- 3 files changed, 88 insertions(+), 73 deletions(-) diff --git a/.gitignore b/.gitignore index a115e4f3960..afb8e49713a 100644 --- a/.gitignore +++ b/.gitignore @@ -26,10 +26,14 @@ dependency-reduced-pom.xml *.diff *.patch *.tmp -/distribution/bin -/distribution/conf -/distribution/lib -/distribution/logs +/distribution/bin/ +/distribution/conf/ +/distribution/lib/ +/distribution/logs/ +/distribution/*/bin/ +/distribution/*/conf/ +/distribution/*/lib/ +/distribution/*/logs/ /server/*root.* /server/.root.* /server/sessionStore/ @@ -37,6 +41,7 @@ dependency-reduced-pom.xml /sessionStore/ /test/sessionStore/ /distribution/sessionStore/ +/distribution/*/sessionStore/ /file_store/ # system ignore diff --git a/distribution/pom.xml b/distribution/pom.xml index 2da22968728..3e3fe0284c8 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -71,7 +71,7 @@ - ${basedir}/lib/jdbc + ${basedir}/seata-server-${revision}/lib/jdbc diff --git a/server/pom.xml b/server/pom.xml index f38cd0b6d7c..77dc18798a2 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -121,6 +121,84 @@ + + + release-seata + + + + org.codehaus.mojo + appassembler-maven-plugin + 1.10 + + + make-assembly + package + + assemble + + + + + conf + src/main/resources + true + true + flat + lib + UTF-8 + true + + .sh + .bat + + ../distribution/seata-server-${revision} + logs + + + io.seata.server.Server + seata-server + + + -server + -Xmx2048m + -Xms2048m + -Xmn1024m + -Xss512k + -XX:SurvivorRatio=10 + -XX:MetaspaceSize=128m + -XX:MaxMetaspaceSize=256m + -XX:MaxDirectMemorySize=1024m + -XX:-OmitStackTraceInFastThrow + -XX:-UseAdaptiveSizePolicy + -XX:+HeapDumpOnOutOfMemoryError + -XX:HeapDumpPath=@BASEDIR@/logs/java_heapdump.hprof + + -XX:+DisableExplicitGC + -XX:+CMSParallelRemarkEnabled + -XX:+UseCMSInitiatingOccupancyOnly + -XX:CMSInitiatingOccupancyFraction=75 + -Xloggc:@BASEDIR@/logs/seata_gc.log + -verbose:gc + + -Dio.netty.leakDetectionLevel=advanced + + -Dlogback.color.disable-for-bat=true + + + + windows + unix + + + + + + + + + + @@ -154,74 +232,6 @@ - - org.codehaus.mojo - appassembler-maven-plugin - 1.10 - - - make-assembly - package - - assemble - - - - - conf - src/main/resources - true - true - flat - lib - UTF-8 - true - - .sh - .bat - - ../distribution - logs - - - io.seata.server.Server - seata-server - - - -server - -Xmx2048m - -Xms2048m - -Xmn1024m - -Xss512k - -XX:SurvivorRatio=10 - -XX:MetaspaceSize=128m - -XX:MaxMetaspaceSize=256m - -XX:MaxDirectMemorySize=1024m - -XX:-OmitStackTraceInFastThrow - -XX:-UseAdaptiveSizePolicy - -XX:+HeapDumpOnOutOfMemoryError - -XX:HeapDumpPath=@BASEDIR@/logs/java_heapdump.hprof - - -XX:+DisableExplicitGC - -XX:+CMSParallelRemarkEnabled - -XX:+UseCMSInitiatingOccupancyOnly - -XX:CMSInitiatingOccupancyFraction=75 - -Xloggc:@BASEDIR@/logs/seata_gc.log - -verbose:gc - - -Dio.netty.leakDetectionLevel=advanced - - -Dlogback.color.disable-for-bat=true - - - - windows - unix - - - - - com.google.cloud.tools jib-maven-plugin From 61321410c7bcb66bdccf0d49d6539e9251d95311 Mon Sep 17 00:00:00 2001 From: jimin Date: Mon, 28 Dec 2020 17:51:35 +0800 Subject: [PATCH 22/93] optimize: optimize maven clean plugin to clear the distribution directory (#3415) --- README.md | 2 +- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + server/pom.xml | 20 ++++++++++++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index afeeb7bf605..a1c57d984d9 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ Contributors are welcomed to join the Seata project. Please check [CONTRIBUTING] * dev-seata@googlegroups.com , for dev/user discussion. [subscribe](mailto:dev-seata+subscribe@googlegroups.com), [unsubscribe](mailto:dev-seata+unsubscribe@googlegroups.com), [archive](https://groups.google.com/forum/#!forum/dev-seata) - + ## Seata ecosystem diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 364bd827615..4822cfcc100 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -45,6 +45,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3397](https://github.com/seata/seata/pull/3397)] 添加更改记录文件夹 - [[#3303](https://github.com/seata/seata/pull/3303)] 支持从nacos单一dataId中读取所有配置 - [[#3380](https://github.com/seata/seata/pull/3380)] 优化globalTransactionScanner监听器 + - [[#3415](https://github.com/seata/seata/pull/3415)] 优化 maven clean 插件可清除 distribution 目录 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 5fbe1f8ac81..52ad711c6f3 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -44,6 +44,7 @@ - [[#3397](https://github.com/seata/seata/pull/3397)] add the change records folder - [[#3303](https://github.com/seata/seata/pull/3303)] supports reading all configurations from a single Nacos dataId - [[#3380](https://github.com/seata/seata/pull/3380)] globalTransactionScanner listener optimize + - [[#3415](https://github.com/seata/seata/pull/3415)] optimize maven clean plugin to clear the distribution directory ### test diff --git a/server/pom.xml b/server/pom.xml index 77dc18798a2..e3acd8017f5 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -126,6 +126,26 @@ release-seata + + org.apache.maven.plugins + maven-clean-plugin + 3.0.0 + + false + + + ../distribution + + bin/** + conf/** + logs/** + lib/** + seata-server-${revision}/** + + + + + org.codehaus.mojo appassembler-maven-plugin From a2e6e97a6ed23fc831a5f634a96472aac6070c19 Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Mon, 28 Dec 2020 21:13:26 +0800 Subject: [PATCH 23/93] bugfix: fix getGeneratedKeys may get history pk (#3418) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + .../io/seata/rm/datasource/AbstractStatementProxy.java | 10 +--------- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 4822cfcc100..281f5052b37 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -27,6 +27,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3293](https://github.com/seata/seata/pull/3293)] 修复配置缓存获取值时类型不匹配的bug - [[#3241](https://github.com/seata/seata/pull/3241)] 禁止在多SQL的情况下使用 limit 和 order by 语法 - [[#3406](https://github.com/seata/seata/pull/3406)] 修复当config.txt中包含特殊字符时,键值对无法被推上nacos + - [[#3418](https://github.com/seata/seata/pull/3418)] 修复 getGeneratedKeys 可能会取到历史的主键的问题 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 52ad711c6f3..52bbf4e2e7a 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -27,6 +27,7 @@ - [[#3293](https://github.com/seata/seata/pull/3293)] configuration cache get value cast exception - [[#3241](https://github.com/seata/seata/pull/3241)] forbidden use order by or limit in multi sql - [[#3406](https://github.com/seata/seata/pull/3406)] fix the value can not be push to nacos when special charset in config.txt + - [[#3418](https://github.com/seata/seata/pull/3418)] fix getGeneratedKeys may get history pk ### optimize: diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/AbstractStatementProxy.java b/rm-datasource/src/main/java/io/seata/rm/datasource/AbstractStatementProxy.java index 584138e23a0..32b132cff21 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/AbstractStatementProxy.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/AbstractStatementProxy.java @@ -42,11 +42,6 @@ public abstract class AbstractStatementProxy implements Sta */ protected T targetStatement; - /** - * The generated keys cached row set. - */ - private CachedRowSet generatedKeysRowSet; - /** * The Target sql. */ @@ -249,11 +244,8 @@ public boolean getMoreResults(int current) throws SQLException { @Override public ResultSet getGeneratedKeys() throws SQLException { - if (generatedKeysRowSet != null) { - return generatedKeysRowSet; - } ResultSet rs = targetStatement.getGeneratedKeys(); - generatedKeysRowSet = RowSetProvider.newFactory().createCachedRowSet(); + CachedRowSet generatedKeysRowSet = RowSetProvider.newFactory().createCachedRowSet(); generatedKeysRowSet.populate(rs); return generatedKeysRowSet; } From fb3a6446e237780f553d1cbabb6265f50b60f35a Mon Sep 17 00:00:00 2001 From: xingfudeshi Date: Tue, 29 Dec 2020 13:42:07 +0800 Subject: [PATCH 24/93] optimize: the property bean may not be initialized while reading config value (#3316) --- .../PropertyBeanPostProcessor.java | 45 ++++++++ .../autoconfigure/SeataAutoConfiguration.java | 102 +----------------- .../boot/autoconfigure/StarterConstants.java | 3 +- .../SpringBootConfigurationProvider.java | 78 ++++++++++++-- .../PropertyBeanPostProcessorTest.java | 64 +++++++++++ .../RedisAutoInjectionTypeConvertTest.java | 7 +- 6 files changed, 194 insertions(+), 105 deletions(-) create mode 100644 seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessor.java create mode 100644 seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessorTest.java diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessor.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessor.java new file mode 100644 index 00000000000..fb48f69b426 --- /dev/null +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessor.java @@ -0,0 +1,45 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.spring.boot.autoconfigure; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import static io.seata.spring.boot.autoconfigure.StarterConstants.PROPERTY_BEAN_MAP; + +/** + * @author xingfudeshi@gmail.com + */ +public class PropertyBeanPostProcessor implements BeanPostProcessor { + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean.getClass().isAnnotationPresent(ConfigurationProperties.class)) { + ConfigurationProperties configurationProperties = bean.getClass().getAnnotation(ConfigurationProperties.class); + String prefix = configurationProperties.prefix(); + PROPERTY_BEAN_MAP.computeIfPresent(prefix, (k, v) -> { + v.complete(bean); + return v; + }); + } + return bean; + } +} diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java index 2f1572633c6..ae07e1ec9d6 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java @@ -19,33 +19,6 @@ import io.seata.spring.annotation.datasource.SeataAutoDataSourceProxyCreator; import io.seata.spring.annotation.datasource.SeataDataSourceBeanPostProcessor; import io.seata.spring.boot.autoconfigure.properties.SeataProperties; -import io.seata.spring.boot.autoconfigure.properties.client.LockProperties; -import io.seata.spring.boot.autoconfigure.properties.client.LogProperties; -import io.seata.spring.boot.autoconfigure.properties.client.RmProperties; -import io.seata.spring.boot.autoconfigure.properties.client.ServiceProperties; -import io.seata.spring.boot.autoconfigure.properties.client.ShutdownProperties; -import io.seata.spring.boot.autoconfigure.properties.client.ThreadFactoryProperties; -import io.seata.spring.boot.autoconfigure.properties.client.TmProperties; -import io.seata.spring.boot.autoconfigure.properties.client.TransportProperties; -import io.seata.spring.boot.autoconfigure.properties.client.UndoProperties; -import io.seata.spring.boot.autoconfigure.properties.client.UndoCompressProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigApolloProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigConsulProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigCustomProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigEtcd3Properties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigFileProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigNacosProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigZooKeeperProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryConsulProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryCustomProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryEtcd3Properties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryEurekaProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryNacosProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryRedisProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistrySofaProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryZooKeeperProperties; import io.seata.spring.boot.autoconfigure.provider.SpringApplicationContextProvider; import io.seata.tm.api.DefaultFailureHandlerImpl; import io.seata.tm.api.FailureHandler; @@ -63,35 +36,7 @@ import static io.seata.common.Constants.BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER; import static io.seata.spring.annotation.datasource.AutoDataSourceProxyRegistrar.BEAN_NAME_SEATA_AUTO_DATA_SOURCE_PROXY_CREATOR; import static io.seata.spring.annotation.datasource.AutoDataSourceProxyRegistrar.BEAN_NAME_SEATA_DATA_SOURCE_BEAN_POST_PROCESSOR; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_RM_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_TM_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_APOLLO_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_CONSUL_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_CUSTOM_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_ETCD3_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_FILE_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_NACOS_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_ZK_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.LOCK_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.LOG_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.PROPERTY_BEAN_MAP; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_CONSUL_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_CUSTOM_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_ETCD3_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_EUREKA_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_NACOS_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_REDIS_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_SOFA_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_ZK_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.SEATA_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.SERVICE_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.SHUTDOWN_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.THREAD_FACTORY_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.TRANSPORT_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.UNDO_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.COMPRESS_PREFIX; /** * @author xingfudeshi@gmail.com @@ -103,47 +48,10 @@ public class SeataAutoConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(SeataAutoConfiguration.class); - public SeataAutoConfiguration(SeataProperties seataProperties, - RmProperties rmProperties, TmProperties tmProperties, LockProperties lockProperties, - ServiceProperties serviceProperties, ShutdownProperties shutdownProperties, ThreadFactoryProperties threadFactoryProperties, - UndoProperties undoProperties, UndoCompressProperties undoCompressProperties, LogProperties logProperties, TransportProperties transportProperties, - ConfigProperties configProperties, ConfigFileProperties configFileProperties, RegistryProperties registryProperties, - ConfigNacosProperties configNacosProperties, ConfigConsulProperties configConsulProperties, ConfigZooKeeperProperties configZooKeeperProperties, - ConfigApolloProperties configApolloProperties, ConfigEtcd3Properties configEtcd3Properties, ConfigCustomProperties configCustomProperties, - RegistryConsulProperties registryConsulProperties, RegistryEtcd3Properties registryEtcd3Properties, RegistryEurekaProperties registryEurekaProperties, - RegistryNacosProperties registryNacosProperties, RegistryRedisProperties registryRedisProperties, RegistrySofaProperties registrySofaProperties, - RegistryZooKeeperProperties registryZooKeeperProperties, RegistryCustomProperties registryCustomProperties) { - PROPERTY_BEAN_MAP.put(SEATA_PREFIX, seataProperties); - - PROPERTY_BEAN_MAP.put(CLIENT_RM_PREFIX, rmProperties); - PROPERTY_BEAN_MAP.put(CLIENT_TM_PREFIX, tmProperties); - PROPERTY_BEAN_MAP.put(LOCK_PREFIX, lockProperties); - PROPERTY_BEAN_MAP.put(SERVICE_PREFIX, serviceProperties); - PROPERTY_BEAN_MAP.put(SHUTDOWN_PREFIX, shutdownProperties); - PROPERTY_BEAN_MAP.put(THREAD_FACTORY_PREFIX, threadFactoryProperties); - PROPERTY_BEAN_MAP.put(UNDO_PREFIX, undoProperties); - PROPERTY_BEAN_MAP.put(COMPRESS_PREFIX, undoCompressProperties); - PROPERTY_BEAN_MAP.put(LOG_PREFIX, logProperties); - PROPERTY_BEAN_MAP.put(TRANSPORT_PREFIX, transportProperties); - PROPERTY_BEAN_MAP.put(CONFIG_PREFIX, configProperties); - PROPERTY_BEAN_MAP.put(CONFIG_FILE_PREFIX, configFileProperties); - PROPERTY_BEAN_MAP.put(REGISTRY_PREFIX, registryProperties); - - PROPERTY_BEAN_MAP.put(CONFIG_NACOS_PREFIX, configNacosProperties); - PROPERTY_BEAN_MAP.put(CONFIG_CONSUL_PREFIX, configConsulProperties); - PROPERTY_BEAN_MAP.put(CONFIG_ZK_PREFIX, configZooKeeperProperties); - PROPERTY_BEAN_MAP.put(CONFIG_APOLLO_PREFIX, configApolloProperties); - PROPERTY_BEAN_MAP.put(CONFIG_ETCD3_PREFIX, configEtcd3Properties); - PROPERTY_BEAN_MAP.put(CONFIG_CUSTOM_PREFIX, configCustomProperties); - - PROPERTY_BEAN_MAP.put(REGISTRY_CONSUL_PREFIX, registryConsulProperties); - PROPERTY_BEAN_MAP.put(REGISTRY_ETCD3_PREFIX, registryEtcd3Properties); - PROPERTY_BEAN_MAP.put(REGISTRY_EUREKA_PREFIX, registryEurekaProperties); - PROPERTY_BEAN_MAP.put(REGISTRY_NACOS_PREFIX, registryNacosProperties); - PROPERTY_BEAN_MAP.put(REGISTRY_REDIS_PREFIX, registryRedisProperties); - PROPERTY_BEAN_MAP.put(REGISTRY_SOFA_PREFIX, registrySofaProperties); - PROPERTY_BEAN_MAP.put(REGISTRY_ZK_PREFIX, registryZooKeeperProperties); - PROPERTY_BEAN_MAP.put(REGISTRY_CUSTOM_PREFIX, registryCustomProperties); + @Bean + @ConditionalOnMissingBean(PropertyBeanPostProcessor.class) + public PropertyBeanPostProcessor propertyBeanPostProcessor() { + return new PropertyBeanPostProcessor(); } @Bean(BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER) @@ -191,7 +99,7 @@ public SeataDataSourceBeanPostProcessor seataDataSourceBeanPostProcessor(SeataPr @ConditionalOnMissingBean(SeataAutoDataSourceProxyCreator.class) public SeataAutoDataSourceProxyCreator seataAutoDataSourceProxyCreator(SeataProperties seataProperties) { return new SeataAutoDataSourceProxyCreator(seataProperties.isUseJdkProxy(), - seataProperties.getExcludesForAutoProxying(), seataProperties.getDataSourceProxyMode()); + seataProperties.getExcludesForAutoProxying(), seataProperties.getDataSourceProxyMode()); } } } diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java index b478ebd0f9c..1eb694cbeb4 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java @@ -16,6 +16,7 @@ package io.seata.spring.boot.autoconfigure; import java.util.HashMap; +import java.util.concurrent.CompletableFuture; /** * @author xingfudeshi@gmail.com @@ -56,7 +57,7 @@ public interface StarterConstants { String CONFIG_CUSTOM_PREFIX = CONFIG_PREFIX + ".custom"; int MAP_CAPACITY = 64; - HashMap PROPERTY_BEAN_MAP = new HashMap<>(MAP_CAPACITY); + HashMap> PROPERTY_BEAN_MAP = new HashMap<>(MAP_CAPACITY); /** * The following special keys need to be normalized. diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/provider/SpringBootConfigurationProvider.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/provider/SpringBootConfigurationProvider.java index f73f48aec86..262295f8f70 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/provider/SpringBootConfigurationProvider.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/provider/SpringBootConfigurationProvider.java @@ -19,6 +19,10 @@ import java.lang.reflect.Method; import java.util.Map; import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.stream.Stream; import io.seata.config.Configuration; @@ -31,11 +35,37 @@ import org.springframework.cglib.proxy.MethodProxy; import static io.seata.common.util.StringFormatUtils.DOT; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_RM_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_TM_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.COMPRESS_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_APOLLO_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_CONSUL_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_CUSTOM_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_ETCD3_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_FILE_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_NACOS_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_ZK_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.LOCK_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.LOG_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.PROPERTY_BEAN_MAP; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_CONSUL_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_CUSTOM_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_ETCD3_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_EUREKA_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_NACOS_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_REDIS_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_SOFA_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_ZK_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.SEATA_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.SERVICE_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.SHUTDOWN_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_GROUPLIST; import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_VGROUP_MAPPING; +import static io.seata.spring.boot.autoconfigure.StarterConstants.THREAD_FACTORY_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.TRANSPORT_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.UNDO_PREFIX; /** * @author xingfudeshi@gmail.com @@ -44,6 +74,41 @@ public class SpringBootConfigurationProvider implements ExtConfigurationProvider private static final Logger LOGGER = LoggerFactory.getLogger(SpringBootConfigurationProvider.class); private static final String INTERCEPT_METHOD_PREFIX = "get"; + static { + PROPERTY_BEAN_MAP.putIfAbsent(SEATA_PREFIX, new CompletableFuture<>()); + + PROPERTY_BEAN_MAP.putIfAbsent(CLIENT_RM_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(CLIENT_TM_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(LOCK_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(SERVICE_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(SHUTDOWN_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(THREAD_FACTORY_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(UNDO_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(COMPRESS_PREFIX, new CompletableFuture<>()); + + PROPERTY_BEAN_MAP.putIfAbsent(LOG_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(TRANSPORT_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_FILE_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_PREFIX, new CompletableFuture<>()); + + PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_NACOS_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_CONSUL_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_ZK_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_APOLLO_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_ETCD3_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_CUSTOM_PREFIX, new CompletableFuture<>()); + + PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_CONSUL_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_ETCD3_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_EUREKA_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_NACOS_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_REDIS_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_SOFA_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_ZK_PREFIX, new CompletableFuture<>()); + PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_CUSTOM_PREFIX, new CompletableFuture<>()); + } + @Override public Configuration provide(Configuration originalConfiguration) { return (Configuration) Enhancer.create(originalConfiguration.getClass(), new MethodInterceptor() { @@ -74,12 +139,12 @@ public Object intercept(Object proxy, Method method, Object[] args, MethodProxy }); } - private Object get(String dataId, Object defaultValue, long timeoutMills) throws IllegalAccessException { + private Object get(String dataId, Object defaultValue, long timeoutMills) throws IllegalAccessException, ExecutionException, InterruptedException, TimeoutException { return get(dataId, defaultValue); } - private Object get(String dataId, Object defaultValue) throws IllegalAccessException { + private Object get(String dataId, Object defaultValue) throws IllegalAccessException, ExecutionException, InterruptedException, TimeoutException { Object result = get(dataId); if (result == null) { return defaultValue; @@ -87,10 +152,11 @@ private Object get(String dataId, Object defaultValue) throws IllegalAccessExcep return result; } - private Object get(String dataId) throws IllegalAccessException { + private Object get(String dataId) throws IllegalAccessException, ExecutionException, InterruptedException, TimeoutException { String propertyPrefix = getPropertyPrefix(dataId); - Object propertyObject = PROPERTY_BEAN_MAP.get(propertyPrefix); - if (propertyObject != null) { + CompletableFuture propertyFuture = PROPERTY_BEAN_MAP.get(propertyPrefix); + if (propertyFuture != null) { + Object propertyObject = propertyFuture.get(10000, TimeUnit.MILLISECONDS); String propertySuffix = getPropertySuffix(dataId); Optional fieldOptional = Stream.of(propertyObject.getClass().getDeclaredFields()).filter( f -> f.getName().equalsIgnoreCase(propertySuffix)).findAny(); @@ -107,7 +173,7 @@ private Object get(String dataId) throws IllegalAccessException { } else { if (LOGGER.isWarnEnabled()) { LOGGER.warn("Property bean with prefix '{}' was not found in `StarterConstants.PROPERTY_BEAN_MAP`." - + " Please inform the {} committer to fix this BUG.", propertyPrefix, SEATA_PREFIX); + + " Please inform the {} committer to fix this BUG.", propertyPrefix, SEATA_PREFIX); } } return null; diff --git a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessorTest.java b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessorTest.java new file mode 100644 index 00000000000..6613829cbbf --- /dev/null +++ b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessorTest.java @@ -0,0 +1,64 @@ +package io.seata.spring.boot.autoconfigure; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +import io.seata.spring.boot.autoconfigure.properties.SeataProperties; +import io.seata.spring.boot.autoconfigure.properties.SpringCloudAlibabaConfiguration; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import static io.seata.spring.boot.autoconfigure.StarterConstants.PROPERTY_BEAN_MAP; +import static io.seata.spring.boot.autoconfigure.StarterConstants.SEATA_PREFIX; + +/** + * @author xingfudeshi@gmail.com + */ +@Configuration +public class PropertyBeanPostProcessorTest { + private static AnnotationConfigApplicationContext context; + + @BeforeAll + public static void initContext() { + PROPERTY_BEAN_MAP.putIfAbsent(SEATA_PREFIX, new CompletableFuture<>()); + context = new AnnotationConfigApplicationContext(PropertyBeanPostProcessorTest.class); + } + + @Bean + public PropertyBeanPostProcessor propertyBeanPostProcessor() { + return new PropertyBeanPostProcessor(); + } + + @Bean + public SeataProperties seataProperties() { + SeataProperties seataProperties = new SeataProperties(); + seataProperties.setApplicationId("test-id"); + return seataProperties; + } + + @Bean + public SpringCloudAlibabaConfiguration springCloudAlibabaConfiguration() { + return new SpringCloudAlibabaConfiguration(); + } + + @Test + public void testCompletePropertyBean() throws ExecutionException, InterruptedException, TimeoutException { + Object object = PROPERTY_BEAN_MAP.get(SEATA_PREFIX).get(3, TimeUnit.SECONDS); + Assertions.assertThat(object).isInstanceOf(SeataProperties.class); + SeataProperties seataProperties = (SeataProperties) object; + Assertions.assertThat(seataProperties.getApplicationId()).isEqualTo("test-id"); + } + + + @AfterAll + public static void closeContext() { + context.close(); + } +} diff --git a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/RedisAutoInjectionTypeConvertTest.java b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/RedisAutoInjectionTypeConvertTest.java index 5b1befadc3e..252ff8c1a3b 100644 --- a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/RedisAutoInjectionTypeConvertTest.java +++ b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/RedisAutoInjectionTypeConvertTest.java @@ -15,6 +15,8 @@ */ package io.seata.spring.boot.autoconfigure; +import java.util.concurrent.CompletableFuture; + import io.seata.common.loader.EnhancedServiceLoader; import io.seata.config.Configuration; import io.seata.config.ExtConfigurationProvider; @@ -49,7 +51,10 @@ public static void initContext() { @Bean RegistryRedisProperties registryRedisProperties() { RegistryRedisProperties registryRedisProperties = new RegistryRedisProperties().setPassword("123456").setDb(1).setServerAddr("localhost:123456"); - PROPERTY_BEAN_MAP.put(REGISTRY_REDIS_PREFIX, registryRedisProperties); + CompletableFuture completableFuture = new CompletableFuture<>(); + if (PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_REDIS_PREFIX, completableFuture) == null) { + completableFuture.complete(registryRedisProperties); + } return registryRedisProperties; } From 08622b2ffc13b7b9f76781b0cd23e3ee6bb57065 Mon Sep 17 00:00:00 2001 From: liujian <46431414+lj2018110133@users.noreply.github.com> Date: Tue, 29 Dec 2020 14:21:22 +0800 Subject: [PATCH 25/93] feature: support redis sentinel mode (#3348) --- changes/1.5.0.md | 6 ++- changes/en-us/1.5.0.md | 9 ++-- .../core/constants/ConfigurationKeys.java | 49 ++++++++++++++++++- script/client/spring/application.properties | 2 +- script/config-center/config.txt | 6 ++- script/server/config/file.conf | 17 +++++-- script/server/config/file.properties | 19 ++++--- script/server/config/file.yml | 20 +++++--- .../storage/redis/JedisPooledFactory.java | 40 ++++++++++++--- server/src/main/resources/file.conf | 16 ++++-- 10 files changed, 149 insertions(+), 35 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 281f5052b37..36e1095d10d 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -19,6 +19,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3172](https://github.com/seata/seata/pull/3172)] 支持undolog压缩 - [[#3372](https://github.com/seata/seata/pull/3372)] saga模式下支撑用户自定义是否更新最后一次重试日志 + - [[#3348](https://github.com/seata/seata/pull/3348)] 支持redis哨兵模式 ### bugfix: @@ -46,8 +47,9 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3397](https://github.com/seata/seata/pull/3397)] 添加更改记录文件夹 - [[#3303](https://github.com/seata/seata/pull/3303)] 支持从nacos单一dataId中读取所有配置 - [[#3380](https://github.com/seata/seata/pull/3380)] 优化globalTransactionScanner监听器 + - [[#3123](https://github.com/seata/seata/pull/3123)] seata-server的目录按版本号构建,且仅当profile为release-seata时才构建 - [[#3415](https://github.com/seata/seata/pull/3415)] 优化 maven clean 插件可清除 distribution 目录 - + - [[#3316](https://github.com/seata/seata/pull/3316)] 优化读取配置值时,属性bean可能未初始化 ### test @@ -68,6 +70,8 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [Ifdevil](https://github.com/Ifdevil) - [Rubbernecker](https://github.com/Rubbernecker) - [lj2018110133](https://github.com/lj2018110133) + - [wangliang181230](https://github.com/wangliang181230) + - [xingfudeshi](https://github.com/xingfudeshi) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 52bbf4e2e7a..0fb1b227bad 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -19,7 +19,7 @@ - [[#3172](https://github.com/seata/seata/pull/3172)] support rollback info compress - [[#3372](https://github.com/seata/seata/pull/3372)] Saga support customize whether update last retry log - + - [[#3348](https://github.com/seata/seata/pull/3348)] support redis sentinel mode ### bugfix: @@ -44,9 +44,10 @@ - [[#3359](https://github.com/seata/seata/pull/3359)] remove unused test case - [[#3397](https://github.com/seata/seata/pull/3397)] add the change records folder - [[#3303](https://github.com/seata/seata/pull/3303)] supports reading all configurations from a single Nacos dataId - - [[#3380](https://github.com/seata/seata/pull/3380)] globalTransactionScanner listener optimize + - [[#3380](https://github.com/seata/seata/pull/3380)] globalTransactionScanner listener optimize + - [[#3123](https://github.com/seata/seata/pull/3123)] The server directory is build by version, and build only when the profile is release-seata - [[#3415](https://github.com/seata/seata/pull/3415)] optimize maven clean plugin to clear the distribution directory - + - [[#3316](https://github.com/seata/seata/pull/3316)] optimize the property bean may not be initialized while reading config value ### test - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient @@ -64,6 +65,8 @@ - [Ifdevil](https://github.com/Ifdevil) - [Rubbernecker](https://github.com/Rubbernecker) - [lj2018110133](https://github.com/lj2018110133) + - [wangliang181230](https://github.com/wangliang181230) + - [xingfudeshi](https://github.com/xingfudeshi) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java index 036eae57582..c0a20a67efe 100644 --- a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java +++ b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java @@ -485,20 +485,40 @@ public interface ConfigurationKeys { */ String SQL_PARSER_TYPE = CLIENT_RM_PREFIX + "sqlParserType"; + /** + * The constant STORE_REDIS_MODE. + */ + String STORE_REDIS_MODE = STORE_REDIS_PREFIX + "mode"; + /** * The constant STORE_REDIS_HOST. */ String STORE_REDIS_HOST = STORE_REDIS_PREFIX + "host"; + /** + * The constant STORE_REDIS_PORT. + */ + String STORE_REDIS_PORT = STORE_REDIS_PREFIX + "port"; + + /** + * The constant STORE_REDIS_SINGLE_PREFIX. + */ + String STORE_REDIS_SINGLE_PREFIX = STORE_REDIS_PREFIX + "single."; + + /** + * The constant STORE_REDIS_SINGLE_HOST. + */ + String STORE_REDIS_SINGLE_HOST = STORE_REDIS_SINGLE_PREFIX + "host"; + /** * The constant STORE_MIN_Conn. */ String STORE_REDIS_MIN_CONN = STORE_REDIS_PREFIX + "minConn"; /** - * The constant STORE_REDIS_PORT. + * The constant STORE_REDIS_SINGLE_PORT. */ - String STORE_REDIS_PORT = STORE_REDIS_PREFIX + "port"; + String STORE_REDIS_SINGLE_PORT = STORE_REDIS_SINGLE_PREFIX + "port"; /** * The constant STORE_REDIS_MAX_CONN. @@ -525,6 +545,31 @@ public interface ConfigurationKeys { */ String STORE_REDIS_QUERY_LIMIT = STORE_REDIS_PREFIX + "queryLimit"; + /** + * The constant REDIS_SENTINEL_MODE. + */ + String REDIS_SENTINEL_MODE = "sentinel"; + + /** + * The constant REDIS_SINGLE_MODE. + */ + String REDIS_SINGLE_MODE = "single"; + + /** + * The constant STORE_REDIS_SENTINEL_PREFIX. + */ + String STORE_REDIS_SENTINEL_PREFIX = STORE_REDIS_PREFIX + "sentinel."; + + /** + * STORE_REDIS_SENTINEL_MASTERNAME. + */ + String STORE_REDIS_SENTINEL_MASTERNAME = STORE_REDIS_SENTINEL_PREFIX + "masterName"; + + /** + * STORE_REDIS_SENTINEL_HOST. + */ + String STORE_REDIS_SENTINEL_HOST = STORE_REDIS_SENTINEL_PREFIX + "sentinelHosts"; + /** * The constant CLIENT_DEGRADE_CHECK_PERIOD. */ diff --git a/script/client/spring/application.properties b/script/client/spring/application.properties index 8da397cb8e5..340e8538295 100755 --- a/script/client/spring/application.properties +++ b/script/client/spring/application.properties @@ -129,4 +129,4 @@ seata.registry.zk.password= seata.registry.custom.name= seata.registry.load-balance=RandomLoadBalance -seata.registry.load-balance-virtual-nodes=10 +seata.registry.load-balance-virtual-nodes=10 \ No newline at end of file diff --git a/script/config-center/config.txt b/script/config-center/config.txt index 53ef859b82b..95d20373ea3 100644 --- a/script/config-center/config.txt +++ b/script/config-center/config.txt @@ -51,10 +51,12 @@ store.db.branchTable=branch_table store.db.queryLimit=100 store.db.lockTable=lock_table store.db.maxWait=5000 -store.redis.host=127.0.0.1 -store.redis.port=6379 +store.redis.mode=single +store.redis.single.host=127.0.0.1 +store.redis.single.port=6379 store.redis.maxConn=10 store.redis.minConn=1 +store.redis.maxTotal=100 store.redis.database=0 store.redis.password=null store.redis.queryLimit=100 diff --git a/script/server/config/file.conf b/script/server/config/file.conf index f3fa6afecd8..9c6db1710e4 100644 --- a/script/server/config/file.conf +++ b/script/server/config/file.conf @@ -42,13 +42,24 @@ store { ## redis store property redis { - host = "127.0.0.1" - port = "6379" + ## redis mode: single、sentinel + mode = "single" + ## single mode property + single { + host = "127.0.0.1" + port = "6379" + } + ## sentinel mode property + sentinel { + masterName = "" + ## such as "10.28.235.65:26379,10.28.235.65:26380,10.28.235.65:26381" + sentinelHosts = "" + } password = "" database = "0" minConn = 1 maxConn = 10 + maxTotal = 100 queryLimit = 100 } - } diff --git a/script/server/config/file.properties b/script/server/config/file.properties index 6cf651aadd4..7689e0c7c4f 100644 --- a/script/server/config/file.properties +++ b/script/server/config/file.properties @@ -19,10 +19,15 @@ store.db.branchTable=branch_table store.db.lockTable=lock_table store.db.queryLimit=100 store.db.maxWait=5000 -store.redis.host=127.0.0.1 -store.redis.port=6379 -store.redis.password= -store.redis.database=0 -store.redis.minConn=1 -store.redis.maxConn=10 -store.redis.queryLimit=100 + +seata.store.redis.mode=single +seata.store.redis.single.host=127.0.0.1 +seata.store.redis.single.port=6379 +seata.store.redis.sentinel.masterName= +seata.store.redis.sentinel.sentinelHosts= +seata.store.redis.password= +seata.store.redis.database=0 +seata.store.redis.minConn=1 +seata.store.redis.maxConn=10 +seata.store.redis.maxTotal=100 +seata.store.redis.queryLimit=100 diff --git a/script/server/config/file.yml b/script/server/config/file.yml index bf90cf56958..5c3f0b22e8c 100644 --- a/script/server/config/file.yml +++ b/script/server/config/file.yml @@ -38,11 +38,17 @@ store: maxWait: 5000 ## redis store property redis: - host: 127.0.0.1 - port: 6379 - password: "" - database: 0 - minConn: 1 - maxConn: 10 - queryLimit: 100 + mode: "single" + single: + host: "127.0.0.1" + port: "6379" + sentinel: + masterName: "" + sentinelHosts: "" + password: "" + database: "0" + minConn: 1 + maxConn: 10 + maxTotal: 100 + queryLimit: 100 diff --git a/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java b/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java index 427e00bb707..6fbc35ed5aa 100644 --- a/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java +++ b/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java @@ -15,16 +15,24 @@ */ package io.seata.server.storage.redis; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.seata.common.exception.RedisException; import io.seata.common.util.StringUtils; import io.seata.config.Configuration; import io.seata.config.ConfigurationFactory; import io.seata.core.constants.ConfigurationKeys; + import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolAbstract; import redis.clients.jedis.JedisPoolConfig; +import redis.clients.jedis.JedisSentinelPool; /** * @author funkye @@ -35,7 +43,7 @@ public class JedisPooledFactory { */ protected static final Logger LOGGER = LoggerFactory.getLogger(JedisPooledFactory.class); - private static volatile JedisPool jedisPool = null; + private static volatile JedisPoolAbstract jedisPool = null; private static final String HOST = "127.0.0.1"; @@ -49,6 +57,8 @@ public class JedisPooledFactory { private static final int DATABASE = 0; + private static final int SENTINEL_HOST_NUMBER = 3; + private static final Configuration CONFIGURATION = ConfigurationFactory.getInstance(); /** @@ -56,7 +66,7 @@ public class JedisPooledFactory { * * @return redisPool */ - public static JedisPool getJedisPoolInstance(JedisPool... jedisPools) { + public static JedisPoolAbstract getJedisPoolInstance(JedisPoolAbstract... jedisPools) { if (jedisPool == null) { synchronized (JedisPooledFactory.class) { if (jedisPool == null) { @@ -71,10 +81,28 @@ public static JedisPool getJedisPoolInstance(JedisPool... jedisPools) { poolConfig.setMinIdle(CONFIGURATION.getInt(ConfigurationKeys.STORE_REDIS_MIN_CONN, MINCONN)); poolConfig.setMaxIdle(CONFIGURATION.getInt(ConfigurationKeys.STORE_REDIS_MAX_CONN, MAXCONN)); poolConfig.setMaxTotal(CONFIGURATION.getInt(ConfigurationKeys.STORE_REDIS_MAX_TOTAL, MAXTOTAL)); - jedisPool = - new JedisPool(poolConfig, CONFIGURATION.getConfig(ConfigurationKeys.STORE_REDIS_HOST, HOST), - CONFIGURATION.getInt(ConfigurationKeys.STORE_REDIS_PORT, PORT), 60000, password, - CONFIGURATION.getInt(ConfigurationKeys.STORE_REDIS_DATABASE, DATABASE)); + String mode = CONFIGURATION.getConfig(ConfigurationKeys.STORE_REDIS_MODE,ConfigurationKeys.REDIS_SINGLE_MODE); + if (mode.equals(ConfigurationKeys.REDIS_SENTINEL_MODE)) { + String masterName = CONFIGURATION.getConfig(ConfigurationKeys.STORE_REDIS_SENTINEL_MASTERNAME); + if (StringUtils.isBlank(masterName)) { + throw new RedisException("The masterName is null in redis sentinel mode"); + } + Set sentinels = new HashSet<>(SENTINEL_HOST_NUMBER); + String[] sentinelHosts = CONFIGURATION.getConfig(ConfigurationKeys.STORE_REDIS_SENTINEL_HOST).split(","); + Arrays.asList(sentinelHosts).forEach(sentinelHost -> sentinels.add(sentinelHost)); + jedisPool = new JedisSentinelPool(masterName, sentinels, poolConfig, 60000, password, + CONFIGURATION.getInt(ConfigurationKeys.STORE_REDIS_DATABASE, DATABASE)); + } else if (mode.equals(ConfigurationKeys.REDIS_SINGLE_MODE)) { + String host = CONFIGURATION.getConfig(ConfigurationKeys.STORE_REDIS_SINGLE_HOST); + host = StringUtils.isBlank(host) ? CONFIGURATION.getConfig(ConfigurationKeys.STORE_REDIS_HOST, HOST) : host; + int port = CONFIGURATION.getInt(ConfigurationKeys.STORE_REDIS_SINGLE_PORT); + port = port == 0 ? CONFIGURATION.getInt(ConfigurationKeys.STORE_REDIS_PORT, PORT) : port; + jedisPool = + new JedisPool(poolConfig, host, port, 60000, password, + CONFIGURATION.getInt(ConfigurationKeys.STORE_REDIS_DATABASE, DATABASE)); + } else { + throw new RedisException("Configuration error of redis cluster mode"); + } } if (LOGGER.isInfoEnabled()) { LOGGER.info("initialization of the build redis connection pool is complete"); diff --git a/server/src/main/resources/file.conf b/server/src/main/resources/file.conf index 3d862f1f6a1..8ccfc4e3df5 100644 --- a/server/src/main/resources/file.conf +++ b/server/src/main/resources/file.conf @@ -41,8 +41,19 @@ store { ## redis store property redis { - host = "127.0.0.1" - port = "6379" + ## redis mode: single、sentinel + mode = "single" + ## single mode property + single { + host = "127.0.0.1" + port = "6379" + } + ## sentinel mode property + sentinel { + masterName = "" + ## such as "10.28.235.65:26379,10.28.235.65:26380,10.28.235.65:26381" + sentinelHosts = "" + } password = "" database = "0" minConn = 1 @@ -50,5 +61,4 @@ store { maxTotal = 100 queryLimit = 100 } - } From 9e9ba4baa6b2a8d5cdfeda749b9329aed3caab0c Mon Sep 17 00:00:00 2001 From: Montos <1367654518@qq.com> Date: Tue, 29 Dec 2020 22:45:10 +0800 Subject: [PATCH 26/93] optimize: optimize enumerated classes and add unit tests (#3420) --- changes/1.5.0.md | 3 ++ changes/en-us/1.5.0.md | 3 ++ .../exception/TransactionExceptionCode.java | 20 ++----- .../io/seata/core/model/BranchStatus.java | 20 +++---- .../io/seata/core/model/GlobalStatus.java | 23 +++----- .../io/seata/core/model/BranchStatusTest.java | 14 +++++ .../io/seata/core/model/GlobalStatusTest.java | 13 +++++ .../model/TransactionExceptionCodeTest.java | 52 +++++++++++++++++++ 8 files changed, 102 insertions(+), 46 deletions(-) create mode 100644 core/src/test/java/io/seata/core/model/TransactionExceptionCodeTest.java diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 36e1095d10d..4f30a97093a 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -50,6 +50,8 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3123](https://github.com/seata/seata/pull/3123)] seata-server的目录按版本号构建,且仅当profile为release-seata时才构建 - [[#3415](https://github.com/seata/seata/pull/3415)] 优化 maven clean 插件可清除 distribution 目录 - [[#3316](https://github.com/seata/seata/pull/3316)] 优化读取配置值时,属性bean可能未初始化 + - [[#3420](https://github.com/seata/seata/pull/3420)] 优化枚举类并添加单元测试 + ### test @@ -72,6 +74,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [lj2018110133](https://github.com/lj2018110133) - [wangliang181230](https://github.com/wangliang181230) - [xingfudeshi](https://github.com/xingfudeshi) + - [MentosL](https://github.com/MentosL) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 0fb1b227bad..7962c147dea 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -48,6 +48,8 @@ - [[#3123](https://github.com/seata/seata/pull/3123)] The server directory is build by version, and build only when the profile is release-seata - [[#3415](https://github.com/seata/seata/pull/3415)] optimize maven clean plugin to clear the distribution directory - [[#3316](https://github.com/seata/seata/pull/3316)] optimize the property bean may not be initialized while reading config value + - [[#3420](https://github.com/seata/seata/pull/3420)] optimize enumerated classes and add unit tests + ### test - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient @@ -67,6 +69,7 @@ - [lj2018110133](https://github.com/lj2018110133) - [wangliang181230](https://github.com/wangliang181230) - [xingfudeshi](https://github.com/xingfudeshi) + - [MentosL](https://github.com/MentosL) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/core/src/main/java/io/seata/core/exception/TransactionExceptionCode.java b/core/src/main/java/io/seata/core/exception/TransactionExceptionCode.java index 98a27dd001c..0c106c310ff 100644 --- a/core/src/main/java/io/seata/core/exception/TransactionExceptionCode.java +++ b/core/src/main/java/io/seata/core/exception/TransactionExceptionCode.java @@ -15,9 +15,6 @@ */ package io.seata.core.exception; -import java.util.HashMap; -import java.util.Map; - /** * The enum Transaction exception code. * @@ -121,13 +118,6 @@ public enum TransactionExceptionCode { FailedStore ; - private static final Map MAP = new HashMap<>(values().length * 2); - - static { - for (TransactionExceptionCode code : values()) { - MAP.put(code.ordinal(), code); - } - } /** * Get transaction exception code. @@ -146,13 +136,13 @@ public static TransactionExceptionCode get(byte ordinal) { * @return the transaction exception code */ public static TransactionExceptionCode get(int ordinal) { - TransactionExceptionCode code = MAP.get(ordinal); - - if (code == null) { + TransactionExceptionCode value = null; + try { + value = TransactionExceptionCode.values()[ordinal]; + } catch (Exception e) { throw new IllegalArgumentException("Unknown TransactionExceptionCode[" + ordinal + "]"); } - - return code; + return value; } } diff --git a/core/src/main/java/io/seata/core/model/BranchStatus.java b/core/src/main/java/io/seata/core/model/BranchStatus.java index 70192c35c40..353c4679acb 100644 --- a/core/src/main/java/io/seata/core/model/BranchStatus.java +++ b/core/src/main/java/io/seata/core/model/BranchStatus.java @@ -15,8 +15,6 @@ */ package io.seata.core.model; -import java.util.HashMap; -import java.util.Map; import io.seata.common.exception.ShouldNeverHappenException; @@ -108,13 +106,6 @@ public int getCode() { return code; } - private static final Map MAP = new HashMap<>(values().length); - - static { - for (BranchStatus status : values()) { - MAP.put(status.getCode(), status); - } - } /** * Get branch status. @@ -133,12 +124,13 @@ public static BranchStatus get(byte code) { * @return the branch status */ public static BranchStatus get(int code) { - BranchStatus status = MAP.get(code); - - if (status == null) { + BranchStatus value = null; + try { + value = BranchStatus.values()[code]; + } catch (Exception e) { throw new ShouldNeverHappenException("Unknown BranchStatus[" + code + "]"); } - - return status; + return value; } + } diff --git a/core/src/main/java/io/seata/core/model/GlobalStatus.java b/core/src/main/java/io/seata/core/model/GlobalStatus.java index 5247ab7d34e..203c792d394 100644 --- a/core/src/main/java/io/seata/core/model/GlobalStatus.java +++ b/core/src/main/java/io/seata/core/model/GlobalStatus.java @@ -15,8 +15,6 @@ */ package io.seata.core.model; -import java.util.HashMap; -import java.util.Map; /** * Status of global transaction. @@ -138,15 +136,6 @@ public int getCode() { } - - private static final Map MAP = new HashMap<>(values().length); - - static { - for (GlobalStatus status : values()) { - MAP.put(status.code, status); - } - } - /** * Get global status. * @@ -154,7 +143,7 @@ public int getCode() { * @return the global status */ public static GlobalStatus get(byte code) { - return get((int)code); + return get((int) code); } /** @@ -164,12 +153,12 @@ public static GlobalStatus get(byte code) { * @return the global status */ public static GlobalStatus get(int code) { - GlobalStatus status = MAP.get(code); - - if (status == null) { + GlobalStatus value = null; + try { + value = GlobalStatus.values()[code]; + } catch (Exception e) { throw new IllegalArgumentException("Unknown GlobalStatus[" + code + "]"); } - - return status; + return value; } } diff --git a/core/src/test/java/io/seata/core/model/BranchStatusTest.java b/core/src/test/java/io/seata/core/model/BranchStatusTest.java index 73da69315ce..ccbaf9f94e5 100644 --- a/core/src/test/java/io/seata/core/model/BranchStatusTest.java +++ b/core/src/test/java/io/seata/core/model/BranchStatusTest.java @@ -28,6 +28,8 @@ public class BranchStatusTest { private static final int REGISTERED_CODE = 1; private static final int NONE = 99; + private static final int MIN_CODE = 0; + private static final int Max_CODE = 10; @Test public void testGetCode() { @@ -51,4 +53,16 @@ public void testGetWithInt() { public void testGetException() { Assertions.assertThrows(ShouldNeverHappenException.class, () -> BranchStatus.get(NONE)); } + + + @Test + public void testGetByCode() { + BranchStatus branchStatusOne = BranchStatus.get(MIN_CODE); + Assertions.assertEquals(branchStatusOne, BranchStatus.Unknown); + + BranchStatus branchStatusTwo = BranchStatus.get(Max_CODE); + Assertions.assertEquals(branchStatusTwo, BranchStatus.PhaseTwo_RollbackFailed_Unretryable); + + Assertions.assertThrows(ShouldNeverHappenException.class, () -> BranchStatus.get(NONE)); + } } diff --git a/core/src/test/java/io/seata/core/model/GlobalStatusTest.java b/core/src/test/java/io/seata/core/model/GlobalStatusTest.java index f6fba62a0bd..12d2515341b 100644 --- a/core/src/test/java/io/seata/core/model/GlobalStatusTest.java +++ b/core/src/test/java/io/seata/core/model/GlobalStatusTest.java @@ -26,6 +26,8 @@ public class GlobalStatusTest { private static final int BEGIN_CODE = 1; private static final int NONE = 99; + private static final int MIN_CODE = 0; + private static final int MAX_CODE = 15; @Test public void testGetCode() { @@ -50,4 +52,15 @@ public void testGetException() { Assertions.assertThrows(IllegalArgumentException.class, () -> GlobalStatus.get(NONE)); } + @Test + public void testGetByCode() { + GlobalStatus globalStatusOne = GlobalStatus.get(MIN_CODE); + Assertions.assertEquals(globalStatusOne, GlobalStatus.UnKnown); + + GlobalStatus globalStatusTwo = GlobalStatus.get(MAX_CODE); + Assertions.assertEquals(globalStatusTwo, GlobalStatus.Finished); + + Assertions.assertThrows(IllegalArgumentException.class, () -> GlobalStatus.get(NONE)); + } + } diff --git a/core/src/test/java/io/seata/core/model/TransactionExceptionCodeTest.java b/core/src/test/java/io/seata/core/model/TransactionExceptionCodeTest.java new file mode 100644 index 00000000000..80951ebae78 --- /dev/null +++ b/core/src/test/java/io/seata/core/model/TransactionExceptionCodeTest.java @@ -0,0 +1,52 @@ +package io.seata.core.model; + +import io.seata.core.exception.TransactionExceptionCode; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +/** + * @author Montos + */ +public class TransactionExceptionCodeTest { + private static final int BEGIN_CODE = 1; + private static final int NONE = 99; + private static final int MIN_CODE = 0; + private static final int Max_CODE = 18; + + @Test + public void testGetCode() { + int code = TransactionExceptionCode.BeginFailed.ordinal(); + Assertions.assertEquals(code, BEGIN_CODE); + } + + @Test + public void testGetWithByte() { + TransactionExceptionCode branchStatus = TransactionExceptionCode.get((byte) BEGIN_CODE); + Assertions.assertEquals(branchStatus, TransactionExceptionCode.BeginFailed); + } + + @Test + public void testGetWithInt() { + TransactionExceptionCode branchStatus = TransactionExceptionCode.get(BEGIN_CODE); + Assertions.assertEquals(branchStatus, TransactionExceptionCode.BeginFailed); + } + + @Test + public void testGetException() { + Assertions.assertThrows(IllegalArgumentException.class, () -> TransactionExceptionCode.get(NONE)); + } + + @Test + public void testGetByCode() { + TransactionExceptionCode transactionExceptionCodeOne = TransactionExceptionCode.get(MIN_CODE); + Assertions.assertEquals(transactionExceptionCodeOne, TransactionExceptionCode.Unknown); + + TransactionExceptionCode transactionExceptionCodeTwo = TransactionExceptionCode.get(Max_CODE); + Assertions.assertEquals(transactionExceptionCodeTwo, TransactionExceptionCode.FailedStore); + + Assertions.assertThrows(IllegalArgumentException.class, () -> TransactionExceptionCode.get(NONE)); + } + + + +} From b450811ebd000f9967fcfacb7c8d66fdc4abd964 Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Wed, 30 Dec 2020 15:05:52 +0800 Subject: [PATCH 27/93] feature: support password decryption (#2667) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 2 + .../io/seata/common/util/ConfigTools.java | 142 ++++++++++++++++++ .../io/seata/common/util/ConfigToolsTest.java | 42 ++++++ .../core/constants/ConfigurationKeys.java | 5 + .../store/db/AbstractDataSourceProvider.java | 104 ++++++++----- script/config-center/config.txt | 3 +- .../storage/redis/JedisPooledFactory.java | 12 ++ server/src/main/resources/file.conf | 3 +- 9 files changed, 272 insertions(+), 42 deletions(-) create mode 100644 common/src/main/java/io/seata/common/util/ConfigTools.java create mode 100644 common/src/test/java/io/seata/common/util/ConfigToolsTest.java diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 4f30a97093a..c226329fb72 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -20,6 +20,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3172](https://github.com/seata/seata/pull/3172)] 支持undolog压缩 - [[#3372](https://github.com/seata/seata/pull/3372)] saga模式下支撑用户自定义是否更新最后一次重试日志 - [[#3348](https://github.com/seata/seata/pull/3348)] 支持redis哨兵模式 + - [[#2667](https://github.com/seata/seata/pull/2667)] 支持db和redis密码加解密 ### bugfix: diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 7962c147dea..b78abce4eff 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -20,6 +20,8 @@ - [[#3172](https://github.com/seata/seata/pull/3172)] support rollback info compress - [[#3372](https://github.com/seata/seata/pull/3372)] Saga support customize whether update last retry log - [[#3348](https://github.com/seata/seata/pull/3348)] support redis sentinel mode + - [[#2667](https://github.com/seata/seata/pull/2667)] support password decryption + ### bugfix: diff --git a/common/src/main/java/io/seata/common/util/ConfigTools.java b/common/src/main/java/io/seata/common/util/ConfigTools.java new file mode 100644 index 00000000000..b3b5b7aa446 --- /dev/null +++ b/common/src/main/java/io/seata/common/util/ConfigTools.java @@ -0,0 +1,142 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.common.util; + +import java.nio.charset.StandardCharsets; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; +import java.util.Scanner; +import javax.crypto.Cipher; + +/** + * @author funkye + */ +public class ConfigTools { + + // generate key pair + public static KeyPair getKeyPair() throws Exception { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + keyPairGenerator.initialize(2048); + KeyPair keyPair = keyPairGenerator.generateKeyPair(); + return keyPair; + } + + // obtain the public key (Base64 encoding) + public static String getPublicKey(KeyPair keyPair) { + PublicKey publicKey = keyPair.getPublic(); + byte[] bytes = publicKey.getEncoded(); + return byte2Base64(bytes); + } + + // obtain the private key (Base64 encoding) + public static String getPrivateKey(KeyPair keyPair) { + PrivateKey privateKey = keyPair.getPrivate(); + byte[] bytes = privateKey.getEncoded(); + return byte2Base64(bytes); + } + + // convert Base64 encoded public key to PublicKey object + public static PublicKey string2PublicKey(String pubStr) throws Exception { + byte[] keyBytes = base642Byte(pubStr); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PublicKey publicKey = keyFactory.generatePublic(keySpec); + return publicKey; + } + + // convert Base64 encoded private key to PrivateKey object + public static PrivateKey string2PrivateKey(String priStr) throws Exception { + byte[] keyBytes = base642Byte(priStr); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + return privateKey; + } + + // public key encryption + public static String publicEncrypt(String content, String pubStr) throws Exception { + PublicKey publicKey = string2PublicKey(pubStr); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + byte[] bytes = cipher.doFinal(content.getBytes()); + return byte2Base64(bytes); + } + + // public key decryption + public static String publicDecrypt(String content, String pubStr) throws Exception { + PublicKey publicKey = string2PublicKey(pubStr); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, publicKey); + byte[] bytes = cipher.doFinal(base642Byte(content)); + return new String(bytes, StandardCharsets.UTF_8); + } + + // private key encryption + public static String privateEncrypt(String content, String priStr) throws Exception { + PrivateKey privateKey = string2PrivateKey(priStr); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, privateKey); + byte[] bytes = cipher.doFinal(content.getBytes()); + return byte2Base64(bytes); + } + + // private key decryption + public static String privateDecrypt(String content, String priStr) throws Exception { + PrivateKey privateKey = string2PrivateKey(priStr); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + byte[] bytes = cipher.doFinal(base642Byte(content)); + return new String(bytes, StandardCharsets.UTF_8); + } + + // byte array to Base64 encoding + public static String byte2Base64(byte[] bytes) { + return new String(Base64.getEncoder().encode(bytes), StandardCharsets.UTF_8); + } + + // Base64 encoding to byte array + public static byte[] base642Byte(String base64Key) { + return Base64.getDecoder().decode(base64Key); + } + + public static void main(String[] args) throws Exception { + Scanner scan = new Scanner(System.in); + KeyPair keyPair = getKeyPair(); + String publicKeyStr = ConfigTools.getPublicKey(keyPair); + String privateKeyStr = ConfigTools.getPrivateKey(keyPair); + System.out.println("publicKeyStr:\n" + publicKeyStr); + System.out.println("privateKeyStr:\n" + privateKeyStr); + System.out.println( + "after the key is generated, please keep your key pair properly, if you need to encrypt, please enter your database password"); + System.out.println("input 'q' exit"); + while (scan.hasNextLine()) { + String password = scan.nextLine(); + if (StringUtils.isNotBlank(password) && !"q".equalsIgnoreCase(password)) { + String byte2Base64 = ConfigTools.privateEncrypt(password, privateKeyStr); + System.out.println("encryption completed: \n" + byte2Base64); + } + break; + } + scan.close(); + } + +} diff --git a/common/src/test/java/io/seata/common/util/ConfigToolsTest.java b/common/src/test/java/io/seata/common/util/ConfigToolsTest.java new file mode 100644 index 00000000000..bbda4e02676 --- /dev/null +++ b/common/src/test/java/io/seata/common/util/ConfigToolsTest.java @@ -0,0 +1,42 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.common.util; + +import java.security.KeyPair; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +/** + * @author funkye + */ +public class ConfigToolsTest { + + @Test + public void test() throws Exception { + KeyPair keyPair = ConfigTools.getKeyPair(); + String publicKeyStr = ConfigTools.getPublicKey(keyPair); + String privateKeyStr = ConfigTools.getPrivateKey(keyPair); + System.out.println("publicKeyStr:" + publicKeyStr); + System.out.println("privateKeyStr:" + privateKeyStr); + String password = "123456"; + String byte2Base64 = ConfigTools.privateEncrypt(password, privateKeyStr); + System.out.println("byte2Base64:" + byte2Base64); + String pw = ConfigTools.publicDecrypt(byte2Base64, publicKeyStr); + Assertions.assertEquals(pw, password); + } + +} diff --git a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java index c0a20a67efe..e3035b83e20 100644 --- a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java +++ b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java @@ -42,6 +42,11 @@ public interface ConfigurationKeys { */ String STORE_MODE = STORE_PREFIX + "mode"; + /** + * The constant STORE_PUBLIC_KEY. + */ + public static final String STORE_PUBLIC_KEY = STORE_PREFIX + "publicKey"; + /** * The constant STORE_FILE_PREFIX */ diff --git a/core/src/main/java/io/seata/core/store/db/AbstractDataSourceProvider.java b/core/src/main/java/io/seata/core/store/db/AbstractDataSourceProvider.java index dce50799180..bc2a106f384 100644 --- a/core/src/main/java/io/seata/core/store/db/AbstractDataSourceProvider.java +++ b/core/src/main/java/io/seata/core/store/db/AbstractDataSourceProvider.java @@ -15,15 +15,6 @@ */ package io.seata.core.store.db; -import io.seata.common.exception.StoreException; -import io.seata.common.executor.Initialize; -import io.seata.common.util.StringUtils; -import io.seata.config.Configuration; -import io.seata.config.ConfigurationFactory; -import io.seata.core.constants.ConfigurationKeys; -import io.seata.core.constants.DBType; - -import javax.sql.DataSource; import java.io.File; import java.net.MalformedURLException; import java.net.URL; @@ -32,6 +23,17 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Stream; +import javax.sql.DataSource; +import io.seata.common.exception.StoreException; +import io.seata.common.executor.Initialize; +import io.seata.common.util.ConfigTools; +import io.seata.common.util.StringUtils; +import io.seata.config.Configuration; +import io.seata.config.ConfigurationFactory; +import io.seata.core.constants.ConfigurationKeys; +import io.seata.core.constants.DBType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * The abstract datasource provider @@ -41,6 +43,8 @@ */ public abstract class AbstractDataSourceProvider implements DataSourceProvider, Initialize { + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractDataSourceProvider.class); + private DataSource dataSource; /** @@ -126,39 +130,39 @@ private static Map createMysqlDriverClassLoaders() { return loaders; } Stream.of(cp.split(File.pathSeparator)) - .map(File::new) - .filter(File::exists) - .map(file -> file.isFile() ? file.getParentFile() : file) - .filter(Objects::nonNull) - .filter(File::isDirectory) - .map(file -> new File(file, "jdbc")) - .filter(File::exists) - .filter(File::isDirectory) - .distinct() - .flatMap(file -> { - File[] files = file.listFiles((f, name) -> name.startsWith(MYSQL_DRIVER_FILE_PREFIX)); - if (files != null) { - return Stream.of(files); - } else { - return Stream.of(); - } - }) - .forEach(file -> { - if (loaders.containsKey(MYSQL8_DRIVER_CLASS_NAME) && loaders.containsKey(MYSQL_DRIVER_CLASS_NAME)) { - return; - } + .map(File::new) + .filter(File::exists) + .map(file -> file.isFile() ? file.getParentFile() : file) + .filter(Objects::nonNull) + .filter(File::isDirectory) + .map(file -> new File(file, "jdbc")) + .filter(File::exists) + .filter(File::isDirectory) + .distinct() + .flatMap(file -> { + File[] files = file.listFiles((f, name) -> name.startsWith(MYSQL_DRIVER_FILE_PREFIX)); + if (files != null) { + return Stream.of(files); + } else { + return Stream.of(); + } + }) + .forEach(file -> { + if (loaders.containsKey(MYSQL8_DRIVER_CLASS_NAME) && loaders.containsKey(MYSQL_DRIVER_CLASS_NAME)) { + return; + } + try { + URL url = file.toURI().toURL(); + ClassLoader loader = new URLClassLoader(new URL[]{url}, ClassLoader.getSystemClassLoader()); try { - URL url = file.toURI().toURL(); - ClassLoader loader = new URLClassLoader(new URL[]{url}, ClassLoader.getSystemClassLoader()); - try { - loader.loadClass(MYSQL8_DRIVER_CLASS_NAME); - loaders.putIfAbsent(MYSQL8_DRIVER_CLASS_NAME, loader); - } catch (ClassNotFoundException e) { - loaders.putIfAbsent(MYSQL_DRIVER_CLASS_NAME, loader); - } - } catch (MalformedURLException ignore) { + loader.loadClass(MYSQL8_DRIVER_CLASS_NAME); + loaders.putIfAbsent(MYSQL8_DRIVER_CLASS_NAME, loader); + } catch (ClassNotFoundException e) { + loaders.putIfAbsent(MYSQL_DRIVER_CLASS_NAME, loader); } - }); + } catch (MalformedURLException ignore) { + } + }); return loaders; } @@ -195,6 +199,16 @@ protected String getUser() { */ protected String getPassword() { String password = CONFIG.getConfig(ConfigurationKeys.STORE_DB_PASSWORD); + String publicKey = getPublicKey(); + if (StringUtils.isNotBlank(publicKey)) { + try { + password = ConfigTools.publicDecrypt(password, publicKey); + } catch (Exception e) { + LOGGER.error( + "decryption failed,please confirm whether the ciphertext and secret key are correct! error msg: ", + e.getMessage()); + } + } return password; } @@ -231,4 +245,14 @@ protected String getValidationQuery(DBType dbType) { return "select 1"; } } + + /** + * Get public key. + * + * @return the string + */ + protected String getPublicKey() { + return CONFIG.getConfig(ConfigurationKeys.STORE_PUBLIC_KEY); + } + } diff --git a/script/config-center/config.txt b/script/config-center/config.txt index 95d20373ea3..d5b4b67afd4 100644 --- a/script/config-center/config.txt +++ b/script/config-center/config.txt @@ -32,6 +32,7 @@ client.tm.degradeCheck=false client.tm.degradeCheckAllowTimes=10 client.tm.degradeCheckPeriod=2000 store.mode=file +store.publicKey= store.file.dir=file_store/data store.file.maxBranchSessionSize=16384 store.file.maxGlobalSessionSize=512 @@ -58,7 +59,7 @@ store.redis.maxConn=10 store.redis.minConn=1 store.redis.maxTotal=100 store.redis.database=0 -store.redis.password=null +store.redis.password= store.redis.queryLimit=100 server.recovery.committingRetryPeriod=1000 server.recovery.asynCommittingRetryPeriod=1000 diff --git a/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java b/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java index 6fbc35ed5aa..6f2b02405f7 100644 --- a/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java +++ b/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java @@ -22,6 +22,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.seata.common.util.ConfigTools; import io.seata.common.exception.RedisException; import io.seata.common.util.StringUtils; import io.seata.config.Configuration; @@ -76,6 +77,17 @@ public static JedisPoolAbstract getJedisPoolInstance(JedisPoolAbstract... jedisP String password = CONFIGURATION.getConfig(ConfigurationKeys.STORE_REDIS_PASSWORD); if (StringUtils.isBlank(password)) { password = null; + } else { + String publicKey = CONFIGURATION.getConfig(ConfigurationKeys.STORE_PUBLIC_KEY); + if (StringUtils.isNotBlank(publicKey)) { + try { + password = ConfigTools.publicDecrypt(password, publicKey); + } catch (Exception e) { + LOGGER.error( + "decryption failed,please confirm whether the ciphertext and secret key are correct! error msg: ", + e.getMessage()); + } + } } JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMinIdle(CONFIGURATION.getInt(ConfigurationKeys.STORE_REDIS_MIN_CONN, MINCONN)); diff --git a/server/src/main/resources/file.conf b/server/src/main/resources/file.conf index 8ccfc4e3df5..bf50039f3da 100644 --- a/server/src/main/resources/file.conf +++ b/server/src/main/resources/file.conf @@ -2,7 +2,8 @@ store { ## store mode: file、db、redis mode = "file" - + ## rsa decryption public key + publicKey = "" ## file store property file { ## store location dir From 8397e90137ded9cf2937c7ede3de43ec248d333d Mon Sep 17 00:00:00 2001 From: lian88jian Date: Thu, 31 Dec 2020 10:31:56 +0800 Subject: [PATCH 28/93] bugfix: run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null (#3408) --- .../io/seata/config/FileConfiguration.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java b/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java index 3bbd2f08a2e..899f40ea681 100644 --- a/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java +++ b/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java @@ -163,12 +163,23 @@ private File getConfigFile(String name) { } private File getFileFromFileSystem(String decodedPath) { - String[] tryPaths = new String[] { - // first: project dir - this.getClass().getClassLoader().getResource("").getPath() + decodedPath, - // second: system path - decodedPath - }; + + // run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null + URL resourceUrl = this.getClass().getClassLoader().getResource(""); + String[] tryPaths = null; + if (resourceUrl != null) { + tryPaths = new String[]{ + // first: project dir + resourceUrl.getPath() + decodedPath, + // second: system path + decodedPath + }; + } else { + tryPaths = new String[]{ + decodedPath + }; + } + for (String tryPath : tryPaths) { File targetFile = new File(tryPath); From 274fcd08358741e8c291b9d325aa00b737af0917 Mon Sep 17 00:00:00 2001 From: lvxianzheng <49219305+lvxianzheng@users.noreply.github.com> Date: Fri, 1 Jan 2021 11:07:10 +0800 Subject: [PATCH 29/93] feature: add config support for seata server thread pool (#3411) --- changes/1.5.0.md | 3 ++- changes/en-us/1.5.0.md | 3 ++- .../core/constants/ConfigurationKeys.java | 20 ++++++++++++++++ .../core/rpc/netty/NettyServerConfig.java | 24 +++++++++++++++++++ .../src/main/java/io/seata/server/Server.java | 18 ++++++-------- 5 files changed, 55 insertions(+), 13 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index c226329fb72..058d550b4e5 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -19,10 +19,10 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3172](https://github.com/seata/seata/pull/3172)] 支持undolog压缩 - [[#3372](https://github.com/seata/seata/pull/3372)] saga模式下支撑用户自定义是否更新最后一次重试日志 + - [[#3411](https://github.com/seata/seata/pull/3411)] 支持配置seata服务器的线程池参数 - [[#3348](https://github.com/seata/seata/pull/3348)] 支持redis哨兵模式 - [[#2667](https://github.com/seata/seata/pull/2667)] 支持db和redis密码加解密 - ### bugfix: - [[#3258](https://github.com/seata/seata/pull/3258)] 修复AsyncWorker潜在的OOM问题 @@ -72,6 +72,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [anselleeyy](https://github.com/anselleeyy) - [Ifdevil](https://github.com/Ifdevil) - [Rubbernecker](https://github.com/Rubbernecker) + - [lvxianzheng](https://github.com/lvxianzheng) - [lj2018110133](https://github.com/lj2018110133) - [wangliang181230](https://github.com/wangliang181230) - [xingfudeshi](https://github.com/xingfudeshi) diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index b78abce4eff..5f10db79866 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -19,10 +19,10 @@ - [[#3172](https://github.com/seata/seata/pull/3172)] support rollback info compress - [[#3372](https://github.com/seata/seata/pull/3372)] Saga support customize whether update last retry log + - [[#3411](https://github.com/seata/seata/pull/3411)] support seata server thread pool parameters configuration - [[#3348](https://github.com/seata/seata/pull/3348)] support redis sentinel mode - [[#2667](https://github.com/seata/seata/pull/2667)] support password decryption - ### bugfix: - [[#3258](https://github.com/seata/seata/pull/3258)] fix AsyncWorker potential OOM problem @@ -68,6 +68,7 @@ - [anselleeyy](https://github.com/anselleeyy) - [Ifdevil](https://github.com/Ifdevil) - [Rubbernecker](https://github.com/Rubbernecker) + - [lvxianzheng](https://github.com/lvxianzheng) - [lj2018110133](https://github.com/lj2018110133) - [wangliang181230](https://github.com/wangliang181230) - [xingfudeshi](https://github.com/xingfudeshi) diff --git a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java index e3035b83e20..a8666a4be7b 100644 --- a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java +++ b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java @@ -400,6 +400,26 @@ public interface ConfigurationKeys { */ String ROLLBACK_RETRY_TIMEOUT_UNLOCK_ENABLE = SERVER_PREFIX + "rollbackRetryTimeoutUnlockEnable"; + /** + * The constant MIN_SERVER_POOL_SIZE. + */ + String MIN_SERVER_POOL_SIZE = TRANSPORT_PREFIX + "minServerPoolSize"; + + /** + * The constant MAX_SERVER_POOL_SIZE. + */ + String MAX_SERVER_POOL_SIZE = TRANSPORT_PREFIX + "maxServerPoolSize"; + + /** + * The constant MAX_TASK_QUEUE_SIZE. + */ + String MAX_TASK_QUEUE_SIZE = TRANSPORT_PREFIX + "maxTaskQueueSize"; + + /** + * The constant KEEP_ALIVE_TIME. + */ + String KEEP_ALIVE_TIME = TRANSPORT_PREFIX + "keepAliveTime"; + /** * The constant TRANSPORT_TYPE */ diff --git a/core/src/main/java/io/seata/core/rpc/netty/NettyServerConfig.java b/core/src/main/java/io/seata/core/rpc/netty/NettyServerConfig.java index 11d0c4e1e46..1449483caa4 100644 --- a/core/src/main/java/io/seata/core/rpc/netty/NettyServerConfig.java +++ b/core/src/main/java/io/seata/core/rpc/netty/NettyServerConfig.java @@ -52,6 +52,14 @@ public class NettyServerConfig extends NettyBaseConfig { private int serverChannelMaxIdleTimeSeconds = Integer.parseInt(System.getProperty( ConfigurationKeys.TRANSPORT_PREFIX + "serverChannelMaxIdleTimeSeconds", String.valueOf(30))); private static final String EPOLL_WORKER_THREAD_PREFIX = "NettyServerEPollWorker"; + private static int minServerPoolSize = Integer.parseInt(System.getProperty( + ConfigurationKeys.MIN_SERVER_POOL_SIZE, "50")); + private static int maxServerPoolSize = Integer.parseInt(System.getProperty( + ConfigurationKeys.MAX_SERVER_POOL_SIZE, "500")); + private static int maxTaskQueueSize = Integer.parseInt(System.getProperty( + ConfigurationKeys.MAX_TASK_QUEUE_SIZE, "20000")); + private static int keepAliveTime = Integer.parseInt(System.getProperty( + ConfigurationKeys.KEEP_ALIVE_TIME, "500")); /** * The Server channel clazz. @@ -278,4 +286,20 @@ public int getBossThreadSize() { public int getServerShutdownWaitTime() { return CONFIG.getInt(ConfigurationKeys.SHUTDOWN_WAIT, DEFAULT_SHUTDOWN_TIMEOUT_SEC); } + + public static int getMinServerPoolSize() { + return minServerPoolSize; + } + + public static int getMaxServerPoolSize() { + return maxServerPoolSize; + } + + public static int getMaxTaskQueueSize() { + return maxTaskQueueSize; + } + + public static int getKeepAliveTime() { + return keepAliveTime; + } } diff --git a/server/src/main/java/io/seata/server/Server.java b/server/src/main/java/io/seata/server/Server.java index b3baf98f3e7..275b5987b82 100644 --- a/server/src/main/java/io/seata/server/Server.java +++ b/server/src/main/java/io/seata/server/Server.java @@ -25,6 +25,7 @@ import io.seata.core.constants.ConfigurationKeys; import io.seata.core.rpc.ShutdownHook; import io.seata.core.rpc.netty.NettyRemotingServer; +import io.seata.core.rpc.netty.NettyServerConfig; import io.seata.server.coordinator.DefaultCoordinator; import io.seata.server.env.ContainerHelper; import io.seata.server.env.PortHelper; @@ -39,16 +40,6 @@ * @author slievrly */ public class Server { - - private static final int MIN_SERVER_POOL_SIZE = 50; - private static final int MAX_SERVER_POOL_SIZE = 500; - private static final int MAX_TASK_QUEUE_SIZE = 20000; - private static final int KEEP_ALIVE_TIME = 500; - private static final ThreadPoolExecutor WORKING_THREADS = new ThreadPoolExecutor(MIN_SERVER_POOL_SIZE, - MAX_SERVER_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.SECONDS, - new LinkedBlockingQueue<>(MAX_TASK_QUEUE_SIZE), - new NamedThreadFactory("ServerHandlerThread", MAX_SERVER_POOL_SIZE), new ThreadPoolExecutor.CallerRunsPolicy()); - /** * The entry point of application. * @@ -76,7 +67,12 @@ public static void main(String[] args) throws IOException { System.setProperty(ConfigurationKeys.STORE_MODE, parameterParser.getStoreMode()); - NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(WORKING_THREADS); + ThreadPoolExecutor workingThreads = new ThreadPoolExecutor(NettyServerConfig.getMinServerPoolSize(), + NettyServerConfig.getMaxServerPoolSize(), NettyServerConfig.getKeepAliveTime(), TimeUnit.SECONDS, + new LinkedBlockingQueue<>(NettyServerConfig.getMaxTaskQueueSize()), + new NamedThreadFactory("ServerHandlerThread", NettyServerConfig.getMaxServerPoolSize()), new ThreadPoolExecutor.CallerRunsPolicy()); + + NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads); //server port nettyRemotingServer.setListenPort(parameterParser.getPort()); UUIDGenerator.init(parameterParser.getServerNode()); From af103f4de9a23d5815e9b3a0b5307c861a920d07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?WangLiang/=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Mon, 4 Jan 2021 15:13:06 +0800 Subject: [PATCH 30/93] optimize: opt the reload during startup in file mode (#3215) --- .../file/session/FileSessionManager.java | 128 +++++++++++------- 1 file changed, 76 insertions(+), 52 deletions(-) diff --git a/server/src/main/java/io/seata/server/storage/file/session/FileSessionManager.java b/server/src/main/java/io/seata/server/storage/file/session/FileSessionManager.java index 491aa1ab96d..46b236e8605 100644 --- a/server/src/main/java/io/seata/server/storage/file/session/FileSessionManager.java +++ b/server/src/main/java/io/seata/server/storage/file/session/FileSessionManager.java @@ -20,12 +20,15 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.Iterator; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; + import io.seata.common.exception.ShouldNeverHappenException; import io.seata.common.loader.LoadLevel; +import io.seata.common.loader.Scope; import io.seata.common.util.StringUtils; import io.seata.config.ConfigurationFactory; import io.seata.core.constants.ConfigurationKeys; @@ -42,7 +45,6 @@ import io.seata.server.store.AbstractTransactionStoreManager; import io.seata.server.store.SessionStorable; import io.seata.server.store.TransactionStoreManager; -import io.seata.common.loader.Scope; /** @@ -85,7 +87,6 @@ public boolean writeSession(LogOperation logOperation, SessionStorable session) @Override public void reload() { restoreSessions(); - washSessions(); } @Override @@ -139,72 +140,71 @@ public T lockAndExecute(GlobalSession globalSession, GlobalSession.LockCalla } private void restoreSessions() { - Map unhandledBranchBuffer = new HashMap<>(); + final Set removedGlobalBuffer = new HashSet<>(); + final Map> unhandledBranchBuffer = new HashMap<>(); - restoreSessions(true, unhandledBranchBuffer); - restoreSessions(false, unhandledBranchBuffer); + restoreSessions(true, removedGlobalBuffer, unhandledBranchBuffer); + restoreSessions(false, removedGlobalBuffer, unhandledBranchBuffer); if (!unhandledBranchBuffer.isEmpty()) { - unhandledBranchBuffer.values().forEach(branchSession -> { - String xid = branchSession.getXid(); - long bid = branchSession.getBranchId(); - GlobalSession found = sessionMap.get(xid); - if (found == null) { - // Ignore - if (LOGGER.isInfoEnabled()) { - LOGGER.info("GlobalSession Does Not Exists For BranchSession [" + bid + "/" + xid + "]"); + unhandledBranchBuffer.values().forEach(unhandledBranchSessions -> { + unhandledBranchSessions.values().forEach(branchSession -> { + String xid = branchSession.getXid(); + if (removedGlobalBuffer.contains(xid)) { + return; } - } else { - BranchSession existingBranch = found.getBranch(branchSession.getBranchId()); - if (existingBranch == null) { - found.add(branchSession); + + long bid = branchSession.getBranchId(); + GlobalSession found = sessionMap.get(xid); + if (found == null) { + // Ignore + if (LOGGER.isInfoEnabled()) { + LOGGER.info("GlobalSession Does Not Exists For BranchSession [" + bid + "/" + xid + "]"); + } } else { - existingBranch.setStatus(branchSession.getStatus()); + BranchSession existingBranch = found.getBranch(branchSession.getBranchId()); + if (existingBranch == null) { + found.add(branchSession); + } else { + existingBranch.setStatus(branchSession.getStatus()); + } } - } - + }); }); } } - private void washSessions() { - if (sessionMap.size() > 0) { - Iterator> iterator = sessionMap.entrySet().iterator(); - while (iterator.hasNext()) { - GlobalSession globalSession = iterator.next().getValue(); - - GlobalStatus globalStatus = globalSession.getStatus(); - switch (globalStatus) { - case UnKnown: - case Committed: - case CommitFailed: - case Rollbacked: - case RollbackFailed: - case TimeoutRollbacked: - case TimeoutRollbackFailed: - case Finished: - // Remove all sessions finished - iterator.remove(); - break; - default: - break; - } - } + private boolean checkSessionStatus(GlobalSession globalSession) { + GlobalStatus globalStatus = globalSession.getStatus(); + switch (globalStatus) { + case UnKnown: + case Committed: + case CommitFailed: + case Rollbacked: + case RollbackFailed: + case TimeoutRollbacked: + case TimeoutRollbackFailed: + case Finished: + return false; + default: + return true; } } - private void restoreSessions(boolean isHistory, Map unhandledBranchBuffer) { + private void restoreSessions(boolean isHistory, Set removedGlobalBuffer, Map> unhandledBranchBuffer) { if (!(transactionStoreManager instanceof ReloadableStore)) { return; } while (((ReloadableStore)transactionStoreManager).hasRemaining(isHistory)) { List stores = ((ReloadableStore)transactionStoreManager).readWriteStore(READ_SIZE, isHistory); - restore(stores, unhandledBranchBuffer); + restore(stores, removedGlobalBuffer, unhandledBranchBuffer); } } - private void restore(List stores, Map unhandledBranchSessions) { + private void restore(List stores, Set removedGlobalBuffer, + Map> unhandledBranchBuffer) { for (TransactionWriteStore store : stores) { TransactionStoreManager.LogOperation logOperation = store.getOperate(); SessionStorable sessionStorable = store.getSessionRequest(); @@ -218,11 +218,25 @@ private void restore(List stores, Map stores, Map stores, Map new HashMap<>()) + .put(branchSession.getBranchId(), branchSession); } else { BranchSession existingBranch = foundGlobalSession.getBranch(branchSession.getBranchId()); if (existingBranch == null) { @@ -266,6 +289,9 @@ private void restore(List stores, Map stores, Map Date: Mon, 4 Jan 2021 15:14:18 +0800 Subject: [PATCH 31/93] bugfix:fix TM/RM can't start properly (#3431) --- changes/1.5.0.md | 3 +- changes/en-us/1.5.0.md | 3 +- .../PropertyBeanPostProcessor.java | 45 ------ .../autoconfigure/SeataAutoConfiguration.java | 126 +++++++++++++++- .../boot/autoconfigure/StarterConstants.java | 4 +- .../properties/SeataProperties.java | 4 +- .../SpringCloudAlibabaConfiguration.java | 2 + .../SpringBootConfigurationProvider.java | 138 ++++++------------ .../PropertyBeanPostProcessorTest.java | 24 --- .../RedisAutoInjectionTypeConvertTest.java | 7 +- 10 files changed, 177 insertions(+), 179 deletions(-) delete mode 100644 seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessor.java diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 058d550b4e5..bd1c6cf6491 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -30,6 +30,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3241](https://github.com/seata/seata/pull/3241)] 禁止在多SQL的情况下使用 limit 和 order by 语法 - [[#3406](https://github.com/seata/seata/pull/3406)] 修复当config.txt中包含特殊字符时,键值对无法被推上nacos - [[#3418](https://github.com/seata/seata/pull/3418)] 修复 getGeneratedKeys 可能会取到历史的主键的问题 + - [[#3431](https://github.com/seata/seata/pull/3431)] 修复在读取配置时Property Bean可能还未初始化 @@ -87,4 +88,4 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - **Release:** https://github.com/seata/seata/releases - **WebSite:** https://seata.io - \ No newline at end of file + diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 5f10db79866..f8e8f453cf9 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -30,6 +30,7 @@ - [[#3241](https://github.com/seata/seata/pull/3241)] forbidden use order by or limit in multi sql - [[#3406](https://github.com/seata/seata/pull/3406)] fix the value can not be push to nacos when special charset in config.txt - [[#3418](https://github.com/seata/seata/pull/3418)] fix getGeneratedKeys may get history pk + - [[#3431](https://github.com/seata/seata/pull/3431)] fix property bean may not be initialized when reading configuration ### optimize: @@ -83,4 +84,4 @@ - **Release:** https://github.com/seata/seata/releases - **WebSite:** https://seata.io - \ No newline at end of file + diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessor.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessor.java deleted file mode 100644 index fb48f69b426..00000000000 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessor.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 1999-2019 Seata.io Group. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.seata.spring.boot.autoconfigure; - -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.boot.context.properties.ConfigurationProperties; - -import static io.seata.spring.boot.autoconfigure.StarterConstants.PROPERTY_BEAN_MAP; - -/** - * @author xingfudeshi@gmail.com - */ -public class PropertyBeanPostProcessor implements BeanPostProcessor { - @Override - public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - return bean; - } - - @Override - public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - if (bean.getClass().isAnnotationPresent(ConfigurationProperties.class)) { - ConfigurationProperties configurationProperties = bean.getClass().getAnnotation(ConfigurationProperties.class); - String prefix = configurationProperties.prefix(); - PROPERTY_BEAN_MAP.computeIfPresent(prefix, (k, v) -> { - v.complete(bean); - return v; - }); - } - return bean; - } -} diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java index ae07e1ec9d6..a0fa3b0b8d4 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java @@ -19,6 +19,33 @@ import io.seata.spring.annotation.datasource.SeataAutoDataSourceProxyCreator; import io.seata.spring.annotation.datasource.SeataDataSourceBeanPostProcessor; import io.seata.spring.boot.autoconfigure.properties.SeataProperties; +import io.seata.spring.boot.autoconfigure.properties.client.LockProperties; +import io.seata.spring.boot.autoconfigure.properties.client.LogProperties; +import io.seata.spring.boot.autoconfigure.properties.client.RmProperties; +import io.seata.spring.boot.autoconfigure.properties.client.ServiceProperties; +import io.seata.spring.boot.autoconfigure.properties.client.ShutdownProperties; +import io.seata.spring.boot.autoconfigure.properties.client.ThreadFactoryProperties; +import io.seata.spring.boot.autoconfigure.properties.client.TmProperties; +import io.seata.spring.boot.autoconfigure.properties.client.TransportProperties; +import io.seata.spring.boot.autoconfigure.properties.client.UndoCompressProperties; +import io.seata.spring.boot.autoconfigure.properties.client.UndoProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigApolloProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigConsulProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigCustomProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigEtcd3Properties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigFileProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigNacosProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigZooKeeperProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryConsulProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryCustomProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryEtcd3Properties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryEurekaProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryNacosProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryRedisProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistrySofaProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryZooKeeperProperties; import io.seata.spring.boot.autoconfigure.provider.SpringApplicationContextProvider; import io.seata.tm.api.DefaultFailureHandlerImpl; import io.seata.tm.api.FailureHandler; @@ -26,7 +53,6 @@ import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -36,7 +62,35 @@ import static io.seata.common.Constants.BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER; import static io.seata.spring.annotation.datasource.AutoDataSourceProxyRegistrar.BEAN_NAME_SEATA_AUTO_DATA_SOURCE_PROXY_CREATOR; import static io.seata.spring.annotation.datasource.AutoDataSourceProxyRegistrar.BEAN_NAME_SEATA_DATA_SOURCE_BEAN_POST_PROCESSOR; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_RM_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_TM_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.COMPRESS_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_APOLLO_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_CONSUL_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_CUSTOM_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_ETCD3_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_FILE_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_NACOS_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_ZK_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.LOCK_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.LOG_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.PROPERTY_BEAN_MAP; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_CONSUL_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_CUSTOM_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_ETCD3_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_EUREKA_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_NACOS_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_REDIS_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_SOFA_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_ZK_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.SEATA_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.SERVICE_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.SHUTDOWN_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.THREAD_FACTORY_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.TRANSPORT_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.UNDO_PREFIX; /** * @author xingfudeshi@gmail.com @@ -44,16 +98,46 @@ @ComponentScan(basePackages = "io.seata.spring.boot.autoconfigure.properties") @ConditionalOnProperty(prefix = SEATA_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) @Configuration -@EnableConfigurationProperties({SeataProperties.class}) public class SeataAutoConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(SeataAutoConfiguration.class); - @Bean - @ConditionalOnMissingBean(PropertyBeanPostProcessor.class) - public PropertyBeanPostProcessor propertyBeanPostProcessor() { - return new PropertyBeanPostProcessor(); + static { + + PROPERTY_BEAN_MAP.put(SEATA_PREFIX, SeataProperties.class); + + PROPERTY_BEAN_MAP.put(CLIENT_RM_PREFIX, RmProperties.class); + PROPERTY_BEAN_MAP.put(CLIENT_TM_PREFIX, TmProperties.class); + PROPERTY_BEAN_MAP.put(LOCK_PREFIX, LockProperties.class); + PROPERTY_BEAN_MAP.put(SERVICE_PREFIX, ServiceProperties.class); + PROPERTY_BEAN_MAP.put(SHUTDOWN_PREFIX, ShutdownProperties.class); + PROPERTY_BEAN_MAP.put(THREAD_FACTORY_PREFIX, ThreadFactoryProperties.class); + PROPERTY_BEAN_MAP.put(UNDO_PREFIX, UndoProperties.class); + PROPERTY_BEAN_MAP.put(COMPRESS_PREFIX, UndoCompressProperties.class); + PROPERTY_BEAN_MAP.put(LOG_PREFIX, LogProperties.class); + PROPERTY_BEAN_MAP.put(TRANSPORT_PREFIX, TransportProperties.class); + PROPERTY_BEAN_MAP.put(CONFIG_PREFIX, ConfigProperties.class); + PROPERTY_BEAN_MAP.put(CONFIG_FILE_PREFIX, ConfigFileProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_PREFIX, RegistryProperties.class); + + PROPERTY_BEAN_MAP.put(CONFIG_NACOS_PREFIX, ConfigNacosProperties.class); + PROPERTY_BEAN_MAP.put(CONFIG_CONSUL_PREFIX, ConfigConsulProperties.class); + PROPERTY_BEAN_MAP.put(CONFIG_ZK_PREFIX, ConfigZooKeeperProperties.class); + PROPERTY_BEAN_MAP.put(CONFIG_APOLLO_PREFIX, ConfigApolloProperties.class); + PROPERTY_BEAN_MAP.put(CONFIG_ETCD3_PREFIX, ConfigEtcd3Properties.class); + PROPERTY_BEAN_MAP.put(CONFIG_CUSTOM_PREFIX, ConfigCustomProperties.class); + + PROPERTY_BEAN_MAP.put(REGISTRY_CONSUL_PREFIX, RegistryConsulProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_ETCD3_PREFIX, RegistryEtcd3Properties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_EUREKA_PREFIX, RegistryEurekaProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_NACOS_PREFIX, RegistryNacosProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_REDIS_PREFIX, RegistryRedisProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_SOFA_PREFIX, RegistrySofaProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_ZK_PREFIX, RegistryZooKeeperProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_CUSTOM_PREFIX, RegistryCustomProperties.class); + } + @Bean(BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER) @ConditionalOnMissingBean(name = {BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER}) public SpringApplicationContextProvider springApplicationContextProvider() { @@ -67,7 +151,34 @@ public FailureHandler failureHandler() { } @Bean - @DependsOn({BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER, BEAN_NAME_FAILURE_HANDLER}) + @DependsOn({"seataProperties", + "rmProperties", + "tmProperties", + "lockProperties", + "serviceProperties", + "shutdownProperties", + "threadFactoryProperties", + "undoProperties", + "undoCompressProperties", + "logProperties", + "transportProperties", + "configProperties", + "configFileProperties", + "registryProperties", + "configNacosProperties", + "configConsulProperties", + "configZooKeeperProperties", + "configApolloProperties", + "configEtcd3Properties", + "configCustomProperties", + "registryConsulProperties", + "registryEtcd3Properties", + "registryEurekaProperties", + "registryNacosProperties", + "registryRedisProperties", + "registrySofaProperties", + "registryZooKeeperProperties", + "registryCustomProperties", BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER, BEAN_NAME_FAILURE_HANDLER}) @ConditionalOnMissingBean(GlobalTransactionScanner.class) public GlobalTransactionScanner globalTransactionScanner(SeataProperties seataProperties, FailureHandler failureHandler) { if (LOGGER.isInfoEnabled()) { @@ -76,6 +187,7 @@ public GlobalTransactionScanner globalTransactionScanner(SeataProperties seataPr return new GlobalTransactionScanner(seataProperties.getApplicationId(), seataProperties.getTxServiceGroup(), failureHandler); } + /** * The data source configuration. */ diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java index 1eb694cbeb4..3ef305f23d1 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java @@ -16,7 +16,6 @@ package io.seata.spring.boot.autoconfigure; import java.util.HashMap; -import java.util.concurrent.CompletableFuture; /** * @author xingfudeshi@gmail.com @@ -57,8 +56,7 @@ public interface StarterConstants { String CONFIG_CUSTOM_PREFIX = CONFIG_PREFIX + ".custom"; int MAP_CAPACITY = 64; - HashMap> PROPERTY_BEAN_MAP = new HashMap<>(MAP_CAPACITY); - + HashMap> PROPERTY_BEAN_MAP = new HashMap<>(MAP_CAPACITY); /** * The following special keys need to be normalized. */ diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/SeataProperties.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/SeataProperties.java index 321677f37f4..108ce0fe3b5 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/SeataProperties.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/SeataProperties.java @@ -18,15 +18,15 @@ import io.seata.common.DefaultValues; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.stereotype.Component; import static io.seata.spring.boot.autoconfigure.StarterConstants.SEATA_PREFIX; /** * @author xingfudeshi@gmail.com */ +@Component @ConfigurationProperties(prefix = SEATA_PREFIX) -@EnableConfigurationProperties(SpringCloudAlibabaConfiguration.class) public class SeataProperties { /** * whether enable auto configuration diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/SpringCloudAlibabaConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/SpringCloudAlibabaConfiguration.java index 82c87000b41..d11e5b8e7ea 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/SpringCloudAlibabaConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/SpringCloudAlibabaConfiguration.java @@ -22,12 +22,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; /** * The type Spring cloud alibaba configuration. * * @author slievrly */ +@Component @ConfigurationProperties(prefix = StarterConstants.SEATA_SPRING_CLOUD_ALIBABA_PREFIX) public class SpringCloudAlibabaConfiguration implements ApplicationContextAware { diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/provider/SpringBootConfigurationProvider.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/provider/SpringBootConfigurationProvider.java index 262295f8f70..d62c9eba39e 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/provider/SpringBootConfigurationProvider.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/provider/SpringBootConfigurationProvider.java @@ -19,96 +19,33 @@ import java.lang.reflect.Method; import java.util.Map; import java.util.Optional; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import java.util.stream.Stream; +import io.seata.common.exception.ShouldNeverHappenException; +import io.seata.common.holder.ObjectHolder; import io.seata.config.Configuration; import io.seata.config.ExtConfigurationProvider; import org.apache.commons.lang.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; +import org.springframework.context.ApplicationContext; +import static io.seata.common.Constants.OBJECT_KEY_SPRING_APPLICATION_CONTEXT; import static io.seata.common.util.StringFormatUtils.DOT; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_RM_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_TM_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.COMPRESS_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_APOLLO_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_CONSUL_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_CUSTOM_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_ETCD3_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_FILE_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_NACOS_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_ZK_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.LOCK_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.LOG_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.PROPERTY_BEAN_MAP; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_CONSUL_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_CUSTOM_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_ETCD3_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_EUREKA_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_NACOS_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_REDIS_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_SOFA_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_ZK_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.SEATA_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.SERVICE_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.SHUTDOWN_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_GROUPLIST; import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_VGROUP_MAPPING; -import static io.seata.spring.boot.autoconfigure.StarterConstants.THREAD_FACTORY_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.TRANSPORT_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.UNDO_PREFIX; /** * @author xingfudeshi@gmail.com */ public class SpringBootConfigurationProvider implements ExtConfigurationProvider { - private static final Logger LOGGER = LoggerFactory.getLogger(SpringBootConfigurationProvider.class); private static final String INTERCEPT_METHOD_PREFIX = "get"; - static { - PROPERTY_BEAN_MAP.putIfAbsent(SEATA_PREFIX, new CompletableFuture<>()); - - PROPERTY_BEAN_MAP.putIfAbsent(CLIENT_RM_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(CLIENT_TM_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(LOCK_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(SERVICE_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(SHUTDOWN_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(THREAD_FACTORY_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(UNDO_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(COMPRESS_PREFIX, new CompletableFuture<>()); - - PROPERTY_BEAN_MAP.putIfAbsent(LOG_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(TRANSPORT_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_FILE_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_PREFIX, new CompletableFuture<>()); - - PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_NACOS_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_CONSUL_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_ZK_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_APOLLO_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_ETCD3_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(CONFIG_CUSTOM_PREFIX, new CompletableFuture<>()); - - PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_CONSUL_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_ETCD3_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_EUREKA_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_NACOS_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_REDIS_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_SOFA_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_ZK_PREFIX, new CompletableFuture<>()); - PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_CUSTOM_PREFIX, new CompletableFuture<>()); - } - @Override public Configuration provide(Configuration originalConfiguration) { return (Configuration) Enhancer.create(originalConfiguration.getClass(), new MethodInterceptor() { @@ -139,12 +76,12 @@ public Object intercept(Object proxy, Method method, Object[] args, MethodProxy }); } - private Object get(String dataId, Object defaultValue, long timeoutMills) throws IllegalAccessException, ExecutionException, InterruptedException, TimeoutException { + private Object get(String dataId, Object defaultValue, long timeoutMills) throws IllegalAccessException, InstantiationException { return get(dataId, defaultValue); } - private Object get(String dataId, Object defaultValue) throws IllegalAccessException, ExecutionException, InterruptedException, TimeoutException { + private Object get(String dataId, Object defaultValue) throws IllegalAccessException, InstantiationException { Object result = get(dataId); if (result == null) { return defaultValue; @@ -152,31 +89,52 @@ private Object get(String dataId, Object defaultValue) throws IllegalAccessExcep return result; } - private Object get(String dataId) throws IllegalAccessException, ExecutionException, InterruptedException, TimeoutException { + private Object get(String dataId) throws IllegalAccessException, InstantiationException { String propertyPrefix = getPropertyPrefix(dataId); - CompletableFuture propertyFuture = PROPERTY_BEAN_MAP.get(propertyPrefix); - if (propertyFuture != null) { - Object propertyObject = propertyFuture.get(10000, TimeUnit.MILLISECONDS); - String propertySuffix = getPropertySuffix(dataId); - Optional fieldOptional = Stream.of(propertyObject.getClass().getDeclaredFields()).filter( - f -> f.getName().equalsIgnoreCase(propertySuffix)).findAny(); - if (fieldOptional.isPresent()) { - Field field = fieldOptional.get(); - field.setAccessible(true); - Object valueObject = field.get(propertyObject); - if (valueObject instanceof Map) { - String key = StringUtils.substringAfterLast(dataId, String.valueOf(DOT)); - valueObject = ((Map) valueObject).get(key); - } - return valueObject; + String propertySuffix = getPropertySuffix(dataId); + ApplicationContext applicationContext = (ApplicationContext) ObjectHolder.INSTANCE.getObject(OBJECT_KEY_SPRING_APPLICATION_CONTEXT); + Class propertyClass = PROPERTY_BEAN_MAP.get(propertyPrefix); + Object valueObject = null; + if (propertyClass != null) { + try { + Object propertyBean = applicationContext.getBean(propertyClass); + valueObject = getFieldValue(propertyBean, propertySuffix, dataId); + } catch (NoSuchBeanDefinitionException ignore) { + } } else { - if (LOGGER.isWarnEnabled()) { - LOGGER.warn("Property bean with prefix '{}' was not found in `StarterConstants.PROPERTY_BEAN_MAP`." - + " Please inform the {} committer to fix this BUG.", propertyPrefix, SEATA_PREFIX); + throw new ShouldNeverHappenException("PropertyClass for prefix: [" + propertyPrefix + "] should not be null."); + } + if (valueObject == null) { + valueObject = getFieldValue(propertyClass.newInstance(), propertySuffix, dataId); + } + + return valueObject; + } + + /** + * get field value + * + * @param object + * @param fieldName + * @param dataId + * @return java.lang.Object + * @author xingfudeshi@gmail.com + */ + private Object getFieldValue(Object object, String fieldName, String dataId) throws IllegalAccessException { + Object value = null; + Optional fieldOptional = Stream.of(object.getClass().getDeclaredFields()).filter( + f -> f.getName().equalsIgnoreCase(fieldName)).findAny(); + if (fieldOptional.isPresent()) { + Field field = fieldOptional.get(); + field.setAccessible(true); + value = field.get(object); + if (value instanceof Map) { + String key = StringUtils.substringAfterLast(dataId, String.valueOf(DOT)); + value = ((Map) value).get(key); } } - return null; + return value; } /** diff --git a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessorTest.java b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessorTest.java index 6613829cbbf..dfbcb7a1ded 100644 --- a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessorTest.java +++ b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertyBeanPostProcessorTest.java @@ -1,23 +1,13 @@ package io.seata.spring.boot.autoconfigure; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - import io.seata.spring.boot.autoconfigure.properties.SeataProperties; import io.seata.spring.boot.autoconfigure.properties.SpringCloudAlibabaConfiguration; -import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import static io.seata.spring.boot.autoconfigure.StarterConstants.PROPERTY_BEAN_MAP; -import static io.seata.spring.boot.autoconfigure.StarterConstants.SEATA_PREFIX; - /** * @author xingfudeshi@gmail.com */ @@ -27,14 +17,9 @@ public class PropertyBeanPostProcessorTest { @BeforeAll public static void initContext() { - PROPERTY_BEAN_MAP.putIfAbsent(SEATA_PREFIX, new CompletableFuture<>()); context = new AnnotationConfigApplicationContext(PropertyBeanPostProcessorTest.class); } - @Bean - public PropertyBeanPostProcessor propertyBeanPostProcessor() { - return new PropertyBeanPostProcessor(); - } @Bean public SeataProperties seataProperties() { @@ -48,15 +33,6 @@ public SpringCloudAlibabaConfiguration springCloudAlibabaConfiguration() { return new SpringCloudAlibabaConfiguration(); } - @Test - public void testCompletePropertyBean() throws ExecutionException, InterruptedException, TimeoutException { - Object object = PROPERTY_BEAN_MAP.get(SEATA_PREFIX).get(3, TimeUnit.SECONDS); - Assertions.assertThat(object).isInstanceOf(SeataProperties.class); - SeataProperties seataProperties = (SeataProperties) object; - Assertions.assertThat(seataProperties.getApplicationId()).isEqualTo("test-id"); - } - - @AfterAll public static void closeContext() { context.close(); diff --git a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/RedisAutoInjectionTypeConvertTest.java b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/RedisAutoInjectionTypeConvertTest.java index 252ff8c1a3b..8fca44431d0 100644 --- a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/RedisAutoInjectionTypeConvertTest.java +++ b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/RedisAutoInjectionTypeConvertTest.java @@ -15,8 +15,6 @@ */ package io.seata.spring.boot.autoconfigure; -import java.util.concurrent.CompletableFuture; - import io.seata.common.loader.EnhancedServiceLoader; import io.seata.config.Configuration; import io.seata.config.ExtConfigurationProvider; @@ -51,10 +49,7 @@ public static void initContext() { @Bean RegistryRedisProperties registryRedisProperties() { RegistryRedisProperties registryRedisProperties = new RegistryRedisProperties().setPassword("123456").setDb(1).setServerAddr("localhost:123456"); - CompletableFuture completableFuture = new CompletableFuture<>(); - if (PROPERTY_BEAN_MAP.putIfAbsent(REGISTRY_REDIS_PREFIX, completableFuture) == null) { - completableFuture.complete(registryRedisProperties); - } + PROPERTY_BEAN_MAP.put(REGISTRY_REDIS_PREFIX, RegistryRedisProperties.class); return registryRedisProperties; } From 9036e141fb0eca8f36136c7ee009918e47aac4af Mon Sep 17 00:00:00 2001 From: jsbxyyx Date: Wed, 6 Jan 2021 12:01:47 +0800 Subject: [PATCH 32/93] optimize: fix INSERT INGORE typo (#3436) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + .../src/main/java/io/seata/sqlparser/SQLType.java | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index bd1c6cf6491..fbe734b0e61 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -53,6 +53,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3415](https://github.com/seata/seata/pull/3415)] 优化 maven clean 插件可清除 distribution 目录 - [[#3316](https://github.com/seata/seata/pull/3316)] 优化读取配置值时,属性bean可能未初始化 - [[#3420](https://github.com/seata/seata/pull/3420)] 优化枚举类并添加单元测试 + - [[#3436](https://github.com/seata/seata/pull/3436)] 优化SQLType类中的错别字 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index f8e8f453cf9..d695889d9b0 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -52,6 +52,7 @@ - [[#3415](https://github.com/seata/seata/pull/3415)] optimize maven clean plugin to clear the distribution directory - [[#3316](https://github.com/seata/seata/pull/3316)] optimize the property bean may not be initialized while reading config value - [[#3420](https://github.com/seata/seata/pull/3420)] optimize enumerated classes and add unit tests + - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class ### test diff --git a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SQLType.java b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SQLType.java index bc767405efd..fd0c0955efe 100644 --- a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SQLType.java +++ b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SQLType.java @@ -205,9 +205,9 @@ public enum SQLType { SELECT_FOUND_ROWS(44), /** - * Insert ingore sql type. + * Insert ignore sql type. */ - INSERT_INGORE(101), + INSERT_IGNORE(101), /** * Insert on duplicate update sql type. */ From 5de6f4039dde266f29bb67972e8e2d22cae616cb Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Wed, 6 Jan 2021 13:38:09 +0800 Subject: [PATCH 33/93] bugfix: fix the logic of rollback to savepoint and release to savepoint (#3413) --- changes/1.5.0.md | 6 +- changes/en-us/1.5.0.md | 3 + .../datasource/AbstractConnectionProxy.java | 23 --- .../rm/datasource/ConnectionContext.java | 128 +++++++++++++-- .../seata/rm/datasource/ConnectionProxy.java | 30 +++- .../exec/AbstractDMLBaseExecutor.java | 3 +- .../ConnectionContextProxyTest.java | 153 ++++++++++++++++++ .../rm/datasource/exec/MultiExecutorTest.java | 9 +- 8 files changed, 310 insertions(+), 45 deletions(-) create mode 100644 rm-datasource/src/test/java/io/seata/rm/datasource/ConnectionContextProxyTest.java diff --git a/changes/1.5.0.md b/changes/1.5.0.md index fbe734b0e61..3008572ac08 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -18,11 +18,12 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 ### feature: - [[#3172](https://github.com/seata/seata/pull/3172)] 支持undolog压缩 - - [[#3372](https://github.com/seata/seata/pull/3372)] saga模式下支撑用户自定义是否更新最后一次重试日志 + - [[#3372](https://github.com/seata/seata/pull/3372)] saga模式下支持用户自定义是否更新最后一次重试日志 - [[#3411](https://github.com/seata/seata/pull/3411)] 支持配置seata服务器的线程池参数 - [[#3348](https://github.com/seata/seata/pull/3348)] 支持redis哨兵模式 - [[#2667](https://github.com/seata/seata/pull/2667)] 支持db和redis密码加解密 + ### bugfix: - [[#3258](https://github.com/seata/seata/pull/3258)] 修复AsyncWorker潜在的OOM问题 @@ -30,7 +31,9 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3241](https://github.com/seata/seata/pull/3241)] 禁止在多SQL的情况下使用 limit 和 order by 语法 - [[#3406](https://github.com/seata/seata/pull/3406)] 修复当config.txt中包含特殊字符时,键值对无法被推上nacos - [[#3418](https://github.com/seata/seata/pull/3418)] 修复 getGeneratedKeys 可能会取到历史的主键的问题 + - [[#3408](https://github.com/seata/seata/pull/3408)] 修复jar运行模式, 当第三方依赖分开打包时, this.getClass().getClassLoader()是null, 会报空指针异常 - [[#3431](https://github.com/seata/seata/pull/3431)] 修复在读取配置时Property Bean可能还未初始化 + - [[#3413](https://github.com/seata/seata/pull/3413)] 修复回滚到savepoint以及releaseSavepoint的逻辑 @@ -79,6 +82,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [wangliang181230](https://github.com/wangliang181230) - [xingfudeshi](https://github.com/xingfudeshi) - [MentosL](https://github.com/MentosL) + - [lian88jian](https://github.com/lian88jian) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index d695889d9b0..38697e67d25 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -30,7 +30,9 @@ - [[#3241](https://github.com/seata/seata/pull/3241)] forbidden use order by or limit in multi sql - [[#3406](https://github.com/seata/seata/pull/3406)] fix the value can not be push to nacos when special charset in config.txt - [[#3418](https://github.com/seata/seata/pull/3418)] fix getGeneratedKeys may get history pk + - [[#3408](https://github.com/seata/seata/pull/3408)] run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null - [[#3431](https://github.com/seata/seata/pull/3431)] fix property bean may not be initialized when reading configuration + - [[#3413](https://github.com/seata/seata/pull/3413)] fix the logic of rollback to savepoint and release to savepoint ### optimize: @@ -75,6 +77,7 @@ - [wangliang181230](https://github.com/wangliang181230) - [xingfudeshi](https://github.com/xingfudeshi) - [MentosL](https://github.com/MentosL) + - [lian88jian](https://github.com/lian88jian) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/AbstractConnectionProxy.java b/rm-datasource/src/main/java/io/seata/rm/datasource/AbstractConnectionProxy.java index 998d1d243c2..ef8c8107211 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/AbstractConnectionProxy.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/AbstractConnectionProxy.java @@ -34,7 +34,6 @@ import java.sql.SQLException; import java.sql.SQLWarning; import java.sql.SQLXML; -import java.sql.Savepoint; import java.sql.Statement; import java.sql.Struct; import java.util.List; @@ -244,28 +243,6 @@ public int getHoldability() throws SQLException { return targetConnection.getHoldability(); } - @Override - public Savepoint setSavepoint() throws SQLException { - return targetConnection.setSavepoint(); - } - - @Override - public Savepoint setSavepoint(String name) throws SQLException { - return targetConnection.setSavepoint(name); - } - - @Override - public void rollback(Savepoint savepoint) throws SQLException { - targetConnection.rollback(savepoint); - - } - - @Override - public void releaseSavepoint(Savepoint savepoint) throws SQLException { - targetConnection.releaseSavepoint(savepoint); - - } - @Override public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionContext.java b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionContext.java index a1d7fac2077..4c6c222a0fc 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionContext.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionContext.java @@ -15,13 +15,19 @@ */ package io.seata.rm.datasource; +import java.sql.SQLException; +import java.sql.Savepoint; +import java.util.Set; +import java.util.Map; +import java.util.LinkedHashMap; +import java.util.List; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; -import java.util.List; -import java.util.Set; + import io.seata.common.exception.ShouldNeverHappenException; +import io.seata.common.util.CollectionUtils; import io.seata.rm.datasource.undo.SQLUndoLog; /** @@ -30,15 +36,33 @@ * @author sharajava */ public class ConnectionContext { + private static final Savepoint DEFAULT_SAVEPOINT = new Savepoint() { + @Override + public int getSavepointId() throws SQLException { + return 0; + } + + @Override + public String getSavepointName() throws SQLException { + return "DEFAULT_SEATA_SAVEPOINT"; + } + }; + private String xid; private Long branchId; private boolean isGlobalLockRequire; + private Savepoint currentSavepoint = DEFAULT_SAVEPOINT; /** - * Table and primary key should not be duplicated. + * the lock keys buffer + */ + private final Map> lockKeysBuffer = new LinkedHashMap<>(); + /** + * the undo items buffer */ - private Set lockKeysBuffer = new HashSet<>(); - private List sqlUndoItemsBuffer = new ArrayList<>(); + private final Map> sqlUndoItemsBuffer = new LinkedHashMap<>(); + + private final List savepoints = new ArrayList<>(8); /** * whether requires global lock in this connection @@ -64,7 +88,7 @@ void setGlobalLockRequire(boolean isGlobalLockRequire) { * @param lockKey the lock key */ void appendLockKey(String lockKey) { - lockKeysBuffer.add(lockKey); + lockKeysBuffer.computeIfAbsent(currentSavepoint, k -> new HashSet<>()).add(lockKey); } /** @@ -73,7 +97,55 @@ void appendLockKey(String lockKey) { * @param sqlUndoLog the sql undo log */ void appendUndoItem(SQLUndoLog sqlUndoLog) { - sqlUndoItemsBuffer.add(sqlUndoLog); + sqlUndoItemsBuffer.computeIfAbsent(currentSavepoint, k -> new ArrayList<>()).add(sqlUndoLog); + } + + /** + * Append savepoint + * @param savepoint the savepoint + */ + void appendSavepoint(Savepoint savepoint) { + savepoints.add(savepoint); + this.currentSavepoint = savepoint; + } + + public void removeSavepoint(Savepoint savepoint) { + List afterSavepoints = getAfterSavepoints(savepoint); + + if (null == savepoint) { + sqlUndoItemsBuffer.clear(); + lockKeysBuffer.clear(); + } else { + + for (Savepoint sp : afterSavepoints) { + sqlUndoItemsBuffer.remove(sp); + lockKeysBuffer.remove(sp); + } + } + + savepoints.removeAll(afterSavepoints); + currentSavepoint = savepoints.size() == 0 ? DEFAULT_SAVEPOINT : savepoints.get(savepoints.size() - 1); + } + + public void releaseSavepoint(Savepoint savepoint) { + List afterSavepoints = getAfterSavepoints(savepoint); + savepoints.removeAll(afterSavepoints); + currentSavepoint = savepoints.size() == 0 ? DEFAULT_SAVEPOINT : savepoints.get(savepoints.size() - 1); + + // move the undo items & lock keys to current savepoint + for (Savepoint sp : afterSavepoints) { + List savepointSQLUndoLogs = sqlUndoItemsBuffer.remove(sp); + if (CollectionUtils.isNotEmpty(savepointSQLUndoLogs)) { + sqlUndoItemsBuffer.computeIfAbsent(currentSavepoint, k -> new ArrayList<>(savepointSQLUndoLogs.size())) + .addAll(savepointSQLUndoLogs); + } + + Set savepointLockKeys = lockKeysBuffer.remove(sp); + if (CollectionUtils.isNotEmpty(savepointLockKeys)) { + lockKeysBuffer.computeIfAbsent(currentSavepoint, k -> new HashSet<>()) + .addAll(savepointLockKeys); + } + } } /** @@ -121,6 +193,15 @@ public boolean hasUndoLog() { return !sqlUndoItemsBuffer.isEmpty(); } + /** + * Gets lock keys buffer. + * + * @return the lock keys buffer + */ + public boolean hasLockKey() { + return !lockKeysBuffer.isEmpty(); + } + /** * Gets xid. * @@ -174,6 +255,7 @@ void reset(String xid) { this.xid = xid; branchId = null; this.isGlobalLockRequire = false; + savepoints.clear(); lockKeysBuffer.clear(); sqlUndoItemsBuffer.clear(); } @@ -187,8 +269,17 @@ public String buildLockKeys() { if (lockKeysBuffer.isEmpty()) { return null; } + Set lockKeysBufferSet = new HashSet<>(); + for (Set lockKeys : lockKeysBuffer.values()) { + lockKeysBufferSet.addAll(lockKeys); + } + + if (lockKeysBufferSet.isEmpty()) { + return null; + } + StringBuilder appender = new StringBuilder(); - Iterator iterable = lockKeysBuffer.iterator(); + Iterator iterable = lockKeysBufferSet.iterator(); while (iterable.hasNext()) { appender.append(iterable.next()); if (iterable.hasNext()) { @@ -204,16 +295,25 @@ public String buildLockKeys() { * @return the undo items */ public List getUndoItems() { - return sqlUndoItemsBuffer; + List undoItems = new ArrayList<>(); + for (List items : sqlUndoItemsBuffer.values()) { + undoItems.addAll(items); + } + return undoItems; } + /** - * Gets lock keys buffer. - * - * @return the lock keys buffer + * Get the savepoints after target savepoint(include the param savepoint) + * @param savepoint the target savepoint + * @return after savepoints */ - public Set getLockKeysBuffer() { - return lockKeysBuffer; + private List getAfterSavepoints(Savepoint savepoint) { + if (null == savepoint) { + return new ArrayList<>(savepoints); + } + + return new ArrayList<>(savepoints.subList(savepoints.indexOf(savepoint), savepoints.size())); } @Override diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java index 1e0d754dc3d..6b34f2c6d72 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java @@ -17,6 +17,7 @@ import java.sql.Connection; import java.sql.SQLException; +import java.sql.Savepoint; import java.util.concurrent.Callable; import io.seata.common.util.StringUtils; @@ -194,6 +195,33 @@ public void commit() throws SQLException { } } + @Override + public Savepoint setSavepoint() throws SQLException { + Savepoint savepoint = targetConnection.setSavepoint(); + context.appendSavepoint(savepoint); + return savepoint; + } + + @Override + public Savepoint setSavepoint(String name) throws SQLException { + Savepoint savepoint = targetConnection.setSavepoint(name); + context.appendSavepoint(savepoint); + return savepoint; + } + + @Override + public void rollback(Savepoint savepoint) throws SQLException { + targetConnection.rollback(savepoint); + context.removeSavepoint(savepoint); + } + + @Override + public void releaseSavepoint(Savepoint savepoint) throws SQLException { + targetConnection.releaseSavepoint(savepoint); + context.releaseSavepoint(savepoint); + } + + private void doCommit() throws SQLException { if (context.inGlobalTransaction()) { processGlobalTransactionCommit(); @@ -235,7 +263,7 @@ private void processGlobalTransactionCommit() throws SQLException { } private void register() throws TransactionException { - if (!context.hasUndoLog() || context.getLockKeysBuffer().isEmpty()) { + if (!context.hasUndoLog() || !context.hasLockKey()) { return; } Long branchId = DefaultResourceManager.get().branchRegister(BranchType.AT, getDataSourceProxy().getResourceId(), diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java index 7ebcfae9b02..04302c7d419 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java @@ -191,8 +191,7 @@ public T execute(Callable callable) throws Exception { protected void onException(Exception e) throws Exception { ConnectionContext context = connection.getContext(); //UndoItems can't use the Set collection class to prevent ABA - context.getUndoItems().clear(); - context.getLockKeysBuffer().clear(); + context.removeSavepoint(null); connection.getTargetConnection().rollback(); } diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/ConnectionContextProxyTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/ConnectionContextProxyTest.java new file mode 100644 index 00000000000..50ef8ea3829 --- /dev/null +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/ConnectionContextProxyTest.java @@ -0,0 +1,153 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.rm.datasource; + +import com.alibaba.druid.mock.MockSavepoint; +import io.seata.rm.datasource.undo.SQLUndoLog; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.sql.Savepoint; +import java.util.List; + +/** + * ConnectionContextProxy test + * + * @author chd + */ +public class ConnectionContextProxyTest { + ConnectionContext connectionContext = new ConnectionContext(); + + @Test + public void testBuildLockKeys() throws Exception { + connectionContext.appendLockKey("abc"); + connectionContext.appendLockKey("bcd"); + + Assertions.assertTrue(connectionContext.hasLockKey()); + Assertions.assertEquals(connectionContext.buildLockKeys(), "bcd;abc"); + } + + @Test + public void testAppendUndoItem() { + SQLUndoLog sqlUndoLog = new SQLUndoLog(); + connectionContext.appendUndoItem(sqlUndoLog); + SQLUndoLog sqlUndoLog1 = new SQLUndoLog(); + connectionContext.appendUndoItem(sqlUndoLog1); + + Assertions.assertTrue(connectionContext.hasUndoLog()); + Assertions.assertEquals(connectionContext.getUndoItems().size(), 2); + Assertions.assertSame(connectionContext.getUndoItems().get(0), sqlUndoLog); + Assertions.assertSame(connectionContext.getUndoItems().get(1), sqlUndoLog1); + } + + @Test + @SuppressWarnings("unchecked") + public void testGetAfterSavepoints() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { + Savepoint sp1 = new MockSavepoint(); + Savepoint sp2 = new MockSavepoint(); + Savepoint sp3 = new MockSavepoint(); + connectionContext.appendSavepoint(sp1); + connectionContext.appendSavepoint(sp2); + connectionContext.appendSavepoint(sp3); + + Method m = ConnectionContext.class.getDeclaredMethod("getAfterSavepoints", Savepoint.class); + m.setAccessible(true); + + List invoke = (List) m.invoke(connectionContext, new Object[]{null}); + Assertions.assertEquals(invoke.size(), 3); + + invoke = (List) m.invoke(connectionContext, sp2); + Assertions.assertEquals(invoke.size(), 2); + } + + @Test + public void testBindAndUnbind() { + connectionContext.bind("test-xid"); + Assertions.assertTrue(connectionContext.inGlobalTransaction()); + + connectionContext.reset(); + + connectionContext.setGlobalLockRequire(true); + Assertions.assertTrue(connectionContext.isGlobalLockRequire()); + } + + @Test + public void testRemoveSavepoint() { + Savepoint sp1 = new MockSavepoint(); + connectionContext.appendSavepoint(sp1); + connectionContext.appendUndoItem(new SQLUndoLog()); + connectionContext.appendLockKey("sp1-lock-key"); + + Savepoint sp2 = new MockSavepoint(); + connectionContext.appendSavepoint(sp2); + + Savepoint sp3 = new MockSavepoint(); + connectionContext.appendSavepoint(sp3); + connectionContext.appendLockKey("sp3-lock-key"); + connectionContext.appendUndoItem(new SQLUndoLog()); + + Assertions.assertEquals(connectionContext.getUndoItems().size(), 2); + Assertions.assertEquals(connectionContext.buildLockKeys(), "sp3-lock-key;sp1-lock-key"); + + + connectionContext.removeSavepoint(sp3); + Assertions.assertEquals(connectionContext.getUndoItems().size(), 1); + Assertions.assertEquals(connectionContext.buildLockKeys(), "sp1-lock-key"); + + connectionContext.removeSavepoint(null); + Assertions.assertEquals(connectionContext.getUndoItems().size(), 0); + Assertions.assertNull(connectionContext.buildLockKeys()); + } + + + @Test + public void testReleaseSavepoint() { + Savepoint sp1 = new MockSavepoint(); + connectionContext.appendSavepoint(sp1); + connectionContext.appendUndoItem(new SQLUndoLog()); + connectionContext.appendLockKey("sp1-lock-key"); + + Savepoint sp2 = new MockSavepoint(); + connectionContext.appendSavepoint(sp2); + + Savepoint sp3 = new MockSavepoint(); + connectionContext.appendSavepoint(sp3); + connectionContext.appendLockKey("sp3-lock-key"); + connectionContext.appendUndoItem(new SQLUndoLog()); + + Assertions.assertEquals(connectionContext.getUndoItems().size(), 2); + Assertions.assertEquals(connectionContext.buildLockKeys(), "sp3-lock-key;sp1-lock-key"); + + + connectionContext.releaseSavepoint(sp3); + Assertions.assertEquals(connectionContext.getUndoItems().size(), 2); + Assertions.assertEquals(connectionContext.buildLockKeys(), "sp3-lock-key;sp1-lock-key"); + + connectionContext.releaseSavepoint(null); + Assertions.assertEquals(connectionContext.getUndoItems().size(), 2); + Assertions.assertEquals(connectionContext.buildLockKeys(), "sp3-lock-key;sp1-lock-key"); + } + + + + @AfterEach + public void clear() { + connectionContext.reset(); + } +} diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MultiExecutorTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MultiExecutorTest.java index 4da7b39d823..32d3a6d7362 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MultiExecutorTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MultiExecutorTest.java @@ -109,11 +109,12 @@ public void testBeforeImageAndAfterImages() throws SQLException { List items = connectionProxy.getContext().getUndoItems(); Assertions.assertTrue(items.stream().allMatch(t -> Objects.equals(t.getSqlType(), SQLType.UPDATE) && Objects.equals(t.getTableName(), "table_update_executor_test"))); Assertions.assertEquals(items.size(), 1); - items.clear(); + connectionProxy.getContext().reset(); //same table delete - sql = "delete from table_update_executor_test where id = 2;delete from table_update_executor_test where id = 3"; + sql = "delete from table_update_executor_test where id = 2;" + + "delete from table_update_executor_test where id = 3"; multi = SQLVisitorFactory.get(sql, JdbcConstants.MYSQL); executor = new MultiExecutor(statementProxy, (statement, args) -> { return null; @@ -130,7 +131,7 @@ public void testBeforeImageAndAfterImages() throws SQLException { Set itemSet = items.stream().map(t -> t.getTableName()).collect(Collectors.toSet()); Assertions.assertTrue(itemSet.contains("table_update_executor_test")); Assertions.assertEquals(items.size(), 1); - items.clear(); + connectionProxy.getContext().reset(); //multi table update @@ -152,7 +153,7 @@ public void testBeforeImageAndAfterImages() throws SQLException { Assertions.assertTrue(itemSet.contains("table_update_executor_test")); Assertions.assertTrue(itemSet.contains("table_update_executor_test2")); Assertions.assertEquals(items.size(), 2); - items.clear(); + connectionProxy.getContext().reset(); // multi table delete From aebaaff41db58bc10525186f311885e37d772ce9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?WangLiang/=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Fri, 8 Jan 2021 11:00:51 +0800 Subject: [PATCH 34/93] feature: send the `seata-server` log to `logstash` or `kafka` (#3443) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + script/logstash/config/logstash-kafka.conf | 17 +++ script/logstash/config/logstash-logback.conf | 19 ++++ server/pom.xml | 17 ++- .../WhitespaceThrowableProxyConverter.java | 4 +- server/src/main/resources/logback.xml | 100 +++++------------- .../resources/logback/console-appender.xml | 12 +++ .../main/resources/logback/file-appender.xml | 67 ++++++++++++ .../main/resources/logback/kafka-appender.xml | 31 ++++++ .../resources/logback/logstash-appender.xml | 16 +++ 11 files changed, 206 insertions(+), 79 deletions(-) create mode 100644 script/logstash/config/logstash-kafka.conf create mode 100644 script/logstash/config/logstash-logback.conf create mode 100644 server/src/main/resources/logback/console-appender.xml create mode 100644 server/src/main/resources/logback/file-appender.xml create mode 100644 server/src/main/resources/logback/kafka-appender.xml create mode 100644 server/src/main/resources/logback/logstash-appender.xml diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 3008572ac08..08e74e5699c 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -22,6 +22,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3411](https://github.com/seata/seata/pull/3411)] 支持配置seata服务器的线程池参数 - [[#3348](https://github.com/seata/seata/pull/3348)] 支持redis哨兵模式 - [[#2667](https://github.com/seata/seata/pull/2667)] 支持db和redis密码加解密 + - [[#3443](https://github.com/seata/seata/pull/3443)] 将`seata-server`的日志发送到`logstash`或`kafka`中,再存入`ElasticSearch` ### bugfix: diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 38697e67d25..1416b091d54 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -22,6 +22,7 @@ - [[#3411](https://github.com/seata/seata/pull/3411)] support seata server thread pool parameters configuration - [[#3348](https://github.com/seata/seata/pull/3348)] support redis sentinel mode - [[#2667](https://github.com/seata/seata/pull/2667)] support password decryption + - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` ### bugfix: diff --git a/script/logstash/config/logstash-kafka.conf b/script/logstash/config/logstash-kafka.conf new file mode 100644 index 00000000000..57176cf7b3a --- /dev/null +++ b/script/logstash/config/logstash-kafka.conf @@ -0,0 +1,17 @@ +# App -> Kafka -> Logstash -> Elasticsearch pipeline. + +input { + kafka { + bootstrap_servers => "localhost:9092" + topics => ["to_logstash"] + } +} + +output{ + elasticsearch { + hosts => ["localhost:9200"] + } + stdout { + codec => rubydebug + } +} diff --git a/script/logstash/config/logstash-logback.conf b/script/logstash/config/logstash-logback.conf new file mode 100644 index 00000000000..5ee35ec0f65 --- /dev/null +++ b/script/logstash/config/logstash-logback.conf @@ -0,0 +1,19 @@ +# App -> Logback -> Logstash -> Elasticsearch pipeline. + +input { + # Using TCP protocol + tcp { + port => 4560 + # execute command `./logstash-plugin install logstash-codec-json_lines` to install this plugin. + codec => json_lines + } +} + +output{ + elasticsearch { + hosts => ["localhost:9200"] + } + stdout { + codec => rubydebug + } +} diff --git a/server/pom.xml b/server/pom.xml index e3acd8017f5..29b99f0dd5b 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -26,8 +26,13 @@ seata-server jar seata-server ${project.version} - + + 6.5 + 0.2.0-RC2 + + + ${project.groupId} seata-core @@ -119,6 +124,16 @@ fastjson + + net.logstash.logback + logstash-logback-encoder + ${logstash-logback-encoder.version} + + + com.github.danielwegener + logback-kafka-appender + ${kafka-appender.version} + diff --git a/server/src/main/java/io/seata/server/logging/logback/WhitespaceThrowableProxyConverter.java b/server/src/main/java/io/seata/server/logging/logback/WhitespaceThrowableProxyConverter.java index 4a84860889a..e28d096cfef 100644 --- a/server/src/main/java/io/seata/server/logging/logback/WhitespaceThrowableProxyConverter.java +++ b/server/src/main/java/io/seata/server/logging/logback/WhitespaceThrowableProxyConverter.java @@ -29,7 +29,7 @@ public class WhitespaceThrowableProxyConverter extends ThrowableProxyConverter { @Override protected String throwableProxyToString(IThrowableProxy tp) { - return "==>" + CoreConstants.LINE_SEPARATOR + super.throwableProxyToString(tp) - + "<==" + CoreConstants.LINE_SEPARATOR + CoreConstants.LINE_SEPARATOR; + return CoreConstants.LINE_SEPARATOR + super.throwableProxyToString(tp) + + CoreConstants.LINE_SEPARATOR + CoreConstants.LINE_SEPARATOR; } } diff --git a/server/src/main/resources/logback.xml b/server/src/main/resources/logback.xml index e95fbfb2368..19641290919 100644 --- a/server/src/main/resources/logback.xml +++ b/server/src/main/resources/logback.xml @@ -17,90 +17,38 @@ - + - - - - - + + + - + + - - - - ${CONSOLE_LOG_PATTERN} - UTF-8 - - + + - - - ${LOG_HOME}/seata-server.${PORT}.all.log - true - - ${LOG_HOME}/history/seata-server.${PORT}.all.%d{yyyy-MM-dd}.%i.log.gz - 2GB - 7 - 7GB - true - - - ${FILE_LOG_PATTERN} - UTF-8 - - + + - - - - WARN - ACCEPT - DENY - - ${LOG_HOME}/seata-server.${PORT}.warn.log - true - - ${LOG_HOME}/history/seata-server.${PORT}.warn.%d{yyyy-MM-dd}.%i.log.gz - 2GB - 7 - 7GB - true - - - ${FILE_LOG_PATTERN} - UTF-8 - - - - - - - ERROR - ACCEPT - DENY - - ${LOG_HOME}/seata-server.${PORT}.error.log - true - - ${LOG_HOME}/history/seata-server.${PORT}.error.%d{yyyy-MM-dd}.%i.log.gz - 2GB - 7 - 7GB - true - - - ${FILE_LOG_PATTERN} - UTF-8 - - + + - - - + + + + + + + + + + + + diff --git a/server/src/main/resources/logback/console-appender.xml b/server/src/main/resources/logback/console-appender.xml new file mode 100644 index 00000000000..682b1969ae1 --- /dev/null +++ b/server/src/main/resources/logback/console-appender.xml @@ -0,0 +1,12 @@ + + + + + + + + ${CONSOLE_LOG_PATTERN} + UTF-8 + + + diff --git a/server/src/main/resources/logback/file-appender.xml b/server/src/main/resources/logback/file-appender.xml new file mode 100644 index 00000000000..d892e8fb106 --- /dev/null +++ b/server/src/main/resources/logback/file-appender.xml @@ -0,0 +1,67 @@ + + + + + + + + + ${LOG_HOME}/seata-server.${PORT}.all.log + true + + ${LOG_HOME}/history/seata-server.${PORT}.all.%d{yyyy-MM-dd}.%i.log.gz + 2GB + 7 + 7GB + true + + + ${FILE_LOG_PATTERN} + UTF-8 + + + + + + + WARN + ACCEPT + DENY + + ${LOG_HOME}/seata-server.${PORT}.warn.log + true + + ${LOG_HOME}/history/seata-server.${PORT}.warn.%d{yyyy-MM-dd}.%i.log.gz + 2GB + 7 + 7GB + true + + + ${FILE_LOG_PATTERN} + UTF-8 + + + + + + + ERROR + ACCEPT + DENY + + ${LOG_HOME}/seata-server.${PORT}.error.log + true + + ${LOG_HOME}/history/seata-server.${PORT}.error.%d{yyyy-MM-dd}.%i.log.gz + 2GB + 7 + 7GB + true + + + ${FILE_LOG_PATTERN} + UTF-8 + + + diff --git a/server/src/main/resources/logback/kafka-appender.xml b/server/src/main/resources/logback/kafka-appender.xml new file mode 100644 index 00000000000..c8199991d7a --- /dev/null +++ b/server/src/main/resources/logback/kafka-appender.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + { + "@timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}", + "level":"%p", + "app_name":"seata-server", + "PORT": ${PORT:-0}, + "thread_name": "%t", + "logger_name": "%logger", + "message": "%m", + "stack_trace": "%wex" + } + + + ${KAFKA_TOPIC} + + + bootstrap.servers=${KAFKA_BOOTSTRAP_SERVERS} + acks=0 + linger.ms=1000 + max.block.ms=0 + + diff --git a/server/src/main/resources/logback/logstash-appender.xml b/server/src/main/resources/logback/logstash-appender.xml new file mode 100644 index 00000000000..5e37311de41 --- /dev/null +++ b/server/src/main/resources/logback/logstash-appender.xml @@ -0,0 +1,16 @@ + + + + + + + ${LOGSTASH_DESTINATION} + + + { + "app_name": "seata-server" + } + + + + From c65aec572bd9969181e173eae2843dc807894776 Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Fri, 8 Jan 2021 01:34:56 -0600 Subject: [PATCH 35/93] feature: add distributed lock interface (#3427) --- changes/1.5.0.md | 6 +- changes/en-us/1.5.0.md | 10 +- .../main/java/io/seata/common/Constants.java | 26 +++++ .../coordinator/DefaultCoordinator.java | 78 +++++++++------ .../seata/server/session/SessionHolder.java | 97 +++++++++++++++++++ .../seata/server/session/SessionManager.java | 22 ++++- 6 files changed, 204 insertions(+), 35 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 08e74e5699c..2252874fcba 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -22,6 +22,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3411](https://github.com/seata/seata/pull/3411)] 支持配置seata服务器的线程池参数 - [[#3348](https://github.com/seata/seata/pull/3348)] 支持redis哨兵模式 - [[#2667](https://github.com/seata/seata/pull/2667)] 支持db和redis密码加解密 + - [[#3427](https://github.com/seata/seata/pull/3427)] 添加分布式锁接口 - [[#3443](https://github.com/seata/seata/pull/3443)] 将`seata-server`的日志发送到`logstash`或`kafka`中,再存入`ElasticSearch` @@ -59,10 +60,9 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3420](https://github.com/seata/seata/pull/3420)] 优化枚举类并添加单元测试 - [[#3436](https://github.com/seata/seata/pull/3436)] 优化SQLType类中的错别字 - - + ### test - + - [[#3381](https://github.com/seata/seata/pull/3381)] 添加 TmClient 的测试用例 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 1416b091d54..3907508ebbf 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -22,8 +22,9 @@ - [[#3411](https://github.com/seata/seata/pull/3411)] support seata server thread pool parameters configuration - [[#3348](https://github.com/seata/seata/pull/3348)] support redis sentinel mode - [[#2667](https://github.com/seata/seata/pull/2667)] support password decryption - - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` - + - [[#3427](https://github.com/seata/seata/pull/3427)] add distributed lock interface + + ### bugfix: - [[#3258](https://github.com/seata/seata/pull/3258)] fix AsyncWorker potential OOM problem @@ -34,7 +35,7 @@ - [[#3408](https://github.com/seata/seata/pull/3408)] run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null - [[#3431](https://github.com/seata/seata/pull/3431)] fix property bean may not be initialized when reading configuration - [[#3413](https://github.com/seata/seata/pull/3413)] fix the logic of rollback to savepoint and release to savepoint - + - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` ### optimize: @@ -57,8 +58,9 @@ - [[#3420](https://github.com/seata/seata/pull/3420)] optimize enumerated classes and add unit tests - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class - ### test + ### test + - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient Thanks to these contributors for their code commits. Please report an unintended omission. diff --git a/common/src/main/java/io/seata/common/Constants.java b/common/src/main/java/io/seata/common/Constants.java index 0cda414a684..bdec1e66869 100644 --- a/common/src/main/java/io/seata/common/Constants.java +++ b/common/src/main/java/io/seata/common/Constants.java @@ -131,4 +131,30 @@ public interface Constants { * The constant SAGA_TRANS_NAME_PREFIX */ String SAGA_TRANS_NAME_PREFIX = "$Saga_"; + + /** + * The constant RETRY_ROLLBACKING + */ + String RETRY_ROLLBACKING = "RetryRollbacking"; + + /** + * The constant RETRY_COMMITTING + */ + String RETRY_COMMITTING = "RetryCommitting"; + + /** + * The constant ASYNC_COMMITTING + */ + String ASYNC_COMMITTING = "AsyncCommitting"; + + /** + * The constant TX_TIMEOUT_CHECK + */ + String TX_TIMEOUT_CHECK = "TxTimeoutCheck"; + + /** + * The constant UNDOLOG_DELETE + */ + String UNDOLOG_DELETE = "UndologDelete"; + } diff --git a/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java b/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java index f15734f104b..509dcf785f7 100644 --- a/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java +++ b/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java @@ -15,6 +15,11 @@ */ package io.seata.server.coordinator; +import java.time.Duration; +import java.util.Collection; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import io.netty.channel.Channel; import io.seata.common.thread.NamedThreadFactory; import io.seata.common.util.CollectionUtils; @@ -46,11 +51,11 @@ import io.seata.core.protocol.transaction.GlobalStatusRequest; import io.seata.core.protocol.transaction.GlobalStatusResponse; import io.seata.core.protocol.transaction.UndoLogDeleteRequest; -import io.seata.core.rpc.netty.ChannelManager; import io.seata.core.rpc.Disposable; import io.seata.core.rpc.RemotingServer; import io.seata.core.rpc.RpcContext; import io.seata.core.rpc.TransactionMessageHandler; +import io.seata.core.rpc.netty.ChannelManager; import io.seata.core.rpc.netty.NettyRemotingServer; import io.seata.server.AbstractTCInboundHandler; import io.seata.server.event.EventBusManager; @@ -59,12 +64,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.time.Duration; -import java.util.Collection; -import java.util.Map; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - /** * The type Default coordinator. */ @@ -376,42 +375,67 @@ protected void undoLogDelete() { */ public void init() { retryRollbacking.scheduleAtFixedRate(() -> { - try { - handleRetryRollbacking(); - } catch (Exception e) { - LOGGER.info("Exception retry rollbacking ... ", e); + boolean lock = SessionHolder.retryRollbackingLock(); + if (lock) { + try { + handleRetryRollbacking(); + } catch (Exception e) { + LOGGER.info("Exception retry rollbacking ... ", e); + } finally { + SessionHolder.unRetryRollbackingLock(); + } } }, 0, ROLLBACKING_RETRY_PERIOD, TimeUnit.MILLISECONDS); retryCommitting.scheduleAtFixedRate(() -> { - try { - handleRetryCommitting(); - } catch (Exception e) { - LOGGER.info("Exception retry committing ... ", e); + boolean lock = SessionHolder.retryCommittingLock(); + if (lock) { + try { + handleRetryCommitting(); + } catch (Exception e) { + LOGGER.info("Exception retry committing ... ", e); + } finally { + SessionHolder.unRetryCommittingLock(); + } } }, 0, COMMITTING_RETRY_PERIOD, TimeUnit.MILLISECONDS); asyncCommitting.scheduleAtFixedRate(() -> { - try { - handleAsyncCommitting(); - } catch (Exception e) { - LOGGER.info("Exception async committing ... ", e); + boolean lock = SessionHolder.asyncCommittingLock(); + if (lock) { + try { + handleAsyncCommitting(); + } catch (Exception e) { + LOGGER.info("Exception async committing ... ", e); + } finally { + SessionHolder.unAsyncCommittingLock(); + } } }, 0, ASYNC_COMMITTING_RETRY_PERIOD, TimeUnit.MILLISECONDS); timeoutCheck.scheduleAtFixedRate(() -> { - try { - timeoutCheck(); - } catch (Exception e) { - LOGGER.info("Exception timeout checking ... ", e); + boolean lock = SessionHolder.txTimeoutCheckLock(); + if (lock) { + try { + timeoutCheck(); + } catch (Exception e) { + LOGGER.info("Exception timeout checking ... ", e); + } finally { + SessionHolder.unTxTimeoutCheckLock(); + } } }, 0, TIMEOUT_RETRY_PERIOD, TimeUnit.MILLISECONDS); undoLogDelete.scheduleAtFixedRate(() -> { - try { - undoLogDelete(); - } catch (Exception e) { - LOGGER.info("Exception undoLog deleting ... ", e); + boolean lock = SessionHolder.undoLogDeleteLock(); + if (lock) { + try { + undoLogDelete(); + } catch (Exception e) { + LOGGER.info("Exception undoLog deleting ... ", e); + } finally { + SessionHolder.unUndoLogDeleteLock(); + } } }, UNDO_LOG_DELAY_DELETE_PERIOD, UNDO_LOG_DELETE_PERIOD, TimeUnit.MILLISECONDS); } diff --git a/server/src/main/java/io/seata/server/session/SessionHolder.java b/server/src/main/java/io/seata/server/session/SessionHolder.java index 19cd4d9a892..889905a3b99 100644 --- a/server/src/main/java/io/seata/server/session/SessionHolder.java +++ b/server/src/main/java/io/seata/server/session/SessionHolder.java @@ -35,6 +35,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import static io.seata.common.Constants.ASYNC_COMMITTING; +import static io.seata.common.Constants.RETRY_COMMITTING; +import static io.seata.common.Constants.RETRY_ROLLBACKING; +import static io.seata.common.Constants.TX_TIMEOUT_CHECK; +import static io.seata.common.Constants.UNDOLOG_DELETE; + /** * The type Session holder. * @@ -324,6 +331,96 @@ public static T lockAndExecute(GlobalSession globalSession, GlobalSession.Lo return getRootSessionManager().lockAndExecute(globalSession, lockCallable); } + /** + * retry rollbacking lock + * + * @return the boolean + */ + public static boolean retryRollbackingLock() { + return getRootSessionManager().scheduledLock(RETRY_ROLLBACKING); + } + + /** + * retry committing lock + * + * @return the boolean + */ + public static boolean retryCommittingLock() { + return getRootSessionManager().scheduledLock(RETRY_COMMITTING); + } + + /** + * async committing lock + * + * @return the boolean + */ + public static boolean asyncCommittingLock() { + return getRootSessionManager().scheduledLock(ASYNC_COMMITTING); + } + + /** + * tx timeout check lOck + * + * @return the boolean + */ + public static boolean txTimeoutCheckLock() { + return getRootSessionManager().scheduledLock(TX_TIMEOUT_CHECK); + } + + /** + * undolog delete lock + * + * @return the boolean + */ + public static boolean undoLogDeleteLock() { + return getRootSessionManager().scheduledLock(UNDOLOG_DELETE); + } + + /** + * un retry rollbacking lock + * + * @return the boolean + */ + public static boolean unRetryRollbackingLock() { + return getRootSessionManager().unScheduledLock(RETRY_ROLLBACKING); + } + + /** + * un retry committing lock + * + * @return the boolean + */ + public static boolean unRetryCommittingLock() { + return getRootSessionManager().unScheduledLock(RETRY_COMMITTING); + } + + /** + * un async committing lock + * + * @return the boolean + */ + public static boolean unAsyncCommittingLock() { + return getRootSessionManager().unScheduledLock(ASYNC_COMMITTING); + } + + /** + * un tx timeout check lOck + * + * @return the boolean + */ + public static boolean unTxTimeoutCheckLock() { + return getRootSessionManager().unScheduledLock(TX_TIMEOUT_CHECK); + } + + /** + * un undolog delete lock + * + * @return the boolean + */ + public static boolean unUndoLogDeleteLock() { + return getRootSessionManager().unScheduledLock(UNDOLOG_DELETE); + } + public static void destroy() { if (ROOT_SESSION_MANAGER != null) { ROOT_SESSION_MANAGER.destroy(); diff --git a/server/src/main/java/io/seata/server/session/SessionManager.java b/server/src/main/java/io/seata/server/session/SessionManager.java index 228b0c29cfb..173aff67824 100644 --- a/server/src/main/java/io/seata/server/session/SessionManager.java +++ b/server/src/main/java/io/seata/server/session/SessionManager.java @@ -17,7 +17,6 @@ import java.util.Collection; import java.util.List; - import io.seata.core.exception.TransactionException; import io.seata.core.model.BranchStatus; import io.seata.core.model.GlobalStatus; @@ -123,4 +122,25 @@ public interface SessionManager extends SessionLifecycleListener, Disposable { */ T lockAndExecute(GlobalSession globalSession, GlobalSession.LockCallable lockCallable) throws TransactionException; + + /** + * scheduled lock + * + * @param key the lock key + * @return the boolean + */ + default boolean scheduledLock(String key) { + return true; + } + + /** + * un scheduled lock + * + * @param key the lock key + * @return the boolean + */ + default boolean unScheduledLock(String key) { + return true; + } + } From 108e83c5fbd3184dcb449873e9b796930fbbc388 Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Fri, 8 Jan 2021 23:41:51 +0800 Subject: [PATCH 36/93] optimize: adjust the order of springApplicationContextProvider (#3439) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 94 ------------------- .../SpringApplicationContextProvider.java | 7 +- .../autoconfigure/SeataAutoConfiguration.java | 2 +- .../SpringApplicationContextProvider.java | 34 ------- .../RedisAutoInjectionTypeConvertTest.java | 2 +- 6 files changed, 9 insertions(+), 131 deletions(-) delete mode 100644 seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/provider/SpringApplicationContextProvider.java diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 2252874fcba..657378801b2 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -59,6 +59,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3316](https://github.com/seata/seata/pull/3316)] 优化读取配置值时,属性bean可能未初始化 - [[#3420](https://github.com/seata/seata/pull/3420)] 优化枚举类并添加单元测试 - [[#3436](https://github.com/seata/seata/pull/3436)] 优化SQLType类中的错别字 + - [[#3439](https://github.com/seata/seata/pull/3439)] 调整springApplicationContextProvider的顺序以使得他可以在xml的bean之前被调用 ### test diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 3907508ebbf..e69de29bb2d 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -1,94 +0,0 @@ -### 1.5.0 - - [source](https://github.com/seata/seata/archive/v1.5.0.zip) | - [binary](https://github.com/seata/seata/releases/download/v1.5.0/seata-server-1.5.0.zip) - -
- Release notes - - - ### Seata 1.5.0 - - Seata 1.5.0 Released. - - Seata is an easy-to-use, high-performance, open source distributed transaction solution. - - The version is updated as follows: - - ### feature: - - - [[#3172](https://github.com/seata/seata/pull/3172)] support rollback info compress - - [[#3372](https://github.com/seata/seata/pull/3372)] Saga support customize whether update last retry log - - [[#3411](https://github.com/seata/seata/pull/3411)] support seata server thread pool parameters configuration - - [[#3348](https://github.com/seata/seata/pull/3348)] support redis sentinel mode - - [[#2667](https://github.com/seata/seata/pull/2667)] support password decryption - - [[#3427](https://github.com/seata/seata/pull/3427)] add distributed lock interface - - - ### bugfix: - - - [[#3258](https://github.com/seata/seata/pull/3258)] fix AsyncWorker potential OOM problem - - [[#3293](https://github.com/seata/seata/pull/3293)] configuration cache get value cast exception - - [[#3241](https://github.com/seata/seata/pull/3241)] forbidden use order by or limit in multi sql - - [[#3406](https://github.com/seata/seata/pull/3406)] fix the value can not be push to nacos when special charset in config.txt - - [[#3418](https://github.com/seata/seata/pull/3418)] fix getGeneratedKeys may get history pk - - [[#3408](https://github.com/seata/seata/pull/3408)] run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null - - [[#3431](https://github.com/seata/seata/pull/3431)] fix property bean may not be initialized when reading configuration - - [[#3413](https://github.com/seata/seata/pull/3413)] fix the logic of rollback to savepoint and release to savepoint - - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` - - ### optimize: - - - [[#3383](https://github.com/seata/seata/pull/3383)] optimize StatementProxyTest unit test - - [[#3341](https://github.com/seata/seata/pull/3341)] get config from file system even without file: prefix - - [[#3385](https://github.com/seata/seata/pull/3385)] optimize github action - - [[#3175](https://github.com/seata/seata/pull/3175)] improve UUIDGenerator using "history time" version of snowflake algorithm - - [[#3291](https://github.com/seata/seata/pull/3291)] mysql jdbc connect param - - [[#3336](https://github.com/seata/seata/pull/3336)] get netty config property from system properties - - [[#3369](https://github.com/seata/seata/pull/3369)] add github action secrets env for dockerHub - - [[#3343](https://github.com/seata/seata/pull/3343)] Migrate CI provider from Travis CI to Github Actions - - [[#3365](https://github.com/seata/seata/pull/3365)] optimize ParameterParserTest test case failed - - [[#3359](https://github.com/seata/seata/pull/3359)] remove unused test case - - [[#3397](https://github.com/seata/seata/pull/3397)] add the change records folder - - [[#3303](https://github.com/seata/seata/pull/3303)] supports reading all configurations from a single Nacos dataId - - [[#3380](https://github.com/seata/seata/pull/3380)] globalTransactionScanner listener optimize - - [[#3123](https://github.com/seata/seata/pull/3123)] The server directory is build by version, and build only when the profile is release-seata - - [[#3415](https://github.com/seata/seata/pull/3415)] optimize maven clean plugin to clear the distribution directory - - [[#3316](https://github.com/seata/seata/pull/3316)] optimize the property bean may not be initialized while reading config value - - [[#3420](https://github.com/seata/seata/pull/3420)] optimize enumerated classes and add unit tests - - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class - - - ### test - - - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient - - Thanks to these contributors for their code commits. Please report an unintended omission. - - - [slievrly](https://github.com/slievrly) - - [selfishlover](https://github.com/selfishlover) - - [l8189352](https://github.com/l81893521) - - [hoverruan](https://github.com/hoverruan ) - - [jsbxyyx](https://github.com/jsbxyyx) - - [caohdgege](https://github.com/caohdgege) - - [a364176773](https://github.com/a364176773) - - [anselleeyy](https://github.com/anselleeyy) - - [Ifdevil](https://github.com/Ifdevil) - - [Rubbernecker](https://github.com/Rubbernecker) - - [lvxianzheng](https://github.com/lvxianzheng) - - [lj2018110133](https://github.com/lj2018110133) - - [wangliang181230](https://github.com/wangliang181230) - - [xingfudeshi](https://github.com/xingfudeshi) - - [MentosL](https://github.com/MentosL) - - [lian88jian](https://github.com/lian88jian) - - Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. - - #### Link - - - **Seata:** https://github.com/seata/seata - - **Seata-Samples:** https://github.com/seata/seata-samples - - **Release:** https://github.com/seata/seata/releases - - **WebSite:** https://seata.io - -
diff --git a/config/seata-config-spring-cloud/src/main/java/io/seata/config/springcloud/SpringApplicationContextProvider.java b/config/seata-config-spring-cloud/src/main/java/io/seata/config/springcloud/SpringApplicationContextProvider.java index 30706ec7235..b4374998f71 100644 --- a/config/seata-config-spring-cloud/src/main/java/io/seata/config/springcloud/SpringApplicationContextProvider.java +++ b/config/seata-config-spring-cloud/src/main/java/io/seata/config/springcloud/SpringApplicationContextProvider.java @@ -17,6 +17,8 @@ import io.seata.common.holder.ObjectHolder; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; @@ -26,9 +28,12 @@ * @author xingfudeshi@gmail.com * The type spring application context provider */ -public class SpringApplicationContextProvider implements ApplicationContextAware { +public class SpringApplicationContextProvider implements ApplicationContextAware, BeanFactoryPostProcessor { @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { ObjectHolder.INSTANCE.setObject(OBJECT_KEY_SPRING_APPLICATION_CONTEXT, applicationContext); } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { } } diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java index a0fa3b0b8d4..06bbc87b07c 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java @@ -15,6 +15,7 @@ */ package io.seata.spring.boot.autoconfigure; +import io.seata.config.springcloud.SpringApplicationContextProvider; import io.seata.spring.annotation.GlobalTransactionScanner; import io.seata.spring.annotation.datasource.SeataAutoDataSourceProxyCreator; import io.seata.spring.annotation.datasource.SeataDataSourceBeanPostProcessor; @@ -46,7 +47,6 @@ import io.seata.spring.boot.autoconfigure.properties.registry.RegistryRedisProperties; import io.seata.spring.boot.autoconfigure.properties.registry.RegistrySofaProperties; import io.seata.spring.boot.autoconfigure.properties.registry.RegistryZooKeeperProperties; -import io.seata.spring.boot.autoconfigure.provider.SpringApplicationContextProvider; import io.seata.tm.api.DefaultFailureHandlerImpl; import io.seata.tm.api.FailureHandler; import org.slf4j.Logger; diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/provider/SpringApplicationContextProvider.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/provider/SpringApplicationContextProvider.java deleted file mode 100644 index 47f1bab83b3..00000000000 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/provider/SpringApplicationContextProvider.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 1999-2019 Seata.io Group. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.seata.spring.boot.autoconfigure.provider; - -import io.seata.common.holder.ObjectHolder; -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; - -import static io.seata.common.Constants.OBJECT_KEY_SPRING_APPLICATION_CONTEXT; - -/** - * @author xingfudeshi@gmail.com - * The type spring application context provider - */ -public class SpringApplicationContextProvider implements ApplicationContextAware { - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - ObjectHolder.INSTANCE.setObject(OBJECT_KEY_SPRING_APPLICATION_CONTEXT, applicationContext); - } -} diff --git a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/RedisAutoInjectionTypeConvertTest.java b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/RedisAutoInjectionTypeConvertTest.java index 8fca44431d0..2d3c9f26722 100644 --- a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/RedisAutoInjectionTypeConvertTest.java +++ b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/RedisAutoInjectionTypeConvertTest.java @@ -19,8 +19,8 @@ import io.seata.config.Configuration; import io.seata.config.ExtConfigurationProvider; import io.seata.config.FileConfiguration; +import io.seata.config.springcloud.SpringApplicationContextProvider; import io.seata.spring.boot.autoconfigure.properties.registry.RegistryRedisProperties; -import io.seata.spring.boot.autoconfigure.provider.SpringApplicationContextProvider; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; From 95d39e6ba813550aea8fef222bc9b920fbaf8333 Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Sat, 9 Jan 2021 15:30:11 +0800 Subject: [PATCH 37/93] bugfix: reversion the deleted md (#3458) --- changes/en-us/1.5.0.md | 95 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index e69de29bb2d..262735cd243 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -0,0 +1,95 @@ +### 1.5.0 + + [source](https://github.com/seata/seata/archive/v1.5.0.zip) | + [binary](https://github.com/seata/seata/releases/download/v1.5.0/seata-server-1.5.0.zip) + +
+ Release notes + + + ### Seata 1.5.0 + + Seata 1.5.0 Released. + + Seata is an easy-to-use, high-performance, open source distributed transaction solution. + + The version is updated as follows: + + ### feature: + + - [[#3172](https://github.com/seata/seata/pull/3172)] support rollback info compress + - [[#3372](https://github.com/seata/seata/pull/3372)] Saga support customize whether update last retry log + - [[#3411](https://github.com/seata/seata/pull/3411)] support seata server thread pool parameters configuration + - [[#3348](https://github.com/seata/seata/pull/3348)] support redis sentinel mode + - [[#2667](https://github.com/seata/seata/pull/2667)] support password decryption + - [[#3427](https://github.com/seata/seata/pull/3427)] add distributed lock interface + + + ### bugfix: + + - [[#3258](https://github.com/seata/seata/pull/3258)] fix AsyncWorker potential OOM problem + - [[#3293](https://github.com/seata/seata/pull/3293)] configuration cache get value cast exception + - [[#3241](https://github.com/seata/seata/pull/3241)] forbidden use order by or limit in multi sql + - [[#3406](https://github.com/seata/seata/pull/3406)] fix the value can not be push to nacos when special charset in config.txt + - [[#3418](https://github.com/seata/seata/pull/3418)] fix getGeneratedKeys may get history pk + - [[#3408](https://github.com/seata/seata/pull/3408)] run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null + - [[#3431](https://github.com/seata/seata/pull/3431)] fix property bean may not be initialized when reading configuration + - [[#3413](https://github.com/seata/seata/pull/3413)] fix the logic of rollback to savepoint and release to savepoint + - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` + + ### optimize: + + - [[#3383](https://github.com/seata/seata/pull/3383)] optimize StatementProxyTest unit test + - [[#3341](https://github.com/seata/seata/pull/3341)] get config from file system even without file: prefix + - [[#3385](https://github.com/seata/seata/pull/3385)] optimize github action + - [[#3175](https://github.com/seata/seata/pull/3175)] improve UUIDGenerator using "history time" version of snowflake algorithm + - [[#3291](https://github.com/seata/seata/pull/3291)] mysql jdbc connect param + - [[#3336](https://github.com/seata/seata/pull/3336)] get netty config property from system properties + - [[#3369](https://github.com/seata/seata/pull/3369)] add github action secrets env for dockerHub + - [[#3343](https://github.com/seata/seata/pull/3343)] Migrate CI provider from Travis CI to Github Actions + - [[#3365](https://github.com/seata/seata/pull/3365)] optimize ParameterParserTest test case failed + - [[#3359](https://github.com/seata/seata/pull/3359)] remove unused test case + - [[#3397](https://github.com/seata/seata/pull/3397)] add the change records folder + - [[#3303](https://github.com/seata/seata/pull/3303)] supports reading all configurations from a single Nacos dataId + - [[#3380](https://github.com/seata/seata/pull/3380)] globalTransactionScanner listener optimize + - [[#3123](https://github.com/seata/seata/pull/3123)] The server directory is build by version, and build only when the profile is release-seata + - [[#3415](https://github.com/seata/seata/pull/3415)] optimize maven clean plugin to clear the distribution directory + - [[#3316](https://github.com/seata/seata/pull/3316)] optimize the property bean may not be initialized while reading config value + - [[#3420](https://github.com/seata/seata/pull/3420)] optimize enumerated classes and add unit tests + - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class + - [[#3439](https://github.com/seata/seata/pull/3439)] adjust the order of springApplicationContextProvider + + + ### test + + - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient + + Thanks to these contributors for their code commits. Please report an unintended omission. + + - [slievrly](https://github.com/slievrly) + - [selfishlover](https://github.com/selfishlover) + - [l8189352](https://github.com/l81893521) + - [hoverruan](https://github.com/hoverruan ) + - [jsbxyyx](https://github.com/jsbxyyx) + - [caohdgege](https://github.com/caohdgege) + - [a364176773](https://github.com/a364176773) + - [anselleeyy](https://github.com/anselleeyy) + - [Ifdevil](https://github.com/Ifdevil) + - [Rubbernecker](https://github.com/Rubbernecker) + - [lvxianzheng](https://github.com/lvxianzheng) + - [lj2018110133](https://github.com/lj2018110133) + - [wangliang181230](https://github.com/wangliang181230) + - [xingfudeshi](https://github.com/xingfudeshi) + - [MentosL](https://github.com/MentosL) + - [lian88jian](https://github.com/lian88jian) + + Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. + + #### Link + + - **Seata:** https://github.com/seata/seata + - **Seata-Samples:** https://github.com/seata/seata-samples + - **Release:** https://github.com/seata/seata/releases + - **WebSite:** https://seata.io + +
\ No newline at end of file From 894b42c54f6fcc08fbd317110b4f572d44f9651d Mon Sep 17 00:00:00 2001 From: luoxiangnan Date: Mon, 11 Jan 2021 13:44:59 +0800 Subject: [PATCH 38/93] optimize: remove duplicate validAddress code (#3459) --- .../registry/nacos/NacosRegistryServiceImpl.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/discovery/seata-discovery-nacos/src/main/java/io/seata/discovery/registry/nacos/NacosRegistryServiceImpl.java b/discovery/seata-discovery-nacos/src/main/java/io/seata/discovery/registry/nacos/NacosRegistryServiceImpl.java index a064c38544d..f77cc73d9f2 100644 --- a/discovery/seata-discovery-nacos/src/main/java/io/seata/discovery/registry/nacos/NacosRegistryServiceImpl.java +++ b/discovery/seata-discovery-nacos/src/main/java/io/seata/discovery/registry/nacos/NacosRegistryServiceImpl.java @@ -21,6 +21,7 @@ import com.alibaba.nacos.api.naming.listener.NamingEvent; import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.client.naming.utils.CollectionUtils; +import io.seata.common.util.NetUtil; import io.seata.common.util.StringUtils; import io.seata.config.Configuration; import io.seata.config.ConfigurationFactory; @@ -81,13 +82,13 @@ static NacosRegistryServiceImpl getInstance() { @Override public void register(InetSocketAddress address) throws Exception { - validAddress(address); + NetUtil.validAddress(address); getNamingInstance().registerInstance(getServiceName(), getServiceGroup(), address.getAddress().getHostAddress(), address.getPort(), getClusterName()); } @Override public void unregister(InetSocketAddress address) throws Exception { - validAddress(address); + NetUtil.validAddress(address); getNamingInstance().deregisterInstance(getServiceName(), getServiceGroup(), address.getAddress().getHostAddress(), address.getPort(), getClusterName()); } @@ -156,12 +157,6 @@ public void close() throws Exception { } - private void validAddress(InetSocketAddress address) { - if (address.getHostName() == null || 0 == address.getPort()) { - throw new IllegalArgumentException("invalid address:" + address); - } - } - /** * Gets naming instance. * From 5004843366850c2a5132fd45f2ab01ee740fe779 Mon Sep 17 00:00:00 2001 From: spilledyear Date: Tue, 12 Jan 2021 14:10:59 +0800 Subject: [PATCH 39/93] optimize: add applicationId for metric (#3371) --- .../core/event/GlobalTransactionEvent.java | 12 ++++- .../java/io/seata/metrics/IdConstants.java | 2 + .../coordinator/DefaultCoordinator.java | 4 +- .../seata/server/coordinator/DefaultCore.java | 16 +++--- .../server/metrics/MetricsSubscriber.java | 51 ++++++++++++------- .../DefaultCoordinatorMetricsTest.java | 30 +++++------ 6 files changed, 71 insertions(+), 44 deletions(-) diff --git a/core/src/main/java/io/seata/core/event/GlobalTransactionEvent.java b/core/src/main/java/io/seata/core/event/GlobalTransactionEvent.java index 9538f69e736..d99166f1fae 100644 --- a/core/src/main/java/io/seata/core/event/GlobalTransactionEvent.java +++ b/core/src/main/java/io/seata/core/event/GlobalTransactionEvent.java @@ -44,6 +44,11 @@ public class GlobalTransactionEvent implements Event { */ private final String name; + /** + * business applicationId + */ + private String applicationId; + /** * Transaction Begin Time */ @@ -71,6 +76,10 @@ public String getName() { return name; } + public String getApplicationId() { + return applicationId; + } + public Long getBeginTime() { return beginTime; } @@ -83,11 +92,12 @@ public GlobalStatus getStatus() { return status; } - public GlobalTransactionEvent(long id, String role, String name, Long beginTime, Long endTime, + public GlobalTransactionEvent(long id, String role, String name, String applicationId, Long beginTime, Long endTime, GlobalStatus status) { this.id = id; this.role = role; this.name = name; + this.applicationId = applicationId; this.beginTime = beginTime; this.endTime = endTime; this.status = status; diff --git a/metrics/seata-metrics-api/src/main/java/io/seata/metrics/IdConstants.java b/metrics/seata-metrics-api/src/main/java/io/seata/metrics/IdConstants.java index d7f39042747..241b705850d 100644 --- a/metrics/seata-metrics-api/src/main/java/io/seata/metrics/IdConstants.java +++ b/metrics/seata-metrics-api/src/main/java/io/seata/metrics/IdConstants.java @@ -23,6 +23,8 @@ public interface IdConstants { String SEATA_TRANSACTION = "seata.transaction"; + String APP_ID_KEY = "applicationId"; + String NAME_KEY = "name"; String ROLE_KEY = "role"; diff --git a/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java b/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java index 509dcf785f7..3e349b7a0c1 100644 --- a/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java +++ b/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java @@ -236,8 +236,8 @@ protected void timeoutCheck() throws TransactionException { // transaction timeout and start rollbacking event eventBus.post( new GlobalTransactionEvent(globalSession.getTransactionId(), GlobalTransactionEvent.ROLE_TC, - globalSession.getTransactionName(), globalSession.getBeginTime(), null, - globalSession.getStatus())); + globalSession.getTransactionName(), globalSession.getApplicationId(), + globalSession.getBeginTime(), null, globalSession.getStatus())); return true; }); diff --git a/server/src/main/java/io/seata/server/coordinator/DefaultCore.java b/server/src/main/java/io/seata/server/coordinator/DefaultCore.java index ca7c40f3912..801fc0d679b 100644 --- a/server/src/main/java/io/seata/server/coordinator/DefaultCore.java +++ b/server/src/main/java/io/seata/server/coordinator/DefaultCore.java @@ -131,7 +131,7 @@ public String begin(String applicationId, String transactionServiceGroup, String // transaction start event eventBus.post(new GlobalTransactionEvent(session.getTransactionId(), GlobalTransactionEvent.ROLE_TC, - session.getTransactionName(), session.getBeginTime(), null, session.getStatus())); + session.getTransactionName(), applicationId, session.getBeginTime(), null, session.getStatus())); return session.getXid(); } @@ -179,7 +179,8 @@ public boolean doGlobalCommit(GlobalSession globalSession, boolean retrying) thr boolean success = true; // start committing event eventBus.post(new GlobalTransactionEvent(globalSession.getTransactionId(), GlobalTransactionEvent.ROLE_TC, - globalSession.getTransactionName(), globalSession.getBeginTime(), null, globalSession.getStatus())); + globalSession.getTransactionName(), globalSession.getApplicationId(), globalSession.getBeginTime(), + null, globalSession.getStatus())); if (globalSession.isSaga()) { success = getCore(BranchType.SAGA).doGlobalCommit(globalSession, retrying); @@ -249,8 +250,8 @@ public boolean doGlobalCommit(GlobalSession globalSession, boolean retrying) thr // committed event eventBus.post(new GlobalTransactionEvent(globalSession.getTransactionId(), GlobalTransactionEvent.ROLE_TC, - globalSession.getTransactionName(), globalSession.getBeginTime(), System.currentTimeMillis(), - globalSession.getStatus())); + globalSession.getTransactionName(), globalSession.getApplicationId(), globalSession.getBeginTime(), + System.currentTimeMillis(), globalSession.getStatus())); LOGGER.info("Committing global transaction is successfully done, xid = {}.", globalSession.getXid()); } @@ -286,7 +287,8 @@ public boolean doGlobalRollback(GlobalSession globalSession, boolean retrying) t boolean success = true; // start rollback event eventBus.post(new GlobalTransactionEvent(globalSession.getTransactionId(), GlobalTransactionEvent.ROLE_TC, - globalSession.getTransactionName(), globalSession.getBeginTime(), null, globalSession.getStatus())); + globalSession.getTransactionName(), globalSession.getApplicationId(), globalSession.getBeginTime(), + null, globalSession.getStatus())); if (globalSession.isSaga()) { success = getCore(BranchType.SAGA).doGlobalRollback(globalSession, retrying); @@ -343,8 +345,8 @@ public boolean doGlobalRollback(GlobalSession globalSession, boolean retrying) t // rollbacked event eventBus.post(new GlobalTransactionEvent(globalSession.getTransactionId(), GlobalTransactionEvent.ROLE_TC, - globalSession.getTransactionName(), globalSession.getBeginTime(), System.currentTimeMillis(), - globalSession.getStatus())); + globalSession.getTransactionName(), globalSession.getApplicationId(), globalSession.getBeginTime(), + System.currentTimeMillis(), globalSession.getStatus())); LOGGER.info("Rollback global transaction successfully, xid = {}.", globalSession.getXid()); } diff --git a/server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java b/server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java index efc1d0d5900..15406457e7a 100644 --- a/server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java +++ b/server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java @@ -15,15 +15,17 @@ */ package io.seata.server.metrics; +import com.google.common.eventbus.Subscribe; +import io.seata.core.event.GlobalTransactionEvent; +import io.seata.core.model.GlobalStatus; +import io.seata.metrics.registry.Registry; + import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; -import com.google.common.eventbus.Subscribe; -import io.seata.core.event.GlobalTransactionEvent; -import io.seata.core.model.GlobalStatus; -import io.seata.metrics.registry.Registry; +import static io.seata.metrics.IdConstants.APP_ID_KEY; /** * Event subscriber for metrics @@ -49,39 +51,50 @@ public MetricsSubscriber(Registry registry) { } private void processGlobalStatusBegin(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE).increase(1); + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) + .increase(1); } private void processGlobalStatusCommitted(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE).decrease(1); - registry.getCounter(MeterIdConstants.COUNTER_COMMITTED).increase(1); - registry.getSummary(MeterIdConstants.SUMMARY_COMMITTED).increase(1); - registry.getTimer(MeterIdConstants.TIMER_COMMITTED).record(event.getEndTime() - event.getBeginTime(), - TimeUnit.MILLISECONDS); + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) + .decrease(1); + registry.getCounter(MeterIdConstants.COUNTER_COMMITTED.withTag(APP_ID_KEY, event.getApplicationId())) + .increase(1); + registry.getSummary(MeterIdConstants.SUMMARY_COMMITTED.withTag(APP_ID_KEY, event.getApplicationId())) + .increase(1); + registry.getTimer(MeterIdConstants.TIMER_COMMITTED.withTag(APP_ID_KEY, event.getApplicationId())) + .record(event.getEndTime() - event.getBeginTime(), TimeUnit.MILLISECONDS); } private void processGlobalStatusRollbacked(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE).decrease(1); - registry.getCounter(MeterIdConstants.COUNTER_ROLLBACKED).increase(1); - registry.getSummary(MeterIdConstants.SUMMARY_ROLLBACKED).increase(1); - registry.getTimer(MeterIdConstants.TIMER_ROLLBACK).record(event.getEndTime() - event.getBeginTime(), - TimeUnit.MILLISECONDS); + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) + .decrease(1); + registry.getCounter(MeterIdConstants.COUNTER_ROLLBACKED.withTag(APP_ID_KEY, event.getApplicationId())) + .increase(1); + registry.getSummary(MeterIdConstants.SUMMARY_ROLLBACKED.withTag(APP_ID_KEY, event.getApplicationId())) + .increase(1); + registry.getTimer(MeterIdConstants.TIMER_ROLLBACK.withTag(APP_ID_KEY, event.getApplicationId())) + .record(event.getEndTime() - event.getBeginTime(), TimeUnit.MILLISECONDS); } private void processGlobalStatusCommitFailed(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE).decrease(1); + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) + .decrease(1); } private void processGlobalStatusRollbackFailed(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE).decrease(1); + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) + .decrease(1); } private void processGlobalStatusTimeoutRollbacked(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE).decrease(1); + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) + .decrease(1); } private void processGlobalStatusTimeoutRollbackFailed(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE).decrease(1); + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) + .decrease(1); } @Subscribe diff --git a/server/src/test/java/io/seata/server/coordinator/DefaultCoordinatorMetricsTest.java b/server/src/test/java/io/seata/server/coordinator/DefaultCoordinatorMetricsTest.java index d2bbcd5d10c..93ab0ca3ad0 100644 --- a/server/src/test/java/io/seata/server/coordinator/DefaultCoordinatorMetricsTest.java +++ b/server/src/test/java/io/seata/server/coordinator/DefaultCoordinatorMetricsTest.java @@ -63,7 +63,7 @@ public void test() throws IOException, TransactionException, InterruptedExceptio Assertions.assertEquals(1, measurements.size()); Assertions.assertEquals(1, - measurements.get("seata.transaction(meter=counter,role=tc,status=active)").getValue(), 0); + measurements.get("seata.transaction(applicationId=null,meter=counter,role=tc,status=active)").getValue(), 0); //commit this transaction GlobalCommitRequest commitRequest = new GlobalCommitRequest(); @@ -78,18 +78,18 @@ public void test() throws IOException, TransactionException, InterruptedExceptio measurement -> measurements.put(measurement.getId().toString(), measurement)); Assertions.assertEquals(9, measurements.size()); Assertions.assertEquals(0, - measurements.get("seata.transaction(meter=counter,role=tc,status=active)").getValue(), 0); + measurements.get("seata.transaction(applicationId=null,meter=counter,role=tc,status=active)").getValue(), 0); Assertions - .assertEquals(1, measurements.get("seata.transaction(meter=counter,role=tc,status=committed)").getValue(), + .assertEquals(1, measurements.get("seata.transaction(applicationId=null,meter=counter,role=tc,status=committed)").getValue(), 0); Assertions.assertEquals(1, - measurements.get("seata.transaction(meter=summary,role=tc,statistic=count,status=committed)").getValue(), + measurements.get("seata.transaction(applicationId=null,meter=summary,role=tc,statistic=count,status=committed)").getValue(), 0); Assertions.assertEquals(1, - measurements.get("seata.transaction(meter=summary,role=tc,statistic=total,status=committed)").getValue(), + measurements.get("seata.transaction(applicationId=null,meter=summary,role=tc,statistic=total,status=committed)").getValue(), 0); Assertions.assertEquals(1, - measurements.get("seata.transaction(meter=timer,role=tc,statistic=count,status=committed)").getValue(), 0); + measurements.get("seata.transaction(applicationId=null,meter=timer,role=tc,statistic=count,status=committed)").getValue(), 0); //start another new transaction request = new GlobalBeginRequest(); @@ -109,30 +109,30 @@ public void test() throws IOException, TransactionException, InterruptedExceptio measurement -> measurements.put(measurement.getId().toString(), measurement)); Assertions.assertEquals(17, measurements.size()); Assertions.assertEquals(0, - measurements.get("seata.transaction(meter=counter,role=tc,status=active)").getValue(), 0); + measurements.get("seata.transaction(applicationId=null,meter=counter,role=tc,status=active)").getValue(), 0); Assertions - .assertEquals(1, measurements.get("seata.transaction(meter=counter,role=tc,status=committed)").getValue(), + .assertEquals(1, measurements.get("seata.transaction(applicationId=null,meter=counter,role=tc,status=committed)").getValue(), 0); Assertions.assertEquals(0, - measurements.get("seata.transaction(meter=summary,role=tc,statistic=count,status=committed)").getValue(), + measurements.get("seata.transaction(applicationId=null,meter=summary,role=tc,statistic=count,status=committed)").getValue(), 0); Assertions.assertEquals(0, - measurements.get("seata.transaction(meter=summary,role=tc,statistic=total,status=committed)").getValue(), + measurements.get("seata.transaction(applicationId=null,meter=summary,role=tc,statistic=total,status=committed)").getValue(), 0); Assertions.assertEquals(0, - measurements.get("seata.transaction(meter=timer,role=tc,statistic=count,status=committed)").getValue(), 0); + measurements.get("seata.transaction(applicationId=null,meter=timer,role=tc,statistic=count,status=committed)").getValue(), 0); Assertions.assertEquals(1, - measurements.get("seata.transaction(meter=counter,role=tc,status=rollbacked)").getValue(), 0); + measurements.get("seata.transaction(applicationId=null,meter=counter,role=tc,status=rollbacked)").getValue(), 0); Assertions.assertEquals(1, - measurements.get("seata.transaction(meter=summary,role=tc,statistic=count,status=rollbacked)").getValue(), + measurements.get("seata.transaction(applicationId=null,meter=summary,role=tc,statistic=count,status=rollbacked)").getValue(), 0); Assertions.assertEquals(1, - measurements.get("seata.transaction(meter=summary,role=tc,statistic=total,status=rollbacked)").getValue(), + measurements.get("seata.transaction(applicationId=null,meter=summary,role=tc,statistic=total,status=rollbacked)").getValue(), 0); Assertions.assertEquals(1, - measurements.get("seata.transaction(meter=timer,role=tc,statistic=count,status=rollbacked)").getValue(), 0); + measurements.get("seata.transaction(applicationId=null,meter=timer,role=tc,statistic=count,status=rollbacked)").getValue(), 0); } finally { coordinator.destroy(); SessionHolder.destroy(); From bc83c38fe3ebb859247146e155b3cf956d35df47 Mon Sep 17 00:00:00 2001 From: JerryYin Date: Wed, 13 Jan 2021 13:31:27 +0800 Subject: [PATCH 40/93] optimize: make CLIENT_TABLE_META_CHECKER_INTERVAL configurable (#3318) --- .../src/main/java/io/seata/common/DefaultValues.java | 1 + .../io/seata/core/constants/ConfigurationKeys.java | 5 +++++ .../java/io/seata/rm/datasource/DataSourceProxy.java | 4 +++- script/client/conf/file.conf | 1 + script/config-center/config.txt | 1 + .../autoconfigure/properties/client/RmProperties.java | 11 +++++++++++ .../spring/boot/autoconfigure/PropertiesTest.java | 1 + 7 files changed, 23 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/io/seata/common/DefaultValues.java b/common/src/main/java/io/seata/common/DefaultValues.java index 971648ffeb4..1f0ac34163d 100644 --- a/common/src/main/java/io/seata/common/DefaultValues.java +++ b/common/src/main/java/io/seata/common/DefaultValues.java @@ -31,6 +31,7 @@ public interface DefaultValues { int DEFAULT_CLIENT_REPORT_RETRY_COUNT = 5; boolean DEFAULT_CLIENT_REPORT_SUCCESS_ENABLE = false; boolean DEFAULT_CLIENT_TABLE_META_CHECK_ENABLE = false; + long DEFAULT_TABLE_META_CHECKER_INTERVAL = 60000L; boolean DEFAULT_TM_DEGRADE_CHECK = false; boolean DEFAULT_CLIENT_SAGA_BRANCH_REGISTER_ENABLE = false; boolean DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE = false; diff --git a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java index a8666a4be7b..1fb25291362 100644 --- a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java +++ b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java @@ -158,6 +158,11 @@ public interface ConfigurationKeys { */ String CLIENT_TABLE_META_CHECK_ENABLE = CLIENT_RM_PREFIX + "tableMetaCheckEnable"; + /** + * The constant CLIENT_TABLE_META_CHECKER_INTERVAL. + */ + String CLIENT_TABLE_META_CHECKER_INTERVAL = CLIENT_RM_PREFIX + "tableMetaCheckerInterval"; + /** * The constant CLIENT_TM_PREFIX. */ diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceProxy.java b/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceProxy.java index b9d8c0233de..f177f4ad444 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceProxy.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceProxy.java @@ -36,6 +36,7 @@ import org.slf4j.LoggerFactory; import static io.seata.common.DefaultValues.DEFAULT_CLIENT_TABLE_META_CHECK_ENABLE; +import static io.seata.common.DefaultValues.DEFAULT_TABLE_META_CHECKER_INTERVAL; /** * The type Data source proxy. @@ -65,7 +66,8 @@ public class DataSourceProxy extends AbstractDataSourceProxy implements Resource /** * Table meta checker interval */ - private static final long TABLE_META_CHECKER_INTERVAL = 60000L; + private static final long TABLE_META_CHECKER_INTERVAL = ConfigurationFactory.getInstance().getLong( + ConfigurationKeys.CLIENT_TABLE_META_CHECKER_INTERVAL, DEFAULT_TABLE_META_CHECKER_INTERVAL); private final ScheduledExecutorService tableMetaExcutor = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("tableMetaChecker", 1, true)); diff --git a/script/client/conf/file.conf b/script/client/conf/file.conf index 7c58ec1ef0f..96883c6fdbe 100644 --- a/script/client/conf/file.conf +++ b/script/client/conf/file.conf @@ -49,6 +49,7 @@ client { } reportRetryCount = 5 tableMetaCheckEnable = false + tableMetaCheckerInterval = 60000 reportSuccessEnable = false sagaBranchRegisterEnable = false sagaJsonParser = jackson diff --git a/script/config-center/config.txt b/script/config-center/config.txt index d5b4b67afd4..7d59fcf4220 100644 --- a/script/config-center/config.txt +++ b/script/config-center/config.txt @@ -22,6 +22,7 @@ client.rm.lock.retryTimes=30 client.rm.lock.retryPolicyBranchRollbackOnConflict=true client.rm.reportRetryCount=5 client.rm.tableMetaCheckEnable=false +client.rm.tableMetaCheckerInterval=60000 client.rm.sqlParserType=druid client.rm.reportSuccessEnable=false client.rm.sagaBranchRegisterEnable=false diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/client/RmProperties.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/client/RmProperties.java index 2f5115ab52d..d5df7493de0 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/client/RmProperties.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/client/RmProperties.java @@ -26,6 +26,7 @@ import static io.seata.common.DefaultValues.DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE; import static io.seata.common.DefaultValues.DEFAULT_CLIENT_TABLE_META_CHECK_ENABLE; import static io.seata.common.DefaultValues.DEFAULT_SAGA_JSON_PARSER; +import static io.seata.common.DefaultValues.DEFAULT_TABLE_META_CHECKER_INTERVAL; import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_RM_PREFIX; /** @@ -37,6 +38,7 @@ public class RmProperties { private int asyncCommitBufferLimit = DEFAULT_CLIENT_ASYNC_COMMIT_BUFFER_LIMIT; private int reportRetryCount = DEFAULT_CLIENT_REPORT_RETRY_COUNT; private boolean tableMetaCheckEnable = DEFAULT_CLIENT_TABLE_META_CHECK_ENABLE; + private long tableMetaCheckerInterval = DEFAULT_TABLE_META_CHECKER_INTERVAL; private boolean reportSuccessEnable = DEFAULT_CLIENT_REPORT_SUCCESS_ENABLE; private boolean sagaBranchRegisterEnable = DEFAULT_CLIENT_SAGA_BRANCH_REGISTER_ENABLE; private String sagaJsonParser = DEFAULT_SAGA_JSON_PARSER; @@ -95,6 +97,15 @@ public void setSagaJsonParser(String sagaJsonParser) { this.sagaJsonParser = sagaJsonParser; } + + public long getTableMetaCheckerInterval() { + return tableMetaCheckerInterval; + } + + public void setTableMetaCheckerInterval(long tableMetaCheckerInterval) { + this.tableMetaCheckerInterval = tableMetaCheckerInterval; + } + public boolean isSagaRetryPersistModeUpdate() { return sagaRetryPersistModeUpdate; } diff --git a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertiesTest.java b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertiesTest.java index 104c43df73d..58476d5a22c 100644 --- a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertiesTest.java +++ b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertiesTest.java @@ -91,6 +91,7 @@ public void testRmProperties() { assertEquals(5, context.getBean(RmProperties.class).getReportRetryCount()); assertFalse(context.getBean(RmProperties.class).isTableMetaCheckEnable()); assertFalse(context.getBean(RmProperties.class).isReportSuccessEnable()); + assertEquals(60000L,context.getBean(RmProperties.class).getTableMetaCheckerInterval()); assertFalse(context.getBean(RmProperties.class).isSagaRetryPersistModeUpdate()); assertFalse(context.getBean(RmProperties.class).isSagaCompensatePersistModeUpdate()); } From d0e13754053898ca6d1b3b2c9de73bbabb27a5a5 Mon Sep 17 00:00:00 2001 From: "Tianyu.Li" <33249961+litianyu1992@users.noreply.github.com> Date: Thu, 14 Jan 2021 10:40:05 +0800 Subject: [PATCH 41/93] bugfix: failure to compete for a lock causes the global transaction to exit (#3451) --- changes/1.5.0.md | 3 ++- changes/en-us/1.5.0.md | 4 +++- .../rm/datasource/ConnectionContext.java | 20 +++++++++++++++++++ .../seata/rm/datasource/ConnectionProxy.java | 12 ++++++++++- .../exec/AbstractDMLBaseExecutor.java | 2 +- 5 files changed, 37 insertions(+), 4 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 657378801b2..2c26f97f473 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -36,7 +36,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3408](https://github.com/seata/seata/pull/3408)] 修复jar运行模式, 当第三方依赖分开打包时, this.getClass().getClassLoader()是null, 会报空指针异常 - [[#3431](https://github.com/seata/seata/pull/3431)] 修复在读取配置时Property Bean可能还未初始化 - [[#3413](https://github.com/seata/seata/pull/3413)] 修复回滚到savepoint以及releaseSavepoint的逻辑 - + - [[#3451](https://github.com/seata/seata/pull/3451)] 修复当不使用本地事务且设置自动提交为true时,全局锁竞争失败会使得rm退出全局事务,导致全局锁在rm重试时失效,数据被脏写 ### optimize: @@ -85,6 +85,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [xingfudeshi](https://github.com/xingfudeshi) - [MentosL](https://github.com/MentosL) - [lian88jian](https://github.com/lian88jian) + - [litianyu1992](https://github.com/litianyu1992) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 262735cd243..d6f4f6cf6e7 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -23,6 +23,7 @@ - [[#3348](https://github.com/seata/seata/pull/3348)] support redis sentinel mode - [[#2667](https://github.com/seata/seata/pull/2667)] support password decryption - [[#3427](https://github.com/seata/seata/pull/3427)] add distributed lock interface + - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` ### bugfix: @@ -35,7 +36,7 @@ - [[#3408](https://github.com/seata/seata/pull/3408)] run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null - [[#3431](https://github.com/seata/seata/pull/3431)] fix property bean may not be initialized when reading configuration - [[#3413](https://github.com/seata/seata/pull/3413)] fix the logic of rollback to savepoint and release to savepoint - - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` + - [[#3451](https://github.com/seata/seata/pull/3451)] fix set auto-commit to true when local transactions are not being used. Failure to compete for a lock causes the global transaction to exit, invaliding the global row lock and dirty writing of the data. ### optimize: @@ -82,6 +83,7 @@ - [xingfudeshi](https://github.com/xingfudeshi) - [MentosL](https://github.com/MentosL) - [lian88jian](https://github.com/lian88jian) + - [litianyu1992](https://github.com/litianyu1992) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionContext.java b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionContext.java index 4c6c222a0fc..a5fd74cbf9c 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionContext.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionContext.java @@ -52,6 +52,7 @@ public String getSavepointName() throws SQLException { private Long branchId; private boolean isGlobalLockRequire; private Savepoint currentSavepoint = DEFAULT_SAVEPOINT; + private boolean autoCommitChanged; /** * the lock keys buffer @@ -238,6 +239,24 @@ void setBranchId(Long branchId) { this.branchId = branchId; } + /** + * is seata change targetConnection autoCommit + * + * @return the boolean + */ + public boolean isAutoCommitChanged() { + return this.autoCommitChanged; + } + + /** + * set seata change targetConnection autoCommit record + * + * @param autoCommitChanged the boolean + */ + public void setAutoCommitChanged(boolean autoCommitChanged) { + this.autoCommitChanged = autoCommitChanged; + } + /** * Reset. @@ -258,6 +277,7 @@ void reset(String xid) { savepoints.clear(); lockKeysBuffer.clear(); sqlUndoItemsBuffer.clear(); + this.autoCommitChanged = false; } /** diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java index 6b34f2c6d72..5e5c362578c 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java @@ -186,7 +186,7 @@ public void commit() throws SQLException { return null; }); } catch (SQLException e) { - if (targetConnection != null && !getAutoCommit()) { + if (targetConnection != null && !getAutoCommit() && !getContext().isAutoCommitChanged()) { rollback(); } throw e; @@ -280,6 +280,16 @@ public void rollback() throws SQLException { context.reset(); } + /** + * change connection autoCommit to false by seata + * + * @throws SQLException + */ + public void changeAutoCommit() throws SQLException { + getContext().setAutoCommitChanged(true); + setAutoCommit(false); + } + @Override public void setAutoCommit(boolean autoCommit) throws SQLException { if ((context.inGlobalTransaction() || context.isGlobalLockRequire()) && autoCommit && !getAutoCommit()) { diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java index 04302c7d419..d42d365bc66 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java @@ -135,7 +135,7 @@ private static Predicate distinctByKey(Function keyExtracto protected T executeAutoCommitTrue(Object[] args) throws Throwable { ConnectionProxy connectionProxy = statementProxy.getConnectionProxy(); try { - connectionProxy.setAutoCommit(false); + connectionProxy.changeAutoCommit(); return new LockRetryPolicy(connectionProxy).execute(() -> { T result = executeAutoCommitFalse(args); connectionProxy.commit(); From ded2c838163b8b2c7182f8c6ee1ace3acdc61ace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?WangLiang/=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Thu, 14 Jan 2021 12:46:11 +0800 Subject: [PATCH 42/93] bugfix: fix the problem of the test case and StackTraceLogger's log (#3464) --- .../seata/core/logger/StackTraceLogger.java | 34 +++++++++++++------ .../struct/cache/AbstractTableMetaCache.java | 5 +-- .../server/coordinator/AbstractCore.java | 3 ++ .../coordinator/DefaultCoordinatorTest.java | 3 -- .../server/coordinator/DefaultCoreTest.java | 2 +- .../event/DefaultCoreForEventBusTest.java | 6 ++-- 6 files changed, 35 insertions(+), 18 deletions(-) diff --git a/core/src/main/java/io/seata/core/logger/StackTraceLogger.java b/core/src/main/java/io/seata/core/logger/StackTraceLogger.java index cadec581892..fe5eadcae00 100644 --- a/core/src/main/java/io/seata/core/logger/StackTraceLogger.java +++ b/core/src/main/java/io/seata/core/logger/StackTraceLogger.java @@ -15,11 +15,14 @@ */ package io.seata.core.logger; +import java.util.Arrays; +import java.util.concurrent.ThreadLocalRandom; + +import io.seata.common.util.CollectionUtils; import io.seata.config.Configuration; import io.seata.config.ConfigurationFactory; import io.seata.core.constants.ConfigurationKeys; import org.slf4j.Logger; -import java.util.concurrent.ThreadLocalRandom; import static io.seata.common.DefaultValues.DEFAULT_LOG_EXCEPTION_RATE; @@ -34,9 +37,8 @@ public final class StackTraceLogger { public static void info(Logger logger, Throwable cause, String format, Object[] args) { if (logger.isInfoEnabled()) { - int rate = getRate(); - if (ThreadLocalRandom.current().nextInt(rate) == 0) { - logger.info(STACK_TRACE_LOGGER_PREFIX + format, args, cause); + if (needToPrintStackTrace()) { + logger.info(STACK_TRACE_LOGGER_PREFIX + format, buildNewArgs(args, cause)); } else { logger.info(format, args); } @@ -45,9 +47,8 @@ public static void info(Logger logger, Throwable cause, String format, Object[] public static void warn(Logger logger, Throwable cause, String format, Object[] args) { if (logger.isWarnEnabled()) { - int rate = getRate(); - if (ThreadLocalRandom.current().nextInt(rate) == 0) { - logger.warn(STACK_TRACE_LOGGER_PREFIX + format, args, cause); + if (needToPrintStackTrace()) { + logger.warn(STACK_TRACE_LOGGER_PREFIX + format, buildNewArgs(args, cause)); } else { logger.warn(format, args); } @@ -56,9 +57,8 @@ public static void warn(Logger logger, Throwable cause, String format, Object[] public static void error(Logger logger, Throwable cause, String format, Object[] args) { if (logger.isErrorEnabled()) { - int rate = getRate(); - if (ThreadLocalRandom.current().nextInt(rate) == 0) { - logger.error(STACK_TRACE_LOGGER_PREFIX + format, args, cause); + if (needToPrintStackTrace()) { + logger.error(STACK_TRACE_LOGGER_PREFIX + format, buildNewArgs(args, cause)); } else { logger.error(format, args); } @@ -69,4 +69,18 @@ private static int getRate() { return CONFIG.getInt(ConfigurationKeys.TRANSACTION_LOG_EXCEPTION_RATE, DEFAULT_LOG_EXCEPTION_RATE); } + private static boolean needToPrintStackTrace() { + int rate = getRate(); + return ThreadLocalRandom.current().nextInt(rate) == 0; + } + + private static Object[] buildNewArgs(Object[] args, Throwable cause) { + if (CollectionUtils.isEmpty(args)) { + return new Object[]{cause}; + } else { + Object[] newArgs = Arrays.copyOf(args, args.length + 1); + newArgs[args.length] = cause; + return newArgs; + } + } } diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/cache/AbstractTableMetaCache.java b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/cache/AbstractTableMetaCache.java index 07654739f4f..c0aa01846de 100755 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/cache/AbstractTableMetaCache.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/cache/AbstractTableMetaCache.java @@ -60,13 +60,14 @@ public TableMeta getTableMeta(final Connection connection, final String tableNam try { return fetchSchema(connection, tableName); } catch (SQLException e) { - LOGGER.error("get table meta error:{}", e.getMessage(), e); + LOGGER.error("get table meta of the table `{}` error: {}", tableName, e.getMessage(), e); return null; } }); if (tmeta == null) { - throw new ShouldNeverHappenException(String.format("[xid:%s]get tablemeta failed", RootContext.getXID())); + throw new ShouldNeverHappenException(String.format("[xid:%s]get table meta failed," + + " please check whether the table `%s` exists.", RootContext.getXID(), tableName)); } return tmeta; } diff --git a/server/src/main/java/io/seata/server/coordinator/AbstractCore.java b/server/src/main/java/io/seata/server/coordinator/AbstractCore.java index 0e9de3c384a..0ffcdd9dd3e 100644 --- a/server/src/main/java/io/seata/server/coordinator/AbstractCore.java +++ b/server/src/main/java/io/seata/server/coordinator/AbstractCore.java @@ -60,6 +60,9 @@ public abstract class AbstractCore implements Core { protected RemotingServer remotingServer; public AbstractCore(RemotingServer remotingServer) { + if (remotingServer == null) { + throw new IllegalArgumentException("remotingServer must be not null"); + } this.remotingServer = remotingServer; } diff --git a/server/src/test/java/io/seata/server/coordinator/DefaultCoordinatorTest.java b/server/src/test/java/io/seata/server/coordinator/DefaultCoordinatorTest.java index 8b349a9f7fb..33344b01616 100644 --- a/server/src/test/java/io/seata/server/coordinator/DefaultCoordinatorTest.java +++ b/server/src/test/java/io/seata/server/coordinator/DefaultCoordinatorTest.java @@ -65,7 +65,6 @@ * @author leizhiyuan */ public class DefaultCoordinatorTest { - private static RemotingServer remotingServer; private static DefaultCoordinator defaultCoordinator; private static final String applicationId = "demo-child-app"; @@ -159,7 +158,6 @@ public void test_handleRetryRollbacking() throws TransactionException, Interrupt @Test public void test_handleRetryRollbackingTimeOut() throws TransactionException, InterruptedException, NoSuchFieldException, IllegalAccessException { - defaultCoordinator = new DefaultCoordinator(remotingServer); String xid = core.begin(applicationId, txServiceGroup, txName, 10); Long branchId = core.branchRegister(BranchType.AT, "abcd", clientId, xid, applicationData, lockKeys_2); @@ -186,7 +184,6 @@ public void test_handleRetryRollbackingTimeOut() throws TransactionException, In @Test public void test_handleRetryRollbackingTimeOut_unlock() throws TransactionException, InterruptedException, NoSuchFieldException, IllegalAccessException { - defaultCoordinator = new DefaultCoordinator(remotingServer); String xid = core.begin(applicationId, txServiceGroup, txName, 10); Long branchId = core.branchRegister(BranchType.AT, "abcd", clientId, xid, applicationData, lockKeys_2); diff --git a/server/src/test/java/io/seata/server/coordinator/DefaultCoreTest.java b/server/src/test/java/io/seata/server/coordinator/DefaultCoreTest.java index 53d238e9eea..d1ea697797f 100644 --- a/server/src/test/java/io/seata/server/coordinator/DefaultCoreTest.java +++ b/server/src/test/java/io/seata/server/coordinator/DefaultCoreTest.java @@ -348,7 +348,7 @@ private static class MockCore extends AbstractCore { * @param rollbackStatus the rollback status */ public MockCore(BranchStatus commitStatus, BranchStatus rollbackStatus) { - super(null); + super(new DefaultCoordinatorTest.MockServerMessageSender()); this.commitStatus = commitStatus; this.rollbackStatus = rollbackStatus; } diff --git a/server/src/test/java/io/seata/server/event/DefaultCoreForEventBusTest.java b/server/src/test/java/io/seata/server/event/DefaultCoreForEventBusTest.java index 45a5bff780b..5dab4278781 100644 --- a/server/src/test/java/io/seata/server/event/DefaultCoreForEventBusTest.java +++ b/server/src/test/java/io/seata/server/event/DefaultCoreForEventBusTest.java @@ -24,6 +24,7 @@ import io.seata.core.event.GlobalTransactionEvent; import io.seata.core.exception.TransactionException; import io.seata.core.model.GlobalStatus; +import io.seata.core.rpc.RemotingServer; import io.seata.server.coordinator.DefaultCoordinator; import io.seata.server.coordinator.DefaultCoordinatorTest; import io.seata.server.coordinator.DefaultCore; @@ -58,10 +59,11 @@ public void processGlobalTransactionEvent(GlobalTransactionEvent event) { } } SessionHolder.init(null); - DefaultCoordinator coordinator = new DefaultCoordinator(null); + RemotingServer remotingServer = new DefaultCoordinatorTest.MockServerMessageSender(); + DefaultCoordinator coordinator = new DefaultCoordinator(remotingServer); coordinator.init(); try { - DefaultCore core = new DefaultCore(new DefaultCoordinatorTest.MockServerMessageSender()); + DefaultCore core = new DefaultCore(remotingServer); GlobalTransactionEventSubscriber subscriber = new GlobalTransactionEventSubscriber(); EventBusManager.get().register(subscriber); From eee0c7410d06928ea1b354507bb4c82f9781cb4f Mon Sep 17 00:00:00 2001 From: RainGan <244001868@qq.com> Date: Sun, 17 Jan 2021 14:36:00 +0800 Subject: [PATCH 43/93] optimize: String comparison uses equalsIgnoreCase() (#3466) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + .../main/java/io/seata/rm/datasource/exec/MultiExecutor.java | 2 +- .../main/java/io/seata/rm/datasource/xa/ExecuteTemplateXA.java | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 2c26f97f473..978f1b5e966 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -60,6 +60,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3420](https://github.com/seata/seata/pull/3420)] 优化枚举类并添加单元测试 - [[#3436](https://github.com/seata/seata/pull/3436)] 优化SQLType类中的错别字 - [[#3439](https://github.com/seata/seata/pull/3439)] 调整springApplicationContextProvider的顺序以使得他可以在xml的bean之前被调用 + - [[#3466](https://github.com/seata/seata/pull/3466)] 优化ExecuteTemplateXA类中判断XA不是最终状态的比较方式 ### test diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index d6f4f6cf6e7..0e599d001c7 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -59,6 +59,7 @@ - [[#3420](https://github.com/seata/seata/pull/3420)] optimize enumerated classes and add unit tests - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class - [[#3439](https://github.com/seata/seata/pull/3439)] adjust the order of springApplicationContextProvider + - [[#3466](https://github.com/seata/seata/pull/3466)] optimize the comparison in the ExecuteTemplateXa class to determine that XA is not the final state ### test diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiExecutor.java index 228c4dc1f2f..52c0290ab2a 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiExecutor.java @@ -51,7 +51,7 @@ public class MultiExecutor extends AbstractDMLBaseExecut * * @param statementProxy the statement proxy * @param statementCallback the statement callback - * @param sqlRecognizer the sql recognizer + * @param sqlRecognizers the sql recognizers */ public MultiExecutor(StatementProxy statementProxy, StatementCallback statementCallback, List sqlRecognizers) { super(statementProxy, statementCallback, sqlRecognizers); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ExecuteTemplateXA.java b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ExecuteTemplateXA.java index c54f391bd0b..8936347d626 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ExecuteTemplateXA.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ExecuteTemplateXA.java @@ -76,7 +76,7 @@ public static T execute(AbstractConnectionProxyXA conne "Failed to commit xa branch of " + connectionProxyXA.xid + ") since " + ex.getMessage(), ex); // XA End & Rollback - if (!(ex instanceof SQLException) || AbstractConnectionProxyXA.SQLSTATE_XA_NOT_END != ((SQLException) ex).getSQLState()) { + if (!(ex instanceof SQLException) || !AbstractConnectionProxyXA.SQLSTATE_XA_NOT_END.equalsIgnoreCase(((SQLException) ex).getSQLState())) { try { connectionProxyXA.rollback(); } catch (SQLException sqle) { From e9ff5f99ffecfc28f6b44abc24f3e6055b834c9f Mon Sep 17 00:00:00 2001 From: squall Date: Sun, 17 Jan 2021 03:34:46 -0600 Subject: [PATCH 44/93] optimize: opt the logic of SpringProxyUtils.findTargetClass(#3155) (#3156) --- .../seata/spring/util/SpringProxyUtils.java | 32 +++++-------------- 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/spring/src/main/java/io/seata/spring/util/SpringProxyUtils.java b/spring/src/main/java/io/seata/spring/util/SpringProxyUtils.java index fcb815bfcd0..e57cf8ca571 100644 --- a/spring/src/main/java/io/seata/spring/util/SpringProxyUtils.java +++ b/spring/src/main/java/io/seata/spring/util/SpringProxyUtils.java @@ -23,10 +23,9 @@ import io.seata.common.util.CollectionUtils; import io.seata.rm.tcc.remoting.parser.DubboUtil; -import org.springframework.aop.TargetSource; +import org.springframework.aop.framework.Advised; import org.springframework.aop.framework.AdvisedSupport; import org.springframework.aop.support.AopUtils; -import org.springframework.aop.target.EmptyTargetSource; /** * Proxy tools base on spring @@ -34,9 +33,7 @@ * @author zhangsen */ public class SpringProxyUtils { - private SpringProxyUtils() { - } /** @@ -47,18 +44,14 @@ private SpringProxyUtils() { * @throws Exception the exception */ public static Class findTargetClass(Object proxy) throws Exception { - if (AopUtils.isAopProxy(proxy)) { - AdvisedSupport advised = getAdvisedSupport(proxy); - if (AopUtils.isJdkDynamicProxy(proxy)) { - TargetSource targetSource = advised.getTargetSource(); - return targetSource instanceof EmptyTargetSource ? getFirstInterfaceByAdvised(advised) - : targetSource.getTargetClass(); - } - Object target = advised.getTargetSource().getTarget(); - return findTargetClass(target); - } else { - return proxy == null ? null : proxy.getClass(); + if (proxy == null) { + return null; + } + if (AopUtils.isAopProxy(proxy) && proxy instanceof Advised) { + Object targetObject = ((Advised) proxy).getTargetSource().getTarget(); + return findTargetClass(targetObject); } + return proxy.getClass(); } public static Class[] findInterfaces(Object proxy) throws Exception { @@ -79,15 +72,6 @@ private static Class[] getInterfacesByAdvised(AdvisedSupport advised) { } } - private static Class getFirstInterfaceByAdvised(AdvisedSupport advised) { - Class[] interfaces = advised.getProxiedInterfaces(); - if (interfaces.length > 0) { - return interfaces[0]; - } else { - throw new IllegalStateException("Find the jdk dynamic proxy class that does not implement the interface"); - } - } - /** * Gets advised support. * From 23751d67f1109221b81be27dabcf385376c8c0ea Mon Sep 17 00:00:00 2001 From: xingfudeshi Date: Tue, 19 Jan 2021 14:39:06 +0800 Subject: [PATCH 45/93] optimize:optimize the auto-configuration processing of starter (#3441) --- changes/1.5.0.md | 4 +- changes/en-us/1.5.0.md | 7 +- .../autoconfigure/SeataAutoConfiguration.java | 164 +----------------- .../SeataDataSourceAutoConfiguration.java | 58 +++++++ .../SeataPropertiesAutoConfiguration.java | 134 ++++++++++++++ .../main/resources/META-INF/spring.factories | 2 + 6 files changed, 203 insertions(+), 166 deletions(-) create mode 100644 seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java create mode 100644 seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataPropertiesAutoConfiguration.java diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 978f1b5e966..1d6efa22e7a 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -60,9 +60,9 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3420](https://github.com/seata/seata/pull/3420)] 优化枚举类并添加单元测试 - [[#3436](https://github.com/seata/seata/pull/3436)] 优化SQLType类中的错别字 - [[#3439](https://github.com/seata/seata/pull/3439)] 调整springApplicationContextProvider的顺序以使得他可以在xml的bean之前被调用 + - [[#3156](https://github.com/seata/seata/pull/3156)] 优化SpringProxyUtils.findTargetClass的逻辑 + - [[#3441](https://github.com/seata/seata/pull/3441)] 优化starter的自动配置处理 - [[#3466](https://github.com/seata/seata/pull/3466)] 优化ExecuteTemplateXA类中判断XA不是最终状态的比较方式 - - ### test - [[#3381](https://github.com/seata/seata/pull/3381)] 添加 TmClient 的测试用例 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 0e599d001c7..c63b20dd595 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -36,8 +36,8 @@ - [[#3408](https://github.com/seata/seata/pull/3408)] run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null - [[#3431](https://github.com/seata/seata/pull/3431)] fix property bean may not be initialized when reading configuration - [[#3413](https://github.com/seata/seata/pull/3413)] fix the logic of rollback to savepoint and release to savepoint + - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` - [[#3451](https://github.com/seata/seata/pull/3451)] fix set auto-commit to true when local transactions are not being used. Failure to compete for a lock causes the global transaction to exit, invaliding the global row lock and dirty writing of the data. - ### optimize: - [[#3383](https://github.com/seata/seata/pull/3383)] optimize StatementProxyTest unit test @@ -59,9 +59,10 @@ - [[#3420](https://github.com/seata/seata/pull/3420)] optimize enumerated classes and add unit tests - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class - [[#3439](https://github.com/seata/seata/pull/3439)] adjust the order of springApplicationContextProvider + - [[#3156](https://github.com/seata/seata/pull/3156)] optimize the logic of SpringProxyUtils.findTargetClass + - [[#3441](https://github.com/seata/seata/pull/3441)] optimize the auto-configuration processing of starter - [[#3466](https://github.com/seata/seata/pull/3466)] optimize the comparison in the ExecuteTemplateXa class to determine that XA is not the final state - ### test - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient @@ -95,4 +96,4 @@ - **Release:** https://github.com/seata/seata/releases - **WebSite:** https://seata.io - \ No newline at end of file + diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java index 06bbc87b07c..8d1f980f231 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java @@ -15,38 +15,8 @@ */ package io.seata.spring.boot.autoconfigure; -import io.seata.config.springcloud.SpringApplicationContextProvider; import io.seata.spring.annotation.GlobalTransactionScanner; -import io.seata.spring.annotation.datasource.SeataAutoDataSourceProxyCreator; -import io.seata.spring.annotation.datasource.SeataDataSourceBeanPostProcessor; import io.seata.spring.boot.autoconfigure.properties.SeataProperties; -import io.seata.spring.boot.autoconfigure.properties.client.LockProperties; -import io.seata.spring.boot.autoconfigure.properties.client.LogProperties; -import io.seata.spring.boot.autoconfigure.properties.client.RmProperties; -import io.seata.spring.boot.autoconfigure.properties.client.ServiceProperties; -import io.seata.spring.boot.autoconfigure.properties.client.ShutdownProperties; -import io.seata.spring.boot.autoconfigure.properties.client.ThreadFactoryProperties; -import io.seata.spring.boot.autoconfigure.properties.client.TmProperties; -import io.seata.spring.boot.autoconfigure.properties.client.TransportProperties; -import io.seata.spring.boot.autoconfigure.properties.client.UndoCompressProperties; -import io.seata.spring.boot.autoconfigure.properties.client.UndoProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigApolloProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigConsulProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigCustomProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigEtcd3Properties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigFileProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigNacosProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigProperties; -import io.seata.spring.boot.autoconfigure.properties.config.ConfigZooKeeperProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryConsulProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryCustomProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryEtcd3Properties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryEurekaProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryNacosProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryRedisProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistrySofaProperties; -import io.seata.spring.boot.autoconfigure.properties.registry.RegistryZooKeeperProperties; import io.seata.tm.api.DefaultFailureHandlerImpl; import io.seata.tm.api.FailureHandler; import org.slf4j.Logger; @@ -54,96 +24,21 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import static io.seata.common.Constants.BEAN_NAME_FAILURE_HANDLER; import static io.seata.common.Constants.BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER; -import static io.seata.spring.annotation.datasource.AutoDataSourceProxyRegistrar.BEAN_NAME_SEATA_AUTO_DATA_SOURCE_PROXY_CREATOR; -import static io.seata.spring.annotation.datasource.AutoDataSourceProxyRegistrar.BEAN_NAME_SEATA_DATA_SOURCE_BEAN_POST_PROCESSOR; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_RM_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_TM_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.COMPRESS_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_APOLLO_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_CONSUL_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_CUSTOM_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_ETCD3_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_FILE_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_NACOS_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_ZK_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.LOCK_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.LOG_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.PROPERTY_BEAN_MAP; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_CONSUL_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_CUSTOM_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_ETCD3_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_EUREKA_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_NACOS_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_REDIS_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_SOFA_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_ZK_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.SEATA_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.SERVICE_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.SHUTDOWN_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.THREAD_FACTORY_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.TRANSPORT_PREFIX; -import static io.seata.spring.boot.autoconfigure.StarterConstants.UNDO_PREFIX; /** + * The type Seata auto configuration + * * @author xingfudeshi@gmail.com */ -@ComponentScan(basePackages = "io.seata.spring.boot.autoconfigure.properties") @ConditionalOnProperty(prefix = SEATA_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) -@Configuration public class SeataAutoConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(SeataAutoConfiguration.class); - static { - - PROPERTY_BEAN_MAP.put(SEATA_PREFIX, SeataProperties.class); - - PROPERTY_BEAN_MAP.put(CLIENT_RM_PREFIX, RmProperties.class); - PROPERTY_BEAN_MAP.put(CLIENT_TM_PREFIX, TmProperties.class); - PROPERTY_BEAN_MAP.put(LOCK_PREFIX, LockProperties.class); - PROPERTY_BEAN_MAP.put(SERVICE_PREFIX, ServiceProperties.class); - PROPERTY_BEAN_MAP.put(SHUTDOWN_PREFIX, ShutdownProperties.class); - PROPERTY_BEAN_MAP.put(THREAD_FACTORY_PREFIX, ThreadFactoryProperties.class); - PROPERTY_BEAN_MAP.put(UNDO_PREFIX, UndoProperties.class); - PROPERTY_BEAN_MAP.put(COMPRESS_PREFIX, UndoCompressProperties.class); - PROPERTY_BEAN_MAP.put(LOG_PREFIX, LogProperties.class); - PROPERTY_BEAN_MAP.put(TRANSPORT_PREFIX, TransportProperties.class); - PROPERTY_BEAN_MAP.put(CONFIG_PREFIX, ConfigProperties.class); - PROPERTY_BEAN_MAP.put(CONFIG_FILE_PREFIX, ConfigFileProperties.class); - PROPERTY_BEAN_MAP.put(REGISTRY_PREFIX, RegistryProperties.class); - - PROPERTY_BEAN_MAP.put(CONFIG_NACOS_PREFIX, ConfigNacosProperties.class); - PROPERTY_BEAN_MAP.put(CONFIG_CONSUL_PREFIX, ConfigConsulProperties.class); - PROPERTY_BEAN_MAP.put(CONFIG_ZK_PREFIX, ConfigZooKeeperProperties.class); - PROPERTY_BEAN_MAP.put(CONFIG_APOLLO_PREFIX, ConfigApolloProperties.class); - PROPERTY_BEAN_MAP.put(CONFIG_ETCD3_PREFIX, ConfigEtcd3Properties.class); - PROPERTY_BEAN_MAP.put(CONFIG_CUSTOM_PREFIX, ConfigCustomProperties.class); - - PROPERTY_BEAN_MAP.put(REGISTRY_CONSUL_PREFIX, RegistryConsulProperties.class); - PROPERTY_BEAN_MAP.put(REGISTRY_ETCD3_PREFIX, RegistryEtcd3Properties.class); - PROPERTY_BEAN_MAP.put(REGISTRY_EUREKA_PREFIX, RegistryEurekaProperties.class); - PROPERTY_BEAN_MAP.put(REGISTRY_NACOS_PREFIX, RegistryNacosProperties.class); - PROPERTY_BEAN_MAP.put(REGISTRY_REDIS_PREFIX, RegistryRedisProperties.class); - PROPERTY_BEAN_MAP.put(REGISTRY_SOFA_PREFIX, RegistrySofaProperties.class); - PROPERTY_BEAN_MAP.put(REGISTRY_ZK_PREFIX, RegistryZooKeeperProperties.class); - PROPERTY_BEAN_MAP.put(REGISTRY_CUSTOM_PREFIX, RegistryCustomProperties.class); - - } - - - @Bean(BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER) - @ConditionalOnMissingBean(name = {BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER}) - public SpringApplicationContextProvider springApplicationContextProvider() { - return new SpringApplicationContextProvider(); - } - @Bean(BEAN_NAME_FAILURE_HANDLER) @ConditionalOnMissingBean(FailureHandler.class) public FailureHandler failureHandler() { @@ -151,34 +46,7 @@ public FailureHandler failureHandler() { } @Bean - @DependsOn({"seataProperties", - "rmProperties", - "tmProperties", - "lockProperties", - "serviceProperties", - "shutdownProperties", - "threadFactoryProperties", - "undoProperties", - "undoCompressProperties", - "logProperties", - "transportProperties", - "configProperties", - "configFileProperties", - "registryProperties", - "configNacosProperties", - "configConsulProperties", - "configZooKeeperProperties", - "configApolloProperties", - "configEtcd3Properties", - "configCustomProperties", - "registryConsulProperties", - "registryEtcd3Properties", - "registryEurekaProperties", - "registryNacosProperties", - "registryRedisProperties", - "registrySofaProperties", - "registryZooKeeperProperties", - "registryCustomProperties", BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER, BEAN_NAME_FAILURE_HANDLER}) + @DependsOn({BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER, BEAN_NAME_FAILURE_HANDLER}) @ConditionalOnMissingBean(GlobalTransactionScanner.class) public GlobalTransactionScanner globalTransactionScanner(SeataProperties seataProperties, FailureHandler failureHandler) { if (LOGGER.isInfoEnabled()) { @@ -188,30 +56,4 @@ public GlobalTransactionScanner globalTransactionScanner(SeataProperties seataPr } - /** - * The data source configuration. - */ - @Configuration - @ConditionalOnProperty(prefix = SEATA_PREFIX, name = {"enableAutoDataSourceProxy", "enable-auto-data-source-proxy"}, havingValue = "true", matchIfMissing = true) - static class SeataDataSourceConfiguration { - - /** - * The bean seataDataSourceBeanPostProcessor. - */ - @Bean(BEAN_NAME_SEATA_DATA_SOURCE_BEAN_POST_PROCESSOR) - @ConditionalOnMissingBean(SeataDataSourceBeanPostProcessor.class) - public SeataDataSourceBeanPostProcessor seataDataSourceBeanPostProcessor(SeataProperties seataProperties) { - return new SeataDataSourceBeanPostProcessor(seataProperties.getExcludesForAutoProxying(), seataProperties.getDataSourceProxyMode()); - } - - /** - * The bean seataAutoDataSourceProxyCreator. - */ - @Bean(BEAN_NAME_SEATA_AUTO_DATA_SOURCE_PROXY_CREATOR) - @ConditionalOnMissingBean(SeataAutoDataSourceProxyCreator.class) - public SeataAutoDataSourceProxyCreator seataAutoDataSourceProxyCreator(SeataProperties seataProperties) { - return new SeataAutoDataSourceProxyCreator(seataProperties.isUseJdkProxy(), - seataProperties.getExcludesForAutoProxying(), seataProperties.getDataSourceProxyMode()); - } - } } diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java new file mode 100644 index 00000000000..4180018bc6c --- /dev/null +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java @@ -0,0 +1,58 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.spring.boot.autoconfigure; + +import javax.sql.DataSource; + +import io.seata.spring.annotation.datasource.SeataAutoDataSourceProxyCreator; +import io.seata.spring.annotation.datasource.SeataDataSourceBeanPostProcessor; +import io.seata.spring.boot.autoconfigure.properties.SeataProperties; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; + +import static io.seata.spring.annotation.datasource.AutoDataSourceProxyRegistrar.BEAN_NAME_SEATA_AUTO_DATA_SOURCE_PROXY_CREATOR; +import static io.seata.spring.annotation.datasource.AutoDataSourceProxyRegistrar.BEAN_NAME_SEATA_DATA_SOURCE_BEAN_POST_PROCESSOR; + +/** + * The type Seata data source auto configuration. + * + * @author xingfudeshi@gmail.com + */ +@ConditionalOnBean(DataSource.class) +@ConditionalOnExpression("${seata.enable:true} && ${seata.enableAutoDataSourceProxy:true} && ${seata.enable-auto-data-source-proxy:true}") +public class SeataDataSourceAutoConfiguration { + + /** + * The bean seataDataSourceBeanPostProcessor. + */ + @Bean(BEAN_NAME_SEATA_DATA_SOURCE_BEAN_POST_PROCESSOR) + @ConditionalOnMissingBean(SeataDataSourceBeanPostProcessor.class) + public SeataDataSourceBeanPostProcessor seataDataSourceBeanPostProcessor(SeataProperties seataProperties) { + return new SeataDataSourceBeanPostProcessor(seataProperties.getExcludesForAutoProxying(), seataProperties.getDataSourceProxyMode()); + } + + /** + * The bean seataAutoDataSourceProxyCreator. + */ + @Bean(BEAN_NAME_SEATA_AUTO_DATA_SOURCE_PROXY_CREATOR) + @ConditionalOnMissingBean(SeataAutoDataSourceProxyCreator.class) + public SeataAutoDataSourceProxyCreator seataAutoDataSourceProxyCreator(SeataProperties seataProperties) { + return new SeataAutoDataSourceProxyCreator(seataProperties.isUseJdkProxy(), + seataProperties.getExcludesForAutoProxying(), seataProperties.getDataSourceProxyMode()); + } +} diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataPropertiesAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataPropertiesAutoConfiguration.java new file mode 100644 index 00000000000..d830543503a --- /dev/null +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataPropertiesAutoConfiguration.java @@ -0,0 +1,134 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.spring.boot.autoconfigure; + +import io.seata.config.springcloud.SpringApplicationContextProvider; +import io.seata.spring.boot.autoconfigure.properties.SeataProperties; +import io.seata.spring.boot.autoconfigure.properties.client.LockProperties; +import io.seata.spring.boot.autoconfigure.properties.client.LogProperties; +import io.seata.spring.boot.autoconfigure.properties.client.RmProperties; +import io.seata.spring.boot.autoconfigure.properties.client.ServiceProperties; +import io.seata.spring.boot.autoconfigure.properties.client.ShutdownProperties; +import io.seata.spring.boot.autoconfigure.properties.client.ThreadFactoryProperties; +import io.seata.spring.boot.autoconfigure.properties.client.TmProperties; +import io.seata.spring.boot.autoconfigure.properties.client.TransportProperties; +import io.seata.spring.boot.autoconfigure.properties.client.UndoCompressProperties; +import io.seata.spring.boot.autoconfigure.properties.client.UndoProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigApolloProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigConsulProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigCustomProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigEtcd3Properties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigFileProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigNacosProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigProperties; +import io.seata.spring.boot.autoconfigure.properties.config.ConfigZooKeeperProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryConsulProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryCustomProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryEtcd3Properties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryEurekaProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryNacosProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryRedisProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistrySofaProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.RegistryZooKeeperProperties; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; + +import static io.seata.common.Constants.BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_RM_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CLIENT_TM_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.COMPRESS_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_APOLLO_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_CONSUL_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_CUSTOM_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_ETCD3_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_FILE_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_NACOS_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.CONFIG_ZK_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.LOCK_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.LOG_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.PROPERTY_BEAN_MAP; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_CONSUL_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_CUSTOM_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_ETCD3_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_EUREKA_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_NACOS_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_REDIS_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_SOFA_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_ZK_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.SEATA_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.SERVICE_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.SHUTDOWN_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.THREAD_FACTORY_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.TRANSPORT_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.UNDO_PREFIX; + +/** + * The type Seata properties auto configuration + * + * @author xingfudeshi@gmail.com + */ +@ConditionalOnProperty(prefix = SEATA_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) +@ComponentScan(basePackages = "io.seata.spring.boot.autoconfigure.properties") +@AutoConfigureBefore({SeataAutoConfiguration.class, SeataDataSourceAutoConfiguration.class}) +public class SeataPropertiesAutoConfiguration { + static { + + PROPERTY_BEAN_MAP.put(SEATA_PREFIX, SeataProperties.class); + + PROPERTY_BEAN_MAP.put(CLIENT_RM_PREFIX, RmProperties.class); + PROPERTY_BEAN_MAP.put(CLIENT_TM_PREFIX, TmProperties.class); + PROPERTY_BEAN_MAP.put(LOCK_PREFIX, LockProperties.class); + PROPERTY_BEAN_MAP.put(SERVICE_PREFIX, ServiceProperties.class); + PROPERTY_BEAN_MAP.put(SHUTDOWN_PREFIX, ShutdownProperties.class); + PROPERTY_BEAN_MAP.put(THREAD_FACTORY_PREFIX, ThreadFactoryProperties.class); + PROPERTY_BEAN_MAP.put(UNDO_PREFIX, UndoProperties.class); + PROPERTY_BEAN_MAP.put(COMPRESS_PREFIX, UndoCompressProperties.class); + PROPERTY_BEAN_MAP.put(LOG_PREFIX, LogProperties.class); + PROPERTY_BEAN_MAP.put(TRANSPORT_PREFIX, TransportProperties.class); + PROPERTY_BEAN_MAP.put(CONFIG_PREFIX, ConfigProperties.class); + PROPERTY_BEAN_MAP.put(CONFIG_FILE_PREFIX, ConfigFileProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_PREFIX, RegistryProperties.class); + + PROPERTY_BEAN_MAP.put(CONFIG_NACOS_PREFIX, ConfigNacosProperties.class); + PROPERTY_BEAN_MAP.put(CONFIG_CONSUL_PREFIX, ConfigConsulProperties.class); + PROPERTY_BEAN_MAP.put(CONFIG_ZK_PREFIX, ConfigZooKeeperProperties.class); + PROPERTY_BEAN_MAP.put(CONFIG_APOLLO_PREFIX, ConfigApolloProperties.class); + PROPERTY_BEAN_MAP.put(CONFIG_ETCD3_PREFIX, ConfigEtcd3Properties.class); + PROPERTY_BEAN_MAP.put(CONFIG_CUSTOM_PREFIX, ConfigCustomProperties.class); + + PROPERTY_BEAN_MAP.put(REGISTRY_CONSUL_PREFIX, RegistryConsulProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_ETCD3_PREFIX, RegistryEtcd3Properties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_EUREKA_PREFIX, RegistryEurekaProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_NACOS_PREFIX, RegistryNacosProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_REDIS_PREFIX, RegistryRedisProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_SOFA_PREFIX, RegistrySofaProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_ZK_PREFIX, RegistryZooKeeperProperties.class); + PROPERTY_BEAN_MAP.put(REGISTRY_CUSTOM_PREFIX, RegistryCustomProperties.class); + + } + + @Bean(BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER) + @ConditionalOnMissingBean(name = {BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER}) + public SpringApplicationContextProvider springApplicationContextProvider() { + return new SpringApplicationContextProvider(); + } +} diff --git a/seata-spring-boot-starter/src/main/resources/META-INF/spring.factories b/seata-spring-boot-starter/src/main/resources/META-INF/spring.factories index e7764528d0e..142d7735d3d 100644 --- a/seata-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ b/seata-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -1,4 +1,6 @@ # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +io.seata.spring.boot.autoconfigure.SeataPropertiesAutoConfiguration,\ +io.seata.spring.boot.autoconfigure.SeataDataSourceAutoConfiguration,\ io.seata.spring.boot.autoconfigure.SeataAutoConfiguration,\ io.seata.spring.boot.autoconfigure.HttpAutoConfiguration From 381d60ba28b7891af3465aed76c6cbc91a6b878d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?WangLiang/=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Fri, 22 Jan 2021 13:13:28 +0800 Subject: [PATCH 46/93] optimize: put the xid and branchId into the MDC (#3447) --- .../io/seata/core/context/RootContext.java | 35 ++++++++++--- .../core/rpc/netty/AbstractNettyRemoting.java | 3 ++ .../java/io/seata/rm/DefaultRMHandler.java | 6 +++ script/logstash/config/logstash-kafka.conf | 4 +- script/logstash/config/logstash-logback.conf | 2 +- .../server/coordinator/AbstractCore.java | 3 ++ .../coordinator/DefaultCoordinator.java | 43 +++++++++++----- .../seata/server/coordinator/DefaultCore.java | 37 +++++++++----- .../appender/EnhancedLogstashEncoder.java | 45 ++++++++++++++++ .../server/session/BranchSessionHandler.java | 39 ++++++++++++++ .../server/session/GlobalSessionHandler.java | 36 +++++++++++++ .../seata/server/session/SessionHelper.java | 51 +++++++++++++++++++ .../storage/file/lock/FileLockManager.java | 12 ++++- .../store/FileTransactionStoreManager.java | 18 +++++-- server/src/main/resources/logback.xml | 4 ++ .../main/resources/logback/file-appender.xml | 12 ++--- .../main/resources/logback/kafka-appender.xml | 27 +++++----- .../resources/logback/logstash-appender.xml | 16 +++++- .../spring/tcc/TccActionInterceptor.java | 3 ++ .../interceptor/ActionInterceptorHandler.java | 4 ++ .../tm/api/DefaultGlobalTransaction.java | 8 +-- 21 files changed, 341 insertions(+), 67 deletions(-) create mode 100644 server/src/main/java/io/seata/server/logging/logback/appender/EnhancedLogstashEncoder.java create mode 100644 server/src/main/java/io/seata/server/session/BranchSessionHandler.java create mode 100644 server/src/main/java/io/seata/server/session/GlobalSessionHandler.java diff --git a/core/src/main/java/io/seata/core/context/RootContext.java b/core/src/main/java/io/seata/core/context/RootContext.java index c8e78047177..1344fb64848 100644 --- a/core/src/main/java/io/seata/core/context/RootContext.java +++ b/core/src/main/java/io/seata/core/context/RootContext.java @@ -24,6 +24,7 @@ import io.seata.core.model.BranchType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; import static io.seata.core.model.BranchType.AT; import static io.seata.core.model.BranchType.XA; @@ -45,6 +46,18 @@ private RootContext() { */ public static final String KEY_XID = "TX_XID"; + /** + * The constant MDC_KEY_XID for logback + * @since 1.5.0 + */ + public static final String MDC_KEY_XID = "X-TX-XID"; + + /** + * The constant MDC_KEY_BRANCH_ID for logback + * @since 1.5.0 + */ + public static final String MDC_KEY_BRANCH_ID = "X-TX-BRANCH-ID"; + /** * The constant KEY_BRANCH_TYPE */ @@ -89,12 +102,17 @@ public static String getXID() { */ public static void bind(@Nonnull String xid) { if (StringUtils.isBlank(xid)) { - xid = null; - } - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("bind {}", xid); + if (LOGGER.isInfoEnabled()) { + LOGGER.info("xid is blank, switch to unbind operation!"); + } + unbind(); + } else { + MDC.put(MDC_KEY_XID, xid); + if (LOGGER.isInfoEnabled()) { + LOGGER.info("bind {}", xid); + } + CONTEXT_HOLDER.put(KEY_XID, xid); } - CONTEXT_HOLDER.put(KEY_XID, xid); } /** @@ -117,8 +135,11 @@ public static void bindGlobalLockFlag() { @Nullable public static String unbind() { String xid = (String) CONTEXT_HOLDER.remove(KEY_XID); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("unbind {} ", xid); + if (xid != null) { + if (LOGGER.isInfoEnabled()) { + LOGGER.info("unbind {} ", xid); + } + MDC.remove(MDC_KEY_XID); } return xid; } diff --git a/core/src/main/java/io/seata/core/rpc/netty/AbstractNettyRemoting.java b/core/src/main/java/io/seata/core/rpc/netty/AbstractNettyRemoting.java index 913ab1abf62..f70f9534e6b 100644 --- a/core/src/main/java/io/seata/core/rpc/netty/AbstractNettyRemoting.java +++ b/core/src/main/java/io/seata/core/rpc/netty/AbstractNettyRemoting.java @@ -34,6 +34,7 @@ import io.seata.core.rpc.processor.RemotingProcessor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; import java.io.IOException; import java.lang.management.ManagementFactory; @@ -278,6 +279,8 @@ protected void processMessage(ChannelHandlerContext ctx, RpcMessage rpcMessage) pair.getFirst().process(ctx, rpcMessage); } catch (Throwable th) { LOGGER.error(FrameworkErrorCode.NetDispatch.getErrCode(), th.getMessage(), th); + } finally { + MDC.clear(); } }); } catch (RejectedExecutionException e) { diff --git a/rm/src/main/java/io/seata/rm/DefaultRMHandler.java b/rm/src/main/java/io/seata/rm/DefaultRMHandler.java index 318fe7de2a2..6888847141b 100644 --- a/rm/src/main/java/io/seata/rm/DefaultRMHandler.java +++ b/rm/src/main/java/io/seata/rm/DefaultRMHandler.java @@ -18,6 +18,7 @@ import io.seata.common.exception.FrameworkException; import io.seata.common.loader.EnhancedServiceLoader; import io.seata.common.util.CollectionUtils; +import io.seata.core.context.RootContext; import io.seata.core.model.BranchType; import io.seata.core.model.ResourceManager; import io.seata.core.protocol.transaction.BranchCommitRequest; @@ -25,6 +26,7 @@ import io.seata.core.protocol.transaction.BranchRollbackRequest; import io.seata.core.protocol.transaction.BranchRollbackResponse; import io.seata.core.protocol.transaction.UndoLogDeleteRequest; +import org.slf4j.MDC; import java.util.List; import java.util.Map; @@ -54,11 +56,15 @@ protected void initRMHandlers() { @Override public BranchCommitResponse handle(BranchCommitRequest request) { + MDC.put(RootContext.MDC_KEY_XID, request.getXid()); + MDC.put(RootContext.MDC_KEY_BRANCH_ID, String.valueOf(request.getBranchId())); return getRMHandler(request.getBranchType()).handle(request); } @Override public BranchRollbackResponse handle(BranchRollbackRequest request) { + MDC.put(RootContext.MDC_KEY_XID, request.getXid()); + MDC.put(RootContext.MDC_KEY_BRANCH_ID, String.valueOf(request.getBranchId())); return getRMHandler(request.getBranchType()).handle(request); } diff --git a/script/logstash/config/logstash-kafka.conf b/script/logstash/config/logstash-kafka.conf index 57176cf7b3a..4bb5bd1ada7 100644 --- a/script/logstash/config/logstash-kafka.conf +++ b/script/logstash/config/logstash-kafka.conf @@ -1,9 +1,9 @@ -# App -> Kafka -> Logstash -> Elasticsearch pipeline. +# App(Logback KafkaAppender) -> Kafka -> Logstash -> Elasticsearch pipeline. input { kafka { bootstrap_servers => "localhost:9092" - topics => ["to_logstash"] + topics => ["logback_to_logstash"] } } diff --git a/script/logstash/config/logstash-logback.conf b/script/logstash/config/logstash-logback.conf index 5ee35ec0f65..eec1fb6c273 100644 --- a/script/logstash/config/logstash-logback.conf +++ b/script/logstash/config/logstash-logback.conf @@ -1,4 +1,4 @@ -# App -> Logback -> Logstash -> Elasticsearch pipeline. +# App(Logback LogstashTcpSocketAppender) -> Logstash -> Elasticsearch pipeline. input { # Using TCP protocol diff --git a/server/src/main/java/io/seata/server/coordinator/AbstractCore.java b/server/src/main/java/io/seata/server/coordinator/AbstractCore.java index 0ffcdd9dd3e..27582662bc4 100644 --- a/server/src/main/java/io/seata/server/coordinator/AbstractCore.java +++ b/server/src/main/java/io/seata/server/coordinator/AbstractCore.java @@ -18,6 +18,7 @@ import java.io.IOException; import java.util.concurrent.TimeoutException; +import io.seata.core.context.RootContext; import io.seata.core.exception.BranchTransactionException; import io.seata.core.exception.GlobalTransactionException; import io.seata.core.exception.TransactionException; @@ -38,6 +39,7 @@ import io.seata.server.session.SessionHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; import static io.seata.core.exception.TransactionExceptionCode.BranchTransactionNotExist; import static io.seata.core.exception.TransactionExceptionCode.FailedToAddBranch; @@ -77,6 +79,7 @@ public Long branchRegister(BranchType branchType, String resourceId, String clie globalSession.addSessionLifecycleListener(SessionHolder.getRootSessionManager()); BranchSession branchSession = SessionHelper.newBranchByGlobal(globalSession, branchType, resourceId, applicationData, lockKeys, clientId); + MDC.put(RootContext.MDC_KEY_BRANCH_ID, String.valueOf(branchSession.getBranchId())); branchSessionLock(globalSession, branchSession); try { globalSession.addBranch(branchSession); diff --git a/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java b/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java index 3e349b7a0c1..70456dc8518 100644 --- a/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java +++ b/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java @@ -26,6 +26,7 @@ import io.seata.common.util.DurationUtil; import io.seata.config.ConfigurationFactory; import io.seata.core.constants.ConfigurationKeys; +import io.seata.core.context.RootContext; import io.seata.core.event.EventBus; import io.seata.core.event.GlobalTransactionEvent; import io.seata.core.exception.TransactionException; @@ -60,9 +61,11 @@ import io.seata.server.AbstractTCInboundHandler; import io.seata.server.event.EventBusManager; import io.seata.server.session.GlobalSession; +import io.seata.server.session.SessionHelper; import io.seata.server.session.SessionHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; /** * The type Default coordinator. @@ -163,30 +166,35 @@ protected void doGlobalBegin(GlobalBeginRequest request, GlobalBeginResponse res @Override protected void doGlobalCommit(GlobalCommitRequest request, GlobalCommitResponse response, RpcContext rpcContext) throws TransactionException { + MDC.put(RootContext.MDC_KEY_XID, request.getXid()); response.setGlobalStatus(core.commit(request.getXid())); } @Override protected void doGlobalRollback(GlobalRollbackRequest request, GlobalRollbackResponse response, RpcContext rpcContext) throws TransactionException { + MDC.put(RootContext.MDC_KEY_XID, request.getXid()); response.setGlobalStatus(core.rollback(request.getXid())); } @Override protected void doGlobalStatus(GlobalStatusRequest request, GlobalStatusResponse response, RpcContext rpcContext) throws TransactionException { + MDC.put(RootContext.MDC_KEY_XID, request.getXid()); response.setGlobalStatus(core.getStatus(request.getXid())); } @Override protected void doGlobalReport(GlobalReportRequest request, GlobalReportResponse response, RpcContext rpcContext) throws TransactionException { + MDC.put(RootContext.MDC_KEY_XID, request.getXid()); response.setGlobalStatus(core.globalReport(request.getXid(), request.getGlobalStatus())); } @Override protected void doBranchRegister(BranchRegisterRequest request, BranchRegisterResponse response, RpcContext rpcContext) throws TransactionException { + MDC.put(RootContext.MDC_KEY_XID, request.getXid()); response.setBranchId( core.branchRegister(request.getBranchType(), request.getResourceId(), rpcContext.getClientId(), request.getXid(), request.getApplicationData(), request.getLockKey())); @@ -195,6 +203,8 @@ protected void doBranchRegister(BranchRegisterRequest request, BranchRegisterRes @Override protected void doBranchReport(BranchReportRequest request, BranchReportResponse response, RpcContext rpcContext) throws TransactionException { + MDC.put(RootContext.MDC_KEY_XID, request.getXid()); + MDC.put(RootContext.MDC_KEY_BRANCH_ID, String.valueOf(request.getBranchId())); core.branchReport(request.getBranchType(), request.getXid(), request.getBranchId(), request.getStatus(), request.getApplicationData()); } @@ -202,6 +212,7 @@ protected void doBranchReport(BranchReportRequest request, BranchReportResponse @Override protected void doLockCheck(GlobalLockQueryRequest request, GlobalLockQueryResponse response, RpcContext rpcContext) throws TransactionException { + MDC.put(RootContext.MDC_KEY_XID, request.getXid()); response.setLockable( core.lockQuery(request.getBranchType(), request.getResourceId(), request.getXid(), request.getLockKey())); } @@ -219,7 +230,7 @@ protected void timeoutCheck() throws TransactionException { if (allSessions.size() > 0 && LOGGER.isDebugEnabled()) { LOGGER.debug("Global transaction timeout check begin, size: {}", allSessions.size()); } - for (GlobalSession globalSession : allSessions) { + SessionHelper.forEach(allSessions, globalSession -> { if (LOGGER.isDebugEnabled()) { LOGGER.debug( globalSession.getXid() + " " + globalSession.getStatus() + " " + globalSession.getBeginTime() + " " @@ -242,14 +253,14 @@ protected void timeoutCheck() throws TransactionException { return true; }); if (!shouldTimeout) { - continue; + //The function of this 'return' is 'continue'. + return; } LOGGER.info("Global transaction[{}] is timeout and will be rollback.", globalSession.getXid()); globalSession.addSessionLifecycleListener(SessionHolder.getRetryRollbackingSessionManager()); SessionHolder.getRetryRollbackingSessionManager().addGlobalSession(globalSession); - - } + }); if (allSessions.size() > 0 && LOGGER.isDebugEnabled()) { LOGGER.debug("Global transaction timeout check end. "); } @@ -265,11 +276,12 @@ protected void handleRetryRollbacking() { return; } long now = System.currentTimeMillis(); - for (GlobalSession rollbackingSession : rollbackingSessions) { + SessionHelper.forEach(rollbackingSessions, rollbackingSession -> { try { // prevent repeated rollback if (rollbackingSession.getStatus().equals(GlobalStatus.Rollbacking) && !rollbackingSession.isRollbackingDead()) { - continue; + //The function of this 'return' is 'continue'. + return; } if (isRetryTimeout(now, MAX_ROLLBACK_RETRY_TIMEOUT.toMillis(), rollbackingSession.getBeginTime())) { if (ROLLBACK_RETRY_TIMEOUT_UNLOCK_ENABLE) { @@ -280,14 +292,15 @@ protected void handleRetryRollbacking() { */ SessionHolder.getRetryRollbackingSessionManager().removeGlobalSession(rollbackingSession); LOGGER.info("Global transaction rollback retry timeout and has removed [{}]", rollbackingSession.getXid()); - continue; + //The function of this 'return' is 'continue'. + return; } rollbackingSession.addSessionLifecycleListener(SessionHolder.getRootSessionManager()); core.doGlobalRollback(rollbackingSession, true); } catch (TransactionException ex) { LOGGER.info("Failed to retry rollbacking [{}] {} {}", rollbackingSession.getXid(), ex.getCode(), ex.getMessage()); } - } + }); } /** @@ -299,7 +312,7 @@ protected void handleRetryCommitting() { return; } long now = System.currentTimeMillis(); - for (GlobalSession committingSession : committingSessions) { + SessionHelper.forEach(committingSessions, committingSession -> { try { if (isRetryTimeout(now, MAX_COMMIT_RETRY_TIMEOUT.toMillis(), committingSession.getBeginTime())) { /** @@ -307,14 +320,15 @@ protected void handleRetryCommitting() { */ SessionHolder.getRetryCommittingSessionManager().removeGlobalSession(committingSession); LOGGER.error("Global transaction commit retry timeout and has removed [{}]", committingSession.getXid()); - continue; + //The function of this 'return' is 'continue'. + return; } committingSession.addSessionLifecycleListener(SessionHolder.getRootSessionManager()); core.doGlobalCommit(committingSession, true); } catch (TransactionException ex) { LOGGER.info("Failed to retry committing [{}] {} {}", committingSession.getXid(), ex.getCode(), ex.getMessage()); } - } + }); } private boolean isRetryTimeout(long now, long timeout, long beginTime) { @@ -330,18 +344,19 @@ protected void handleAsyncCommitting() { if (CollectionUtils.isEmpty(asyncCommittingSessions)) { return; } - for (GlobalSession asyncCommittingSession : asyncCommittingSessions) { + SessionHelper.forEach(asyncCommittingSessions, asyncCommittingSession -> { try { // Instruction reordering in DefaultCore#asyncCommit may cause this situation if (GlobalStatus.AsyncCommitting != asyncCommittingSession.getStatus()) { - continue; + //The function of this 'return' is 'continue'. + return; } asyncCommittingSession.addSessionLifecycleListener(SessionHolder.getRootSessionManager()); core.doGlobalCommit(asyncCommittingSession, true); } catch (TransactionException ex) { LOGGER.error("Failed to async committing [{}] {} {}", asyncCommittingSession.getXid(), ex.getCode(), ex.getMessage(), ex); } - } + }); } /** diff --git a/server/src/main/java/io/seata/server/coordinator/DefaultCore.java b/server/src/main/java/io/seata/server/coordinator/DefaultCore.java index 801fc0d679b..4c80c9b7cde 100644 --- a/server/src/main/java/io/seata/server/coordinator/DefaultCore.java +++ b/server/src/main/java/io/seata/server/coordinator/DefaultCore.java @@ -19,12 +19,10 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import io.seata.common.exception.NotSupportYetException; import io.seata.common.loader.EnhancedServiceLoader; import io.seata.common.util.CollectionUtils; +import io.seata.core.context.RootContext; import io.seata.core.event.EventBus; import io.seata.core.event.GlobalTransactionEvent; import io.seata.core.exception.TransactionException; @@ -38,6 +36,11 @@ import io.seata.server.session.GlobalSession; import io.seata.server.session.SessionHelper; import io.seata.server.session.SessionHolder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; + +import static io.seata.server.session.BranchSessionHandler.CONTINUE; /** * The type Default core. @@ -125,6 +128,7 @@ public String begin(String applicationId, String transactionServiceGroup, String throws TransactionException { GlobalSession session = GlobalSession.createGlobalSession(applicationId, transactionServiceGroup, name, timeout); + MDC.put(RootContext.MDC_KEY_XID, session.getXid()); session.addSessionLifecycleListener(SessionHolder.getRootSessionManager()); session.begin(); @@ -185,16 +189,16 @@ public boolean doGlobalCommit(GlobalSession globalSession, boolean retrying) thr if (globalSession.isSaga()) { success = getCore(BranchType.SAGA).doGlobalCommit(globalSession, retrying); } else { - for (BranchSession branchSession : globalSession.getSortedBranches()) { + Boolean result = SessionHelper.forEach(globalSession.getSortedBranches(), branchSession -> { // if not retrying, skip the canBeCommittedAsync branches if (!retrying && branchSession.canBeCommittedAsync()) { - continue; + return CONTINUE; } BranchStatus currentStatus = branchSession.getStatus(); if (currentStatus == BranchStatus.PhaseOne_Failed) { globalSession.removeBranch(branchSession); - continue; + return CONTINUE; } try { BranchStatus branchStatus = getCore(branchSession.getBranchType()).branchCommit(globalSession, branchSession); @@ -202,12 +206,12 @@ public boolean doGlobalCommit(GlobalSession globalSession, boolean retrying) thr switch (branchStatus) { case PhaseTwo_Committed: globalSession.removeBranch(branchSession); - continue; + return CONTINUE; case PhaseTwo_CommitFailed_Unretryable: if (globalSession.canBeCommittedAsync()) { LOGGER.error( "Committing branch transaction[{}], status: PhaseTwo_CommitFailed_Unretryable, please check the business log.", branchSession.getBranchId()); - continue; + return CONTINUE; } else { SessionHelper.endCommitFailed(globalSession); LOGGER.error("Committing global transaction[{}] finally failed, caused by branch transaction[{}] commit failed.", globalSession.getXid(), branchSession.getBranchId()); @@ -221,7 +225,7 @@ public boolean doGlobalCommit(GlobalSession globalSession, boolean retrying) thr if (globalSession.canBeCommittedAsync()) { LOGGER.error("Committing branch transaction[{}], status:{} and will retry later", branchSession.getBranchId(), branchStatus); - continue; + return CONTINUE; } else { LOGGER.error( "Committing global transaction[{}] failed, caused by branch transaction[{}] commit failed, will retry later.", globalSession.getXid(), branchSession.getBranchId()); @@ -236,6 +240,11 @@ public boolean doGlobalCommit(GlobalSession globalSession, boolean retrying) thr throw new TransactionException(ex); } } + return CONTINUE; + }); + // Return if the result is not null + if (result != null) { + return result; } //If has branch and not all remaining branches can be committed asynchronously, //do print log and return false @@ -293,11 +302,11 @@ public boolean doGlobalRollback(GlobalSession globalSession, boolean retrying) t if (globalSession.isSaga()) { success = getCore(BranchType.SAGA).doGlobalRollback(globalSession, retrying); } else { - for (BranchSession branchSession : globalSession.getReverseSortedBranches()) { + Boolean result = SessionHelper.forEach(globalSession.getReverseSortedBranches(), branchSession -> { BranchStatus currentBranchStatus = branchSession.getStatus(); if (currentBranchStatus == BranchStatus.PhaseOne_Failed) { globalSession.removeBranch(branchSession); - continue; + return CONTINUE; } try { BranchStatus branchStatus = branchRollback(globalSession, branchSession); @@ -305,7 +314,7 @@ public boolean doGlobalRollback(GlobalSession globalSession, boolean retrying) t case PhaseTwo_Rollbacked: globalSession.removeBranch(branchSession); LOGGER.info("Rollback branch transaction successfully, xid = {} branchId = {}", globalSession.getXid(), branchSession.getBranchId()); - continue; + return CONTINUE; case PhaseTwo_RollbackFailed_Unretryable: SessionHelper.endRollbackFailed(globalSession); LOGGER.info("Rollback branch transaction fail and stop retry, xid = {} branchId = {}", globalSession.getXid(), branchSession.getBranchId()); @@ -326,6 +335,10 @@ public boolean doGlobalRollback(GlobalSession globalSession, boolean retrying) t } throw new TransactionException(ex); } + }); + // Return if the result is not null + if (result != null) { + return result; } // In db mode, there is a problem of inconsistent data in multiple copies, resulting in new branch diff --git a/server/src/main/java/io/seata/server/logging/logback/appender/EnhancedLogstashEncoder.java b/server/src/main/java/io/seata/server/logging/logback/appender/EnhancedLogstashEncoder.java new file mode 100644 index 00000000000..665affe7ec0 --- /dev/null +++ b/server/src/main/java/io/seata/server/logging/logback/appender/EnhancedLogstashEncoder.java @@ -0,0 +1,45 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.server.logging.logback.appender; + +import java.util.ArrayList; + +import net.logstash.logback.composite.JsonProvider; +import net.logstash.logback.composite.JsonProviders; +import net.logstash.logback.encoder.LogstashEncoder; + +/** + * The type Enhanced logstash encoder + * + * @author wang.liang + * @since 1.5.0 + */ +public class EnhancedLogstashEncoder extends LogstashEncoder { + + /** + * set exclude provider + * + * @param excludedProviderClassName the excluded provider class name + */ + public void setExcludeProvider(String excludedProviderClassName) { + JsonProviders providers = getFormatter().getProviders(); + for (JsonProvider provider : new ArrayList<>(providers.getProviders())) { + if (provider.getClass().getName().equals(excludedProviderClassName)) { + providers.removeProvider((JsonProvider) provider); + } + } + } +} diff --git a/server/src/main/java/io/seata/server/session/BranchSessionHandler.java b/server/src/main/java/io/seata/server/session/BranchSessionHandler.java new file mode 100644 index 00000000000..3523018b21a --- /dev/null +++ b/server/src/main/java/io/seata/server/session/BranchSessionHandler.java @@ -0,0 +1,39 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.server.session; + +import io.seata.core.exception.TransactionException; + +/** + * The Functional Interface Branch session handler + * + * @author wang.liang + * @since 1.5.0 + */ +@FunctionalInterface +public interface BranchSessionHandler { + + Boolean CONTINUE = null; + + /** + * Handle branch session. + * + * @param branchSession the branch session + * @return the handle result + * @throws TransactionException the transaction exception + */ + Boolean handle(BranchSession branchSession) throws TransactionException; +} diff --git a/server/src/main/java/io/seata/server/session/GlobalSessionHandler.java b/server/src/main/java/io/seata/server/session/GlobalSessionHandler.java new file mode 100644 index 00000000000..515b155bbc4 --- /dev/null +++ b/server/src/main/java/io/seata/server/session/GlobalSessionHandler.java @@ -0,0 +1,36 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.server.session; + +import io.seata.core.exception.TransactionException; + +/** + * The Functional Interface Global session handler + * + * @author wang.liang + * @since 1.5.0 + */ +@FunctionalInterface +public interface GlobalSessionHandler { + + /** + * Handle global session. + * + * @param globalSession the global session + * @throws TransactionException the transaction exception + */ + void handle(GlobalSession globalSession) throws TransactionException; +} \ No newline at end of file diff --git a/server/src/main/java/io/seata/server/session/SessionHelper.java b/server/src/main/java/io/seata/server/session/SessionHelper.java index 1ab86955f05..cccd828b39e 100644 --- a/server/src/main/java/io/seata/server/session/SessionHelper.java +++ b/server/src/main/java/io/seata/server/session/SessionHelper.java @@ -15,10 +15,16 @@ */ package io.seata.server.session; +import java.util.Collection; + +import io.seata.core.context.RootContext; import io.seata.core.exception.TransactionException; import io.seata.core.model.BranchType; import io.seata.core.model.GlobalStatus; import io.seata.server.UUIDGenerator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; /** * The type Session helper. @@ -26,6 +32,7 @@ * @author sharajava */ public class SessionHelper { + private static final Logger LOGGER = LoggerFactory.getLogger(SessionHelper.class); private SessionHelper() {} @@ -139,4 +146,48 @@ public static boolean isTimeoutGlobalStatus(GlobalStatus status) { || status == GlobalStatus.TimeoutRollbacking || status == GlobalStatus.TimeoutRollbackRetrying; } + + /** + * Foreach global sessions. + * + * @param sessions the global sessions + * @param handler the handler + * @since 1.5.0 + */ + public static void forEach(Collection sessions, GlobalSessionHandler handler) { + for (GlobalSession globalSession : sessions) { + try { + MDC.put(RootContext.MDC_KEY_XID, globalSession.getXid()); + handler.handle(globalSession); + } catch (Throwable th) { + LOGGER.error("handle global session failed: {}", globalSession.getXid(), th); + } finally { + MDC.remove(RootContext.MDC_KEY_XID); + } + } + } + + /** + * Foreach branch sessions. + * + * @param sessions the branch session + * @param handler the handler + * @since 1.5.0 + */ + public static Boolean forEach(Collection sessions, BranchSessionHandler handler) throws TransactionException { + Boolean result; + for (BranchSession branchSession : sessions) { + try { + MDC.put(RootContext.MDC_KEY_BRANCH_ID, String.valueOf(branchSession.getBranchId())); + result = handler.handle(branchSession); + if (result == null) { + continue; + } + return result; + } finally { + MDC.remove(RootContext.MDC_KEY_BRANCH_ID); + } + } + return null; + } } diff --git a/server/src/main/java/io/seata/server/storage/file/lock/FileLockManager.java b/server/src/main/java/io/seata/server/storage/file/lock/FileLockManager.java index 06260b6e40d..1074fd7750b 100644 --- a/server/src/main/java/io/seata/server/storage/file/lock/FileLockManager.java +++ b/server/src/main/java/io/seata/server/storage/file/lock/FileLockManager.java @@ -23,6 +23,9 @@ import io.seata.server.lock.AbstractLockManager; import io.seata.server.session.BranchSession; import io.seata.server.session.GlobalSession; +import org.slf4j.MDC; + +import static io.seata.core.context.RootContext.MDC_KEY_BRANCH_ID; /** * The type file lock manager. @@ -42,8 +45,13 @@ public boolean releaseGlobalSessionLock(GlobalSession globalSession) throws Tran ArrayList branchSessions = globalSession.getBranchSessions(); boolean releaseLockResult = true; for (BranchSession branchSession : branchSessions) { - if (!this.releaseLock(branchSession)) { - releaseLockResult = false; + try { + MDC.put(MDC_KEY_BRANCH_ID, String.valueOf(branchSession.getBranchId())); + if (!this.releaseLock(branchSession)) { + releaseLockResult = false; + } + } finally { + MDC.remove(MDC_KEY_BRANCH_ID); } } return releaseLockResult; diff --git a/server/src/main/java/io/seata/server/storage/file/store/FileTransactionStoreManager.java b/server/src/main/java/io/seata/server/storage/file/store/FileTransactionStoreManager.java index d4d2a62d957..215f58ff648 100644 --- a/server/src/main/java/io/seata/server/storage/file/store/FileTransactionStoreManager.java +++ b/server/src/main/java/io/seata/server/storage/file/store/FileTransactionStoreManager.java @@ -48,6 +48,9 @@ import io.seata.server.storage.file.TransactionWriteStore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; + +import static io.seata.core.context.RootContext.MDC_KEY_BRANCH_ID; /** * The type File transaction store manager. @@ -283,11 +286,16 @@ private boolean findTimeoutAndSave() throws IOException { List branchSessIonsOverMaXTimeout = globalSession.getSortedBranches(); if (branchSessIonsOverMaXTimeout != null) { for (BranchSession branchSession : branchSessIonsOverMaXTimeout) { - TransactionWriteStore branchWriteStore = new TransactionWriteStore(branchSession, - LogOperation.BRANCH_ADD); - data = branchWriteStore.encode(); - if (!writeDataFrame(data)) { - return false; + try { + MDC.put(MDC_KEY_BRANCH_ID, String.valueOf(branchSession.getBranchId())); + TransactionWriteStore branchWriteStore = new TransactionWriteStore(branchSession, + LogOperation.BRANCH_ADD); + data = branchWriteStore.encode(); + if (!writeDataFrame(data)) { + return false; + } + } finally { + MDC.remove(MDC_KEY_BRANCH_ID); } } } diff --git a/server/src/main/resources/logback.xml b/server/src/main/resources/logback.xml index 19641290919..02399e5dd98 100644 --- a/server/src/main/resources/logback.xml +++ b/server/src/main/resources/logback.xml @@ -24,6 +24,10 @@ + + + + diff --git a/server/src/main/resources/logback/file-appender.xml b/server/src/main/resources/logback/file-appender.xml index d892e8fb106..cb54dd4e6b1 100644 --- a/server/src/main/resources/logback/file-appender.xml +++ b/server/src/main/resources/logback/file-appender.xml @@ -6,10 +6,10 @@ - ${LOG_HOME}/seata-server.${PORT}.all.log + ${LOG_HOME}/${APPLICATION_NAME:-}.${PORT}.all.log true - ${LOG_HOME}/history/seata-server.${PORT}.all.%d{yyyy-MM-dd}.%i.log.gz + ${LOG_HOME}/history/${APPLICATION_NAME:-}.${PORT}.all.%d{yyyy-MM-dd}.%i.log.gz 2GB 7 7GB @@ -28,10 +28,10 @@ ACCEPT DENY - ${LOG_HOME}/seata-server.${PORT}.warn.log + ${LOG_HOME}/${APPLICATION_NAME:-}.${PORT}.warn.log true - ${LOG_HOME}/history/seata-server.${PORT}.warn.%d{yyyy-MM-dd}.%i.log.gz + ${LOG_HOME}/history/${APPLICATION_NAME:-}.${PORT}.warn.%d{yyyy-MM-dd}.%i.log.gz 2GB 7 7GB @@ -50,10 +50,10 @@ ACCEPT DENY - ${LOG_HOME}/seata-server.${PORT}.error.log + ${LOG_HOME}/${APPLICATION_NAME:-}.${PORT}.error.log true - ${LOG_HOME}/history/seata-server.${PORT}.error.%d{yyyy-MM-dd}.%i.log.gz + ${LOG_HOME}/history/${APPLICATION_NAME:-}.${PORT}.error.%d{yyyy-MM-dd}.%i.log.gz 2GB 7 7GB diff --git a/server/src/main/resources/logback/kafka-appender.xml b/server/src/main/resources/logback/kafka-appender.xml index c8199991d7a..2b30a75985f 100644 --- a/server/src/main/resources/logback/kafka-appender.xml +++ b/server/src/main/resources/logback/kafka-appender.xml @@ -2,22 +2,23 @@ - + - - - { - "@timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}", - "level":"%p", - "app_name":"seata-server", - "PORT": ${PORT:-0}, - "thread_name": "%t", - "logger_name": "%logger", - "message": "%m", - "stack_trace": "%wex" - } + + { + "@timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}", + "level":"%p", + "app_name":"${APPLICATION_NAME:-}", + "PORT": ${PORT:-0}, + "thread_name": "%t", + "logger_name": "%logger", + "X-TX-XID": "%X{X-TX-XID:-}", + "X-TX-BRANCH-ID": "%X{X-TX-BRANCH-ID:-}", + "message": "%m", + "stack_trace": "%wex" +} ${KAFKA_TOPIC} diff --git a/server/src/main/resources/logback/logstash-appender.xml b/server/src/main/resources/logback/logstash-appender.xml index 5e37311de41..18b9c25c0d4 100644 --- a/server/src/main/resources/logback/logstash-appender.xml +++ b/server/src/main/resources/logback/logstash-appender.xml @@ -4,13 +4,25 @@ + ${LOGSTASH_DESTINATION} - + + + + { - "app_name": "seata-server" + "app_name": "${APPLICATION_NAME:-}" } + + + net.logstash.logback.composite.LogstashVersionJsonProvider + + net.logstash.logback.composite.loggingevent.JsonMessageJsonProvider + net.logstash.logback.composite.loggingevent.TagsJsonProvider + net.logstash.logback.composite.loggingevent.LogstashMarkersJsonProvider + net.logstash.logback.composite.loggingevent.ArgumentsJsonProvider diff --git a/spring/src/main/java/io/seata/spring/tcc/TccActionInterceptor.java b/spring/src/main/java/io/seata/spring/tcc/TccActionInterceptor.java index 4c96a70f513..dd666d13739 100644 --- a/spring/src/main/java/io/seata/spring/tcc/TccActionInterceptor.java +++ b/spring/src/main/java/io/seata/spring/tcc/TccActionInterceptor.java @@ -34,6 +34,7 @@ import org.aopalliance.intercept.MethodInvocation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; import static io.seata.common.DefaultValues.DEFAULT_DISABLE_GLOBAL_TRANSACTION; @@ -102,6 +103,8 @@ public Object invoke(final MethodInvocation invocation) throws Throwable { if (BranchType.TCC != previousBranchType) { RootContext.unbindBranchType(); } + //MDC remove branchId + MDC.remove(RootContext.MDC_KEY_BRANCH_ID); } } return invocation.proceed(); diff --git a/tcc/src/main/java/io/seata/rm/tcc/interceptor/ActionInterceptorHandler.java b/tcc/src/main/java/io/seata/rm/tcc/interceptor/ActionInterceptorHandler.java index 2d4e038a85c..31b153a4644 100644 --- a/tcc/src/main/java/io/seata/rm/tcc/interceptor/ActionInterceptorHandler.java +++ b/tcc/src/main/java/io/seata/rm/tcc/interceptor/ActionInterceptorHandler.java @@ -20,6 +20,7 @@ import io.seata.common.exception.FrameworkException; import io.seata.common.executor.Callback; import io.seata.common.util.NetUtil; +import io.seata.core.context.RootContext; import io.seata.core.model.BranchType; import io.seata.rm.DefaultResourceManager; import io.seata.rm.tcc.api.BusinessActionContext; @@ -27,6 +28,7 @@ import io.seata.rm.tcc.api.TwoPhaseBusinessAction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; import java.lang.annotation.Annotation; import java.lang.reflect.Method; @@ -67,6 +69,8 @@ public Map proceed(Method method, Object[] arguments, String xid //Creating Branch Record String branchId = doTccActionLogStore(method, arguments, businessAction, actionContext); actionContext.setBranchId(branchId); + //MDC put branchId + MDC.put(RootContext.MDC_KEY_BRANCH_ID, branchId); //set the parameter whose type is BusinessActionContext Class[] types = method.getParameterTypes(); diff --git a/tm/src/main/java/io/seata/tm/api/DefaultGlobalTransaction.java b/tm/src/main/java/io/seata/tm/api/DefaultGlobalTransaction.java index e9a5954eb13..25d753243b5 100644 --- a/tm/src/main/java/io/seata/tm/api/DefaultGlobalTransaction.java +++ b/tm/src/main/java/io/seata/tm/api/DefaultGlobalTransaction.java @@ -181,11 +181,13 @@ public void rollback() throws TransactionException { @Override public SuspendedResourcesHolder suspend() throws TransactionException { - String xid = RootContext.unbind(); + // In order to associate the following logs with XID, first get and then unbind. + String xid = RootContext.getXID(); if (xid != null) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Suspending current transaction, xid = {}", xid); + if (LOGGER.isInfoEnabled()) { + LOGGER.info("Suspending current transaction, xid = {}", xid); } + RootContext.unbind(); return new SuspendedResourcesHolder(xid); } else { return null; From cee31faf0ac3c044f29133aa5fc335cf299ecf10 Mon Sep 17 00:00:00 2001 From: Xi Zhou Date: Fri, 22 Jan 2021 16:36:40 +0800 Subject: [PATCH 47/93] bugfix: seata node refresh failure because consul crash (#3481) --- changes/1.5.0.md | 2 ++ changes/en-us/1.5.0.md | 3 +++ .../consul/ConsulRegistryServiceImpl.java | 15 +++++++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 1d6efa22e7a..0c21074529b 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -37,6 +37,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3431](https://github.com/seata/seata/pull/3431)] 修复在读取配置时Property Bean可能还未初始化 - [[#3413](https://github.com/seata/seata/pull/3413)] 修复回滚到savepoint以及releaseSavepoint的逻辑 - [[#3451](https://github.com/seata/seata/pull/3451)] 修复当不使用本地事务且设置自动提交为true时,全局锁竞争失败会使得rm退出全局事务,导致全局锁在rm重试时失效,数据被脏写 + - [[#3481](https://github.com/seata/seata/pull/3481)] 修复当 consul client 获取集群信息报错时会导致刷新任务中断 ### optimize: @@ -87,6 +88,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [MentosL](https://github.com/MentosL) - [lian88jian](https://github.com/lian88jian) - [litianyu1992](https://github.com/litianyu1992) + - [xyz327](https://github.com/xyz327) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index c63b20dd595..f4054791c8e 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -38,6 +38,8 @@ - [[#3413](https://github.com/seata/seata/pull/3413)] fix the logic of rollback to savepoint and release to savepoint - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` - [[#3451](https://github.com/seata/seata/pull/3451)] fix set auto-commit to true when local transactions are not being used. Failure to compete for a lock causes the global transaction to exit, invaliding the global row lock and dirty writing of the data. + - [[#3481](https://github.com/seata/seata/pull/3481)] fix seata node refresh failure because consul crash + ### optimize: - [[#3383](https://github.com/seata/seata/pull/3383)] optimize StatementProxyTest unit test @@ -86,6 +88,7 @@ - [MentosL](https://github.com/MentosL) - [lian88jian](https://github.com/lian88jian) - [litianyu1992](https://github.com/litianyu1992) + - [xyz327](https://github.com/xyz327) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/discovery/seata-discovery-consul/src/main/java/io/seata/discovery/registry/consul/ConsulRegistryServiceImpl.java b/discovery/seata-discovery-consul/src/main/java/io/seata/discovery/registry/consul/ConsulRegistryServiceImpl.java index 86e97bb4ad5..54211a7106e 100644 --- a/discovery/seata-discovery-consul/src/main/java/io/seata/discovery/registry/consul/ConsulRegistryServiceImpl.java +++ b/discovery/seata-discovery-consul/src/main/java/io/seata/discovery/registry/consul/ConsulRegistryServiceImpl.java @@ -26,6 +26,8 @@ import io.seata.config.Configuration; import io.seata.config.ConfigurationFactory; import io.seata.discovery.registry.RegistryService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.net.InetSocketAddress; import java.util.Collections; @@ -48,6 +50,7 @@ public class ConsulRegistryServiceImpl implements RegistryService> response = getHealthyServices(cluster, consulIndex, DEFAULT_WATCH_TIMEOUT); Long currentIndex = response.getConsulIndex(); - if (currentIndex != null && currentIndex > consulIndex) { + + if ((currentIndex != null && currentIndex > consulIndex) || hasError) { + hasError = false; List services = response.getValue(); consulIndex = currentIndex; for (ConsulListener listener : listenerMap.get(cluster)) { From 77a340edde1166b80b0bb8cdad3c86b671afa5a3 Mon Sep 17 00:00:00 2001 From: AacherJu <964810522@qq.com> Date: Sun, 24 Jan 2021 16:48:46 +0800 Subject: [PATCH 48/93] optimize: remove useless codes in ConfigurationFactory (#3485) --- changes/1.5.0.md | 5 +++++ changes/en-us/1.5.0.md | 4 ++++ .../io/seata/config/ConfigurationFactory.java | 19 +++++++------------ 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 0c21074529b..2dbb77c015b 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -64,6 +64,8 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3156](https://github.com/seata/seata/pull/3156)] 优化SpringProxyUtils.findTargetClass的逻辑 - [[#3441](https://github.com/seata/seata/pull/3441)] 优化starter的自动配置处理 - [[#3466](https://github.com/seata/seata/pull/3466)] 优化ExecuteTemplateXA类中判断XA不是最终状态的比较方式 + - [[#3485](https://github.com/seata/seata/pull/3485)] 优化 ConfigurationFactory 中无用的try/catch + ### test - [[#3381](https://github.com/seata/seata/pull/3381)] 添加 TmClient 的测试用例 @@ -89,6 +91,9 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [lian88jian](https://github.com/lian88jian) - [litianyu1992](https://github.com/litianyu1992) - [xyz327](https://github.com/xyz327) + - [13414850431](https://github.com/13414850431) + + 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index f4054791c8e..36aa069c222 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -64,10 +64,13 @@ - [[#3156](https://github.com/seata/seata/pull/3156)] optimize the logic of SpringProxyUtils.findTargetClass - [[#3441](https://github.com/seata/seata/pull/3441)] optimize the auto-configuration processing of starter - [[#3466](https://github.com/seata/seata/pull/3466)] optimize the comparison in the ExecuteTemplateXa class to determine that XA is not the final state + - [[#3485](https://github.com/seata/seata/pull/3485)] optimize useless codes in ConfigurationFactory + ### test - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient + Thanks to these contributors for their code commits. Please report an unintended omission. @@ -89,6 +92,7 @@ - [lian88jian](https://github.com/lian88jian) - [litianyu1992](https://github.com/litianyu1992) - [xyz327](https://github.com/xyz327) + - [13414850431](https://github.com/13414850431) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/config/seata-config-core/src/main/java/io/seata/config/ConfigurationFactory.java b/config/seata-config-core/src/main/java/io/seata/config/ConfigurationFactory.java index 232fac38685..957e9fcdd29 100644 --- a/config/seata-config-core/src/main/java/io/seata/config/ConfigurationFactory.java +++ b/config/seata-config-core/src/main/java/io/seata/config/ConfigurationFactory.java @@ -99,20 +99,15 @@ public static Configuration getInstance() { } private static Configuration buildConfiguration() { - ConfigType configType; - String configTypeName; - try { - configTypeName = CURRENT_FILE_INSTANCE.getConfig( - ConfigurationKeys.FILE_ROOT_CONFIG + ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR - + ConfigurationKeys.FILE_ROOT_TYPE); + String configTypeName = CURRENT_FILE_INSTANCE.getConfig( + ConfigurationKeys.FILE_ROOT_CONFIG + ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR + + ConfigurationKeys.FILE_ROOT_TYPE); - if (StringUtils.isBlank(configTypeName)) { - throw new NotSupportYetException("config type can not be null"); - } - configType = ConfigType.getType(configTypeName); - } catch (Exception e) { - throw e; + if (StringUtils.isBlank(configTypeName)) { + throw new NotSupportYetException("config type can not be null"); } + ConfigType configType = ConfigType.getType(configTypeName); + Configuration extConfiguration = null; Configuration configuration; if (ConfigType.File == configType) { From 41048988a944d02fb08a898ba80447506d73512c Mon Sep 17 00:00:00 2001 From: Thumb Date: Tue, 26 Jan 2021 16:18:19 +0800 Subject: [PATCH 49/93] optimize: fix typo (#3491) --- tcc/README.MD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tcc/README.MD b/tcc/README.MD index bddc507db42..b114d67474a 100644 --- a/tcc/README.MD +++ b/tcc/README.MD @@ -11,7 +11,7 @@ TCC服务作为一种事务资源,遵循两阶段提交协议,由业务层 资源的检查和预留; -- Comfirm: +- Confirm: 使用预留的资源,完成真正的业务操作;要求Try成功Confirm 一定要能成功; From 5a09c25532393bc27026ce4bab16e336a0228fb1 Mon Sep 17 00:00:00 2001 From: xingfudeshi Date: Thu, 28 Jan 2021 10:08:04 +0800 Subject: [PATCH 50/93] optimize:convert hostname to IP if necessary (#3476) --- changes/1.5.0.md | 2 + changes/en-us/1.5.0.md | 5 +- .../java/io/seata/common/util/NetUtil.java | 49 +++++++++++++------ .../io/seata/common/util/NetUtilTest.java | 22 +++++++++ 4 files changed, 62 insertions(+), 16 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 2dbb77c015b..81f99a66e65 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -38,6 +38,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3413](https://github.com/seata/seata/pull/3413)] 修复回滚到savepoint以及releaseSavepoint的逻辑 - [[#3451](https://github.com/seata/seata/pull/3451)] 修复当不使用本地事务且设置自动提交为true时,全局锁竞争失败会使得rm退出全局事务,导致全局锁在rm重试时失效,数据被脏写 - [[#3481](https://github.com/seata/seata/pull/3481)] 修复当 consul client 获取集群信息报错时会导致刷新任务中断 + - [[#3491](https://github.com/seata/seata/pull/3491)] 修复README.md文件中的拼写错误 ### optimize: @@ -64,6 +65,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3156](https://github.com/seata/seata/pull/3156)] 优化SpringProxyUtils.findTargetClass的逻辑 - [[#3441](https://github.com/seata/seata/pull/3441)] 优化starter的自动配置处理 - [[#3466](https://github.com/seata/seata/pull/3466)] 优化ExecuteTemplateXA类中判断XA不是最终状态的比较方式 + - [[#3476](https://github.com/seata/seata/pull/3476)] 服务端参数传入hostname时将自动转换为ip - [[#3485](https://github.com/seata/seata/pull/3485)] 优化 ConfigurationFactory 中无用的try/catch ### test diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 36aa069c222..3ae8db10165 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -39,7 +39,7 @@ - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` - [[#3451](https://github.com/seata/seata/pull/3451)] fix set auto-commit to true when local transactions are not being used. Failure to compete for a lock causes the global transaction to exit, invaliding the global row lock and dirty writing of the data. - [[#3481](https://github.com/seata/seata/pull/3481)] fix seata node refresh failure because consul crash - + - [[#3491](https://github.com/seata/seata/pull/3491)] fix typo in README.md ### optimize: - [[#3383](https://github.com/seata/seata/pull/3383)] optimize StatementProxyTest unit test @@ -64,9 +64,10 @@ - [[#3156](https://github.com/seata/seata/pull/3156)] optimize the logic of SpringProxyUtils.findTargetClass - [[#3441](https://github.com/seata/seata/pull/3441)] optimize the auto-configuration processing of starter - [[#3466](https://github.com/seata/seata/pull/3466)] optimize the comparison in the ExecuteTemplateXa class to determine that XA is not the final state + - [[#3476](https://github.com/seata/seata/pull/3476)] convert hostname to IP if necessary - [[#3485](https://github.com/seata/seata/pull/3485)] optimize useless codes in ConfigurationFactory - + ### test - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient diff --git a/common/src/main/java/io/seata/common/util/NetUtil.java b/common/src/main/java/io/seata/common/util/NetUtil.java index 724381392d3..3045de4aaec 100644 --- a/common/src/main/java/io/seata/common/util/NetUtil.java +++ b/common/src/main/java/io/seata/common/util/NetUtil.java @@ -15,16 +15,17 @@ */ package io.seata.common.util; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.NetworkInterface; import java.net.SocketAddress; +import java.net.UnknownHostException; import java.util.Enumeration; import java.util.regex.Pattern; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * The type Net util. * @@ -163,16 +164,14 @@ private static InetAddress getLocalAddress0() { try { NetworkInterface network = interfaces.nextElement(); Enumeration addresses = network.getInetAddresses(); - if (addresses != null) { - while (addresses.hasMoreElements()) { - try { - InetAddress address = addresses.nextElement(); - if (isValidAddress(address)) { - return address; - } - } catch (Throwable e) { - LOGGER.warn("Failed to retrieving ip address, {}", e.getMessage(), e); + while (addresses.hasMoreElements()) { + try { + InetAddress address = addresses.nextElement(); + if (isValidAddress(address)) { + return address; } + } catch (Throwable e) { + LOGGER.warn("Failed to retrieving ip address, {}", e.getMessage(), e); } } } catch (Throwable e) { @@ -219,11 +218,33 @@ private static boolean isValidAddress(InetAddress address) { * @return true if the given IP is valid */ public static boolean isValidIp(String ip, boolean validLocalAndAny) { + if (ip == null) { + return false; + } + ip = convertIpIfNecessary(ip); if (validLocalAndAny) { - return ip != null && IP_PATTERN.matcher(ip).matches(); + return IP_PATTERN.matcher(ip).matches(); } else { - return ip != null && !ANY_HOST.equals(ip) && !LOCALHOST.equals(ip) && IP_PATTERN.matcher(ip).matches(); + return !ANY_HOST.equals(ip) && !LOCALHOST.equals(ip) && IP_PATTERN.matcher(ip).matches(); } } + + /** + * convert ip if necessary + * + * @param ip + * @return java.lang.String + */ + private static String convertIpIfNecessary(String ip) { + if (IP_PATTERN.matcher(ip).matches()) { + return ip; + } else { + try { + return InetAddress.getByName(ip).getHostAddress(); + } catch (UnknownHostException e) { + throw new RuntimeException(e); + } + } + } } diff --git a/common/src/test/java/io/seata/common/util/NetUtilTest.java b/common/src/test/java/io/seata/common/util/NetUtilTest.java index 941ccb0c3f3..c830e0fc892 100644 --- a/common/src/test/java/io/seata/common/util/NetUtilTest.java +++ b/common/src/test/java/io/seata/common/util/NetUtilTest.java @@ -24,6 +24,7 @@ import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * The type Net util test. @@ -159,4 +160,25 @@ public void testGetLocalAddress() { assertThat(NetUtil.getLocalAddress()).isNotNull(); } + @Test + public void testIsValidIp() { + String localIp = "127.0.0.1"; + String someIp = "8.210.212.91"; + String someHostName = "seata.io"; + String unknownHost = "knownHost"; + assertThat(NetUtil.isValidIp(localIp, true)).isTrue(); + assertThat(NetUtil.isValidIp(localIp, false)).isFalse(); + + assertThat(NetUtil.isValidIp(someIp, true)).isTrue(); + assertThat(NetUtil.isValidIp(someIp, false)).isTrue(); + + assertThat(NetUtil.isValidIp(someHostName, true)).isTrue(); + assertThat(NetUtil.isValidIp(someHostName, false)).isTrue(); + + assertThatThrownBy(() -> { + NetUtil.isValidIp(unknownHost, false); + }).isInstanceOf(RuntimeException.class).hasMessageContaining("UnknownHostException"); + + } + } From b503ce6ec8f4d7d495895812ecee29724fc6b213 Mon Sep 17 00:00:00 2001 From: RainGan Date: Sun, 31 Jan 2021 18:48:50 +0800 Subject: [PATCH 51/93] optimize: remove useless if judgments. (#3505) --- changes/1.5.0.md | 2 ++ changes/en-us/1.5.0.md | 4 ++++ .../annotation/GlobalTransactionScanner.java | 16 +++++++--------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 81f99a66e65..8ef5d4dc6ad 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -67,6 +67,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3466](https://github.com/seata/seata/pull/3466)] 优化ExecuteTemplateXA类中判断XA不是最终状态的比较方式 - [[#3476](https://github.com/seata/seata/pull/3476)] 服务端参数传入hostname时将自动转换为ip - [[#3485](https://github.com/seata/seata/pull/3485)] 优化 ConfigurationFactory 中无用的try/catch + - [[#3505](https://github.com/seata/seata/pull/3505)] 优化GlobalTransactionScanner类中无用的if判断 ### test @@ -94,6 +95,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [litianyu1992](https://github.com/litianyu1992) - [xyz327](https://github.com/xyz327) - [13414850431](https://github.com/13414850431) + - [github-ganyu](https://github.com/github-ganyu) diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 3ae8db10165..22c9d70495c 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -66,6 +66,9 @@ - [[#3466](https://github.com/seata/seata/pull/3466)] optimize the comparison in the ExecuteTemplateXa class to determine that XA is not the final state - [[#3476](https://github.com/seata/seata/pull/3476)] convert hostname to IP if necessary - [[#3485](https://github.com/seata/seata/pull/3485)] optimize useless codes in ConfigurationFactory + - [[#3505](https://github.com/seata/seata/pull/3505)] optimize useless if judgments in the GlobalTransactionScanner class + + ### test @@ -94,6 +97,7 @@ - [litianyu1992](https://github.com/litianyu1992) - [xyz327](https://github.com/xyz327) - [13414850431](https://github.com/13414850431) + - [github-ganyu](https://github.com/github-ganyu) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/spring/src/main/java/io/seata/spring/annotation/GlobalTransactionScanner.java b/spring/src/main/java/io/seata/spring/annotation/GlobalTransactionScanner.java index 6afe974d8eb..987e0599708 100644 --- a/spring/src/main/java/io/seata/spring/annotation/GlobalTransactionScanner.java +++ b/spring/src/main/java/io/seata/spring/annotation/GlobalTransactionScanner.java @@ -229,7 +229,7 @@ private void registerSpringShutdownHook() { * GlobalLock: * @see io.seata.spring.annotation.GlobalLock // GlobalLock annotation * Corresponding interceptor: - * @see io.seata.spring.annotation.GlobalTransactionalInterceptor#handleGlobalLock(MethodInvocation) // GlobalLock handler + * @see io.seata.spring.annotation.GlobalTransactionalInterceptor#handleGlobalLock(MethodInvocation, GlobalLock) // GlobalLock handler * * TCC mode: * @see io.seata.rm.tcc.api.LocalTCC // TCC annotation on interface @@ -261,15 +261,13 @@ protected Object wrapIfNecessary(Object bean, String beanName, Object cacheKey) return bean; } - if (interceptor == null) { - if (globalTransactionalInterceptor == null) { - globalTransactionalInterceptor = new GlobalTransactionalInterceptor(failureHandlerHook); - ConfigurationCache.addConfigListener( - ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION, - (ConfigurationChangeListener)globalTransactionalInterceptor); - } - interceptor = globalTransactionalInterceptor; + if (globalTransactionalInterceptor == null) { + globalTransactionalInterceptor = new GlobalTransactionalInterceptor(failureHandlerHook); + ConfigurationCache.addConfigListener( + ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION, + (ConfigurationChangeListener)globalTransactionalInterceptor); } + interceptor = globalTransactionalInterceptor; } LOGGER.info("Bean[{}] with name [{}] would use interceptor [{}]", bean.getClass().getName(), beanName, interceptor.getClass().getName()); From 30675548f71e393fcdb45ad280fe996bd93f247b Mon Sep 17 00:00:00 2001 From: Dmego Date: Mon, 1 Feb 2021 15:46:05 +0800 Subject: [PATCH 52/93] bugfix: oracle and postgreSQL can't query column info(#3496) (#3500) --- .../storage/db/store/LogStoreDataBaseDAO.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/io/seata/server/storage/db/store/LogStoreDataBaseDAO.java b/server/src/main/java/io/seata/server/storage/db/store/LogStoreDataBaseDAO.java index a9f8585f24c..351b6462280 100644 --- a/server/src/main/java/io/seata/server/storage/db/store/LogStoreDataBaseDAO.java +++ b/server/src/main/java/io/seata/server/storage/db/store/LogStoreDataBaseDAO.java @@ -465,7 +465,7 @@ private ColumnInfo queryTableStructure(final String tableName, String colName) { while (tableRs.next()) { String table = tableRs.getString("TABLE_NAME"); if (StringUtils.equalsIgnoreCase(table, tableName)) { - ResultSet columnRs = conn.getMetaData().getColumns(null, schema, tableName, null); + ResultSet columnRs = conn.getMetaData().getColumns(null, schema, table, null); while (columnRs.next()) { ColumnInfo info = new ColumnInfo(); String columnName = columnRs.getString("COLUMN_NAME"); @@ -492,8 +492,21 @@ private ColumnInfo queryTableStructure(final String tableName, String colName) { private String getSchema(Connection conn) throws SQLException { if ("h2".equalsIgnoreCase(dbType)) { return null; + } else if ("postgresql".equalsIgnoreCase(dbType)) { + String sql = "select current_schema"; + try (PreparedStatement ps = conn.prepareStatement(sql); + ResultSet rs = ps.executeQuery()) { + String schema = null; + if (rs.next()) { + schema = rs.getString(1); + } + return schema; + } catch (SQLException e) { + throw new StoreException(e); + } + } else { + return conn.getMetaData().getUserName(); } - return conn.getMetaData().getUserName(); } /** From 863e68a24fa7ead99f173605ede3d8d363b75d92 Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Mon, 1 Feb 2021 19:43:58 -0600 Subject: [PATCH 53/93] bugfix: reduce unnecessary competition and remove missing locks (#3448) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 3 +- .../store/db/AbstractDataSourceProvider.java | 2 +- .../storage/redis/JedisPooledFactory.java | 2 +- .../storage/redis/lock/RedisLocker.java | 30 +++++++++---------- 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 8ef5d4dc6ad..5afd994cb1a 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -33,6 +33,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3241](https://github.com/seata/seata/pull/3241)] 禁止在多SQL的情况下使用 limit 和 order by 语法 - [[#3406](https://github.com/seata/seata/pull/3406)] 修复当config.txt中包含特殊字符时,键值对无法被推上nacos - [[#3418](https://github.com/seata/seata/pull/3418)] 修复 getGeneratedKeys 可能会取到历史的主键的问题 + - [[#3448](https://github.com/seata/seata/pull/3448)] 修复多个锁竞争失败时,仅删除单个锁,并优化锁竞争逻辑提升处理性能 - [[#3408](https://github.com/seata/seata/pull/3408)] 修复jar运行模式, 当第三方依赖分开打包时, this.getClass().getClassLoader()是null, 会报空指针异常 - [[#3431](https://github.com/seata/seata/pull/3431)] 修复在读取配置时Property Bean可能还未初始化 - [[#3413](https://github.com/seata/seata/pull/3413)] 修复回滚到savepoint以及releaseSavepoint的逻辑 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 22c9d70495c..0950259c5c0 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -36,6 +36,7 @@ - [[#3408](https://github.com/seata/seata/pull/3408)] run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null - [[#3431](https://github.com/seata/seata/pull/3431)] fix property bean may not be initialized when reading configuration - [[#3413](https://github.com/seata/seata/pull/3413)] fix the logic of rollback to savepoint and release to savepoint + - [[#3448](https://github.com/seata/seata/pull/3448)] reduce unnecessary competition and remove missing locks - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` - [[#3451](https://github.com/seata/seata/pull/3451)] fix set auto-commit to true when local transactions are not being used. Failure to compete for a lock causes the global transaction to exit, invaliding the global row lock and dirty writing of the data. - [[#3481](https://github.com/seata/seata/pull/3481)] fix seata node refresh failure because consul crash @@ -108,4 +109,4 @@ - **Release:** https://github.com/seata/seata/releases - **WebSite:** https://seata.io - + \ No newline at end of file diff --git a/core/src/main/java/io/seata/core/store/db/AbstractDataSourceProvider.java b/core/src/main/java/io/seata/core/store/db/AbstractDataSourceProvider.java index bc2a106f384..45c0d69094b 100644 --- a/core/src/main/java/io/seata/core/store/db/AbstractDataSourceProvider.java +++ b/core/src/main/java/io/seata/core/store/db/AbstractDataSourceProvider.java @@ -205,7 +205,7 @@ protected String getPassword() { password = ConfigTools.publicDecrypt(password, publicKey); } catch (Exception e) { LOGGER.error( - "decryption failed,please confirm whether the ciphertext and secret key are correct! error msg: ", + "decryption failed,please confirm whether the ciphertext and secret key are correct! error msg: {}", e.getMessage()); } } diff --git a/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java b/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java index 6f2b02405f7..d3d14c91113 100644 --- a/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java +++ b/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java @@ -84,7 +84,7 @@ public static JedisPoolAbstract getJedisPoolInstance(JedisPoolAbstract... jedisP password = ConfigTools.publicDecrypt(password, publicKey); } catch (Exception e) { LOGGER.error( - "decryption failed,please confirm whether the ciphertext and secret key are correct! error msg: ", + "decryption failed,please confirm whether the ciphertext and secret key are correct! error msg: {}", e.getMessage()); } } diff --git a/server/src/main/java/io/seata/server/storage/redis/lock/RedisLocker.java b/server/src/main/java/io/seata/server/storage/redis/lock/RedisLocker.java index 4febb425b41..7aa6ab7b722 100644 --- a/server/src/main/java/io/seata/server/storage/redis/lock/RedisLocker.java +++ b/server/src/main/java/io/seata/server/storage/redis/lock/RedisLocker.java @@ -15,16 +15,16 @@ */ package io.seata.server.storage.redis.lock; -import com.google.common.collect.Lists; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.Map; -import java.util.HashMap; +import java.util.Objects; +import java.util.Set; import java.util.StringJoiner; import java.util.stream.Collectors; - +import com.google.common.collect.Lists; import io.seata.common.util.CollectionUtils; import io.seata.common.util.LambdaUtils; import io.seata.common.util.StringUtils; @@ -35,6 +35,7 @@ import redis.clients.jedis.Jedis; import redis.clients.jedis.Pipeline; + import static io.seata.common.Constants.ROW_LOCK_KEY_SPLIT_CHAR; /** @@ -78,7 +79,6 @@ public boolean acquireLock(List rowLocks) { if (CollectionUtils.isEmpty(rowLocks)) { return true; } - Integer status = SUCCEED; String needLockXid = rowLocks.get(0).getXid(); Long branchId = rowLocks.get(0).getBranchId(); @@ -119,29 +119,29 @@ public boolean acquireLock(List rowLocks) { pipeline.hsetnx(key, XID, value.getXid()); pipeline.hsetnx(key, TRANSACTION_ID, value.getTransactionId().toString()); pipeline.hsetnx(key, BRANCH_ID, value.getBranchId().toString()); - pipeline.hsetnx(key, RESOURCE_ID, value.getResourceId()); - pipeline.hsetnx(key, TABLE_NAME, value.getTableName()); - pipeline.hsetnx(key, ROW_KEY, value.getRowKey()); - pipeline.hsetnx(key, PK, value.getPk()); + pipeline.hset(key, ROW_KEY, value.getRowKey()); + pipeline.hset(key, RESOURCE_ID, value.getResourceId()); + pipeline.hset(key, TABLE_NAME, value.getTableName()); + pipeline.hset(key, PK, value.getPk()); readyKeys.add(key); }); List results = (List) (List) pipeline.syncAndReturnAll(); List> partitions = Lists.partition(results, 7); - String[] success = new String[partitions.size()]; + ArrayList success = new ArrayList<>(partitions.size()); + Integer status = SUCCEED; for (int i = 0; i < partitions.size(); i++) { - String key = readyKeys.get(i); - if (partitions.get(i).contains(FAILED)) { + if (Objects.equals(partitions.get(i).get(0),FAILED)) { status = FAILED; } else { - success[0] = key; + success.add(readyKeys.get(i)); } } //If someone has failed,all the lockkey which has been added need to be delete. if (FAILED.equals(status)) { - if (success.length > 0) { - jedis.del(success); + if (success.size() > 0) { + jedis.del(success.toArray(new String[0])); } return false; } From 092718b9c79e92219cde70509f7808942813929e Mon Sep 17 00:00:00 2001 From: Brent Date: Thu, 4 Feb 2021 14:07:34 +0800 Subject: [PATCH 54/93] feature: add transaction service group for metric (#3486) --- changes/1.5.0.md | 8 +- changes/en-us/1.5.0.md | 3 + .../core/event/GlobalTransactionEvent.java | 14 ++- .../java/io/seata/metrics/IdConstants.java | 2 + .../coordinator/DefaultCoordinator.java | 10 ++- .../seata/server/coordinator/DefaultCore.java | 25 +++--- .../server/metrics/MetricsSubscriber.java | 64 +++++++++----- .../DefaultCoordinatorMetricsTest.java | 87 ++++++++++--------- 8 files changed, 130 insertions(+), 83 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 5afd994cb1a..feb1b415c2a 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -24,7 +24,8 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#2667](https://github.com/seata/seata/pull/2667)] 支持db和redis密码加解密 - [[#3427](https://github.com/seata/seata/pull/3427)] 添加分布式锁接口 - [[#3443](https://github.com/seata/seata/pull/3443)] 将`seata-server`的日志发送到`logstash`或`kafka`中,再存入`ElasticSearch` - + - [[#3486](https://github.com/seata/seata/pull/3486)] Metrics增加事务分组属性 + ### bugfix: @@ -70,6 +71,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3485](https://github.com/seata/seata/pull/3485)] 优化 ConfigurationFactory 中无用的try/catch - [[#3505](https://github.com/seata/seata/pull/3505)] 优化GlobalTransactionScanner类中无用的if判断 + ### test - [[#3381](https://github.com/seata/seata/pull/3381)] 添加 TmClient 的测试用例 @@ -97,8 +99,8 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [xyz327](https://github.com/xyz327) - [13414850431](https://github.com/13414850431) - [github-ganyu](https://github.com/github-ganyu) - - + - [xuande](https://github.com/xuande) + 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 0950259c5c0..e4afaf06b6b 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -24,6 +24,7 @@ - [[#2667](https://github.com/seata/seata/pull/2667)] support password decryption - [[#3427](https://github.com/seata/seata/pull/3427)] add distributed lock interface - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` + - [[#3486](https://github.com/seata/seata/pull/3486)] add transaction service group for metric ### bugfix: @@ -99,6 +100,8 @@ - [xyz327](https://github.com/xyz327) - [13414850431](https://github.com/13414850431) - [github-ganyu](https://github.com/github-ganyu) + - [xuande](https://github.com/xuande) + Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/core/src/main/java/io/seata/core/event/GlobalTransactionEvent.java b/core/src/main/java/io/seata/core/event/GlobalTransactionEvent.java index d99166f1fae..bf209ce15e5 100644 --- a/core/src/main/java/io/seata/core/event/GlobalTransactionEvent.java +++ b/core/src/main/java/io/seata/core/event/GlobalTransactionEvent.java @@ -48,6 +48,11 @@ public class GlobalTransactionEvent implements Event { * business applicationId */ private String applicationId; + + /** + * Transaction Service Group + */ + private String group; /** * Transaction Begin Time @@ -79,6 +84,10 @@ public String getName() { public String getApplicationId() { return applicationId; } + + public String getGroup() { + return group; + } public Long getBeginTime() { return beginTime; @@ -92,12 +101,13 @@ public GlobalStatus getStatus() { return status; } - public GlobalTransactionEvent(long id, String role, String name, String applicationId, Long beginTime, Long endTime, - GlobalStatus status) { + public GlobalTransactionEvent(long id, String role, String name, String applicationId, + String group, Long beginTime, Long endTime, GlobalStatus status) { this.id = id; this.role = role; this.name = name; this.applicationId = applicationId; + this.group = group; this.beginTime = beginTime; this.endTime = endTime; this.status = status; diff --git a/metrics/seata-metrics-api/src/main/java/io/seata/metrics/IdConstants.java b/metrics/seata-metrics-api/src/main/java/io/seata/metrics/IdConstants.java index 241b705850d..a1445c2b77d 100644 --- a/metrics/seata-metrics-api/src/main/java/io/seata/metrics/IdConstants.java +++ b/metrics/seata-metrics-api/src/main/java/io/seata/metrics/IdConstants.java @@ -24,6 +24,8 @@ public interface IdConstants { String SEATA_TRANSACTION = "seata.transaction"; String APP_ID_KEY = "applicationId"; + + String GROUP_KEY = "group"; String NAME_KEY = "name"; diff --git a/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java b/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java index 70456dc8518..7f289cb03c2 100644 --- a/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java +++ b/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java @@ -245,10 +245,12 @@ protected void timeoutCheck() throws TransactionException { globalSession.changeStatus(GlobalStatus.TimeoutRollbacking); // transaction timeout and start rollbacking event - eventBus.post( - new GlobalTransactionEvent(globalSession.getTransactionId(), GlobalTransactionEvent.ROLE_TC, - globalSession.getTransactionName(), globalSession.getApplicationId(), - globalSession.getBeginTime(), null, globalSession.getStatus())); + eventBus.post(new GlobalTransactionEvent(globalSession.getTransactionId(), + GlobalTransactionEvent.ROLE_TC, + globalSession.getTransactionName(), + globalSession.getApplicationId(), + globalSession.getTransactionServiceGroup(), + globalSession.getBeginTime(), null, globalSession.getStatus())); return true; }); diff --git a/server/src/main/java/io/seata/server/coordinator/DefaultCore.java b/server/src/main/java/io/seata/server/coordinator/DefaultCore.java index 4c80c9b7cde..f2b824682f2 100644 --- a/server/src/main/java/io/seata/server/coordinator/DefaultCore.java +++ b/server/src/main/java/io/seata/server/coordinator/DefaultCore.java @@ -135,7 +135,7 @@ public String begin(String applicationId, String transactionServiceGroup, String // transaction start event eventBus.post(new GlobalTransactionEvent(session.getTransactionId(), GlobalTransactionEvent.ROLE_TC, - session.getTransactionName(), applicationId, session.getBeginTime(), null, session.getStatus())); + session.getTransactionName(), applicationId, transactionServiceGroup, session.getBeginTime(), null, session.getStatus())); return session.getXid(); } @@ -183,8 +183,8 @@ public boolean doGlobalCommit(GlobalSession globalSession, boolean retrying) thr boolean success = true; // start committing event eventBus.post(new GlobalTransactionEvent(globalSession.getTransactionId(), GlobalTransactionEvent.ROLE_TC, - globalSession.getTransactionName(), globalSession.getApplicationId(), globalSession.getBeginTime(), - null, globalSession.getStatus())); + globalSession.getTransactionName(), globalSession.getApplicationId(), globalSession.getTransactionServiceGroup(), + globalSession.getBeginTime(), null, globalSession.getStatus())); if (globalSession.isSaga()) { success = getCore(BranchType.SAGA).doGlobalCommit(globalSession, retrying); @@ -259,8 +259,8 @@ public boolean doGlobalCommit(GlobalSession globalSession, boolean retrying) thr // committed event eventBus.post(new GlobalTransactionEvent(globalSession.getTransactionId(), GlobalTransactionEvent.ROLE_TC, - globalSession.getTransactionName(), globalSession.getApplicationId(), globalSession.getBeginTime(), - System.currentTimeMillis(), globalSession.getStatus())); + globalSession.getTransactionName(), globalSession.getApplicationId(), globalSession.getTransactionServiceGroup(), + globalSession.getBeginTime(), System.currentTimeMillis(), globalSession.getStatus())); LOGGER.info("Committing global transaction is successfully done, xid = {}.", globalSession.getXid()); } @@ -295,8 +295,10 @@ public GlobalStatus rollback(String xid) throws TransactionException { public boolean doGlobalRollback(GlobalSession globalSession, boolean retrying) throws TransactionException { boolean success = true; // start rollback event - eventBus.post(new GlobalTransactionEvent(globalSession.getTransactionId(), GlobalTransactionEvent.ROLE_TC, - globalSession.getTransactionName(), globalSession.getApplicationId(), globalSession.getBeginTime(), + eventBus.post(new GlobalTransactionEvent(globalSession.getTransactionId(), + GlobalTransactionEvent.ROLE_TC, globalSession.getTransactionName(), + globalSession.getApplicationId(), + globalSession.getTransactionServiceGroup(), globalSession.getBeginTime(), null, globalSession.getStatus())); if (globalSession.isSaga()) { @@ -357,9 +359,12 @@ public boolean doGlobalRollback(GlobalSession globalSession, boolean retrying) t SessionHelper.endRollbacked(globalSession); // rollbacked event - eventBus.post(new GlobalTransactionEvent(globalSession.getTransactionId(), GlobalTransactionEvent.ROLE_TC, - globalSession.getTransactionName(), globalSession.getApplicationId(), globalSession.getBeginTime(), - System.currentTimeMillis(), globalSession.getStatus())); + eventBus.post(new GlobalTransactionEvent(globalSession.getTransactionId(), + GlobalTransactionEvent.ROLE_TC, globalSession.getTransactionName(), + globalSession.getApplicationId(), + globalSession.getTransactionServiceGroup(), + globalSession.getBeginTime(), System.currentTimeMillis(), + globalSession.getStatus())); LOGGER.info("Rollback global transaction successfully, xid = {}.", globalSession.getXid()); } diff --git a/server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java b/server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java index 15406457e7a..5607112b977 100644 --- a/server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java +++ b/server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java @@ -26,6 +26,7 @@ import java.util.function.Consumer; import static io.seata.metrics.IdConstants.APP_ID_KEY; +import static io.seata.metrics.IdConstants.GROUP_KEY; /** * Event subscriber for metrics @@ -51,50 +52,65 @@ public MetricsSubscriber(Registry registry) { } private void processGlobalStatusBegin(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) - .increase(1); + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())).increase(1); } private void processGlobalStatusCommitted(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) - .decrease(1); - registry.getCounter(MeterIdConstants.COUNTER_COMMITTED.withTag(APP_ID_KEY, event.getApplicationId())) - .increase(1); - registry.getSummary(MeterIdConstants.SUMMARY_COMMITTED.withTag(APP_ID_KEY, event.getApplicationId())) - .increase(1); - registry.getTimer(MeterIdConstants.TIMER_COMMITTED.withTag(APP_ID_KEY, event.getApplicationId())) + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())).decrease(1); + registry.getCounter(MeterIdConstants.COUNTER_COMMITTED + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())).increase(1); + registry.getSummary(MeterIdConstants.SUMMARY_COMMITTED + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())).increase(1); + registry.getTimer(MeterIdConstants.TIMER_COMMITTED + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())) .record(event.getEndTime() - event.getBeginTime(), TimeUnit.MILLISECONDS); } private void processGlobalStatusRollbacked(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) - .decrease(1); - registry.getCounter(MeterIdConstants.COUNTER_ROLLBACKED.withTag(APP_ID_KEY, event.getApplicationId())) - .increase(1); - registry.getSummary(MeterIdConstants.SUMMARY_ROLLBACKED.withTag(APP_ID_KEY, event.getApplicationId())) - .increase(1); - registry.getTimer(MeterIdConstants.TIMER_ROLLBACK.withTag(APP_ID_KEY, event.getApplicationId())) + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())).decrease(1); + registry.getCounter(MeterIdConstants.COUNTER_ROLLBACKED + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())).increase(1); + registry.getSummary(MeterIdConstants.SUMMARY_ROLLBACKED + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())).increase(1); + registry.getTimer(MeterIdConstants.TIMER_ROLLBACK + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())) .record(event.getEndTime() - event.getBeginTime(), TimeUnit.MILLISECONDS); } private void processGlobalStatusCommitFailed(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) - .decrease(1); + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())).decrease(1); } private void processGlobalStatusRollbackFailed(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) - .decrease(1); + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())).decrease(1); } private void processGlobalStatusTimeoutRollbacked(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) - .decrease(1); + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())).decrease(1); } private void processGlobalStatusTimeoutRollbackFailed(GlobalTransactionEvent event) { - registry.getCounter(MeterIdConstants.COUNTER_ACTIVE.withTag(APP_ID_KEY, event.getApplicationId())) - .decrease(1); + registry.getCounter(MeterIdConstants.COUNTER_ACTIVE + .withTag(APP_ID_KEY, event.getApplicationId()) + .withTag(GROUP_KEY, event.getGroup())).decrease(1); } @Subscribe diff --git a/server/src/test/java/io/seata/server/coordinator/DefaultCoordinatorMetricsTest.java b/server/src/test/java/io/seata/server/coordinator/DefaultCoordinatorMetricsTest.java index 93ab0ca3ad0..0d0c2011e4e 100644 --- a/server/src/test/java/io/seata/server/coordinator/DefaultCoordinatorMetricsTest.java +++ b/server/src/test/java/io/seata/server/coordinator/DefaultCoordinatorMetricsTest.java @@ -62,8 +62,9 @@ public void test() throws IOException, TransactionException, InterruptedExceptio measurement -> measurements.put(measurement.getId().toString(), measurement)); Assertions.assertEquals(1, measurements.size()); - Assertions.assertEquals(1, - measurements.get("seata.transaction(applicationId=null,meter=counter,role=tc,status=active)").getValue(), 0); + Assertions.assertEquals(1, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=counter,role=tc,status=active)") + .getValue(), 0); //commit this transaction GlobalCommitRequest commitRequest = new GlobalCommitRequest(); @@ -77,19 +78,21 @@ public void test() throws IOException, TransactionException, InterruptedExceptio MetricsManager.get().getRegistry().measure().forEach( measurement -> measurements.put(measurement.getId().toString(), measurement)); Assertions.assertEquals(9, measurements.size()); - Assertions.assertEquals(0, - measurements.get("seata.transaction(applicationId=null,meter=counter,role=tc,status=active)").getValue(), 0); - Assertions - .assertEquals(1, measurements.get("seata.transaction(applicationId=null,meter=counter,role=tc,status=committed)").getValue(), - 0); - Assertions.assertEquals(1, - measurements.get("seata.transaction(applicationId=null,meter=summary,role=tc,statistic=count,status=committed)").getValue(), - 0); - Assertions.assertEquals(1, - measurements.get("seata.transaction(applicationId=null,meter=summary,role=tc,statistic=total,status=committed)").getValue(), - 0); - Assertions.assertEquals(1, - measurements.get("seata.transaction(applicationId=null,meter=timer,role=tc,statistic=count,status=committed)").getValue(), 0); + Assertions.assertEquals(0, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=counter,role=tc,status=active)") + .getValue(), 0); + Assertions.assertEquals(1, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=counter,role=tc,status=committed)") + .getValue(), 0); + Assertions.assertEquals(1, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=summary,role=tc,statistic=count,status=committed)") + .getValue(), 0); + Assertions.assertEquals(1, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=summary,role=tc,statistic=total,status=committed)") + .getValue(), 0); + Assertions.assertEquals(1, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=timer,role=tc,statistic=count,status=committed)") + .getValue(), 0); //start another new transaction request = new GlobalBeginRequest(); @@ -108,31 +111,35 @@ public void test() throws IOException, TransactionException, InterruptedExceptio MetricsManager.get().getRegistry().measure().forEach( measurement -> measurements.put(measurement.getId().toString(), measurement)); Assertions.assertEquals(17, measurements.size()); - Assertions.assertEquals(0, - measurements.get("seata.transaction(applicationId=null,meter=counter,role=tc,status=active)").getValue(), 0); - - Assertions - .assertEquals(1, measurements.get("seata.transaction(applicationId=null,meter=counter,role=tc,status=committed)").getValue(), - 0); - Assertions.assertEquals(0, - measurements.get("seata.transaction(applicationId=null,meter=summary,role=tc,statistic=count,status=committed)").getValue(), - 0); - Assertions.assertEquals(0, - measurements.get("seata.transaction(applicationId=null,meter=summary,role=tc,statistic=total,status=committed)").getValue(), - 0); - Assertions.assertEquals(0, - measurements.get("seata.transaction(applicationId=null,meter=timer,role=tc,statistic=count,status=committed)").getValue(), 0); - - Assertions.assertEquals(1, - measurements.get("seata.transaction(applicationId=null,meter=counter,role=tc,status=rollbacked)").getValue(), 0); - Assertions.assertEquals(1, - measurements.get("seata.transaction(applicationId=null,meter=summary,role=tc,statistic=count,status=rollbacked)").getValue(), - 0); - Assertions.assertEquals(1, - measurements.get("seata.transaction(applicationId=null,meter=summary,role=tc,statistic=total,status=rollbacked)").getValue(), - 0); - Assertions.assertEquals(1, - measurements.get("seata.transaction(applicationId=null,meter=timer,role=tc,statistic=count,status=rollbacked)").getValue(), 0); + Assertions.assertEquals(0, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=counter,role=tc,status=active)") + .getValue(), 0); + + Assertions.assertEquals(1, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=counter,role=tc,status=committed)") + .getValue(), 0); + Assertions.assertEquals(0, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=summary,role=tc,statistic=count,status=committed)") + .getValue(), 0); + Assertions.assertEquals(0, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=summary,role=tc,statistic=total,status=committed)") + .getValue(), 0); + Assertions.assertEquals(0, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=timer,role=tc,statistic=count,status=committed)") + .getValue(), 0); + + Assertions.assertEquals(1, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=counter,role=tc,status=rollbacked)") + .getValue(), 0); + Assertions.assertEquals(1, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=summary,role=tc,statistic=count,status=rollbacked)") + .getValue(), 0); + Assertions.assertEquals(1, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=summary,role=tc,statistic=total,status=rollbacked)") + .getValue(), 0); + Assertions.assertEquals(1, measurements.get( + "seata.transaction(applicationId=null,group=null,meter=timer,role=tc,statistic=count,status=rollbacked)") + .getValue(), 0); } finally { coordinator.destroy(); SessionHolder.destroy(); From dac15bf62c50f88ffa30eb884a93890c8d371684 Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Thu, 4 Feb 2021 19:52:04 -0600 Subject: [PATCH 55/93] bugfix: when the xa branch is rollback, it cannot be executed due to idle state (#3367) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 4 +- .../rm/datasource/xa/ConnectionProxyXA.java | 45 +++++++++++-------- .../rm/datasource/xa/ResourceManagerXA.java | 2 +- 4 files changed, 31 insertions(+), 21 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index feb1b415c2a..d7380fe34d0 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -33,6 +33,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3293](https://github.com/seata/seata/pull/3293)] 修复配置缓存获取值时类型不匹配的bug - [[#3241](https://github.com/seata/seata/pull/3241)] 禁止在多SQL的情况下使用 limit 和 order by 语法 - [[#3406](https://github.com/seata/seata/pull/3406)] 修复当config.txt中包含特殊字符时,键值对无法被推上nacos + - [[#3367](https://github.com/seata/seata/pull/3367)] 修复最后一个XA分支二阶段时偶发无法回滚的异常 - [[#3418](https://github.com/seata/seata/pull/3418)] 修复 getGeneratedKeys 可能会取到历史的主键的问题 - [[#3448](https://github.com/seata/seata/pull/3448)] 修复多个锁竞争失败时,仅删除单个锁,并优化锁竞争逻辑提升处理性能 - [[#3408](https://github.com/seata/seata/pull/3408)] 修复jar运行模式, 当第三方依赖分开打包时, this.getClass().getClassLoader()是null, 会报空指针异常 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index e4afaf06b6b..729eec9b930 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -37,6 +37,7 @@ - [[#3408](https://github.com/seata/seata/pull/3408)] run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null - [[#3431](https://github.com/seata/seata/pull/3431)] fix property bean may not be initialized when reading configuration - [[#3413](https://github.com/seata/seata/pull/3413)] fix the logic of rollback to savepoint and release to savepoint + - [[#3367](https://github.com/seata/seata/pull/3367)] when the xa branch is rollback, it cannot be executed due to idle state - [[#3448](https://github.com/seata/seata/pull/3448)] reduce unnecessary competition and remove missing locks - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` - [[#3451](https://github.com/seata/seata/pull/3451)] fix set auto-commit to true when local transactions are not being used. Failure to compete for a lock causes the global transaction to exit, invaliding the global row lock and dirty writing of the data. @@ -112,4 +113,5 @@ - **Release:** https://github.com/seata/seata/releases - **WebSite:** https://seata.io - \ No newline at end of file + + diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java index 9f3e649ac4d..e054390ceef 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java @@ -15,6 +15,12 @@ */ package io.seata.rm.datasource.xa; +import java.sql.Connection; +import java.sql.SQLException; +import javax.sql.XAConnection; +import javax.transaction.xa.XAException; +import javax.transaction.xa.XAResource; + import com.alibaba.druid.util.JdbcUtils; import io.seata.core.exception.TransactionException; import io.seata.core.model.BranchStatus; @@ -24,12 +30,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.sql.XAConnection; -import javax.transaction.xa.XAException; -import javax.transaction.xa.XAResource; -import java.sql.Connection; -import java.sql.SQLException; - /** * Connection proxy for XA mode. * @@ -105,9 +105,17 @@ public void xaCommit(String xid, long branchId, String applicationData) throws X */ public void xaRollback(String xid, long branchId, String applicationData) throws XAException { XAXid xaXid = XAXidBuilder.build(xid, branchId); + xaRollback(xaXid); + } + + /** + * XA rollback + * @param xaXid + * @throws XAException + */ + public void xaRollback(XAXid xaXid) throws XAException { xaResource.rollback(xaXid); releaseIfNecessary(); - } @Override @@ -201,22 +209,21 @@ public void rollback() throws SQLException { if (!xaActive || this.xaBranchXid == null) { throw new SQLException("should NOT rollback on an inactive session"); } - try { - // Branch Report to TC - DefaultResourceManager.get().branchReport(BranchType.XA, xid, xaBranchXid.getBranchId(), BranchStatus.PhaseOne_Failed, null); - - } catch (TransactionException te) { - // log and ignore the report failure - LOGGER.warn("Failed to report XA branch rollback on " + xid + "-" + xaBranchXid.getBranchId() - + " since " + te.getCode() + ":" + te.getMessage()); - } try { // XA End: Fail xaResource.end(xaBranchXid, XAResource.TMFAIL); + xaRollback(xaBranchXid); + // Branch Report to TC + DefaultResourceManager.get().branchReport(BranchType.XA, xid, xaBranchXid.getBranchId(), + BranchStatus.PhaseOne_Failed, null); + LOGGER.info(xaBranchXid + " was rollbacked"); } catch (XAException xe) { - throw new SQLException( - "Failed to end(TMFAIL) xa branch on " + xid + "-" + xaBranchXid.getBranchId() + " since " + xe - .getMessage(), xe); + throw new SQLException("Failed to end(TMFAIL) xa branch on " + xid + "-" + xaBranchXid.getBranchId() + + " since " + xe.getMessage(), xe); + } catch (TransactionException te) { + // log and ignore the report failure + LOGGER.warn("Failed to report XA branch rollback on " + xid + "-" + xaBranchXid.getBranchId() + " since " + + te.getCode() + ":" + te.getMessage()); } finally { cleanXABranchContext(); } diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ResourceManagerXA.java b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ResourceManagerXA.java index 92c1efaaea8..c1a1c92ad54 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ResourceManagerXA.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ResourceManagerXA.java @@ -70,7 +70,7 @@ private BranchStatus finishBranch(boolean committed, BranchType branchType, Stri return BranchStatus.PhaseTwo_Committed; } else { connectionProxyXA.xaRollback(xid, branchId, applicationData); - LOGGER.info(xaBranchXid + " was rolled back."); + LOGGER.info(xaBranchXid + " was rollbacked"); return BranchStatus.PhaseTwo_Rollbacked; } } catch (XAException | SQLException sqle) { From 88c7dadbec3bd02f0e2a8e186457055f129c484e Mon Sep 17 00:00:00 2001 From: sustly <45623380+sustly@users.noreply.github.com> Date: Sat, 6 Feb 2021 17:18:11 +0800 Subject: [PATCH 56/93] bugfix: fix can not get update columns with database name (#3402) --- .../druid/mysql/MySQLUpdateRecognizer.java | 3 ++ .../druid/oracle/OracleUpdateRecognizer.java | 3 ++ .../PostgresqlUpdateRecognizer.java | 3 ++ .../druid/MySQLUpdateRecognizerTest.java | 31 +++++++++++++++++++ 4 files changed, 40 insertions(+) diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java index 5f01571dad4..1dc1935a414 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java @@ -72,6 +72,9 @@ public List getUpdateColumns() { SQLExpr owner = ((SQLPropertyExpr)expr).getOwner(); if (owner instanceof SQLIdentifierExpr) { list.add(((SQLIdentifierExpr)owner).getName() + "." + ((SQLPropertyExpr)expr).getName()); + //This is table Field Full path, like update xxx_database.xxx_tbl set xxx_database.xxx_tbl.xxx_field... + } else if (((SQLPropertyExpr)expr).getOwnernName().split("\\.").length > 1) { + list.add(((SQLPropertyExpr)expr).getOwnernName() + "." + ((SQLPropertyExpr)expr).getName()); } } else { throw new SQLParsingException("Unknown SQLExpr: " + expr.getClass() + " " + expr); diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java index fd78b26e9c5..896f7ec912b 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java @@ -72,6 +72,9 @@ public List getUpdateColumns() { SQLExpr owner = ((SQLPropertyExpr)expr).getOwner(); if (owner instanceof SQLIdentifierExpr) { list.add(((SQLIdentifierExpr)owner).getName() + "." + ((SQLPropertyExpr)expr).getName()); + //This is table Field Full path, like update xxx_database.xxx_tbl set xxx_database.xxx_tbl.xxx_field... + } else if (((SQLPropertyExpr) expr).getOwnernName().split("\\.").length > 1) { + list.add(((SQLPropertyExpr)expr).getOwnernName() + "." + ((SQLPropertyExpr)expr).getName()); } } else { throw new SQLParsingException("Unknown SQLExpr: " + expr.getClass() + " " + expr); diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java index a7b7752b3d0..715c58ee94a 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java @@ -68,6 +68,9 @@ public List getUpdateColumns() { SQLExpr owner = ((SQLPropertyExpr) expr).getOwner(); if (owner instanceof SQLIdentifierExpr) { list.add(((SQLIdentifierExpr) owner).getName() + "." + ((SQLPropertyExpr) expr).getName()); + //This is table Field Full path, like update xxx_database.xxx_tbl set xxx_database.xxx_tbl.xxx_field... + } else if (((SQLPropertyExpr) expr).getOwnernName().split("\\.").length > 1) { + list.add(((SQLPropertyExpr)expr).getOwnernName() + "." + ((SQLPropertyExpr)expr).getName()); } } else { throw new SQLParsingException("Unknown SQLExpr: " + expr.getClass() + " " + expr); diff --git a/sqlparser/seata-sqlparser-druid/src/test/java/io/seata/sqlparser/druid/MySQLUpdateRecognizerTest.java b/sqlparser/seata-sqlparser-druid/src/test/java/io/seata/sqlparser/druid/MySQLUpdateRecognizerTest.java index 1aaecce66fb..4dbfea45fe4 100644 --- a/sqlparser/seata-sqlparser-druid/src/test/java/io/seata/sqlparser/druid/MySQLUpdateRecognizerTest.java +++ b/sqlparser/seata-sqlparser-druid/src/test/java/io/seata/sqlparser/druid/MySQLUpdateRecognizerTest.java @@ -280,6 +280,37 @@ public void testGetUpdateColumns() { }); } + + @Test + public void testGetUpdateDatabaseNameColumns() { + // test with normal + String sql = "update d.t set d.t.a = ?, d.t.b = ?, d.t.c = ?"; + List asts = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL); + MySQLUpdateRecognizer recognizer = new MySQLUpdateRecognizer(sql, asts.get(0)); + List updateColumns = recognizer.getUpdateColumns(); + Assertions.assertEquals(updateColumns.size(), 3); + + // test with alias + sql = "update t set a.a = ?, a.b = ?, a.c = ?"; + asts = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL); + recognizer = new MySQLUpdateRecognizer(sql, asts.get(0)); + updateColumns = recognizer.getUpdateColumns(); + Assertions.assertEquals(updateColumns.size(), 3); + + //test with error + Assertions.assertThrows(SQLParsingException.class, () -> { + String s = "update t set a = a"; + List sqlStatements = SQLUtils.parseStatements(s, JdbcConstants.MYSQL); + SQLUpdateStatement sqlUpdateStatement = (SQLUpdateStatement) sqlStatements.get(0); + List updateSetItems = sqlUpdateStatement.getItems(); + for (SQLUpdateSetItem updateSetItem : updateSetItems) { + updateSetItem.setColumn(new MySqlCharExpr()); + } + MySQLUpdateRecognizer oracleUpdateRecognizer = new MySQLUpdateRecognizer(s, sqlUpdateStatement); + oracleUpdateRecognizer.getUpdateColumns(); + }); + } + @Test public void testGetUpdateValues() { // test with normal From 8dc7b224e6aabd1e4a3cdd28f49ffd5110338fcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?WangLiang/=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Mon, 8 Feb 2021 14:59:24 +0800 Subject: [PATCH 57/93] optimize: opt the conditions for executing unlocking (#3236) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 3 ++ .../io/seata/config/FileConfiguration.java | 3 +- .../seata/server/session/GlobalSession.java | 39 ++++++++++++++----- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index d7380fe34d0..32746e99239 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -69,6 +69,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3441](https://github.com/seata/seata/pull/3441)] 优化starter的自动配置处理 - [[#3466](https://github.com/seata/seata/pull/3466)] 优化ExecuteTemplateXA类中判断XA不是最终状态的比较方式 - [[#3476](https://github.com/seata/seata/pull/3476)] 服务端参数传入hostname时将自动转换为ip + - [[#3236](https://github.com/seata/seata/pull/3236)] 优化执行解锁操作的条件,减少不必要的store操作。 - [[#3485](https://github.com/seata/seata/pull/3485)] 优化 ConfigurationFactory 中无用的try/catch - [[#3505](https://github.com/seata/seata/pull/3505)] 优化GlobalTransactionScanner类中无用的if判断 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 729eec9b930..7b4429fcb08 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -43,6 +43,8 @@ - [[#3451](https://github.com/seata/seata/pull/3451)] fix set auto-commit to true when local transactions are not being used. Failure to compete for a lock causes the global transaction to exit, invaliding the global row lock and dirty writing of the data. - [[#3481](https://github.com/seata/seata/pull/3481)] fix seata node refresh failure because consul crash - [[#3491](https://github.com/seata/seata/pull/3491)] fix typo in README.md + + ### optimize: - [[#3383](https://github.com/seata/seata/pull/3383)] optimize StatementProxyTest unit test @@ -68,6 +70,7 @@ - [[#3441](https://github.com/seata/seata/pull/3441)] optimize the auto-configuration processing of starter - [[#3466](https://github.com/seata/seata/pull/3466)] optimize the comparison in the ExecuteTemplateXa class to determine that XA is not the final state - [[#3476](https://github.com/seata/seata/pull/3476)] convert hostname to IP if necessary + - [[#3236](https://github.com/seata/seata/pull/3236)] optimize the conditions for executing unlocking - [[#3485](https://github.com/seata/seata/pull/3485)] optimize useless codes in ConfigurationFactory - [[#3505](https://github.com/seata/seata/pull/3505)] optimize useless if judgments in the GlobalTransactionScanner class diff --git a/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java b/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java index 899f40ea681..d129a1ffde8 100644 --- a/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java +++ b/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java @@ -378,7 +378,6 @@ class FileListener implements ConfigurationChangeListener { /** * Instantiates a new FileListener. - * */ FileListener() {} @@ -388,7 +387,7 @@ public synchronized void addListener(String dataId, ConfigurationChangeListener fileListener.onProcessEvent(new ConfigurationChangeEvent()); } - dataIdMap .computeIfAbsent(dataId, value -> new HashSet<>()).add(listener); + dataIdMap.computeIfAbsent(dataId, value -> new HashSet<>()).add(listener); } @Override diff --git a/server/src/main/java/io/seata/server/session/GlobalSession.java b/server/src/main/java/io/seata/server/session/GlobalSession.java index 174cde2c31f..02b8a93a62a 100644 --- a/server/src/main/java/io/seata/server/session/GlobalSession.java +++ b/server/src/main/java/io/seata/server/session/GlobalSession.java @@ -40,6 +40,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static io.seata.core.model.GlobalStatus.AsyncCommitting; +import static io.seata.core.model.GlobalStatus.CommitRetrying; +import static io.seata.core.model.GlobalStatus.Committing; + /** * The type Global session. * @@ -115,6 +119,20 @@ public boolean canBeCommittedAsync() { return true; } + /** + * Has AT branch + * + * @return the boolean + */ + public boolean hasATBranch() { + for (BranchSession branchSession : branchSessions) { + if (branchSession.getBranchType() == BranchType.AT) { + return true; + } + } + return false; + } + /** * Is saga type transaction * @@ -162,7 +180,6 @@ public void changeStatus(GlobalStatus status) throws TransactionException { for (SessionLifecycleListener lifecycleListener : lifecycleListeners) { lifecycleListener.onStatusChange(this, status); } - } @Override @@ -196,12 +213,14 @@ public void end() throws TransactionException { for (SessionLifecycleListener lifecycleListener : lifecycleListeners) { lifecycleListener.onEnd(this); } - } public void clean() throws TransactionException { - LockerManagerFactory.getLockManager().releaseGlobalSessionLock(this); - + if (this.hasATBranch()) { + if (!LockerManagerFactory.getLockManager().releaseGlobalSessionLock(this)) { + throw new TransactionException("UnLock globalSession error, xid = " + this.xid); + } + } } /** @@ -212,7 +231,6 @@ public void clean() throws TransactionException { public void closeAndClean() throws TransactionException { close(); clean(); - } /** @@ -244,8 +262,12 @@ public void addBranch(BranchSession branchSession) throws TransactionException { @Override public void removeBranch(BranchSession branchSession) throws TransactionException { - if (!branchSession.unlock()) { - throw new TransactionException("Unlock branch lock failed!"); + // do not unlock if global status in (Committing, CommitRetrying, AsyncCommitting), + // because it's already unlocked in 'DefaultCore.commit()' + if (status != Committing && status != CommitRetrying && status != AsyncCommitting) { + if (!branchSession.unlock()) { + throw new TransactionException("Unlock branch lock failed, xid = " + this.xid + ", branchId = " + branchSession.getBranchId()); + } } for (SessionLifecycleListener lifecycleListener : lifecycleListeners) { lifecycleListener.onRemoveBranch(this, branchSession); @@ -269,7 +291,6 @@ public BranchSession getBranch(long branchId) { return null; } - } /** @@ -468,7 +489,6 @@ public void setActive(boolean active) { @Override public byte[] encode() { - byte[] byApplicationIdBytes = applicationId != null ? applicationId.getBytes() : null; byte[] byServiceGroupBytes = transactionServiceGroup != null ? transactionServiceGroup.getBytes() : null; @@ -627,7 +647,6 @@ public void lock() throws TransactionException { public void unlock() { globalSessionLock.unlock(); } - } @FunctionalInterface From 20e21a1fd38f8e6c614db36e0f92228307b008f2 Mon Sep 17 00:00:00 2001 From: slinpq <45033339+slinpq@users.noreply.github.com> Date: Mon, 8 Feb 2021 15:07:14 +0800 Subject: [PATCH 58/93] feature:support configuring apolloService and apolloCluster (#3116) --- .../config/apollo/ApolloConfiguration.java | 33 +++++++++++++++---- server/src/main/resources/registry.conf | 3 ++ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/config/seata-config-apollo/src/main/java/io/seata/config/apollo/ApolloConfiguration.java b/config/seata-config-apollo/src/main/java/io/seata/config/apollo/ApolloConfiguration.java index 9cee6badd67..a0481ae1dab 100644 --- a/config/seata-config-apollo/src/main/java/io/seata/config/apollo/ApolloConfiguration.java +++ b/config/seata-config-apollo/src/main/java/io/seata/config/apollo/ApolloConfiguration.java @@ -55,9 +55,13 @@ public class ApolloConfiguration extends AbstractConfiguration { private static final String APP_ID = "appId"; private static final String APOLLO_META = "apolloMeta"; private static final String APOLLO_SECRET = "apolloAccesskeySecret"; + private static final String APOLLO_CLUSTER = "seata"; + private static final String APOLLO_CONFIG_SERVICE = "apolloConfigService"; private static final String PROP_APP_ID = "app.id"; private static final String PROP_APOLLO_META = "apollo.meta"; + private static final String PROP_APOLLO_CONFIG_SERVICE = "apollo.configService"; private static final String PROP_APOLLO_SECRET = "apollo.accesskey.secret"; + private static final String PROP_APOLLO_CLUSTER = "apollo.cluster"; private static final String NAMESPACE = "namespace"; private static final String DEFAULT_NAMESPACE = "application"; private static final Configuration FILE_CONFIG = ConfigurationFactory.CURRENT_FILE_INSTANCE; @@ -65,7 +69,7 @@ public class ApolloConfiguration extends AbstractConfiguration { private ExecutorService configOperateExecutor; private static final int CORE_CONFIG_OPERATE_THREAD = 1; private static final ConcurrentMap> LISTENER_SERVICE_MAP - = new ConcurrentHashMap<>(); + = new ConcurrentHashMap<>(); private static final int MAX_CONFIG_OPERATE_THREAD = 2; private static volatile ApolloConfiguration instance; @@ -76,9 +80,9 @@ private ApolloConfiguration() { if (config == null) { config = ConfigService.getConfig(FILE_CONFIG.getConfig(getApolloNamespaceKey(), DEFAULT_NAMESPACE)); configOperateExecutor = new ThreadPoolExecutor(CORE_CONFIG_OPERATE_THREAD, - MAX_CONFIG_OPERATE_THREAD, Integer.MAX_VALUE, TimeUnit.MILLISECONDS, - new LinkedBlockingQueue<>(), - new NamedThreadFactory("apolloConfigOperate", MAX_CONFIG_OPERATE_THREAD)); + MAX_CONFIG_OPERATE_THREAD, Integer.MAX_VALUE, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue<>(), + new NamedThreadFactory("apolloConfigOperate", MAX_CONFIG_OPERATE_THREAD)); config.addChangeListener(changeEvent -> { for (String key : changeEvent.changedKeys()) { if (!LISTENER_SERVICE_MAP.containsKey(key)) { @@ -86,7 +90,7 @@ private ApolloConfiguration() { } ConfigChange change = changeEvent.getChange(key); ConfigurationChangeEvent event = new ConfigurationChangeEvent(key, change.getNamespace(), - change.getOldValue(), change.getNewValue(), getChangeType(change.getChangeType())); + change.getOldValue(), change.getNewValue(), getChangeType(change.getChangeType())); LISTENER_SERVICE_MAP.get(key).forEach(listener -> listener.onProcessEvent(event)); } }); @@ -118,12 +122,12 @@ public String getLatestConfig(String dataId, String defaultValue, long timeoutMi return value; } ConfigFuture configFuture = new ConfigFuture(dataId, defaultValue, ConfigFuture.ConfigOperation.GET, - timeoutMills); + timeoutMills); configOperateExecutor.submit(() -> { String result = config.getProperty(dataId, defaultValue); configFuture.setResult(result); }); - return (String)configFuture.get(); + return (String) configFuture.get(); } @Override @@ -180,6 +184,12 @@ private void readyApolloConfig() { System.setProperty(PROP_APOLLO_SECRET, secretKey); } } + if (!properties.containsKey(APOLLO_CLUSTER)) { + System.setProperty(PROP_APOLLO_CLUSTER, FILE_CONFIG.getConfig(getApolloCluster())); + } + if (!properties.containsKey(APOLLO_CONFIG_SERVICE)) { + System.setProperty(PROP_APOLLO_CONFIG_SERVICE, FILE_CONFIG.getConfig(getApolloConfigService())); + } } @Override @@ -203,6 +213,15 @@ private static String getApolloNamespaceKey() { return String.join(FILE_CONFIG_SPLIT_CHAR, FILE_ROOT_CONFIG, REGISTRY_TYPE, NAMESPACE); } + private static String getApolloCluster() { + return String.join(FILE_CONFIG_SPLIT_CHAR, FILE_ROOT_CONFIG, REGISTRY_TYPE, APOLLO_CLUSTER); + } + + private static String getApolloConfigService() { + return String.join(FILE_CONFIG_SPLIT_CHAR, FILE_ROOT_CONFIG, REGISTRY_TYPE, APOLLO_CONFIG_SERVICE); + } + + private ConfigurationChangeType getChangeType(PropertyChangeType changeType) { switch (changeType) { case ADDED: diff --git a/server/src/main/resources/registry.conf b/server/src/main/resources/registry.conf index 7f0210050a1..e8869f812e4 100644 --- a/server/src/main/resources/registry.conf +++ b/server/src/main/resources/registry.conf @@ -72,9 +72,12 @@ config { } apollo { appId = "seata-server" + ## apolloConfigService will cover apolloMeta apolloMeta = "http://192.168.1.204:8801" + apolloConfigService = "http://192.168.1.204:8080" namespace = "application" apolloAccesskeySecret = "" + cluster = "seata" } zk { serverAddr = "127.0.0.1:2181" From e4c0683f6573b0a9f639933aa14ef6b2232c1eb3 Mon Sep 17 00:00:00 2001 From: Stella Yang <45187672+StellaiYang@users.noreply.github.com> Date: Tue, 16 Feb 2021 23:00:50 +0800 Subject: [PATCH 59/93] feature: add acl-token for consul (#3516) --- .../config/consul/ConsulConfiguration.java | 52 ++++++++++++------- .../consul/ConsulRegistryServiceImpl.java | 38 ++++++++++---- script/client/conf/registry.conf | 2 + script/client/spring/application.properties | 1 + script/client/spring/application.yml | 1 + .../config/ConfigConsulProperties.java | 9 ++++ .../registry/RegistryConsulProperties.java | 10 ++++ server/src/main/resources/registry.conf | 2 + 8 files changed, 84 insertions(+), 31 deletions(-) diff --git a/config/seata-config-consul/src/main/java/io/seata/config/consul/ConsulConfiguration.java b/config/seata-config-consul/src/main/java/io/seata/config/consul/ConsulConfiguration.java index 32eb23d7ec1..bd2fb0e1c47 100644 --- a/config/seata-config-consul/src/main/java/io/seata/config/consul/ConsulConfiguration.java +++ b/config/seata-config-consul/src/main/java/io/seata/config/consul/ConsulConfiguration.java @@ -56,13 +56,14 @@ public class ConsulConfiguration extends AbstractConfiguration { private static final Configuration FILE_CONFIG = ConfigurationFactory.CURRENT_FILE_INSTANCE; private static final String SERVER_ADDR_KEY = "serverAddr"; private static final String CONFIG_TYPE = "consul"; + private static final String ACL_TOKEN = "aclToken"; private static final String FILE_CONFIG_KEY_PREFIX = FILE_ROOT_CONFIG + FILE_CONFIG_SPLIT_CHAR + CONFIG_TYPE - + FILE_CONFIG_SPLIT_CHAR; + + FILE_CONFIG_SPLIT_CHAR; private static final int THREAD_POOL_NUM = 1; private static final int MAP_INITIAL_CAPACITY = 8; private ExecutorService consulNotifierExecutor; private ConcurrentMap> configListenersMap = new ConcurrentHashMap<>( - MAP_INITIAL_CAPACITY); + MAP_INITIAL_CAPACITY); /** * default watch timeout in second @@ -72,8 +73,8 @@ public class ConsulConfiguration extends AbstractConfiguration { private ConsulConfiguration() { consulNotifierExecutor = new ThreadPoolExecutor(THREAD_POOL_NUM, THREAD_POOL_NUM, Integer.MAX_VALUE, - TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), - new NamedThreadFactory("consul-config-executor", THREAD_POOL_NUM)); + TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), + new NamedThreadFactory("consul-config-executor", THREAD_POOL_NUM)); } /** @@ -99,36 +100,36 @@ public String getLatestConfig(String dataId, String defaultValue, long timeoutMi return value; } ConfigFuture configFuture = new ConfigFuture(dataId, defaultValue, ConfigFuture.ConfigOperation.GET, - timeoutMills); - consulNotifierExecutor.execute(() -> complete(getConsulClient().getKVValue(dataId), configFuture)); - return (String)configFuture.get(); + timeoutMills); + consulNotifierExecutor.execute(() -> complete(getConsulClient().getKVValue(dataId, getAclToken()), configFuture)); + return (String) configFuture.get(); } @Override public boolean putConfig(String dataId, String content, long timeoutMills) { ConfigFuture configFuture = new ConfigFuture(dataId, content, ConfigFuture.ConfigOperation.PUT, timeoutMills); - consulNotifierExecutor.execute(() -> complete(getConsulClient().setKVValue(dataId, content), configFuture)); - return (Boolean)configFuture.get(); + consulNotifierExecutor.execute(() -> complete(getConsulClient().setKVValue(dataId, content, getAclToken(), null), configFuture)); + return (Boolean) configFuture.get(); } @Override public boolean putConfigIfAbsent(String dataId, String content, long timeoutMills) { ConfigFuture configFuture = new ConfigFuture(dataId, content, ConfigFuture.ConfigOperation.PUTIFABSENT, - timeoutMills); + timeoutMills); consulNotifierExecutor.execute(() -> { PutParams putParams = new PutParams(); //Setting CAS to 0 means that this is an atomic operation, created when key does not exist. putParams.setCas(CAS); - complete(getConsulClient().setKVValue(dataId, content, putParams), configFuture); + complete(getConsulClient().setKVValue(dataId, content, getAclToken(), putParams), configFuture); }); - return (Boolean)configFuture.get(); + return (Boolean) configFuture.get(); } @Override public boolean removeConfig(String dataId, long timeoutMills) { ConfigFuture configFuture = new ConfigFuture(dataId, null, ConfigFuture.ConfigOperation.REMOVE, timeoutMills); - consulNotifierExecutor.execute(() -> complete(getConsulClient().deleteKVValue(dataId), configFuture)); - return (Boolean)configFuture.get(); + consulNotifierExecutor.execute(() -> complete(getConsulClient().deleteKVValue(dataId, getAclToken()), configFuture)); + return (Boolean) configFuture.get(); } @Override @@ -153,7 +154,7 @@ public void removeConfigListener(String dataId, ConfigurationChangeListener list if (CollectionUtils.isNotEmpty(configListeners)) { ConfigurationChangeListener target; for (ConfigurationChangeListener entry : configListeners) { - target = ((ConsulListener)entry).getTargetListener(); + target = ((ConsulListener) entry).getTargetListener(); if (listener.equals(target)) { entry.onShutDown(); configListeners.remove(entry); @@ -191,6 +192,17 @@ private static ConsulClient getConsulClient() { return client; } + /** + * get consul acl-token + * + * @return acl-token + */ + private static String getAclToken() { + String aclToken = StringUtils.isNotBlank(System.getProperty(ACL_TOKEN)) ? System.getProperty(ACL_TOKEN) + : FILE_CONFIG.getConfig(FILE_CONFIG_KEY_PREFIX + ACL_TOKEN); + return StringUtils.isNotBlank(aclToken) ? aclToken : null; + } + /** * complete the future * @@ -201,7 +213,7 @@ private void complete(Response response, ConfigFuture configFuture) { if (response != null && response.getValue() != null) { Object value = response.getValue(); if (value instanceof GetValue) { - configFuture.setResult(((GetValue)value).getDecodedValue()); + configFuture.setResult(((GetValue) value).getDecodedValue()); } else { configFuture.setResult(value); } @@ -217,8 +229,8 @@ public static class ConsulListener implements ConfigurationChangeListener { private final String dataId; private long consulIndex; private final ExecutorService executor = new ThreadPoolExecutor(CORE_LISTENER_THREAD, MAX_LISTENER_THREAD, 0L, - TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), - new NamedThreadFactory("consulListener", MAX_LISTENER_THREAD)); + TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), + new NamedThreadFactory("consulListener", MAX_LISTENER_THREAD)); /** * Instantiates a new Consul listener. @@ -229,7 +241,7 @@ public static class ConsulListener implements ConfigurationChangeListener { public ConsulListener(String dataId, ConfigurationChangeListener listener) { this.dataId = dataId; this.listener = listener; - this.consulIndex = getConsulClient().getKVValue(dataId).getConsulIndex(); + this.consulIndex = getConsulClient().getKVValue(dataId, getAclToken()).getConsulIndex(); } @Override @@ -237,7 +249,7 @@ public void onChangeEvent(ConfigurationChangeEvent event) { if (listener != null) { while (true) { QueryParams queryParams = new QueryParams(DEFAULT_WATCH_TIMEOUT, consulIndex); - Response response = getConsulClient().getKVValue(this.dataId, queryParams); + Response response = getConsulClient().getKVValue(this.dataId, getAclToken(), queryParams); Long currentIndex = response.getConsulIndex(); if (currentIndex != null && currentIndex > consulIndex) { GetValue getValue = response.getValue(); diff --git a/discovery/seata-discovery-consul/src/main/java/io/seata/discovery/registry/consul/ConsulRegistryServiceImpl.java b/discovery/seata-discovery-consul/src/main/java/io/seata/discovery/registry/consul/ConsulRegistryServiceImpl.java index 54211a7106e..afbaa1a8c32 100644 --- a/discovery/seata-discovery-consul/src/main/java/io/seata/discovery/registry/consul/ConsulRegistryServiceImpl.java +++ b/discovery/seata-discovery-consul/src/main/java/io/seata/discovery/registry/consul/ConsulRegistryServiceImpl.java @@ -25,7 +25,9 @@ import io.seata.common.util.NetUtil; import io.seata.config.Configuration; import io.seata.config.ConfigurationFactory; +import io.seata.config.ConfigurationKeys; import io.seata.discovery.registry.RegistryService; +import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,6 +61,7 @@ public class ConsulRegistryServiceImpl implements RegistryService> clusterAddressMap; @@ -93,8 +96,8 @@ private ConsulRegistryServiceImpl() { listenerMap = new ConcurrentHashMap<>(MAP_INITIAL_CAPACITY); notifiers = new ConcurrentHashMap<>(MAP_INITIAL_CAPACITY); notifierExecutor = new ThreadPoolExecutor(THREAD_POOL_NUM, THREAD_POOL_NUM, - Integer.MAX_VALUE, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), - new NamedThreadFactory("services-consul-notifier", THREAD_POOL_NUM)); + Integer.MAX_VALUE, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), + new NamedThreadFactory("services-consul-notifier", THREAD_POOL_NUM)); } /** @@ -116,13 +119,13 @@ static ConsulRegistryServiceImpl getInstance() { @Override public void register(InetSocketAddress address) throws Exception { NetUtil.validAddress(address); - getConsulClient().agentServiceRegister(createService(address)); + getConsulClient().agentServiceRegister(createService(address), getAclToken()); } @Override public void unregister(InetSocketAddress address) throws Exception { NetUtil.validAddress(address); - getConsulClient().agentServiceDeregister(createServiceId(address)); + getConsulClient().agentServiceDeregister(createServiceId(address), getAclToken()); } @Override @@ -200,6 +203,18 @@ private String createServiceId(InetSocketAddress address) { return getClusterName() + "-" + NetUtil.toStringAddress(address); } + /** + * get consul acl-token + * + * @return acl-token + */ + private static String getAclToken() { + String fileConfigKey = String.join(ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR, ConfigurationKeys.FILE_ROOT_REGISTRY, REGISTRY_TYPE, ACL_TOKEN); + String aclToken = StringUtils.isNotBlank(System.getProperty(ACL_TOKEN)) ? System.getProperty(ACL_TOKEN) + : FILE_CONFIG.getConfig(fileConfigKey); + return StringUtils.isNotBlank(aclToken) ? aclToken : null; + } + /** * create a new service * @@ -240,10 +255,11 @@ private NewService.Check createCheck(InetSocketAddress address) { */ private Response> getHealthyServices(String service, long index, long watchTimeout) { return getConsulClient().getHealthServices(service, HealthServicesRequest.newBuilder() - .setTag(SERVICE_TAG) - .setQueryParams(new QueryParams(watchTimeout, index)) - .setPassing(true) - .build()); + .setTag(SERVICE_TAG) + .setQueryParams(new QueryParams(watchTimeout, index)) + .setPassing(true) + .setToken(getAclToken()) + .build()); } /** @@ -273,9 +289,9 @@ private void refreshCluster(String cluster, List services) { return; } clusterAddressMap.put(cluster, services.stream() - .map(HealthService::getService) - .map(service -> new InetSocketAddress(service.getAddress(), service.getPort())) - .collect(Collectors.toList())); + .map(HealthService::getService) + .map(service -> new InetSocketAddress(service.getAddress(), service.getPort())) + .collect(Collectors.toList())); } /** diff --git a/script/client/conf/registry.conf b/script/client/conf/registry.conf index fc04bb37f05..b97cea8ee6a 100644 --- a/script/client/conf/registry.conf +++ b/script/client/conf/registry.conf @@ -31,6 +31,7 @@ registry { } consul { serverAddr = "127.0.0.1:8500" + aclToken = "" } etcd3 { serverAddr = "http://localhost:2379" @@ -64,6 +65,7 @@ config { } consul { serverAddr = "127.0.0.1:8500" + aclToken = "" } apollo { appId = "seata-server" diff --git a/script/client/spring/application.properties b/script/client/spring/application.properties index 340e8538295..35124df830e 100755 --- a/script/client/spring/application.properties +++ b/script/client/spring/application.properties @@ -70,6 +70,7 @@ seata.transport.enable-client-batch-send-request=true seata.config.type=file seata.config.consul.server-addr=127.0.0.1:8500 +seata.config.consul.acl-token= seata.config.apollo.apollo-meta=http://192.168.1.204:8801 seata.config.apollo.apollo-accesskey-secret= diff --git a/script/client/spring/application.yml b/script/client/spring/application.yml index 5fcb18f3849..be468e565e4 100755 --- a/script/client/spring/application.yml +++ b/script/client/spring/application.yml @@ -95,6 +95,7 @@ seata: name: file.conf consul: server-addr: 127.0.0.1:8500 + acl-token: "" etcd3: server-addr: http://localhost:2379 eureka: diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/config/ConfigConsulProperties.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/config/ConfigConsulProperties.java index 4cd53bcd0ae..d3a48aa86bd 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/config/ConfigConsulProperties.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/config/ConfigConsulProperties.java @@ -27,6 +27,7 @@ @ConfigurationProperties(prefix = CONFIG_CONSUL_PREFIX) public class ConfigConsulProperties { private String serverAddr = "127.0.0.1:8500"; + private String aclToken = ""; public String getServerAddr() { return serverAddr; @@ -37,4 +38,12 @@ public ConfigConsulProperties setServerAddr(String serverAddr) { return this; } + public String getAclToken() { + return aclToken; + } + + public ConfigConsulProperties setAclToken(String aclToken) { + this.aclToken = aclToken; + return this; + } } diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/RegistryConsulProperties.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/RegistryConsulProperties.java index 86fbe40c35c..a597cdf4407 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/RegistryConsulProperties.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/RegistryConsulProperties.java @@ -28,6 +28,7 @@ public class RegistryConsulProperties { private String cluster = "default"; private String serverAddr = "127.0.0.1:8500"; + private String aclToken = ""; public String getCluster() { return cluster; @@ -46,4 +47,13 @@ public RegistryConsulProperties setServerAddr(String serverAddr) { this.serverAddr = serverAddr; return this; } + + public String getAclToken() { + return aclToken; + } + + public RegistryConsulProperties setAclToken(String aclToken) { + this.aclToken = aclToken; + return this; + } } diff --git a/server/src/main/resources/registry.conf b/server/src/main/resources/registry.conf index e8869f812e4..9b7938d0bcd 100644 --- a/server/src/main/resources/registry.conf +++ b/server/src/main/resources/registry.conf @@ -36,6 +36,7 @@ registry { consul { cluster = "default" serverAddr = "127.0.0.1:8500" + aclToken = "" } etcd3 { cluster = "default" @@ -69,6 +70,7 @@ config { } consul { serverAddr = "127.0.0.1:8500" + aclToken = "" } apollo { appId = "seata-server" From fa3791e771999336fe083e44702cb65c542af114 Mon Sep 17 00:00:00 2001 From: jsbxyyx Date: Thu, 18 Feb 2021 12:27:53 +0800 Subject: [PATCH 60/93] feature: seata plugin (#3228) --- .../undo/parser/FstSerializerFactory.java | 5 + .../undo/parser/FstUndoLogParser.java | 36 ++++- .../undo/parser/JacksonUndoLogParser.java | 27 ++++ .../undo/parser/KryoSerializerFactory.java | 14 ++ .../undo/parser/KryoUndoLogParser.java | 35 +++- .../undo/parser/ProtostuffUndoLogParser.java | 21 +++ .../undo/parser/spi/FstSerializer.java | 44 +++++ .../undo/parser/spi/JacksonSerializer.java | 45 ++++++ .../undo/parser/spi/KryoTypeSerializer.java | 38 +++++ .../undo/parser/spi/ProtostuffDelegate.java | 32 ++++ seata-plugin/pom.xml | 152 ++++++++++++++++++ .../seata-jackson-parser-oracle/pom.xml | 41 +++++ .../OracleTimestampJacksonSerializer.java | 86 ++++++++++ ...tasource.undo.parser.spi.JacksonSerializer | 17 ++ .../OracleTimestampJacksonSerializerTest.java | 29 ++++ 15 files changed, 620 insertions(+), 2 deletions(-) create mode 100644 rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/FstSerializer.java create mode 100644 rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/JacksonSerializer.java create mode 100644 rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/KryoTypeSerializer.java create mode 100644 rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/ProtostuffDelegate.java create mode 100644 seata-plugin/pom.xml create mode 100644 seata-plugin/seata-jackson-parser-oracle/pom.xml create mode 100644 seata-plugin/seata-jackson-parser-oracle/src/main/java/io.seata.plugin.jackson.parser.oracle/OracleTimestampJacksonSerializer.java create mode 100644 seata-plugin/seata-jackson-parser-oracle/src/main/resources/META-INF/services/io.seata.rm.datasource.undo.parser.spi.JacksonSerializer create mode 100644 seata-plugin/seata-jackson-parser-oracle/src/test/java/io/seata/plugin/jackson/parser/oracle/OracleTimestampJacksonSerializerTest.java diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/FstSerializerFactory.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/FstSerializerFactory.java index 987d2b1f033..5006ec1cca5 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/FstSerializerFactory.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/FstSerializerFactory.java @@ -19,6 +19,7 @@ import javax.sql.rowset.serial.SerialBlob; import javax.sql.rowset.serial.SerialClob; import org.nustaq.serialization.FSTConfiguration; +import org.nustaq.serialization.FSTObjectSerializer; /** * @author funkye @@ -39,6 +40,10 @@ public FstSerializerFactory() { UndoLogSerializerClassRegistry.getRegisteredClasses().keySet().forEach(conf::registerClass); } + public void registerSerializer(Class type, FSTObjectSerializer ser, boolean alsoForAllSubclasses) { + conf.registerSerializer(type, ser, alsoForAllSubclasses); + } + public byte[] serialize(T t) { return conf.asByteArray(t); } diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/FstUndoLogParser.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/FstUndoLogParser.java index 146c6724d6b..0231db22100 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/FstUndoLogParser.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/FstUndoLogParser.java @@ -15,21 +15,55 @@ */ package io.seata.rm.datasource.undo.parser; +import io.seata.common.executor.Initialize; +import io.seata.common.loader.EnhancedServiceLoader; +import io.seata.common.loader.EnhancedServiceNotFoundException; import io.seata.common.loader.LoadLevel; +import io.seata.common.util.CollectionUtils; import io.seata.rm.datasource.undo.BranchUndoLog; import io.seata.rm.datasource.undo.UndoLogParser; +import io.seata.rm.datasource.undo.parser.spi.FstSerializer; +import org.nustaq.serialization.FSTObjectSerializer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; /** * fst serializer * @author funkye */ @LoadLevel(name = FstUndoLogParser.NAME) -public class FstUndoLogParser implements UndoLogParser { +public class FstUndoLogParser implements UndoLogParser, Initialize { + + private static final Logger LOGGER = LoggerFactory.getLogger(FstUndoLogParser.class); public static final String NAME = "fst"; private FstSerializerFactory fstFactory = FstSerializerFactory.getDefaultFactory(); + @Override + public void init() { + try { + List serializers = EnhancedServiceLoader.loadAll(FstSerializer.class); + if (CollectionUtils.isNotEmpty(serializers)) { + for (FstSerializer serializer : serializers) { + if (serializer != null) { + Class type = serializer.type(); + FSTObjectSerializer ser = serializer.ser(); + boolean alsoForAllSubclasses = serializer.alsoForAllSubclasses(); + if (type != null && ser != null) { + fstFactory.registerSerializer(type, ser, alsoForAllSubclasses); + LOGGER.info("fst undo log parser load [{}].", serializer.getClass().getName()); + } + } + } + } + } catch (EnhancedServiceNotFoundException e) { + LOGGER.warn("FstSerializer not found children class.", e); + } + } + @Override public String getName() { return NAME; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/JacksonUndoLogParser.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/JacksonUndoLogParser.java index 6bf6cd07a78..95111267c9b 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/JacksonUndoLogParser.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/JacksonUndoLogParser.java @@ -19,6 +19,7 @@ import java.io.IOException; import java.sql.SQLException; import java.sql.Timestamp; +import java.util.List; import javax.sql.rowset.serial.SerialBlob; import javax.sql.rowset.serial.SerialClob; import javax.sql.rowset.serial.SerialException; @@ -43,9 +44,13 @@ import com.fasterxml.jackson.databind.ser.std.ArraySerializerBase; import io.seata.common.Constants; import io.seata.common.executor.Initialize; +import io.seata.common.loader.EnhancedServiceLoader; +import io.seata.common.loader.EnhancedServiceNotFoundException; import io.seata.common.loader.LoadLevel; +import io.seata.common.util.CollectionUtils; import io.seata.rm.datasource.undo.BranchUndoLog; import io.seata.rm.datasource.undo.UndoLogParser; +import io.seata.rm.datasource.undo.parser.spi.JacksonSerializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -97,6 +102,28 @@ public class JacksonUndoLogParser implements UndoLogParser, Initialize { @Override public void init() { + try { + List jacksonSerializers = EnhancedServiceLoader.loadAll(JacksonSerializer.class); + if (CollectionUtils.isNotEmpty(jacksonSerializers)) { + for (JacksonSerializer jacksonSerializer : jacksonSerializers) { + Class type = jacksonSerializer.type(); + JsonSerializer ser = jacksonSerializer.ser(); + JsonDeserializer deser = jacksonSerializer.deser(); + if (type != null) { + if (ser != null) { + module.addSerializer(type, ser); + } + if (deser != null) { + module.addDeserializer(type, deser); + } + LOGGER.info("jackson undo log parser load [{}].", jacksonSerializer.getClass().getName()); + } + } + } + } catch (EnhancedServiceNotFoundException e) { + LOGGER.warn("JacksonSerializer not found children class.", e); + } + module.addSerializer(Timestamp.class, timestampSerializer); module.addDeserializer(Timestamp.class, timestampDeserializer); module.addSerializer(SerialBlob.class, blobSerializer); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/KryoSerializerFactory.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/KryoSerializerFactory.java index fd1d66820fa..6b566928a62 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/KryoSerializerFactory.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/KryoSerializerFactory.java @@ -20,6 +20,8 @@ import java.sql.Clob; import java.sql.SQLException; import java.sql.Timestamp; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import javax.sql.rowset.serial.SerialBlob; import javax.sql.rowset.serial.SerialClob; import com.esotericsoftware.kryo.Kryo; @@ -43,6 +45,8 @@ public class KryoSerializerFactory implements KryoFactory { private KryoPool pool = new KryoPool.Builder(this).softReferences().build(); + private static final Map TYPE_MAP = new ConcurrentHashMap<>(); + private KryoSerializerFactory() {} public static KryoSerializerFactory getInstance() { @@ -60,11 +64,21 @@ public void returnKryo(KryoSerializer kryoSerializer) { pool.release(kryoSerializer.getKryo()); } + public void registerSerializer(Class type, Serializer ser) { + if (type != null && ser != null) { + TYPE_MAP.put(type, ser); + } + } + @Override public Kryo create() { Kryo kryo = new Kryo(); kryo.setRegistrationRequired(false); + for (Map.Entry entry : TYPE_MAP.entrySet()) { + kryo.register(entry.getKey(), entry.getValue()); + } + // support clob and blob kryo.register(SerialBlob.class, new BlobSerializer()); kryo.register(SerialClob.class, new ClobSerializer()); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/KryoUndoLogParser.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/KryoUndoLogParser.java index c794573d8fc..2ab834eef8d 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/KryoUndoLogParser.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/KryoUndoLogParser.java @@ -15,19 +15,52 @@ */ package io.seata.rm.datasource.undo.parser; +import com.esotericsoftware.kryo.Serializer; +import io.seata.common.executor.Initialize; +import io.seata.common.loader.EnhancedServiceLoader; +import io.seata.common.loader.EnhancedServiceNotFoundException; import io.seata.common.loader.LoadLevel; +import io.seata.common.util.CollectionUtils; import io.seata.rm.datasource.undo.BranchUndoLog; import io.seata.rm.datasource.undo.UndoLogParser; +import io.seata.rm.datasource.undo.parser.spi.KryoTypeSerializer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; /** * kryo serializer * @author jsbxyyx */ @LoadLevel(name = KryoUndoLogParser.NAME) -public class KryoUndoLogParser implements UndoLogParser { +public class KryoUndoLogParser implements UndoLogParser, Initialize { + + private static final Logger LOGGER = LoggerFactory.getLogger(KryoUndoLogParser.class); public static final String NAME = "kryo"; + @Override + public void init() { + try { + List serializers = EnhancedServiceLoader.loadAll(KryoTypeSerializer.class); + if (CollectionUtils.isNotEmpty(serializers)) { + for (KryoTypeSerializer typeSerializer : serializers) { + if (typeSerializer != null) { + Class type = typeSerializer.type(); + Serializer ser = typeSerializer.serializer(); + if (type != null) { + KryoSerializerFactory.getInstance().registerSerializer(type, ser); + LOGGER.info("kryo undo log parser load [{}].", typeSerializer.getClass().getName()); + } + } + } + } + } catch (EnhancedServiceNotFoundException e) { + LOGGER.warn("KryoTypeSerializer not found children class.", e); + } + } + @Override public String getName() { return NAME; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/ProtostuffUndoLogParser.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/ProtostuffUndoLogParser.java index 9f1a8cdda8a..6df392f6711 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/ProtostuffUndoLogParser.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/ProtostuffUndoLogParser.java @@ -18,6 +18,7 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.sql.Timestamp; +import java.util.List; import io.protostuff.Input; import io.protostuff.LinkedBuffer; @@ -31,9 +32,15 @@ import io.protostuff.runtime.RuntimeEnv; import io.protostuff.runtime.RuntimeSchema; import io.seata.common.executor.Initialize; +import io.seata.common.loader.EnhancedServiceLoader; +import io.seata.common.loader.EnhancedServiceNotFoundException; import io.seata.common.loader.LoadLevel; +import io.seata.common.util.CollectionUtils; import io.seata.rm.datasource.undo.BranchUndoLog; import io.seata.rm.datasource.undo.UndoLogParser; +import io.seata.rm.datasource.undo.parser.spi.ProtostuffDelegate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * The type protostuff based undo log parser. @@ -43,6 +50,8 @@ @LoadLevel(name = ProtostuffUndoLogParser.NAME) public class ProtostuffUndoLogParser implements UndoLogParser, Initialize { + private static final Logger LOGGER = LoggerFactory.getLogger(ProtostuffUndoLogParser.class); + public static final String NAME = "protostuff"; private final DefaultIdStrategy idStrategy = (DefaultIdStrategy) RuntimeEnv.ID_STRATEGY; @@ -51,6 +60,18 @@ public class ProtostuffUndoLogParser implements UndoLogParser, Initialize { @Override public void init() { + try { + List delegates = EnhancedServiceLoader.loadAll(ProtostuffDelegate.class); + if (CollectionUtils.isNotEmpty(delegates)) { + for (ProtostuffDelegate delegate : delegates) { + idStrategy.registerDelegate(delegate.create()); + LOGGER.info("protostuff undo log parser load [{}].", delegate.getClass().getName()); + } + } + } catch (EnhancedServiceNotFoundException e) { + LOGGER.warn("ProtostuffDelegate not found children class.", e); + } + idStrategy.registerDelegate(new DateDelegate()); idStrategy.registerDelegate(new TimestampDelegate()); idStrategy.registerDelegate(new SqlDateDelegate()); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/FstSerializer.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/FstSerializer.java new file mode 100644 index 00000000000..88fd697c756 --- /dev/null +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/FstSerializer.java @@ -0,0 +1,44 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.seata.rm.datasource.undo.parser.spi; + +import org.nustaq.serialization.FSTObjectSerializer; + +/** + * @author jsbxyyx + */ +public interface FstSerializer { + + /** + * fst serializer class type + * @return + */ + Class type(); + + /** + * FSTObjectSerializer custom serializer + * @return + */ + FSTObjectSerializer ser(); + + /** + * for sub classes + * @return + */ + boolean alsoForAllSubclasses(); + +} diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/JacksonSerializer.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/JacksonSerializer.java new file mode 100644 index 00000000000..bfefa812f24 --- /dev/null +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/JacksonSerializer.java @@ -0,0 +1,45 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.seata.rm.datasource.undo.parser.spi; + +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonSerializer; + +/** + * @author jsbxyyx + */ +public interface JacksonSerializer { + + /** + * jackson serializer class type. + * @return + */ + Class type(); + + /** + * Jackson custom serializer + * @return + */ + JsonSerializer ser(); + + /** + * Jackson custom deserializer + * @return + */ + JsonDeserializer deser(); + +} diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/KryoTypeSerializer.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/KryoTypeSerializer.java new file mode 100644 index 00000000000..54542359176 --- /dev/null +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/KryoTypeSerializer.java @@ -0,0 +1,38 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.seata.rm.datasource.undo.parser.spi; + +import com.esotericsoftware.kryo.Serializer; + +/** + * @author jsbxyyx + */ +public interface KryoTypeSerializer { + + /** + * kryo serializer class type. + * @return + */ + Class type(); + + /** + * kryo custom serializer. + * @return + */ + Serializer serializer(); + +} diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/ProtostuffDelegate.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/ProtostuffDelegate.java new file mode 100644 index 00000000000..9ec9683985a --- /dev/null +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/ProtostuffDelegate.java @@ -0,0 +1,32 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.seata.rm.datasource.undo.parser.spi; + +import io.protostuff.runtime.Delegate; + +/** + * @author jsbxyyx + */ +public interface ProtostuffDelegate { + + /** + * Delegate create. + * @return + */ + Delegate create(); + +} diff --git a/seata-plugin/pom.xml b/seata-plugin/pom.xml new file mode 100644 index 00000000000..dd7ba7be2ab --- /dev/null +++ b/seata-plugin/pom.xml @@ -0,0 +1,152 @@ + + + + + + 4.0.0 + + io.seata + seata-plugin + ${revision} + pom + + + seata-jackson-parser-oracle + + + + + 1.5.0-SNAPSHOT + + 1.8 + 1.8 + UTF-8 + + 3.6.0 + 2.2.1 + 2.22.2 + + 19.3.0.0 + 1.5.0-SNAPSHOT + + 5.4.2 + 2.23.4 + 3.12.2 + 1.4.2 + + + + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + + org.junit.jupiter + junit-jupiter-params + ${junit-jupiter.version} + test + + + org.junit.platform + junit-platform-launcher + ${junit-platform-launcher.version} + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + org.mockito + mockito-junit-jupiter + ${mockito.version} + test + + + org.assertj + assertj-core + ${assertj-core.version} + test + + + + + + com.oracle.ojdbc + ojdbc8 + ${ojdbc.version} + + + io.seata + seata-rm-datasource + ${seata.version} + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + org.apache.maven.plugins + maven-source-plugin + ${maven-source-plugin.version} + + + package + + jar-no-fork + + + + + + + + + + ICM + http://maven.icm.edu.pl/artifactory/repo/ + + true + + + + + diff --git a/seata-plugin/seata-jackson-parser-oracle/pom.xml b/seata-plugin/seata-jackson-parser-oracle/pom.xml new file mode 100644 index 00000000000..93c6f0395a7 --- /dev/null +++ b/seata-plugin/seata-jackson-parser-oracle/pom.xml @@ -0,0 +1,41 @@ + + + + + + seata-plugin + io.seata + ${revision} + + 4.0.0 + + seata-jackson-parser-oracle + + + + io.seata + seata-rm-datasource + + + com.oracle.ojdbc + ojdbc8 + + + + \ No newline at end of file diff --git a/seata-plugin/seata-jackson-parser-oracle/src/main/java/io.seata.plugin.jackson.parser.oracle/OracleTimestampJacksonSerializer.java b/seata-plugin/seata-jackson-parser-oracle/src/main/java/io.seata.plugin.jackson.parser.oracle/OracleTimestampJacksonSerializer.java new file mode 100644 index 00000000000..a583a50eb27 --- /dev/null +++ b/seata-plugin/seata-jackson-parser-oracle/src/main/java/io.seata.plugin.jackson.parser.oracle/OracleTimestampJacksonSerializer.java @@ -0,0 +1,86 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.seata.plugin.jackson.parser.oracle; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.type.WritableTypeId; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.jsontype.TypeSerializer; +import io.seata.common.loader.LoadLevel; +import io.seata.rm.datasource.undo.parser.spi.JacksonSerializer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; + +/** + * @author jsbxyyx + */ +@LoadLevel(name = "oracleTimestamp") +public class OracleTimestampJacksonSerializer implements JacksonSerializer { + + private static final Logger LOGGER = LoggerFactory.getLogger(OracleTimestampJacksonSerializer.class); + + @Override + public Class type() { + return oracle.sql.TIMESTAMP.class; + } + + @Override + public JsonSerializer ser() { + return new JsonSerializer() { + @Override + public void serializeWithType(oracle.sql.TIMESTAMP timestamp, JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSerializer) throws IOException { + WritableTypeId typeId = typeSerializer.writeTypePrefix(gen, typeSerializer.typeId(timestamp, JsonToken.VALUE_EMBEDDED_OBJECT)); + serialize(timestamp, gen, serializers); + gen.writeTypeSuffix(typeId); + } + + @Override + public void serialize(oracle.sql.TIMESTAMP timestamp, JsonGenerator gen, SerializerProvider serializers) throws IOException { + try { + gen.writeBinary(timestamp.getBytes()); + } catch (IOException e) { + LOGGER.error("serialize oralce.sql.Timestamp error : {}", e.getMessage(), e); + } + } + }; + } + + @Override + public JsonDeserializer deser() { + return new JsonDeserializer() { + @Override + public oracle.sql.TIMESTAMP deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { + try { + oracle.sql.TIMESTAMP timestamp = new oracle.sql.TIMESTAMP(p.getBinaryValue()); + return timestamp; + } catch (IOException e) { + LOGGER.error("deserialize oracle.sql.Timestamp error : {}", e.getMessage(), e); + } + return null; + } + }; + } + +} diff --git a/seata-plugin/seata-jackson-parser-oracle/src/main/resources/META-INF/services/io.seata.rm.datasource.undo.parser.spi.JacksonSerializer b/seata-plugin/seata-jackson-parser-oracle/src/main/resources/META-INF/services/io.seata.rm.datasource.undo.parser.spi.JacksonSerializer new file mode 100644 index 00000000000..581b57e403c --- /dev/null +++ b/seata-plugin/seata-jackson-parser-oracle/src/main/resources/META-INF/services/io.seata.rm.datasource.undo.parser.spi.JacksonSerializer @@ -0,0 +1,17 @@ +# +# Copyright 1999-2019 Seata.io Group. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +io.seata.plugin.jackson.parser.oracle.OracleTimestampJacksonSerializer \ No newline at end of file diff --git a/seata-plugin/seata-jackson-parser-oracle/src/test/java/io/seata/plugin/jackson/parser/oracle/OracleTimestampJacksonSerializerTest.java b/seata-plugin/seata-jackson-parser-oracle/src/test/java/io/seata/plugin/jackson/parser/oracle/OracleTimestampJacksonSerializerTest.java new file mode 100644 index 00000000000..6c1d7942efa --- /dev/null +++ b/seata-plugin/seata-jackson-parser-oracle/src/test/java/io/seata/plugin/jackson/parser/oracle/OracleTimestampJacksonSerializerTest.java @@ -0,0 +1,29 @@ +package io.seata.plugin.jackson.parser.oracle; + +import io.seata.common.loader.EnhancedServiceLoader; +import io.seata.rm.datasource.undo.parser.spi.JacksonSerializer; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.List; + +/** + * @author jsbxyyx + */ +public class OracleTimestampJacksonSerializerTest { + + @Test + public void test_oracleJacksonSerializer() throws Exception { + List serializers = EnhancedServiceLoader.loadAll(JacksonSerializer.class); + Assertions.assertTrue(serializers.size() > 0, "Jackson Serializer is empty"); + OracleTimestampJacksonSerializer s = null; + for (JacksonSerializer serializer : serializers) { + if (serializer instanceof OracleTimestampJacksonSerializer) { + s = (OracleTimestampJacksonSerializer) serializer; + break; + } + } + Assertions.assertNotNull(s); + } + +} From 546d342a44aa69ef10409ade13adb91af1274dfe Mon Sep 17 00:00:00 2001 From: h-zhi <45411055+h-zhi@users.noreply.github.com> Date: Fri, 19 Feb 2021 21:24:47 +0800 Subject: [PATCH 61/93] feature: add antlr for mysql sqlparser (#2933) --- all/pom.xml | 10 + bom/pom.xml | 6 + codecov.yml | 2 + pom.xml | 6 + sqlparser/pom.xml | 1 + sqlparser/seata-sqlparser-antlr/pom.xml | 51 + .../AntlrDelegatingSQLRecognizerFactory.java | 62 + .../antlr/SQLOperateRecognizerHolder.java | 59 + .../SQLOperateRecognizerHolderFactory.java | 43 + .../mysql/AntlrMySQLDeleteRecognizer.java | 82 + .../mysql/AntlrMySQLInsertRecognizer.java | 98 + .../mysql/AntlrMySQLRecognizerFactory.java | 81 + .../mysql/AntlrMySQLSelectRecognizer.java | 80 + .../mysql/AntlrMySQLUpdateRecognizer.java | 104 + .../mysql/MySQLOperateRecognizerHolder.java | 50 + .../sqlparser/antlr/mysql/MySqlContext.java | 391 + .../sqlparser/antlr/mysql/antlr/MySqlLexer.g4 | 1247 + .../antlr/mysql/antlr/MySqlParser.g4 | 2608 + .../DeleteSpecificationSqlListener.java | 83 + .../SelectSpecificationSqlListener.java | 89 + .../UpdateSpecificationSqlListener.java | 87 + .../antlr/mysql/parser/MySqlLexer.interp | 3181 + .../antlr/mysql/parser/MySqlLexer.java | 5644 ++ .../antlr/mysql/parser/MySqlLexer.tokens | 2078 + .../antlr/mysql/parser/MySqlParser.interp | 2430 + .../antlr/mysql/parser/MySqlParser.java | 65742 ++++++++++++++++ .../antlr/mysql/parser/MySqlParser.tokens | 2078 + .../mysql/parser/MySqlParserBaseListener.java | 6867 ++ .../mysql/parser/MySqlParserBaseVisitor.java | 3997 + .../mysql/parser/MySqlParserListener.java | 6290 ++ .../mysql/parser/MySqlParserVisitor.java | 3722 + .../mysql/stream/ANTLRNoCaseStringStream.java | 41 + .../visit/InsertSpecificationSqlVisitor.java | 74 + .../visit/InsertStatementSqlVisitor.java | 40 + .../mysql/visit/StatementSqlVisitor.java | 68 + .../io.seata.sqlparser.SQLRecognizerFactory | 1 + ...sqlparser.antlr.SQLOperateRecognizerHolder | 1 + .../sqlparser/antlr/AntlrIsolationTest.java | 42 + .../antlr/MySQLDeleteRecognizerTest.java | 175 + .../antlr/MySQLInsertRecognizerTest.java | 123 + ...ectForUpdateRecognizerForListenerTest.java | 218 + .../antlr/MySQLUpdateRecognizerTest.java | 190 + .../io/seata/sqlparser/SqlParserType.java | 5 + style/seata_suppressions.xml | 6 +- 44 files changed, 108252 insertions(+), 1 deletion(-) create mode 100644 sqlparser/seata-sqlparser-antlr/pom.xml create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/AntlrDelegatingSQLRecognizerFactory.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/SQLOperateRecognizerHolder.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/SQLOperateRecognizerHolderFactory.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLDeleteRecognizer.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLInsertRecognizer.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLRecognizerFactory.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLSelectRecognizer.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLUpdateRecognizer.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/MySQLOperateRecognizerHolder.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/MySqlContext.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr/MySqlLexer.g4 create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr/MySqlParser.g4 create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/listener/DeleteSpecificationSqlListener.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/listener/SelectSpecificationSqlListener.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/listener/UpdateSpecificationSqlListener.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlLexer.interp create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlLexer.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlLexer.tokens create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParser.interp create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParser.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParser.tokens create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserBaseListener.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserBaseVisitor.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserListener.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserVisitor.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/stream/ANTLRNoCaseStringStream.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/visit/InsertSpecificationSqlVisitor.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/visit/InsertStatementSqlVisitor.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/visit/StatementSqlVisitor.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/resources/META-INF/services/io.seata.sqlparser.SQLRecognizerFactory create mode 100644 sqlparser/seata-sqlparser-antlr/src/main/resources/META-INF/services/io.seata.sqlparser.antlr.SQLOperateRecognizerHolder create mode 100644 sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/AntlrIsolationTest.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLDeleteRecognizerTest.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLInsertRecognizerTest.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLSelectForUpdateRecognizerForListenerTest.java create mode 100644 sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLUpdateRecognizerTest.java diff --git a/all/pom.xml b/all/pom.xml index 4aace35988b..b3b126e9436 100644 --- a/all/pom.xml +++ b/all/pom.xml @@ -214,6 +214,11 @@ seata-sqlparser-core ${project.version} + + io.seata + seata-sqlparser-antlr + ${project.version} + io.seata seata-sqlparser-druid @@ -353,6 +358,10 @@ io.netty netty-all + + org.antlr + antlr4 + com.alibaba fastjson @@ -669,6 +678,7 @@ io.seata:seata-rm io.seata:seata-rm-datasource io.seata:seata-sqlparser-core + io.seata:seata-sqlparser-antlr io.seata:seata-sqlparser-druid io.seata:seata-sofa-rpc io.seata:seata-spring diff --git a/bom/pom.xml b/bom/pom.xml index 9ab2df9d85e..3dd49e31120 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -97,6 +97,7 @@ 5.2.0 4.5.8 4.4.11 + 4.8 1.1.23 2.7.0 10.2.0.3.0 @@ -149,6 +150,11 @@ fastjson ${fastjson.version} + + org.antlr + antlr4 + ${antlr4.version} + com.alibaba druid diff --git a/codecov.yml b/codecov.yml index cf1520c9d2a..e60b1be0fec 100644 --- a/codecov.yml +++ b/codecov.yml @@ -17,6 +17,8 @@ ignore: - ".style/.*" - "*.md" - "rm-datasource/src/test/java/io/seata/rm/datasource/mock" + - "sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr/.*" + - "sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/.*" comment: layout: "reach,diff,flags,tree" behavior: default diff --git a/pom.xml b/pom.xml index a1f61bba28b..189abd22b0c 100644 --- a/pom.xml +++ b/pom.xml @@ -320,6 +320,9 @@ **/generated/** + **/antlr/mysql/parser/*.* + **/antlr/mysql/antlr/*.* + **/antlr/mysql/stream/ANTLRNoCaseStringStream.java true @@ -416,6 +419,9 @@ **/generated/*.java + **/antlr/mysql/parser/*.* + **/antlr/mysql/antlr/*.* + **/antlr/mysql/stream/ANTLRNoCaseStringStream.java diff --git a/sqlparser/pom.xml b/sqlparser/pom.xml index 03bb937a440..97f26bf0ef7 100644 --- a/sqlparser/pom.xml +++ b/sqlparser/pom.xml @@ -29,6 +29,7 @@ seata-sqlparser-core + seata-sqlparser-antlr seata-sqlparser-druid diff --git a/sqlparser/seata-sqlparser-antlr/pom.xml b/sqlparser/seata-sqlparser-antlr/pom.xml new file mode 100644 index 00000000000..bee2d348f53 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/pom.xml @@ -0,0 +1,51 @@ + + + + + io.seata + seata-sqlparser + ${revision} + + 4.0.0 + seata-sqlparser-antlr + seata-sqlparser-antlr ${project.version} + + + ${project.groupId} + seata-sqlparser-core + ${project.version} + + + + org.antlr + antlr4 + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + true + + + + + diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/AntlrDelegatingSQLRecognizerFactory.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/AntlrDelegatingSQLRecognizerFactory.java new file mode 100644 index 00000000000..773c11db42a --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/AntlrDelegatingSQLRecognizerFactory.java @@ -0,0 +1,62 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr; + +import io.seata.common.loader.LoadLevel; +import io.seata.sqlparser.SQLParsingException; +import io.seata.sqlparser.SQLRecognizer; +import io.seata.sqlparser.SQLRecognizerFactory; +import io.seata.sqlparser.SqlParserType; + +import java.lang.reflect.Constructor; +import java.util.List; + +/** + * @author zhihou + */ +@LoadLevel(name = SqlParserType.SQL_PARSER_TYPE_ANTLR) +public class AntlrDelegatingSQLRecognizerFactory implements SQLRecognizerFactory { + + private volatile SQLRecognizerFactory recognizerFactoryImpl; + + public AntlrDelegatingSQLRecognizerFactory() { + setClassLoader(); + } + + /** + * Only for unit test + * + */ + void setClassLoader() { + try { + Class recognizerFactoryImplClass = ClassLoader.getSystemClassLoader().loadClass("io.seata.sqlparser.antlr.mysql.AntlrMySQLRecognizerFactory"); + Constructor implConstructor = recognizerFactoryImplClass.getDeclaredConstructor(); + implConstructor.setAccessible(true); + try { + recognizerFactoryImpl = (SQLRecognizerFactory) implConstructor.newInstance(); + } finally { + implConstructor.setAccessible(false); + } + } catch (Exception e) { + throw new SQLParsingException(e); + } + } + + @Override + public List create(String sql, String dbType) { + return recognizerFactoryImpl.create(sql, dbType); + } +} diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/SQLOperateRecognizerHolder.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/SQLOperateRecognizerHolder.java new file mode 100644 index 00000000000..4db91889bae --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/SQLOperateRecognizerHolder.java @@ -0,0 +1,59 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr; + +import io.seata.sqlparser.SQLRecognizer; + +/** + * The interface SQLOperateRecognizerHolder + * + * @author zhihou + */ +public interface SQLOperateRecognizerHolder { + + /** + * Get delete recognizer + * + * @param sql the sql + * @return the delete recognizer + */ + SQLRecognizer getDeleteRecognizer(String sql); + + /** + * Get insert recognizer + * + * @param sql the sql + * @return the insert recognizer + */ + SQLRecognizer getInsertRecognizer(String sql); + + /** + * Get update recognizer + * + * @param sql the sql + * @return the update recognizer + */ + SQLRecognizer getUpdateRecognizer(String sql); + + /** + * Get SelectForUpdate recognizer + * + * @param sql the sql + * @return the SelectForUpdate recognizer + */ + SQLRecognizer getSelectForUpdateRecognizer(String sql); + +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/SQLOperateRecognizerHolderFactory.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/SQLOperateRecognizerHolderFactory.java new file mode 100644 index 00000000000..f79e495c051 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/SQLOperateRecognizerHolderFactory.java @@ -0,0 +1,43 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr; + +import io.seata.common.loader.EnhancedServiceLoader; +import io.seata.common.util.CollectionUtils; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * The SQLOperateRecognizerHolderFactory + * + * @author: zhi hou + */ +public class SQLOperateRecognizerHolderFactory { + + private static final Map RECOGNIZER_HOLDER_MAP = new ConcurrentHashMap<>(); + + + /** + * get SQLOperateRecognizer by db type + * + * @param dbType the db type + * @return the SQLOperateRecognizer + */ + public static SQLOperateRecognizerHolder getSQLRecognizerHolder(String dbType) { + return CollectionUtils.computeIfAbsent(RECOGNIZER_HOLDER_MAP, dbType, key -> EnhancedServiceLoader.load(SQLOperateRecognizerHolder.class, dbType, SQLOperateRecognizerHolderFactory.class.getClassLoader())); + } +} diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLDeleteRecognizer.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLDeleteRecognizer.java new file mode 100644 index 00000000000..272d0f3bfb0 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLDeleteRecognizer.java @@ -0,0 +1,82 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql; + +import io.seata.sqlparser.ParametersHolder; +import io.seata.sqlparser.SQLDeleteRecognizer; +import io.seata.sqlparser.SQLType; +import io.seata.sqlparser.antlr.mysql.listener.DeleteSpecificationSqlListener; +import io.seata.sqlparser.antlr.mysql.parser.MySqlLexer; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.stream.ANTLRNoCaseStringStream; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.tree.ParseTreeWalker; + +import java.util.ArrayList; +import java.util.List; + +/** + * AntlrMySQLDeleteRecognizer + * + * @author zhihou + */ +public class AntlrMySQLDeleteRecognizer implements SQLDeleteRecognizer { + + private MySqlContext sqlContext; + + public AntlrMySQLDeleteRecognizer(String sql) { + MySqlLexer mySqlLexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + CommonTokenStream commonTokenStream = new CommonTokenStream(mySqlLexer); + MySqlParser parser2 = new MySqlParser(commonTokenStream); + MySqlParser.RootContext root = parser2.root(); + ParseTreeWalker walker2 = new ParseTreeWalker(); + sqlContext = new MySqlContext(); + sqlContext.setOriginalSQL(sql); + walker2.walk(new DeleteSpecificationSqlListener(sqlContext), root); + } + + + @Override + public String getWhereCondition(ParametersHolder parametersHolder, ArrayList> paramAppenderList) { + return sqlContext.getWhereCondition(); + } + + @Override + public String getWhereCondition() { + return sqlContext.getWhereCondition(); + } + + @Override + public SQLType getSQLType() { + return SQLType.DELETE; + } + + @Override + public String getTableAlias() { + return sqlContext.tableAlias; + } + + @Override + public String getTableName() { + return sqlContext.tableName; + } + + @Override + public String getOriginalSQL() { + + return sqlContext.getOriginalSQL(); + } +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLInsertRecognizer.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLInsertRecognizer.java new file mode 100644 index 00000000000..2a84917b984 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLInsertRecognizer.java @@ -0,0 +1,98 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql; + +import io.seata.sqlparser.SQLInsertRecognizer; +import io.seata.sqlparser.SQLType; +import io.seata.sqlparser.antlr.mysql.parser.MySqlLexer; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.stream.ANTLRNoCaseStringStream; +import io.seata.sqlparser.antlr.mysql.visit.InsertStatementSqlVisitor; +import org.antlr.v4.runtime.CommonTokenStream; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +/** + * AntlrMySQLInsertRecognizer + * + * @author zhihou + */ +public class AntlrMySQLInsertRecognizer implements SQLInsertRecognizer { + + private MySqlContext sqlContext; + + public AntlrMySQLInsertRecognizer(String sql) { + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + MySqlParser parser = new MySqlParser(tokenStream); + MySqlParser.RootContext rootContext = parser.root(); + sqlContext = new MySqlContext(); + sqlContext.setOriginalSQL(sql); + InsertStatementSqlVisitor visitor = new InsertStatementSqlVisitor(sqlContext); + visitor.visit(rootContext); + } + + @Override + public SQLType getSQLType() { + return SQLType.INSERT; + } + + @Override + public String getTableAlias() { + return sqlContext.tableAlias; + } + + @Override + public String getTableName() { + return sqlContext.tableName; + } + + @Override + public String getOriginalSQL() { + return sqlContext.getOriginalSQL(); + } + + @Override + public boolean insertColumnsIsEmpty() { + + List insertColumnNames = sqlContext.getInsertColumnNames(); + + if (insertColumnNames.isEmpty()) { + return true; + } + return false; + } + + @Override + public List getInsertColumns() { + + List insertColumnNames = sqlContext.getInsertColumnNames(); + + if (insertColumnNames.isEmpty()) { + return new ArrayList<>(); + } + + return insertColumnNames.stream().map(insertColumns -> insertColumns.getColumnName()).collect(Collectors.toList()); + } + + @Override + public List> getInsertRows(Collection primaryKeyIndex) { + return null; + } +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLRecognizerFactory.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLRecognizerFactory.java new file mode 100644 index 00000000000..4643fa86b8f --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLRecognizerFactory.java @@ -0,0 +1,81 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql; + +import io.seata.sqlparser.SQLRecognizer; +import io.seata.sqlparser.SQLRecognizerFactory; +import io.seata.sqlparser.antlr.SQLOperateRecognizerHolder; +import io.seata.sqlparser.antlr.SQLOperateRecognizerHolderFactory; +import io.seata.sqlparser.antlr.mysql.parser.MySqlLexer; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.stream.ANTLRNoCaseStringStream; +import io.seata.sqlparser.antlr.mysql.visit.StatementSqlVisitor; +import org.antlr.v4.runtime.CommonTokenStream; + +import java.util.ArrayList; +import java.util.List; + +/** + * AntlrMySQLRecognizerFactory + * + * @author zhihou + */ +class AntlrMySQLRecognizerFactory implements SQLRecognizerFactory { + + @Override + public List create(String sqlData, String dbType) { + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sqlData)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.SqlStatementsContext sqlStatementsContext = parser.sqlStatements(); + + List sqlStatementContexts = sqlStatementsContext.sqlStatement(); + + List recognizers = null; + SQLRecognizer recognizer = null; + + for (MySqlParser.SqlStatementContext sql : sqlStatementContexts) { + + StatementSqlVisitor visitor = new StatementSqlVisitor(); + + String originalSQL = visitor.visit(sql).toString(); + + SQLOperateRecognizerHolder recognizerHolder = + SQLOperateRecognizerHolderFactory.getSQLRecognizerHolder(dbType.toLowerCase()); + if (sql.dmlStatement().updateStatement() != null) { + recognizer = recognizerHolder.getUpdateRecognizer(originalSQL); + } else if (sql.dmlStatement().insertStatement() != null) { + recognizer = recognizerHolder.getInsertRecognizer(originalSQL); + } else if (sql.dmlStatement().deleteStatement() != null) { + recognizer = recognizerHolder.getDeleteRecognizer(originalSQL); + } else if (sql.dmlStatement().selectStatement() != null) { + recognizer = recognizerHolder.getSelectForUpdateRecognizer(originalSQL); + } + + if (recognizer != null) { + if (recognizers == null) { + recognizers = new ArrayList<>(); + } + recognizers.add(recognizer); + } + } + return recognizers; + } +} diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLSelectRecognizer.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLSelectRecognizer.java new file mode 100644 index 00000000000..0cb489f04c8 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLSelectRecognizer.java @@ -0,0 +1,80 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql; + +import io.seata.sqlparser.ParametersHolder; +import io.seata.sqlparser.SQLSelectRecognizer; +import io.seata.sqlparser.SQLType; +import io.seata.sqlparser.antlr.mysql.listener.SelectSpecificationSqlListener; +import io.seata.sqlparser.antlr.mysql.parser.MySqlLexer; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.stream.ANTLRNoCaseStringStream; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.tree.ParseTreeWalker; + +import java.util.ArrayList; +import java.util.List; + +/** + * AntlrMySQLSelectRecognizer + * + * @author zhihou + */ +public class AntlrMySQLSelectRecognizer implements SQLSelectRecognizer { + + private MySqlContext sqlContext; + + public AntlrMySQLSelectRecognizer(String sql) { + MySqlLexer mySqlLexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + CommonTokenStream commonTokenStream = new CommonTokenStream(mySqlLexer); + MySqlParser parser = new MySqlParser(commonTokenStream); + MySqlParser.RootContext root = parser.root(); + ParseTreeWalker walker = new ParseTreeWalker(); + sqlContext = new MySqlContext(); + sqlContext.setOriginalSQL(sql); + walker.walk(new SelectSpecificationSqlListener(sqlContext), root); + } + + @Override + public String getWhereCondition(ParametersHolder parametersHolder, ArrayList> paramAppenderList) { + return sqlContext.getWhereCondition(); + } + + @Override + public String getWhereCondition() { + return sqlContext.getWhereCondition(); + } + + @Override + public SQLType getSQLType() { + return SQLType.SELECT; + } + + @Override + public String getTableAlias() { + return sqlContext.tableAlias; + } + + @Override + public String getTableName() { + return sqlContext.tableName; + } + + @Override + public String getOriginalSQL() { + return sqlContext.getOriginalSQL(); + } +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLUpdateRecognizer.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLUpdateRecognizer.java new file mode 100644 index 00000000000..cc3271fb7a4 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLUpdateRecognizer.java @@ -0,0 +1,104 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql; + +import io.seata.sqlparser.ParametersHolder; +import io.seata.sqlparser.SQLType; +import io.seata.sqlparser.SQLUpdateRecognizer; +import io.seata.sqlparser.antlr.mysql.listener.UpdateSpecificationSqlListener; +import io.seata.sqlparser.antlr.mysql.parser.MySqlLexer; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.stream.ANTLRNoCaseStringStream; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.tree.ParseTreeWalker; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * AntlrMySQLUpdateRecognizer + * + * @author zhihou + */ +public class AntlrMySQLUpdateRecognizer implements SQLUpdateRecognizer { + + private MySqlContext sqlContext; + + public AntlrMySQLUpdateRecognizer(String sql) { + MySqlLexer mySqlLexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + CommonTokenStream commonTokenStream = new CommonTokenStream(mySqlLexer); + MySqlParser parser2 = new MySqlParser(commonTokenStream); + MySqlParser.RootContext root = parser2.root(); + ParseTreeWalker walker2 = new ParseTreeWalker(); + sqlContext = new MySqlContext(); + sqlContext.setOriginalSQL(sql); + walker2.walk(new UpdateSpecificationSqlListener(sqlContext), root); + } + + @Override + public List getUpdateColumns() { + + List updateFoColumnNames = sqlContext.getUpdateFoColumnNames(); + List sqlList = new ArrayList<>(); + for (MySqlContext.SQL sql : updateFoColumnNames) { + sqlList.add(sql.getUpdateColumn()); + } + return sqlList; + } + + @Override + public List getUpdateValues() { + + List updateForValues = sqlContext.getUpdateForValues(); + + if (updateForValues.isEmpty()) { + return new ArrayList<>(); + } + + return updateForValues.stream().map(updateValues -> updateValues.getUpdateValue()).collect(Collectors.toList()); + } + + @Override + public String getWhereCondition(ParametersHolder parametersHolder, ArrayList> paramAppenderList) { + return sqlContext.getWhereCondition(); + } + + @Override + public String getWhereCondition() { + return sqlContext.getWhereCondition(); + } + + @Override + public SQLType getSQLType() { + return SQLType.UPDATE; + } + + @Override + public String getTableAlias() { + return sqlContext.tableAlias; + } + + @Override + public String getTableName() { + return sqlContext.tableName; + } + + @Override + public String getOriginalSQL() { + return sqlContext.getOriginalSQL(); + } +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/MySQLOperateRecognizerHolder.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/MySQLOperateRecognizerHolder.java new file mode 100644 index 00000000000..8c7caa3b11e --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/MySQLOperateRecognizerHolder.java @@ -0,0 +1,50 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql; + +import io.seata.common.loader.LoadLevel; +import io.seata.sqlparser.SQLRecognizer; +import io.seata.sqlparser.antlr.SQLOperateRecognizerHolder; +import io.seata.sqlparser.util.JdbcConstants; + +/** + * The class MySqlOperateRecognizerHolder + * + * @author zhihou + */ +@LoadLevel(name = JdbcConstants.MYSQL) +public class MySQLOperateRecognizerHolder implements SQLOperateRecognizerHolder { + + @Override + public SQLRecognizer getDeleteRecognizer(String sql) { + return new AntlrMySQLDeleteRecognizer(sql); + } + + @Override + public SQLRecognizer getInsertRecognizer(String sql) { + return new AntlrMySQLInsertRecognizer(sql); + } + + @Override + public SQLRecognizer getUpdateRecognizer(String sql) { + return new AntlrMySQLUpdateRecognizer(sql); + } + + @Override + public SQLRecognizer getSelectForUpdateRecognizer(String sql) { + return new AntlrMySQLSelectRecognizer(sql); + } +} diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/MySqlContext.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/MySqlContext.java new file mode 100644 index 00000000000..2a4aec98d77 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/MySqlContext.java @@ -0,0 +1,391 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql; + +import java.util.ArrayList; +import java.util.List; + +/** + * MySqlContext + * + * @author zhihou + */ +public class MySqlContext { + + /** + * Table Name + */ + public String tableName; + + /** + * Table Alias + */ + public String tableAlias; + + /** + * Number of inserts + */ + public Integer insertRows; + + /** + * Where condition + */ + private String whereCondition; + + /** + * Query column name collection + */ + public List queryColumnNames = new ArrayList<>(); + + /** + * Conditional query column name collection + */ + public List queryWhereColumnNames = new ArrayList<>(); + + /** + * Conditional query column name corresponding value collection + */ + public List queryWhereValColumnNames = new ArrayList<>(); + + /** + * Query column name collection + */ + public List insertColumnNames = new ArrayList<>(); + + /** + * Insert the value set corresponding to the column name + */ + public List> insertForValColumnNames = new ArrayList<>(); + + /** + * Delete condition column name set + */ + public List deleteForWhereColumnNames = new ArrayList<>(); + + /** + * Conditional delete column name object value collection + */ + public List deleteForWhereValColumnNames = new ArrayList<>(); + + /** + * Conditional update condition column name object collection + */ + public List updateForWhereColumnNames = new ArrayList<>(); + + /** + * Conditional update column name object value collection + */ + public List updateForWhereValColumnNames = new ArrayList<>(); + + /** + * Update column name object value collection + */ + public List updateFoColumnNames = new ArrayList<>(); + + + /** + * Update object value collection + */ + public List updateForValues = new ArrayList<>(); + + /** + * sql object information collection + */ + public List sqlInfos = new ArrayList<>(); + + /** + * originalSQL + */ + private String originalSQL; + + public void addSqlInfo(SQL sql) { + sqlInfos.add(sql); + } + + public void addForInsertColumnName(String columnName) { + SQL sql = new SQL(); + sql.setInsertColumnName(columnName); + insertColumnNames.add(sql); + } + + public void addForInsertValColumnName(List columnName) { + insertForValColumnNames.add(columnName); + } + + public void addQueryColumnNames(String columnName) { + SQL sql = new SQL(); + sql.setColumnName(columnName); + queryColumnNames.add(sql); + } + + public void addQueryWhereColumnNames(String columnName) { + SQL sql = new SQL(); + sql.setQueryWhereColumnName(columnName); + queryWhereColumnNames.add(sql); + } + + public void addQueryWhereValColumnNames(String columnName) { + SQL sql = new SQL(); + sql.setQueryWhereValColumnName(columnName); + queryWhereValColumnNames.add(sql); + } + + public void addDeleteWhereColumnNames(String columnName) { + SQL sql = new SQL(); + sql.setDeleteWhereColumnName(columnName); + deleteForWhereColumnNames.add(sql); + } + + public void addDeleteWhereValColumnNames(String columnName) { + SQL sql = new SQL(); + sql.setDeleteWhereValColumnName(columnName); + deleteForWhereValColumnNames.add(sql); + } + + + public void addUpdateWhereValColumnNames(String columnName) { + SQL sql = new SQL(); + sql.setUpdateWhereValColumnName(columnName); + updateForWhereValColumnNames.add(sql); + } + + + public void addUpdateWhereColumnNames(String columnName) { + SQL sql = new SQL(); + sql.setUpdateWhereColumnName(columnName); + updateForWhereColumnNames.add(sql); + } + + public void addUpdateColumnNames(String columnName) { + SQL sql = new SQL(); + sql.setUpdateColumn(columnName); + updateFoColumnNames.add(sql); + } + + public void addUpdateValues(String columnName) { + SQL sql = new SQL(); + sql.setUpdateValue(columnName); + updateForValues.add(sql); + } + + public static class SQL { + private String columnName; + private String tableName; + private String queryWhereValColumnName; + private String queryWhereColumnName; + private String insertColumnName; + private String deleteWhereValColumnName; + private String deleteWhereColumnName; + private String updateWhereValColumnName; + private String updateWhereColumnName; + private String updateColumn; + private String updateValue; + private Integer sqlType; + private String sql; + + public String getColumnName() { + return columnName; + } + + public void setColumnName(String columnName) { + this.columnName = columnName; + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public String getQueryWhereValColumnName() { + return queryWhereValColumnName; + } + + public void setQueryWhereValColumnName(String queryWhereValColumnName) { + this.queryWhereValColumnName = queryWhereValColumnName; + } + + public String getQueryWhereColumnName() { + return queryWhereColumnName; + } + + public void setQueryWhereColumnName(String queryWhereColumnName) { + this.queryWhereColumnName = queryWhereColumnName; + } + + public String getInsertColumnName() { + return insertColumnName; + } + + public void setInsertColumnName(String insertColumnName) { + this.insertColumnName = insertColumnName; + } + + public String getDeleteWhereValColumnName() { + return deleteWhereValColumnName; + } + + public void setDeleteWhereValColumnName(String deleteWhereValColumnName) { + this.deleteWhereValColumnName = deleteWhereValColumnName; + } + + public String getDeleteWhereColumnName() { + return deleteWhereColumnName; + } + + public void setDeleteWhereColumnName(String deleteWhereColumnName) { + this.deleteWhereColumnName = deleteWhereColumnName; + } + + public String getUpdateWhereValColumnName() { + return updateWhereValColumnName; + } + + public void setUpdateWhereValColumnName(String updateWhereValColumnName) { + this.updateWhereValColumnName = updateWhereValColumnName; + } + + public String getUpdateWhereColumnName() { + return updateWhereColumnName; + } + + public void setUpdateWhereColumnName(String updateWhereColumnName) { + this.updateWhereColumnName = updateWhereColumnName; + } + + public String getUpdateColumn() { + return updateColumn; + } + + public void setUpdateColumn(String updateColumn) { + this.updateColumn = updateColumn; + } + + public String getUpdateValue() { + return updateValue; + } + + public void setUpdateValue(String updateValue) { + this.updateValue = updateValue; + } + + public Integer getSqlType() { + return sqlType; + } + + public void setSqlType(Integer sqlType) { + this.sqlType = sqlType; + } + + public String getSql() { + return sql; + } + + public void setSql(String sql) { + this.sql = sql; + } + } + + public List getQueryColumnNames() { + return queryColumnNames; + } + + public List getQueryWhereColumnNames() { + return queryWhereColumnNames; + } + + public List getQueryWhereValColumnNames() { + return queryWhereValColumnNames; + } + + public List getInsertColumnNames() { + return insertColumnNames; + } + + public List> getInsertForValColumnNames() { + return insertForValColumnNames; + } + + public List getDeleteForWhereColumnNames() { + return deleteForWhereColumnNames; + } + + public List getDeleteForWhereValColumnNames() { + return deleteForWhereValColumnNames; + } + + public List getUpdateForWhereColumnNames() { + return updateForWhereColumnNames; + } + + public List getUpdateForWhereValColumnNames() { + return updateForWhereValColumnNames; + } + + public List getUpdateFoColumnNames() { + return updateFoColumnNames; + } + + public List getUpdateForValues() { + return updateForValues; + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public Integer getInsertRows() { + return insertRows; + } + + public void setInsertRows(Integer insertRows) { + this.insertRows = insertRows; + } + + public String getWhereCondition() { + return whereCondition; + } + + public void setWhereCondition(String whereCondition) { + this.whereCondition = whereCondition; + } + + public List getSqlInfos() { + return sqlInfos; + } + + public String getOriginalSQL() { + return originalSQL; + } + + public void setOriginalSQL(String originalSQL) { + this.originalSQL = originalSQL; + } + + public void setTableAlias(String tableAlias) { + this.tableAlias = tableAlias; + } + + public String getTableAlias() { + return tableAlias; + } +} diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr/MySqlLexer.g4 b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr/MySqlLexer.g4 new file mode 100644 index 00000000000..f8e053d4025 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr/MySqlLexer.g4 @@ -0,0 +1,1247 @@ +/* +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; + +channels { MYSQLCOMMENT, ERRORCHANNEL } + +// SKIP + +SPACE: [ \t\r\n]+ -> channel(HIDDEN); +SPEC_MYSQL_COMMENT: '/*!' .+? '*/' -> channel(MYSQLCOMMENT); +COMMENT_INPUT: '/*' .*? '*/' -> channel(HIDDEN); +LINE_COMMENT: ( + ('-- ' | '#') ~[\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'; +AS: 'AS'; +ASC: 'ASC'; +BEFORE: 'BEFORE'; +BETWEEN: 'BETWEEN'; +BOTH: 'BOTH'; +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_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'; +ENCLOSED: 'ENCLOSED'; +ESCAPED: 'ESCAPED'; +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'; +IF: 'IF'; +IGNORE: 'IGNORE'; +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'; +LEADING: 'LEADING'; +LEAVE: 'LEAVE'; +LEFT: 'LEFT'; +LIKE: 'LIKE'; +LIMIT: 'LIMIT'; +LINEAR: 'LINEAR'; +LINES: 'LINES'; +LOAD: 'LOAD'; +LOCK: 'LOCK'; +LOOP: 'LOOP'; +LOW_PRIORITY: 'LOW_PRIORITY'; +MASTER_BIND: 'MASTER_BIND'; +MASTER_SSL_VERIFY_SERVER_CERT: 'MASTER_SSL_VERIFY_SERVER_CERT'; +MATCH: 'MATCH'; +MAXVALUE: 'MAXVALUE'; +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'; +OPTIONALLY: 'OPTIONALLY'; +OR: 'OR'; +ORDER: 'ORDER'; +OUT: 'OUT'; +OUTER: 'OUTER'; +OUTFILE: 'OUTFILE'; +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'; +RETURN: 'RETURN'; +REVOKE: 'REVOKE'; +RIGHT: 'RIGHT'; +RLIKE: 'RLIKE'; +SCHEMA: 'SCHEMA'; +SCHEMAS: 'SCHEMAS'; +SELECT: 'SELECT'; +SET: 'SET'; +SEPARATOR: 'SEPARATOR'; +SHOW: 'SHOW'; +SIGNAL: 'SIGNAL'; +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'; +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_VALID: 'JSON_VALID'; +JSON_SCHEMA_VALID: 'JSON_SCHEMA_VALID'; + +// Group function Keywords + +AVG: 'AVG'; +BIT_AND: 'BIT_AND'; +BIT_OR: 'BIT_OR'; +BIT_XOR: 'BIT_XOR'; +COUNT: 'COUNT'; +GROUP_CONCAT: 'GROUP_CONCAT'; +MAX: 'MAX'; +MIN: 'MIN'; +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'; +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'; +CONCURRENT: 'CONCURRENT'; +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'; +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'; +ENCRYPTION: 'ENCRYPTION'; +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'; +FAST: 'FAST'; +FAULTS: 'FAULTS'; +FIELDS: 'FIELDS'; +FILE_BLOCK_SIZE: 'FILE_BLOCK_SIZE'; +FILTER: 'FILTER'; +FIRST: 'FIRST'; +FIXED: 'FIXED'; +FLUSH: 'FLUSH'; +FOLLOWS: 'FOLLOWS'; +FOUND: 'FOUND'; +FULL: 'FULL'; +FUNCTION: 'FUNCTION'; +GENERAL: 'GENERAL'; +GLOBAL: 'GLOBAL'; +GRANTS: 'GRANTS'; +GROUP_REPLICATION: 'GROUP_REPLICATION'; +HANDLER: 'HANDLER'; +HASH: 'HASH'; +HELP: 'HELP'; +HOST: 'HOST'; +HOSTS: 'HOSTS'; +IDENTIFIED: 'IDENTIFIED'; +IGNORE_SERVER_IDS: 'IGNORE_SERVER_IDS'; +IMPORT: 'IMPORT'; +INDEXES: 'INDEXES'; +INITIAL_SIZE: 'INITIAL_SIZE'; +INPLACE: 'INPLACE'; +INSERT_METHOD: 'INSERT_METHOD'; +INSTALL: 'INSTALL'; +INSTANCE: 'INSTANCE'; +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'; +NODEGROUP: 'NODEGROUP'; +NONE: 'NONE'; +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'; +PARSER: 'PARSER'; +PARTIAL: 'PARTIAL'; +PARTITIONING: 'PARTITIONING'; +PARTITIONS: 'PARTITIONS'; +PASSWORD: 'PASSWORD'; +PHASE: 'PHASE'; +PLUGIN: 'PLUGIN'; +PLUGIN_DIR: 'PLUGIN_DIR'; +PLUGINS: 'PLUGINS'; +PORT: 'PORT'; +PRECEDES: 'PRECEDES'; +PREPARE: 'PREPARE'; +PRESERVE: 'PRESERVE'; +PREV: 'PREV'; +PROCESSLIST: 'PROCESSLIST'; +PROFILE: 'PROFILE'; +PROFILES: 'PROFILES'; +PROXY: 'PROXY'; +QUERY: 'QUERY'; +QUICK: 'QUICK'; +REBUILD: 'REBUILD'; +RECOVER: 'RECOVER'; +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'; +RESUME: 'RESUME'; +RETURNED_SQLSTATE: 'RETURNED_SQLSTATE'; +RETURNS: 'RETURNS'; +ROLE: 'ROLE'; +ROLLBACK: 'ROLLBACK'; +ROLLUP: 'ROLLUP'; +ROTATE: 'ROTATE'; +ROW: 'ROW'; +ROWS: 'ROWS'; +ROW_FORMAT: 'ROW_FORMAT'; +SAVEPOINT: 'SAVEPOINT'; +SCHEDULE: 'SCHEDULE'; +SECURITY: 'SECURITY'; +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'; +TEMPORARY: 'TEMPORARY'; +TEMPTABLE: 'TEMPTABLE'; +THAN: 'THAN'; +TRADITIONAL: 'TRADITIONAL'; +TRANSACTION: 'TRANSACTION'; +TRANSACTIONAL: 'TRANSACTIONAL'; +TRIGGERS: 'TRIGGERS'; +TRUNCATE: 'TRUNCATE'; +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'; +WITHOUT: 'WITHOUT'; +WORK: 'WORK'; +WRAPPER: 'WRAPPER'; +X509: 'X509'; +XA: 'XA'; +XML: 'XML'; + + +// 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 + +TABLES: 'TABLES'; +ROUTINE: 'ROUTINE'; +EXECUTE: 'EXECUTE'; +FILE: 'FILE'; +PROCESS: 'PROCESS'; +RELOAD: 'RELOAD'; +SHUTDOWN: 'SHUTDOWN'; +SUPER: 'SUPER'; +PRIVILEGES: 'PRIVILEGES'; +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'; +FIREWALL_ADMIN: 'FIREWALL_ADMIN'; +FIREWALL_USER: 'FIREWALL_USER'; +GROUP_REPLICATION_ADMIN: 'GROUP_REPLICATION_ADMIN'; +INNODB_REDO_LOG_ARCHIVE: 'INNODB_REDO_LOG_ARCHIVE'; +NDB_STORED_USER: 'NDB_STORED_USER'; +PERSIST_RO_VARIABLES_ADMIN: 'PERSIST_RO_VARIABLES_ADMIN'; +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'; +SESSION_VARIABLES_ADMIN: QUOTE_SYMB? 'SESSION_VARIABLES_ADMIN' QUOTE_SYMB?; +SET_USER_ID: 'SET_USER_ID'; +SHOW_ROUTINE: 'SHOW_ROUTINE'; +SYSTEM_VARIABLES_ADMIN: 'SYSTEM_VARIABLES_ADMIN'; +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'; +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'; +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'; +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: '+'; +MINUSMINUS: '--'; +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 + ); +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]*?[A-Z_$]+?[A-Z_$0-9]* | '?'; +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/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr/MySqlParser.g4 b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr/MySqlParser.g4 new file mode 100644 index 00000000000..9b1c45251fe --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr/MySqlParser.g4 @@ -0,0 +1,2608 @@ +/* +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? MINUSMINUS? EOF + ; + +sqlStatements + : (sqlStatement MINUSMINUS? SEMI? | emptyStatement)* + (sqlStatement (MINUSMINUS? SEMI)? | emptyStatement) + ; + +sqlStatement + : ddlStatement | dmlStatement | transactionStatement + | replicationStatement | preparedStatement + | administrationStatement | utilityStatement + ; + +emptyStatement + : SEMI + ; + +ddlStatement + : createDatabase | createEvent | createIndex + | createLogfileGroup | createProcedure | createFunction + | createServer | createTable | createTablespaceInnodb + | createTablespaceNdb | createTrigger | createView + | alterDatabase | alterEvent | alterFunction + | alterInstance | alterLogfileGroup | alterProcedure + | alterServer | alterTable | alterTablespace | alterView + | dropDatabase | dropEvent | dropIndex + | dropLogfileGroup | dropProcedure | dropFunction + | dropServer | dropTable | dropTablespace + | dropTrigger | dropView + | 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 '='? algType=(DEFAULT | INPLACE | COPY) + | LOCK '='? + 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? + FUNCTION fullId + '(' functionParameter? (',' functionParameter)* ')' + RETURNS dataType + routineOption* + (routineBody | returnStatement) + ; + +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 + ; + +createView + : CREATE (OR REPLACE)? + ( + ALGORITHM '=' algType=(UNDEFINED | MERGE | TEMPTABLE) + )? + ownerStatement? + (SQL SECURITY secContext=(DEFINER | INVOKER))? + VIEW fullId ('(' uidList ')')? AS selectStatement + (WITH checkOption=(CASCADED | LOCAL)? CHECK OPTION)? + ; + +// details + +createDatabaseOption + : DEFAULT? (CHARACTER SET | CHARSET) '='? (charsetName | DEFAULT) + | DEFAULT? COLLATE '='? collationName + ; + +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 '='? fileSizeLiteral + | indexType + | WITH PARSER uid + | COMMENT STRING_LITERAL + | INVISIBLE + | VISIBLE + ; + +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 + : uid columnDefinition #columnDeclaration + | tableConstraint #constraintDeclaration + | indexColumnDefinition #indexDeclaration + ; + +columnDefinition + : dataType columnConstraint* + ; + +columnConstraint + : nullNotnull #nullColumnConstraint + | DEFAULT defaultValue #defaultColumnConstraint + | (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 + ; + +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 + | AUTO_INCREMENT '='? decimalLiteral #tableOptionAutoIncrement + | AVG_ROW_LENGTH '='? decimalLiteral #tableOptionAverage + | DEFAULT? (CHARACTER SET | 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 DIRECTORY '='? STRING_LITERAL #tableOptionDataDirectory + | DELAY_KEY_WRITE '='? boolValue=('0' | '1') #tableOptionDelay + | ENCRYPTION '='? STRING_LITERAL #tableOptionEncryption + | 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 + ) #tableOptionRowFormat + | STATS_AUTO_RECALC '='? extBoolValue=(DEFAULT | '0' | '1') #tableOptionRecalculation + | STATS_PERSISTENT '='? extBoolValue=(DEFAULT | '0' | '1') #tableOptionPersistent + | STATS_SAMPLE_PAGES '='? decimalLiteral #tableOptionSamplePage + | TABLESPACE uid tablespaceStorage? #tableOptionTablespace + | tablespaceStorage #tableOptionTablespace + | UNION '='? '(' tables ')' #tableOptionUnion + ; + +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)*)? #partitionComparision + | PARTITION uid VALUES LESS THAN + partitionDefinerAtom partitionOption* + (subpartitionDefinition (',' subpartitionDefinition)*)? #partitionComparision + | 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 + : 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 + (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 | 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 PRIMARY KEY #alterByDropPrimaryKey + | RENAME indexFormat=(INDEX | KEY) uid TO uid #alterByRenameIndex + | DROP indexFormat=(INDEX | KEY) uid #alterByDropIndex + | 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 + ; + + +// 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)? + ; + + +// 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=uidList ')')? 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 + ; + +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 expressionForUpdate)? 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 + : tableSourceItem joinPart* #tableSourceBase + | '(' tableSourceItem joinPart* ')' #tableSourceNested + ; + +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 tableSourceItem + ( + ON expression + | USING '(' uidList ')' + )? #innerJoin + | STRAIGHT_JOIN tableSourceItem (ON expression)? #straightJoin + | (LEFT | RIGHT) OUTER? JOIN 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? orderByClause? limitClause? + | SELECT selectSpec* selectElements + fromClause? orderByClause? limitClause? selectIntoExpression? + ; + +querySpecificationNointo + : SELECT selectSpec* selectElements + fromClause? orderByClause? limitClause? + ; + +unionParenthesis + : UNION unionType=(ALL | DISTINCT)? queryExpressionNointo + ; + +unionStatement + : UNION unionType=(ALL | DISTINCT)? + (querySpecificationNointo | queryExpressionNointo) + ; + +// 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 + ; + +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)? + ( + GROUP BY + groupByItem (',' groupByItem)* + (WITH ROLLUP)? + )? + (HAVING havingExpr=expression)? + ; + +groupByItem + : expression order=(ASC | DESC)? + ; + +limitClause + : LIMIT + ( + (offset=limitClauseAtom ',')? limit=limitClauseAtom + | limit=limitClauseAtom OFFSET offset=limitClauseAtom + ) + ; + +limitClauseAtom + : decimalLiteral | mysqlVariable + ; + + +// 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 TABLES lockTableElement (',' lockTableElement)* + ; + +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 defaultValue)? + ; + +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)* #alterUserMysqlV57 + ; + +createUser + : CREATE USER userAuthOption (',' userAuthOption)* #createUserMysqlV56 + | CREATE USER ifNotExists? + userAuthOption (',' userAuthOption)* + ( + REQUIRE + (tlsNone=NONE | tlsOption (AND? tlsOption)* ) + )? + (WITH userResourceOption+)? + (userPasswordOption | userLockOption)* #createUserMysqlV57 + ; + +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)* )? + ; + +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 + ; + +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 #passwordAuthOption + | userName + IDENTIFIED (WITH authPlugin)? BY STRING_LITERAL #stringAuthOption + | userName + IDENTIFIED WITH authPlugin + (AS STRING_LITERAL)? #hashAuthOption + | userName #simpleAuthOption + ; + +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 + )? + ; + +userLockOption + : ACCOUNT lockType=(LOCK | UNLOCK) + ; + +privelegeClause + : privilege ( '(' uidList ')' )? + ; + +privilege + : ALL PRIVILEGES? + | ALTER ROUTINE? + | CREATE + (TEMPORARY TABLES | ROUTINE | VIEW | USER | TABLESPACE)? + | DELETE | DROP | 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 + | SESSION_VARIABLES_ADMIN + ; + +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 + ; + +checkTable + : CHECK TABLE tables checkTableOption* + ; + +checksumTable + : CHECKSUM TABLE tables actionOption=(QUICK | EXTENDED)? + ; + +optimizeTable + : OPTIMIZE actionOption=(NO_WRITE_TO_BINLOG | LOCAL)? + TABLE 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 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 + (',' variableClause ('=' | ':=') expression)* #setVariable + | SET (CHARACTER 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)? + decimalLiteral+ + ; + +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 + | 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 ) + ; + +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 + ; + +fullColumnName + : uid (dottedId dottedId? )? + ; + +indexColumnName + : (uid | STRING_LITERAL) ('(' decimalLiteral ')')? sortType=(ASC | DESC)? + ; + +userName + : STRING_USER_NAME | ID | STRING_LITERAL; + +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 + ; + +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 + | functionNameBase + ; + +dottedId + : DOT_ID + | '.' uid + ; + + +// Literals + +decimalLiteral + : DECIMAL_LITERAL | ZERO_DECIMAL | ONE_DECIMAL | TWO_DECIMAL + ; + +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 + ) + lengthOneDimension? BINARY? + ((CHARACTER SET | CHARSET) charsetName)? + (COLLATE collationName)? #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 + ) + 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) + lengthTwoOptionalDimension? (SIGNED | UNSIGNED)? ZEROFILL? #dimensionDataType + | typeName=( + DATE | TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB + | BOOL | BOOLEAN | SERIAL + ) #simpleDataType + | typeName=( + BIT | TIME | TIMESTAMP | DATETIME | BINARY + | VARBINARY | YEAR + ) + lengthOneDimension? #dimensionDataType + | typeName=(ENUM | SET) + collectionOptions BINARY? + ((CHARACTER SET | CHARSET) charsetName)? #collectionDataType + | typeName=( + GEOMETRYCOLLECTION | GEOMCOLLECTION | LINESTRING | MULTILINESTRING + | MULTIPOINT | MULTIPOLYGON | POINT | POLYGON | JSON | GEOMETRY + ) #spatialDataType + ; + +collectionOptions + : '(' STRING_LITERAL (',' STRING_LITERAL)* ')' + ; + +convertedDataType + : typeName=(BINARY| NCHAR) lengthOneDimension? + | typeName=CHAR lengthOneDimension? ((CHARACTER SET | CHARSET) charsetName)? + | typeName=(DATE | DATETIME | TIME | JSON) + | typeName=DECIMAL lengthTwoDimension? + | (SIGNED | UNSIGNED) INTEGER? + ; + +lengthOneDimension + : '(' decimalLiteral ')' + ; + +lengthTwoDimension + : '(' decimalLiteral ',' decimalLiteral ')' + ; + +lengthTwoOptionalDimension + : '(' decimalLiteral (',' decimalLiteral)? ')' + ; + + +// Common Lists + +uidList + : uid (',' uid)* + ; + +tables + : tableName (',' tableName)* + ; + +indexColumnNames + : '(' indexColumnName (',' indexColumnName)* ')' + ; + +expressions + : expression (',' expression)* + ; + +expressionsForUpdate + : expressionForUpdate (',' expressionForUpdate)* + ; + +expressionsWithDefaults + : expressionOrDefault (',' expressionOrDefault)* + ; + +constants + : constant (',' constant)* + ; + +simpleStrings + : STRING_LITERAL (',' STRING_LITERAL)* + ; + +userVariables + : LOCAL_ID (',' LOCAL_ID)* + ; + + +// Common Expressons + +defaultValue + : NULL_LITERAL + | unaryOperator? constant + | currentTimestamp (ON UPDATE currentTimestamp)? + ; + +currentTimestamp + : + ( + (CURRENT_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP) ('(' decimalLiteral? ')')? + | NOW '(' decimalLiteral? ')' + ) + ; + +expressionOrDefault + : expression | DEFAULT + ; + +ifExists + : IF EXISTS; + +ifNotExists + : IF NOT EXISTS; + + +// Functions + +functionCall + : specificFunction #specificFunctionCall + | aggregateWindowedFunction #aggregateFunctionCall + | scalarFunctionName '(' functionArgs? ')' #scalarFunctionCall + | fullId '(' functionArgs? ')' #udfFunctionCall + | passwordFunctionClause #passwordFunctionCall + ; + +specificFunction + : ( + CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP + | CURRENT_USER | LOCALTIME + ) #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 #caseFunctionCall + | 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 + ; + +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 ')' + | COUNT '(' (starArg='*' | aggregator=ALL? functionArg) ')' + | COUNT '(' aggregator=DISTINCT functionArgs ')' + | ( + BIT_AND | BIT_OR | BIT_XOR | STD | STDDEV | STDDEV_POP + | STDDEV_SAMP | VAR_POP | VAR_SAMP | VARIANCE + ) '(' aggregator=ALL? functionArg ')' + | GROUP_CONCAT '(' + aggregator=DISTINCT? functionArgs + (ORDER BY + orderByExpression (',' orderByExpression)* + )? (SEPARATOR separator=STRING_LITERAL)? + ')' + ; + +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 #binaryComparasionPredicate + | predicate comparisonOperator + quantifier=(ALL | ANY | SOME) '(' selectStatement ')' #subqueryComparasionPredicate + | 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 + ; + +expressionForUpdate + : notOperator=(NOT | '!') expressionForUpdate #notExpressionForUpdate + | expressionForUpdate logicalOperator expressionForUpdate #logicalExpressionForUpdate + | expressionForUpdate IS NOT? testValue=(TRUE | FALSE | UNKNOWN) #isExpressionForUpdate + | predicateForUpdate #predicateExpressionForUpdate + ; + +predicateForUpdate + : predicateForUpdate NOT? IN '(' (selectStatement | expressionsForUpdate) ')' #inPredicateForUpdate + | predicateForUpdate IS nullNotnull #isNullPredicateForUpdate + | left=predicateForUpdate comparisonOperator right=predicateForUpdate #binaryComparasionPredicateForUpdate + | predicateForUpdate comparisonOperator + quantifier=(ALL | ANY | SOME) '(' selectStatement ')' #subqueryComparasionPredicateForUpdate + | predicateForUpdate NOT? BETWEEN predicateForUpdate AND predicateForUpdate #betweenPredicateForUpdate + | predicateForUpdate SOUNDS LIKE predicateForUpdate #soundsLikePredicateForUpdate + | predicateForUpdate NOT? LIKE predicateForUpdate (ESCAPE STRING_LITERAL)? #likePredicateForUpdate + | predicateForUpdate NOT? regex=(REGEXP | RLIKE) predicate #regexpPredicateForUpdate + | (LOCAL_ID VAR_ASSIGN)? expressionAtomForUpdate #expressionAtomPredicateForUpdate + ; + +// Add in ASTVisitor nullNotnull in constant +expressionAtomForUpdate + : constant #constantExpressionAtomForUpdate + | fullColumnName #fullColumnNameExpressionAtomForUpdate + | functionCall #functionCallExpressionAtomForUpdate + | expressionAtomForUpdate COLLATE collationName #collateExpressionAtomForUpdate + | mysqlVariable #mysqlVariableExpressionAtomForUpdate + | unaryOperator expressionAtomForUpdate #unaryExpressionAtomForUpdate + | BINARY expressionAtomForUpdate #binaryExpressionAtomForUpdate + | '(' expressionForUpdate (',' expressionForUpdate)* ')' #nestedExpressionAtomForUpdate + | ROW '(' expressionForUpdate (',' expressionForUpdate)+ ')' #nestedRowExpressionAtomForUpdate + | EXISTS '(' selectStatement ')' #existsExpessionAtomForUpdate + | '(' selectStatement ')' #subqueryExpessionAtomForUpdate + | INTERVAL expressionForUpdate intervalType #intervalExpressionAtomForUpdate + | left=expressionAtomForUpdate bitOperator right=expressionAtomForUpdate #bitExpressionAtomForUpdate + | left=expressionAtomForUpdate mathOperator right=expressionAtomForUpdate #mathExpressionAtomForUpdate + ; + +// Add in ASTVisitor nullNotnull in constant +expressionAtom + : constant #constantExpressionAtom + | fullColumnName #fullColumnNameExpressionAtom + | functionCall #functionCallExpressionAtom + | expressionAtom COLLATE collationName #collateExpressionAtom + | mysqlVariable #mysqlVariableExpressionAtom + | unaryOperator expressionAtom #unaryExpressionAtom + | BINARY expressionAtom #binaryExpressionAtom + | '(' expression (',' expression)* ')' #nestedExpressionAtom + | ROW '(' expression (',' expression)+ ')' #nestedRowExpressionAtom + | EXISTS '(' selectStatement ')' #existsExpessionAtom + | '(' selectStatement ')' #subqueryExpessionAtom + | INTERVAL expression intervalType #intervalExpressionAtom + | left=expressionAtom bitOperator right=expressionAtom #bitExpressionAtom + | left=expressionAtom mathOperator right=expressionAtom #mathExpressionAtom + ; + +unaryOperator + : '!' | '~' | '+' | '-' | NOT + ; + +comparisonOperator + : '=' | '>' | '<' | '<' '=' | '>' '=' + | '<' '>' | '!' '=' | '<' '=' '>' + ; + +logicalOperator + : AND | '&' '&' | XOR | OR | '|' '|' + ; + +bitOperator + : '<' '<' | '>' '>' | '&' | '^' | '|' + ; + +mathOperator + : '*' | '/' | '%' | DIV | MOD | '+' | '-' | '--' + ; + + +// Simple id sets +// (that keyword, which can be id) + +charsetNameBase + : ARMSCII8 | ASCII | BIG5 | 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 + ; + +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 | 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 | CATALOG_NAME | CIPHER + | CLASS_ORIGIN | CLIENT | CLOSE | COALESCE | CODE + | COLUMNS | COLUMN_FORMAT | COLUMN_NAME | COMMENT | COMMIT | COMPACT + | COMPLETION | COMPRESSED | COMPRESSION | CONCURRENT + | CONNECTION | CONSISTENT | CONSTRAINT_CATALOG | CONSTRAINT_NAME + | CONSTRAINT_SCHEMA | CONTAINS | CONTEXT + | CONTRIBUTORS | COPY | CPU | CURRENT | CURSOR_NAME + | DATA | DATAFILE | DEALLOCATE + | DEFAULT_AUTH | DEFINER | DELAY_KEY_WRITE | DES_KEY_FILE | DIAGNOSTICS | DIRECTORY + | DISABLE | DISCARD | DISK | DO | DUMPFILE | DUPLICATE + | DYNAMIC | ENABLE | ENCRYPTION | END | ENDS | ENGINE | ENGINES + | ERROR | ERRORS | ESCAPE | EVEN | EVENT | EVENTS | EVERY + | EXCHANGE | EXCLUSIVE | EXPIRE | EXPORT | EXTENDED | EXTENT_SIZE | FAST | FAULTS + | FIELDS | FILE_BLOCK_SIZE | FILTER | FIRST | FIXED | FLUSH + | FOLLOWS | FOUND | FULL | FUNCTION | GENERAL | GLOBAL | GRANTS + | GROUP_REPLICATION | HANDLER | HASH | HELP | HOST | HOSTS | IDENTIFIED + | IGNORE_SERVER_IDS | IMPORT | INDEXES | INITIAL_SIZE + | INPLACE | INSERT_METHOD | INSTALL | INSTANCE | INTERNAL | 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 | MEMORY | MERGE | MESSAGE_TEXT + | MID | MIGRATE + | MIN_ROWS | MODE | MODIFY | MUTEX | MYSQL | MYSQL_ERRNO | NAME | NAMES + | NCHAR | NEVER | NEXT | NO | NODEGROUP | NONE | NUMBER | OFFLINE | OFFSET + | OJ | OLD_PASSWORD | ONE | ONLINE | ONLY | OPEN | OPTIMIZER_COSTS + | OPTIONS | OWNER | PACK_KEYS | PAGE | PARSER | PARTIAL + | PARTITIONING | PARTITIONS | PASSWORD | PHASE | PLUGINS + | PLUGIN_DIR | PLUGIN | PORT | PRECEDES | PREPARE | PRESERVE | PREV + | PROCESSLIST | PROFILE | PROFILES | PROXY | QUERY | QUICK + | REBUILD | RECOVER | 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 | RESET | RESUME + | RETURNED_SQLSTATE | RETURNS | ROLLBACK | ROLLUP | ROTATE | ROW | ROWS + | ROW_FORMAT | SAVEPOINT | SCHEDULE | SCHEMA_NAME | SECURITY | SERIAL | 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 + | STACKED | START | STARTS | STATS_AUTO_RECALC | STATS_PERSISTENT + | STATS_SAMPLE_PAGES | STATUS | STOP | STORAGE | STRING + | SUBCLASS_ORIGIN | SUBJECT | SUBPARTITION | SUBPARTITIONS | SUSPEND | SWAPS + | SWITCHES | TABLE_NAME | TABLESPACE | TEMPORARY | TEMPTABLE | THAN | TRADITIONAL + | TRANSACTION | TRIGGERS | TRUNCATE | UNDEFINED | UNDOFILE + | UNDO_BUFFER_SIZE | UNINSTALL | UNKNOWN | UNTIL | UPGRADE | USER | USE_FRM | USER_RESOURCES + | VALIDATION | VALUE | VARIABLES | VIEW | WAIT | WARNINGS | WITHOUT + | WORK | WRAPPER | X509 | XA | 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 | DATABASE | DATE + | DATEDIFF | DATE_FORMAT | DAY | DAYNAME | DAYOFMONTH + | DAYOFWEEK | DAYOFYEAR | DECODE | DEGREES | DES_DECRYPT + | DES_ENCRYPT | DIMENSION | DISJOINT | ELT | ENCODE + | ENCRYPT | ENDPOINT | ENVELOPE | EQUALS | EXP | EXPORT_SET + | EXTERIORRING | EXTRACTVALUE | FIELD | FIND_IN_SET | 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 | LAST_INSERT_ID + | LCASE | 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 | MONTH | MONTHNAME + | MPOINTFROMTEXT | MPOINTFROMWKB | MPOLYFROMTEXT + | MPOLYFROMWKB | MULTILINESTRING | MULTILINESTRINGFROMTEXT + | MULTILINESTRINGFROMWKB | MULTIPOINT | MULTIPOINTFROMTEXT + | MULTIPOINTFROMWKB | MULTIPOLYGON | MULTIPOLYGONFROMTEXT + | MULTIPOLYGONFROMWKB | NAME_CONST | NULLIF | NUMGEOMETRIES + | NUMINTERIORRINGS | NUMPOINTS | OCT | OCTET_LENGTH | ORD + | OVERLAPS | PERIOD_ADD | PERIOD_DIFF | PI | POINT + | POINTFROMTEXT | POINTFROMWKB | POINTN | POLYFROMTEXT + | POLYFROMWKB | POLYGON | POLYGONFROMTEXT | POLYGONFROMWKB + | POSITION| POW | POWER | QUARTER | QUOTE | RADIANS | RAND + | RANDOM_BYTES | RELEASE_LOCK | REVERSE | RIGHT | ROUND + | ROW_COUNT | RPAD | RTRIM | 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 + ; \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/listener/DeleteSpecificationSqlListener.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/listener/DeleteSpecificationSqlListener.java new file mode 100644 index 00000000000..762b6b5f554 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/listener/DeleteSpecificationSqlListener.java @@ -0,0 +1,83 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql.listener; + +import io.seata.sqlparser.antlr.mysql.MySqlContext; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParserBaseListener; +import io.seata.sqlparser.antlr.mysql.visit.StatementSqlVisitor; + +/** + * @author houzhi + */ +public class DeleteSpecificationSqlListener extends MySqlParserBaseListener { + + private MySqlContext sqlQueryContext; + + public DeleteSpecificationSqlListener(MySqlContext sqlQueryContext) { + this.sqlQueryContext = sqlQueryContext; + } + + @Override + public void enterAtomTableItem(MySqlParser.AtomTableItemContext ctx) { + MySqlParser.TableNameContext tableNameContext = ctx.tableName(); + sqlQueryContext.setTableName(tableNameContext.getText()); + MySqlParser.UidContext uid = ctx.uid(); + sqlQueryContext.setTableAlias(uid.getText()); + super.enterAtomTableItem(ctx); + } + + @Override + public void enterConstantExpressionAtom(MySqlParser.ConstantExpressionAtomContext ctx) { + sqlQueryContext.addDeleteWhereValColumnNames(ctx.getText()); + super.enterConstantExpressionAtom(ctx); + } + + @Override + public void enterFullColumnNameExpressionAtom(MySqlParser.FullColumnNameExpressionAtomContext ctx) { + sqlQueryContext.addDeleteWhereColumnNames(ctx.getText()); + super.enterFullColumnNameExpressionAtom(ctx); + } + + @Override + public void enterSingleDeleteStatement(MySqlParser.SingleDeleteStatementContext ctx) { + MySqlParser.TableNameContext tableNameContext = ctx.tableName(); + sqlQueryContext.setTableName(tableNameContext.getText()); + MySqlParser.ExpressionContext expression = ctx.expression(); + StatementSqlVisitor statementSqlVisitor = new StatementSqlVisitor(); + String text = statementSqlVisitor.visit(expression).toString(); + sqlQueryContext.setWhereCondition(text); + super.enterSingleDeleteStatement(ctx); + } + + @Override + public void enterMultipleDeleteStatement(MySqlParser.MultipleDeleteStatementContext ctx) { + MySqlParser.ExpressionContext expression = ctx.expression(); + StatementSqlVisitor statementSqlVisitor = new StatementSqlVisitor(); + String text = statementSqlVisitor.visit(expression).toString(); + sqlQueryContext.setWhereCondition(text); + super.enterMultipleDeleteStatement(ctx); + } + + @Override + public void enterInPredicate(MySqlParser.InPredicateContext ctx) { + StatementSqlVisitor statementSqlVisitor = new StatementSqlVisitor(); + String text = statementSqlVisitor.visit(ctx).toString(); + sqlQueryContext.setWhereCondition(text); + super.enterInPredicate(ctx); + } + +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/listener/SelectSpecificationSqlListener.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/listener/SelectSpecificationSqlListener.java new file mode 100644 index 00000000000..9adb2f96ae7 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/listener/SelectSpecificationSqlListener.java @@ -0,0 +1,89 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql.listener; + +import io.seata.sqlparser.antlr.mysql.MySqlContext; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParserBaseListener; +import io.seata.sqlparser.antlr.mysql.visit.StatementSqlVisitor; + +import java.util.List; + +/** + * @author houzhi + */ +public class SelectSpecificationSqlListener extends MySqlParserBaseListener { + + private MySqlContext sqlQueryContext; + + public SelectSpecificationSqlListener(MySqlContext sqlQueryContext) { + this.sqlQueryContext = sqlQueryContext; + } + + @Override + public void enterTableName(MySqlParser.TableNameContext ctx) { + + sqlQueryContext.setTableName(ctx.getText()); + super.enterTableName(ctx); + } + + @Override + public void enterAtomTableItem(MySqlParser.AtomTableItemContext ctx) { + + MySqlParser.UidContext uid = ctx.uid(); + if (uid != null) { + String text = uid.getText(); + if (!text.isEmpty()) { + sqlQueryContext.setTableAlias(text); + } + } + super.enterAtomTableItem(ctx); + } + + @Override + public void enterFromClause(MySqlParser.FromClauseContext ctx) { + + MySqlParser.ExpressionContext whereExpr = ctx.whereExpr; + StatementSqlVisitor statementSqlVisitor = new StatementSqlVisitor(); + String text = statementSqlVisitor.visit(whereExpr).toString(); + sqlQueryContext.setWhereCondition(text); + super.enterFromClause(ctx); + } + + @Override + public void enterFullColumnNameExpressionAtom(MySqlParser.FullColumnNameExpressionAtomContext ctx) { + + sqlQueryContext.addQueryWhereColumnNames(ctx.getText()); + super.enterFullColumnNameExpressionAtom(ctx); + } + + @Override + public void enterConstantExpressionAtom(MySqlParser.ConstantExpressionAtomContext ctx) { + + sqlQueryContext.addQueryWhereValColumnNames(ctx.getText()); + super.enterConstantExpressionAtom(ctx); + } + + @Override + public void enterSelectElements(MySqlParser.SelectElementsContext ctx) { + + List selectElementContexts = ctx.selectElement(); + for (MySqlParser.SelectElementContext selectElementContext : selectElementContexts) { + sqlQueryContext.addQueryColumnNames(selectElementContext.getText()); + } + super.enterSelectElements(ctx); + } +} diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/listener/UpdateSpecificationSqlListener.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/listener/UpdateSpecificationSqlListener.java new file mode 100644 index 00000000000..74a1b45861e --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/listener/UpdateSpecificationSqlListener.java @@ -0,0 +1,87 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql.listener; + +import io.seata.sqlparser.antlr.mysql.MySqlContext; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParserBaseListener; +import io.seata.sqlparser.antlr.mysql.visit.StatementSqlVisitor; + +/** + * @author houzhi + */ +public class UpdateSpecificationSqlListener extends MySqlParserBaseListener { + + + private MySqlContext sqlQueryContext; + + public UpdateSpecificationSqlListener(MySqlContext sqlQueryContext) { + this.sqlQueryContext = sqlQueryContext; + } + + @Override + public void enterTableName(MySqlParser.TableNameContext ctx) { + + sqlQueryContext.setTableName(ctx.getText()); + super.enterTableName(ctx); + } + + @Override + public void enterConstantExpressionAtomForUpdate(MySqlParser.ConstantExpressionAtomForUpdateContext ctx) { + + sqlQueryContext.addUpdateWhereValColumnNames(ctx.getText()); + super.enterConstantExpressionAtomForUpdate(ctx); + } + + @Override + public void enterFullColumnNameExpressionAtomForUpdate(MySqlParser.FullColumnNameExpressionAtomForUpdateContext ctx) { + + sqlQueryContext.addUpdateWhereColumnNames(ctx.getText()); + super.enterFullColumnNameExpressionAtomForUpdate(ctx); + } + + @Override + public void enterSingleUpdateStatement(MySqlParser.SingleUpdateStatementContext ctx) { + + MySqlParser.ExpressionForUpdateContext expressionForUpdateContext = ctx.expressionForUpdate(); + StatementSqlVisitor statementSqlVisitor = new StatementSqlVisitor(); + String text = statementSqlVisitor.visit(expressionForUpdateContext).toString(); + sqlQueryContext.setWhereCondition(text); + + MySqlParser.UidContext uid = ctx.uid(); + + if (uid != null) { + String alias = uid.getText(); + if (!text.isEmpty()) { + sqlQueryContext.setTableAlias(alias); + } + } + super.enterSingleUpdateStatement(ctx); + } + + @Override + public void enterUpdatedElement(MySqlParser.UpdatedElementContext ctx) { + + MySqlParser.ExpressionContext expression = ctx.expression(); + sqlQueryContext.addUpdateValues(expression.getText()); + + MySqlParser.FullColumnNameContext fullColumnNameContext = ctx.fullColumnName(); + sqlQueryContext.addUpdateColumnNames(fullColumnNameContext.getText()); + + super.enterUpdatedElement(ctx); + } + +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlLexer.interp b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlLexer.interp new file mode 100644 index 00000000000..2a9924b0005 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlLexer.interp @@ -0,0 +1,3181 @@ +token literal names: +null +null +null +null +null +'ADD' +'ALL' +'ALTER' +'ALWAYS' +'ANALYZE' +'AND' +'AS' +'ASC' +'BEFORE' +'BETWEEN' +'BOTH' +'BY' +'CALL' +'CASCADE' +'CASE' +'CAST' +'CHANGE' +'CHARACTER' +'CHECK' +'COLLATE' +'COLUMN' +'CONDITION' +'CONSTRAINT' +'CONTINUE' +'CONVERT' +'CREATE' +'CROSS' +'CURRENT' +'CURRENT_USER' +'CURSOR' +'DATABASE' +'DATABASES' +'DECLARE' +'DEFAULT' +'DELAYED' +'DELETE' +'DESC' +'DESCRIBE' +'DETERMINISTIC' +'DIAGNOSTICS' +'DISTINCT' +'DISTINCTROW' +'DROP' +'EACH' +'ELSE' +'ELSEIF' +'ENCLOSED' +'ESCAPED' +'EXISTS' +'EXIT' +'EXPLAIN' +'FALSE' +'FETCH' +'FOR' +'FORCE' +'FOREIGN' +'FROM' +'FULLTEXT' +'GENERATED' +'GET' +'GRANT' +'GROUP' +'HAVING' +'HIGH_PRIORITY' +'IF' +'IGNORE' +'IN' +'INDEX' +'INFILE' +'INNER' +'INOUT' +'INSERT' +'INTERVAL' +'INTO' +'IS' +'ITERATE' +'JOIN' +'KEY' +'KEYS' +'KILL' +'LEADING' +'LEAVE' +'LEFT' +'LIKE' +'LIMIT' +'LINEAR' +'LINES' +'LOAD' +'LOCK' +'LOOP' +'LOW_PRIORITY' +'MASTER_BIND' +'MASTER_SSL_VERIFY_SERVER_CERT' +'MATCH' +'MAXVALUE' +'MODIFIES' +'NATURAL' +'NOT' +'NO_WRITE_TO_BINLOG' +'NULL' +'NUMBER' +'ON' +'OPTIMIZE' +'OPTION' +'OPTIONALLY' +'OR' +'ORDER' +'OUT' +'OUTER' +'OUTFILE' +'PARTITION' +'PRIMARY' +'PROCEDURE' +'PURGE' +'RANGE' +'READ' +'READS' +'REFERENCES' +'REGEXP' +'RELEASE' +'RENAME' +'REPEAT' +'REPLACE' +'REQUIRE' +'RESIGNAL' +'RESTRICT' +'RETURN' +'REVOKE' +'RIGHT' +'RLIKE' +'SCHEMA' +'SCHEMAS' +'SELECT' +'SET' +'SEPARATOR' +'SHOW' +'SIGNAL' +'SPATIAL' +'SQL' +'SQLEXCEPTION' +'SQLSTATE' +'SQLWARNING' +'SQL_BIG_RESULT' +'SQL_CALC_FOUND_ROWS' +'SQL_SMALL_RESULT' +'SSL' +'STACKED' +'STARTING' +'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_VALID' +'JSON_SCHEMA_VALID' +'AVG' +'BIT_AND' +'BIT_OR' +'BIT_XOR' +'COUNT' +'GROUP_CONCAT' +'MAX' +'MIN' +'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' +'COALESCE' +'CODE' +'COLUMNS' +'COLUMN_FORMAT' +'COLUMN_NAME' +'COMMENT' +'COMMIT' +'COMPACT' +'COMPLETION' +'COMPRESSED' +'COMPRESSION' +'CONCURRENT' +'CONNECTION' +'CONSISTENT' +'CONSTRAINT_CATALOG' +'CONSTRAINT_SCHEMA' +'CONSTRAINT_NAME' +'CONTAINS' +'CONTEXT' +'CONTRIBUTORS' +'COPY' +'CPU' +'CURSOR_NAME' +'DATA' +'DATAFILE' +'DEALLOCATE' +'DEFAULT_AUTH' +'DEFINER' +'DELAY_KEY_WRITE' +'DES_KEY_FILE' +'DIRECTORY' +'DISABLE' +'DISCARD' +'DISK' +'DO' +'DUMPFILE' +'DUPLICATE' +'DYNAMIC' +'ENABLE' +'ENCRYPTION' +'END' +'ENDS' +'ENGINE' +'ENGINES' +'ERROR' +'ERRORS' +'ESCAPE' +'EVEN' +'EVENT' +'EVENTS' +'EVERY' +'EXCHANGE' +'EXCLUSIVE' +'EXPIRE' +'EXPORT' +'EXTENDED' +'EXTENT_SIZE' +'FAST' +'FAULTS' +'FIELDS' +'FILE_BLOCK_SIZE' +'FILTER' +'FIRST' +'FIXED' +'FLUSH' +'FOLLOWS' +'FOUND' +'FULL' +'FUNCTION' +'GENERAL' +'GLOBAL' +'GRANTS' +'GROUP_REPLICATION' +'HANDLER' +'HASH' +'HELP' +'HOST' +'HOSTS' +'IDENTIFIED' +'IGNORE_SERVER_IDS' +'IMPORT' +'INDEXES' +'INITIAL_SIZE' +'INPLACE' +'INSERT_METHOD' +'INSTALL' +'INSTANCE' +'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' +'NODEGROUP' +'NONE' +'OFFLINE' +'OFFSET' +'OF' +'OJ' +'OLD_PASSWORD' +'ONE' +'ONLINE' +'ONLY' +'OPEN' +'OPTIMIZER_COSTS' +'OPTIONS' +'OWNER' +'PACK_KEYS' +'PAGE' +'PARSER' +'PARTIAL' +'PARTITIONING' +'PARTITIONS' +'PASSWORD' +'PHASE' +'PLUGIN' +'PLUGIN_DIR' +'PLUGINS' +'PORT' +'PRECEDES' +'PREPARE' +'PRESERVE' +'PREV' +'PROCESSLIST' +'PROFILE' +'PROFILES' +'PROXY' +'QUERY' +'QUICK' +'REBUILD' +'RECOVER' +'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' +'RESUME' +'RETURNED_SQLSTATE' +'RETURNS' +'ROLE' +'ROLLBACK' +'ROLLUP' +'ROTATE' +'ROW' +'ROWS' +'ROW_FORMAT' +'SAVEPOINT' +'SCHEDULE' +'SECURITY' +'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' +'TEMPORARY' +'TEMPTABLE' +'THAN' +'TRADITIONAL' +'TRANSACTION' +'TRANSACTIONAL' +'TRIGGERS' +'TRUNCATE' +'UNDEFINED' +'UNDOFILE' +'UNDO_BUFFER_SIZE' +'UNINSTALL' +'UNKNOWN' +'UNTIL' +'UPGRADE' +'USER' +'USE_FRM' +'USER_RESOURCES' +'VALIDATION' +'VALUE' +'VARIABLES' +'VIEW' +'VIRTUAL' +'VISIBLE' +'WAIT' +'WARNINGS' +'WITHOUT' +'WORK' +'WRAPPER' +'X509' +'XA' +'XML' +'EUR' +'USA' +'JIS' +'ISO' +'INTERNAL' +'QUARTER' +'MONTH' +'DAY' +'HOUR' +'MINUTE' +'WEEK' +'SECOND' +'MICROSECOND' +'TABLES' +'ROUTINE' +'EXECUTE' +'FILE' +'PROCESS' +'RELOAD' +'SHUTDOWN' +'SUPER' +'PRIVILEGES' +'APPLICATION_PASSWORD_ADMIN' +'AUDIT_ADMIN' +'BACKUP_ADMIN' +'BINLOG_ADMIN' +'BINLOG_ENCRYPTION_ADMIN' +'CLONE_ADMIN' +'CONNECTION_ADMIN' +'ENCRYPTION_KEY_ADMIN' +'FIREWALL_ADMIN' +'FIREWALL_USER' +'GROUP_REPLICATION_ADMIN' +'INNODB_REDO_LOG_ARCHIVE' +'NDB_STORED_USER' +'PERSIST_RO_VARIABLES_ADMIN' +'REPLICATION_APPLIER' +'REPLICATION_SLAVE_ADMIN' +'RESOURCE_GROUP_ADMIN' +'RESOURCE_GROUP_USER' +'ROLE_ADMIN' +null +'SET_USER_ID' +'SHOW_ROUTINE' +'SYSTEM_VARIABLES_ADMIN' +'TABLE_ENCRYPTION_ADMIN' +'VERSION_TOKEN_ADMIN' +'XA_RECOVER_ADMIN' +'ARMSCII8' +'ASCII' +'BIG5' +'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' +'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' +'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' +'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 + +token symbolic names: +null +SPACE +SPEC_MYSQL_COMMENT +COMMENT_INPUT +LINE_COMMENT +ADD +ALL +ALTER +ALWAYS +ANALYZE +AND +AS +ASC +BEFORE +BETWEEN +BOTH +BY +CALL +CASCADE +CASE +CAST +CHANGE +CHARACTER +CHECK +COLLATE +COLUMN +CONDITION +CONSTRAINT +CONTINUE +CONVERT +CREATE +CROSS +CURRENT +CURRENT_USER +CURSOR +DATABASE +DATABASES +DECLARE +DEFAULT +DELAYED +DELETE +DESC +DESCRIBE +DETERMINISTIC +DIAGNOSTICS +DISTINCT +DISTINCTROW +DROP +EACH +ELSE +ELSEIF +ENCLOSED +ESCAPED +EXISTS +EXIT +EXPLAIN +FALSE +FETCH +FOR +FORCE +FOREIGN +FROM +FULLTEXT +GENERATED +GET +GRANT +GROUP +HAVING +HIGH_PRIORITY +IF +IGNORE +IN +INDEX +INFILE +INNER +INOUT +INSERT +INTERVAL +INTO +IS +ITERATE +JOIN +KEY +KEYS +KILL +LEADING +LEAVE +LEFT +LIKE +LIMIT +LINEAR +LINES +LOAD +LOCK +LOOP +LOW_PRIORITY +MASTER_BIND +MASTER_SSL_VERIFY_SERVER_CERT +MATCH +MAXVALUE +MODIFIES +NATURAL +NOT +NO_WRITE_TO_BINLOG +NULL_LITERAL +NUMBER +ON +OPTIMIZE +OPTION +OPTIONALLY +OR +ORDER +OUT +OUTER +OUTFILE +PARTITION +PRIMARY +PROCEDURE +PURGE +RANGE +READ +READS +REFERENCES +REGEXP +RELEASE +RENAME +REPEAT +REPLACE +REQUIRE +RESIGNAL +RESTRICT +RETURN +REVOKE +RIGHT +RLIKE +SCHEMA +SCHEMAS +SELECT +SET +SEPARATOR +SHOW +SIGNAL +SPATIAL +SQL +SQLEXCEPTION +SQLSTATE +SQLWARNING +SQL_BIG_RESULT +SQL_CALC_FOUND_ROWS +SQL_SMALL_RESULT +SSL +STACKED +STARTING +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_VALID +JSON_SCHEMA_VALID +AVG +BIT_AND +BIT_OR +BIT_XOR +COUNT +GROUP_CONCAT +MAX +MIN +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 +COALESCE +CODE +COLUMNS +COLUMN_FORMAT +COLUMN_NAME +COMMENT +COMMIT +COMPACT +COMPLETION +COMPRESSED +COMPRESSION +CONCURRENT +CONNECTION +CONSISTENT +CONSTRAINT_CATALOG +CONSTRAINT_SCHEMA +CONSTRAINT_NAME +CONTAINS +CONTEXT +CONTRIBUTORS +COPY +CPU +CURSOR_NAME +DATA +DATAFILE +DEALLOCATE +DEFAULT_AUTH +DEFINER +DELAY_KEY_WRITE +DES_KEY_FILE +DIRECTORY +DISABLE +DISCARD +DISK +DO +DUMPFILE +DUPLICATE +DYNAMIC +ENABLE +ENCRYPTION +END +ENDS +ENGINE +ENGINES +ERROR +ERRORS +ESCAPE +EVEN +EVENT +EVENTS +EVERY +EXCHANGE +EXCLUSIVE +EXPIRE +EXPORT +EXTENDED +EXTENT_SIZE +FAST +FAULTS +FIELDS +FILE_BLOCK_SIZE +FILTER +FIRST +FIXED +FLUSH +FOLLOWS +FOUND +FULL +FUNCTION +GENERAL +GLOBAL +GRANTS +GROUP_REPLICATION +HANDLER +HASH +HELP +HOST +HOSTS +IDENTIFIED +IGNORE_SERVER_IDS +IMPORT +INDEXES +INITIAL_SIZE +INPLACE +INSERT_METHOD +INSTALL +INSTANCE +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 +NODEGROUP +NONE +OFFLINE +OFFSET +OF +OJ +OLD_PASSWORD +ONE +ONLINE +ONLY +OPEN +OPTIMIZER_COSTS +OPTIONS +OWNER +PACK_KEYS +PAGE +PARSER +PARTIAL +PARTITIONING +PARTITIONS +PASSWORD +PHASE +PLUGIN +PLUGIN_DIR +PLUGINS +PORT +PRECEDES +PREPARE +PRESERVE +PREV +PROCESSLIST +PROFILE +PROFILES +PROXY +QUERY +QUICK +REBUILD +RECOVER +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 +RESUME +RETURNED_SQLSTATE +RETURNS +ROLE +ROLLBACK +ROLLUP +ROTATE +ROW +ROWS +ROW_FORMAT +SAVEPOINT +SCHEDULE +SECURITY +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 +TEMPORARY +TEMPTABLE +THAN +TRADITIONAL +TRANSACTION +TRANSACTIONAL +TRIGGERS +TRUNCATE +UNDEFINED +UNDOFILE +UNDO_BUFFER_SIZE +UNINSTALL +UNKNOWN +UNTIL +UPGRADE +USER +USE_FRM +USER_RESOURCES +VALIDATION +VALUE +VARIABLES +VIEW +VIRTUAL +VISIBLE +WAIT +WARNINGS +WITHOUT +WORK +WRAPPER +X509 +XA +XML +EUR +USA +JIS +ISO +INTERNAL +QUARTER +MONTH +DAY +HOUR +MINUTE +WEEK +SECOND +MICROSECOND +TABLES +ROUTINE +EXECUTE +FILE +PROCESS +RELOAD +SHUTDOWN +SUPER +PRIVILEGES +APPLICATION_PASSWORD_ADMIN +AUDIT_ADMIN +BACKUP_ADMIN +BINLOG_ADMIN +BINLOG_ENCRYPTION_ADMIN +CLONE_ADMIN +CONNECTION_ADMIN +ENCRYPTION_KEY_ADMIN +FIREWALL_ADMIN +FIREWALL_USER +GROUP_REPLICATION_ADMIN +INNODB_REDO_LOG_ARCHIVE +NDB_STORED_USER +PERSIST_RO_VARIABLES_ADMIN +REPLICATION_APPLIER +REPLICATION_SLAVE_ADMIN +RESOURCE_GROUP_ADMIN +RESOURCE_GROUP_USER +ROLE_ADMIN +SESSION_VARIABLES_ADMIN +SET_USER_ID +SHOW_ROUTINE +SYSTEM_VARIABLES_ADMIN +TABLE_ENCRYPTION_ADMIN +VERSION_TOKEN_ADMIN +XA_RECOVER_ADMIN +ARMSCII8 +ASCII +BIG5 +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 +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 +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 +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 +MINUSMINUS +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 +LOCAL_ID +GLOBAL_ID +ERROR_RECONGNIGION + +rule names: +SPACE +SPEC_MYSQL_COMMENT +COMMENT_INPUT +LINE_COMMENT +ADD +ALL +ALTER +ALWAYS +ANALYZE +AND +AS +ASC +BEFORE +BETWEEN +BOTH +BY +CALL +CASCADE +CASE +CAST +CHANGE +CHARACTER +CHECK +COLLATE +COLUMN +CONDITION +CONSTRAINT +CONTINUE +CONVERT +CREATE +CROSS +CURRENT +CURRENT_USER +CURSOR +DATABASE +DATABASES +DECLARE +DEFAULT +DELAYED +DELETE +DESC +DESCRIBE +DETERMINISTIC +DIAGNOSTICS +DISTINCT +DISTINCTROW +DROP +EACH +ELSE +ELSEIF +ENCLOSED +ESCAPED +EXISTS +EXIT +EXPLAIN +FALSE +FETCH +FOR +FORCE +FOREIGN +FROM +FULLTEXT +GENERATED +GET +GRANT +GROUP +HAVING +HIGH_PRIORITY +IF +IGNORE +IN +INDEX +INFILE +INNER +INOUT +INSERT +INTERVAL +INTO +IS +ITERATE +JOIN +KEY +KEYS +KILL +LEADING +LEAVE +LEFT +LIKE +LIMIT +LINEAR +LINES +LOAD +LOCK +LOOP +LOW_PRIORITY +MASTER_BIND +MASTER_SSL_VERIFY_SERVER_CERT +MATCH +MAXVALUE +MODIFIES +NATURAL +NOT +NO_WRITE_TO_BINLOG +NULL_LITERAL +NUMBER +ON +OPTIMIZE +OPTION +OPTIONALLY +OR +ORDER +OUT +OUTER +OUTFILE +PARTITION +PRIMARY +PROCEDURE +PURGE +RANGE +READ +READS +REFERENCES +REGEXP +RELEASE +RENAME +REPEAT +REPLACE +REQUIRE +RESIGNAL +RESTRICT +RETURN +REVOKE +RIGHT +RLIKE +SCHEMA +SCHEMAS +SELECT +SET +SEPARATOR +SHOW +SIGNAL +SPATIAL +SQL +SQLEXCEPTION +SQLSTATE +SQLWARNING +SQL_BIG_RESULT +SQL_CALC_FOUND_ROWS +SQL_SMALL_RESULT +SSL +STACKED +STARTING +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_VALID +JSON_SCHEMA_VALID +AVG +BIT_AND +BIT_OR +BIT_XOR +COUNT +GROUP_CONCAT +MAX +MIN +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 +COALESCE +CODE +COLUMNS +COLUMN_FORMAT +COLUMN_NAME +COMMENT +COMMIT +COMPACT +COMPLETION +COMPRESSED +COMPRESSION +CONCURRENT +CONNECTION +CONSISTENT +CONSTRAINT_CATALOG +CONSTRAINT_SCHEMA +CONSTRAINT_NAME +CONTAINS +CONTEXT +CONTRIBUTORS +COPY +CPU +CURSOR_NAME +DATA +DATAFILE +DEALLOCATE +DEFAULT_AUTH +DEFINER +DELAY_KEY_WRITE +DES_KEY_FILE +DIRECTORY +DISABLE +DISCARD +DISK +DO +DUMPFILE +DUPLICATE +DYNAMIC +ENABLE +ENCRYPTION +END +ENDS +ENGINE +ENGINES +ERROR +ERRORS +ESCAPE +EVEN +EVENT +EVENTS +EVERY +EXCHANGE +EXCLUSIVE +EXPIRE +EXPORT +EXTENDED +EXTENT_SIZE +FAST +FAULTS +FIELDS +FILE_BLOCK_SIZE +FILTER +FIRST +FIXED +FLUSH +FOLLOWS +FOUND +FULL +FUNCTION +GENERAL +GLOBAL +GRANTS +GROUP_REPLICATION +HANDLER +HASH +HELP +HOST +HOSTS +IDENTIFIED +IGNORE_SERVER_IDS +IMPORT +INDEXES +INITIAL_SIZE +INPLACE +INSERT_METHOD +INSTALL +INSTANCE +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 +NODEGROUP +NONE +OFFLINE +OFFSET +OF +OJ +OLD_PASSWORD +ONE +ONLINE +ONLY +OPEN +OPTIMIZER_COSTS +OPTIONS +OWNER +PACK_KEYS +PAGE +PARSER +PARTIAL +PARTITIONING +PARTITIONS +PASSWORD +PHASE +PLUGIN +PLUGIN_DIR +PLUGINS +PORT +PRECEDES +PREPARE +PRESERVE +PREV +PROCESSLIST +PROFILE +PROFILES +PROXY +QUERY +QUICK +REBUILD +RECOVER +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 +RESUME +RETURNED_SQLSTATE +RETURNS +ROLE +ROLLBACK +ROLLUP +ROTATE +ROW +ROWS +ROW_FORMAT +SAVEPOINT +SCHEDULE +SECURITY +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 +TEMPORARY +TEMPTABLE +THAN +TRADITIONAL +TRANSACTION +TRANSACTIONAL +TRIGGERS +TRUNCATE +UNDEFINED +UNDOFILE +UNDO_BUFFER_SIZE +UNINSTALL +UNKNOWN +UNTIL +UPGRADE +USER +USE_FRM +USER_RESOURCES +VALIDATION +VALUE +VARIABLES +VIEW +VIRTUAL +VISIBLE +WAIT +WARNINGS +WITHOUT +WORK +WRAPPER +X509 +XA +XML +EUR +USA +JIS +ISO +INTERNAL +QUARTER +MONTH +DAY +HOUR +MINUTE +WEEK +SECOND +MICROSECOND +TABLES +ROUTINE +EXECUTE +FILE +PROCESS +RELOAD +SHUTDOWN +SUPER +PRIVILEGES +APPLICATION_PASSWORD_ADMIN +AUDIT_ADMIN +BACKUP_ADMIN +BINLOG_ADMIN +BINLOG_ENCRYPTION_ADMIN +CLONE_ADMIN +CONNECTION_ADMIN +ENCRYPTION_KEY_ADMIN +FIREWALL_ADMIN +FIREWALL_USER +GROUP_REPLICATION_ADMIN +INNODB_REDO_LOG_ARCHIVE +NDB_STORED_USER +PERSIST_RO_VARIABLES_ADMIN +REPLICATION_APPLIER +REPLICATION_SLAVE_ADMIN +RESOURCE_GROUP_ADMIN +RESOURCE_GROUP_USER +ROLE_ADMIN +SESSION_VARIABLES_ADMIN +SET_USER_ID +SHOW_ROUTINE +SYSTEM_VARIABLES_ADMIN +TABLE_ENCRYPTION_ADMIN +VERSION_TOKEN_ADMIN +XA_RECOVER_ADMIN +ARMSCII8 +ASCII +BIG5 +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 +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 +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 +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 +MINUSMINUS +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 +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: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 1052, 12152, 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, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, 9, 187, 4, 188, 9, 188, 4, 189, 9, 189, 4, 190, 9, 190, 4, 191, 9, 191, 4, 192, 9, 192, 4, 193, 9, 193, 4, 194, 9, 194, 4, 195, 9, 195, 4, 196, 9, 196, 4, 197, 9, 197, 4, 198, 9, 198, 4, 199, 9, 199, 4, 200, 9, 200, 4, 201, 9, 201, 4, 202, 9, 202, 4, 203, 9, 203, 4, 204, 9, 204, 4, 205, 9, 205, 4, 206, 9, 206, 4, 207, 9, 207, 4, 208, 9, 208, 4, 209, 9, 209, 4, 210, 9, 210, 4, 211, 9, 211, 4, 212, 9, 212, 4, 213, 9, 213, 4, 214, 9, 214, 4, 215, 9, 215, 4, 216, 9, 216, 4, 217, 9, 217, 4, 218, 9, 218, 4, 219, 9, 219, 4, 220, 9, 220, 4, 221, 9, 221, 4, 222, 9, 222, 4, 223, 9, 223, 4, 224, 9, 224, 4, 225, 9, 225, 4, 226, 9, 226, 4, 227, 9, 227, 4, 228, 9, 228, 4, 229, 9, 229, 4, 230, 9, 230, 4, 231, 9, 231, 4, 232, 9, 232, 4, 233, 9, 233, 4, 234, 9, 234, 4, 235, 9, 235, 4, 236, 9, 236, 4, 237, 9, 237, 4, 238, 9, 238, 4, 239, 9, 239, 4, 240, 9, 240, 4, 241, 9, 241, 4, 242, 9, 242, 4, 243, 9, 243, 4, 244, 9, 244, 4, 245, 9, 245, 4, 246, 9, 246, 4, 247, 9, 247, 4, 248, 9, 248, 4, 249, 9, 249, 4, 250, 9, 250, 4, 251, 9, 251, 4, 252, 9, 252, 4, 253, 9, 253, 4, 254, 9, 254, 4, 255, 9, 255, 4, 256, 9, 256, 4, 257, 9, 257, 4, 258, 9, 258, 4, 259, 9, 259, 4, 260, 9, 260, 4, 261, 9, 261, 4, 262, 9, 262, 4, 263, 9, 263, 4, 264, 9, 264, 4, 265, 9, 265, 4, 266, 9, 266, 4, 267, 9, 267, 4, 268, 9, 268, 4, 269, 9, 269, 4, 270, 9, 270, 4, 271, 9, 271, 4, 272, 9, 272, 4, 273, 9, 273, 4, 274, 9, 274, 4, 275, 9, 275, 4, 276, 9, 276, 4, 277, 9, 277, 4, 278, 9, 278, 4, 279, 9, 279, 4, 280, 9, 280, 4, 281, 9, 281, 4, 282, 9, 282, 4, 283, 9, 283, 4, 284, 9, 284, 4, 285, 9, 285, 4, 286, 9, 286, 4, 287, 9, 287, 4, 288, 9, 288, 4, 289, 9, 289, 4, 290, 9, 290, 4, 291, 9, 291, 4, 292, 9, 292, 4, 293, 9, 293, 4, 294, 9, 294, 4, 295, 9, 295, 4, 296, 9, 296, 4, 297, 9, 297, 4, 298, 9, 298, 4, 299, 9, 299, 4, 300, 9, 300, 4, 301, 9, 301, 4, 302, 9, 302, 4, 303, 9, 303, 4, 304, 9, 304, 4, 305, 9, 305, 4, 306, 9, 306, 4, 307, 9, 307, 4, 308, 9, 308, 4, 309, 9, 309, 4, 310, 9, 310, 4, 311, 9, 311, 4, 312, 9, 312, 4, 313, 9, 313, 4, 314, 9, 314, 4, 315, 9, 315, 4, 316, 9, 316, 4, 317, 9, 317, 4, 318, 9, 318, 4, 319, 9, 319, 4, 320, 9, 320, 4, 321, 9, 321, 4, 322, 9, 322, 4, 323, 9, 323, 4, 324, 9, 324, 4, 325, 9, 325, 4, 326, 9, 326, 4, 327, 9, 327, 4, 328, 9, 328, 4, 329, 9, 329, 4, 330, 9, 330, 4, 331, 9, 331, 4, 332, 9, 332, 4, 333, 9, 333, 4, 334, 9, 334, 4, 335, 9, 335, 4, 336, 9, 336, 4, 337, 9, 337, 4, 338, 9, 338, 4, 339, 9, 339, 4, 340, 9, 340, 4, 341, 9, 341, 4, 342, 9, 342, 4, 343, 9, 343, 4, 344, 9, 344, 4, 345, 9, 345, 4, 346, 9, 346, 4, 347, 9, 347, 4, 348, 9, 348, 4, 349, 9, 349, 4, 350, 9, 350, 4, 351, 9, 351, 4, 352, 9, 352, 4, 353, 9, 353, 4, 354, 9, 354, 4, 355, 9, 355, 4, 356, 9, 356, 4, 357, 9, 357, 4, 358, 9, 358, 4, 359, 9, 359, 4, 360, 9, 360, 4, 361, 9, 361, 4, 362, 9, 362, 4, 363, 9, 363, 4, 364, 9, 364, 4, 365, 9, 365, 4, 366, 9, 366, 4, 367, 9, 367, 4, 368, 9, 368, 4, 369, 9, 369, 4, 370, 9, 370, 4, 371, 9, 371, 4, 372, 9, 372, 4, 373, 9, 373, 4, 374, 9, 374, 4, 375, 9, 375, 4, 376, 9, 376, 4, 377, 9, 377, 4, 378, 9, 378, 4, 379, 9, 379, 4, 380, 9, 380, 4, 381, 9, 381, 4, 382, 9, 382, 4, 383, 9, 383, 4, 384, 9, 384, 4, 385, 9, 385, 4, 386, 9, 386, 4, 387, 9, 387, 4, 388, 9, 388, 4, 389, 9, 389, 4, 390, 9, 390, 4, 391, 9, 391, 4, 392, 9, 392, 4, 393, 9, 393, 4, 394, 9, 394, 4, 395, 9, 395, 4, 396, 9, 396, 4, 397, 9, 397, 4, 398, 9, 398, 4, 399, 9, 399, 4, 400, 9, 400, 4, 401, 9, 401, 4, 402, 9, 402, 4, 403, 9, 403, 4, 404, 9, 404, 4, 405, 9, 405, 4, 406, 9, 406, 4, 407, 9, 407, 4, 408, 9, 408, 4, 409, 9, 409, 4, 410, 9, 410, 4, 411, 9, 411, 4, 412, 9, 412, 4, 413, 9, 413, 4, 414, 9, 414, 4, 415, 9, 415, 4, 416, 9, 416, 4, 417, 9, 417, 4, 418, 9, 418, 4, 419, 9, 419, 4, 420, 9, 420, 4, 421, 9, 421, 4, 422, 9, 422, 4, 423, 9, 423, 4, 424, 9, 424, 4, 425, 9, 425, 4, 426, 9, 426, 4, 427, 9, 427, 4, 428, 9, 428, 4, 429, 9, 429, 4, 430, 9, 430, 4, 431, 9, 431, 4, 432, 9, 432, 4, 433, 9, 433, 4, 434, 9, 434, 4, 435, 9, 435, 4, 436, 9, 436, 4, 437, 9, 437, 4, 438, 9, 438, 4, 439, 9, 439, 4, 440, 9, 440, 4, 441, 9, 441, 4, 442, 9, 442, 4, 443, 9, 443, 4, 444, 9, 444, 4, 445, 9, 445, 4, 446, 9, 446, 4, 447, 9, 447, 4, 448, 9, 448, 4, 449, 9, 449, 4, 450, 9, 450, 4, 451, 9, 451, 4, 452, 9, 452, 4, 453, 9, 453, 4, 454, 9, 454, 4, 455, 9, 455, 4, 456, 9, 456, 4, 457, 9, 457, 4, 458, 9, 458, 4, 459, 9, 459, 4, 460, 9, 460, 4, 461, 9, 461, 4, 462, 9, 462, 4, 463, 9, 463, 4, 464, 9, 464, 4, 465, 9, 465, 4, 466, 9, 466, 4, 467, 9, 467, 4, 468, 9, 468, 4, 469, 9, 469, 4, 470, 9, 470, 4, 471, 9, 471, 4, 472, 9, 472, 4, 473, 9, 473, 4, 474, 9, 474, 4, 475, 9, 475, 4, 476, 9, 476, 4, 477, 9, 477, 4, 478, 9, 478, 4, 479, 9, 479, 4, 480, 9, 480, 4, 481, 9, 481, 4, 482, 9, 482, 4, 483, 9, 483, 4, 484, 9, 484, 4, 485, 9, 485, 4, 486, 9, 486, 4, 487, 9, 487, 4, 488, 9, 488, 4, 489, 9, 489, 4, 490, 9, 490, 4, 491, 9, 491, 4, 492, 9, 492, 4, 493, 9, 493, 4, 494, 9, 494, 4, 495, 9, 495, 4, 496, 9, 496, 4, 497, 9, 497, 4, 498, 9, 498, 4, 499, 9, 499, 4, 500, 9, 500, 4, 501, 9, 501, 4, 502, 9, 502, 4, 503, 9, 503, 4, 504, 9, 504, 4, 505, 9, 505, 4, 506, 9, 506, 4, 507, 9, 507, 4, 508, 9, 508, 4, 509, 9, 509, 4, 510, 9, 510, 4, 511, 9, 511, 4, 512, 9, 512, 4, 513, 9, 513, 4, 514, 9, 514, 4, 515, 9, 515, 4, 516, 9, 516, 4, 517, 9, 517, 4, 518, 9, 518, 4, 519, 9, 519, 4, 520, 9, 520, 4, 521, 9, 521, 4, 522, 9, 522, 4, 523, 9, 523, 4, 524, 9, 524, 4, 525, 9, 525, 4, 526, 9, 526, 4, 527, 9, 527, 4, 528, 9, 528, 4, 529, 9, 529, 4, 530, 9, 530, 4, 531, 9, 531, 4, 532, 9, 532, 4, 533, 9, 533, 4, 534, 9, 534, 4, 535, 9, 535, 4, 536, 9, 536, 4, 537, 9, 537, 4, 538, 9, 538, 4, 539, 9, 539, 4, 540, 9, 540, 4, 541, 9, 541, 4, 542, 9, 542, 4, 543, 9, 543, 4, 544, 9, 544, 4, 545, 9, 545, 4, 546, 9, 546, 4, 547, 9, 547, 4, 548, 9, 548, 4, 549, 9, 549, 4, 550, 9, 550, 4, 551, 9, 551, 4, 552, 9, 552, 4, 553, 9, 553, 4, 554, 9, 554, 4, 555, 9, 555, 4, 556, 9, 556, 4, 557, 9, 557, 4, 558, 9, 558, 4, 559, 9, 559, 4, 560, 9, 560, 4, 561, 9, 561, 4, 562, 9, 562, 4, 563, 9, 563, 4, 564, 9, 564, 4, 565, 9, 565, 4, 566, 9, 566, 4, 567, 9, 567, 4, 568, 9, 568, 4, 569, 9, 569, 4, 570, 9, 570, 4, 571, 9, 571, 4, 572, 9, 572, 4, 573, 9, 573, 4, 574, 9, 574, 4, 575, 9, 575, 4, 576, 9, 576, 4, 577, 9, 577, 4, 578, 9, 578, 4, 579, 9, 579, 4, 580, 9, 580, 4, 581, 9, 581, 4, 582, 9, 582, 4, 583, 9, 583, 4, 584, 9, 584, 4, 585, 9, 585, 4, 586, 9, 586, 4, 587, 9, 587, 4, 588, 9, 588, 4, 589, 9, 589, 4, 590, 9, 590, 4, 591, 9, 591, 4, 592, 9, 592, 4, 593, 9, 593, 4, 594, 9, 594, 4, 595, 9, 595, 4, 596, 9, 596, 4, 597, 9, 597, 4, 598, 9, 598, 4, 599, 9, 599, 4, 600, 9, 600, 4, 601, 9, 601, 4, 602, 9, 602, 4, 603, 9, 603, 4, 604, 9, 604, 4, 605, 9, 605, 4, 606, 9, 606, 4, 607, 9, 607, 4, 608, 9, 608, 4, 609, 9, 609, 4, 610, 9, 610, 4, 611, 9, 611, 4, 612, 9, 612, 4, 613, 9, 613, 4, 614, 9, 614, 4, 615, 9, 615, 4, 616, 9, 616, 4, 617, 9, 617, 4, 618, 9, 618, 4, 619, 9, 619, 4, 620, 9, 620, 4, 621, 9, 621, 4, 622, 9, 622, 4, 623, 9, 623, 4, 624, 9, 624, 4, 625, 9, 625, 4, 626, 9, 626, 4, 627, 9, 627, 4, 628, 9, 628, 4, 629, 9, 629, 4, 630, 9, 630, 4, 631, 9, 631, 4, 632, 9, 632, 4, 633, 9, 633, 4, 634, 9, 634, 4, 635, 9, 635, 4, 636, 9, 636, 4, 637, 9, 637, 4, 638, 9, 638, 4, 639, 9, 639, 4, 640, 9, 640, 4, 641, 9, 641, 4, 642, 9, 642, 4, 643, 9, 643, 4, 644, 9, 644, 4, 645, 9, 645, 4, 646, 9, 646, 4, 647, 9, 647, 4, 648, 9, 648, 4, 649, 9, 649, 4, 650, 9, 650, 4, 651, 9, 651, 4, 652, 9, 652, 4, 653, 9, 653, 4, 654, 9, 654, 4, 655, 9, 655, 4, 656, 9, 656, 4, 657, 9, 657, 4, 658, 9, 658, 4, 659, 9, 659, 4, 660, 9, 660, 4, 661, 9, 661, 4, 662, 9, 662, 4, 663, 9, 663, 4, 664, 9, 664, 4, 665, 9, 665, 4, 666, 9, 666, 4, 667, 9, 667, 4, 668, 9, 668, 4, 669, 9, 669, 4, 670, 9, 670, 4, 671, 9, 671, 4, 672, 9, 672, 4, 673, 9, 673, 4, 674, 9, 674, 4, 675, 9, 675, 4, 676, 9, 676, 4, 677, 9, 677, 4, 678, 9, 678, 4, 679, 9, 679, 4, 680, 9, 680, 4, 681, 9, 681, 4, 682, 9, 682, 4, 683, 9, 683, 4, 684, 9, 684, 4, 685, 9, 685, 4, 686, 9, 686, 4, 687, 9, 687, 4, 688, 9, 688, 4, 689, 9, 689, 4, 690, 9, 690, 4, 691, 9, 691, 4, 692, 9, 692, 4, 693, 9, 693, 4, 694, 9, 694, 4, 695, 9, 695, 4, 696, 9, 696, 4, 697, 9, 697, 4, 698, 9, 698, 4, 699, 9, 699, 4, 700, 9, 700, 4, 701, 9, 701, 4, 702, 9, 702, 4, 703, 9, 703, 4, 704, 9, 704, 4, 705, 9, 705, 4, 706, 9, 706, 4, 707, 9, 707, 4, 708, 9, 708, 4, 709, 9, 709, 4, 710, 9, 710, 4, 711, 9, 711, 4, 712, 9, 712, 4, 713, 9, 713, 4, 714, 9, 714, 4, 715, 9, 715, 4, 716, 9, 716, 4, 717, 9, 717, 4, 718, 9, 718, 4, 719, 9, 719, 4, 720, 9, 720, 4, 721, 9, 721, 4, 722, 9, 722, 4, 723, 9, 723, 4, 724, 9, 724, 4, 725, 9, 725, 4, 726, 9, 726, 4, 727, 9, 727, 4, 728, 9, 728, 4, 729, 9, 729, 4, 730, 9, 730, 4, 731, 9, 731, 4, 732, 9, 732, 4, 733, 9, 733, 4, 734, 9, 734, 4, 735, 9, 735, 4, 736, 9, 736, 4, 737, 9, 737, 4, 738, 9, 738, 4, 739, 9, 739, 4, 740, 9, 740, 4, 741, 9, 741, 4, 742, 9, 742, 4, 743, 9, 743, 4, 744, 9, 744, 4, 745, 9, 745, 4, 746, 9, 746, 4, 747, 9, 747, 4, 748, 9, 748, 4, 749, 9, 749, 4, 750, 9, 750, 4, 751, 9, 751, 4, 752, 9, 752, 4, 753, 9, 753, 4, 754, 9, 754, 4, 755, 9, 755, 4, 756, 9, 756, 4, 757, 9, 757, 4, 758, 9, 758, 4, 759, 9, 759, 4, 760, 9, 760, 4, 761, 9, 761, 4, 762, 9, 762, 4, 763, 9, 763, 4, 764, 9, 764, 4, 765, 9, 765, 4, 766, 9, 766, 4, 767, 9, 767, 4, 768, 9, 768, 4, 769, 9, 769, 4, 770, 9, 770, 4, 771, 9, 771, 4, 772, 9, 772, 4, 773, 9, 773, 4, 774, 9, 774, 4, 775, 9, 775, 4, 776, 9, 776, 4, 777, 9, 777, 4, 778, 9, 778, 4, 779, 9, 779, 4, 780, 9, 780, 4, 781, 9, 781, 4, 782, 9, 782, 4, 783, 9, 783, 4, 784, 9, 784, 4, 785, 9, 785, 4, 786, 9, 786, 4, 787, 9, 787, 4, 788, 9, 788, 4, 789, 9, 789, 4, 790, 9, 790, 4, 791, 9, 791, 4, 792, 9, 792, 4, 793, 9, 793, 4, 794, 9, 794, 4, 795, 9, 795, 4, 796, 9, 796, 4, 797, 9, 797, 4, 798, 9, 798, 4, 799, 9, 799, 4, 800, 9, 800, 4, 801, 9, 801, 4, 802, 9, 802, 4, 803, 9, 803, 4, 804, 9, 804, 4, 805, 9, 805, 4, 806, 9, 806, 4, 807, 9, 807, 4, 808, 9, 808, 4, 809, 9, 809, 4, 810, 9, 810, 4, 811, 9, 811, 4, 812, 9, 812, 4, 813, 9, 813, 4, 814, 9, 814, 4, 815, 9, 815, 4, 816, 9, 816, 4, 817, 9, 817, 4, 818, 9, 818, 4, 819, 9, 819, 4, 820, 9, 820, 4, 821, 9, 821, 4, 822, 9, 822, 4, 823, 9, 823, 4, 824, 9, 824, 4, 825, 9, 825, 4, 826, 9, 826, 4, 827, 9, 827, 4, 828, 9, 828, 4, 829, 9, 829, 4, 830, 9, 830, 4, 831, 9, 831, 4, 832, 9, 832, 4, 833, 9, 833, 4, 834, 9, 834, 4, 835, 9, 835, 4, 836, 9, 836, 4, 837, 9, 837, 4, 838, 9, 838, 4, 839, 9, 839, 4, 840, 9, 840, 4, 841, 9, 841, 4, 842, 9, 842, 4, 843, 9, 843, 4, 844, 9, 844, 4, 845, 9, 845, 4, 846, 9, 846, 4, 847, 9, 847, 4, 848, 9, 848, 4, 849, 9, 849, 4, 850, 9, 850, 4, 851, 9, 851, 4, 852, 9, 852, 4, 853, 9, 853, 4, 854, 9, 854, 4, 855, 9, 855, 4, 856, 9, 856, 4, 857, 9, 857, 4, 858, 9, 858, 4, 859, 9, 859, 4, 860, 9, 860, 4, 861, 9, 861, 4, 862, 9, 862, 4, 863, 9, 863, 4, 864, 9, 864, 4, 865, 9, 865, 4, 866, 9, 866, 4, 867, 9, 867, 4, 868, 9, 868, 4, 869, 9, 869, 4, 870, 9, 870, 4, 871, 9, 871, 4, 872, 9, 872, 4, 873, 9, 873, 4, 874, 9, 874, 4, 875, 9, 875, 4, 876, 9, 876, 4, 877, 9, 877, 4, 878, 9, 878, 4, 879, 9, 879, 4, 880, 9, 880, 4, 881, 9, 881, 4, 882, 9, 882, 4, 883, 9, 883, 4, 884, 9, 884, 4, 885, 9, 885, 4, 886, 9, 886, 4, 887, 9, 887, 4, 888, 9, 888, 4, 889, 9, 889, 4, 890, 9, 890, 4, 891, 9, 891, 4, 892, 9, 892, 4, 893, 9, 893, 4, 894, 9, 894, 4, 895, 9, 895, 4, 896, 9, 896, 4, 897, 9, 897, 4, 898, 9, 898, 4, 899, 9, 899, 4, 900, 9, 900, 4, 901, 9, 901, 4, 902, 9, 902, 4, 903, 9, 903, 4, 904, 9, 904, 4, 905, 9, 905, 4, 906, 9, 906, 4, 907, 9, 907, 4, 908, 9, 908, 4, 909, 9, 909, 4, 910, 9, 910, 4, 911, 9, 911, 4, 912, 9, 912, 4, 913, 9, 913, 4, 914, 9, 914, 4, 915, 9, 915, 4, 916, 9, 916, 4, 917, 9, 917, 4, 918, 9, 918, 4, 919, 9, 919, 4, 920, 9, 920, 4, 921, 9, 921, 4, 922, 9, 922, 4, 923, 9, 923, 4, 924, 9, 924, 4, 925, 9, 925, 4, 926, 9, 926, 4, 927, 9, 927, 4, 928, 9, 928, 4, 929, 9, 929, 4, 930, 9, 930, 4, 931, 9, 931, 4, 932, 9, 932, 4, 933, 9, 933, 4, 934, 9, 934, 4, 935, 9, 935, 4, 936, 9, 936, 4, 937, 9, 937, 4, 938, 9, 938, 4, 939, 9, 939, 4, 940, 9, 940, 4, 941, 9, 941, 4, 942, 9, 942, 4, 943, 9, 943, 4, 944, 9, 944, 4, 945, 9, 945, 4, 946, 9, 946, 4, 947, 9, 947, 4, 948, 9, 948, 4, 949, 9, 949, 4, 950, 9, 950, 4, 951, 9, 951, 4, 952, 9, 952, 4, 953, 9, 953, 4, 954, 9, 954, 4, 955, 9, 955, 4, 956, 9, 956, 4, 957, 9, 957, 4, 958, 9, 958, 4, 959, 9, 959, 4, 960, 9, 960, 4, 961, 9, 961, 4, 962, 9, 962, 4, 963, 9, 963, 4, 964, 9, 964, 4, 965, 9, 965, 4, 966, 9, 966, 4, 967, 9, 967, 4, 968, 9, 968, 4, 969, 9, 969, 4, 970, 9, 970, 4, 971, 9, 971, 4, 972, 9, 972, 4, 973, 9, 973, 4, 974, 9, 974, 4, 975, 9, 975, 4, 976, 9, 976, 4, 977, 9, 977, 4, 978, 9, 978, 4, 979, 9, 979, 4, 980, 9, 980, 4, 981, 9, 981, 4, 982, 9, 982, 4, 983, 9, 983, 4, 984, 9, 984, 4, 985, 9, 985, 4, 986, 9, 986, 4, 987, 9, 987, 4, 988, 9, 988, 4, 989, 9, 989, 4, 990, 9, 990, 4, 991, 9, 991, 4, 992, 9, 992, 4, 993, 9, 993, 4, 994, 9, 994, 4, 995, 9, 995, 4, 996, 9, 996, 4, 997, 9, 997, 4, 998, 9, 998, 4, 999, 9, 999, 4, 1000, 9, 1000, 4, 1001, 9, 1001, 4, 1002, 9, 1002, 4, 1003, 9, 1003, 4, 1004, 9, 1004, 4, 1005, 9, 1005, 4, 1006, 9, 1006, 4, 1007, 9, 1007, 4, 1008, 9, 1008, 4, 1009, 9, 1009, 4, 1010, 9, 1010, 4, 1011, 9, 1011, 4, 1012, 9, 1012, 4, 1013, 9, 1013, 4, 1014, 9, 1014, 4, 1015, 9, 1015, 4, 1016, 9, 1016, 4, 1017, 9, 1017, 4, 1018, 9, 1018, 4, 1019, 9, 1019, 4, 1020, 9, 1020, 4, 1021, 9, 1021, 4, 1022, 9, 1022, 4, 1023, 9, 1023, 4, 1024, 9, 1024, 4, 1025, 9, 1025, 4, 1026, 9, 1026, 4, 1027, 9, 1027, 4, 1028, 9, 1028, 4, 1029, 9, 1029, 4, 1030, 9, 1030, 4, 1031, 9, 1031, 4, 1032, 9, 1032, 4, 1033, 9, 1033, 4, 1034, 9, 1034, 4, 1035, 9, 1035, 4, 1036, 9, 1036, 4, 1037, 9, 1037, 4, 1038, 9, 1038, 4, 1039, 9, 1039, 4, 1040, 9, 1040, 4, 1041, 9, 1041, 4, 1042, 9, 1042, 4, 1043, 9, 1043, 4, 1044, 9, 1044, 4, 1045, 9, 1045, 4, 1046, 9, 1046, 4, 1047, 9, 1047, 4, 1048, 9, 1048, 4, 1049, 9, 1049, 4, 1050, 9, 1050, 4, 1051, 9, 1051, 4, 1052, 9, 1052, 4, 1053, 9, 1053, 4, 1054, 9, 1054, 4, 1055, 9, 1055, 4, 1056, 9, 1056, 4, 1057, 9, 1057, 4, 1058, 9, 1058, 4, 1059, 9, 1059, 4, 1060, 9, 1060, 4, 1061, 9, 1061, 3, 2, 6, 2, 2125, 10, 2, 13, 2, 14, 2, 2126, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 2136, 10, 3, 13, 3, 14, 3, 2137, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 2149, 10, 4, 12, 4, 14, 4, 2152, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 2163, 10, 5, 3, 5, 7, 5, 2166, 10, 5, 12, 5, 14, 5, 2169, 11, 5, 3, 5, 5, 5, 2172, 10, 5, 3, 5, 3, 5, 5, 5, 2176, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 2182, 10, 5, 3, 5, 3, 5, 5, 5, 2186, 10, 5, 5, 5, 2188, 10, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 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, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 3, 139, 3, 139, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 151, 3, 151, 3, 151, 3, 151, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 158, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 161, 3, 161, 3, 161, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 169, 3, 169, 3, 169, 3, 169, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 177, 3, 177, 3, 177, 3, 177, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 183, 3, 183, 3, 183, 3, 183, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 195, 3, 195, 3, 195, 3, 195, 3, 195, 3, 195, 3, 195, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 198, 3, 198, 3, 198, 3, 198, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 236, 3, 236, 3, 236, 3, 236, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 242, 3, 242, 3, 242, 3, 242, 3, 243, 3, 243, 3, 243, 3, 243, 3, 244, 3, 244, 3, 244, 3, 244, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 248, 3, 248, 3, 248, 3, 248, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 251, 3, 251, 3, 251, 3, 251, 3, 251, 3, 251, 3, 251, 3, 251, 3, 251, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 262, 3, 262, 3, 262, 3, 262, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 276, 3, 276, 3, 276, 3, 276, 3, 277, 3, 277, 3, 277, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 285, 3, 285, 3, 285, 3, 285, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 293, 3, 293, 3, 293, 3, 293, 3, 293, 3, 293, 3, 293, 3, 293, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 301, 3, 301, 3, 301, 3, 301, 3, 301, 3, 301, 3, 301, 3, 301, 3, 301, 3, 302, 3, 302, 3, 302, 3, 302, 3, 302, 3, 303, 3, 303, 3, 303, 3, 303, 3, 303, 3, 303, 3, 303, 3, 303, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 311, 3, 311, 3, 311, 3, 311, 3, 311, 3, 311, 3, 311, 3, 311, 3, 311, 3, 311, 3, 311, 3, 311, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 321, 3, 321, 3, 321, 3, 321, 3, 321, 3, 322, 3, 322, 3, 322, 3, 322, 3, 323, 3, 323, 3, 323, 3, 323, 3, 323, 3, 323, 3, 323, 3, 323, 3, 323, 3, 323, 3, 323, 3, 323, 3, 324, 3, 324, 3, 324, 3, 324, 3, 324, 3, 325, 3, 325, 3, 325, 3, 325, 3, 325, 3, 325, 3, 325, 3, 325, 3, 325, 3, 326, 3, 326, 3, 326, 3, 326, 3, 326, 3, 326, 3, 326, 3, 326, 3, 326, 3, 326, 3, 326, 3, 327, 3, 327, 3, 327, 3, 327, 3, 327, 3, 327, 3, 327, 3, 327, 3, 327, 3, 327, 3, 327, 3, 327, 3, 327, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 331, 3, 331, 3, 331, 3, 331, 3, 331, 3, 331, 3, 331, 3, 331, 3, 331, 3, 331, 3, 332, 3, 332, 3, 332, 3, 332, 3, 332, 3, 332, 3, 332, 3, 332, 3, 333, 3, 333, 3, 333, 3, 333, 3, 333, 3, 333, 3, 333, 3, 333, 3, 334, 3, 334, 3, 334, 3, 334, 3, 334, 3, 335, 3, 335, 3, 335, 3, 336, 3, 336, 3, 336, 3, 336, 3, 336, 3, 336, 3, 336, 3, 336, 3, 336, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 338, 3, 338, 3, 338, 3, 338, 3, 338, 3, 338, 3, 338, 3, 338, 3, 339, 3, 339, 3, 339, 3, 339, 3, 339, 3, 339, 3, 339, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 341, 3, 341, 3, 341, 3, 341, 3, 342, 3, 342, 3, 342, 3, 342, 3, 342, 3, 343, 3, 343, 3, 343, 3, 343, 3, 343, 3, 343, 3, 343, 3, 344, 3, 344, 3, 344, 3, 344, 3, 344, 3, 344, 3, 344, 3, 344, 3, 345, 3, 345, 3, 345, 3, 345, 3, 345, 3, 345, 3, 346, 3, 346, 3, 346, 3, 346, 3, 346, 3, 346, 3, 346, 3, 347, 3, 347, 3, 347, 3, 347, 3, 347, 3, 347, 3, 347, 3, 348, 3, 348, 3, 348, 3, 348, 3, 348, 3, 349, 3, 349, 3, 349, 3, 349, 3, 349, 3, 349, 3, 350, 3, 350, 3, 350, 3, 350, 3, 350, 3, 350, 3, 350, 3, 351, 3, 351, 3, 351, 3, 351, 3, 351, 3, 351, 3, 352, 3, 352, 3, 352, 3, 352, 3, 352, 3, 352, 3, 352, 3, 352, 3, 352, 3, 353, 3, 353, 3, 353, 3, 353, 3, 353, 3, 353, 3, 353, 3, 353, 3, 353, 3, 353, 3, 354, 3, 354, 3, 354, 3, 354, 3, 354, 3, 354, 3, 354, 3, 355, 3, 355, 3, 355, 3, 355, 3, 355, 3, 355, 3, 355, 3, 356, 3, 356, 3, 356, 3, 356, 3, 356, 3, 356, 3, 356, 3, 356, 3, 356, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 358, 3, 358, 3, 358, 3, 358, 3, 358, 3, 359, 3, 359, 3, 359, 3, 359, 3, 359, 3, 359, 3, 359, 3, 360, 3, 360, 3, 360, 3, 360, 3, 360, 3, 360, 3, 360, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 362, 3, 362, 3, 362, 3, 362, 3, 362, 3, 362, 3, 362, 3, 363, 3, 363, 3, 363, 3, 363, 3, 363, 3, 363, 3, 364, 3, 364, 3, 364, 3, 364, 3, 364, 3, 364, 3, 365, 3, 365, 3, 365, 3, 365, 3, 365, 3, 365, 3, 366, 3, 366, 3, 366, 3, 366, 3, 366, 3, 366, 3, 366, 3, 366, 3, 367, 3, 367, 3, 367, 3, 367, 3, 367, 3, 367, 3, 368, 3, 368, 3, 368, 3, 368, 3, 368, 3, 369, 3, 369, 3, 369, 3, 369, 3, 369, 3, 369, 3, 369, 3, 369, 3, 369, 3, 370, 3, 370, 3, 370, 3, 370, 3, 370, 3, 370, 3, 370, 3, 370, 3, 371, 3, 371, 3, 371, 3, 371, 3, 371, 3, 371, 3, 371, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 375, 3, 375, 3, 375, 3, 375, 3, 375, 3, 376, 3, 376, 3, 376, 3, 376, 3, 376, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 380, 3, 381, 3, 381, 3, 381, 3, 381, 3, 381, 3, 381, 3, 381, 3, 382, 3, 382, 3, 382, 3, 382, 3, 382, 3, 382, 3, 382, 3, 382, 3, 383, 3, 383, 3, 383, 3, 383, 3, 383, 3, 383, 3, 383, 3, 383, 3, 383, 3, 383, 3, 383, 3, 383, 3, 383, 3, 384, 3, 384, 3, 384, 3, 384, 3, 384, 3, 384, 3, 384, 3, 384, 3, 385, 3, 385, 3, 385, 3, 385, 3, 385, 3, 385, 3, 385, 3, 385, 3, 385, 3, 385, 3, 385, 3, 385, 3, 385, 3, 385, 3, 386, 3, 386, 3, 386, 3, 386, 3, 386, 3, 386, 3, 386, 3, 386, 3, 387, 3, 387, 3, 387, 3, 387, 3, 387, 3, 387, 3, 387, 3, 387, 3, 387, 3, 388, 3, 388, 3, 388, 3, 388, 3, 388, 3, 388, 3, 388, 3, 388, 3, 388, 3, 388, 3, 389, 3, 389, 3, 389, 3, 389, 3, 389, 3, 389, 3, 389, 3, 389, 3, 390, 3, 390, 3, 390, 3, 391, 3, 391, 3, 391, 3, 391, 3, 391, 3, 391, 3, 391, 3, 391, 3, 391, 3, 391, 3, 392, 3, 392, 3, 392, 3, 392, 3, 393, 3, 393, 3, 393, 3, 393, 3, 393, 3, 393, 3, 393, 3, 393, 3, 393, 3, 393, 3, 394, 3, 394, 3, 394, 3, 394, 3, 394, 3, 394, 3, 394, 3, 395, 3, 395, 3, 395, 3, 395, 3, 395, 3, 396, 3, 396, 3, 396, 3, 396, 3, 396, 3, 396, 3, 396, 3, 396, 3, 396, 3, 396, 3, 396, 3, 396, 3, 396, 3, 396, 3, 396, 3, 397, 3, 397, 3, 397, 3, 397, 3, 397, 3, 397, 3, 397, 3, 397, 3, 397, 3, 398, 3, 398, 3, 398, 3, 398, 3, 398, 3, 399, 3, 399, 3, 399, 3, 399, 3, 399, 3, 399, 3, 399, 3, 400, 3, 400, 3, 400, 3, 400, 3, 400, 3, 401, 3, 401, 3, 401, 3, 401, 3, 401, 3, 401, 3, 402, 3, 402, 3, 402, 3, 402, 3, 402, 3, 403, 3, 403, 3, 403, 3, 403, 3, 403, 3, 403, 3, 404, 3, 404, 3, 404, 3, 404, 3, 404, 3, 404, 3, 404, 3, 404, 3, 405, 3, 405, 3, 405, 3, 405, 3, 405, 3, 406, 3, 406, 3, 406, 3, 406, 3, 406, 3, 406, 3, 406, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 407, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 408, 3, 409, 3, 409, 3, 409, 3, 409, 3, 409, 3, 409, 3, 409, 3, 409, 3, 409, 3, 409, 3, 409, 3, 409, 3, 409, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 410, 3, 411, 3, 411, 3, 411, 3, 411, 3, 411, 3, 411, 3, 411, 3, 411, 3, 411, 3, 411, 3, 411, 3, 411, 3, 412, 3, 412, 3, 412, 3, 412, 3, 412, 3, 412, 3, 412, 3, 412, 3, 412, 3, 412, 3, 412, 3, 412, 3, 412, 3, 412, 3, 412, 3, 412, 3, 413, 3, 413, 3, 413, 3, 413, 3, 413, 3, 413, 3, 413, 3, 413, 3, 413, 3, 413, 3, 413, 3, 413, 3, 413, 3, 413, 3, 413, 3, 414, 3, 414, 3, 414, 3, 414, 3, 414, 3, 414, 3, 414, 3, 414, 3, 414, 3, 414, 3, 414, 3, 414, 3, 414, 3, 414, 3, 414, 3, 414, 3, 415, 3, 415, 3, 415, 3, 415, 3, 415, 3, 415, 3, 415, 3, 415, 3, 415, 3, 415, 3, 415, 3, 415, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 416, 3, 417, 3, 417, 3, 417, 3, 417, 3, 417, 3, 417, 3, 417, 3, 417, 3, 417, 3, 417, 3, 417, 3, 418, 3, 418, 3, 418, 3, 418, 3, 418, 3, 418, 3, 418, 3, 418, 3, 418, 3, 418, 3, 418, 3, 418, 3, 418, 3, 418, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 419, 3, 420, 3, 420, 3, 420, 3, 420, 3, 420, 3, 420, 3, 420, 3, 420, 3, 420, 3, 420, 3, 420, 3, 420, 3, 420, 3, 420, 3, 420, 3, 420, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 421, 3, 422, 3, 422, 3, 422, 3, 422, 3, 422, 3, 422, 3, 422, 3, 422, 3, 422, 3, 422, 3, 422, 3, 422, 3, 422, 3, 422, 3, 422, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 423, 3, 424, 3, 424, 3, 424, 3, 424, 3, 424, 3, 424, 3, 424, 3, 424, 3, 424, 3, 424, 3, 424, 3, 424, 3, 424, 3, 424, 3, 424, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 425, 3, 426, 3, 426, 3, 426, 3, 426, 3, 426, 3, 426, 3, 426, 3, 426, 3, 426, 3, 426, 3, 426, 3, 426, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 427, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 428, 3, 429, 3, 429, 3, 429, 3, 429, 3, 429, 3, 429, 3, 429, 3, 429, 3, 429, 3, 430, 3, 430, 3, 430, 3, 430, 3, 430, 3, 430, 3, 430, 3, 430, 3, 430, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 431, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 432, 3, 433, 3, 433, 3, 433, 3, 433, 3, 433, 3, 433, 3, 433, 3, 434, 3, 434, 3, 434, 3, 434, 3, 434, 3, 434, 3, 434, 3, 435, 3, 435, 3, 435, 3, 435, 3, 435, 3, 435, 3, 436, 3, 436, 3, 436, 3, 436, 3, 436, 3, 436, 3, 436, 3, 436, 3, 436, 3, 436, 3, 436, 3, 436, 3, 436, 3, 437, 3, 437, 3, 437, 3, 437, 3, 438, 3, 438, 3, 438, 3, 438, 3, 438, 3, 438, 3, 438, 3, 438, 3, 439, 3, 439, 3, 439, 3, 439, 3, 439, 3, 439, 3, 439, 3, 439, 3, 439, 3, 440, 3, 440, 3, 440, 3, 440, 3, 440, 3, 441, 3, 441, 3, 441, 3, 441, 3, 441, 3, 441, 3, 441, 3, 442, 3, 442, 3, 442, 3, 442, 3, 442, 3, 442, 3, 443, 3, 443, 3, 443, 3, 443, 3, 443, 3, 443, 3, 444, 3, 444, 3, 444, 3, 444, 3, 444, 3, 444, 3, 444, 3, 444, 3, 444, 3, 444, 3, 444, 3, 444, 3, 445, 3, 445, 3, 445, 3, 445, 3, 445, 3, 446, 3, 446, 3, 446, 3, 446, 3, 446, 3, 446, 3, 447, 3, 447, 3, 447, 3, 447, 3, 447, 3, 447, 3, 448, 3, 448, 3, 448, 3, 448, 3, 448, 3, 448, 3, 449, 3, 449, 3, 449, 3, 449, 3, 449, 3, 450, 3, 450, 3, 450, 3, 451, 3, 451, 3, 451, 3, 451, 3, 451, 3, 451, 3, 451, 3, 451, 3, 451, 3, 451, 3, 452, 3, 452, 3, 452, 3, 452, 3, 452, 3, 453, 3, 453, 3, 453, 3, 453, 3, 453, 3, 453, 3, 453, 3, 453, 3, 454, 3, 454, 3, 454, 3, 454, 3, 454, 3, 454, 3, 454, 3, 455, 3, 455, 3, 455, 3, 456, 3, 456, 3, 456, 3, 457, 3, 457, 3, 457, 3, 457, 3, 457, 3, 457, 3, 457, 3, 457, 3, 457, 3, 457, 3, 457, 3, 457, 3, 457, 3, 458, 3, 458, 3, 458, 3, 458, 3, 459, 3, 459, 3, 459, 3, 459, 3, 459, 3, 459, 3, 459, 3, 460, 3, 460, 3, 460, 3, 460, 3, 460, 3, 461, 3, 461, 3, 461, 3, 461, 3, 461, 3, 462, 3, 462, 3, 462, 3, 462, 3, 462, 3, 462, 3, 462, 3, 462, 3, 462, 3, 462, 3, 462, 3, 462, 3, 462, 3, 462, 3, 462, 3, 462, 3, 463, 3, 463, 3, 463, 3, 463, 3, 463, 3, 463, 3, 463, 3, 463, 3, 464, 3, 464, 3, 464, 3, 464, 3, 464, 3, 464, 3, 465, 3, 465, 3, 465, 3, 465, 3, 465, 3, 465, 3, 465, 3, 465, 3, 465, 3, 465, 3, 466, 3, 466, 3, 466, 3, 466, 3, 466, 3, 467, 3, 467, 3, 467, 3, 467, 3, 467, 3, 467, 3, 467, 3, 468, 3, 468, 3, 468, 3, 468, 3, 468, 3, 468, 3, 468, 3, 468, 3, 469, 3, 469, 3, 469, 3, 469, 3, 469, 3, 469, 3, 469, 3, 469, 3, 469, 3, 469, 3, 469, 3, 469, 3, 469, 3, 470, 3, 470, 3, 470, 3, 470, 3, 470, 3, 470, 3, 470, 3, 470, 3, 470, 3, 470, 3, 470, 3, 471, 3, 471, 3, 471, 3, 471, 3, 471, 3, 471, 3, 471, 3, 471, 3, 471, 3, 472, 3, 472, 3, 472, 3, 472, 3, 472, 3, 472, 3, 473, 3, 473, 3, 473, 3, 473, 3, 473, 3, 473, 3, 473, 3, 474, 3, 474, 3, 474, 3, 474, 3, 474, 3, 474, 3, 474, 3, 474, 3, 474, 3, 474, 3, 474, 3, 475, 3, 475, 3, 475, 3, 475, 3, 475, 3, 475, 3, 475, 3, 475, 3, 476, 3, 476, 3, 476, 3, 476, 3, 476, 3, 477, 3, 477, 3, 477, 3, 477, 3, 477, 3, 477, 3, 477, 3, 477, 3, 477, 3, 478, 3, 478, 3, 478, 3, 478, 3, 478, 3, 478, 3, 478, 3, 478, 3, 479, 3, 479, 3, 479, 3, 479, 3, 479, 3, 479, 3, 479, 3, 479, 3, 479, 3, 480, 3, 480, 3, 480, 3, 480, 3, 480, 3, 481, 3, 481, 3, 481, 3, 481, 3, 481, 3, 481, 3, 481, 3, 481, 3, 481, 3, 481, 3, 481, 3, 481, 3, 482, 3, 482, 3, 482, 3, 482, 3, 482, 3, 482, 3, 482, 3, 482, 3, 483, 3, 483, 3, 483, 3, 483, 3, 483, 3, 483, 3, 483, 3, 483, 3, 483, 3, 484, 3, 484, 3, 484, 3, 484, 3, 484, 3, 484, 3, 485, 3, 485, 3, 485, 3, 485, 3, 485, 3, 485, 3, 486, 3, 486, 3, 486, 3, 486, 3, 486, 3, 486, 3, 487, 3, 487, 3, 487, 3, 487, 3, 487, 3, 487, 3, 487, 3, 487, 3, 488, 3, 488, 3, 488, 3, 488, 3, 488, 3, 488, 3, 488, 3, 488, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 489, 3, 490, 3, 490, 3, 490, 3, 490, 3, 490, 3, 490, 3, 490, 3, 490, 3, 490, 3, 490, 3, 491, 3, 491, 3, 491, 3, 491, 3, 491, 3, 491, 3, 492, 3, 492, 3, 492, 3, 492, 3, 492, 3, 492, 3, 492, 3, 492, 3, 492, 3, 492, 3, 492, 3, 492, 3, 492, 3, 492, 3, 492, 3, 493, 3, 493, 3, 493, 3, 493, 3, 493, 3, 493, 3, 493, 3, 493, 3, 493, 3, 493, 3, 493, 3, 493, 3, 493, 3, 493, 3, 494, 3, 494, 3, 494, 3, 494, 3, 494, 3, 494, 3, 494, 3, 494, 3, 494, 3, 495, 3, 495, 3, 495, 3, 495, 3, 495, 3, 495, 3, 495, 3, 496, 3, 496, 3, 496, 3, 496, 3, 496, 3, 496, 3, 496, 3, 496, 3, 496, 3, 496, 3, 496, 3, 497, 3, 497, 3, 497, 3, 497, 3, 497, 3, 497, 3, 497, 3, 498, 3, 498, 3, 498, 3, 498, 3, 498, 3, 498, 3, 498, 3, 498, 3, 498, 3, 498, 3, 498, 3, 498, 3, 498, 3, 498, 3, 498, 3, 498, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 499, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 500, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 501, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 502, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 503, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 504, 3, 505, 3, 505, 3, 505, 3, 505, 3, 505, 3, 505, 3, 505, 3, 505, 3, 505, 3, 505, 3, 505, 3, 505, 3, 506, 3, 506, 3, 506, 3, 506, 3, 506, 3, 506, 3, 507, 3, 507, 3, 507, 3, 507, 3, 507, 3, 507, 3, 507, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 508, 3, 509, 3, 509, 3, 509, 3, 509, 3, 509, 3, 509, 3, 509, 3, 509, 3, 510, 3, 510, 3, 510, 3, 510, 3, 510, 3, 511, 3, 511, 3, 511, 3, 511, 3, 511, 3, 511, 3, 511, 3, 511, 3, 511, 3, 512, 3, 512, 3, 512, 3, 512, 3, 512, 3, 512, 3, 512, 3, 513, 3, 513, 3, 513, 3, 513, 3, 513, 3, 513, 3, 513, 3, 514, 3, 514, 3, 514, 3, 514, 3, 515, 3, 515, 3, 515, 3, 515, 3, 515, 3, 516, 3, 516, 3, 516, 3, 516, 3, 516, 3, 516, 3, 516, 3, 516, 3, 516, 3, 516, 3, 516, 3, 517, 3, 517, 3, 517, 3, 517, 3, 517, 3, 517, 3, 517, 3, 517, 3, 517, 3, 517, 3, 518, 3, 518, 3, 518, 3, 518, 3, 518, 3, 518, 3, 518, 3, 518, 3, 518, 3, 519, 3, 519, 3, 519, 3, 519, 3, 519, 3, 519, 3, 519, 3, 519, 3, 519, 3, 520, 3, 520, 3, 520, 3, 520, 3, 520, 3, 520, 3, 520, 3, 521, 3, 521, 3, 521, 3, 521, 3, 521, 3, 521, 3, 521, 3, 521, 3, 522, 3, 522, 3, 522, 3, 522, 3, 522, 3, 522, 3, 523, 3, 523, 3, 523, 3, 523, 3, 523, 3, 523, 3, 523, 3, 524, 3, 524, 3, 524, 3, 524, 3, 524, 3, 524, 3, 524, 3, 525, 3, 525, 3, 525, 3, 525, 3, 525, 3, 525, 3, 525, 3, 526, 3, 526, 3, 526, 3, 526, 3, 526, 3, 526, 3, 527, 3, 527, 3, 527, 3, 527, 3, 527, 3, 528, 3, 528, 3, 528, 3, 528, 3, 528, 3, 528, 3, 528, 3, 528, 3, 528, 3, 529, 3, 529, 3, 529, 3, 529, 3, 529, 3, 529, 3, 529, 3, 530, 3, 530, 3, 530, 3, 530, 3, 530, 3, 531, 3, 531, 3, 531, 3, 531, 3, 531, 3, 531, 3, 531, 3, 532, 3, 532, 3, 532, 3, 532, 3, 532, 3, 532, 3, 532, 3, 533, 3, 533, 3, 533, 3, 533, 3, 533, 3, 533, 3, 533, 3, 534, 3, 534, 3, 534, 3, 534, 3, 534, 3, 534, 3, 534, 3, 534, 3, 534, 3, 534, 3, 534, 3, 534, 3, 534, 3, 534, 3, 534, 3, 534, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 535, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 536, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 537, 3, 538, 3, 538, 3, 538, 3, 538, 3, 538, 3, 538, 3, 538, 3, 538, 3, 538, 3, 538, 3, 539, 3, 539, 3, 539, 3, 539, 3, 539, 3, 539, 3, 539, 3, 539, 3, 539, 3, 539, 3, 539, 3, 539, 3, 539, 3, 540, 3, 540, 3, 540, 3, 540, 3, 540, 3, 540, 3, 540, 3, 540, 3, 540, 3, 540, 3, 540, 3, 541, 3, 541, 3, 541, 3, 541, 3, 541, 3, 541, 3, 542, 3, 542, 3, 542, 3, 542, 3, 542, 3, 542, 3, 542, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 543, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 544, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 545, 3, 546, 3, 546, 3, 546, 3, 546, 3, 546, 3, 546, 3, 546, 3, 547, 3, 547, 3, 547, 3, 547, 3, 547, 3, 548, 3, 548, 3, 548, 3, 548, 3, 548, 3, 548, 3, 548, 3, 548, 3, 549, 3, 549, 3, 549, 3, 549, 3, 549, 3, 549, 3, 549, 3, 550, 3, 550, 3, 550, 3, 550, 3, 550, 3, 550, 3, 550, 3, 551, 3, 551, 3, 551, 3, 551, 3, 551, 3, 551, 3, 551, 3, 551, 3, 551, 3, 551, 3, 551, 3, 551, 3, 551, 3, 551, 3, 551, 3, 551, 3, 552, 3, 552, 3, 552, 3, 552, 3, 552, 3, 552, 3, 552, 3, 552, 3, 553, 3, 553, 3, 553, 3, 553, 3, 553, 3, 553, 3, 553, 3, 553, 3, 553, 3, 553, 3, 553, 3, 553, 3, 553, 3, 554, 3, 554, 3, 554, 3, 554, 3, 554, 3, 554, 3, 554, 3, 554, 3, 554, 3, 554, 3, 554, 3, 554, 3, 554, 3, 554, 3, 555, 3, 555, 3, 555, 3, 555, 3, 555, 3, 555, 3, 555, 3, 555, 3, 556, 3, 556, 3, 556, 3, 556, 3, 556, 3, 556, 3, 557, 3, 557, 3, 557, 3, 557, 3, 557, 3, 557, 3, 557, 3, 557, 3, 557, 3, 558, 3, 558, 3, 558, 3, 558, 3, 558, 3, 558, 3, 558, 3, 558, 3, 558, 3, 558, 3, 558, 3, 559, 3, 559, 3, 559, 3, 559, 3, 559, 3, 559, 3, 559, 3, 559, 3, 559, 3, 559, 3, 559, 3, 560, 3, 560, 3, 560, 3, 560, 3, 560, 3, 560, 3, 560, 3, 560, 3, 560, 3, 560, 3, 561, 3, 561, 3, 561, 3, 561, 3, 561, 3, 561, 3, 561, 3, 561, 3, 561, 3, 561, 3, 562, 3, 562, 3, 562, 3, 562, 3, 562, 3, 563, 3, 563, 3, 563, 3, 563, 3, 563, 3, 563, 3, 563, 3, 563, 3, 563, 3, 563, 3, 563, 3, 563, 3, 564, 3, 564, 3, 564, 3, 564, 3, 564, 3, 564, 3, 564, 3, 564, 3, 564, 3, 564, 3, 564, 3, 564, 3, 565, 3, 565, 3, 565, 3, 565, 3, 565, 3, 565, 3, 565, 3, 565, 3, 565, 3, 565, 3, 565, 3, 565, 3, 565, 3, 565, 3, 566, 3, 566, 3, 566, 3, 566, 3, 566, 3, 566, 3, 566, 3, 566, 3, 566, 3, 567, 3, 567, 3, 567, 3, 567, 3, 567, 3, 567, 3, 567, 3, 567, 3, 567, 3, 568, 3, 568, 3, 568, 3, 568, 3, 568, 3, 568, 3, 568, 3, 568, 3, 568, 3, 568, 3, 569, 3, 569, 3, 569, 3, 569, 3, 569, 3, 569, 3, 569, 3, 569, 3, 569, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 570, 3, 571, 3, 571, 3, 571, 3, 571, 3, 571, 3, 571, 3, 571, 3, 571, 3, 571, 3, 571, 3, 572, 3, 572, 3, 572, 3, 572, 3, 572, 3, 572, 3, 572, 3, 572, 3, 573, 3, 573, 3, 573, 3, 573, 3, 573, 3, 573, 3, 574, 3, 574, 3, 574, 3, 574, 3, 574, 3, 574, 3, 574, 3, 574, 3, 575, 3, 575, 3, 575, 3, 575, 3, 575, 3, 576, 3, 576, 3, 576, 3, 576, 3, 576, 3, 576, 3, 576, 3, 576, 3, 577, 3, 577, 3, 577, 3, 577, 3, 577, 3, 577, 3, 577, 3, 577, 3, 577, 3, 577, 3, 577, 3, 577, 3, 577, 3, 577, 3, 577, 3, 578, 3, 578, 3, 578, 3, 578, 3, 578, 3, 578, 3, 578, 3, 578, 3, 578, 3, 578, 3, 578, 3, 579, 3, 579, 3, 579, 3, 579, 3, 579, 3, 579, 3, 580, 3, 580, 3, 580, 3, 580, 3, 580, 3, 580, 3, 580, 3, 580, 3, 580, 3, 580, 3, 581, 3, 581, 3, 581, 3, 581, 3, 581, 3, 582, 3, 582, 3, 582, 3, 582, 3, 582, 3, 582, 3, 582, 3, 582, 3, 583, 3, 583, 3, 583, 3, 583, 3, 583, 3, 583, 3, 583, 3, 583, 3, 584, 3, 584, 3, 584, 3, 584, 3, 584, 3, 585, 3, 585, 3, 585, 3, 585, 3, 585, 3, 585, 3, 585, 3, 585, 3, 585, 3, 586, 3, 586, 3, 586, 3, 586, 3, 586, 3, 586, 3, 586, 3, 586, 3, 587, 3, 587, 3, 587, 3, 587, 3, 587, 3, 588, 3, 588, 3, 588, 3, 588, 3, 588, 3, 588, 3, 588, 3, 588, 3, 589, 3, 589, 3, 589, 3, 589, 3, 589, 3, 590, 3, 590, 3, 590, 3, 591, 3, 591, 3, 591, 3, 591, 3, 592, 3, 592, 3, 592, 3, 592, 3, 593, 3, 593, 3, 593, 3, 593, 3, 594, 3, 594, 3, 594, 3, 594, 3, 595, 3, 595, 3, 595, 3, 595, 3, 596, 3, 596, 3, 596, 3, 596, 3, 596, 3, 596, 3, 596, 3, 596, 3, 596, 3, 597, 3, 597, 3, 597, 3, 597, 3, 597, 3, 597, 3, 597, 3, 597, 3, 598, 3, 598, 3, 598, 3, 598, 3, 598, 3, 598, 3, 599, 3, 599, 3, 599, 3, 599, 3, 600, 3, 600, 3, 600, 3, 600, 3, 600, 3, 601, 3, 601, 3, 601, 3, 601, 3, 601, 3, 601, 3, 601, 3, 602, 3, 602, 3, 602, 3, 602, 3, 602, 3, 603, 3, 603, 3, 603, 3, 603, 3, 603, 3, 603, 3, 603, 3, 604, 3, 604, 3, 604, 3, 604, 3, 604, 3, 604, 3, 604, 3, 604, 3, 604, 3, 604, 3, 604, 3, 604, 3, 605, 3, 605, 3, 605, 3, 605, 3, 605, 3, 605, 3, 605, 3, 606, 3, 606, 3, 606, 3, 606, 3, 606, 3, 606, 3, 606, 3, 606, 3, 607, 3, 607, 3, 607, 3, 607, 3, 607, 3, 607, 3, 607, 3, 607, 3, 608, 3, 608, 3, 608, 3, 608, 3, 608, 3, 609, 3, 609, 3, 609, 3, 609, 3, 609, 3, 609, 3, 609, 3, 609, 3, 610, 3, 610, 3, 610, 3, 610, 3, 610, 3, 610, 3, 610, 3, 611, 3, 611, 3, 611, 3, 611, 3, 611, 3, 611, 3, 611, 3, 611, 3, 611, 3, 612, 3, 612, 3, 612, 3, 612, 3, 612, 3, 612, 3, 613, 3, 613, 3, 613, 3, 613, 3, 613, 3, 613, 3, 613, 3, 613, 3, 613, 3, 613, 3, 613, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 614, 3, 615, 3, 615, 3, 615, 3, 615, 3, 615, 3, 615, 3, 615, 3, 615, 3, 615, 3, 615, 3, 615, 3, 615, 3, 616, 3, 616, 3, 616, 3, 616, 3, 616, 3, 616, 3, 616, 3, 616, 3, 616, 3, 616, 3, 616, 3, 616, 3, 616, 3, 617, 3, 617, 3, 617, 3, 617, 3, 617, 3, 617, 3, 617, 3, 617, 3, 617, 3, 617, 3, 617, 3, 617, 3, 617, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 618, 3, 619, 3, 619, 3, 619, 3, 619, 3, 619, 3, 619, 3, 619, 3, 619, 3, 619, 3, 619, 3, 619, 3, 619, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 620, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 621, 3, 622, 3, 622, 3, 622, 3, 622, 3, 622, 3, 622, 3, 622, 3, 622, 3, 622, 3, 622, 3, 622, 3, 622, 3, 622, 3, 622, 3, 622, 3, 623, 3, 623, 3, 623, 3, 623, 3, 623, 3, 623, 3, 623, 3, 623, 3, 623, 3, 623, 3, 623, 3, 623, 3, 623, 3, 623, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 624, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 625, 3, 626, 3, 626, 3, 626, 3, 626, 3, 626, 3, 626, 3, 626, 3, 626, 3, 626, 3, 626, 3, 626, 3, 626, 3, 626, 3, 626, 3, 626, 3, 626, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 627, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 628, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 629, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 630, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 631, 3, 632, 3, 632, 3, 632, 3, 632, 3, 632, 3, 632, 3, 632, 3, 632, 3, 632, 3, 632, 3, 632, 3, 633, 5, 633, 7814, 10, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 3, 633, 5, 633, 7841, 10, 633, 3, 634, 3, 634, 3, 634, 3, 634, 3, 634, 3, 634, 3, 634, 3, 634, 3, 634, 3, 634, 3, 634, 3, 634, 3, 635, 3, 635, 3, 635, 3, 635, 3, 635, 3, 635, 3, 635, 3, 635, 3, 635, 3, 635, 3, 635, 3, 635, 3, 635, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 636, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 637, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 638, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 639, 3, 640, 3, 640, 3, 640, 3, 640, 3, 640, 3, 640, 3, 640, 3, 640, 3, 640, 3, 641, 3, 641, 3, 641, 3, 641, 3, 641, 3, 641, 3, 642, 3, 642, 3, 642, 3, 642, 3, 642, 3, 643, 3, 643, 3, 643, 3, 643, 3, 643, 3, 643, 3, 643, 3, 644, 3, 644, 3, 644, 3, 644, 3, 644, 3, 644, 3, 644, 3, 645, 3, 645, 3, 645, 3, 645, 3, 645, 3, 645, 3, 645, 3, 646, 3, 646, 3, 646, 3, 646, 3, 646, 3, 646, 3, 646, 3, 647, 3, 647, 3, 647, 3, 647, 3, 647, 3, 647, 3, 648, 3, 648, 3, 648, 3, 648, 3, 648, 3, 648, 3, 649, 3, 649, 3, 649, 3, 649, 3, 649, 3, 649, 3, 650, 3, 650, 3, 650, 3, 650, 3, 650, 3, 650, 3, 651, 3, 651, 3, 651, 3, 651, 3, 651, 3, 652, 3, 652, 3, 652, 3, 652, 3, 652, 3, 652, 3, 652, 3, 652, 3, 653, 3, 653, 3, 653, 3, 653, 3, 653, 3, 653, 3, 654, 3, 654, 3, 654, 3, 654, 3, 654, 3, 654, 3, 654, 3, 655, 3, 655, 3, 655, 3, 655, 3, 656, 3, 656, 3, 656, 3, 656, 3, 656, 3, 656, 3, 656, 3, 656, 3, 657, 3, 657, 3, 657, 3, 657, 3, 657, 3, 657, 3, 658, 3, 658, 3, 658, 3, 658, 3, 658, 3, 658, 3, 658, 3, 659, 3, 659, 3, 659, 3, 659, 3, 660, 3, 660, 3, 660, 3, 660, 3, 660, 3, 660, 3, 660, 3, 660, 3, 661, 3, 661, 3, 661, 3, 661, 3, 661, 3, 661, 3, 662, 3, 662, 3, 662, 3, 662, 3, 662, 3, 662, 3, 663, 3, 663, 3, 663, 3, 663, 3, 663, 3, 663, 3, 663, 3, 664, 3, 664, 3, 664, 3, 664, 3, 664, 3, 664, 3, 664, 3, 665, 3, 665, 3, 665, 3, 665, 3, 665, 3, 665, 3, 665, 3, 666, 3, 666, 3, 666, 3, 666, 3, 666, 3, 666, 3, 666, 3, 667, 3, 667, 3, 667, 3, 667, 3, 667, 3, 667, 3, 668, 3, 668, 3, 668, 3, 668, 3, 668, 3, 668, 3, 668, 3, 668, 3, 668, 3, 669, 3, 669, 3, 669, 3, 669, 3, 669, 3, 670, 3, 670, 3, 670, 3, 670, 3, 670, 3, 671, 3, 671, 3, 671, 3, 671, 3, 671, 3, 671, 3, 671, 3, 672, 3, 672, 3, 672, 3, 672, 3, 672, 3, 673, 3, 673, 3, 673, 3, 673, 3, 673, 3, 674, 3, 674, 3, 674, 3, 674, 3, 674, 3, 674, 3, 675, 3, 675, 3, 675, 3, 675, 3, 675, 3, 675, 3, 675, 3, 675, 3, 676, 3, 676, 3, 676, 3, 676, 3, 676, 3, 676, 3, 677, 3, 677, 3, 677, 3, 677, 3, 677, 3, 678, 3, 678, 3, 678, 3, 678, 3, 678, 3, 678, 3, 678, 3, 678, 3, 679, 3, 679, 3, 679, 3, 679, 3, 679, 3, 679, 3, 679, 3, 679, 3, 680, 3, 680, 3, 680, 3, 680, 3, 680, 3, 680, 3, 680, 3, 680, 3, 681, 3, 681, 3, 681, 3, 681, 3, 681, 3, 681, 3, 681, 3, 681, 3, 681, 3, 681, 3, 682, 3, 682, 3, 682, 3, 682, 3, 683, 3, 683, 3, 683, 3, 683, 3, 683, 3, 683, 3, 683, 3, 683, 3, 683, 3, 683, 3, 684, 3, 684, 3, 684, 3, 684, 3, 684, 3, 684, 3, 684, 3, 685, 3, 685, 3, 685, 3, 685, 3, 685, 3, 685, 3, 685, 3, 686, 3, 686, 3, 686, 3, 686, 3, 686, 3, 686, 3, 686, 3, 686, 3, 686, 3, 686, 3, 686, 3, 687, 3, 687, 3, 687, 3, 687, 3, 687, 3, 687, 3, 687, 3, 688, 3, 688, 3, 688, 3, 688, 3, 689, 3, 689, 3, 689, 3, 689, 3, 689, 3, 689, 3, 689, 3, 689, 3, 689, 3, 689, 3, 689, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 690, 3, 691, 3, 691, 3, 691, 3, 691, 3, 691, 3, 691, 3, 691, 3, 692, 3, 692, 3, 692, 3, 692, 3, 692, 3, 692, 3, 692, 3, 692, 3, 692, 3, 692, 3, 692, 3, 693, 3, 693, 3, 693, 3, 693, 3, 693, 3, 693, 3, 693, 3, 693, 3, 693, 3, 693, 3, 694, 3, 694, 3, 694, 3, 694, 3, 694, 3, 694, 3, 694, 3, 694, 3, 694, 3, 694, 3, 694, 3, 694, 3, 695, 3, 695, 3, 695, 3, 695, 3, 695, 3, 695, 3, 695, 3, 695, 3, 695, 3, 695, 3, 695, 3, 695, 3, 695, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 696, 3, 697, 3, 697, 3, 697, 3, 697, 3, 697, 3, 697, 3, 697, 3, 697, 3, 697, 3, 697, 3, 697, 3, 697, 3, 697, 3, 697, 3, 697, 3, 698, 3, 698, 3, 698, 3, 698, 3, 698, 3, 698, 3, 698, 3, 698, 3, 698, 3, 699, 3, 699, 3, 699, 3, 699, 3, 699, 3, 699, 3, 699, 3, 699, 3, 699, 3, 699, 3, 699, 3, 700, 3, 700, 3, 700, 3, 700, 3, 700, 3, 700, 3, 700, 3, 700, 3, 700, 3, 700, 3, 700, 3, 700, 3, 700, 3, 700, 3, 700, 3, 700, 3, 701, 3, 701, 3, 701, 3, 701, 3, 701, 3, 701, 3, 701, 3, 701, 3, 701, 3, 701, 3, 701, 3, 702, 3, 702, 3, 702, 3, 702, 3, 702, 3, 702, 3, 702, 3, 702, 3, 702, 3, 702, 3, 702, 3, 702, 3, 702, 3, 703, 3, 703, 3, 703, 3, 703, 3, 703, 3, 703, 3, 704, 3, 704, 3, 704, 3, 704, 3, 704, 3, 704, 3, 704, 3, 704, 3, 705, 3, 705, 3, 705, 3, 705, 3, 706, 3, 706, 3, 706, 3, 706, 3, 706, 3, 707, 3, 707, 3, 707, 3, 707, 3, 707, 3, 707, 3, 707, 3, 707, 3, 708, 3, 708, 3, 708, 3, 708, 3, 708, 3, 708, 3, 708, 3, 708, 3, 709, 3, 709, 3, 709, 3, 709, 3, 709, 3, 709, 3, 709, 3, 709, 3, 709, 3, 709, 3, 709, 3, 709, 3, 710, 3, 710, 3, 710, 3, 710, 3, 710, 3, 710, 3, 710, 3, 710, 3, 710, 3, 710, 3, 710, 3, 710, 3, 711, 3, 711, 3, 711, 3, 711, 3, 711, 3, 712, 3, 712, 3, 712, 3, 712, 3, 712, 3, 712, 3, 712, 3, 712, 3, 712, 3, 713, 3, 713, 3, 713, 3, 713, 3, 713, 3, 714, 3, 714, 3, 714, 3, 714, 3, 714, 3, 714, 3, 714, 3, 715, 3, 715, 3, 715, 3, 715, 3, 715, 3, 715, 3, 716, 3, 716, 3, 716, 3, 716, 3, 716, 3, 716, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 717, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 718, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 719, 3, 720, 3, 720, 3, 720, 3, 720, 3, 720, 3, 720, 3, 720, 3, 720, 3, 720, 3, 720, 3, 720, 3, 720, 3, 720, 3, 720, 3, 720, 3, 720, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 721, 3, 722, 3, 722, 3, 722, 3, 722, 3, 722, 3, 723, 3, 723, 3, 723, 3, 723, 3, 723, 3, 723, 3, 724, 3, 724, 3, 724, 3, 724, 3, 724, 3, 724, 3, 724, 3, 724, 3, 724, 3, 724, 3, 725, 3, 725, 3, 725, 3, 725, 3, 726, 3, 726, 3, 726, 3, 726, 3, 726, 3, 726, 3, 726, 3, 726, 3, 726, 3, 726, 3, 727, 3, 727, 3, 727, 3, 727, 3, 727, 3, 727, 3, 727, 3, 727, 3, 727, 3, 727, 3, 727, 3, 728, 3, 728, 3, 728, 3, 728, 3, 728, 3, 728, 3, 728, 3, 729, 3, 729, 3, 729, 3, 729, 3, 729, 3, 729, 3, 729, 3, 729, 3, 729, 3, 729, 3, 729, 3, 729, 3, 729, 3, 730, 3, 730, 3, 730, 3, 730, 3, 730, 3, 731, 3, 731, 3, 731, 3, 731, 3, 731, 3, 731, 3, 731, 3, 731, 3, 732, 3, 732, 3, 732, 3, 732, 3, 732, 3, 732, 3, 732, 3, 732, 3, 732, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 733, 3, 734, 3, 734, 3, 734, 3, 734, 3, 734, 3, 734, 3, 734, 3, 734, 3, 735, 3, 735, 3, 735, 3, 735, 3, 735, 3, 735, 3, 735, 3, 735, 3, 735, 3, 735, 3, 735, 3, 735, 3, 736, 3, 736, 3, 736, 3, 736, 3, 736, 3, 736, 3, 736, 3, 736, 3, 736, 3, 736, 3, 736, 3, 736, 3, 736, 3, 737, 3, 737, 3, 737, 3, 737, 3, 737, 3, 737, 3, 737, 3, 737, 3, 737, 3, 737, 3, 738, 3, 738, 3, 738, 3, 738, 3, 738, 3, 738, 3, 738, 3, 738, 3, 738, 3, 739, 3, 739, 3, 739, 3, 739, 3, 739, 3, 739, 3, 739, 3, 740, 3, 740, 3, 740, 3, 740, 3, 740, 3, 740, 3, 740, 3, 740, 3, 740, 3, 740, 3, 741, 3, 741, 3, 741, 3, 741, 3, 741, 3, 741, 3, 741, 3, 741, 3, 741, 3, 741, 3, 741, 3, 741, 3, 741, 3, 741, 3, 742, 3, 742, 3, 742, 3, 742, 3, 742, 3, 743, 3, 743, 3, 743, 3, 743, 3, 743, 3, 743, 3, 743, 3, 743, 3, 743, 3, 743, 3, 743, 3, 744, 3, 744, 3, 744, 3, 744, 3, 745, 3, 745, 3, 745, 3, 745, 3, 746, 3, 746, 3, 746, 3, 746, 3, 746, 3, 746, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 747, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 748, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 749, 3, 750, 3, 750, 3, 750, 3, 750, 3, 750, 3, 750, 3, 750, 3, 750, 3, 750, 3, 750, 3, 750, 3, 750, 3, 750, 3, 750, 3, 751, 3, 751, 3, 751, 3, 751, 3, 751, 3, 751, 3, 751, 3, 751, 3, 752, 3, 752, 3, 752, 3, 752, 3, 752, 3, 752, 3, 752, 3, 752, 3, 752, 3, 753, 3, 753, 3, 753, 3, 753, 3, 753, 3, 753, 3, 753, 3, 753, 3, 753, 3, 753, 3, 753, 3, 753, 3, 754, 3, 754, 3, 754, 3, 754, 3, 754, 3, 754, 3, 754, 3, 754, 3, 755, 3, 755, 3, 755, 3, 755, 3, 755, 3, 755, 3, 755, 3, 755, 3, 755, 3, 755, 3, 755, 3, 756, 3, 756, 3, 756, 3, 756, 3, 756, 3, 756, 3, 756, 3, 756, 3, 756, 3, 756, 3, 757, 3, 757, 3, 757, 3, 757, 3, 757, 3, 757, 3, 757, 3, 757, 3, 757, 3, 757, 3, 758, 3, 758, 3, 758, 3, 758, 3, 758, 3, 758, 3, 758, 3, 759, 3, 759, 3, 759, 3, 759, 3, 759, 3, 759, 3, 759, 3, 759, 3, 760, 3, 760, 3, 760, 3, 760, 3, 760, 3, 760, 3, 760, 3, 760, 3, 760, 3, 760, 3, 760, 3, 760, 3, 761, 3, 761, 3, 761, 3, 761, 3, 761, 3, 761, 3, 761, 3, 761, 3, 761, 3, 761, 3, 761, 3, 761, 3, 762, 3, 762, 3, 762, 3, 762, 3, 762, 3, 762, 3, 762, 3, 762, 3, 762, 3, 762, 3, 763, 3, 763, 3, 763, 3, 763, 3, 763, 3, 763, 3, 763, 3, 763, 3, 763, 3, 764, 3, 764, 3, 764, 3, 764, 3, 765, 3, 765, 3, 765, 3, 765, 3, 765, 3, 765, 3, 765, 3, 766, 3, 766, 3, 766, 3, 766, 3, 766, 3, 766, 3, 766, 3, 766, 3, 767, 3, 767, 3, 767, 3, 767, 3, 767, 3, 767, 3, 767, 3, 767, 3, 767, 3, 768, 3, 768, 3, 768, 3, 768, 3, 768, 3, 768, 3, 768, 3, 768, 3, 768, 3, 769, 3, 769, 3, 769, 3, 769, 3, 769, 3, 769, 3, 769, 3, 770, 3, 770, 3, 770, 3, 770, 3, 771, 3, 771, 3, 771, 3, 771, 3, 771, 3, 771, 3, 771, 3, 771, 3, 771, 3, 771, 3, 771, 3, 772, 3, 772, 3, 772, 3, 772, 3, 772, 3, 772, 3, 772, 3, 772, 3, 772, 3, 772, 3, 772, 3, 772, 3, 772, 3, 773, 3, 773, 3, 773, 3, 773, 3, 773, 3, 773, 3, 773, 3, 773, 3, 773, 3, 773, 3, 773, 3, 773, 3, 773, 3, 774, 3, 774, 3, 774, 3, 774, 3, 774, 3, 774, 3, 775, 3, 775, 3, 775, 3, 775, 3, 775, 3, 775, 3, 775, 3, 775, 3, 775, 3, 775, 3, 775, 3, 775, 3, 776, 3, 776, 3, 776, 3, 776, 3, 776, 3, 776, 3, 777, 3, 777, 3, 777, 3, 777, 3, 777, 3, 777, 3, 777, 3, 778, 3, 778, 3, 778, 3, 778, 3, 778, 3, 778, 3, 778, 3, 778, 3, 778, 3, 778, 3, 778, 3, 779, 3, 779, 3, 779, 3, 779, 3, 779, 3, 779, 3, 779, 3, 779, 3, 779, 3, 779, 3, 779, 3, 779, 3, 780, 3, 780, 3, 780, 3, 780, 3, 780, 3, 780, 3, 780, 3, 780, 3, 780, 3, 780, 3, 781, 3, 781, 3, 781, 3, 781, 3, 781, 3, 781, 3, 781, 3, 781, 3, 781, 3, 781, 3, 781, 3, 781, 3, 781, 3, 781, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 782, 3, 783, 3, 783, 3, 783, 3, 783, 3, 783, 3, 783, 3, 783, 3, 783, 3, 783, 3, 783, 3, 783, 3, 783, 3, 783, 3, 783, 3, 783, 3, 783, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 784, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 785, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 786, 3, 787, 3, 787, 3, 787, 3, 787, 3, 787, 3, 787, 3, 787, 3, 787, 3, 787, 3, 787, 3, 787, 3, 787, 3, 787, 3, 787, 3, 787, 3, 787, 3, 788, 3, 788, 3, 788, 3, 788, 3, 788, 3, 788, 3, 788, 3, 788, 3, 788, 3, 788, 3, 789, 3, 789, 3, 789, 3, 789, 3, 789, 3, 789, 3, 789, 3, 789, 3, 789, 3, 789, 3, 789, 3, 789, 3, 789, 3, 790, 3, 790, 3, 790, 3, 790, 3, 790, 3, 790, 3, 790, 3, 790, 3, 790, 3, 790, 3, 790, 3, 790, 3, 790, 3, 791, 3, 791, 3, 791, 3, 791, 3, 791, 3, 791, 3, 791, 3, 791, 3, 791, 3, 791, 3, 791, 3, 791, 3, 792, 3, 792, 3, 792, 3, 792, 3, 792, 3, 792, 3, 792, 3, 792, 3, 792, 3, 792, 3, 792, 3, 793, 3, 793, 3, 793, 3, 793, 3, 793, 3, 793, 3, 793, 3, 793, 3, 793, 3, 794, 3, 794, 3, 794, 3, 794, 3, 794, 3, 794, 3, 794, 3, 794, 3, 795, 3, 795, 3, 795, 3, 795, 3, 795, 3, 795, 3, 795, 3, 795, 3, 795, 3, 796, 3, 796, 3, 796, 3, 796, 3, 796, 3, 796, 3, 796, 3, 796, 3, 796, 3, 796, 3, 796, 3, 796, 3, 797, 3, 797, 3, 797, 3, 797, 3, 797, 3, 797, 3, 797, 3, 797, 3, 797, 3, 797, 3, 797, 3, 797, 3, 797, 3, 797, 3, 798, 3, 798, 3, 798, 3, 798, 3, 799, 3, 799, 3, 799, 3, 799, 3, 799, 3, 799, 3, 799, 3, 800, 3, 800, 3, 800, 3, 800, 3, 800, 3, 800, 3, 800, 3, 800, 3, 800, 3, 800, 3, 800, 3, 801, 3, 801, 3, 801, 3, 801, 3, 801, 3, 801, 3, 801, 3, 801, 3, 801, 3, 801, 3, 801, 3, 802, 3, 802, 3, 802, 3, 802, 3, 802, 3, 802, 3, 802, 3, 802, 3, 802, 3, 802, 3, 803, 3, 803, 3, 803, 3, 803, 3, 803, 3, 803, 3, 803, 3, 803, 3, 803, 3, 803, 3, 804, 3, 804, 3, 804, 3, 804, 3, 804, 3, 804, 3, 805, 3, 805, 3, 805, 3, 805, 3, 805, 3, 805, 3, 805, 3, 805, 3, 805, 3, 805, 3, 805, 3, 805, 3, 805, 3, 805, 3, 806, 3, 806, 3, 806, 3, 806, 3, 806, 3, 806, 3, 806, 3, 806, 3, 806, 3, 806, 3, 806, 3, 807, 3, 807, 3, 807, 3, 807, 3, 807, 3, 807, 3, 807, 3, 807, 3, 807, 3, 808, 3, 808, 3, 808, 3, 808, 3, 808, 3, 808, 3, 808, 3, 808, 3, 809, 3, 809, 3, 809, 3, 809, 3, 809, 3, 809, 3, 809, 3, 810, 3, 810, 3, 810, 3, 810, 3, 810, 3, 810, 3, 810, 3, 810, 3, 810, 3, 811, 3, 811, 3, 811, 3, 811, 3, 811, 3, 811, 3, 811, 3, 811, 3, 811, 3, 811, 3, 811, 3, 811, 3, 811, 3, 812, 3, 812, 3, 812, 3, 812, 3, 812, 3, 812, 3, 812, 3, 812, 3, 813, 3, 813, 3, 813, 3, 813, 3, 813, 3, 813, 3, 813, 3, 813, 3, 813, 3, 813, 3, 813, 3, 813, 3, 813, 3, 813, 3, 813, 3, 814, 3, 814, 3, 814, 3, 814, 3, 814, 3, 814, 3, 814, 3, 814, 3, 814, 3, 814, 3, 814, 3, 814, 3, 814, 3, 814, 3, 814, 3, 815, 3, 815, 3, 815, 3, 815, 3, 815, 3, 815, 3, 815, 3, 815, 3, 816, 3, 816, 3, 816, 3, 816, 3, 816, 3, 816, 3, 816, 3, 816, 3, 816, 3, 816, 3, 816, 3, 816, 3, 816, 3, 817, 3, 817, 3, 817, 3, 817, 3, 817, 3, 817, 3, 817, 3, 817, 3, 817, 3, 817, 3, 817, 3, 817, 3, 817, 3, 817, 3, 817, 3, 818, 3, 818, 3, 818, 3, 818, 3, 818, 3, 818, 3, 819, 3, 819, 3, 819, 3, 819, 3, 819, 3, 819, 3, 820, 3, 820, 3, 820, 3, 820, 3, 820, 3, 820, 3, 820, 3, 821, 3, 821, 3, 821, 3, 821, 3, 821, 3, 821, 3, 821, 3, 821, 3, 821, 3, 821, 3, 821, 3, 821, 3, 821, 3, 822, 3, 822, 3, 822, 3, 822, 3, 822, 3, 822, 3, 822, 3, 822, 3, 822, 3, 822, 3, 822, 3, 822, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 823, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 824, 3, 825, 3, 825, 3, 825, 3, 826, 3, 826, 3, 826, 3, 826, 3, 826, 3, 826, 3, 826, 3, 826, 3, 826, 3, 826, 3, 827, 3, 827, 3, 827, 3, 827, 3, 827, 3, 827, 3, 827, 3, 828, 3, 828, 3, 828, 3, 828, 3, 829, 3, 829, 3, 829, 3, 829, 3, 829, 3, 829, 3, 830, 3, 830, 3, 830, 3, 830, 3, 830, 3, 831, 3, 831, 3, 831, 3, 831, 3, 831, 3, 831, 3, 832, 3, 832, 3, 832, 3, 832, 3, 832, 3, 833, 3, 833, 3, 833, 3, 833, 3, 833, 3, 833, 3, 834, 3, 834, 3, 834, 3, 834, 3, 834, 3, 834, 3, 834, 3, 834, 3, 834, 3, 835, 3, 835, 3, 835, 3, 835, 3, 835, 3, 835, 3, 835, 3, 835, 3, 835, 3, 836, 3, 836, 3, 836, 3, 836, 3, 836, 3, 836, 3, 836, 3, 836, 3, 836, 3, 837, 3, 837, 3, 837, 3, 837, 3, 837, 3, 837, 3, 837, 3, 837, 3, 837, 3, 837, 3, 837, 3, 837, 3, 837, 3, 837, 3, 837, 3, 837, 3, 838, 3, 838, 3, 838, 3, 838, 3, 838, 3, 838, 3, 838, 3, 838, 3, 838, 3, 838, 3, 838, 3, 838, 3, 839, 3, 839, 3, 839, 3, 839, 3, 839, 3, 839, 3, 839, 3, 839, 3, 839, 3, 839, 3, 839, 3, 839, 3, 840, 3, 840, 3, 840, 3, 840, 3, 840, 3, 840, 3, 840, 3, 840, 3, 840, 3, 841, 3, 841, 3, 841, 3, 841, 3, 841, 3, 841, 3, 841, 3, 841, 3, 841, 3, 841, 3, 841, 3, 841, 3, 841, 3, 841, 3, 842, 3, 842, 3, 842, 3, 842, 3, 842, 3, 842, 3, 842, 3, 842, 3, 842, 3, 842, 3, 842, 3, 842, 3, 843, 3, 843, 3, 843, 3, 843, 3, 843, 3, 843, 3, 843, 3, 843, 3, 843, 3, 843, 3, 843, 3, 844, 3, 844, 3, 844, 3, 844, 3, 844, 3, 844, 3, 844, 3, 844, 3, 844, 3, 844, 3, 845, 3, 845, 3, 845, 3, 845, 3, 846, 3, 846, 3, 846, 3, 846, 3, 846, 3, 846, 3, 846, 3, 846, 3, 846, 3, 846, 3, 846, 3, 846, 3, 846, 3, 846, 3, 847, 3, 847, 3, 847, 3, 847, 3, 847, 3, 847, 3, 847, 3, 847, 3, 847, 3, 847, 3, 847, 3, 847, 3, 847, 3, 848, 3, 848, 3, 848, 3, 848, 3, 848, 3, 848, 3, 848, 3, 848, 3, 848, 3, 848, 3, 849, 3, 849, 3, 849, 3, 849, 3, 849, 3, 849, 3, 849, 3, 849, 3, 849, 3, 849, 3, 849, 3, 849, 3, 849, 3, 849, 3, 849, 3, 850, 3, 850, 3, 850, 3, 850, 3, 850, 3, 850, 3, 850, 3, 850, 3, 850, 3, 850, 3, 850, 3, 850, 3, 850, 3, 850, 3, 851, 3, 851, 3, 851, 3, 851, 3, 851, 3, 851, 3, 851, 3, 851, 3, 851, 3, 851, 3, 851, 3, 851, 3, 851, 3, 851, 3, 852, 3, 852, 3, 852, 3, 852, 3, 852, 3, 852, 3, 852, 3, 852, 3, 852, 3, 852, 3, 852, 3, 852, 3, 852, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 853, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 854, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 855, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 856, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 857, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 858, 3, 859, 3, 859, 3, 859, 3, 859, 3, 859, 3, 859, 3, 859, 3, 859, 3, 859, 3, 859, 3, 859, 3, 860, 3, 860, 3, 860, 3, 860, 3, 860, 3, 860, 3, 860, 3, 861, 3, 861, 3, 861, 3, 861, 3, 861, 3, 861, 3, 861, 3, 861, 3, 861, 3, 861, 3, 861, 3, 861, 3, 861, 3, 861, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 862, 3, 863, 3, 863, 3, 863, 3, 863, 3, 863, 3, 863, 3, 863, 3, 863, 3, 863, 3, 863, 3, 864, 3, 864, 3, 864, 3, 864, 3, 865, 3, 865, 3, 865, 3, 865, 3, 865, 3, 865, 3, 865, 3, 865, 3, 865, 3, 865, 3, 865, 3, 865, 3, 865, 3, 866, 3, 866, 3, 866, 3, 866, 3, 867, 3, 867, 3, 867, 3, 867, 3, 867, 3, 867, 3, 867, 3, 867, 3, 867, 3, 868, 3, 868, 3, 868, 3, 868, 3, 868, 3, 868, 3, 868, 3, 868, 3, 868, 3, 868, 3, 868, 3, 869, 3, 869, 3, 869, 3, 869, 3, 869, 3, 869, 3, 869, 3, 869, 3, 869, 3, 869, 3, 869, 3, 869, 3, 870, 3, 870, 3, 870, 3, 871, 3, 871, 3, 871, 3, 871, 3, 871, 3, 871, 3, 871, 3, 871, 3, 871, 3, 871, 3, 871, 3, 871, 3, 871, 3, 871, 3, 872, 3, 872, 3, 872, 3, 872, 3, 872, 3, 872, 3, 872, 3, 872, 3, 872, 3, 872, 3, 872, 3, 872, 3, 872, 3, 873, 3, 873, 3, 873, 3, 873, 3, 873, 3, 873, 3, 873, 3, 874, 3, 874, 3, 874, 3, 874, 3, 874, 3, 874, 3, 874, 3, 874, 3, 874, 3, 874, 3, 874, 3, 874, 3, 874, 3, 875, 3, 875, 3, 875, 3, 875, 3, 875, 3, 875, 3, 875, 3, 875, 3, 875, 3, 875, 3, 875, 3, 875, 3, 876, 3, 876, 3, 876, 3, 876, 3, 876, 3, 876, 3, 876, 3, 876, 3, 876, 3, 876, 3, 876, 3, 876, 3, 876, 3, 876, 3, 876, 3, 876, 3, 877, 3, 877, 3, 877, 3, 877, 3, 877, 3, 877, 3, 877, 3, 877, 3, 877, 3, 877, 3, 877, 3, 877, 3, 877, 3, 877, 3, 877, 3, 878, 3, 878, 3, 878, 3, 878, 3, 879, 3, 879, 3, 879, 3, 879, 3, 879, 3, 879, 3, 880, 3, 880, 3, 880, 3, 880, 3, 880, 3, 880, 3, 881, 3, 881, 3, 881, 3, 881, 3, 881, 3, 881, 3, 881, 3, 881, 3, 882, 3, 882, 3, 882, 3, 882, 3, 882, 3, 883, 3, 883, 3, 883, 3, 883, 3, 883, 3, 883, 3, 883, 3, 883, 3, 883, 3, 883, 3, 883, 3, 883, 3, 883, 3, 884, 3, 884, 3, 884, 3, 884, 3, 884, 3, 884, 3, 884, 3, 884, 3, 884, 3, 884, 3, 884, 3, 884, 3, 884, 3, 885, 3, 885, 3, 885, 3, 885, 3, 885, 3, 885, 3, 885, 3, 885, 3, 886, 3, 886, 3, 886, 3, 886, 3, 886, 3, 886, 3, 887, 3, 887, 3, 887, 3, 887, 3, 887, 3, 887, 3, 887, 3, 887, 3, 887, 3, 887, 3, 888, 3, 888, 3, 888, 3, 888, 3, 888, 3, 889, 3, 889, 3, 889, 3, 889, 3, 889, 3, 889, 3, 890, 3, 890, 3, 890, 3, 890, 3, 890, 3, 890, 3, 890, 3, 890, 3, 890, 3, 890, 3, 890, 3, 890, 3, 891, 3, 891, 3, 891, 3, 891, 3, 891, 3, 891, 3, 891, 3, 891, 3, 891, 3, 891, 3, 891, 3, 891, 3, 891, 3, 892, 3, 892, 3, 892, 3, 892, 3, 893, 3, 893, 3, 893, 3, 893, 3, 893, 3, 894, 3, 894, 3, 894, 3, 894, 3, 894, 3, 895, 3, 895, 3, 895, 3, 895, 3, 895, 3, 895, 3, 895, 3, 895, 3, 895, 3, 895, 3, 895, 3, 895, 3, 896, 3, 896, 3, 896, 3, 896, 3, 896, 3, 897, 3, 897, 3, 897, 3, 897, 3, 898, 3, 898, 3, 898, 3, 898, 3, 898, 3, 898, 3, 899, 3, 899, 3, 899, 3, 899, 3, 899, 3, 899, 3, 899, 3, 899, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 900, 3, 901, 3, 901, 3, 901, 3, 901, 3, 901, 3, 902, 3, 902, 3, 902, 3, 902, 3, 902, 3, 903, 3, 903, 3, 903, 3, 903, 3, 903, 3, 903, 3, 903, 3, 903, 3, 903, 3, 903, 3, 903, 3, 904, 3, 904, 3, 904, 3, 904, 3, 904, 3, 904, 3, 904, 3, 905, 3, 905, 3, 905, 3, 905, 3, 905, 3, 905, 3, 905, 3, 905, 3, 905, 3, 905, 3, 905, 3, 905, 3, 906, 3, 906, 3, 906, 3, 906, 3, 906, 3, 906, 3, 906, 3, 906, 3, 907, 3, 907, 3, 907, 3, 907, 3, 907, 3, 907, 3, 907, 3, 907, 3, 907, 3, 907, 3, 907, 3, 907, 3, 908, 3, 908, 3, 908, 3, 908, 3, 908, 3, 908, 3, 908, 3, 908, 3, 908, 3, 908, 3, 909, 3, 909, 3, 909, 3, 909, 3, 909, 3, 909, 3, 909, 3, 909, 3, 909, 3, 910, 3, 910, 3, 910, 3, 910, 3, 910, 3, 910, 3, 910, 3, 910, 3, 910, 3, 911, 3, 911, 3, 911, 3, 911, 3, 911, 3, 911, 3, 911, 3, 911, 3, 911, 3, 911, 3, 912, 3, 912, 3, 912, 3, 912, 3, 912, 3, 912, 3, 912, 3, 912, 3, 912, 3, 912, 3, 912, 3, 912, 3, 913, 3, 913, 3, 913, 3, 913, 3, 913, 3, 913, 3, 913, 3, 913, 3, 913, 3, 913, 3, 913, 3, 913, 3, 914, 3, 914, 3, 914, 3, 914, 3, 914, 3, 914, 3, 914, 3, 914, 3, 914, 3, 914, 3, 914, 3, 915, 3, 915, 3, 915, 3, 915, 3, 915, 3, 915, 3, 915, 3, 915, 3, 915, 3, 915, 3, 915, 3, 915, 3, 915, 3, 915, 3, 916, 3, 916, 3, 916, 3, 916, 3, 916, 3, 916, 3, 916, 3, 916, 3, 916, 3, 916, 3, 916, 3, 916, 3, 916, 3, 917, 3, 917, 3, 917, 3, 917, 3, 917, 3, 917, 3, 917, 3, 917, 3, 917, 3, 917, 3, 917, 3, 917, 3, 918, 3, 918, 3, 918, 3, 918, 3, 918, 3, 918, 3, 918, 3, 918, 3, 918, 3, 918, 3, 918, 3, 918, 3, 919, 3, 919, 3, 919, 3, 919, 3, 919, 3, 919, 3, 919, 3, 919, 3, 919, 3, 919, 3, 919, 3, 919, 3, 920, 3, 920, 3, 920, 3, 920, 3, 920, 3, 920, 3, 920, 3, 920, 3, 920, 3, 920, 3, 920, 3, 920, 3, 921, 3, 921, 3, 921, 3, 921, 3, 921, 3, 921, 3, 921, 3, 921, 3, 921, 3, 921, 3, 922, 3, 922, 3, 922, 3, 922, 3, 922, 3, 922, 3, 922, 3, 922, 3, 922, 3, 922, 3, 922, 3, 922, 3, 922, 3, 922, 3, 922, 3, 922, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 923, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 924, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 925, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 926, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 927, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 928, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 929, 3, 930, 3, 930, 3, 930, 3, 930, 3, 930, 3, 930, 3, 930, 3, 930, 3, 930, 3, 930, 3, 930, 3, 930, 3, 930, 3, 931, 3, 931, 3, 931, 3, 931, 3, 931, 3, 931, 3, 931, 3, 931, 3, 931, 3, 931, 3, 931, 3, 931, 3, 931, 3, 931, 3, 931, 3, 931, 3, 932, 3, 932, 3, 932, 3, 932, 3, 932, 3, 932, 3, 932, 3, 932, 3, 932, 3, 932, 3, 932, 3, 932, 3, 932, 3, 932, 3, 932, 3, 932, 3, 933, 3, 933, 3, 933, 3, 933, 3, 933, 3, 933, 3, 933, 3, 933, 3, 933, 3, 933, 3, 933, 3, 933, 3, 933, 3, 933, 3, 933, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 934, 3, 935, 3, 935, 3, 935, 3, 935, 3, 935, 3, 935, 3, 935, 3, 935, 3, 935, 3, 935, 3, 935, 3, 935, 3, 935, 3, 935, 3, 935, 3, 935, 3, 936, 3, 936, 3, 936, 3, 936, 3, 936, 3, 936, 3, 936, 3, 936, 3, 936, 3, 936, 3, 936, 3, 936, 3, 936, 3, 936, 3, 937, 3, 937, 3, 937, 3, 937, 3, 937, 3, 937, 3, 937, 3, 937, 3, 937, 3, 937, 3, 937, 3, 937, 3, 938, 3, 938, 3, 938, 3, 938, 3, 938, 3, 938, 3, 938, 3, 938, 3, 938, 3, 938, 3, 938, 3, 939, 3, 939, 3, 939, 3, 939, 3, 939, 3, 939, 3, 939, 3, 939, 3, 939, 3, 939, 3, 939, 3, 939, 3, 940, 3, 940, 3, 940, 3, 940, 3, 940, 3, 940, 3, 940, 3, 940, 3, 940, 3, 940, 3, 940, 3, 940, 3, 940, 3, 940, 3, 940, 3, 940, 3, 941, 3, 941, 3, 941, 3, 941, 3, 941, 3, 941, 3, 941, 3, 941, 3, 941, 3, 941, 3, 941, 3, 941, 3, 941, 3, 941, 3, 941, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 942, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 943, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 944, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 945, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 946, 3, 947, 3, 947, 3, 947, 3, 947, 3, 947, 3, 947, 3, 947, 3, 947, 3, 947, 3, 947, 3, 947, 3, 947, 3, 947, 3, 948, 3, 948, 3, 948, 3, 948, 3, 948, 3, 948, 3, 948, 3, 948, 3, 948, 3, 948, 3, 948, 3, 948, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 949, 3, 950, 3, 950, 3, 950, 3, 950, 3, 950, 3, 950, 3, 950, 3, 950, 3, 950, 3, 950, 3, 950, 3, 950, 3, 950, 3, 950, 3, 950, 3, 950, 3, 951, 3, 951, 3, 951, 3, 951, 3, 951, 3, 951, 3, 951, 3, 951, 3, 951, 3, 951, 3, 952, 3, 952, 3, 952, 3, 952, 3, 952, 3, 952, 3, 952, 3, 952, 3, 952, 3, 952, 3, 952, 3, 952, 3, 952, 3, 952, 3, 952, 3, 952, 3, 953, 3, 953, 3, 953, 3, 953, 3, 953, 3, 953, 3, 953, 3, 953, 3, 953, 3, 953, 3, 953, 3, 953, 3, 953, 3, 953, 3, 953, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 954, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 955, 3, 956, 3, 956, 3, 956, 3, 956, 3, 956, 3, 956, 3, 956, 3, 956, 3, 957, 3, 957, 3, 957, 3, 957, 3, 957, 3, 957, 3, 957, 3, 957, 3, 957, 3, 957, 3, 957, 3, 957, 3, 957, 3, 957, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 958, 3, 959, 3, 959, 3, 959, 3, 959, 3, 959, 3, 959, 3, 959, 3, 959, 3, 959, 3, 959, 3, 959, 3, 960, 3, 960, 3, 960, 3, 960, 3, 960, 3, 960, 3, 960, 3, 960, 3, 960, 3, 961, 3, 961, 3, 961, 3, 961, 3, 961, 3, 961, 3, 961, 3, 961, 3, 961, 3, 961, 3, 962, 3, 962, 3, 962, 3, 962, 3, 962, 3, 963, 3, 963, 3, 963, 3, 963, 3, 963, 3, 964, 3, 964, 3, 964, 3, 964, 3, 964, 3, 964, 3, 964, 3, 964, 3, 965, 3, 965, 3, 965, 3, 965, 3, 965, 3, 965, 3, 965, 3, 965, 3, 965, 3, 965, 3, 965, 3, 965, 3, 965, 3, 965, 3, 965, 3, 965, 3, 966, 3, 966, 3, 966, 3, 966, 3, 966, 3, 966, 3, 966, 3, 966, 3, 967, 3, 967, 3, 967, 3, 967, 3, 967, 3, 967, 3, 967, 3, 967, 3, 967, 3, 967, 3, 967, 3, 967, 3, 968, 3, 968, 3, 968, 3, 968, 3, 969, 3, 969, 3, 969, 3, 969, 3, 969, 3, 969, 3, 969, 3, 969, 3, 969, 3, 970, 3, 970, 3, 970, 3, 970, 3, 970, 3, 970, 3, 970, 3, 970, 3, 970, 3, 970, 3, 970, 3, 970, 3, 970, 3, 971, 3, 971, 3, 971, 3, 971, 3, 971, 3, 971, 3, 971, 3, 971, 3, 971, 3, 971, 3, 971, 3, 971, 3, 971, 3, 971, 3, 972, 3, 972, 3, 972, 3, 972, 3, 972, 3, 972, 3, 972, 3, 972, 3, 972, 3, 972, 3, 972, 3, 972, 3, 973, 3, 973, 3, 973, 3, 973, 3, 973, 3, 973, 3, 973, 3, 973, 3, 973, 3, 973, 3, 973, 3, 973, 3, 974, 3, 974, 3, 974, 3, 974, 3, 974, 3, 974, 3, 974, 3, 974, 3, 975, 3, 975, 3, 975, 3, 975, 3, 975, 3, 975, 3, 975, 3, 975, 3, 975, 3, 975, 3, 976, 3, 976, 3, 976, 3, 976, 3, 976, 3, 976, 3, 976, 3, 976, 3, 977, 3, 977, 3, 977, 3, 977, 3, 977, 3, 977, 3, 977, 3, 977, 3, 977, 3, 977, 3, 977, 3, 978, 3, 978, 3, 978, 3, 978, 3, 978, 3, 978, 3, 979, 3, 979, 3, 979, 3, 979, 3, 979, 3, 979, 3, 979, 3, 979, 3, 979, 3, 979, 3, 979, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 980, 3, 981, 3, 981, 3, 981, 3, 981, 3, 981, 3, 981, 3, 982, 3, 982, 3, 982, 3, 982, 3, 982, 3, 982, 3, 982, 3, 982, 3, 982, 3, 982, 3, 982, 3, 982, 3, 982, 3, 982, 3, 982, 3, 983, 3, 983, 3, 983, 3, 983, 3, 983, 3, 983, 3, 983, 3, 983, 3, 983, 3, 983, 3, 984, 3, 984, 3, 984, 3, 984, 3, 984, 3, 984, 3, 985, 3, 985, 3, 985, 3, 985, 3, 985, 3, 986, 3, 986, 3, 986, 3, 986, 3, 986, 3, 986, 3, 986, 3, 986, 3, 986, 3, 986, 3, 986, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 987, 3, 988, 3, 988, 3, 988, 3, 988, 3, 988, 3, 988, 3, 988, 3, 988, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 989, 3, 990, 3, 990, 3, 990, 3, 990, 3, 990, 3, 990, 3, 990, 3, 990, 3, 991, 3, 991, 3, 991, 3, 991, 3, 991, 3, 991, 3, 991, 3, 991, 3, 991, 3, 991, 3, 991, 3, 992, 3, 992, 3, 992, 3, 992, 3, 992, 3, 992, 3, 992, 3, 992, 3, 992, 3, 992, 3, 992, 3, 992, 3, 992, 3, 992, 3, 993, 3, 993, 3, 993, 3, 993, 3, 993, 3, 993, 3, 993, 3, 994, 3, 994, 3, 994, 3, 994, 3, 994, 3, 994, 3, 994, 3, 994, 3, 994, 3, 995, 3, 995, 3, 996, 3, 996, 3, 997, 3, 997, 3, 997, 3, 998, 3, 998, 3, 998, 3, 999, 3, 999, 3, 999, 3, 1000, 3, 1000, 3, 1000, 3, 1001, 3, 1001, 3, 1001, 3, 1002, 3, 1002, 3, 1002, 3, 1003, 3, 1003, 3, 1003, 3, 1004, 3, 1004, 3, 1004, 3, 1005, 3, 1005, 3, 1005, 3, 1006, 3, 1006, 3, 1007, 3, 1007, 3, 1008, 3, 1008, 3, 1009, 3, 1009, 3, 1010, 3, 1010, 3, 1010, 3, 1011, 3, 1011, 3, 1012, 3, 1012, 3, 1012, 3, 1012, 3, 1013, 3, 1013, 3, 1013, 3, 1013, 3, 1014, 3, 1014, 3, 1015, 3, 1015, 3, 1016, 3, 1016, 3, 1017, 3, 1017, 3, 1018, 3, 1018, 3, 1019, 3, 1019, 3, 1020, 3, 1020, 3, 1021, 3, 1021, 3, 1022, 3, 1022, 3, 1023, 3, 1023, 3, 1024, 3, 1024, 3, 1025, 3, 1025, 3, 1026, 3, 1026, 3, 1027, 3, 1027, 3, 1028, 3, 1028, 3, 1029, 3, 1029, 3, 1030, 3, 1030, 3, 1031, 3, 1031, 3, 1032, 3, 1032, 3, 1033, 3, 1033, 3, 1034, 3, 1034, 3, 1035, 3, 1035, 3, 1035, 5, 1035, 11876, 10, 1035, 3, 1036, 3, 1036, 3, 1036, 3, 1036, 3, 1037, 6, 1037, 11883, 10, 1037, 13, 1037, 14, 1037, 11884, 3, 1037, 3, 1037, 3, 1038, 3, 1038, 3, 1038, 3, 1039, 3, 1039, 3, 1039, 5, 1039, 11895, 10, 1039, 3, 1040, 6, 1040, 11898, 10, 1040, 13, 1040, 14, 1040, 11899, 3, 1041, 3, 1041, 3, 1041, 3, 1041, 3, 1041, 6, 1041, 11907, 10, 1041, 13, 1041, 14, 1041, 11908, 3, 1041, 3, 1041, 3, 1041, 3, 1041, 3, 1041, 3, 1041, 6, 1041, 11917, 10, 1041, 13, 1041, 14, 1041, 11918, 5, 1041, 11921, 10, 1041, 3, 1042, 6, 1042, 11924, 10, 1042, 13, 1042, 14, 1042, 11925, 5, 1042, 11928, 10, 1042, 3, 1042, 3, 1042, 6, 1042, 11932, 10, 1042, 13, 1042, 14, 1042, 11933, 3, 1042, 6, 1042, 11937, 10, 1042, 13, 1042, 14, 1042, 11938, 3, 1042, 3, 1042, 3, 1042, 3, 1042, 6, 1042, 11945, 10, 1042, 13, 1042, 14, 1042, 11946, 5, 1042, 11949, 10, 1042, 3, 1042, 3, 1042, 6, 1042, 11953, 10, 1042, 13, 1042, 14, 1042, 11954, 3, 1042, 3, 1042, 3, 1042, 6, 1042, 11960, 10, 1042, 13, 1042, 14, 1042, 11961, 3, 1042, 3, 1042, 5, 1042, 11966, 10, 1042, 3, 1043, 3, 1043, 3, 1043, 3, 1044, 3, 1044, 3, 1045, 3, 1045, 3, 1045, 3, 1046, 3, 1046, 3, 1046, 3, 1047, 3, 1047, 3, 1048, 3, 1048, 6, 1048, 11983, 10, 1048, 13, 1048, 14, 1048, 11984, 3, 1048, 3, 1048, 3, 1049, 3, 1049, 3, 1049, 3, 1049, 5, 1049, 11993, 10, 1049, 3, 1049, 3, 1049, 3, 1049, 3, 1049, 3, 1049, 5, 1049, 12000, 10, 1049, 3, 1050, 3, 1050, 6, 1050, 12004, 10, 1050, 13, 1050, 14, 1050, 12005, 3, 1050, 3, 1050, 3, 1050, 5, 1050, 12011, 10, 1050, 3, 1051, 3, 1051, 3, 1051, 6, 1051, 12016, 10, 1051, 13, 1051, 14, 1051, 12017, 3, 1051, 5, 1051, 12021, 10, 1051, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 3, 1052, 5, 1052, 12064, 10, 1052, 3, 1053, 3, 1053, 5, 1053, 12068, 10, 1053, 3, 1053, 6, 1053, 12071, 10, 1053, 13, 1053, 14, 1053, 12072, 3, 1054, 7, 1054, 12076, 10, 1054, 12, 1054, 14, 1054, 12079, 11, 1054, 3, 1054, 6, 1054, 12082, 10, 1054, 13, 1054, 14, 1054, 12083, 3, 1054, 7, 1054, 12087, 10, 1054, 12, 1054, 14, 1054, 12090, 11, 1054, 3, 1054, 5, 1054, 12093, 10, 1054, 3, 1055, 3, 1055, 3, 1055, 3, 1055, 3, 1055, 3, 1055, 7, 1055, 12101, 10, 1055, 12, 1055, 14, 1055, 12104, 11, 1055, 3, 1055, 3, 1055, 5, 1055, 12108, 10, 1055, 3, 1056, 3, 1056, 3, 1056, 3, 1056, 3, 1056, 3, 1056, 7, 1056, 12116, 10, 1056, 12, 1056, 14, 1056, 12119, 11, 1056, 3, 1056, 3, 1056, 3, 1057, 3, 1057, 3, 1057, 3, 1057, 3, 1057, 3, 1057, 7, 1057, 12129, 10, 1057, 12, 1057, 14, 1057, 12132, 11, 1057, 3, 1057, 3, 1057, 3, 1058, 3, 1058, 3, 1059, 3, 1059, 3, 1060, 3, 1060, 3, 1060, 6, 1060, 12143, 10, 1060, 13, 1060, 14, 1060, 12144, 3, 1060, 3, 1060, 3, 1061, 3, 1061, 3, 1061, 3, 1061, 6, 2137, 2150, 12077, 12083, 2, 1062, 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, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 79, 157, 80, 159, 81, 161, 82, 163, 83, 165, 84, 167, 85, 169, 86, 171, 87, 173, 88, 175, 89, 177, 90, 179, 91, 181, 92, 183, 93, 185, 94, 187, 95, 189, 96, 191, 97, 193, 98, 195, 99, 197, 100, 199, 101, 201, 102, 203, 103, 205, 104, 207, 105, 209, 106, 211, 107, 213, 108, 215, 109, 217, 110, 219, 111, 221, 112, 223, 113, 225, 114, 227, 115, 229, 116, 231, 117, 233, 118, 235, 119, 237, 120, 239, 121, 241, 122, 243, 123, 245, 124, 247, 125, 249, 126, 251, 127, 253, 128, 255, 129, 257, 130, 259, 131, 261, 132, 263, 133, 265, 134, 267, 135, 269, 136, 271, 137, 273, 138, 275, 139, 277, 140, 279, 141, 281, 142, 283, 143, 285, 144, 287, 145, 289, 146, 291, 147, 293, 148, 295, 149, 297, 150, 299, 151, 301, 152, 303, 153, 305, 154, 307, 155, 309, 156, 311, 157, 313, 158, 315, 159, 317, 160, 319, 161, 321, 162, 323, 163, 325, 164, 327, 165, 329, 166, 331, 167, 333, 168, 335, 169, 337, 170, 339, 171, 341, 172, 343, 173, 345, 174, 347, 175, 349, 176, 351, 177, 353, 178, 355, 179, 357, 180, 359, 181, 361, 182, 363, 183, 365, 184, 367, 185, 369, 186, 371, 187, 373, 188, 375, 189, 377, 190, 379, 191, 381, 192, 383, 193, 385, 194, 387, 195, 389, 196, 391, 197, 393, 198, 395, 199, 397, 200, 399, 201, 401, 202, 403, 203, 405, 204, 407, 205, 409, 206, 411, 207, 413, 208, 415, 209, 417, 210, 419, 211, 421, 212, 423, 213, 425, 214, 427, 215, 429, 216, 431, 217, 433, 218, 435, 219, 437, 220, 439, 221, 441, 222, 443, 223, 445, 224, 447, 225, 449, 226, 451, 227, 453, 228, 455, 229, 457, 230, 459, 231, 461, 232, 463, 233, 465, 234, 467, 235, 469, 236, 471, 237, 473, 238, 475, 239, 477, 240, 479, 241, 481, 242, 483, 243, 485, 244, 487, 245, 489, 246, 491, 247, 493, 248, 495, 249, 497, 250, 499, 251, 501, 252, 503, 253, 505, 254, 507, 255, 509, 256, 511, 257, 513, 258, 515, 259, 517, 260, 519, 261, 521, 262, 523, 263, 525, 264, 527, 265, 529, 266, 531, 267, 533, 268, 535, 269, 537, 270, 539, 271, 541, 272, 543, 273, 545, 274, 547, 275, 549, 276, 551, 277, 553, 278, 555, 279, 557, 280, 559, 281, 561, 282, 563, 283, 565, 284, 567, 285, 569, 286, 571, 287, 573, 288, 575, 289, 577, 290, 579, 291, 581, 292, 583, 293, 585, 294, 587, 295, 589, 296, 591, 297, 593, 298, 595, 299, 597, 300, 599, 301, 601, 302, 603, 303, 605, 304, 607, 305, 609, 306, 611, 307, 613, 308, 615, 309, 617, 310, 619, 311, 621, 312, 623, 313, 625, 314, 627, 315, 629, 316, 631, 317, 633, 318, 635, 319, 637, 320, 639, 321, 641, 322, 643, 323, 645, 324, 647, 325, 649, 326, 651, 327, 653, 328, 655, 329, 657, 330, 659, 331, 661, 332, 663, 333, 665, 334, 667, 335, 669, 336, 671, 337, 673, 338, 675, 339, 677, 340, 679, 341, 681, 342, 683, 343, 685, 344, 687, 345, 689, 346, 691, 347, 693, 348, 695, 349, 697, 350, 699, 351, 701, 352, 703, 353, 705, 354, 707, 355, 709, 356, 711, 357, 713, 358, 715, 359, 717, 360, 719, 361, 721, 362, 723, 363, 725, 364, 727, 365, 729, 366, 731, 367, 733, 368, 735, 369, 737, 370, 739, 371, 741, 372, 743, 373, 745, 374, 747, 375, 749, 376, 751, 377, 753, 378, 755, 379, 757, 380, 759, 381, 761, 382, 763, 383, 765, 384, 767, 385, 769, 386, 771, 387, 773, 388, 775, 389, 777, 390, 779, 391, 781, 392, 783, 393, 785, 394, 787, 395, 789, 396, 791, 397, 793, 398, 795, 399, 797, 400, 799, 401, 801, 402, 803, 403, 805, 404, 807, 405, 809, 406, 811, 407, 813, 408, 815, 409, 817, 410, 819, 411, 821, 412, 823, 413, 825, 414, 827, 415, 829, 416, 831, 417, 833, 418, 835, 419, 837, 420, 839, 421, 841, 422, 843, 423, 845, 424, 847, 425, 849, 426, 851, 427, 853, 428, 855, 429, 857, 430, 859, 431, 861, 432, 863, 433, 865, 434, 867, 435, 869, 436, 871, 437, 873, 438, 875, 439, 877, 440, 879, 441, 881, 442, 883, 443, 885, 444, 887, 445, 889, 446, 891, 447, 893, 448, 895, 449, 897, 450, 899, 451, 901, 452, 903, 453, 905, 454, 907, 455, 909, 456, 911, 457, 913, 458, 915, 459, 917, 460, 919, 461, 921, 462, 923, 463, 925, 464, 927, 465, 929, 466, 931, 467, 933, 468, 935, 469, 937, 470, 939, 471, 941, 472, 943, 473, 945, 474, 947, 475, 949, 476, 951, 477, 953, 478, 955, 479, 957, 480, 959, 481, 961, 482, 963, 483, 965, 484, 967, 485, 969, 486, 971, 487, 973, 488, 975, 489, 977, 490, 979, 491, 981, 492, 983, 493, 985, 494, 987, 495, 989, 496, 991, 497, 993, 498, 995, 499, 997, 500, 999, 501, 1001, 502, 1003, 503, 1005, 504, 1007, 505, 1009, 506, 1011, 507, 1013, 508, 1015, 509, 1017, 510, 1019, 511, 1021, 512, 1023, 513, 1025, 514, 1027, 515, 1029, 516, 1031, 517, 1033, 518, 1035, 519, 1037, 520, 1039, 521, 1041, 522, 1043, 523, 1045, 524, 1047, 525, 1049, 526, 1051, 527, 1053, 528, 1055, 529, 1057, 530, 1059, 531, 1061, 532, 1063, 533, 1065, 534, 1067, 535, 1069, 536, 1071, 537, 1073, 538, 1075, 539, 1077, 540, 1079, 541, 1081, 542, 1083, 543, 1085, 544, 1087, 545, 1089, 546, 1091, 547, 1093, 548, 1095, 549, 1097, 550, 1099, 551, 1101, 552, 1103, 553, 1105, 554, 1107, 555, 1109, 556, 1111, 557, 1113, 558, 1115, 559, 1117, 560, 1119, 561, 1121, 562, 1123, 563, 1125, 564, 1127, 565, 1129, 566, 1131, 567, 1133, 568, 1135, 569, 1137, 570, 1139, 571, 1141, 572, 1143, 573, 1145, 574, 1147, 575, 1149, 576, 1151, 577, 1153, 578, 1155, 579, 1157, 580, 1159, 581, 1161, 582, 1163, 583, 1165, 584, 1167, 585, 1169, 586, 1171, 587, 1173, 588, 1175, 589, 1177, 590, 1179, 591, 1181, 592, 1183, 593, 1185, 594, 1187, 595, 1189, 596, 1191, 597, 1193, 598, 1195, 599, 1197, 600, 1199, 601, 1201, 602, 1203, 603, 1205, 604, 1207, 605, 1209, 606, 1211, 607, 1213, 608, 1215, 609, 1217, 610, 1219, 611, 1221, 612, 1223, 613, 1225, 614, 1227, 615, 1229, 616, 1231, 617, 1233, 618, 1235, 619, 1237, 620, 1239, 621, 1241, 622, 1243, 623, 1245, 624, 1247, 625, 1249, 626, 1251, 627, 1253, 628, 1255, 629, 1257, 630, 1259, 631, 1261, 632, 1263, 633, 1265, 634, 1267, 635, 1269, 636, 1271, 637, 1273, 638, 1275, 639, 1277, 640, 1279, 641, 1281, 642, 1283, 643, 1285, 644, 1287, 645, 1289, 646, 1291, 647, 1293, 648, 1295, 649, 1297, 650, 1299, 651, 1301, 652, 1303, 653, 1305, 654, 1307, 655, 1309, 656, 1311, 657, 1313, 658, 1315, 659, 1317, 660, 1319, 661, 1321, 662, 1323, 663, 1325, 664, 1327, 665, 1329, 666, 1331, 667, 1333, 668, 1335, 669, 1337, 670, 1339, 671, 1341, 672, 1343, 673, 1345, 674, 1347, 675, 1349, 676, 1351, 677, 1353, 678, 1355, 679, 1357, 680, 1359, 681, 1361, 682, 1363, 683, 1365, 684, 1367, 685, 1369, 686, 1371, 687, 1373, 688, 1375, 689, 1377, 690, 1379, 691, 1381, 692, 1383, 693, 1385, 694, 1387, 695, 1389, 696, 1391, 697, 1393, 698, 1395, 699, 1397, 700, 1399, 701, 1401, 702, 1403, 703, 1405, 704, 1407, 705, 1409, 706, 1411, 707, 1413, 708, 1415, 709, 1417, 710, 1419, 711, 1421, 712, 1423, 713, 1425, 714, 1427, 715, 1429, 716, 1431, 717, 1433, 718, 1435, 719, 1437, 720, 1439, 721, 1441, 722, 1443, 723, 1445, 724, 1447, 725, 1449, 726, 1451, 727, 1453, 728, 1455, 729, 1457, 730, 1459, 731, 1461, 732, 1463, 733, 1465, 734, 1467, 735, 1469, 736, 1471, 737, 1473, 738, 1475, 739, 1477, 740, 1479, 741, 1481, 742, 1483, 743, 1485, 744, 1487, 745, 1489, 746, 1491, 747, 1493, 748, 1495, 749, 1497, 750, 1499, 751, 1501, 752, 1503, 753, 1505, 754, 1507, 755, 1509, 756, 1511, 757, 1513, 758, 1515, 759, 1517, 760, 1519, 761, 1521, 762, 1523, 763, 1525, 764, 1527, 765, 1529, 766, 1531, 767, 1533, 768, 1535, 769, 1537, 770, 1539, 771, 1541, 772, 1543, 773, 1545, 774, 1547, 775, 1549, 776, 1551, 777, 1553, 778, 1555, 779, 1557, 780, 1559, 781, 1561, 782, 1563, 783, 1565, 784, 1567, 785, 1569, 786, 1571, 787, 1573, 788, 1575, 789, 1577, 790, 1579, 791, 1581, 792, 1583, 793, 1585, 794, 1587, 795, 1589, 796, 1591, 797, 1593, 798, 1595, 799, 1597, 800, 1599, 801, 1601, 802, 1603, 803, 1605, 804, 1607, 805, 1609, 806, 1611, 807, 1613, 808, 1615, 809, 1617, 810, 1619, 811, 1621, 812, 1623, 813, 1625, 814, 1627, 815, 1629, 816, 1631, 817, 1633, 818, 1635, 819, 1637, 820, 1639, 821, 1641, 822, 1643, 823, 1645, 824, 1647, 825, 1649, 826, 1651, 827, 1653, 828, 1655, 829, 1657, 830, 1659, 831, 1661, 832, 1663, 833, 1665, 834, 1667, 835, 1669, 836, 1671, 837, 1673, 838, 1675, 839, 1677, 840, 1679, 841, 1681, 842, 1683, 843, 1685, 844, 1687, 845, 1689, 846, 1691, 847, 1693, 848, 1695, 849, 1697, 850, 1699, 851, 1701, 852, 1703, 853, 1705, 854, 1707, 855, 1709, 856, 1711, 857, 1713, 858, 1715, 859, 1717, 860, 1719, 861, 1721, 862, 1723, 863, 1725, 864, 1727, 865, 1729, 866, 1731, 867, 1733, 868, 1735, 869, 1737, 870, 1739, 871, 1741, 872, 1743, 873, 1745, 874, 1747, 875, 1749, 876, 1751, 877, 1753, 878, 1755, 879, 1757, 880, 1759, 881, 1761, 882, 1763, 883, 1765, 884, 1767, 885, 1769, 886, 1771, 887, 1773, 888, 1775, 889, 1777, 890, 1779, 891, 1781, 892, 1783, 893, 1785, 894, 1787, 895, 1789, 896, 1791, 897, 1793, 898, 1795, 899, 1797, 900, 1799, 901, 1801, 902, 1803, 903, 1805, 904, 1807, 905, 1809, 906, 1811, 907, 1813, 908, 1815, 909, 1817, 910, 1819, 911, 1821, 912, 1823, 913, 1825, 914, 1827, 915, 1829, 916, 1831, 917, 1833, 918, 1835, 919, 1837, 920, 1839, 921, 1841, 922, 1843, 923, 1845, 924, 1847, 925, 1849, 926, 1851, 927, 1853, 928, 1855, 929, 1857, 930, 1859, 931, 1861, 932, 1863, 933, 1865, 934, 1867, 935, 1869, 936, 1871, 937, 1873, 938, 1875, 939, 1877, 940, 1879, 941, 1881, 942, 1883, 943, 1885, 944, 1887, 945, 1889, 946, 1891, 947, 1893, 948, 1895, 949, 1897, 950, 1899, 951, 1901, 952, 1903, 953, 1905, 954, 1907, 955, 1909, 956, 1911, 957, 1913, 958, 1915, 959, 1917, 960, 1919, 961, 1921, 962, 1923, 963, 1925, 964, 1927, 965, 1929, 966, 1931, 967, 1933, 968, 1935, 969, 1937, 970, 1939, 971, 1941, 972, 1943, 973, 1945, 974, 1947, 975, 1949, 976, 1951, 977, 1953, 978, 1955, 979, 1957, 980, 1959, 981, 1961, 982, 1963, 983, 1965, 984, 1967, 985, 1969, 986, 1971, 987, 1973, 988, 1975, 989, 1977, 990, 1979, 991, 1981, 992, 1983, 993, 1985, 994, 1987, 995, 1989, 996, 1991, 997, 1993, 998, 1995, 999, 1997, 1000, 1999, 1001, 2001, 1002, 2003, 1003, 2005, 1004, 2007, 1005, 2009, 1006, 2011, 1007, 2013, 1008, 2015, 1009, 2017, 1010, 2019, 1011, 2021, 1012, 2023, 1013, 2025, 1014, 2027, 1015, 2029, 1016, 2031, 1017, 2033, 1018, 2035, 1019, 2037, 1020, 2039, 1021, 2041, 1022, 2043, 1023, 2045, 1024, 2047, 1025, 2049, 1026, 2051, 1027, 2053, 1028, 2055, 1029, 2057, 1030, 2059, 1031, 2061, 1032, 2063, 1033, 2065, 1034, 2067, 1035, 2069, 2, 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, 2, 2105, 2, 2107, 2, 2109, 2, 2111, 2, 2113, 2, 2115, 2, 2117, 2, 2119, 2, 2121, 1052, 3, 2, 16, 5, 2, 11, 12, 15, 15, 34, 34, 4, 2, 12, 12, 15, 15, 6, 2, 73, 73, 77, 77, 79, 79, 86, 86, 3, 2, 98, 98, 7, 2, 38, 38, 48, 48, 50, 59, 67, 92, 97, 97, 4, 2, 45, 45, 47, 47, 6, 2, 38, 38, 50, 59, 67, 92, 97, 97, 5, 2, 38, 38, 67, 92, 97, 97, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 4, 2, 94, 94, 98, 98, 4, 2, 50, 59, 67, 72, 3, 2, 50, 59, 3, 2, 50, 51, 2, 12243, 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, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 215, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 265, 3, 2, 2, 2, 2, 267, 3, 2, 2, 2, 2, 269, 3, 2, 2, 2, 2, 271, 3, 2, 2, 2, 2, 273, 3, 2, 2, 2, 2, 275, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 2, 285, 3, 2, 2, 2, 2, 287, 3, 2, 2, 2, 2, 289, 3, 2, 2, 2, 2, 291, 3, 2, 2, 2, 2, 293, 3, 2, 2, 2, 2, 295, 3, 2, 2, 2, 2, 297, 3, 2, 2, 2, 2, 299, 3, 2, 2, 2, 2, 301, 3, 2, 2, 2, 2, 303, 3, 2, 2, 2, 2, 305, 3, 2, 2, 2, 2, 307, 3, 2, 2, 2, 2, 309, 3, 2, 2, 2, 2, 311, 3, 2, 2, 2, 2, 313, 3, 2, 2, 2, 2, 315, 3, 2, 2, 2, 2, 317, 3, 2, 2, 2, 2, 319, 3, 2, 2, 2, 2, 321, 3, 2, 2, 2, 2, 323, 3, 2, 2, 2, 2, 325, 3, 2, 2, 2, 2, 327, 3, 2, 2, 2, 2, 329, 3, 2, 2, 2, 2, 331, 3, 2, 2, 2, 2, 333, 3, 2, 2, 2, 2, 335, 3, 2, 2, 2, 2, 337, 3, 2, 2, 2, 2, 339, 3, 2, 2, 2, 2, 341, 3, 2, 2, 2, 2, 343, 3, 2, 2, 2, 2, 345, 3, 2, 2, 2, 2, 347, 3, 2, 2, 2, 2, 349, 3, 2, 2, 2, 2, 351, 3, 2, 2, 2, 2, 353, 3, 2, 2, 2, 2, 355, 3, 2, 2, 2, 2, 357, 3, 2, 2, 2, 2, 359, 3, 2, 2, 2, 2, 361, 3, 2, 2, 2, 2, 363, 3, 2, 2, 2, 2, 365, 3, 2, 2, 2, 2, 367, 3, 2, 2, 2, 2, 369, 3, 2, 2, 2, 2, 371, 3, 2, 2, 2, 2, 373, 3, 2, 2, 2, 2, 375, 3, 2, 2, 2, 2, 377, 3, 2, 2, 2, 2, 379, 3, 2, 2, 2, 2, 381, 3, 2, 2, 2, 2, 383, 3, 2, 2, 2, 2, 385, 3, 2, 2, 2, 2, 387, 3, 2, 2, 2, 2, 389, 3, 2, 2, 2, 2, 391, 3, 2, 2, 2, 2, 393, 3, 2, 2, 2, 2, 395, 3, 2, 2, 2, 2, 397, 3, 2, 2, 2, 2, 399, 3, 2, 2, 2, 2, 401, 3, 2, 2, 2, 2, 403, 3, 2, 2, 2, 2, 405, 3, 2, 2, 2, 2, 407, 3, 2, 2, 2, 2, 409, 3, 2, 2, 2, 2, 411, 3, 2, 2, 2, 2, 413, 3, 2, 2, 2, 2, 415, 3, 2, 2, 2, 2, 417, 3, 2, 2, 2, 2, 419, 3, 2, 2, 2, 2, 421, 3, 2, 2, 2, 2, 423, 3, 2, 2, 2, 2, 425, 3, 2, 2, 2, 2, 427, 3, 2, 2, 2, 2, 429, 3, 2, 2, 2, 2, 431, 3, 2, 2, 2, 2, 433, 3, 2, 2, 2, 2, 435, 3, 2, 2, 2, 2, 437, 3, 2, 2, 2, 2, 439, 3, 2, 2, 2, 2, 441, 3, 2, 2, 2, 2, 443, 3, 2, 2, 2, 2, 445, 3, 2, 2, 2, 2, 447, 3, 2, 2, 2, 2, 449, 3, 2, 2, 2, 2, 451, 3, 2, 2, 2, 2, 453, 3, 2, 2, 2, 2, 455, 3, 2, 2, 2, 2, 457, 3, 2, 2, 2, 2, 459, 3, 2, 2, 2, 2, 461, 3, 2, 2, 2, 2, 463, 3, 2, 2, 2, 2, 465, 3, 2, 2, 2, 2, 467, 3, 2, 2, 2, 2, 469, 3, 2, 2, 2, 2, 471, 3, 2, 2, 2, 2, 473, 3, 2, 2, 2, 2, 475, 3, 2, 2, 2, 2, 477, 3, 2, 2, 2, 2, 479, 3, 2, 2, 2, 2, 481, 3, 2, 2, 2, 2, 483, 3, 2, 2, 2, 2, 485, 3, 2, 2, 2, 2, 487, 3, 2, 2, 2, 2, 489, 3, 2, 2, 2, 2, 491, 3, 2, 2, 2, 2, 493, 3, 2, 2, 2, 2, 495, 3, 2, 2, 2, 2, 497, 3, 2, 2, 2, 2, 499, 3, 2, 2, 2, 2, 501, 3, 2, 2, 2, 2, 503, 3, 2, 2, 2, 2, 505, 3, 2, 2, 2, 2, 507, 3, 2, 2, 2, 2, 509, 3, 2, 2, 2, 2, 511, 3, 2, 2, 2, 2, 513, 3, 2, 2, 2, 2, 515, 3, 2, 2, 2, 2, 517, 3, 2, 2, 2, 2, 519, 3, 2, 2, 2, 2, 521, 3, 2, 2, 2, 2, 523, 3, 2, 2, 2, 2, 525, 3, 2, 2, 2, 2, 527, 3, 2, 2, 2, 2, 529, 3, 2, 2, 2, 2, 531, 3, 2, 2, 2, 2, 533, 3, 2, 2, 2, 2, 535, 3, 2, 2, 2, 2, 537, 3, 2, 2, 2, 2, 539, 3, 2, 2, 2, 2, 541, 3, 2, 2, 2, 2, 543, 3, 2, 2, 2, 2, 545, 3, 2, 2, 2, 2, 547, 3, 2, 2, 2, 2, 549, 3, 2, 2, 2, 2, 551, 3, 2, 2, 2, 2, 553, 3, 2, 2, 2, 2, 555, 3, 2, 2, 2, 2, 557, 3, 2, 2, 2, 2, 559, 3, 2, 2, 2, 2, 561, 3, 2, 2, 2, 2, 563, 3, 2, 2, 2, 2, 565, 3, 2, 2, 2, 2, 567, 3, 2, 2, 2, 2, 569, 3, 2, 2, 2, 2, 571, 3, 2, 2, 2, 2, 573, 3, 2, 2, 2, 2, 575, 3, 2, 2, 2, 2, 577, 3, 2, 2, 2, 2, 579, 3, 2, 2, 2, 2, 581, 3, 2, 2, 2, 2, 583, 3, 2, 2, 2, 2, 585, 3, 2, 2, 2, 2, 587, 3, 2, 2, 2, 2, 589, 3, 2, 2, 2, 2, 591, 3, 2, 2, 2, 2, 593, 3, 2, 2, 2, 2, 595, 3, 2, 2, 2, 2, 597, 3, 2, 2, 2, 2, 599, 3, 2, 2, 2, 2, 601, 3, 2, 2, 2, 2, 603, 3, 2, 2, 2, 2, 605, 3, 2, 2, 2, 2, 607, 3, 2, 2, 2, 2, 609, 3, 2, 2, 2, 2, 611, 3, 2, 2, 2, 2, 613, 3, 2, 2, 2, 2, 615, 3, 2, 2, 2, 2, 617, 3, 2, 2, 2, 2, 619, 3, 2, 2, 2, 2, 621, 3, 2, 2, 2, 2, 623, 3, 2, 2, 2, 2, 625, 3, 2, 2, 2, 2, 627, 3, 2, 2, 2, 2, 629, 3, 2, 2, 2, 2, 631, 3, 2, 2, 2, 2, 633, 3, 2, 2, 2, 2, 635, 3, 2, 2, 2, 2, 637, 3, 2, 2, 2, 2, 639, 3, 2, 2, 2, 2, 641, 3, 2, 2, 2, 2, 643, 3, 2, 2, 2, 2, 645, 3, 2, 2, 2, 2, 647, 3, 2, 2, 2, 2, 649, 3, 2, 2, 2, 2, 651, 3, 2, 2, 2, 2, 653, 3, 2, 2, 2, 2, 655, 3, 2, 2, 2, 2, 657, 3, 2, 2, 2, 2, 659, 3, 2, 2, 2, 2, 661, 3, 2, 2, 2, 2, 663, 3, 2, 2, 2, 2, 665, 3, 2, 2, 2, 2, 667, 3, 2, 2, 2, 2, 669, 3, 2, 2, 2, 2, 671, 3, 2, 2, 2, 2, 673, 3, 2, 2, 2, 2, 675, 3, 2, 2, 2, 2, 677, 3, 2, 2, 2, 2, 679, 3, 2, 2, 2, 2, 681, 3, 2, 2, 2, 2, 683, 3, 2, 2, 2, 2, 685, 3, 2, 2, 2, 2, 687, 3, 2, 2, 2, 2, 689, 3, 2, 2, 2, 2, 691, 3, 2, 2, 2, 2, 693, 3, 2, 2, 2, 2, 695, 3, 2, 2, 2, 2, 697, 3, 2, 2, 2, 2, 699, 3, 2, 2, 2, 2, 701, 3, 2, 2, 2, 2, 703, 3, 2, 2, 2, 2, 705, 3, 2, 2, 2, 2, 707, 3, 2, 2, 2, 2, 709, 3, 2, 2, 2, 2, 711, 3, 2, 2, 2, 2, 713, 3, 2, 2, 2, 2, 715, 3, 2, 2, 2, 2, 717, 3, 2, 2, 2, 2, 719, 3, 2, 2, 2, 2, 721, 3, 2, 2, 2, 2, 723, 3, 2, 2, 2, 2, 725, 3, 2, 2, 2, 2, 727, 3, 2, 2, 2, 2, 729, 3, 2, 2, 2, 2, 731, 3, 2, 2, 2, 2, 733, 3, 2, 2, 2, 2, 735, 3, 2, 2, 2, 2, 737, 3, 2, 2, 2, 2, 739, 3, 2, 2, 2, 2, 741, 3, 2, 2, 2, 2, 743, 3, 2, 2, 2, 2, 745, 3, 2, 2, 2, 2, 747, 3, 2, 2, 2, 2, 749, 3, 2, 2, 2, 2, 751, 3, 2, 2, 2, 2, 753, 3, 2, 2, 2, 2, 755, 3, 2, 2, 2, 2, 757, 3, 2, 2, 2, 2, 759, 3, 2, 2, 2, 2, 761, 3, 2, 2, 2, 2, 763, 3, 2, 2, 2, 2, 765, 3, 2, 2, 2, 2, 767, 3, 2, 2, 2, 2, 769, 3, 2, 2, 2, 2, 771, 3, 2, 2, 2, 2, 773, 3, 2, 2, 2, 2, 775, 3, 2, 2, 2, 2, 777, 3, 2, 2, 2, 2, 779, 3, 2, 2, 2, 2, 781, 3, 2, 2, 2, 2, 783, 3, 2, 2, 2, 2, 785, 3, 2, 2, 2, 2, 787, 3, 2, 2, 2, 2, 789, 3, 2, 2, 2, 2, 791, 3, 2, 2, 2, 2, 793, 3, 2, 2, 2, 2, 795, 3, 2, 2, 2, 2, 797, 3, 2, 2, 2, 2, 799, 3, 2, 2, 2, 2, 801, 3, 2, 2, 2, 2, 803, 3, 2, 2, 2, 2, 805, 3, 2, 2, 2, 2, 807, 3, 2, 2, 2, 2, 809, 3, 2, 2, 2, 2, 811, 3, 2, 2, 2, 2, 813, 3, 2, 2, 2, 2, 815, 3, 2, 2, 2, 2, 817, 3, 2, 2, 2, 2, 819, 3, 2, 2, 2, 2, 821, 3, 2, 2, 2, 2, 823, 3, 2, 2, 2, 2, 825, 3, 2, 2, 2, 2, 827, 3, 2, 2, 2, 2, 829, 3, 2, 2, 2, 2, 831, 3, 2, 2, 2, 2, 833, 3, 2, 2, 2, 2, 835, 3, 2, 2, 2, 2, 837, 3, 2, 2, 2, 2, 839, 3, 2, 2, 2, 2, 841, 3, 2, 2, 2, 2, 843, 3, 2, 2, 2, 2, 845, 3, 2, 2, 2, 2, 847, 3, 2, 2, 2, 2, 849, 3, 2, 2, 2, 2, 851, 3, 2, 2, 2, 2, 853, 3, 2, 2, 2, 2, 855, 3, 2, 2, 2, 2, 857, 3, 2, 2, 2, 2, 859, 3, 2, 2, 2, 2, 861, 3, 2, 2, 2, 2, 863, 3, 2, 2, 2, 2, 865, 3, 2, 2, 2, 2, 867, 3, 2, 2, 2, 2, 869, 3, 2, 2, 2, 2, 871, 3, 2, 2, 2, 2, 873, 3, 2, 2, 2, 2, 875, 3, 2, 2, 2, 2, 877, 3, 2, 2, 2, 2, 879, 3, 2, 2, 2, 2, 881, 3, 2, 2, 2, 2, 883, 3, 2, 2, 2, 2, 885, 3, 2, 2, 2, 2, 887, 3, 2, 2, 2, 2, 889, 3, 2, 2, 2, 2, 891, 3, 2, 2, 2, 2, 893, 3, 2, 2, 2, 2, 895, 3, 2, 2, 2, 2, 897, 3, 2, 2, 2, 2, 899, 3, 2, 2, 2, 2, 901, 3, 2, 2, 2, 2, 903, 3, 2, 2, 2, 2, 905, 3, 2, 2, 2, 2, 907, 3, 2, 2, 2, 2, 909, 3, 2, 2, 2, 2, 911, 3, 2, 2, 2, 2, 913, 3, 2, 2, 2, 2, 915, 3, 2, 2, 2, 2, 917, 3, 2, 2, 2, 2, 919, 3, 2, 2, 2, 2, 921, 3, 2, 2, 2, 2, 923, 3, 2, 2, 2, 2, 925, 3, 2, 2, 2, 2, 927, 3, 2, 2, 2, 2, 929, 3, 2, 2, 2, 2, 931, 3, 2, 2, 2, 2, 933, 3, 2, 2, 2, 2, 935, 3, 2, 2, 2, 2, 937, 3, 2, 2, 2, 2, 939, 3, 2, 2, 2, 2, 941, 3, 2, 2, 2, 2, 943, 3, 2, 2, 2, 2, 945, 3, 2, 2, 2, 2, 947, 3, 2, 2, 2, 2, 949, 3, 2, 2, 2, 2, 951, 3, 2, 2, 2, 2, 953, 3, 2, 2, 2, 2, 955, 3, 2, 2, 2, 2, 957, 3, 2, 2, 2, 2, 959, 3, 2, 2, 2, 2, 961, 3, 2, 2, 2, 2, 963, 3, 2, 2, 2, 2, 965, 3, 2, 2, 2, 2, 967, 3, 2, 2, 2, 2, 969, 3, 2, 2, 2, 2, 971, 3, 2, 2, 2, 2, 973, 3, 2, 2, 2, 2, 975, 3, 2, 2, 2, 2, 977, 3, 2, 2, 2, 2, 979, 3, 2, 2, 2, 2, 981, 3, 2, 2, 2, 2, 983, 3, 2, 2, 2, 2, 985, 3, 2, 2, 2, 2, 987, 3, 2, 2, 2, 2, 989, 3, 2, 2, 2, 2, 991, 3, 2, 2, 2, 2, 993, 3, 2, 2, 2, 2, 995, 3, 2, 2, 2, 2, 997, 3, 2, 2, 2, 2, 999, 3, 2, 2, 2, 2, 1001, 3, 2, 2, 2, 2, 1003, 3, 2, 2, 2, 2, 1005, 3, 2, 2, 2, 2, 1007, 3, 2, 2, 2, 2, 1009, 3, 2, 2, 2, 2, 1011, 3, 2, 2, 2, 2, 1013, 3, 2, 2, 2, 2, 1015, 3, 2, 2, 2, 2, 1017, 3, 2, 2, 2, 2, 1019, 3, 2, 2, 2, 2, 1021, 3, 2, 2, 2, 2, 1023, 3, 2, 2, 2, 2, 1025, 3, 2, 2, 2, 2, 1027, 3, 2, 2, 2, 2, 1029, 3, 2, 2, 2, 2, 1031, 3, 2, 2, 2, 2, 1033, 3, 2, 2, 2, 2, 1035, 3, 2, 2, 2, 2, 1037, 3, 2, 2, 2, 2, 1039, 3, 2, 2, 2, 2, 1041, 3, 2, 2, 2, 2, 1043, 3, 2, 2, 2, 2, 1045, 3, 2, 2, 2, 2, 1047, 3, 2, 2, 2, 2, 1049, 3, 2, 2, 2, 2, 1051, 3, 2, 2, 2, 2, 1053, 3, 2, 2, 2, 2, 1055, 3, 2, 2, 2, 2, 1057, 3, 2, 2, 2, 2, 1059, 3, 2, 2, 2, 2, 1061, 3, 2, 2, 2, 2, 1063, 3, 2, 2, 2, 2, 1065, 3, 2, 2, 2, 2, 1067, 3, 2, 2, 2, 2, 1069, 3, 2, 2, 2, 2, 1071, 3, 2, 2, 2, 2, 1073, 3, 2, 2, 2, 2, 1075, 3, 2, 2, 2, 2, 1077, 3, 2, 2, 2, 2, 1079, 3, 2, 2, 2, 2, 1081, 3, 2, 2, 2, 2, 1083, 3, 2, 2, 2, 2, 1085, 3, 2, 2, 2, 2, 1087, 3, 2, 2, 2, 2, 1089, 3, 2, 2, 2, 2, 1091, 3, 2, 2, 2, 2, 1093, 3, 2, 2, 2, 2, 1095, 3, 2, 2, 2, 2, 1097, 3, 2, 2, 2, 2, 1099, 3, 2, 2, 2, 2, 1101, 3, 2, 2, 2, 2, 1103, 3, 2, 2, 2, 2, 1105, 3, 2, 2, 2, 2, 1107, 3, 2, 2, 2, 2, 1109, 3, 2, 2, 2, 2, 1111, 3, 2, 2, 2, 2, 1113, 3, 2, 2, 2, 2, 1115, 3, 2, 2, 2, 2, 1117, 3, 2, 2, 2, 2, 1119, 3, 2, 2, 2, 2, 1121, 3, 2, 2, 2, 2, 1123, 3, 2, 2, 2, 2, 1125, 3, 2, 2, 2, 2, 1127, 3, 2, 2, 2, 2, 1129, 3, 2, 2, 2, 2, 1131, 3, 2, 2, 2, 2, 1133, 3, 2, 2, 2, 2, 1135, 3, 2, 2, 2, 2, 1137, 3, 2, 2, 2, 2, 1139, 3, 2, 2, 2, 2, 1141, 3, 2, 2, 2, 2, 1143, 3, 2, 2, 2, 2, 1145, 3, 2, 2, 2, 2, 1147, 3, 2, 2, 2, 2, 1149, 3, 2, 2, 2, 2, 1151, 3, 2, 2, 2, 2, 1153, 3, 2, 2, 2, 2, 1155, 3, 2, 2, 2, 2, 1157, 3, 2, 2, 2, 2, 1159, 3, 2, 2, 2, 2, 1161, 3, 2, 2, 2, 2, 1163, 3, 2, 2, 2, 2, 1165, 3, 2, 2, 2, 2, 1167, 3, 2, 2, 2, 2, 1169, 3, 2, 2, 2, 2, 1171, 3, 2, 2, 2, 2, 1173, 3, 2, 2, 2, 2, 1175, 3, 2, 2, 2, 2, 1177, 3, 2, 2, 2, 2, 1179, 3, 2, 2, 2, 2, 1181, 3, 2, 2, 2, 2, 1183, 3, 2, 2, 2, 2, 1185, 3, 2, 2, 2, 2, 1187, 3, 2, 2, 2, 2, 1189, 3, 2, 2, 2, 2, 1191, 3, 2, 2, 2, 2, 1193, 3, 2, 2, 2, 2, 1195, 3, 2, 2, 2, 2, 1197, 3, 2, 2, 2, 2, 1199, 3, 2, 2, 2, 2, 1201, 3, 2, 2, 2, 2, 1203, 3, 2, 2, 2, 2, 1205, 3, 2, 2, 2, 2, 1207, 3, 2, 2, 2, 2, 1209, 3, 2, 2, 2, 2, 1211, 3, 2, 2, 2, 2, 1213, 3, 2, 2, 2, 2, 1215, 3, 2, 2, 2, 2, 1217, 3, 2, 2, 2, 2, 1219, 3, 2, 2, 2, 2, 1221, 3, 2, 2, 2, 2, 1223, 3, 2, 2, 2, 2, 1225, 3, 2, 2, 2, 2, 1227, 3, 2, 2, 2, 2, 1229, 3, 2, 2, 2, 2, 1231, 3, 2, 2, 2, 2, 1233, 3, 2, 2, 2, 2, 1235, 3, 2, 2, 2, 2, 1237, 3, 2, 2, 2, 2, 1239, 3, 2, 2, 2, 2, 1241, 3, 2, 2, 2, 2, 1243, 3, 2, 2, 2, 2, 1245, 3, 2, 2, 2, 2, 1247, 3, 2, 2, 2, 2, 1249, 3, 2, 2, 2, 2, 1251, 3, 2, 2, 2, 2, 1253, 3, 2, 2, 2, 2, 1255, 3, 2, 2, 2, 2, 1257, 3, 2, 2, 2, 2, 1259, 3, 2, 2, 2, 2, 1261, 3, 2, 2, 2, 2, 1263, 3, 2, 2, 2, 2, 1265, 3, 2, 2, 2, 2, 1267, 3, 2, 2, 2, 2, 1269, 3, 2, 2, 2, 2, 1271, 3, 2, 2, 2, 2, 1273, 3, 2, 2, 2, 2, 1275, 3, 2, 2, 2, 2, 1277, 3, 2, 2, 2, 2, 1279, 3, 2, 2, 2, 2, 1281, 3, 2, 2, 2, 2, 1283, 3, 2, 2, 2, 2, 1285, 3, 2, 2, 2, 2, 1287, 3, 2, 2, 2, 2, 1289, 3, 2, 2, 2, 2, 1291, 3, 2, 2, 2, 2, 1293, 3, 2, 2, 2, 2, 1295, 3, 2, 2, 2, 2, 1297, 3, 2, 2, 2, 2, 1299, 3, 2, 2, 2, 2, 1301, 3, 2, 2, 2, 2, 1303, 3, 2, 2, 2, 2, 1305, 3, 2, 2, 2, 2, 1307, 3, 2, 2, 2, 2, 1309, 3, 2, 2, 2, 2, 1311, 3, 2, 2, 2, 2, 1313, 3, 2, 2, 2, 2, 1315, 3, 2, 2, 2, 2, 1317, 3, 2, 2, 2, 2, 1319, 3, 2, 2, 2, 2, 1321, 3, 2, 2, 2, 2, 1323, 3, 2, 2, 2, 2, 1325, 3, 2, 2, 2, 2, 1327, 3, 2, 2, 2, 2, 1329, 3, 2, 2, 2, 2, 1331, 3, 2, 2, 2, 2, 1333, 3, 2, 2, 2, 2, 1335, 3, 2, 2, 2, 2, 1337, 3, 2, 2, 2, 2, 1339, 3, 2, 2, 2, 2, 1341, 3, 2, 2, 2, 2, 1343, 3, 2, 2, 2, 2, 1345, 3, 2, 2, 2, 2, 1347, 3, 2, 2, 2, 2, 1349, 3, 2, 2, 2, 2, 1351, 3, 2, 2, 2, 2, 1353, 3, 2, 2, 2, 2, 1355, 3, 2, 2, 2, 2, 1357, 3, 2, 2, 2, 2, 1359, 3, 2, 2, 2, 2, 1361, 3, 2, 2, 2, 2, 1363, 3, 2, 2, 2, 2, 1365, 3, 2, 2, 2, 2, 1367, 3, 2, 2, 2, 2, 1369, 3, 2, 2, 2, 2, 1371, 3, 2, 2, 2, 2, 1373, 3, 2, 2, 2, 2, 1375, 3, 2, 2, 2, 2, 1377, 3, 2, 2, 2, 2, 1379, 3, 2, 2, 2, 2, 1381, 3, 2, 2, 2, 2, 1383, 3, 2, 2, 2, 2, 1385, 3, 2, 2, 2, 2, 1387, 3, 2, 2, 2, 2, 1389, 3, 2, 2, 2, 2, 1391, 3, 2, 2, 2, 2, 1393, 3, 2, 2, 2, 2, 1395, 3, 2, 2, 2, 2, 1397, 3, 2, 2, 2, 2, 1399, 3, 2, 2, 2, 2, 1401, 3, 2, 2, 2, 2, 1403, 3, 2, 2, 2, 2, 1405, 3, 2, 2, 2, 2, 1407, 3, 2, 2, 2, 2, 1409, 3, 2, 2, 2, 2, 1411, 3, 2, 2, 2, 2, 1413, 3, 2, 2, 2, 2, 1415, 3, 2, 2, 2, 2, 1417, 3, 2, 2, 2, 2, 1419, 3, 2, 2, 2, 2, 1421, 3, 2, 2, 2, 2, 1423, 3, 2, 2, 2, 2, 1425, 3, 2, 2, 2, 2, 1427, 3, 2, 2, 2, 2, 1429, 3, 2, 2, 2, 2, 1431, 3, 2, 2, 2, 2, 1433, 3, 2, 2, 2, 2, 1435, 3, 2, 2, 2, 2, 1437, 3, 2, 2, 2, 2, 1439, 3, 2, 2, 2, 2, 1441, 3, 2, 2, 2, 2, 1443, 3, 2, 2, 2, 2, 1445, 3, 2, 2, 2, 2, 1447, 3, 2, 2, 2, 2, 1449, 3, 2, 2, 2, 2, 1451, 3, 2, 2, 2, 2, 1453, 3, 2, 2, 2, 2, 1455, 3, 2, 2, 2, 2, 1457, 3, 2, 2, 2, 2, 1459, 3, 2, 2, 2, 2, 1461, 3, 2, 2, 2, 2, 1463, 3, 2, 2, 2, 2, 1465, 3, 2, 2, 2, 2, 1467, 3, 2, 2, 2, 2, 1469, 3, 2, 2, 2, 2, 1471, 3, 2, 2, 2, 2, 1473, 3, 2, 2, 2, 2, 1475, 3, 2, 2, 2, 2, 1477, 3, 2, 2, 2, 2, 1479, 3, 2, 2, 2, 2, 1481, 3, 2, 2, 2, 2, 1483, 3, 2, 2, 2, 2, 1485, 3, 2, 2, 2, 2, 1487, 3, 2, 2, 2, 2, 1489, 3, 2, 2, 2, 2, 1491, 3, 2, 2, 2, 2, 1493, 3, 2, 2, 2, 2, 1495, 3, 2, 2, 2, 2, 1497, 3, 2, 2, 2, 2, 1499, 3, 2, 2, 2, 2, 1501, 3, 2, 2, 2, 2, 1503, 3, 2, 2, 2, 2, 1505, 3, 2, 2, 2, 2, 1507, 3, 2, 2, 2, 2, 1509, 3, 2, 2, 2, 2, 1511, 3, 2, 2, 2, 2, 1513, 3, 2, 2, 2, 2, 1515, 3, 2, 2, 2, 2, 1517, 3, 2, 2, 2, 2, 1519, 3, 2, 2, 2, 2, 1521, 3, 2, 2, 2, 2, 1523, 3, 2, 2, 2, 2, 1525, 3, 2, 2, 2, 2, 1527, 3, 2, 2, 2, 2, 1529, 3, 2, 2, 2, 2, 1531, 3, 2, 2, 2, 2, 1533, 3, 2, 2, 2, 2, 1535, 3, 2, 2, 2, 2, 1537, 3, 2, 2, 2, 2, 1539, 3, 2, 2, 2, 2, 1541, 3, 2, 2, 2, 2, 1543, 3, 2, 2, 2, 2, 1545, 3, 2, 2, 2, 2, 1547, 3, 2, 2, 2, 2, 1549, 3, 2, 2, 2, 2, 1551, 3, 2, 2, 2, 2, 1553, 3, 2, 2, 2, 2, 1555, 3, 2, 2, 2, 2, 1557, 3, 2, 2, 2, 2, 1559, 3, 2, 2, 2, 2, 1561, 3, 2, 2, 2, 2, 1563, 3, 2, 2, 2, 2, 1565, 3, 2, 2, 2, 2, 1567, 3, 2, 2, 2, 2, 1569, 3, 2, 2, 2, 2, 1571, 3, 2, 2, 2, 2, 1573, 3, 2, 2, 2, 2, 1575, 3, 2, 2, 2, 2, 1577, 3, 2, 2, 2, 2, 1579, 3, 2, 2, 2, 2, 1581, 3, 2, 2, 2, 2, 1583, 3, 2, 2, 2, 2, 1585, 3, 2, 2, 2, 2, 1587, 3, 2, 2, 2, 2, 1589, 3, 2, 2, 2, 2, 1591, 3, 2, 2, 2, 2, 1593, 3, 2, 2, 2, 2, 1595, 3, 2, 2, 2, 2, 1597, 3, 2, 2, 2, 2, 1599, 3, 2, 2, 2, 2, 1601, 3, 2, 2, 2, 2, 1603, 3, 2, 2, 2, 2, 1605, 3, 2, 2, 2, 2, 1607, 3, 2, 2, 2, 2, 1609, 3, 2, 2, 2, 2, 1611, 3, 2, 2, 2, 2, 1613, 3, 2, 2, 2, 2, 1615, 3, 2, 2, 2, 2, 1617, 3, 2, 2, 2, 2, 1619, 3, 2, 2, 2, 2, 1621, 3, 2, 2, 2, 2, 1623, 3, 2, 2, 2, 2, 1625, 3, 2, 2, 2, 2, 1627, 3, 2, 2, 2, 2, 1629, 3, 2, 2, 2, 2, 1631, 3, 2, 2, 2, 2, 1633, 3, 2, 2, 2, 2, 1635, 3, 2, 2, 2, 2, 1637, 3, 2, 2, 2, 2, 1639, 3, 2, 2, 2, 2, 1641, 3, 2, 2, 2, 2, 1643, 3, 2, 2, 2, 2, 1645, 3, 2, 2, 2, 2, 1647, 3, 2, 2, 2, 2, 1649, 3, 2, 2, 2, 2, 1651, 3, 2, 2, 2, 2, 1653, 3, 2, 2, 2, 2, 1655, 3, 2, 2, 2, 2, 1657, 3, 2, 2, 2, 2, 1659, 3, 2, 2, 2, 2, 1661, 3, 2, 2, 2, 2, 1663, 3, 2, 2, 2, 2, 1665, 3, 2, 2, 2, 2, 1667, 3, 2, 2, 2, 2, 1669, 3, 2, 2, 2, 2, 1671, 3, 2, 2, 2, 2, 1673, 3, 2, 2, 2, 2, 1675, 3, 2, 2, 2, 2, 1677, 3, 2, 2, 2, 2, 1679, 3, 2, 2, 2, 2, 1681, 3, 2, 2, 2, 2, 1683, 3, 2, 2, 2, 2, 1685, 3, 2, 2, 2, 2, 1687, 3, 2, 2, 2, 2, 1689, 3, 2, 2, 2, 2, 1691, 3, 2, 2, 2, 2, 1693, 3, 2, 2, 2, 2, 1695, 3, 2, 2, 2, 2, 1697, 3, 2, 2, 2, 2, 1699, 3, 2, 2, 2, 2, 1701, 3, 2, 2, 2, 2, 1703, 3, 2, 2, 2, 2, 1705, 3, 2, 2, 2, 2, 1707, 3, 2, 2, 2, 2, 1709, 3, 2, 2, 2, 2, 1711, 3, 2, 2, 2, 2, 1713, 3, 2, 2, 2, 2, 1715, 3, 2, 2, 2, 2, 1717, 3, 2, 2, 2, 2, 1719, 3, 2, 2, 2, 2, 1721, 3, 2, 2, 2, 2, 1723, 3, 2, 2, 2, 2, 1725, 3, 2, 2, 2, 2, 1727, 3, 2, 2, 2, 2, 1729, 3, 2, 2, 2, 2, 1731, 3, 2, 2, 2, 2, 1733, 3, 2, 2, 2, 2, 1735, 3, 2, 2, 2, 2, 1737, 3, 2, 2, 2, 2, 1739, 3, 2, 2, 2, 2, 1741, 3, 2, 2, 2, 2, 1743, 3, 2, 2, 2, 2, 1745, 3, 2, 2, 2, 2, 1747, 3, 2, 2, 2, 2, 1749, 3, 2, 2, 2, 2, 1751, 3, 2, 2, 2, 2, 1753, 3, 2, 2, 2, 2, 1755, 3, 2, 2, 2, 2, 1757, 3, 2, 2, 2, 2, 1759, 3, 2, 2, 2, 2, 1761, 3, 2, 2, 2, 2, 1763, 3, 2, 2, 2, 2, 1765, 3, 2, 2, 2, 2, 1767, 3, 2, 2, 2, 2, 1769, 3, 2, 2, 2, 2, 1771, 3, 2, 2, 2, 2, 1773, 3, 2, 2, 2, 2, 1775, 3, 2, 2, 2, 2, 1777, 3, 2, 2, 2, 2, 1779, 3, 2, 2, 2, 2, 1781, 3, 2, 2, 2, 2, 1783, 3, 2, 2, 2, 2, 1785, 3, 2, 2, 2, 2, 1787, 3, 2, 2, 2, 2, 1789, 3, 2, 2, 2, 2, 1791, 3, 2, 2, 2, 2, 1793, 3, 2, 2, 2, 2, 1795, 3, 2, 2, 2, 2, 1797, 3, 2, 2, 2, 2, 1799, 3, 2, 2, 2, 2, 1801, 3, 2, 2, 2, 2, 1803, 3, 2, 2, 2, 2, 1805, 3, 2, 2, 2, 2, 1807, 3, 2, 2, 2, 2, 1809, 3, 2, 2, 2, 2, 1811, 3, 2, 2, 2, 2, 1813, 3, 2, 2, 2, 2, 1815, 3, 2, 2, 2, 2, 1817, 3, 2, 2, 2, 2, 1819, 3, 2, 2, 2, 2, 1821, 3, 2, 2, 2, 2, 1823, 3, 2, 2, 2, 2, 1825, 3, 2, 2, 2, 2, 1827, 3, 2, 2, 2, 2, 1829, 3, 2, 2, 2, 2, 1831, 3, 2, 2, 2, 2, 1833, 3, 2, 2, 2, 2, 1835, 3, 2, 2, 2, 2, 1837, 3, 2, 2, 2, 2, 1839, 3, 2, 2, 2, 2, 1841, 3, 2, 2, 2, 2, 1843, 3, 2, 2, 2, 2, 1845, 3, 2, 2, 2, 2, 1847, 3, 2, 2, 2, 2, 1849, 3, 2, 2, 2, 2, 1851, 3, 2, 2, 2, 2, 1853, 3, 2, 2, 2, 2, 1855, 3, 2, 2, 2, 2, 1857, 3, 2, 2, 2, 2, 1859, 3, 2, 2, 2, 2, 1861, 3, 2, 2, 2, 2, 1863, 3, 2, 2, 2, 2, 1865, 3, 2, 2, 2, 2, 1867, 3, 2, 2, 2, 2, 1869, 3, 2, 2, 2, 2, 1871, 3, 2, 2, 2, 2, 1873, 3, 2, 2, 2, 2, 1875, 3, 2, 2, 2, 2, 1877, 3, 2, 2, 2, 2, 1879, 3, 2, 2, 2, 2, 1881, 3, 2, 2, 2, 2, 1883, 3, 2, 2, 2, 2, 1885, 3, 2, 2, 2, 2, 1887, 3, 2, 2, 2, 2, 1889, 3, 2, 2, 2, 2, 1891, 3, 2, 2, 2, 2, 1893, 3, 2, 2, 2, 2, 1895, 3, 2, 2, 2, 2, 1897, 3, 2, 2, 2, 2, 1899, 3, 2, 2, 2, 2, 1901, 3, 2, 2, 2, 2, 1903, 3, 2, 2, 2, 2, 1905, 3, 2, 2, 2, 2, 1907, 3, 2, 2, 2, 2, 1909, 3, 2, 2, 2, 2, 1911, 3, 2, 2, 2, 2, 1913, 3, 2, 2, 2, 2, 1915, 3, 2, 2, 2, 2, 1917, 3, 2, 2, 2, 2, 1919, 3, 2, 2, 2, 2, 1921, 3, 2, 2, 2, 2, 1923, 3, 2, 2, 2, 2, 1925, 3, 2, 2, 2, 2, 1927, 3, 2, 2, 2, 2, 1929, 3, 2, 2, 2, 2, 1931, 3, 2, 2, 2, 2, 1933, 3, 2, 2, 2, 2, 1935, 3, 2, 2, 2, 2, 1937, 3, 2, 2, 2, 2, 1939, 3, 2, 2, 2, 2, 1941, 3, 2, 2, 2, 2, 1943, 3, 2, 2, 2, 2, 1945, 3, 2, 2, 2, 2, 1947, 3, 2, 2, 2, 2, 1949, 3, 2, 2, 2, 2, 1951, 3, 2, 2, 2, 2, 1953, 3, 2, 2, 2, 2, 1955, 3, 2, 2, 2, 2, 1957, 3, 2, 2, 2, 2, 1959, 3, 2, 2, 2, 2, 1961, 3, 2, 2, 2, 2, 1963, 3, 2, 2, 2, 2, 1965, 3, 2, 2, 2, 2, 1967, 3, 2, 2, 2, 2, 1969, 3, 2, 2, 2, 2, 1971, 3, 2, 2, 2, 2, 1973, 3, 2, 2, 2, 2, 1975, 3, 2, 2, 2, 2, 1977, 3, 2, 2, 2, 2, 1979, 3, 2, 2, 2, 2, 1981, 3, 2, 2, 2, 2, 1983, 3, 2, 2, 2, 2, 1985, 3, 2, 2, 2, 2, 1987, 3, 2, 2, 2, 2, 1989, 3, 2, 2, 2, 2, 1991, 3, 2, 2, 2, 2, 1993, 3, 2, 2, 2, 2, 1995, 3, 2, 2, 2, 2, 1997, 3, 2, 2, 2, 2, 1999, 3, 2, 2, 2, 2, 2001, 3, 2, 2, 2, 2, 2003, 3, 2, 2, 2, 2, 2005, 3, 2, 2, 2, 2, 2007, 3, 2, 2, 2, 2, 2009, 3, 2, 2, 2, 2, 2011, 3, 2, 2, 2, 2, 2013, 3, 2, 2, 2, 2, 2015, 3, 2, 2, 2, 2, 2017, 3, 2, 2, 2, 2, 2019, 3, 2, 2, 2, 2, 2021, 3, 2, 2, 2, 2, 2023, 3, 2, 2, 2, 2, 2025, 3, 2, 2, 2, 2, 2027, 3, 2, 2, 2, 2, 2029, 3, 2, 2, 2, 2, 2031, 3, 2, 2, 2, 2, 2033, 3, 2, 2, 2, 2, 2035, 3, 2, 2, 2, 2, 2037, 3, 2, 2, 2, 2, 2039, 3, 2, 2, 2, 2, 2041, 3, 2, 2, 2, 2, 2043, 3, 2, 2, 2, 2, 2045, 3, 2, 2, 2, 2, 2047, 3, 2, 2, 2, 2, 2049, 3, 2, 2, 2, 2, 2051, 3, 2, 2, 2, 2, 2053, 3, 2, 2, 2, 2, 2055, 3, 2, 2, 2, 2, 2057, 3, 2, 2, 2, 2, 2059, 3, 2, 2, 2, 2, 2061, 3, 2, 2, 2, 2, 2063, 3, 2, 2, 2, 2, 2065, 3, 2, 2, 2, 2, 2067, 3, 2, 2, 2, 2, 2071, 3, 2, 2, 2, 2, 2073, 3, 2, 2, 2, 2, 2075, 3, 2, 2, 2, 2, 2077, 3, 2, 2, 2, 2, 2079, 3, 2, 2, 2, 2, 2081, 3, 2, 2, 2, 2, 2083, 3, 2, 2, 2, 2, 2085, 3, 2, 2, 2, 2, 2087, 3, 2, 2, 2, 2, 2089, 3, 2, 2, 2, 2, 2091, 3, 2, 2, 2, 2, 2093, 3, 2, 2, 2, 2, 2095, 3, 2, 2, 2, 2, 2097, 3, 2, 2, 2, 2, 2099, 3, 2, 2, 2, 2, 2101, 3, 2, 2, 2, 2, 2121, 3, 2, 2, 2, 3, 2124, 3, 2, 2, 2, 5, 2130, 3, 2, 2, 2, 7, 2144, 3, 2, 2, 2, 9, 2187, 3, 2, 2, 2, 11, 2191, 3, 2, 2, 2, 13, 2195, 3, 2, 2, 2, 15, 2199, 3, 2, 2, 2, 17, 2205, 3, 2, 2, 2, 19, 2212, 3, 2, 2, 2, 21, 2220, 3, 2, 2, 2, 23, 2224, 3, 2, 2, 2, 25, 2227, 3, 2, 2, 2, 27, 2231, 3, 2, 2, 2, 29, 2238, 3, 2, 2, 2, 31, 2246, 3, 2, 2, 2, 33, 2251, 3, 2, 2, 2, 35, 2254, 3, 2, 2, 2, 37, 2259, 3, 2, 2, 2, 39, 2267, 3, 2, 2, 2, 41, 2272, 3, 2, 2, 2, 43, 2277, 3, 2, 2, 2, 45, 2284, 3, 2, 2, 2, 47, 2294, 3, 2, 2, 2, 49, 2300, 3, 2, 2, 2, 51, 2308, 3, 2, 2, 2, 53, 2315, 3, 2, 2, 2, 55, 2325, 3, 2, 2, 2, 57, 2336, 3, 2, 2, 2, 59, 2345, 3, 2, 2, 2, 61, 2353, 3, 2, 2, 2, 63, 2360, 3, 2, 2, 2, 65, 2366, 3, 2, 2, 2, 67, 2374, 3, 2, 2, 2, 69, 2387, 3, 2, 2, 2, 71, 2394, 3, 2, 2, 2, 73, 2403, 3, 2, 2, 2, 75, 2413, 3, 2, 2, 2, 77, 2421, 3, 2, 2, 2, 79, 2429, 3, 2, 2, 2, 81, 2437, 3, 2, 2, 2, 83, 2444, 3, 2, 2, 2, 85, 2449, 3, 2, 2, 2, 87, 2458, 3, 2, 2, 2, 89, 2472, 3, 2, 2, 2, 91, 2484, 3, 2, 2, 2, 93, 2493, 3, 2, 2, 2, 95, 2505, 3, 2, 2, 2, 97, 2510, 3, 2, 2, 2, 99, 2515, 3, 2, 2, 2, 101, 2520, 3, 2, 2, 2, 103, 2527, 3, 2, 2, 2, 105, 2536, 3, 2, 2, 2, 107, 2544, 3, 2, 2, 2, 109, 2551, 3, 2, 2, 2, 111, 2556, 3, 2, 2, 2, 113, 2564, 3, 2, 2, 2, 115, 2570, 3, 2, 2, 2, 117, 2576, 3, 2, 2, 2, 119, 2580, 3, 2, 2, 2, 121, 2586, 3, 2, 2, 2, 123, 2594, 3, 2, 2, 2, 125, 2599, 3, 2, 2, 2, 127, 2608, 3, 2, 2, 2, 129, 2618, 3, 2, 2, 2, 131, 2622, 3, 2, 2, 2, 133, 2628, 3, 2, 2, 2, 135, 2634, 3, 2, 2, 2, 137, 2641, 3, 2, 2, 2, 139, 2655, 3, 2, 2, 2, 141, 2658, 3, 2, 2, 2, 143, 2665, 3, 2, 2, 2, 145, 2668, 3, 2, 2, 2, 147, 2674, 3, 2, 2, 2, 149, 2681, 3, 2, 2, 2, 151, 2687, 3, 2, 2, 2, 153, 2693, 3, 2, 2, 2, 155, 2700, 3, 2, 2, 2, 157, 2709, 3, 2, 2, 2, 159, 2714, 3, 2, 2, 2, 161, 2717, 3, 2, 2, 2, 163, 2725, 3, 2, 2, 2, 165, 2730, 3, 2, 2, 2, 167, 2734, 3, 2, 2, 2, 169, 2739, 3, 2, 2, 2, 171, 2744, 3, 2, 2, 2, 173, 2752, 3, 2, 2, 2, 175, 2758, 3, 2, 2, 2, 177, 2763, 3, 2, 2, 2, 179, 2768, 3, 2, 2, 2, 181, 2774, 3, 2, 2, 2, 183, 2781, 3, 2, 2, 2, 185, 2787, 3, 2, 2, 2, 187, 2792, 3, 2, 2, 2, 189, 2797, 3, 2, 2, 2, 191, 2802, 3, 2, 2, 2, 193, 2815, 3, 2, 2, 2, 195, 2827, 3, 2, 2, 2, 197, 2857, 3, 2, 2, 2, 199, 2863, 3, 2, 2, 2, 201, 2872, 3, 2, 2, 2, 203, 2881, 3, 2, 2, 2, 205, 2889, 3, 2, 2, 2, 207, 2893, 3, 2, 2, 2, 209, 2912, 3, 2, 2, 2, 211, 2917, 3, 2, 2, 2, 213, 2924, 3, 2, 2, 2, 215, 2927, 3, 2, 2, 2, 217, 2936, 3, 2, 2, 2, 219, 2943, 3, 2, 2, 2, 221, 2954, 3, 2, 2, 2, 223, 2957, 3, 2, 2, 2, 225, 2963, 3, 2, 2, 2, 227, 2967, 3, 2, 2, 2, 229, 2973, 3, 2, 2, 2, 231, 2981, 3, 2, 2, 2, 233, 2991, 3, 2, 2, 2, 235, 2999, 3, 2, 2, 2, 237, 3009, 3, 2, 2, 2, 239, 3015, 3, 2, 2, 2, 241, 3021, 3, 2, 2, 2, 243, 3026, 3, 2, 2, 2, 245, 3032, 3, 2, 2, 2, 247, 3043, 3, 2, 2, 2, 249, 3050, 3, 2, 2, 2, 251, 3058, 3, 2, 2, 2, 253, 3065, 3, 2, 2, 2, 255, 3072, 3, 2, 2, 2, 257, 3080, 3, 2, 2, 2, 259, 3088, 3, 2, 2, 2, 261, 3097, 3, 2, 2, 2, 263, 3106, 3, 2, 2, 2, 265, 3113, 3, 2, 2, 2, 267, 3120, 3, 2, 2, 2, 269, 3126, 3, 2, 2, 2, 271, 3132, 3, 2, 2, 2, 273, 3139, 3, 2, 2, 2, 275, 3147, 3, 2, 2, 2, 277, 3154, 3, 2, 2, 2, 279, 3158, 3, 2, 2, 2, 281, 3168, 3, 2, 2, 2, 283, 3173, 3, 2, 2, 2, 285, 3180, 3, 2, 2, 2, 287, 3188, 3, 2, 2, 2, 289, 3192, 3, 2, 2, 2, 291, 3205, 3, 2, 2, 2, 293, 3214, 3, 2, 2, 2, 295, 3225, 3, 2, 2, 2, 297, 3240, 3, 2, 2, 2, 299, 3260, 3, 2, 2, 2, 301, 3277, 3, 2, 2, 2, 303, 3281, 3, 2, 2, 2, 305, 3289, 3, 2, 2, 2, 307, 3298, 3, 2, 2, 2, 309, 3312, 3, 2, 2, 2, 311, 3318, 3, 2, 2, 2, 313, 3329, 3, 2, 2, 2, 315, 3334, 3, 2, 2, 2, 317, 3337, 3, 2, 2, 2, 319, 3346, 3, 2, 2, 2, 321, 3354, 3, 2, 2, 2, 323, 3359, 3, 2, 2, 2, 325, 3364, 3, 2, 2, 2, 327, 3370, 3, 2, 2, 2, 329, 3377, 3, 2, 2, 2, 331, 3384, 3, 2, 2, 2, 333, 3393, 3, 2, 2, 2, 335, 3400, 3, 2, 2, 2, 337, 3406, 3, 2, 2, 2, 339, 3410, 3, 2, 2, 2, 341, 3416, 3, 2, 2, 2, 343, 3423, 3, 2, 2, 2, 345, 3428, 3, 2, 2, 2, 347, 3434, 3, 2, 2, 2, 349, 3440, 3, 2, 2, 2, 351, 3445, 3, 2, 2, 2, 353, 3451, 3, 2, 2, 2, 355, 3455, 3, 2, 2, 2, 357, 3464, 3, 2, 2, 2, 359, 3472, 3, 2, 2, 2, 361, 3481, 3, 2, 2, 2, 363, 3491, 3, 2, 2, 2, 365, 3501, 3, 2, 2, 2, 367, 3505, 3, 2, 2, 2, 369, 3510, 3, 2, 2, 2, 371, 3515, 3, 2, 2, 2, 373, 3520, 3, 2, 2, 2, 375, 3525, 3, 2, 2, 2, 377, 3530, 3, 2, 2, 2, 379, 3538, 3, 2, 2, 2, 381, 3545, 3, 2, 2, 2, 383, 3550, 3, 2, 2, 2, 385, 3557, 3, 2, 2, 2, 387, 3567, 3, 2, 2, 2, 389, 3573, 3, 2, 2, 2, 391, 3580, 3, 2, 2, 2, 393, 3587, 3, 2, 2, 2, 395, 3595, 3, 2, 2, 2, 397, 3599, 3, 2, 2, 2, 399, 3607, 3, 2, 2, 2, 401, 3612, 3, 2, 2, 2, 403, 3617, 3, 2, 2, 2, 405, 3627, 3, 2, 2, 2, 407, 3636, 3, 2, 2, 2, 409, 3641, 3, 2, 2, 2, 411, 3646, 3, 2, 2, 2, 413, 3654, 3, 2, 2, 2, 415, 3663, 3, 2, 2, 2, 417, 3672, 3, 2, 2, 2, 419, 3679, 3, 2, 2, 2, 421, 3689, 3, 2, 2, 2, 423, 3698, 3, 2, 2, 2, 425, 3703, 3, 2, 2, 2, 427, 3714, 3, 2, 2, 2, 429, 3719, 3, 2, 2, 2, 431, 3728, 3, 2, 2, 2, 433, 3737, 3, 2, 2, 2, 435, 3742, 3, 2, 2, 2, 437, 3753, 3, 2, 2, 2, 439, 3762, 3, 2, 2, 2, 441, 3767, 3, 2, 2, 2, 443, 3775, 3, 2, 2, 2, 445, 3782, 3, 2, 2, 2, 447, 3793, 3, 2, 2, 2, 449, 3802, 3, 2, 2, 2, 451, 3813, 3, 2, 2, 2, 453, 3824, 3, 2, 2, 2, 455, 3836, 3, 2, 2, 2, 457, 3848, 3, 2, 2, 2, 459, 3862, 3, 2, 2, 2, 461, 3881, 3, 2, 2, 2, 463, 3900, 3, 2, 2, 2, 465, 3917, 3, 2, 2, 2, 467, 3933, 3, 2, 2, 2, 469, 3944, 3, 2, 2, 2, 471, 3962, 3, 2, 2, 2, 473, 3966, 3, 2, 2, 2, 475, 3974, 3, 2, 2, 2, 477, 3981, 3, 2, 2, 2, 479, 3989, 3, 2, 2, 2, 481, 3995, 3, 2, 2, 2, 483, 4008, 3, 2, 2, 2, 485, 4012, 3, 2, 2, 2, 487, 4016, 3, 2, 2, 2, 489, 4020, 3, 2, 2, 2, 491, 4027, 3, 2, 2, 2, 493, 4038, 3, 2, 2, 2, 495, 4050, 3, 2, 2, 2, 497, 4054, 3, 2, 2, 2, 499, 4062, 3, 2, 2, 2, 501, 4071, 3, 2, 2, 2, 503, 4080, 3, 2, 2, 2, 505, 4093, 3, 2, 2, 2, 507, 4106, 3, 2, 2, 2, 509, 4124, 3, 2, 2, 2, 511, 4134, 3, 2, 2, 2, 513, 4142, 3, 2, 2, 2, 515, 4150, 3, 2, 2, 2, 517, 4159, 3, 2, 2, 2, 519, 4168, 3, 2, 2, 2, 521, 4176, 3, 2, 2, 2, 523, 4191, 3, 2, 2, 2, 525, 4195, 3, 2, 2, 2, 527, 4204, 3, 2, 2, 2, 529, 4211, 3, 2, 2, 2, 531, 4221, 3, 2, 2, 2, 533, 4229, 3, 2, 2, 2, 535, 4234, 3, 2, 2, 2, 537, 4243, 3, 2, 2, 2, 539, 4252, 3, 2, 2, 2, 541, 4266, 3, 2, 2, 2, 543, 4274, 3, 2, 2, 2, 545, 4281, 3, 2, 2, 2, 547, 4287, 3, 2, 2, 2, 549, 4297, 3, 2, 2, 2, 551, 4307, 3, 2, 2, 2, 553, 4311, 3, 2, 2, 2, 555, 4314, 3, 2, 2, 2, 557, 4322, 3, 2, 2, 2, 559, 4333, 3, 2, 2, 2, 561, 4349, 3, 2, 2, 2, 563, 4364, 3, 2, 2, 2, 565, 4379, 3, 2, 2, 2, 567, 4385, 3, 2, 2, 2, 569, 4392, 3, 2, 2, 2, 571, 4396, 3, 2, 2, 2, 573, 4402, 3, 2, 2, 2, 575, 4407, 3, 2, 2, 2, 577, 4415, 3, 2, 2, 2, 579, 4421, 3, 2, 2, 2, 581, 4427, 3, 2, 2, 2, 583, 4436, 3, 2, 2, 2, 585, 4442, 3, 2, 2, 2, 587, 4450, 3, 2, 2, 2, 589, 4458, 3, 2, 2, 2, 591, 4467, 3, 2, 2, 2, 593, 4481, 3, 2, 2, 2, 595, 4488, 3, 2, 2, 2, 597, 4501, 3, 2, 2, 2, 599, 4508, 3, 2, 2, 2, 601, 4514, 3, 2, 2, 2, 603, 4523, 3, 2, 2, 2, 605, 4528, 3, 2, 2, 2, 607, 4536, 3, 2, 2, 2, 609, 4550, 3, 2, 2, 2, 611, 4562, 3, 2, 2, 2, 613, 4570, 3, 2, 2, 2, 615, 4577, 3, 2, 2, 2, 617, 4585, 3, 2, 2, 2, 619, 4596, 3, 2, 2, 2, 621, 4607, 3, 2, 2, 2, 623, 4619, 3, 2, 2, 2, 625, 4630, 3, 2, 2, 2, 627, 4641, 3, 2, 2, 2, 629, 4652, 3, 2, 2, 2, 631, 4671, 3, 2, 2, 2, 633, 4689, 3, 2, 2, 2, 635, 4705, 3, 2, 2, 2, 637, 4714, 3, 2, 2, 2, 639, 4722, 3, 2, 2, 2, 641, 4735, 3, 2, 2, 2, 643, 4740, 3, 2, 2, 2, 645, 4744, 3, 2, 2, 2, 647, 4756, 3, 2, 2, 2, 649, 4761, 3, 2, 2, 2, 651, 4770, 3, 2, 2, 2, 653, 4781, 3, 2, 2, 2, 655, 4794, 3, 2, 2, 2, 657, 4802, 3, 2, 2, 2, 659, 4818, 3, 2, 2, 2, 661, 4831, 3, 2, 2, 2, 663, 4841, 3, 2, 2, 2, 665, 4849, 3, 2, 2, 2, 667, 4857, 3, 2, 2, 2, 669, 4862, 3, 2, 2, 2, 671, 4865, 3, 2, 2, 2, 673, 4874, 3, 2, 2, 2, 675, 4884, 3, 2, 2, 2, 677, 4892, 3, 2, 2, 2, 679, 4899, 3, 2, 2, 2, 681, 4910, 3, 2, 2, 2, 683, 4914, 3, 2, 2, 2, 685, 4919, 3, 2, 2, 2, 687, 4926, 3, 2, 2, 2, 689, 4934, 3, 2, 2, 2, 691, 4940, 3, 2, 2, 2, 693, 4947, 3, 2, 2, 2, 695, 4954, 3, 2, 2, 2, 697, 4959, 3, 2, 2, 2, 699, 4965, 3, 2, 2, 2, 701, 4972, 3, 2, 2, 2, 703, 4978, 3, 2, 2, 2, 705, 4987, 3, 2, 2, 2, 707, 4997, 3, 2, 2, 2, 709, 5004, 3, 2, 2, 2, 711, 5011, 3, 2, 2, 2, 713, 5020, 3, 2, 2, 2, 715, 5032, 3, 2, 2, 2, 717, 5037, 3, 2, 2, 2, 719, 5044, 3, 2, 2, 2, 721, 5051, 3, 2, 2, 2, 723, 5067, 3, 2, 2, 2, 725, 5074, 3, 2, 2, 2, 727, 5080, 3, 2, 2, 2, 729, 5086, 3, 2, 2, 2, 731, 5092, 3, 2, 2, 2, 733, 5100, 3, 2, 2, 2, 735, 5106, 3, 2, 2, 2, 737, 5111, 3, 2, 2, 2, 739, 5120, 3, 2, 2, 2, 741, 5128, 3, 2, 2, 2, 743, 5135, 3, 2, 2, 2, 745, 5142, 3, 2, 2, 2, 747, 5160, 3, 2, 2, 2, 749, 5168, 3, 2, 2, 2, 751, 5173, 3, 2, 2, 2, 753, 5178, 3, 2, 2, 2, 755, 5183, 3, 2, 2, 2, 757, 5189, 3, 2, 2, 2, 759, 5200, 3, 2, 2, 2, 761, 5218, 3, 2, 2, 2, 763, 5225, 3, 2, 2, 2, 765, 5233, 3, 2, 2, 2, 767, 5246, 3, 2, 2, 2, 769, 5254, 3, 2, 2, 2, 771, 5268, 3, 2, 2, 2, 773, 5276, 3, 2, 2, 2, 775, 5285, 3, 2, 2, 2, 777, 5295, 3, 2, 2, 2, 779, 5303, 3, 2, 2, 2, 781, 5306, 3, 2, 2, 2, 783, 5316, 3, 2, 2, 2, 785, 5320, 3, 2, 2, 2, 787, 5330, 3, 2, 2, 2, 789, 5337, 3, 2, 2, 2, 791, 5342, 3, 2, 2, 2, 793, 5357, 3, 2, 2, 2, 795, 5366, 3, 2, 2, 2, 797, 5371, 3, 2, 2, 2, 799, 5378, 3, 2, 2, 2, 801, 5383, 3, 2, 2, 2, 803, 5389, 3, 2, 2, 2, 805, 5394, 3, 2, 2, 2, 807, 5400, 3, 2, 2, 2, 809, 5408, 3, 2, 2, 2, 811, 5413, 3, 2, 2, 2, 813, 5420, 3, 2, 2, 2, 815, 5441, 3, 2, 2, 2, 817, 5462, 3, 2, 2, 2, 819, 5475, 3, 2, 2, 2, 821, 5499, 3, 2, 2, 2, 823, 5511, 3, 2, 2, 2, 825, 5527, 3, 2, 2, 2, 827, 5542, 3, 2, 2, 2, 829, 5558, 3, 2, 2, 2, 831, 5570, 3, 2, 2, 2, 833, 5589, 3, 2, 2, 2, 835, 5600, 3, 2, 2, 2, 837, 5614, 3, 2, 2, 2, 839, 5632, 3, 2, 2, 2, 841, 5648, 3, 2, 2, 2, 843, 5666, 3, 2, 2, 2, 845, 5681, 3, 2, 2, 2, 847, 5700, 3, 2, 2, 2, 849, 5715, 3, 2, 2, 2, 851, 5734, 3, 2, 2, 2, 853, 5746, 3, 2, 2, 2, 855, 5771, 3, 2, 2, 2, 857, 5792, 3, 2, 2, 2, 859, 5801, 3, 2, 2, 2, 861, 5810, 3, 2, 2, 2, 863, 5831, 3, 2, 2, 2, 865, 5852, 3, 2, 2, 2, 867, 5859, 3, 2, 2, 2, 869, 5866, 3, 2, 2, 2, 871, 5872, 3, 2, 2, 2, 873, 5885, 3, 2, 2, 2, 875, 5889, 3, 2, 2, 2, 877, 5897, 3, 2, 2, 2, 879, 5906, 3, 2, 2, 2, 881, 5911, 3, 2, 2, 2, 883, 5918, 3, 2, 2, 2, 885, 5924, 3, 2, 2, 2, 887, 5930, 3, 2, 2, 2, 889, 5942, 3, 2, 2, 2, 891, 5947, 3, 2, 2, 2, 893, 5953, 3, 2, 2, 2, 895, 5959, 3, 2, 2, 2, 897, 5965, 3, 2, 2, 2, 899, 5970, 3, 2, 2, 2, 901, 5973, 3, 2, 2, 2, 903, 5983, 3, 2, 2, 2, 905, 5988, 3, 2, 2, 2, 907, 5996, 3, 2, 2, 2, 909, 6003, 3, 2, 2, 2, 911, 6006, 3, 2, 2, 2, 913, 6009, 3, 2, 2, 2, 915, 6022, 3, 2, 2, 2, 917, 6026, 3, 2, 2, 2, 919, 6033, 3, 2, 2, 2, 921, 6038, 3, 2, 2, 2, 923, 6043, 3, 2, 2, 2, 925, 6059, 3, 2, 2, 2, 927, 6067, 3, 2, 2, 2, 929, 6073, 3, 2, 2, 2, 931, 6083, 3, 2, 2, 2, 933, 6088, 3, 2, 2, 2, 935, 6095, 3, 2, 2, 2, 937, 6103, 3, 2, 2, 2, 939, 6116, 3, 2, 2, 2, 941, 6127, 3, 2, 2, 2, 943, 6136, 3, 2, 2, 2, 945, 6142, 3, 2, 2, 2, 947, 6149, 3, 2, 2, 2, 949, 6160, 3, 2, 2, 2, 951, 6168, 3, 2, 2, 2, 953, 6173, 3, 2, 2, 2, 955, 6182, 3, 2, 2, 2, 957, 6190, 3, 2, 2, 2, 959, 6199, 3, 2, 2, 2, 961, 6204, 3, 2, 2, 2, 963, 6216, 3, 2, 2, 2, 965, 6224, 3, 2, 2, 2, 967, 6233, 3, 2, 2, 2, 969, 6239, 3, 2, 2, 2, 971, 6245, 3, 2, 2, 2, 973, 6251, 3, 2, 2, 2, 975, 6259, 3, 2, 2, 2, 977, 6267, 3, 2, 2, 2, 979, 6284, 3, 2, 2, 2, 981, 6294, 3, 2, 2, 2, 983, 6300, 3, 2, 2, 2, 985, 6315, 3, 2, 2, 2, 987, 6329, 3, 2, 2, 2, 989, 6338, 3, 2, 2, 2, 991, 6345, 3, 2, 2, 2, 993, 6356, 3, 2, 2, 2, 995, 6363, 3, 2, 2, 2, 997, 6379, 3, 2, 2, 2, 999, 6398, 3, 2, 2, 2, 1001, 6418, 3, 2, 2, 2, 1003, 6441, 3, 2, 2, 2, 1005, 6462, 3, 2, 2, 2, 1007, 6486, 3, 2, 2, 2, 1009, 6514, 3, 2, 2, 2, 1011, 6526, 3, 2, 2, 2, 1013, 6532, 3, 2, 2, 2, 1015, 6539, 3, 2, 2, 2, 1017, 6557, 3, 2, 2, 2, 1019, 6565, 3, 2, 2, 2, 1021, 6570, 3, 2, 2, 2, 1023, 6579, 3, 2, 2, 2, 1025, 6586, 3, 2, 2, 2, 1027, 6593, 3, 2, 2, 2, 1029, 6597, 3, 2, 2, 2, 1031, 6602, 3, 2, 2, 2, 1033, 6613, 3, 2, 2, 2, 1035, 6623, 3, 2, 2, 2, 1037, 6632, 3, 2, 2, 2, 1039, 6641, 3, 2, 2, 2, 1041, 6648, 3, 2, 2, 2, 1043, 6656, 3, 2, 2, 2, 1045, 6662, 3, 2, 2, 2, 1047, 6669, 3, 2, 2, 2, 1049, 6676, 3, 2, 2, 2, 1051, 6683, 3, 2, 2, 2, 1053, 6689, 3, 2, 2, 2, 1055, 6694, 3, 2, 2, 2, 1057, 6703, 3, 2, 2, 2, 1059, 6710, 3, 2, 2, 2, 1061, 6715, 3, 2, 2, 2, 1063, 6722, 3, 2, 2, 2, 1065, 6729, 3, 2, 2, 2, 1067, 6736, 3, 2, 2, 2, 1069, 6752, 3, 2, 2, 2, 1071, 6771, 3, 2, 2, 2, 1073, 6788, 3, 2, 2, 2, 1075, 6806, 3, 2, 2, 2, 1077, 6816, 3, 2, 2, 2, 1079, 6829, 3, 2, 2, 2, 1081, 6840, 3, 2, 2, 2, 1083, 6846, 3, 2, 2, 2, 1085, 6853, 3, 2, 2, 2, 1087, 6871, 3, 2, 2, 2, 1089, 6888, 3, 2, 2, 2, 1091, 6907, 3, 2, 2, 2, 1093, 6914, 3, 2, 2, 2, 1095, 6919, 3, 2, 2, 2, 1097, 6927, 3, 2, 2, 2, 1099, 6934, 3, 2, 2, 2, 1101, 6941, 3, 2, 2, 2, 1103, 6957, 3, 2, 2, 2, 1105, 6965, 3, 2, 2, 2, 1107, 6978, 3, 2, 2, 2, 1109, 6992, 3, 2, 2, 2, 1111, 7000, 3, 2, 2, 2, 1113, 7006, 3, 2, 2, 2, 1115, 7015, 3, 2, 2, 2, 1117, 7026, 3, 2, 2, 2, 1119, 7037, 3, 2, 2, 2, 1121, 7047, 3, 2, 2, 2, 1123, 7057, 3, 2, 2, 2, 1125, 7062, 3, 2, 2, 2, 1127, 7074, 3, 2, 2, 2, 1129, 7086, 3, 2, 2, 2, 1131, 7100, 3, 2, 2, 2, 1133, 7109, 3, 2, 2, 2, 1135, 7118, 3, 2, 2, 2, 1137, 7128, 3, 2, 2, 2, 1139, 7137, 3, 2, 2, 2, 1141, 7154, 3, 2, 2, 2, 1143, 7164, 3, 2, 2, 2, 1145, 7172, 3, 2, 2, 2, 1147, 7178, 3, 2, 2, 2, 1149, 7186, 3, 2, 2, 2, 1151, 7191, 3, 2, 2, 2, 1153, 7199, 3, 2, 2, 2, 1155, 7214, 3, 2, 2, 2, 1157, 7225, 3, 2, 2, 2, 1159, 7231, 3, 2, 2, 2, 1161, 7241, 3, 2, 2, 2, 1163, 7246, 3, 2, 2, 2, 1165, 7254, 3, 2, 2, 2, 1167, 7262, 3, 2, 2, 2, 1169, 7267, 3, 2, 2, 2, 1171, 7276, 3, 2, 2, 2, 1173, 7284, 3, 2, 2, 2, 1175, 7289, 3, 2, 2, 2, 1177, 7297, 3, 2, 2, 2, 1179, 7302, 3, 2, 2, 2, 1181, 7305, 3, 2, 2, 2, 1183, 7309, 3, 2, 2, 2, 1185, 7313, 3, 2, 2, 2, 1187, 7317, 3, 2, 2, 2, 1189, 7321, 3, 2, 2, 2, 1191, 7325, 3, 2, 2, 2, 1193, 7334, 3, 2, 2, 2, 1195, 7342, 3, 2, 2, 2, 1197, 7348, 3, 2, 2, 2, 1199, 7352, 3, 2, 2, 2, 1201, 7357, 3, 2, 2, 2, 1203, 7364, 3, 2, 2, 2, 1205, 7369, 3, 2, 2, 2, 1207, 7376, 3, 2, 2, 2, 1209, 7388, 3, 2, 2, 2, 1211, 7395, 3, 2, 2, 2, 1213, 7403, 3, 2, 2, 2, 1215, 7411, 3, 2, 2, 2, 1217, 7416, 3, 2, 2, 2, 1219, 7424, 3, 2, 2, 2, 1221, 7431, 3, 2, 2, 2, 1223, 7440, 3, 2, 2, 2, 1225, 7446, 3, 2, 2, 2, 1227, 7457, 3, 2, 2, 2, 1229, 7484, 3, 2, 2, 2, 1231, 7496, 3, 2, 2, 2, 1233, 7509, 3, 2, 2, 2, 1235, 7522, 3, 2, 2, 2, 1237, 7546, 3, 2, 2, 2, 1239, 7558, 3, 2, 2, 2, 1241, 7575, 3, 2, 2, 2, 1243, 7596, 3, 2, 2, 2, 1245, 7611, 3, 2, 2, 2, 1247, 7625, 3, 2, 2, 2, 1249, 7649, 3, 2, 2, 2, 1251, 7673, 3, 2, 2, 2, 1253, 7689, 3, 2, 2, 2, 1255, 7716, 3, 2, 2, 2, 1257, 7736, 3, 2, 2, 2, 1259, 7760, 3, 2, 2, 2, 1261, 7781, 3, 2, 2, 2, 1263, 7801, 3, 2, 2, 2, 1265, 7813, 3, 2, 2, 2, 1267, 7842, 3, 2, 2, 2, 1269, 7854, 3, 2, 2, 2, 1271, 7867, 3, 2, 2, 2, 1273, 7890, 3, 2, 2, 2, 1275, 7913, 3, 2, 2, 2, 1277, 7933, 3, 2, 2, 2, 1279, 7950, 3, 2, 2, 2, 1281, 7959, 3, 2, 2, 2, 1283, 7965, 3, 2, 2, 2, 1285, 7970, 3, 2, 2, 2, 1287, 7977, 3, 2, 2, 2, 1289, 7984, 3, 2, 2, 2, 1291, 7991, 3, 2, 2, 2, 1293, 7998, 3, 2, 2, 2, 1295, 8004, 3, 2, 2, 2, 1297, 8010, 3, 2, 2, 2, 1299, 8016, 3, 2, 2, 2, 1301, 8022, 3, 2, 2, 2, 1303, 8027, 3, 2, 2, 2, 1305, 8035, 3, 2, 2, 2, 1307, 8041, 3, 2, 2, 2, 1309, 8048, 3, 2, 2, 2, 1311, 8052, 3, 2, 2, 2, 1313, 8060, 3, 2, 2, 2, 1315, 8066, 3, 2, 2, 2, 1317, 8073, 3, 2, 2, 2, 1319, 8077, 3, 2, 2, 2, 1321, 8085, 3, 2, 2, 2, 1323, 8091, 3, 2, 2, 2, 1325, 8097, 3, 2, 2, 2, 1327, 8104, 3, 2, 2, 2, 1329, 8111, 3, 2, 2, 2, 1331, 8118, 3, 2, 2, 2, 1333, 8125, 3, 2, 2, 2, 1335, 8131, 3, 2, 2, 2, 1337, 8140, 3, 2, 2, 2, 1339, 8145, 3, 2, 2, 2, 1341, 8150, 3, 2, 2, 2, 1343, 8157, 3, 2, 2, 2, 1345, 8162, 3, 2, 2, 2, 1347, 8167, 3, 2, 2, 2, 1349, 8173, 3, 2, 2, 2, 1351, 8181, 3, 2, 2, 2, 1353, 8187, 3, 2, 2, 2, 1355, 8192, 3, 2, 2, 2, 1357, 8200, 3, 2, 2, 2, 1359, 8208, 3, 2, 2, 2, 1361, 8216, 3, 2, 2, 2, 1363, 8226, 3, 2, 2, 2, 1365, 8230, 3, 2, 2, 2, 1367, 8240, 3, 2, 2, 2, 1369, 8247, 3, 2, 2, 2, 1371, 8254, 3, 2, 2, 2, 1373, 8265, 3, 2, 2, 2, 1375, 8272, 3, 2, 2, 2, 1377, 8276, 3, 2, 2, 2, 1379, 8287, 3, 2, 2, 2, 1381, 8306, 3, 2, 2, 2, 1383, 8313, 3, 2, 2, 2, 1385, 8324, 3, 2, 2, 2, 1387, 8334, 3, 2, 2, 2, 1389, 8346, 3, 2, 2, 2, 1391, 8359, 3, 2, 2, 2, 1393, 8378, 3, 2, 2, 2, 1395, 8393, 3, 2, 2, 2, 1397, 8402, 3, 2, 2, 2, 1399, 8413, 3, 2, 2, 2, 1401, 8429, 3, 2, 2, 2, 1403, 8440, 3, 2, 2, 2, 1405, 8453, 3, 2, 2, 2, 1407, 8459, 3, 2, 2, 2, 1409, 8467, 3, 2, 2, 2, 1411, 8471, 3, 2, 2, 2, 1413, 8476, 3, 2, 2, 2, 1415, 8484, 3, 2, 2, 2, 1417, 8492, 3, 2, 2, 2, 1419, 8504, 3, 2, 2, 2, 1421, 8516, 3, 2, 2, 2, 1423, 8521, 3, 2, 2, 2, 1425, 8530, 3, 2, 2, 2, 1427, 8535, 3, 2, 2, 2, 1429, 8542, 3, 2, 2, 2, 1431, 8548, 3, 2, 2, 2, 1433, 8554, 3, 2, 2, 2, 1435, 8573, 3, 2, 2, 2, 1437, 8591, 3, 2, 2, 2, 1439, 8610, 3, 2, 2, 2, 1441, 8626, 3, 2, 2, 2, 1443, 8644, 3, 2, 2, 2, 1445, 8649, 3, 2, 2, 2, 1447, 8655, 3, 2, 2, 2, 1449, 8665, 3, 2, 2, 2, 1451, 8669, 3, 2, 2, 2, 1453, 8679, 3, 2, 2, 2, 1455, 8690, 3, 2, 2, 2, 1457, 8697, 3, 2, 2, 2, 1459, 8710, 3, 2, 2, 2, 1461, 8715, 3, 2, 2, 2, 1463, 8723, 3, 2, 2, 2, 1465, 8732, 3, 2, 2, 2, 1467, 8749, 3, 2, 2, 2, 1469, 8757, 3, 2, 2, 2, 1471, 8769, 3, 2, 2, 2, 1473, 8782, 3, 2, 2, 2, 1475, 8792, 3, 2, 2, 2, 1477, 8801, 3, 2, 2, 2, 1479, 8808, 3, 2, 2, 2, 1481, 8818, 3, 2, 2, 2, 1483, 8832, 3, 2, 2, 2, 1485, 8837, 3, 2, 2, 2, 1487, 8848, 3, 2, 2, 2, 1489, 8852, 3, 2, 2, 2, 1491, 8856, 3, 2, 2, 2, 1493, 8862, 3, 2, 2, 2, 1495, 8889, 3, 2, 2, 2, 1497, 8915, 3, 2, 2, 2, 1499, 8936, 3, 2, 2, 2, 1501, 8950, 3, 2, 2, 2, 1503, 8958, 3, 2, 2, 2, 1505, 8967, 3, 2, 2, 2, 1507, 8979, 3, 2, 2, 2, 1509, 8987, 3, 2, 2, 2, 1511, 8998, 3, 2, 2, 2, 1513, 9008, 3, 2, 2, 2, 1515, 9018, 3, 2, 2, 2, 1517, 9025, 3, 2, 2, 2, 1519, 9033, 3, 2, 2, 2, 1521, 9045, 3, 2, 2, 2, 1523, 9057, 3, 2, 2, 2, 1525, 9067, 3, 2, 2, 2, 1527, 9076, 3, 2, 2, 2, 1529, 9080, 3, 2, 2, 2, 1531, 9087, 3, 2, 2, 2, 1533, 9095, 3, 2, 2, 2, 1535, 9104, 3, 2, 2, 2, 1537, 9113, 3, 2, 2, 2, 1539, 9120, 3, 2, 2, 2, 1541, 9124, 3, 2, 2, 2, 1543, 9135, 3, 2, 2, 2, 1545, 9148, 3, 2, 2, 2, 1547, 9161, 3, 2, 2, 2, 1549, 9167, 3, 2, 2, 2, 1551, 9179, 3, 2, 2, 2, 1553, 9185, 3, 2, 2, 2, 1555, 9192, 3, 2, 2, 2, 1557, 9203, 3, 2, 2, 2, 1559, 9215, 3, 2, 2, 2, 1561, 9225, 3, 2, 2, 2, 1563, 9239, 3, 2, 2, 2, 1565, 9256, 3, 2, 2, 2, 1567, 9272, 3, 2, 2, 2, 1569, 9299, 3, 2, 2, 2, 1571, 9325, 3, 2, 2, 2, 1573, 9342, 3, 2, 2, 2, 1575, 9358, 3, 2, 2, 2, 1577, 9368, 3, 2, 2, 2, 1579, 9381, 3, 2, 2, 2, 1581, 9394, 3, 2, 2, 2, 1583, 9406, 3, 2, 2, 2, 1585, 9417, 3, 2, 2, 2, 1587, 9426, 3, 2, 2, 2, 1589, 9434, 3, 2, 2, 2, 1591, 9443, 3, 2, 2, 2, 1593, 9455, 3, 2, 2, 2, 1595, 9469, 3, 2, 2, 2, 1597, 9473, 3, 2, 2, 2, 1599, 9480, 3, 2, 2, 2, 1601, 9491, 3, 2, 2, 2, 1603, 9502, 3, 2, 2, 2, 1605, 9512, 3, 2, 2, 2, 1607, 9522, 3, 2, 2, 2, 1609, 9528, 3, 2, 2, 2, 1611, 9542, 3, 2, 2, 2, 1613, 9553, 3, 2, 2, 2, 1615, 9562, 3, 2, 2, 2, 1617, 9570, 3, 2, 2, 2, 1619, 9577, 3, 2, 2, 2, 1621, 9586, 3, 2, 2, 2, 1623, 9599, 3, 2, 2, 2, 1625, 9607, 3, 2, 2, 2, 1627, 9622, 3, 2, 2, 2, 1629, 9637, 3, 2, 2, 2, 1631, 9645, 3, 2, 2, 2, 1633, 9658, 3, 2, 2, 2, 1635, 9673, 3, 2, 2, 2, 1637, 9679, 3, 2, 2, 2, 1639, 9685, 3, 2, 2, 2, 1641, 9692, 3, 2, 2, 2, 1643, 9705, 3, 2, 2, 2, 1645, 9717, 3, 2, 2, 2, 1647, 9736, 3, 2, 2, 2, 1649, 9754, 3, 2, 2, 2, 1651, 9757, 3, 2, 2, 2, 1653, 9767, 3, 2, 2, 2, 1655, 9774, 3, 2, 2, 2, 1657, 9778, 3, 2, 2, 2, 1659, 9784, 3, 2, 2, 2, 1661, 9789, 3, 2, 2, 2, 1663, 9795, 3, 2, 2, 2, 1665, 9800, 3, 2, 2, 2, 1667, 9806, 3, 2, 2, 2, 1669, 9815, 3, 2, 2, 2, 1671, 9824, 3, 2, 2, 2, 1673, 9833, 3, 2, 2, 2, 1675, 9849, 3, 2, 2, 2, 1677, 9861, 3, 2, 2, 2, 1679, 9873, 3, 2, 2, 2, 1681, 9882, 3, 2, 2, 2, 1683, 9896, 3, 2, 2, 2, 1685, 9908, 3, 2, 2, 2, 1687, 9919, 3, 2, 2, 2, 1689, 9929, 3, 2, 2, 2, 1691, 9933, 3, 2, 2, 2, 1693, 9947, 3, 2, 2, 2, 1695, 9960, 3, 2, 2, 2, 1697, 9970, 3, 2, 2, 2, 1699, 9985, 3, 2, 2, 2, 1701, 9999, 3, 2, 2, 2, 1703, 10013, 3, 2, 2, 2, 1705, 10026, 3, 2, 2, 2, 1707, 10050, 3, 2, 2, 2, 1709, 10073, 3, 2, 2, 2, 1711, 10092, 3, 2, 2, 2, 1713, 10110, 3, 2, 2, 2, 1715, 10131, 3, 2, 2, 2, 1717, 10151, 3, 2, 2, 2, 1719, 10162, 3, 2, 2, 2, 1721, 10169, 3, 2, 2, 2, 1723, 10183, 3, 2, 2, 2, 1725, 10200, 3, 2, 2, 2, 1727, 10210, 3, 2, 2, 2, 1729, 10214, 3, 2, 2, 2, 1731, 10227, 3, 2, 2, 2, 1733, 10231, 3, 2, 2, 2, 1735, 10240, 3, 2, 2, 2, 1737, 10251, 3, 2, 2, 2, 1739, 10263, 3, 2, 2, 2, 1741, 10266, 3, 2, 2, 2, 1743, 10280, 3, 2, 2, 2, 1745, 10293, 3, 2, 2, 2, 1747, 10300, 3, 2, 2, 2, 1749, 10313, 3, 2, 2, 2, 1751, 10325, 3, 2, 2, 2, 1753, 10341, 3, 2, 2, 2, 1755, 10356, 3, 2, 2, 2, 1757, 10360, 3, 2, 2, 2, 1759, 10366, 3, 2, 2, 2, 1761, 10372, 3, 2, 2, 2, 1763, 10380, 3, 2, 2, 2, 1765, 10385, 3, 2, 2, 2, 1767, 10398, 3, 2, 2, 2, 1769, 10411, 3, 2, 2, 2, 1771, 10419, 3, 2, 2, 2, 1773, 10425, 3, 2, 2, 2, 1775, 10435, 3, 2, 2, 2, 1777, 10440, 3, 2, 2, 2, 1779, 10446, 3, 2, 2, 2, 1781, 10458, 3, 2, 2, 2, 1783, 10471, 3, 2, 2, 2, 1785, 10475, 3, 2, 2, 2, 1787, 10480, 3, 2, 2, 2, 1789, 10485, 3, 2, 2, 2, 1791, 10497, 3, 2, 2, 2, 1793, 10502, 3, 2, 2, 2, 1795, 10506, 3, 2, 2, 2, 1797, 10512, 3, 2, 2, 2, 1799, 10520, 3, 2, 2, 2, 1801, 10548, 3, 2, 2, 2, 1803, 10553, 3, 2, 2, 2, 1805, 10558, 3, 2, 2, 2, 1807, 10569, 3, 2, 2, 2, 1809, 10576, 3, 2, 2, 2, 1811, 10588, 3, 2, 2, 2, 1813, 10596, 3, 2, 2, 2, 1815, 10608, 3, 2, 2, 2, 1817, 10618, 3, 2, 2, 2, 1819, 10627, 3, 2, 2, 2, 1821, 10636, 3, 2, 2, 2, 1823, 10646, 3, 2, 2, 2, 1825, 10658, 3, 2, 2, 2, 1827, 10670, 3, 2, 2, 2, 1829, 10681, 3, 2, 2, 2, 1831, 10695, 3, 2, 2, 2, 1833, 10708, 3, 2, 2, 2, 1835, 10720, 3, 2, 2, 2, 1837, 10732, 3, 2, 2, 2, 1839, 10744, 3, 2, 2, 2, 1841, 10756, 3, 2, 2, 2, 1843, 10766, 3, 2, 2, 2, 1845, 10782, 3, 2, 2, 2, 1847, 10802, 3, 2, 2, 2, 1849, 10821, 3, 2, 2, 2, 1851, 10840, 3, 2, 2, 2, 1853, 10870, 3, 2, 2, 2, 1855, 10899, 3, 2, 2, 2, 1857, 10919, 3, 2, 2, 2, 1859, 10938, 3, 2, 2, 2, 1861, 10951, 3, 2, 2, 2, 1863, 10967, 3, 2, 2, 2, 1865, 10983, 3, 2, 2, 2, 1867, 10998, 3, 2, 2, 2, 1869, 11015, 3, 2, 2, 2, 1871, 11031, 3, 2, 2, 2, 1873, 11045, 3, 2, 2, 2, 1875, 11057, 3, 2, 2, 2, 1877, 11068, 3, 2, 2, 2, 1879, 11080, 3, 2, 2, 2, 1881, 11096, 3, 2, 2, 2, 1883, 11111, 3, 2, 2, 2, 1885, 11133, 3, 2, 2, 2, 1887, 11154, 3, 2, 2, 2, 1889, 11171, 3, 2, 2, 2, 1891, 11190, 3, 2, 2, 2, 1893, 11210, 3, 2, 2, 2, 1895, 11223, 3, 2, 2, 2, 1897, 11235, 3, 2, 2, 2, 1899, 11252, 3, 2, 2, 2, 1901, 11268, 3, 2, 2, 2, 1903, 11278, 3, 2, 2, 2, 1905, 11294, 3, 2, 2, 2, 1907, 11309, 3, 2, 2, 2, 1909, 11328, 3, 2, 2, 2, 1911, 11346, 3, 2, 2, 2, 1913, 11354, 3, 2, 2, 2, 1915, 11368, 3, 2, 2, 2, 1917, 11385, 3, 2, 2, 2, 1919, 11396, 3, 2, 2, 2, 1921, 11405, 3, 2, 2, 2, 1923, 11415, 3, 2, 2, 2, 1925, 11420, 3, 2, 2, 2, 1927, 11425, 3, 2, 2, 2, 1929, 11433, 3, 2, 2, 2, 1931, 11449, 3, 2, 2, 2, 1933, 11457, 3, 2, 2, 2, 1935, 11469, 3, 2, 2, 2, 1937, 11473, 3, 2, 2, 2, 1939, 11482, 3, 2, 2, 2, 1941, 11495, 3, 2, 2, 2, 1943, 11509, 3, 2, 2, 2, 1945, 11521, 3, 2, 2, 2, 1947, 11533, 3, 2, 2, 2, 1949, 11541, 3, 2, 2, 2, 1951, 11551, 3, 2, 2, 2, 1953, 11559, 3, 2, 2, 2, 1955, 11570, 3, 2, 2, 2, 1957, 11576, 3, 2, 2, 2, 1959, 11587, 3, 2, 2, 2, 1961, 11607, 3, 2, 2, 2, 1963, 11613, 3, 2, 2, 2, 1965, 11628, 3, 2, 2, 2, 1967, 11638, 3, 2, 2, 2, 1969, 11644, 3, 2, 2, 2, 1971, 11649, 3, 2, 2, 2, 1973, 11660, 3, 2, 2, 2, 1975, 11687, 3, 2, 2, 2, 1977, 11695, 3, 2, 2, 2, 1979, 11729, 3, 2, 2, 2, 1981, 11737, 3, 2, 2, 2, 1983, 11748, 3, 2, 2, 2, 1985, 11762, 3, 2, 2, 2, 1987, 11769, 3, 2, 2, 2, 1989, 11778, 3, 2, 2, 2, 1991, 11780, 3, 2, 2, 2, 1993, 11782, 3, 2, 2, 2, 1995, 11785, 3, 2, 2, 2, 1997, 11788, 3, 2, 2, 2, 1999, 11791, 3, 2, 2, 2, 2001, 11794, 3, 2, 2, 2, 2003, 11797, 3, 2, 2, 2, 2005, 11800, 3, 2, 2, 2, 2007, 11803, 3, 2, 2, 2, 2009, 11806, 3, 2, 2, 2, 2011, 11809, 3, 2, 2, 2, 2013, 11811, 3, 2, 2, 2, 2015, 11813, 3, 2, 2, 2, 2017, 11815, 3, 2, 2, 2, 2019, 11817, 3, 2, 2, 2, 2021, 11820, 3, 2, 2, 2, 2023, 11822, 3, 2, 2, 2, 2025, 11826, 3, 2, 2, 2, 2027, 11830, 3, 2, 2, 2, 2029, 11832, 3, 2, 2, 2, 2031, 11834, 3, 2, 2, 2, 2033, 11836, 3, 2, 2, 2, 2035, 11838, 3, 2, 2, 2, 2037, 11840, 3, 2, 2, 2, 2039, 11842, 3, 2, 2, 2, 2041, 11844, 3, 2, 2, 2, 2043, 11846, 3, 2, 2, 2, 2045, 11848, 3, 2, 2, 2, 2047, 11850, 3, 2, 2, 2, 2049, 11852, 3, 2, 2, 2, 2051, 11854, 3, 2, 2, 2, 2053, 11856, 3, 2, 2, 2, 2055, 11858, 3, 2, 2, 2, 2057, 11860, 3, 2, 2, 2, 2059, 11862, 3, 2, 2, 2, 2061, 11864, 3, 2, 2, 2, 2063, 11866, 3, 2, 2, 2, 2065, 11868, 3, 2, 2, 2, 2067, 11870, 3, 2, 2, 2, 2069, 11875, 3, 2, 2, 2, 2071, 11877, 3, 2, 2, 2, 2073, 11882, 3, 2, 2, 2, 2075, 11888, 3, 2, 2, 2, 2077, 11894, 3, 2, 2, 2, 2079, 11897, 3, 2, 2, 2, 2081, 11920, 3, 2, 2, 2, 2083, 11965, 3, 2, 2, 2, 2085, 11967, 3, 2, 2, 2, 2087, 11970, 3, 2, 2, 2, 2089, 11972, 3, 2, 2, 2, 2091, 11975, 3, 2, 2, 2, 2093, 11978, 3, 2, 2, 2, 2095, 11980, 3, 2, 2, 2, 2097, 11992, 3, 2, 2, 2, 2099, 12001, 3, 2, 2, 2, 2101, 12012, 3, 2, 2, 2, 2103, 12063, 3, 2, 2, 2, 2105, 12065, 3, 2, 2, 2, 2107, 12092, 3, 2, 2, 2, 2109, 12107, 3, 2, 2, 2, 2111, 12109, 3, 2, 2, 2, 2113, 12122, 3, 2, 2, 2, 2115, 12135, 3, 2, 2, 2, 2117, 12137, 3, 2, 2, 2, 2119, 12139, 3, 2, 2, 2, 2121, 12148, 3, 2, 2, 2, 2123, 2125, 9, 2, 2, 2, 2124, 2123, 3, 2, 2, 2, 2125, 2126, 3, 2, 2, 2, 2126, 2124, 3, 2, 2, 2, 2126, 2127, 3, 2, 2, 2, 2127, 2128, 3, 2, 2, 2, 2128, 2129, 8, 2, 2, 2, 2129, 4, 3, 2, 2, 2, 2130, 2131, 7, 49, 2, 2, 2131, 2132, 7, 44, 2, 2, 2132, 2133, 7, 35, 2, 2, 2133, 2135, 3, 2, 2, 2, 2134, 2136, 11, 2, 2, 2, 2135, 2134, 3, 2, 2, 2, 2136, 2137, 3, 2, 2, 2, 2137, 2138, 3, 2, 2, 2, 2137, 2135, 3, 2, 2, 2, 2138, 2139, 3, 2, 2, 2, 2139, 2140, 7, 44, 2, 2, 2140, 2141, 7, 49, 2, 2, 2141, 2142, 3, 2, 2, 2, 2142, 2143, 8, 3, 3, 2, 2143, 6, 3, 2, 2, 2, 2144, 2145, 7, 49, 2, 2, 2145, 2146, 7, 44, 2, 2, 2146, 2150, 3, 2, 2, 2, 2147, 2149, 11, 2, 2, 2, 2148, 2147, 3, 2, 2, 2, 2149, 2152, 3, 2, 2, 2, 2150, 2151, 3, 2, 2, 2, 2150, 2148, 3, 2, 2, 2, 2151, 2153, 3, 2, 2, 2, 2152, 2150, 3, 2, 2, 2, 2153, 2154, 7, 44, 2, 2, 2154, 2155, 7, 49, 2, 2, 2155, 2156, 3, 2, 2, 2, 2156, 2157, 8, 4, 2, 2, 2157, 8, 3, 2, 2, 2, 2158, 2159, 7, 47, 2, 2, 2159, 2160, 7, 47, 2, 2, 2160, 2163, 7, 34, 2, 2, 2161, 2163, 7, 37, 2, 2, 2162, 2158, 3, 2, 2, 2, 2162, 2161, 3, 2, 2, 2, 2163, 2167, 3, 2, 2, 2, 2164, 2166, 10, 3, 2, 2, 2165, 2164, 3, 2, 2, 2, 2166, 2169, 3, 2, 2, 2, 2167, 2165, 3, 2, 2, 2, 2167, 2168, 3, 2, 2, 2, 2168, 2175, 3, 2, 2, 2, 2169, 2167, 3, 2, 2, 2, 2170, 2172, 7, 15, 2, 2, 2171, 2170, 3, 2, 2, 2, 2171, 2172, 3, 2, 2, 2, 2172, 2173, 3, 2, 2, 2, 2173, 2176, 7, 12, 2, 2, 2174, 2176, 7, 2, 2, 3, 2175, 2171, 3, 2, 2, 2, 2175, 2174, 3, 2, 2, 2, 2176, 2188, 3, 2, 2, 2, 2177, 2178, 7, 47, 2, 2, 2178, 2179, 7, 47, 2, 2, 2179, 2185, 3, 2, 2, 2, 2180, 2182, 7, 15, 2, 2, 2181, 2180, 3, 2, 2, 2, 2181, 2182, 3, 2, 2, 2, 2182, 2183, 3, 2, 2, 2, 2183, 2186, 7, 12, 2, 2, 2184, 2186, 7, 2, 2, 3, 2185, 2181, 3, 2, 2, 2, 2185, 2184, 3, 2, 2, 2, 2186, 2188, 3, 2, 2, 2, 2187, 2162, 3, 2, 2, 2, 2187, 2177, 3, 2, 2, 2, 2188, 2189, 3, 2, 2, 2, 2189, 2190, 8, 5, 2, 2, 2190, 10, 3, 2, 2, 2, 2191, 2192, 7, 67, 2, 2, 2192, 2193, 7, 70, 2, 2, 2193, 2194, 7, 70, 2, 2, 2194, 12, 3, 2, 2, 2, 2195, 2196, 7, 67, 2, 2, 2196, 2197, 7, 78, 2, 2, 2197, 2198, 7, 78, 2, 2, 2198, 14, 3, 2, 2, 2, 2199, 2200, 7, 67, 2, 2, 2200, 2201, 7, 78, 2, 2, 2201, 2202, 7, 86, 2, 2, 2202, 2203, 7, 71, 2, 2, 2203, 2204, 7, 84, 2, 2, 2204, 16, 3, 2, 2, 2, 2205, 2206, 7, 67, 2, 2, 2206, 2207, 7, 78, 2, 2, 2207, 2208, 7, 89, 2, 2, 2208, 2209, 7, 67, 2, 2, 2209, 2210, 7, 91, 2, 2, 2210, 2211, 7, 85, 2, 2, 2211, 18, 3, 2, 2, 2, 2212, 2213, 7, 67, 2, 2, 2213, 2214, 7, 80, 2, 2, 2214, 2215, 7, 67, 2, 2, 2215, 2216, 7, 78, 2, 2, 2216, 2217, 7, 91, 2, 2, 2217, 2218, 7, 92, 2, 2, 2218, 2219, 7, 71, 2, 2, 2219, 20, 3, 2, 2, 2, 2220, 2221, 7, 67, 2, 2, 2221, 2222, 7, 80, 2, 2, 2222, 2223, 7, 70, 2, 2, 2223, 22, 3, 2, 2, 2, 2224, 2225, 7, 67, 2, 2, 2225, 2226, 7, 85, 2, 2, 2226, 24, 3, 2, 2, 2, 2227, 2228, 7, 67, 2, 2, 2228, 2229, 7, 85, 2, 2, 2229, 2230, 7, 69, 2, 2, 2230, 26, 3, 2, 2, 2, 2231, 2232, 7, 68, 2, 2, 2232, 2233, 7, 71, 2, 2, 2233, 2234, 7, 72, 2, 2, 2234, 2235, 7, 81, 2, 2, 2235, 2236, 7, 84, 2, 2, 2236, 2237, 7, 71, 2, 2, 2237, 28, 3, 2, 2, 2, 2238, 2239, 7, 68, 2, 2, 2239, 2240, 7, 71, 2, 2, 2240, 2241, 7, 86, 2, 2, 2241, 2242, 7, 89, 2, 2, 2242, 2243, 7, 71, 2, 2, 2243, 2244, 7, 71, 2, 2, 2244, 2245, 7, 80, 2, 2, 2245, 30, 3, 2, 2, 2, 2246, 2247, 7, 68, 2, 2, 2247, 2248, 7, 81, 2, 2, 2248, 2249, 7, 86, 2, 2, 2249, 2250, 7, 74, 2, 2, 2250, 32, 3, 2, 2, 2, 2251, 2252, 7, 68, 2, 2, 2252, 2253, 7, 91, 2, 2, 2253, 34, 3, 2, 2, 2, 2254, 2255, 7, 69, 2, 2, 2255, 2256, 7, 67, 2, 2, 2256, 2257, 7, 78, 2, 2, 2257, 2258, 7, 78, 2, 2, 2258, 36, 3, 2, 2, 2, 2259, 2260, 7, 69, 2, 2, 2260, 2261, 7, 67, 2, 2, 2261, 2262, 7, 85, 2, 2, 2262, 2263, 7, 69, 2, 2, 2263, 2264, 7, 67, 2, 2, 2264, 2265, 7, 70, 2, 2, 2265, 2266, 7, 71, 2, 2, 2266, 38, 3, 2, 2, 2, 2267, 2268, 7, 69, 2, 2, 2268, 2269, 7, 67, 2, 2, 2269, 2270, 7, 85, 2, 2, 2270, 2271, 7, 71, 2, 2, 2271, 40, 3, 2, 2, 2, 2272, 2273, 7, 69, 2, 2, 2273, 2274, 7, 67, 2, 2, 2274, 2275, 7, 85, 2, 2, 2275, 2276, 7, 86, 2, 2, 2276, 42, 3, 2, 2, 2, 2277, 2278, 7, 69, 2, 2, 2278, 2279, 7, 74, 2, 2, 2279, 2280, 7, 67, 2, 2, 2280, 2281, 7, 80, 2, 2, 2281, 2282, 7, 73, 2, 2, 2282, 2283, 7, 71, 2, 2, 2283, 44, 3, 2, 2, 2, 2284, 2285, 7, 69, 2, 2, 2285, 2286, 7, 74, 2, 2, 2286, 2287, 7, 67, 2, 2, 2287, 2288, 7, 84, 2, 2, 2288, 2289, 7, 67, 2, 2, 2289, 2290, 7, 69, 2, 2, 2290, 2291, 7, 86, 2, 2, 2291, 2292, 7, 71, 2, 2, 2292, 2293, 7, 84, 2, 2, 2293, 46, 3, 2, 2, 2, 2294, 2295, 7, 69, 2, 2, 2295, 2296, 7, 74, 2, 2, 2296, 2297, 7, 71, 2, 2, 2297, 2298, 7, 69, 2, 2, 2298, 2299, 7, 77, 2, 2, 2299, 48, 3, 2, 2, 2, 2300, 2301, 7, 69, 2, 2, 2301, 2302, 7, 81, 2, 2, 2302, 2303, 7, 78, 2, 2, 2303, 2304, 7, 78, 2, 2, 2304, 2305, 7, 67, 2, 2, 2305, 2306, 7, 86, 2, 2, 2306, 2307, 7, 71, 2, 2, 2307, 50, 3, 2, 2, 2, 2308, 2309, 7, 69, 2, 2, 2309, 2310, 7, 81, 2, 2, 2310, 2311, 7, 78, 2, 2, 2311, 2312, 7, 87, 2, 2, 2312, 2313, 7, 79, 2, 2, 2313, 2314, 7, 80, 2, 2, 2314, 52, 3, 2, 2, 2, 2315, 2316, 7, 69, 2, 2, 2316, 2317, 7, 81, 2, 2, 2317, 2318, 7, 80, 2, 2, 2318, 2319, 7, 70, 2, 2, 2319, 2320, 7, 75, 2, 2, 2320, 2321, 7, 86, 2, 2, 2321, 2322, 7, 75, 2, 2, 2322, 2323, 7, 81, 2, 2, 2323, 2324, 7, 80, 2, 2, 2324, 54, 3, 2, 2, 2, 2325, 2326, 7, 69, 2, 2, 2326, 2327, 7, 81, 2, 2, 2327, 2328, 7, 80, 2, 2, 2328, 2329, 7, 85, 2, 2, 2329, 2330, 7, 86, 2, 2, 2330, 2331, 7, 84, 2, 2, 2331, 2332, 7, 67, 2, 2, 2332, 2333, 7, 75, 2, 2, 2333, 2334, 7, 80, 2, 2, 2334, 2335, 7, 86, 2, 2, 2335, 56, 3, 2, 2, 2, 2336, 2337, 7, 69, 2, 2, 2337, 2338, 7, 81, 2, 2, 2338, 2339, 7, 80, 2, 2, 2339, 2340, 7, 86, 2, 2, 2340, 2341, 7, 75, 2, 2, 2341, 2342, 7, 80, 2, 2, 2342, 2343, 7, 87, 2, 2, 2343, 2344, 7, 71, 2, 2, 2344, 58, 3, 2, 2, 2, 2345, 2346, 7, 69, 2, 2, 2346, 2347, 7, 81, 2, 2, 2347, 2348, 7, 80, 2, 2, 2348, 2349, 7, 88, 2, 2, 2349, 2350, 7, 71, 2, 2, 2350, 2351, 7, 84, 2, 2, 2351, 2352, 7, 86, 2, 2, 2352, 60, 3, 2, 2, 2, 2353, 2354, 7, 69, 2, 2, 2354, 2355, 7, 84, 2, 2, 2355, 2356, 7, 71, 2, 2, 2356, 2357, 7, 67, 2, 2, 2357, 2358, 7, 86, 2, 2, 2358, 2359, 7, 71, 2, 2, 2359, 62, 3, 2, 2, 2, 2360, 2361, 7, 69, 2, 2, 2361, 2362, 7, 84, 2, 2, 2362, 2363, 7, 81, 2, 2, 2363, 2364, 7, 85, 2, 2, 2364, 2365, 7, 85, 2, 2, 2365, 64, 3, 2, 2, 2, 2366, 2367, 7, 69, 2, 2, 2367, 2368, 7, 87, 2, 2, 2368, 2369, 7, 84, 2, 2, 2369, 2370, 7, 84, 2, 2, 2370, 2371, 7, 71, 2, 2, 2371, 2372, 7, 80, 2, 2, 2372, 2373, 7, 86, 2, 2, 2373, 66, 3, 2, 2, 2, 2374, 2375, 7, 69, 2, 2, 2375, 2376, 7, 87, 2, 2, 2376, 2377, 7, 84, 2, 2, 2377, 2378, 7, 84, 2, 2, 2378, 2379, 7, 71, 2, 2, 2379, 2380, 7, 80, 2, 2, 2380, 2381, 7, 86, 2, 2, 2381, 2382, 7, 97, 2, 2, 2382, 2383, 7, 87, 2, 2, 2383, 2384, 7, 85, 2, 2, 2384, 2385, 7, 71, 2, 2, 2385, 2386, 7, 84, 2, 2, 2386, 68, 3, 2, 2, 2, 2387, 2388, 7, 69, 2, 2, 2388, 2389, 7, 87, 2, 2, 2389, 2390, 7, 84, 2, 2, 2390, 2391, 7, 85, 2, 2, 2391, 2392, 7, 81, 2, 2, 2392, 2393, 7, 84, 2, 2, 2393, 70, 3, 2, 2, 2, 2394, 2395, 7, 70, 2, 2, 2395, 2396, 7, 67, 2, 2, 2396, 2397, 7, 86, 2, 2, 2397, 2398, 7, 67, 2, 2, 2398, 2399, 7, 68, 2, 2, 2399, 2400, 7, 67, 2, 2, 2400, 2401, 7, 85, 2, 2, 2401, 2402, 7, 71, 2, 2, 2402, 72, 3, 2, 2, 2, 2403, 2404, 7, 70, 2, 2, 2404, 2405, 7, 67, 2, 2, 2405, 2406, 7, 86, 2, 2, 2406, 2407, 7, 67, 2, 2, 2407, 2408, 7, 68, 2, 2, 2408, 2409, 7, 67, 2, 2, 2409, 2410, 7, 85, 2, 2, 2410, 2411, 7, 71, 2, 2, 2411, 2412, 7, 85, 2, 2, 2412, 74, 3, 2, 2, 2, 2413, 2414, 7, 70, 2, 2, 2414, 2415, 7, 71, 2, 2, 2415, 2416, 7, 69, 2, 2, 2416, 2417, 7, 78, 2, 2, 2417, 2418, 7, 67, 2, 2, 2418, 2419, 7, 84, 2, 2, 2419, 2420, 7, 71, 2, 2, 2420, 76, 3, 2, 2, 2, 2421, 2422, 7, 70, 2, 2, 2422, 2423, 7, 71, 2, 2, 2423, 2424, 7, 72, 2, 2, 2424, 2425, 7, 67, 2, 2, 2425, 2426, 7, 87, 2, 2, 2426, 2427, 7, 78, 2, 2, 2427, 2428, 7, 86, 2, 2, 2428, 78, 3, 2, 2, 2, 2429, 2430, 7, 70, 2, 2, 2430, 2431, 7, 71, 2, 2, 2431, 2432, 7, 78, 2, 2, 2432, 2433, 7, 67, 2, 2, 2433, 2434, 7, 91, 2, 2, 2434, 2435, 7, 71, 2, 2, 2435, 2436, 7, 70, 2, 2, 2436, 80, 3, 2, 2, 2, 2437, 2438, 7, 70, 2, 2, 2438, 2439, 7, 71, 2, 2, 2439, 2440, 7, 78, 2, 2, 2440, 2441, 7, 71, 2, 2, 2441, 2442, 7, 86, 2, 2, 2442, 2443, 7, 71, 2, 2, 2443, 82, 3, 2, 2, 2, 2444, 2445, 7, 70, 2, 2, 2445, 2446, 7, 71, 2, 2, 2446, 2447, 7, 85, 2, 2, 2447, 2448, 7, 69, 2, 2, 2448, 84, 3, 2, 2, 2, 2449, 2450, 7, 70, 2, 2, 2450, 2451, 7, 71, 2, 2, 2451, 2452, 7, 85, 2, 2, 2452, 2453, 7, 69, 2, 2, 2453, 2454, 7, 84, 2, 2, 2454, 2455, 7, 75, 2, 2, 2455, 2456, 7, 68, 2, 2, 2456, 2457, 7, 71, 2, 2, 2457, 86, 3, 2, 2, 2, 2458, 2459, 7, 70, 2, 2, 2459, 2460, 7, 71, 2, 2, 2460, 2461, 7, 86, 2, 2, 2461, 2462, 7, 71, 2, 2, 2462, 2463, 7, 84, 2, 2, 2463, 2464, 7, 79, 2, 2, 2464, 2465, 7, 75, 2, 2, 2465, 2466, 7, 80, 2, 2, 2466, 2467, 7, 75, 2, 2, 2467, 2468, 7, 85, 2, 2, 2468, 2469, 7, 86, 2, 2, 2469, 2470, 7, 75, 2, 2, 2470, 2471, 7, 69, 2, 2, 2471, 88, 3, 2, 2, 2, 2472, 2473, 7, 70, 2, 2, 2473, 2474, 7, 75, 2, 2, 2474, 2475, 7, 67, 2, 2, 2475, 2476, 7, 73, 2, 2, 2476, 2477, 7, 80, 2, 2, 2477, 2478, 7, 81, 2, 2, 2478, 2479, 7, 85, 2, 2, 2479, 2480, 7, 86, 2, 2, 2480, 2481, 7, 75, 2, 2, 2481, 2482, 7, 69, 2, 2, 2482, 2483, 7, 85, 2, 2, 2483, 90, 3, 2, 2, 2, 2484, 2485, 7, 70, 2, 2, 2485, 2486, 7, 75, 2, 2, 2486, 2487, 7, 85, 2, 2, 2487, 2488, 7, 86, 2, 2, 2488, 2489, 7, 75, 2, 2, 2489, 2490, 7, 80, 2, 2, 2490, 2491, 7, 69, 2, 2, 2491, 2492, 7, 86, 2, 2, 2492, 92, 3, 2, 2, 2, 2493, 2494, 7, 70, 2, 2, 2494, 2495, 7, 75, 2, 2, 2495, 2496, 7, 85, 2, 2, 2496, 2497, 7, 86, 2, 2, 2497, 2498, 7, 75, 2, 2, 2498, 2499, 7, 80, 2, 2, 2499, 2500, 7, 69, 2, 2, 2500, 2501, 7, 86, 2, 2, 2501, 2502, 7, 84, 2, 2, 2502, 2503, 7, 81, 2, 2, 2503, 2504, 7, 89, 2, 2, 2504, 94, 3, 2, 2, 2, 2505, 2506, 7, 70, 2, 2, 2506, 2507, 7, 84, 2, 2, 2507, 2508, 7, 81, 2, 2, 2508, 2509, 7, 82, 2, 2, 2509, 96, 3, 2, 2, 2, 2510, 2511, 7, 71, 2, 2, 2511, 2512, 7, 67, 2, 2, 2512, 2513, 7, 69, 2, 2, 2513, 2514, 7, 74, 2, 2, 2514, 98, 3, 2, 2, 2, 2515, 2516, 7, 71, 2, 2, 2516, 2517, 7, 78, 2, 2, 2517, 2518, 7, 85, 2, 2, 2518, 2519, 7, 71, 2, 2, 2519, 100, 3, 2, 2, 2, 2520, 2521, 7, 71, 2, 2, 2521, 2522, 7, 78, 2, 2, 2522, 2523, 7, 85, 2, 2, 2523, 2524, 7, 71, 2, 2, 2524, 2525, 7, 75, 2, 2, 2525, 2526, 7, 72, 2, 2, 2526, 102, 3, 2, 2, 2, 2527, 2528, 7, 71, 2, 2, 2528, 2529, 7, 80, 2, 2, 2529, 2530, 7, 69, 2, 2, 2530, 2531, 7, 78, 2, 2, 2531, 2532, 7, 81, 2, 2, 2532, 2533, 7, 85, 2, 2, 2533, 2534, 7, 71, 2, 2, 2534, 2535, 7, 70, 2, 2, 2535, 104, 3, 2, 2, 2, 2536, 2537, 7, 71, 2, 2, 2537, 2538, 7, 85, 2, 2, 2538, 2539, 7, 69, 2, 2, 2539, 2540, 7, 67, 2, 2, 2540, 2541, 7, 82, 2, 2, 2541, 2542, 7, 71, 2, 2, 2542, 2543, 7, 70, 2, 2, 2543, 106, 3, 2, 2, 2, 2544, 2545, 7, 71, 2, 2, 2545, 2546, 7, 90, 2, 2, 2546, 2547, 7, 75, 2, 2, 2547, 2548, 7, 85, 2, 2, 2548, 2549, 7, 86, 2, 2, 2549, 2550, 7, 85, 2, 2, 2550, 108, 3, 2, 2, 2, 2551, 2552, 7, 71, 2, 2, 2552, 2553, 7, 90, 2, 2, 2553, 2554, 7, 75, 2, 2, 2554, 2555, 7, 86, 2, 2, 2555, 110, 3, 2, 2, 2, 2556, 2557, 7, 71, 2, 2, 2557, 2558, 7, 90, 2, 2, 2558, 2559, 7, 82, 2, 2, 2559, 2560, 7, 78, 2, 2, 2560, 2561, 7, 67, 2, 2, 2561, 2562, 7, 75, 2, 2, 2562, 2563, 7, 80, 2, 2, 2563, 112, 3, 2, 2, 2, 2564, 2565, 7, 72, 2, 2, 2565, 2566, 7, 67, 2, 2, 2566, 2567, 7, 78, 2, 2, 2567, 2568, 7, 85, 2, 2, 2568, 2569, 7, 71, 2, 2, 2569, 114, 3, 2, 2, 2, 2570, 2571, 7, 72, 2, 2, 2571, 2572, 7, 71, 2, 2, 2572, 2573, 7, 86, 2, 2, 2573, 2574, 7, 69, 2, 2, 2574, 2575, 7, 74, 2, 2, 2575, 116, 3, 2, 2, 2, 2576, 2577, 7, 72, 2, 2, 2577, 2578, 7, 81, 2, 2, 2578, 2579, 7, 84, 2, 2, 2579, 118, 3, 2, 2, 2, 2580, 2581, 7, 72, 2, 2, 2581, 2582, 7, 81, 2, 2, 2582, 2583, 7, 84, 2, 2, 2583, 2584, 7, 69, 2, 2, 2584, 2585, 7, 71, 2, 2, 2585, 120, 3, 2, 2, 2, 2586, 2587, 7, 72, 2, 2, 2587, 2588, 7, 81, 2, 2, 2588, 2589, 7, 84, 2, 2, 2589, 2590, 7, 71, 2, 2, 2590, 2591, 7, 75, 2, 2, 2591, 2592, 7, 73, 2, 2, 2592, 2593, 7, 80, 2, 2, 2593, 122, 3, 2, 2, 2, 2594, 2595, 7, 72, 2, 2, 2595, 2596, 7, 84, 2, 2, 2596, 2597, 7, 81, 2, 2, 2597, 2598, 7, 79, 2, 2, 2598, 124, 3, 2, 2, 2, 2599, 2600, 7, 72, 2, 2, 2600, 2601, 7, 87, 2, 2, 2601, 2602, 7, 78, 2, 2, 2602, 2603, 7, 78, 2, 2, 2603, 2604, 7, 86, 2, 2, 2604, 2605, 7, 71, 2, 2, 2605, 2606, 7, 90, 2, 2, 2606, 2607, 7, 86, 2, 2, 2607, 126, 3, 2, 2, 2, 2608, 2609, 7, 73, 2, 2, 2609, 2610, 7, 71, 2, 2, 2610, 2611, 7, 80, 2, 2, 2611, 2612, 7, 71, 2, 2, 2612, 2613, 7, 84, 2, 2, 2613, 2614, 7, 67, 2, 2, 2614, 2615, 7, 86, 2, 2, 2615, 2616, 7, 71, 2, 2, 2616, 2617, 7, 70, 2, 2, 2617, 128, 3, 2, 2, 2, 2618, 2619, 7, 73, 2, 2, 2619, 2620, 7, 71, 2, 2, 2620, 2621, 7, 86, 2, 2, 2621, 130, 3, 2, 2, 2, 2622, 2623, 7, 73, 2, 2, 2623, 2624, 7, 84, 2, 2, 2624, 2625, 7, 67, 2, 2, 2625, 2626, 7, 80, 2, 2, 2626, 2627, 7, 86, 2, 2, 2627, 132, 3, 2, 2, 2, 2628, 2629, 7, 73, 2, 2, 2629, 2630, 7, 84, 2, 2, 2630, 2631, 7, 81, 2, 2, 2631, 2632, 7, 87, 2, 2, 2632, 2633, 7, 82, 2, 2, 2633, 134, 3, 2, 2, 2, 2634, 2635, 7, 74, 2, 2, 2635, 2636, 7, 67, 2, 2, 2636, 2637, 7, 88, 2, 2, 2637, 2638, 7, 75, 2, 2, 2638, 2639, 7, 80, 2, 2, 2639, 2640, 7, 73, 2, 2, 2640, 136, 3, 2, 2, 2, 2641, 2642, 7, 74, 2, 2, 2642, 2643, 7, 75, 2, 2, 2643, 2644, 7, 73, 2, 2, 2644, 2645, 7, 74, 2, 2, 2645, 2646, 7, 97, 2, 2, 2646, 2647, 7, 82, 2, 2, 2647, 2648, 7, 84, 2, 2, 2648, 2649, 7, 75, 2, 2, 2649, 2650, 7, 81, 2, 2, 2650, 2651, 7, 84, 2, 2, 2651, 2652, 7, 75, 2, 2, 2652, 2653, 7, 86, 2, 2, 2653, 2654, 7, 91, 2, 2, 2654, 138, 3, 2, 2, 2, 2655, 2656, 7, 75, 2, 2, 2656, 2657, 7, 72, 2, 2, 2657, 140, 3, 2, 2, 2, 2658, 2659, 7, 75, 2, 2, 2659, 2660, 7, 73, 2, 2, 2660, 2661, 7, 80, 2, 2, 2661, 2662, 7, 81, 2, 2, 2662, 2663, 7, 84, 2, 2, 2663, 2664, 7, 71, 2, 2, 2664, 142, 3, 2, 2, 2, 2665, 2666, 7, 75, 2, 2, 2666, 2667, 7, 80, 2, 2, 2667, 144, 3, 2, 2, 2, 2668, 2669, 7, 75, 2, 2, 2669, 2670, 7, 80, 2, 2, 2670, 2671, 7, 70, 2, 2, 2671, 2672, 7, 71, 2, 2, 2672, 2673, 7, 90, 2, 2, 2673, 146, 3, 2, 2, 2, 2674, 2675, 7, 75, 2, 2, 2675, 2676, 7, 80, 2, 2, 2676, 2677, 7, 72, 2, 2, 2677, 2678, 7, 75, 2, 2, 2678, 2679, 7, 78, 2, 2, 2679, 2680, 7, 71, 2, 2, 2680, 148, 3, 2, 2, 2, 2681, 2682, 7, 75, 2, 2, 2682, 2683, 7, 80, 2, 2, 2683, 2684, 7, 80, 2, 2, 2684, 2685, 7, 71, 2, 2, 2685, 2686, 7, 84, 2, 2, 2686, 150, 3, 2, 2, 2, 2687, 2688, 7, 75, 2, 2, 2688, 2689, 7, 80, 2, 2, 2689, 2690, 7, 81, 2, 2, 2690, 2691, 7, 87, 2, 2, 2691, 2692, 7, 86, 2, 2, 2692, 152, 3, 2, 2, 2, 2693, 2694, 7, 75, 2, 2, 2694, 2695, 7, 80, 2, 2, 2695, 2696, 7, 85, 2, 2, 2696, 2697, 7, 71, 2, 2, 2697, 2698, 7, 84, 2, 2, 2698, 2699, 7, 86, 2, 2, 2699, 154, 3, 2, 2, 2, 2700, 2701, 7, 75, 2, 2, 2701, 2702, 7, 80, 2, 2, 2702, 2703, 7, 86, 2, 2, 2703, 2704, 7, 71, 2, 2, 2704, 2705, 7, 84, 2, 2, 2705, 2706, 7, 88, 2, 2, 2706, 2707, 7, 67, 2, 2, 2707, 2708, 7, 78, 2, 2, 2708, 156, 3, 2, 2, 2, 2709, 2710, 7, 75, 2, 2, 2710, 2711, 7, 80, 2, 2, 2711, 2712, 7, 86, 2, 2, 2712, 2713, 7, 81, 2, 2, 2713, 158, 3, 2, 2, 2, 2714, 2715, 7, 75, 2, 2, 2715, 2716, 7, 85, 2, 2, 2716, 160, 3, 2, 2, 2, 2717, 2718, 7, 75, 2, 2, 2718, 2719, 7, 86, 2, 2, 2719, 2720, 7, 71, 2, 2, 2720, 2721, 7, 84, 2, 2, 2721, 2722, 7, 67, 2, 2, 2722, 2723, 7, 86, 2, 2, 2723, 2724, 7, 71, 2, 2, 2724, 162, 3, 2, 2, 2, 2725, 2726, 7, 76, 2, 2, 2726, 2727, 7, 81, 2, 2, 2727, 2728, 7, 75, 2, 2, 2728, 2729, 7, 80, 2, 2, 2729, 164, 3, 2, 2, 2, 2730, 2731, 7, 77, 2, 2, 2731, 2732, 7, 71, 2, 2, 2732, 2733, 7, 91, 2, 2, 2733, 166, 3, 2, 2, 2, 2734, 2735, 7, 77, 2, 2, 2735, 2736, 7, 71, 2, 2, 2736, 2737, 7, 91, 2, 2, 2737, 2738, 7, 85, 2, 2, 2738, 168, 3, 2, 2, 2, 2739, 2740, 7, 77, 2, 2, 2740, 2741, 7, 75, 2, 2, 2741, 2742, 7, 78, 2, 2, 2742, 2743, 7, 78, 2, 2, 2743, 170, 3, 2, 2, 2, 2744, 2745, 7, 78, 2, 2, 2745, 2746, 7, 71, 2, 2, 2746, 2747, 7, 67, 2, 2, 2747, 2748, 7, 70, 2, 2, 2748, 2749, 7, 75, 2, 2, 2749, 2750, 7, 80, 2, 2, 2750, 2751, 7, 73, 2, 2, 2751, 172, 3, 2, 2, 2, 2752, 2753, 7, 78, 2, 2, 2753, 2754, 7, 71, 2, 2, 2754, 2755, 7, 67, 2, 2, 2755, 2756, 7, 88, 2, 2, 2756, 2757, 7, 71, 2, 2, 2757, 174, 3, 2, 2, 2, 2758, 2759, 7, 78, 2, 2, 2759, 2760, 7, 71, 2, 2, 2760, 2761, 7, 72, 2, 2, 2761, 2762, 7, 86, 2, 2, 2762, 176, 3, 2, 2, 2, 2763, 2764, 7, 78, 2, 2, 2764, 2765, 7, 75, 2, 2, 2765, 2766, 7, 77, 2, 2, 2766, 2767, 7, 71, 2, 2, 2767, 178, 3, 2, 2, 2, 2768, 2769, 7, 78, 2, 2, 2769, 2770, 7, 75, 2, 2, 2770, 2771, 7, 79, 2, 2, 2771, 2772, 7, 75, 2, 2, 2772, 2773, 7, 86, 2, 2, 2773, 180, 3, 2, 2, 2, 2774, 2775, 7, 78, 2, 2, 2775, 2776, 7, 75, 2, 2, 2776, 2777, 7, 80, 2, 2, 2777, 2778, 7, 71, 2, 2, 2778, 2779, 7, 67, 2, 2, 2779, 2780, 7, 84, 2, 2, 2780, 182, 3, 2, 2, 2, 2781, 2782, 7, 78, 2, 2, 2782, 2783, 7, 75, 2, 2, 2783, 2784, 7, 80, 2, 2, 2784, 2785, 7, 71, 2, 2, 2785, 2786, 7, 85, 2, 2, 2786, 184, 3, 2, 2, 2, 2787, 2788, 7, 78, 2, 2, 2788, 2789, 7, 81, 2, 2, 2789, 2790, 7, 67, 2, 2, 2790, 2791, 7, 70, 2, 2, 2791, 186, 3, 2, 2, 2, 2792, 2793, 7, 78, 2, 2, 2793, 2794, 7, 81, 2, 2, 2794, 2795, 7, 69, 2, 2, 2795, 2796, 7, 77, 2, 2, 2796, 188, 3, 2, 2, 2, 2797, 2798, 7, 78, 2, 2, 2798, 2799, 7, 81, 2, 2, 2799, 2800, 7, 81, 2, 2, 2800, 2801, 7, 82, 2, 2, 2801, 190, 3, 2, 2, 2, 2802, 2803, 7, 78, 2, 2, 2803, 2804, 7, 81, 2, 2, 2804, 2805, 7, 89, 2, 2, 2805, 2806, 7, 97, 2, 2, 2806, 2807, 7, 82, 2, 2, 2807, 2808, 7, 84, 2, 2, 2808, 2809, 7, 75, 2, 2, 2809, 2810, 7, 81, 2, 2, 2810, 2811, 7, 84, 2, 2, 2811, 2812, 7, 75, 2, 2, 2812, 2813, 7, 86, 2, 2, 2813, 2814, 7, 91, 2, 2, 2814, 192, 3, 2, 2, 2, 2815, 2816, 7, 79, 2, 2, 2816, 2817, 7, 67, 2, 2, 2817, 2818, 7, 85, 2, 2, 2818, 2819, 7, 86, 2, 2, 2819, 2820, 7, 71, 2, 2, 2820, 2821, 7, 84, 2, 2, 2821, 2822, 7, 97, 2, 2, 2822, 2823, 7, 68, 2, 2, 2823, 2824, 7, 75, 2, 2, 2824, 2825, 7, 80, 2, 2, 2825, 2826, 7, 70, 2, 2, 2826, 194, 3, 2, 2, 2, 2827, 2828, 7, 79, 2, 2, 2828, 2829, 7, 67, 2, 2, 2829, 2830, 7, 85, 2, 2, 2830, 2831, 7, 86, 2, 2, 2831, 2832, 7, 71, 2, 2, 2832, 2833, 7, 84, 2, 2, 2833, 2834, 7, 97, 2, 2, 2834, 2835, 7, 85, 2, 2, 2835, 2836, 7, 85, 2, 2, 2836, 2837, 7, 78, 2, 2, 2837, 2838, 7, 97, 2, 2, 2838, 2839, 7, 88, 2, 2, 2839, 2840, 7, 71, 2, 2, 2840, 2841, 7, 84, 2, 2, 2841, 2842, 7, 75, 2, 2, 2842, 2843, 7, 72, 2, 2, 2843, 2844, 7, 91, 2, 2, 2844, 2845, 7, 97, 2, 2, 2845, 2846, 7, 85, 2, 2, 2846, 2847, 7, 71, 2, 2, 2847, 2848, 7, 84, 2, 2, 2848, 2849, 7, 88, 2, 2, 2849, 2850, 7, 71, 2, 2, 2850, 2851, 7, 84, 2, 2, 2851, 2852, 7, 97, 2, 2, 2852, 2853, 7, 69, 2, 2, 2853, 2854, 7, 71, 2, 2, 2854, 2855, 7, 84, 2, 2, 2855, 2856, 7, 86, 2, 2, 2856, 196, 3, 2, 2, 2, 2857, 2858, 7, 79, 2, 2, 2858, 2859, 7, 67, 2, 2, 2859, 2860, 7, 86, 2, 2, 2860, 2861, 7, 69, 2, 2, 2861, 2862, 7, 74, 2, 2, 2862, 198, 3, 2, 2, 2, 2863, 2864, 7, 79, 2, 2, 2864, 2865, 7, 67, 2, 2, 2865, 2866, 7, 90, 2, 2, 2866, 2867, 7, 88, 2, 2, 2867, 2868, 7, 67, 2, 2, 2868, 2869, 7, 78, 2, 2, 2869, 2870, 7, 87, 2, 2, 2870, 2871, 7, 71, 2, 2, 2871, 200, 3, 2, 2, 2, 2872, 2873, 7, 79, 2, 2, 2873, 2874, 7, 81, 2, 2, 2874, 2875, 7, 70, 2, 2, 2875, 2876, 7, 75, 2, 2, 2876, 2877, 7, 72, 2, 2, 2877, 2878, 7, 75, 2, 2, 2878, 2879, 7, 71, 2, 2, 2879, 2880, 7, 85, 2, 2, 2880, 202, 3, 2, 2, 2, 2881, 2882, 7, 80, 2, 2, 2882, 2883, 7, 67, 2, 2, 2883, 2884, 7, 86, 2, 2, 2884, 2885, 7, 87, 2, 2, 2885, 2886, 7, 84, 2, 2, 2886, 2887, 7, 67, 2, 2, 2887, 2888, 7, 78, 2, 2, 2888, 204, 3, 2, 2, 2, 2889, 2890, 7, 80, 2, 2, 2890, 2891, 7, 81, 2, 2, 2891, 2892, 7, 86, 2, 2, 2892, 206, 3, 2, 2, 2, 2893, 2894, 7, 80, 2, 2, 2894, 2895, 7, 81, 2, 2, 2895, 2896, 7, 97, 2, 2, 2896, 2897, 7, 89, 2, 2, 2897, 2898, 7, 84, 2, 2, 2898, 2899, 7, 75, 2, 2, 2899, 2900, 7, 86, 2, 2, 2900, 2901, 7, 71, 2, 2, 2901, 2902, 7, 97, 2, 2, 2902, 2903, 7, 86, 2, 2, 2903, 2904, 7, 81, 2, 2, 2904, 2905, 7, 97, 2, 2, 2905, 2906, 7, 68, 2, 2, 2906, 2907, 7, 75, 2, 2, 2907, 2908, 7, 80, 2, 2, 2908, 2909, 7, 78, 2, 2, 2909, 2910, 7, 81, 2, 2, 2910, 2911, 7, 73, 2, 2, 2911, 208, 3, 2, 2, 2, 2912, 2913, 7, 80, 2, 2, 2913, 2914, 7, 87, 2, 2, 2914, 2915, 7, 78, 2, 2, 2915, 2916, 7, 78, 2, 2, 2916, 210, 3, 2, 2, 2, 2917, 2918, 7, 80, 2, 2, 2918, 2919, 7, 87, 2, 2, 2919, 2920, 7, 79, 2, 2, 2920, 2921, 7, 68, 2, 2, 2921, 2922, 7, 71, 2, 2, 2922, 2923, 7, 84, 2, 2, 2923, 212, 3, 2, 2, 2, 2924, 2925, 7, 81, 2, 2, 2925, 2926, 7, 80, 2, 2, 2926, 214, 3, 2, 2, 2, 2927, 2928, 7, 81, 2, 2, 2928, 2929, 7, 82, 2, 2, 2929, 2930, 7, 86, 2, 2, 2930, 2931, 7, 75, 2, 2, 2931, 2932, 7, 79, 2, 2, 2932, 2933, 7, 75, 2, 2, 2933, 2934, 7, 92, 2, 2, 2934, 2935, 7, 71, 2, 2, 2935, 216, 3, 2, 2, 2, 2936, 2937, 7, 81, 2, 2, 2937, 2938, 7, 82, 2, 2, 2938, 2939, 7, 86, 2, 2, 2939, 2940, 7, 75, 2, 2, 2940, 2941, 7, 81, 2, 2, 2941, 2942, 7, 80, 2, 2, 2942, 218, 3, 2, 2, 2, 2943, 2944, 7, 81, 2, 2, 2944, 2945, 7, 82, 2, 2, 2945, 2946, 7, 86, 2, 2, 2946, 2947, 7, 75, 2, 2, 2947, 2948, 7, 81, 2, 2, 2948, 2949, 7, 80, 2, 2, 2949, 2950, 7, 67, 2, 2, 2950, 2951, 7, 78, 2, 2, 2951, 2952, 7, 78, 2, 2, 2952, 2953, 7, 91, 2, 2, 2953, 220, 3, 2, 2, 2, 2954, 2955, 7, 81, 2, 2, 2955, 2956, 7, 84, 2, 2, 2956, 222, 3, 2, 2, 2, 2957, 2958, 7, 81, 2, 2, 2958, 2959, 7, 84, 2, 2, 2959, 2960, 7, 70, 2, 2, 2960, 2961, 7, 71, 2, 2, 2961, 2962, 7, 84, 2, 2, 2962, 224, 3, 2, 2, 2, 2963, 2964, 7, 81, 2, 2, 2964, 2965, 7, 87, 2, 2, 2965, 2966, 7, 86, 2, 2, 2966, 226, 3, 2, 2, 2, 2967, 2968, 7, 81, 2, 2, 2968, 2969, 7, 87, 2, 2, 2969, 2970, 7, 86, 2, 2, 2970, 2971, 7, 71, 2, 2, 2971, 2972, 7, 84, 2, 2, 2972, 228, 3, 2, 2, 2, 2973, 2974, 7, 81, 2, 2, 2974, 2975, 7, 87, 2, 2, 2975, 2976, 7, 86, 2, 2, 2976, 2977, 7, 72, 2, 2, 2977, 2978, 7, 75, 2, 2, 2978, 2979, 7, 78, 2, 2, 2979, 2980, 7, 71, 2, 2, 2980, 230, 3, 2, 2, 2, 2981, 2982, 7, 82, 2, 2, 2982, 2983, 7, 67, 2, 2, 2983, 2984, 7, 84, 2, 2, 2984, 2985, 7, 86, 2, 2, 2985, 2986, 7, 75, 2, 2, 2986, 2987, 7, 86, 2, 2, 2987, 2988, 7, 75, 2, 2, 2988, 2989, 7, 81, 2, 2, 2989, 2990, 7, 80, 2, 2, 2990, 232, 3, 2, 2, 2, 2991, 2992, 7, 82, 2, 2, 2992, 2993, 7, 84, 2, 2, 2993, 2994, 7, 75, 2, 2, 2994, 2995, 7, 79, 2, 2, 2995, 2996, 7, 67, 2, 2, 2996, 2997, 7, 84, 2, 2, 2997, 2998, 7, 91, 2, 2, 2998, 234, 3, 2, 2, 2, 2999, 3000, 7, 82, 2, 2, 3000, 3001, 7, 84, 2, 2, 3001, 3002, 7, 81, 2, 2, 3002, 3003, 7, 69, 2, 2, 3003, 3004, 7, 71, 2, 2, 3004, 3005, 7, 70, 2, 2, 3005, 3006, 7, 87, 2, 2, 3006, 3007, 7, 84, 2, 2, 3007, 3008, 7, 71, 2, 2, 3008, 236, 3, 2, 2, 2, 3009, 3010, 7, 82, 2, 2, 3010, 3011, 7, 87, 2, 2, 3011, 3012, 7, 84, 2, 2, 3012, 3013, 7, 73, 2, 2, 3013, 3014, 7, 71, 2, 2, 3014, 238, 3, 2, 2, 2, 3015, 3016, 7, 84, 2, 2, 3016, 3017, 7, 67, 2, 2, 3017, 3018, 7, 80, 2, 2, 3018, 3019, 7, 73, 2, 2, 3019, 3020, 7, 71, 2, 2, 3020, 240, 3, 2, 2, 2, 3021, 3022, 7, 84, 2, 2, 3022, 3023, 7, 71, 2, 2, 3023, 3024, 7, 67, 2, 2, 3024, 3025, 7, 70, 2, 2, 3025, 242, 3, 2, 2, 2, 3026, 3027, 7, 84, 2, 2, 3027, 3028, 7, 71, 2, 2, 3028, 3029, 7, 67, 2, 2, 3029, 3030, 7, 70, 2, 2, 3030, 3031, 7, 85, 2, 2, 3031, 244, 3, 2, 2, 2, 3032, 3033, 7, 84, 2, 2, 3033, 3034, 7, 71, 2, 2, 3034, 3035, 7, 72, 2, 2, 3035, 3036, 7, 71, 2, 2, 3036, 3037, 7, 84, 2, 2, 3037, 3038, 7, 71, 2, 2, 3038, 3039, 7, 80, 2, 2, 3039, 3040, 7, 69, 2, 2, 3040, 3041, 7, 71, 2, 2, 3041, 3042, 7, 85, 2, 2, 3042, 246, 3, 2, 2, 2, 3043, 3044, 7, 84, 2, 2, 3044, 3045, 7, 71, 2, 2, 3045, 3046, 7, 73, 2, 2, 3046, 3047, 7, 71, 2, 2, 3047, 3048, 7, 90, 2, 2, 3048, 3049, 7, 82, 2, 2, 3049, 248, 3, 2, 2, 2, 3050, 3051, 7, 84, 2, 2, 3051, 3052, 7, 71, 2, 2, 3052, 3053, 7, 78, 2, 2, 3053, 3054, 7, 71, 2, 2, 3054, 3055, 7, 67, 2, 2, 3055, 3056, 7, 85, 2, 2, 3056, 3057, 7, 71, 2, 2, 3057, 250, 3, 2, 2, 2, 3058, 3059, 7, 84, 2, 2, 3059, 3060, 7, 71, 2, 2, 3060, 3061, 7, 80, 2, 2, 3061, 3062, 7, 67, 2, 2, 3062, 3063, 7, 79, 2, 2, 3063, 3064, 7, 71, 2, 2, 3064, 252, 3, 2, 2, 2, 3065, 3066, 7, 84, 2, 2, 3066, 3067, 7, 71, 2, 2, 3067, 3068, 7, 82, 2, 2, 3068, 3069, 7, 71, 2, 2, 3069, 3070, 7, 67, 2, 2, 3070, 3071, 7, 86, 2, 2, 3071, 254, 3, 2, 2, 2, 3072, 3073, 7, 84, 2, 2, 3073, 3074, 7, 71, 2, 2, 3074, 3075, 7, 82, 2, 2, 3075, 3076, 7, 78, 2, 2, 3076, 3077, 7, 67, 2, 2, 3077, 3078, 7, 69, 2, 2, 3078, 3079, 7, 71, 2, 2, 3079, 256, 3, 2, 2, 2, 3080, 3081, 7, 84, 2, 2, 3081, 3082, 7, 71, 2, 2, 3082, 3083, 7, 83, 2, 2, 3083, 3084, 7, 87, 2, 2, 3084, 3085, 7, 75, 2, 2, 3085, 3086, 7, 84, 2, 2, 3086, 3087, 7, 71, 2, 2, 3087, 258, 3, 2, 2, 2, 3088, 3089, 7, 84, 2, 2, 3089, 3090, 7, 71, 2, 2, 3090, 3091, 7, 85, 2, 2, 3091, 3092, 7, 75, 2, 2, 3092, 3093, 7, 73, 2, 2, 3093, 3094, 7, 80, 2, 2, 3094, 3095, 7, 67, 2, 2, 3095, 3096, 7, 78, 2, 2, 3096, 260, 3, 2, 2, 2, 3097, 3098, 7, 84, 2, 2, 3098, 3099, 7, 71, 2, 2, 3099, 3100, 7, 85, 2, 2, 3100, 3101, 7, 86, 2, 2, 3101, 3102, 7, 84, 2, 2, 3102, 3103, 7, 75, 2, 2, 3103, 3104, 7, 69, 2, 2, 3104, 3105, 7, 86, 2, 2, 3105, 262, 3, 2, 2, 2, 3106, 3107, 7, 84, 2, 2, 3107, 3108, 7, 71, 2, 2, 3108, 3109, 7, 86, 2, 2, 3109, 3110, 7, 87, 2, 2, 3110, 3111, 7, 84, 2, 2, 3111, 3112, 7, 80, 2, 2, 3112, 264, 3, 2, 2, 2, 3113, 3114, 7, 84, 2, 2, 3114, 3115, 7, 71, 2, 2, 3115, 3116, 7, 88, 2, 2, 3116, 3117, 7, 81, 2, 2, 3117, 3118, 7, 77, 2, 2, 3118, 3119, 7, 71, 2, 2, 3119, 266, 3, 2, 2, 2, 3120, 3121, 7, 84, 2, 2, 3121, 3122, 7, 75, 2, 2, 3122, 3123, 7, 73, 2, 2, 3123, 3124, 7, 74, 2, 2, 3124, 3125, 7, 86, 2, 2, 3125, 268, 3, 2, 2, 2, 3126, 3127, 7, 84, 2, 2, 3127, 3128, 7, 78, 2, 2, 3128, 3129, 7, 75, 2, 2, 3129, 3130, 7, 77, 2, 2, 3130, 3131, 7, 71, 2, 2, 3131, 270, 3, 2, 2, 2, 3132, 3133, 7, 85, 2, 2, 3133, 3134, 7, 69, 2, 2, 3134, 3135, 7, 74, 2, 2, 3135, 3136, 7, 71, 2, 2, 3136, 3137, 7, 79, 2, 2, 3137, 3138, 7, 67, 2, 2, 3138, 272, 3, 2, 2, 2, 3139, 3140, 7, 85, 2, 2, 3140, 3141, 7, 69, 2, 2, 3141, 3142, 7, 74, 2, 2, 3142, 3143, 7, 71, 2, 2, 3143, 3144, 7, 79, 2, 2, 3144, 3145, 7, 67, 2, 2, 3145, 3146, 7, 85, 2, 2, 3146, 274, 3, 2, 2, 2, 3147, 3148, 7, 85, 2, 2, 3148, 3149, 7, 71, 2, 2, 3149, 3150, 7, 78, 2, 2, 3150, 3151, 7, 71, 2, 2, 3151, 3152, 7, 69, 2, 2, 3152, 3153, 7, 86, 2, 2, 3153, 276, 3, 2, 2, 2, 3154, 3155, 7, 85, 2, 2, 3155, 3156, 7, 71, 2, 2, 3156, 3157, 7, 86, 2, 2, 3157, 278, 3, 2, 2, 2, 3158, 3159, 7, 85, 2, 2, 3159, 3160, 7, 71, 2, 2, 3160, 3161, 7, 82, 2, 2, 3161, 3162, 7, 67, 2, 2, 3162, 3163, 7, 84, 2, 2, 3163, 3164, 7, 67, 2, 2, 3164, 3165, 7, 86, 2, 2, 3165, 3166, 7, 81, 2, 2, 3166, 3167, 7, 84, 2, 2, 3167, 280, 3, 2, 2, 2, 3168, 3169, 7, 85, 2, 2, 3169, 3170, 7, 74, 2, 2, 3170, 3171, 7, 81, 2, 2, 3171, 3172, 7, 89, 2, 2, 3172, 282, 3, 2, 2, 2, 3173, 3174, 7, 85, 2, 2, 3174, 3175, 7, 75, 2, 2, 3175, 3176, 7, 73, 2, 2, 3176, 3177, 7, 80, 2, 2, 3177, 3178, 7, 67, 2, 2, 3178, 3179, 7, 78, 2, 2, 3179, 284, 3, 2, 2, 2, 3180, 3181, 7, 85, 2, 2, 3181, 3182, 7, 82, 2, 2, 3182, 3183, 7, 67, 2, 2, 3183, 3184, 7, 86, 2, 2, 3184, 3185, 7, 75, 2, 2, 3185, 3186, 7, 67, 2, 2, 3186, 3187, 7, 78, 2, 2, 3187, 286, 3, 2, 2, 2, 3188, 3189, 7, 85, 2, 2, 3189, 3190, 7, 83, 2, 2, 3190, 3191, 7, 78, 2, 2, 3191, 288, 3, 2, 2, 2, 3192, 3193, 7, 85, 2, 2, 3193, 3194, 7, 83, 2, 2, 3194, 3195, 7, 78, 2, 2, 3195, 3196, 7, 71, 2, 2, 3196, 3197, 7, 90, 2, 2, 3197, 3198, 7, 69, 2, 2, 3198, 3199, 7, 71, 2, 2, 3199, 3200, 7, 82, 2, 2, 3200, 3201, 7, 86, 2, 2, 3201, 3202, 7, 75, 2, 2, 3202, 3203, 7, 81, 2, 2, 3203, 3204, 7, 80, 2, 2, 3204, 290, 3, 2, 2, 2, 3205, 3206, 7, 85, 2, 2, 3206, 3207, 7, 83, 2, 2, 3207, 3208, 7, 78, 2, 2, 3208, 3209, 7, 85, 2, 2, 3209, 3210, 7, 86, 2, 2, 3210, 3211, 7, 67, 2, 2, 3211, 3212, 7, 86, 2, 2, 3212, 3213, 7, 71, 2, 2, 3213, 292, 3, 2, 2, 2, 3214, 3215, 7, 85, 2, 2, 3215, 3216, 7, 83, 2, 2, 3216, 3217, 7, 78, 2, 2, 3217, 3218, 7, 89, 2, 2, 3218, 3219, 7, 67, 2, 2, 3219, 3220, 7, 84, 2, 2, 3220, 3221, 7, 80, 2, 2, 3221, 3222, 7, 75, 2, 2, 3222, 3223, 7, 80, 2, 2, 3223, 3224, 7, 73, 2, 2, 3224, 294, 3, 2, 2, 2, 3225, 3226, 7, 85, 2, 2, 3226, 3227, 7, 83, 2, 2, 3227, 3228, 7, 78, 2, 2, 3228, 3229, 7, 97, 2, 2, 3229, 3230, 7, 68, 2, 2, 3230, 3231, 7, 75, 2, 2, 3231, 3232, 7, 73, 2, 2, 3232, 3233, 7, 97, 2, 2, 3233, 3234, 7, 84, 2, 2, 3234, 3235, 7, 71, 2, 2, 3235, 3236, 7, 85, 2, 2, 3236, 3237, 7, 87, 2, 2, 3237, 3238, 7, 78, 2, 2, 3238, 3239, 7, 86, 2, 2, 3239, 296, 3, 2, 2, 2, 3240, 3241, 7, 85, 2, 2, 3241, 3242, 7, 83, 2, 2, 3242, 3243, 7, 78, 2, 2, 3243, 3244, 7, 97, 2, 2, 3244, 3245, 7, 69, 2, 2, 3245, 3246, 7, 67, 2, 2, 3246, 3247, 7, 78, 2, 2, 3247, 3248, 7, 69, 2, 2, 3248, 3249, 7, 97, 2, 2, 3249, 3250, 7, 72, 2, 2, 3250, 3251, 7, 81, 2, 2, 3251, 3252, 7, 87, 2, 2, 3252, 3253, 7, 80, 2, 2, 3253, 3254, 7, 70, 2, 2, 3254, 3255, 7, 97, 2, 2, 3255, 3256, 7, 84, 2, 2, 3256, 3257, 7, 81, 2, 2, 3257, 3258, 7, 89, 2, 2, 3258, 3259, 7, 85, 2, 2, 3259, 298, 3, 2, 2, 2, 3260, 3261, 7, 85, 2, 2, 3261, 3262, 7, 83, 2, 2, 3262, 3263, 7, 78, 2, 2, 3263, 3264, 7, 97, 2, 2, 3264, 3265, 7, 85, 2, 2, 3265, 3266, 7, 79, 2, 2, 3266, 3267, 7, 67, 2, 2, 3267, 3268, 7, 78, 2, 2, 3268, 3269, 7, 78, 2, 2, 3269, 3270, 7, 97, 2, 2, 3270, 3271, 7, 84, 2, 2, 3271, 3272, 7, 71, 2, 2, 3272, 3273, 7, 85, 2, 2, 3273, 3274, 7, 87, 2, 2, 3274, 3275, 7, 78, 2, 2, 3275, 3276, 7, 86, 2, 2, 3276, 300, 3, 2, 2, 2, 3277, 3278, 7, 85, 2, 2, 3278, 3279, 7, 85, 2, 2, 3279, 3280, 7, 78, 2, 2, 3280, 302, 3, 2, 2, 2, 3281, 3282, 7, 85, 2, 2, 3282, 3283, 7, 86, 2, 2, 3283, 3284, 7, 67, 2, 2, 3284, 3285, 7, 69, 2, 2, 3285, 3286, 7, 77, 2, 2, 3286, 3287, 7, 71, 2, 2, 3287, 3288, 7, 70, 2, 2, 3288, 304, 3, 2, 2, 2, 3289, 3290, 7, 85, 2, 2, 3290, 3291, 7, 86, 2, 2, 3291, 3292, 7, 67, 2, 2, 3292, 3293, 7, 84, 2, 2, 3293, 3294, 7, 86, 2, 2, 3294, 3295, 7, 75, 2, 2, 3295, 3296, 7, 80, 2, 2, 3296, 3297, 7, 73, 2, 2, 3297, 306, 3, 2, 2, 2, 3298, 3299, 7, 85, 2, 2, 3299, 3300, 7, 86, 2, 2, 3300, 3301, 7, 84, 2, 2, 3301, 3302, 7, 67, 2, 2, 3302, 3303, 7, 75, 2, 2, 3303, 3304, 7, 73, 2, 2, 3304, 3305, 7, 74, 2, 2, 3305, 3306, 7, 86, 2, 2, 3306, 3307, 7, 97, 2, 2, 3307, 3308, 7, 76, 2, 2, 3308, 3309, 7, 81, 2, 2, 3309, 3310, 7, 75, 2, 2, 3310, 3311, 7, 80, 2, 2, 3311, 308, 3, 2, 2, 2, 3312, 3313, 7, 86, 2, 2, 3313, 3314, 7, 67, 2, 2, 3314, 3315, 7, 68, 2, 2, 3315, 3316, 7, 78, 2, 2, 3316, 3317, 7, 71, 2, 2, 3317, 310, 3, 2, 2, 2, 3318, 3319, 7, 86, 2, 2, 3319, 3320, 7, 71, 2, 2, 3320, 3321, 7, 84, 2, 2, 3321, 3322, 7, 79, 2, 2, 3322, 3323, 7, 75, 2, 2, 3323, 3324, 7, 80, 2, 2, 3324, 3325, 7, 67, 2, 2, 3325, 3326, 7, 86, 2, 2, 3326, 3327, 7, 71, 2, 2, 3327, 3328, 7, 70, 2, 2, 3328, 312, 3, 2, 2, 2, 3329, 3330, 7, 86, 2, 2, 3330, 3331, 7, 74, 2, 2, 3331, 3332, 7, 71, 2, 2, 3332, 3333, 7, 80, 2, 2, 3333, 314, 3, 2, 2, 2, 3334, 3335, 7, 86, 2, 2, 3335, 3336, 7, 81, 2, 2, 3336, 316, 3, 2, 2, 2, 3337, 3338, 7, 86, 2, 2, 3338, 3339, 7, 84, 2, 2, 3339, 3340, 7, 67, 2, 2, 3340, 3341, 7, 75, 2, 2, 3341, 3342, 7, 78, 2, 2, 3342, 3343, 7, 75, 2, 2, 3343, 3344, 7, 80, 2, 2, 3344, 3345, 7, 73, 2, 2, 3345, 318, 3, 2, 2, 2, 3346, 3347, 7, 86, 2, 2, 3347, 3348, 7, 84, 2, 2, 3348, 3349, 7, 75, 2, 2, 3349, 3350, 7, 73, 2, 2, 3350, 3351, 7, 73, 2, 2, 3351, 3352, 7, 71, 2, 2, 3352, 3353, 7, 84, 2, 2, 3353, 320, 3, 2, 2, 2, 3354, 3355, 7, 86, 2, 2, 3355, 3356, 7, 84, 2, 2, 3356, 3357, 7, 87, 2, 2, 3357, 3358, 7, 71, 2, 2, 3358, 322, 3, 2, 2, 2, 3359, 3360, 7, 87, 2, 2, 3360, 3361, 7, 80, 2, 2, 3361, 3362, 7, 70, 2, 2, 3362, 3363, 7, 81, 2, 2, 3363, 324, 3, 2, 2, 2, 3364, 3365, 7, 87, 2, 2, 3365, 3366, 7, 80, 2, 2, 3366, 3367, 7, 75, 2, 2, 3367, 3368, 7, 81, 2, 2, 3368, 3369, 7, 80, 2, 2, 3369, 326, 3, 2, 2, 2, 3370, 3371, 7, 87, 2, 2, 3371, 3372, 7, 80, 2, 2, 3372, 3373, 7, 75, 2, 2, 3373, 3374, 7, 83, 2, 2, 3374, 3375, 7, 87, 2, 2, 3375, 3376, 7, 71, 2, 2, 3376, 328, 3, 2, 2, 2, 3377, 3378, 7, 87, 2, 2, 3378, 3379, 7, 80, 2, 2, 3379, 3380, 7, 78, 2, 2, 3380, 3381, 7, 81, 2, 2, 3381, 3382, 7, 69, 2, 2, 3382, 3383, 7, 77, 2, 2, 3383, 330, 3, 2, 2, 2, 3384, 3385, 7, 87, 2, 2, 3385, 3386, 7, 80, 2, 2, 3386, 3387, 7, 85, 2, 2, 3387, 3388, 7, 75, 2, 2, 3388, 3389, 7, 73, 2, 2, 3389, 3390, 7, 80, 2, 2, 3390, 3391, 7, 71, 2, 2, 3391, 3392, 7, 70, 2, 2, 3392, 332, 3, 2, 2, 2, 3393, 3394, 7, 87, 2, 2, 3394, 3395, 7, 82, 2, 2, 3395, 3396, 7, 70, 2, 2, 3396, 3397, 7, 67, 2, 2, 3397, 3398, 7, 86, 2, 2, 3398, 3399, 7, 71, 2, 2, 3399, 334, 3, 2, 2, 2, 3400, 3401, 7, 87, 2, 2, 3401, 3402, 7, 85, 2, 2, 3402, 3403, 7, 67, 2, 2, 3403, 3404, 7, 73, 2, 2, 3404, 3405, 7, 71, 2, 2, 3405, 336, 3, 2, 2, 2, 3406, 3407, 7, 87, 2, 2, 3407, 3408, 7, 85, 2, 2, 3408, 3409, 7, 71, 2, 2, 3409, 338, 3, 2, 2, 2, 3410, 3411, 7, 87, 2, 2, 3411, 3412, 7, 85, 2, 2, 3412, 3413, 7, 75, 2, 2, 3413, 3414, 7, 80, 2, 2, 3414, 3415, 7, 73, 2, 2, 3415, 340, 3, 2, 2, 2, 3416, 3417, 7, 88, 2, 2, 3417, 3418, 7, 67, 2, 2, 3418, 3419, 7, 78, 2, 2, 3419, 3420, 7, 87, 2, 2, 3420, 3421, 7, 71, 2, 2, 3421, 3422, 7, 85, 2, 2, 3422, 342, 3, 2, 2, 2, 3423, 3424, 7, 89, 2, 2, 3424, 3425, 7, 74, 2, 2, 3425, 3426, 7, 71, 2, 2, 3426, 3427, 7, 80, 2, 2, 3427, 344, 3, 2, 2, 2, 3428, 3429, 7, 89, 2, 2, 3429, 3430, 7, 74, 2, 2, 3430, 3431, 7, 71, 2, 2, 3431, 3432, 7, 84, 2, 2, 3432, 3433, 7, 71, 2, 2, 3433, 346, 3, 2, 2, 2, 3434, 3435, 7, 89, 2, 2, 3435, 3436, 7, 74, 2, 2, 3436, 3437, 7, 75, 2, 2, 3437, 3438, 7, 78, 2, 2, 3438, 3439, 7, 71, 2, 2, 3439, 348, 3, 2, 2, 2, 3440, 3441, 7, 89, 2, 2, 3441, 3442, 7, 75, 2, 2, 3442, 3443, 7, 86, 2, 2, 3443, 3444, 7, 74, 2, 2, 3444, 350, 3, 2, 2, 2, 3445, 3446, 7, 89, 2, 2, 3446, 3447, 7, 84, 2, 2, 3447, 3448, 7, 75, 2, 2, 3448, 3449, 7, 86, 2, 2, 3449, 3450, 7, 71, 2, 2, 3450, 352, 3, 2, 2, 2, 3451, 3452, 7, 90, 2, 2, 3452, 3453, 7, 81, 2, 2, 3453, 3454, 7, 84, 2, 2, 3454, 354, 3, 2, 2, 2, 3455, 3456, 7, 92, 2, 2, 3456, 3457, 7, 71, 2, 2, 3457, 3458, 7, 84, 2, 2, 3458, 3459, 7, 81, 2, 2, 3459, 3460, 7, 72, 2, 2, 3460, 3461, 7, 75, 2, 2, 3461, 3462, 7, 78, 2, 2, 3462, 3463, 7, 78, 2, 2, 3463, 356, 3, 2, 2, 2, 3464, 3465, 7, 86, 2, 2, 3465, 3466, 7, 75, 2, 2, 3466, 3467, 7, 80, 2, 2, 3467, 3468, 7, 91, 2, 2, 3468, 3469, 7, 75, 2, 2, 3469, 3470, 7, 80, 2, 2, 3470, 3471, 7, 86, 2, 2, 3471, 358, 3, 2, 2, 2, 3472, 3473, 7, 85, 2, 2, 3473, 3474, 7, 79, 2, 2, 3474, 3475, 7, 67, 2, 2, 3475, 3476, 7, 78, 2, 2, 3476, 3477, 7, 78, 2, 2, 3477, 3478, 7, 75, 2, 2, 3478, 3479, 7, 80, 2, 2, 3479, 3480, 7, 86, 2, 2, 3480, 360, 3, 2, 2, 2, 3481, 3482, 7, 79, 2, 2, 3482, 3483, 7, 71, 2, 2, 3483, 3484, 7, 70, 2, 2, 3484, 3485, 7, 75, 2, 2, 3485, 3486, 7, 87, 2, 2, 3486, 3487, 7, 79, 2, 2, 3487, 3488, 7, 75, 2, 2, 3488, 3489, 7, 80, 2, 2, 3489, 3490, 7, 86, 2, 2, 3490, 362, 3, 2, 2, 2, 3491, 3492, 7, 79, 2, 2, 3492, 3493, 7, 75, 2, 2, 3493, 3494, 7, 70, 2, 2, 3494, 3495, 7, 70, 2, 2, 3495, 3496, 7, 78, 2, 2, 3496, 3497, 7, 71, 2, 2, 3497, 3498, 7, 75, 2, 2, 3498, 3499, 7, 80, 2, 2, 3499, 3500, 7, 86, 2, 2, 3500, 364, 3, 2, 2, 2, 3501, 3502, 7, 75, 2, 2, 3502, 3503, 7, 80, 2, 2, 3503, 3504, 7, 86, 2, 2, 3504, 366, 3, 2, 2, 2, 3505, 3506, 7, 75, 2, 2, 3506, 3507, 7, 80, 2, 2, 3507, 3508, 7, 86, 2, 2, 3508, 3509, 7, 51, 2, 2, 3509, 368, 3, 2, 2, 2, 3510, 3511, 7, 75, 2, 2, 3511, 3512, 7, 80, 2, 2, 3512, 3513, 7, 86, 2, 2, 3513, 3514, 7, 52, 2, 2, 3514, 370, 3, 2, 2, 2, 3515, 3516, 7, 75, 2, 2, 3516, 3517, 7, 80, 2, 2, 3517, 3518, 7, 86, 2, 2, 3518, 3519, 7, 53, 2, 2, 3519, 372, 3, 2, 2, 2, 3520, 3521, 7, 75, 2, 2, 3521, 3522, 7, 80, 2, 2, 3522, 3523, 7, 86, 2, 2, 3523, 3524, 7, 54, 2, 2, 3524, 374, 3, 2, 2, 2, 3525, 3526, 7, 75, 2, 2, 3526, 3527, 7, 80, 2, 2, 3527, 3528, 7, 86, 2, 2, 3528, 3529, 7, 58, 2, 2, 3529, 376, 3, 2, 2, 2, 3530, 3531, 7, 75, 2, 2, 3531, 3532, 7, 80, 2, 2, 3532, 3533, 7, 86, 2, 2, 3533, 3534, 7, 71, 2, 2, 3534, 3535, 7, 73, 2, 2, 3535, 3536, 7, 71, 2, 2, 3536, 3537, 7, 84, 2, 2, 3537, 378, 3, 2, 2, 2, 3538, 3539, 7, 68, 2, 2, 3539, 3540, 7, 75, 2, 2, 3540, 3541, 7, 73, 2, 2, 3541, 3542, 7, 75, 2, 2, 3542, 3543, 7, 80, 2, 2, 3543, 3544, 7, 86, 2, 2, 3544, 380, 3, 2, 2, 2, 3545, 3546, 7, 84, 2, 2, 3546, 3547, 7, 71, 2, 2, 3547, 3548, 7, 67, 2, 2, 3548, 3549, 7, 78, 2, 2, 3549, 382, 3, 2, 2, 2, 3550, 3551, 7, 70, 2, 2, 3551, 3552, 7, 81, 2, 2, 3552, 3553, 7, 87, 2, 2, 3553, 3554, 7, 68, 2, 2, 3554, 3555, 7, 78, 2, 2, 3555, 3556, 7, 71, 2, 2, 3556, 384, 3, 2, 2, 2, 3557, 3558, 7, 82, 2, 2, 3558, 3559, 7, 84, 2, 2, 3559, 3560, 7, 71, 2, 2, 3560, 3561, 7, 69, 2, 2, 3561, 3562, 7, 75, 2, 2, 3562, 3563, 7, 85, 2, 2, 3563, 3564, 7, 75, 2, 2, 3564, 3565, 7, 81, 2, 2, 3565, 3566, 7, 80, 2, 2, 3566, 386, 3, 2, 2, 2, 3567, 3568, 7, 72, 2, 2, 3568, 3569, 7, 78, 2, 2, 3569, 3570, 7, 81, 2, 2, 3570, 3571, 7, 67, 2, 2, 3571, 3572, 7, 86, 2, 2, 3572, 388, 3, 2, 2, 2, 3573, 3574, 7, 72, 2, 2, 3574, 3575, 7, 78, 2, 2, 3575, 3576, 7, 81, 2, 2, 3576, 3577, 7, 67, 2, 2, 3577, 3578, 7, 86, 2, 2, 3578, 3579, 7, 54, 2, 2, 3579, 390, 3, 2, 2, 2, 3580, 3581, 7, 72, 2, 2, 3581, 3582, 7, 78, 2, 2, 3582, 3583, 7, 81, 2, 2, 3583, 3584, 7, 67, 2, 2, 3584, 3585, 7, 86, 2, 2, 3585, 3586, 7, 58, 2, 2, 3586, 392, 3, 2, 2, 2, 3587, 3588, 7, 70, 2, 2, 3588, 3589, 7, 71, 2, 2, 3589, 3590, 7, 69, 2, 2, 3590, 3591, 7, 75, 2, 2, 3591, 3592, 7, 79, 2, 2, 3592, 3593, 7, 67, 2, 2, 3593, 3594, 7, 78, 2, 2, 3594, 394, 3, 2, 2, 2, 3595, 3596, 7, 70, 2, 2, 3596, 3597, 7, 71, 2, 2, 3597, 3598, 7, 69, 2, 2, 3598, 396, 3, 2, 2, 2, 3599, 3600, 7, 80, 2, 2, 3600, 3601, 7, 87, 2, 2, 3601, 3602, 7, 79, 2, 2, 3602, 3603, 7, 71, 2, 2, 3603, 3604, 7, 84, 2, 2, 3604, 3605, 7, 75, 2, 2, 3605, 3606, 7, 69, 2, 2, 3606, 398, 3, 2, 2, 2, 3607, 3608, 7, 70, 2, 2, 3608, 3609, 7, 67, 2, 2, 3609, 3610, 7, 86, 2, 2, 3610, 3611, 7, 71, 2, 2, 3611, 400, 3, 2, 2, 2, 3612, 3613, 7, 86, 2, 2, 3613, 3614, 7, 75, 2, 2, 3614, 3615, 7, 79, 2, 2, 3615, 3616, 7, 71, 2, 2, 3616, 402, 3, 2, 2, 2, 3617, 3618, 7, 86, 2, 2, 3618, 3619, 7, 75, 2, 2, 3619, 3620, 7, 79, 2, 2, 3620, 3621, 7, 71, 2, 2, 3621, 3622, 7, 85, 2, 2, 3622, 3623, 7, 86, 2, 2, 3623, 3624, 7, 67, 2, 2, 3624, 3625, 7, 79, 2, 2, 3625, 3626, 7, 82, 2, 2, 3626, 404, 3, 2, 2, 2, 3627, 3628, 7, 70, 2, 2, 3628, 3629, 7, 67, 2, 2, 3629, 3630, 7, 86, 2, 2, 3630, 3631, 7, 71, 2, 2, 3631, 3632, 7, 86, 2, 2, 3632, 3633, 7, 75, 2, 2, 3633, 3634, 7, 79, 2, 2, 3634, 3635, 7, 71, 2, 2, 3635, 406, 3, 2, 2, 2, 3636, 3637, 7, 91, 2, 2, 3637, 3638, 7, 71, 2, 2, 3638, 3639, 7, 67, 2, 2, 3639, 3640, 7, 84, 2, 2, 3640, 408, 3, 2, 2, 2, 3641, 3642, 7, 69, 2, 2, 3642, 3643, 7, 74, 2, 2, 3643, 3644, 7, 67, 2, 2, 3644, 3645, 7, 84, 2, 2, 3645, 410, 3, 2, 2, 2, 3646, 3647, 7, 88, 2, 2, 3647, 3648, 7, 67, 2, 2, 3648, 3649, 7, 84, 2, 2, 3649, 3650, 7, 69, 2, 2, 3650, 3651, 7, 74, 2, 2, 3651, 3652, 7, 67, 2, 2, 3652, 3653, 7, 84, 2, 2, 3653, 412, 3, 2, 2, 2, 3654, 3655, 7, 80, 2, 2, 3655, 3656, 7, 88, 2, 2, 3656, 3657, 7, 67, 2, 2, 3657, 3658, 7, 84, 2, 2, 3658, 3659, 7, 69, 2, 2, 3659, 3660, 7, 74, 2, 2, 3660, 3661, 7, 67, 2, 2, 3661, 3662, 7, 84, 2, 2, 3662, 414, 3, 2, 2, 2, 3663, 3664, 7, 80, 2, 2, 3664, 3665, 7, 67, 2, 2, 3665, 3666, 7, 86, 2, 2, 3666, 3667, 7, 75, 2, 2, 3667, 3668, 7, 81, 2, 2, 3668, 3669, 7, 80, 2, 2, 3669, 3670, 7, 67, 2, 2, 3670, 3671, 7, 78, 2, 2, 3671, 416, 3, 2, 2, 2, 3672, 3673, 7, 68, 2, 2, 3673, 3674, 7, 75, 2, 2, 3674, 3675, 7, 80, 2, 2, 3675, 3676, 7, 67, 2, 2, 3676, 3677, 7, 84, 2, 2, 3677, 3678, 7, 91, 2, 2, 3678, 418, 3, 2, 2, 2, 3679, 3680, 7, 88, 2, 2, 3680, 3681, 7, 67, 2, 2, 3681, 3682, 7, 84, 2, 2, 3682, 3683, 7, 68, 2, 2, 3683, 3684, 7, 75, 2, 2, 3684, 3685, 7, 80, 2, 2, 3685, 3686, 7, 67, 2, 2, 3686, 3687, 7, 84, 2, 2, 3687, 3688, 7, 91, 2, 2, 3688, 420, 3, 2, 2, 2, 3689, 3690, 7, 86, 2, 2, 3690, 3691, 7, 75, 2, 2, 3691, 3692, 7, 80, 2, 2, 3692, 3693, 7, 91, 2, 2, 3693, 3694, 7, 68, 2, 2, 3694, 3695, 7, 78, 2, 2, 3695, 3696, 7, 81, 2, 2, 3696, 3697, 7, 68, 2, 2, 3697, 422, 3, 2, 2, 2, 3698, 3699, 7, 68, 2, 2, 3699, 3700, 7, 78, 2, 2, 3700, 3701, 7, 81, 2, 2, 3701, 3702, 7, 68, 2, 2, 3702, 424, 3, 2, 2, 2, 3703, 3704, 7, 79, 2, 2, 3704, 3705, 7, 71, 2, 2, 3705, 3706, 7, 70, 2, 2, 3706, 3707, 7, 75, 2, 2, 3707, 3708, 7, 87, 2, 2, 3708, 3709, 7, 79, 2, 2, 3709, 3710, 7, 68, 2, 2, 3710, 3711, 7, 78, 2, 2, 3711, 3712, 7, 81, 2, 2, 3712, 3713, 7, 68, 2, 2, 3713, 426, 3, 2, 2, 2, 3714, 3715, 7, 78, 2, 2, 3715, 3716, 7, 81, 2, 2, 3716, 3717, 7, 80, 2, 2, 3717, 3718, 7, 73, 2, 2, 3718, 428, 3, 2, 2, 2, 3719, 3720, 7, 78, 2, 2, 3720, 3721, 7, 81, 2, 2, 3721, 3722, 7, 80, 2, 2, 3722, 3723, 7, 73, 2, 2, 3723, 3724, 7, 68, 2, 2, 3724, 3725, 7, 78, 2, 2, 3725, 3726, 7, 81, 2, 2, 3726, 3727, 7, 68, 2, 2, 3727, 430, 3, 2, 2, 2, 3728, 3729, 7, 86, 2, 2, 3729, 3730, 7, 75, 2, 2, 3730, 3731, 7, 80, 2, 2, 3731, 3732, 7, 91, 2, 2, 3732, 3733, 7, 86, 2, 2, 3733, 3734, 7, 71, 2, 2, 3734, 3735, 7, 90, 2, 2, 3735, 3736, 7, 86, 2, 2, 3736, 432, 3, 2, 2, 2, 3737, 3738, 7, 86, 2, 2, 3738, 3739, 7, 71, 2, 2, 3739, 3740, 7, 90, 2, 2, 3740, 3741, 7, 86, 2, 2, 3741, 434, 3, 2, 2, 2, 3742, 3743, 7, 79, 2, 2, 3743, 3744, 7, 71, 2, 2, 3744, 3745, 7, 70, 2, 2, 3745, 3746, 7, 75, 2, 2, 3746, 3747, 7, 87, 2, 2, 3747, 3748, 7, 79, 2, 2, 3748, 3749, 7, 86, 2, 2, 3749, 3750, 7, 71, 2, 2, 3750, 3751, 7, 90, 2, 2, 3751, 3752, 7, 86, 2, 2, 3752, 436, 3, 2, 2, 2, 3753, 3754, 7, 78, 2, 2, 3754, 3755, 7, 81, 2, 2, 3755, 3756, 7, 80, 2, 2, 3756, 3757, 7, 73, 2, 2, 3757, 3758, 7, 86, 2, 2, 3758, 3759, 7, 71, 2, 2, 3759, 3760, 7, 90, 2, 2, 3760, 3761, 7, 86, 2, 2, 3761, 438, 3, 2, 2, 2, 3762, 3763, 7, 71, 2, 2, 3763, 3764, 7, 80, 2, 2, 3764, 3765, 7, 87, 2, 2, 3765, 3766, 7, 79, 2, 2, 3766, 440, 3, 2, 2, 2, 3767, 3768, 7, 88, 2, 2, 3768, 3769, 7, 67, 2, 2, 3769, 3770, 7, 84, 2, 2, 3770, 3771, 7, 91, 2, 2, 3771, 3772, 7, 75, 2, 2, 3772, 3773, 7, 80, 2, 2, 3773, 3774, 7, 73, 2, 2, 3774, 442, 3, 2, 2, 2, 3775, 3776, 7, 85, 2, 2, 3776, 3777, 7, 71, 2, 2, 3777, 3778, 7, 84, 2, 2, 3778, 3779, 7, 75, 2, 2, 3779, 3780, 7, 67, 2, 2, 3780, 3781, 7, 78, 2, 2, 3781, 444, 3, 2, 2, 2, 3782, 3783, 7, 91, 2, 2, 3783, 3784, 7, 71, 2, 2, 3784, 3785, 7, 67, 2, 2, 3785, 3786, 7, 84, 2, 2, 3786, 3787, 7, 97, 2, 2, 3787, 3788, 7, 79, 2, 2, 3788, 3789, 7, 81, 2, 2, 3789, 3790, 7, 80, 2, 2, 3790, 3791, 7, 86, 2, 2, 3791, 3792, 7, 74, 2, 2, 3792, 446, 3, 2, 2, 2, 3793, 3794, 7, 70, 2, 2, 3794, 3795, 7, 67, 2, 2, 3795, 3796, 7, 91, 2, 2, 3796, 3797, 7, 97, 2, 2, 3797, 3798, 7, 74, 2, 2, 3798, 3799, 7, 81, 2, 2, 3799, 3800, 7, 87, 2, 2, 3800, 3801, 7, 84, 2, 2, 3801, 448, 3, 2, 2, 2, 3802, 3803, 7, 70, 2, 2, 3803, 3804, 7, 67, 2, 2, 3804, 3805, 7, 91, 2, 2, 3805, 3806, 7, 97, 2, 2, 3806, 3807, 7, 79, 2, 2, 3807, 3808, 7, 75, 2, 2, 3808, 3809, 7, 80, 2, 2, 3809, 3810, 7, 87, 2, 2, 3810, 3811, 7, 86, 2, 2, 3811, 3812, 7, 71, 2, 2, 3812, 450, 3, 2, 2, 2, 3813, 3814, 7, 70, 2, 2, 3814, 3815, 7, 67, 2, 2, 3815, 3816, 7, 91, 2, 2, 3816, 3817, 7, 97, 2, 2, 3817, 3818, 7, 85, 2, 2, 3818, 3819, 7, 71, 2, 2, 3819, 3820, 7, 69, 2, 2, 3820, 3821, 7, 81, 2, 2, 3821, 3822, 7, 80, 2, 2, 3822, 3823, 7, 70, 2, 2, 3823, 452, 3, 2, 2, 2, 3824, 3825, 7, 74, 2, 2, 3825, 3826, 7, 81, 2, 2, 3826, 3827, 7, 87, 2, 2, 3827, 3828, 7, 84, 2, 2, 3828, 3829, 7, 97, 2, 2, 3829, 3830, 7, 79, 2, 2, 3830, 3831, 7, 75, 2, 2, 3831, 3832, 7, 80, 2, 2, 3832, 3833, 7, 87, 2, 2, 3833, 3834, 7, 86, 2, 2, 3834, 3835, 7, 71, 2, 2, 3835, 454, 3, 2, 2, 2, 3836, 3837, 7, 74, 2, 2, 3837, 3838, 7, 81, 2, 2, 3838, 3839, 7, 87, 2, 2, 3839, 3840, 7, 84, 2, 2, 3840, 3841, 7, 97, 2, 2, 3841, 3842, 7, 85, 2, 2, 3842, 3843, 7, 71, 2, 2, 3843, 3844, 7, 69, 2, 2, 3844, 3845, 7, 81, 2, 2, 3845, 3846, 7, 80, 2, 2, 3846, 3847, 7, 70, 2, 2, 3847, 456, 3, 2, 2, 2, 3848, 3849, 7, 79, 2, 2, 3849, 3850, 7, 75, 2, 2, 3850, 3851, 7, 80, 2, 2, 3851, 3852, 7, 87, 2, 2, 3852, 3853, 7, 86, 2, 2, 3853, 3854, 7, 71, 2, 2, 3854, 3855, 7, 97, 2, 2, 3855, 3856, 7, 85, 2, 2, 3856, 3857, 7, 71, 2, 2, 3857, 3858, 7, 69, 2, 2, 3858, 3859, 7, 81, 2, 2, 3859, 3860, 7, 80, 2, 2, 3860, 3861, 7, 70, 2, 2, 3861, 458, 3, 2, 2, 2, 3862, 3863, 7, 85, 2, 2, 3863, 3864, 7, 71, 2, 2, 3864, 3865, 7, 69, 2, 2, 3865, 3866, 7, 81, 2, 2, 3866, 3867, 7, 80, 2, 2, 3867, 3868, 7, 70, 2, 2, 3868, 3869, 7, 97, 2, 2, 3869, 3870, 7, 79, 2, 2, 3870, 3871, 7, 75, 2, 2, 3871, 3872, 7, 69, 2, 2, 3872, 3873, 7, 84, 2, 2, 3873, 3874, 7, 81, 2, 2, 3874, 3875, 7, 85, 2, 2, 3875, 3876, 7, 71, 2, 2, 3876, 3877, 7, 69, 2, 2, 3877, 3878, 7, 81, 2, 2, 3878, 3879, 7, 80, 2, 2, 3879, 3880, 7, 70, 2, 2, 3880, 460, 3, 2, 2, 2, 3881, 3882, 7, 79, 2, 2, 3882, 3883, 7, 75, 2, 2, 3883, 3884, 7, 80, 2, 2, 3884, 3885, 7, 87, 2, 2, 3885, 3886, 7, 86, 2, 2, 3886, 3887, 7, 71, 2, 2, 3887, 3888, 7, 97, 2, 2, 3888, 3889, 7, 79, 2, 2, 3889, 3890, 7, 75, 2, 2, 3890, 3891, 7, 69, 2, 2, 3891, 3892, 7, 84, 2, 2, 3892, 3893, 7, 81, 2, 2, 3893, 3894, 7, 85, 2, 2, 3894, 3895, 7, 71, 2, 2, 3895, 3896, 7, 69, 2, 2, 3896, 3897, 7, 81, 2, 2, 3897, 3898, 7, 80, 2, 2, 3898, 3899, 7, 70, 2, 2, 3899, 462, 3, 2, 2, 2, 3900, 3901, 7, 74, 2, 2, 3901, 3902, 7, 81, 2, 2, 3902, 3903, 7, 87, 2, 2, 3903, 3904, 7, 84, 2, 2, 3904, 3905, 7, 97, 2, 2, 3905, 3906, 7, 79, 2, 2, 3906, 3907, 7, 75, 2, 2, 3907, 3908, 7, 69, 2, 2, 3908, 3909, 7, 84, 2, 2, 3909, 3910, 7, 81, 2, 2, 3910, 3911, 7, 85, 2, 2, 3911, 3912, 7, 71, 2, 2, 3912, 3913, 7, 69, 2, 2, 3913, 3914, 7, 81, 2, 2, 3914, 3915, 7, 80, 2, 2, 3915, 3916, 7, 70, 2, 2, 3916, 464, 3, 2, 2, 2, 3917, 3918, 7, 70, 2, 2, 3918, 3919, 7, 67, 2, 2, 3919, 3920, 7, 91, 2, 2, 3920, 3921, 7, 97, 2, 2, 3921, 3922, 7, 79, 2, 2, 3922, 3923, 7, 75, 2, 2, 3923, 3924, 7, 69, 2, 2, 3924, 3925, 7, 84, 2, 2, 3925, 3926, 7, 81, 2, 2, 3926, 3927, 7, 85, 2, 2, 3927, 3928, 7, 71, 2, 2, 3928, 3929, 7, 69, 2, 2, 3929, 3930, 7, 81, 2, 2, 3930, 3931, 7, 80, 2, 2, 3931, 3932, 7, 70, 2, 2, 3932, 466, 3, 2, 2, 2, 3933, 3934, 7, 76, 2, 2, 3934, 3935, 7, 85, 2, 2, 3935, 3936, 7, 81, 2, 2, 3936, 3937, 7, 80, 2, 2, 3937, 3938, 7, 97, 2, 2, 3938, 3939, 7, 88, 2, 2, 3939, 3940, 7, 67, 2, 2, 3940, 3941, 7, 78, 2, 2, 3941, 3942, 7, 75, 2, 2, 3942, 3943, 7, 70, 2, 2, 3943, 468, 3, 2, 2, 2, 3944, 3945, 7, 76, 2, 2, 3945, 3946, 7, 85, 2, 2, 3946, 3947, 7, 81, 2, 2, 3947, 3948, 7, 80, 2, 2, 3948, 3949, 7, 97, 2, 2, 3949, 3950, 7, 85, 2, 2, 3950, 3951, 7, 69, 2, 2, 3951, 3952, 7, 74, 2, 2, 3952, 3953, 7, 71, 2, 2, 3953, 3954, 7, 79, 2, 2, 3954, 3955, 7, 67, 2, 2, 3955, 3956, 7, 97, 2, 2, 3956, 3957, 7, 88, 2, 2, 3957, 3958, 7, 67, 2, 2, 3958, 3959, 7, 78, 2, 2, 3959, 3960, 7, 75, 2, 2, 3960, 3961, 7, 70, 2, 2, 3961, 470, 3, 2, 2, 2, 3962, 3963, 7, 67, 2, 2, 3963, 3964, 7, 88, 2, 2, 3964, 3965, 7, 73, 2, 2, 3965, 472, 3, 2, 2, 2, 3966, 3967, 7, 68, 2, 2, 3967, 3968, 7, 75, 2, 2, 3968, 3969, 7, 86, 2, 2, 3969, 3970, 7, 97, 2, 2, 3970, 3971, 7, 67, 2, 2, 3971, 3972, 7, 80, 2, 2, 3972, 3973, 7, 70, 2, 2, 3973, 474, 3, 2, 2, 2, 3974, 3975, 7, 68, 2, 2, 3975, 3976, 7, 75, 2, 2, 3976, 3977, 7, 86, 2, 2, 3977, 3978, 7, 97, 2, 2, 3978, 3979, 7, 81, 2, 2, 3979, 3980, 7, 84, 2, 2, 3980, 476, 3, 2, 2, 2, 3981, 3982, 7, 68, 2, 2, 3982, 3983, 7, 75, 2, 2, 3983, 3984, 7, 86, 2, 2, 3984, 3985, 7, 97, 2, 2, 3985, 3986, 7, 90, 2, 2, 3986, 3987, 7, 81, 2, 2, 3987, 3988, 7, 84, 2, 2, 3988, 478, 3, 2, 2, 2, 3989, 3990, 7, 69, 2, 2, 3990, 3991, 7, 81, 2, 2, 3991, 3992, 7, 87, 2, 2, 3992, 3993, 7, 80, 2, 2, 3993, 3994, 7, 86, 2, 2, 3994, 480, 3, 2, 2, 2, 3995, 3996, 7, 73, 2, 2, 3996, 3997, 7, 84, 2, 2, 3997, 3998, 7, 81, 2, 2, 3998, 3999, 7, 87, 2, 2, 3999, 4000, 7, 82, 2, 2, 4000, 4001, 7, 97, 2, 2, 4001, 4002, 7, 69, 2, 2, 4002, 4003, 7, 81, 2, 2, 4003, 4004, 7, 80, 2, 2, 4004, 4005, 7, 69, 2, 2, 4005, 4006, 7, 67, 2, 2, 4006, 4007, 7, 86, 2, 2, 4007, 482, 3, 2, 2, 2, 4008, 4009, 7, 79, 2, 2, 4009, 4010, 7, 67, 2, 2, 4010, 4011, 7, 90, 2, 2, 4011, 484, 3, 2, 2, 2, 4012, 4013, 7, 79, 2, 2, 4013, 4014, 7, 75, 2, 2, 4014, 4015, 7, 80, 2, 2, 4015, 486, 3, 2, 2, 2, 4016, 4017, 7, 85, 2, 2, 4017, 4018, 7, 86, 2, 2, 4018, 4019, 7, 70, 2, 2, 4019, 488, 3, 2, 2, 2, 4020, 4021, 7, 85, 2, 2, 4021, 4022, 7, 86, 2, 2, 4022, 4023, 7, 70, 2, 2, 4023, 4024, 7, 70, 2, 2, 4024, 4025, 7, 71, 2, 2, 4025, 4026, 7, 88, 2, 2, 4026, 490, 3, 2, 2, 2, 4027, 4028, 7, 85, 2, 2, 4028, 4029, 7, 86, 2, 2, 4029, 4030, 7, 70, 2, 2, 4030, 4031, 7, 70, 2, 2, 4031, 4032, 7, 71, 2, 2, 4032, 4033, 7, 88, 2, 2, 4033, 4034, 7, 97, 2, 2, 4034, 4035, 7, 82, 2, 2, 4035, 4036, 7, 81, 2, 2, 4036, 4037, 7, 82, 2, 2, 4037, 492, 3, 2, 2, 2, 4038, 4039, 7, 85, 2, 2, 4039, 4040, 7, 86, 2, 2, 4040, 4041, 7, 70, 2, 2, 4041, 4042, 7, 70, 2, 2, 4042, 4043, 7, 71, 2, 2, 4043, 4044, 7, 88, 2, 2, 4044, 4045, 7, 97, 2, 2, 4045, 4046, 7, 85, 2, 2, 4046, 4047, 7, 67, 2, 2, 4047, 4048, 7, 79, 2, 2, 4048, 4049, 7, 82, 2, 2, 4049, 494, 3, 2, 2, 2, 4050, 4051, 7, 85, 2, 2, 4051, 4052, 7, 87, 2, 2, 4052, 4053, 7, 79, 2, 2, 4053, 496, 3, 2, 2, 2, 4054, 4055, 7, 88, 2, 2, 4055, 4056, 7, 67, 2, 2, 4056, 4057, 7, 84, 2, 2, 4057, 4058, 7, 97, 2, 2, 4058, 4059, 7, 82, 2, 2, 4059, 4060, 7, 81, 2, 2, 4060, 4061, 7, 82, 2, 2, 4061, 498, 3, 2, 2, 2, 4062, 4063, 7, 88, 2, 2, 4063, 4064, 7, 67, 2, 2, 4064, 4065, 7, 84, 2, 2, 4065, 4066, 7, 97, 2, 2, 4066, 4067, 7, 85, 2, 2, 4067, 4068, 7, 67, 2, 2, 4068, 4069, 7, 79, 2, 2, 4069, 4070, 7, 82, 2, 2, 4070, 500, 3, 2, 2, 2, 4071, 4072, 7, 88, 2, 2, 4072, 4073, 7, 67, 2, 2, 4073, 4074, 7, 84, 2, 2, 4074, 4075, 7, 75, 2, 2, 4075, 4076, 7, 67, 2, 2, 4076, 4077, 7, 80, 2, 2, 4077, 4078, 7, 69, 2, 2, 4078, 4079, 7, 71, 2, 2, 4079, 502, 3, 2, 2, 2, 4080, 4081, 7, 69, 2, 2, 4081, 4082, 7, 87, 2, 2, 4082, 4083, 7, 84, 2, 2, 4083, 4084, 7, 84, 2, 2, 4084, 4085, 7, 71, 2, 2, 4085, 4086, 7, 80, 2, 2, 4086, 4087, 7, 86, 2, 2, 4087, 4088, 7, 97, 2, 2, 4088, 4089, 7, 70, 2, 2, 4089, 4090, 7, 67, 2, 2, 4090, 4091, 7, 86, 2, 2, 4091, 4092, 7, 71, 2, 2, 4092, 504, 3, 2, 2, 2, 4093, 4094, 7, 69, 2, 2, 4094, 4095, 7, 87, 2, 2, 4095, 4096, 7, 84, 2, 2, 4096, 4097, 7, 84, 2, 2, 4097, 4098, 7, 71, 2, 2, 4098, 4099, 7, 80, 2, 2, 4099, 4100, 7, 86, 2, 2, 4100, 4101, 7, 97, 2, 2, 4101, 4102, 7, 86, 2, 2, 4102, 4103, 7, 75, 2, 2, 4103, 4104, 7, 79, 2, 2, 4104, 4105, 7, 71, 2, 2, 4105, 506, 3, 2, 2, 2, 4106, 4107, 7, 69, 2, 2, 4107, 4108, 7, 87, 2, 2, 4108, 4109, 7, 84, 2, 2, 4109, 4110, 7, 84, 2, 2, 4110, 4111, 7, 71, 2, 2, 4111, 4112, 7, 80, 2, 2, 4112, 4113, 7, 86, 2, 2, 4113, 4114, 7, 97, 2, 2, 4114, 4115, 7, 86, 2, 2, 4115, 4116, 7, 75, 2, 2, 4116, 4117, 7, 79, 2, 2, 4117, 4118, 7, 71, 2, 2, 4118, 4119, 7, 85, 2, 2, 4119, 4120, 7, 86, 2, 2, 4120, 4121, 7, 67, 2, 2, 4121, 4122, 7, 79, 2, 2, 4122, 4123, 7, 82, 2, 2, 4123, 508, 3, 2, 2, 2, 4124, 4125, 7, 78, 2, 2, 4125, 4126, 7, 81, 2, 2, 4126, 4127, 7, 69, 2, 2, 4127, 4128, 7, 67, 2, 2, 4128, 4129, 7, 78, 2, 2, 4129, 4130, 7, 86, 2, 2, 4130, 4131, 7, 75, 2, 2, 4131, 4132, 7, 79, 2, 2, 4132, 4133, 7, 71, 2, 2, 4133, 510, 3, 2, 2, 2, 4134, 4135, 7, 69, 2, 2, 4135, 4136, 7, 87, 2, 2, 4136, 4137, 7, 84, 2, 2, 4137, 4138, 7, 70, 2, 2, 4138, 4139, 7, 67, 2, 2, 4139, 4140, 7, 86, 2, 2, 4140, 4141, 7, 71, 2, 2, 4141, 512, 3, 2, 2, 2, 4142, 4143, 7, 69, 2, 2, 4143, 4144, 7, 87, 2, 2, 4144, 4145, 7, 84, 2, 2, 4145, 4146, 7, 86, 2, 2, 4146, 4147, 7, 75, 2, 2, 4147, 4148, 7, 79, 2, 2, 4148, 4149, 7, 71, 2, 2, 4149, 514, 3, 2, 2, 2, 4150, 4151, 7, 70, 2, 2, 4151, 4152, 7, 67, 2, 2, 4152, 4153, 7, 86, 2, 2, 4153, 4154, 7, 71, 2, 2, 4154, 4155, 7, 97, 2, 2, 4155, 4156, 7, 67, 2, 2, 4156, 4157, 7, 70, 2, 2, 4157, 4158, 7, 70, 2, 2, 4158, 516, 3, 2, 2, 2, 4159, 4160, 7, 70, 2, 2, 4160, 4161, 7, 67, 2, 2, 4161, 4162, 7, 86, 2, 2, 4162, 4163, 7, 71, 2, 2, 4163, 4164, 7, 97, 2, 2, 4164, 4165, 7, 85, 2, 2, 4165, 4166, 7, 87, 2, 2, 4166, 4167, 7, 68, 2, 2, 4167, 518, 3, 2, 2, 2, 4168, 4169, 7, 71, 2, 2, 4169, 4170, 7, 90, 2, 2, 4170, 4171, 7, 86, 2, 2, 4171, 4172, 7, 84, 2, 2, 4172, 4173, 7, 67, 2, 2, 4173, 4174, 7, 69, 2, 2, 4174, 4175, 7, 86, 2, 2, 4175, 520, 3, 2, 2, 2, 4176, 4177, 7, 78, 2, 2, 4177, 4178, 7, 81, 2, 2, 4178, 4179, 7, 69, 2, 2, 4179, 4180, 7, 67, 2, 2, 4180, 4181, 7, 78, 2, 2, 4181, 4182, 7, 86, 2, 2, 4182, 4183, 7, 75, 2, 2, 4183, 4184, 7, 79, 2, 2, 4184, 4185, 7, 71, 2, 2, 4185, 4186, 7, 85, 2, 2, 4186, 4187, 7, 86, 2, 2, 4187, 4188, 7, 67, 2, 2, 4188, 4189, 7, 79, 2, 2, 4189, 4190, 7, 82, 2, 2, 4190, 522, 3, 2, 2, 2, 4191, 4192, 7, 80, 2, 2, 4192, 4193, 7, 81, 2, 2, 4193, 4194, 7, 89, 2, 2, 4194, 524, 3, 2, 2, 2, 4195, 4196, 7, 82, 2, 2, 4196, 4197, 7, 81, 2, 2, 4197, 4198, 7, 85, 2, 2, 4198, 4199, 7, 75, 2, 2, 4199, 4200, 7, 86, 2, 2, 4200, 4201, 7, 75, 2, 2, 4201, 4202, 7, 81, 2, 2, 4202, 4203, 7, 80, 2, 2, 4203, 526, 3, 2, 2, 2, 4204, 4205, 7, 85, 2, 2, 4205, 4206, 7, 87, 2, 2, 4206, 4207, 7, 68, 2, 2, 4207, 4208, 7, 85, 2, 2, 4208, 4209, 7, 86, 2, 2, 4209, 4210, 7, 84, 2, 2, 4210, 528, 3, 2, 2, 2, 4211, 4212, 7, 85, 2, 2, 4212, 4213, 7, 87, 2, 2, 4213, 4214, 7, 68, 2, 2, 4214, 4215, 7, 85, 2, 2, 4215, 4216, 7, 86, 2, 2, 4216, 4217, 7, 84, 2, 2, 4217, 4218, 7, 75, 2, 2, 4218, 4219, 7, 80, 2, 2, 4219, 4220, 7, 73, 2, 2, 4220, 530, 3, 2, 2, 2, 4221, 4222, 7, 85, 2, 2, 4222, 4223, 7, 91, 2, 2, 4223, 4224, 7, 85, 2, 2, 4224, 4225, 7, 70, 2, 2, 4225, 4226, 7, 67, 2, 2, 4226, 4227, 7, 86, 2, 2, 4227, 4228, 7, 71, 2, 2, 4228, 532, 3, 2, 2, 2, 4229, 4230, 7, 86, 2, 2, 4230, 4231, 7, 84, 2, 2, 4231, 4232, 7, 75, 2, 2, 4232, 4233, 7, 79, 2, 2, 4233, 534, 3, 2, 2, 2, 4234, 4235, 7, 87, 2, 2, 4235, 4236, 7, 86, 2, 2, 4236, 4237, 7, 69, 2, 2, 4237, 4238, 7, 97, 2, 2, 4238, 4239, 7, 70, 2, 2, 4239, 4240, 7, 67, 2, 2, 4240, 4241, 7, 86, 2, 2, 4241, 4242, 7, 71, 2, 2, 4242, 536, 3, 2, 2, 2, 4243, 4244, 7, 87, 2, 2, 4244, 4245, 7, 86, 2, 2, 4245, 4246, 7, 69, 2, 2, 4246, 4247, 7, 97, 2, 2, 4247, 4248, 7, 86, 2, 2, 4248, 4249, 7, 75, 2, 2, 4249, 4250, 7, 79, 2, 2, 4250, 4251, 7, 71, 2, 2, 4251, 538, 3, 2, 2, 2, 4252, 4253, 7, 87, 2, 2, 4253, 4254, 7, 86, 2, 2, 4254, 4255, 7, 69, 2, 2, 4255, 4256, 7, 97, 2, 2, 4256, 4257, 7, 86, 2, 2, 4257, 4258, 7, 75, 2, 2, 4258, 4259, 7, 79, 2, 2, 4259, 4260, 7, 71, 2, 2, 4260, 4261, 7, 85, 2, 2, 4261, 4262, 7, 86, 2, 2, 4262, 4263, 7, 67, 2, 2, 4263, 4264, 7, 79, 2, 2, 4264, 4265, 7, 82, 2, 2, 4265, 540, 3, 2, 2, 2, 4266, 4267, 7, 67, 2, 2, 4267, 4268, 7, 69, 2, 2, 4268, 4269, 7, 69, 2, 2, 4269, 4270, 7, 81, 2, 2, 4270, 4271, 7, 87, 2, 2, 4271, 4272, 7, 80, 2, 2, 4272, 4273, 7, 86, 2, 2, 4273, 542, 3, 2, 2, 2, 4274, 4275, 7, 67, 2, 2, 4275, 4276, 7, 69, 2, 2, 4276, 4277, 7, 86, 2, 2, 4277, 4278, 7, 75, 2, 2, 4278, 4279, 7, 81, 2, 2, 4279, 4280, 7, 80, 2, 2, 4280, 544, 3, 2, 2, 2, 4281, 4282, 7, 67, 2, 2, 4282, 4283, 7, 72, 2, 2, 4283, 4284, 7, 86, 2, 2, 4284, 4285, 7, 71, 2, 2, 4285, 4286, 7, 84, 2, 2, 4286, 546, 3, 2, 2, 2, 4287, 4288, 7, 67, 2, 2, 4288, 4289, 7, 73, 2, 2, 4289, 4290, 7, 73, 2, 2, 4290, 4291, 7, 84, 2, 2, 4291, 4292, 7, 71, 2, 2, 4292, 4293, 7, 73, 2, 2, 4293, 4294, 7, 67, 2, 2, 4294, 4295, 7, 86, 2, 2, 4295, 4296, 7, 71, 2, 2, 4296, 548, 3, 2, 2, 2, 4297, 4298, 7, 67, 2, 2, 4298, 4299, 7, 78, 2, 2, 4299, 4300, 7, 73, 2, 2, 4300, 4301, 7, 81, 2, 2, 4301, 4302, 7, 84, 2, 2, 4302, 4303, 7, 75, 2, 2, 4303, 4304, 7, 86, 2, 2, 4304, 4305, 7, 74, 2, 2, 4305, 4306, 7, 79, 2, 2, 4306, 550, 3, 2, 2, 2, 4307, 4308, 7, 67, 2, 2, 4308, 4309, 7, 80, 2, 2, 4309, 4310, 7, 91, 2, 2, 4310, 552, 3, 2, 2, 2, 4311, 4312, 7, 67, 2, 2, 4312, 4313, 7, 86, 2, 2, 4313, 554, 3, 2, 2, 2, 4314, 4315, 7, 67, 2, 2, 4315, 4316, 7, 87, 2, 2, 4316, 4317, 7, 86, 2, 2, 4317, 4318, 7, 74, 2, 2, 4318, 4319, 7, 81, 2, 2, 4319, 4320, 7, 84, 2, 2, 4320, 4321, 7, 85, 2, 2, 4321, 556, 3, 2, 2, 2, 4322, 4323, 7, 67, 2, 2, 4323, 4324, 7, 87, 2, 2, 4324, 4325, 7, 86, 2, 2, 4325, 4326, 7, 81, 2, 2, 4326, 4327, 7, 69, 2, 2, 4327, 4328, 7, 81, 2, 2, 4328, 4329, 7, 79, 2, 2, 4329, 4330, 7, 79, 2, 2, 4330, 4331, 7, 75, 2, 2, 4331, 4332, 7, 86, 2, 2, 4332, 558, 3, 2, 2, 2, 4333, 4334, 7, 67, 2, 2, 4334, 4335, 7, 87, 2, 2, 4335, 4336, 7, 86, 2, 2, 4336, 4337, 7, 81, 2, 2, 4337, 4338, 7, 71, 2, 2, 4338, 4339, 7, 90, 2, 2, 4339, 4340, 7, 86, 2, 2, 4340, 4341, 7, 71, 2, 2, 4341, 4342, 7, 80, 2, 2, 4342, 4343, 7, 70, 2, 2, 4343, 4344, 7, 97, 2, 2, 4344, 4345, 7, 85, 2, 2, 4345, 4346, 7, 75, 2, 2, 4346, 4347, 7, 92, 2, 2, 4347, 4348, 7, 71, 2, 2, 4348, 560, 3, 2, 2, 2, 4349, 4350, 7, 67, 2, 2, 4350, 4351, 7, 87, 2, 2, 4351, 4352, 7, 86, 2, 2, 4352, 4353, 7, 81, 2, 2, 4353, 4354, 7, 97, 2, 2, 4354, 4355, 7, 75, 2, 2, 4355, 4356, 7, 80, 2, 2, 4356, 4357, 7, 69, 2, 2, 4357, 4358, 7, 84, 2, 2, 4358, 4359, 7, 71, 2, 2, 4359, 4360, 7, 79, 2, 2, 4360, 4361, 7, 71, 2, 2, 4361, 4362, 7, 80, 2, 2, 4362, 4363, 7, 86, 2, 2, 4363, 562, 3, 2, 2, 2, 4364, 4365, 7, 67, 2, 2, 4365, 4366, 7, 88, 2, 2, 4366, 4367, 7, 73, 2, 2, 4367, 4368, 7, 97, 2, 2, 4368, 4369, 7, 84, 2, 2, 4369, 4370, 7, 81, 2, 2, 4370, 4371, 7, 89, 2, 2, 4371, 4372, 7, 97, 2, 2, 4372, 4373, 7, 78, 2, 2, 4373, 4374, 7, 71, 2, 2, 4374, 4375, 7, 80, 2, 2, 4375, 4376, 7, 73, 2, 2, 4376, 4377, 7, 86, 2, 2, 4377, 4378, 7, 74, 2, 2, 4378, 564, 3, 2, 2, 2, 4379, 4380, 7, 68, 2, 2, 4380, 4381, 7, 71, 2, 2, 4381, 4382, 7, 73, 2, 2, 4382, 4383, 7, 75, 2, 2, 4383, 4384, 7, 80, 2, 2, 4384, 566, 3, 2, 2, 2, 4385, 4386, 7, 68, 2, 2, 4386, 4387, 7, 75, 2, 2, 4387, 4388, 7, 80, 2, 2, 4388, 4389, 7, 78, 2, 2, 4389, 4390, 7, 81, 2, 2, 4390, 4391, 7, 73, 2, 2, 4391, 568, 3, 2, 2, 2, 4392, 4393, 7, 68, 2, 2, 4393, 4394, 7, 75, 2, 2, 4394, 4395, 7, 86, 2, 2, 4395, 570, 3, 2, 2, 2, 4396, 4397, 7, 68, 2, 2, 4397, 4398, 7, 78, 2, 2, 4398, 4399, 7, 81, 2, 2, 4399, 4400, 7, 69, 2, 2, 4400, 4401, 7, 77, 2, 2, 4401, 572, 3, 2, 2, 2, 4402, 4403, 7, 68, 2, 2, 4403, 4404, 7, 81, 2, 2, 4404, 4405, 7, 81, 2, 2, 4405, 4406, 7, 78, 2, 2, 4406, 574, 3, 2, 2, 2, 4407, 4408, 7, 68, 2, 2, 4408, 4409, 7, 81, 2, 2, 4409, 4410, 7, 81, 2, 2, 4410, 4411, 7, 78, 2, 2, 4411, 4412, 7, 71, 2, 2, 4412, 4413, 7, 67, 2, 2, 4413, 4414, 7, 80, 2, 2, 4414, 576, 3, 2, 2, 2, 4415, 4416, 7, 68, 2, 2, 4416, 4417, 7, 86, 2, 2, 4417, 4418, 7, 84, 2, 2, 4418, 4419, 7, 71, 2, 2, 4419, 4420, 7, 71, 2, 2, 4420, 578, 3, 2, 2, 2, 4421, 4422, 7, 69, 2, 2, 4422, 4423, 7, 67, 2, 2, 4423, 4424, 7, 69, 2, 2, 4424, 4425, 7, 74, 2, 2, 4425, 4426, 7, 71, 2, 2, 4426, 580, 3, 2, 2, 2, 4427, 4428, 7, 69, 2, 2, 4428, 4429, 7, 67, 2, 2, 4429, 4430, 7, 85, 2, 2, 4430, 4431, 7, 69, 2, 2, 4431, 4432, 7, 67, 2, 2, 4432, 4433, 7, 70, 2, 2, 4433, 4434, 7, 71, 2, 2, 4434, 4435, 7, 70, 2, 2, 4435, 582, 3, 2, 2, 2, 4436, 4437, 7, 69, 2, 2, 4437, 4438, 7, 74, 2, 2, 4438, 4439, 7, 67, 2, 2, 4439, 4440, 7, 75, 2, 2, 4440, 4441, 7, 80, 2, 2, 4441, 584, 3, 2, 2, 2, 4442, 4443, 7, 69, 2, 2, 4443, 4444, 7, 74, 2, 2, 4444, 4445, 7, 67, 2, 2, 4445, 4446, 7, 80, 2, 2, 4446, 4447, 7, 73, 2, 2, 4447, 4448, 7, 71, 2, 2, 4448, 4449, 7, 70, 2, 2, 4449, 586, 3, 2, 2, 2, 4450, 4451, 7, 69, 2, 2, 4451, 4452, 7, 74, 2, 2, 4452, 4453, 7, 67, 2, 2, 4453, 4454, 7, 80, 2, 2, 4454, 4455, 7, 80, 2, 2, 4455, 4456, 7, 71, 2, 2, 4456, 4457, 7, 78, 2, 2, 4457, 588, 3, 2, 2, 2, 4458, 4459, 7, 69, 2, 2, 4459, 4460, 7, 74, 2, 2, 4460, 4461, 7, 71, 2, 2, 4461, 4462, 7, 69, 2, 2, 4462, 4463, 7, 77, 2, 2, 4463, 4464, 7, 85, 2, 2, 4464, 4465, 7, 87, 2, 2, 4465, 4466, 7, 79, 2, 2, 4466, 590, 3, 2, 2, 2, 4467, 4468, 7, 82, 2, 2, 4468, 4469, 7, 67, 2, 2, 4469, 4470, 7, 73, 2, 2, 4470, 4471, 7, 71, 2, 2, 4471, 4472, 7, 97, 2, 2, 4472, 4473, 7, 69, 2, 2, 4473, 4474, 7, 74, 2, 2, 4474, 4475, 7, 71, 2, 2, 4475, 4476, 7, 69, 2, 2, 4476, 4477, 7, 77, 2, 2, 4477, 4478, 7, 85, 2, 2, 4478, 4479, 7, 87, 2, 2, 4479, 4480, 7, 79, 2, 2, 4480, 592, 3, 2, 2, 2, 4481, 4482, 7, 69, 2, 2, 4482, 4483, 7, 75, 2, 2, 4483, 4484, 7, 82, 2, 2, 4484, 4485, 7, 74, 2, 2, 4485, 4486, 7, 71, 2, 2, 4486, 4487, 7, 84, 2, 2, 4487, 594, 3, 2, 2, 2, 4488, 4489, 7, 69, 2, 2, 4489, 4490, 7, 78, 2, 2, 4490, 4491, 7, 67, 2, 2, 4491, 4492, 7, 85, 2, 2, 4492, 4493, 7, 85, 2, 2, 4493, 4494, 7, 97, 2, 2, 4494, 4495, 7, 81, 2, 2, 4495, 4496, 7, 84, 2, 2, 4496, 4497, 7, 75, 2, 2, 4497, 4498, 7, 73, 2, 2, 4498, 4499, 7, 75, 2, 2, 4499, 4500, 7, 80, 2, 2, 4500, 596, 3, 2, 2, 2, 4501, 4502, 7, 69, 2, 2, 4502, 4503, 7, 78, 2, 2, 4503, 4504, 7, 75, 2, 2, 4504, 4505, 7, 71, 2, 2, 4505, 4506, 7, 80, 2, 2, 4506, 4507, 7, 86, 2, 2, 4507, 598, 3, 2, 2, 2, 4508, 4509, 7, 69, 2, 2, 4509, 4510, 7, 78, 2, 2, 4510, 4511, 7, 81, 2, 2, 4511, 4512, 7, 85, 2, 2, 4512, 4513, 7, 71, 2, 2, 4513, 600, 3, 2, 2, 2, 4514, 4515, 7, 69, 2, 2, 4515, 4516, 7, 81, 2, 2, 4516, 4517, 7, 67, 2, 2, 4517, 4518, 7, 78, 2, 2, 4518, 4519, 7, 71, 2, 2, 4519, 4520, 7, 85, 2, 2, 4520, 4521, 7, 69, 2, 2, 4521, 4522, 7, 71, 2, 2, 4522, 602, 3, 2, 2, 2, 4523, 4524, 7, 69, 2, 2, 4524, 4525, 7, 81, 2, 2, 4525, 4526, 7, 70, 2, 2, 4526, 4527, 7, 71, 2, 2, 4527, 604, 3, 2, 2, 2, 4528, 4529, 7, 69, 2, 2, 4529, 4530, 7, 81, 2, 2, 4530, 4531, 7, 78, 2, 2, 4531, 4532, 7, 87, 2, 2, 4532, 4533, 7, 79, 2, 2, 4533, 4534, 7, 80, 2, 2, 4534, 4535, 7, 85, 2, 2, 4535, 606, 3, 2, 2, 2, 4536, 4537, 7, 69, 2, 2, 4537, 4538, 7, 81, 2, 2, 4538, 4539, 7, 78, 2, 2, 4539, 4540, 7, 87, 2, 2, 4540, 4541, 7, 79, 2, 2, 4541, 4542, 7, 80, 2, 2, 4542, 4543, 7, 97, 2, 2, 4543, 4544, 7, 72, 2, 2, 4544, 4545, 7, 81, 2, 2, 4545, 4546, 7, 84, 2, 2, 4546, 4547, 7, 79, 2, 2, 4547, 4548, 7, 67, 2, 2, 4548, 4549, 7, 86, 2, 2, 4549, 608, 3, 2, 2, 2, 4550, 4551, 7, 69, 2, 2, 4551, 4552, 7, 81, 2, 2, 4552, 4553, 7, 78, 2, 2, 4553, 4554, 7, 87, 2, 2, 4554, 4555, 7, 79, 2, 2, 4555, 4556, 7, 80, 2, 2, 4556, 4557, 7, 97, 2, 2, 4557, 4558, 7, 80, 2, 2, 4558, 4559, 7, 67, 2, 2, 4559, 4560, 7, 79, 2, 2, 4560, 4561, 7, 71, 2, 2, 4561, 610, 3, 2, 2, 2, 4562, 4563, 7, 69, 2, 2, 4563, 4564, 7, 81, 2, 2, 4564, 4565, 7, 79, 2, 2, 4565, 4566, 7, 79, 2, 2, 4566, 4567, 7, 71, 2, 2, 4567, 4568, 7, 80, 2, 2, 4568, 4569, 7, 86, 2, 2, 4569, 612, 3, 2, 2, 2, 4570, 4571, 7, 69, 2, 2, 4571, 4572, 7, 81, 2, 2, 4572, 4573, 7, 79, 2, 2, 4573, 4574, 7, 79, 2, 2, 4574, 4575, 7, 75, 2, 2, 4575, 4576, 7, 86, 2, 2, 4576, 614, 3, 2, 2, 2, 4577, 4578, 7, 69, 2, 2, 4578, 4579, 7, 81, 2, 2, 4579, 4580, 7, 79, 2, 2, 4580, 4581, 7, 82, 2, 2, 4581, 4582, 7, 67, 2, 2, 4582, 4583, 7, 69, 2, 2, 4583, 4584, 7, 86, 2, 2, 4584, 616, 3, 2, 2, 2, 4585, 4586, 7, 69, 2, 2, 4586, 4587, 7, 81, 2, 2, 4587, 4588, 7, 79, 2, 2, 4588, 4589, 7, 82, 2, 2, 4589, 4590, 7, 78, 2, 2, 4590, 4591, 7, 71, 2, 2, 4591, 4592, 7, 86, 2, 2, 4592, 4593, 7, 75, 2, 2, 4593, 4594, 7, 81, 2, 2, 4594, 4595, 7, 80, 2, 2, 4595, 618, 3, 2, 2, 2, 4596, 4597, 7, 69, 2, 2, 4597, 4598, 7, 81, 2, 2, 4598, 4599, 7, 79, 2, 2, 4599, 4600, 7, 82, 2, 2, 4600, 4601, 7, 84, 2, 2, 4601, 4602, 7, 71, 2, 2, 4602, 4603, 7, 85, 2, 2, 4603, 4604, 7, 85, 2, 2, 4604, 4605, 7, 71, 2, 2, 4605, 4606, 7, 70, 2, 2, 4606, 620, 3, 2, 2, 2, 4607, 4608, 7, 69, 2, 2, 4608, 4609, 7, 81, 2, 2, 4609, 4610, 7, 79, 2, 2, 4610, 4611, 7, 82, 2, 2, 4611, 4612, 7, 84, 2, 2, 4612, 4613, 7, 71, 2, 2, 4613, 4614, 7, 85, 2, 2, 4614, 4615, 7, 85, 2, 2, 4615, 4616, 7, 75, 2, 2, 4616, 4617, 7, 81, 2, 2, 4617, 4618, 7, 80, 2, 2, 4618, 622, 3, 2, 2, 2, 4619, 4620, 7, 69, 2, 2, 4620, 4621, 7, 81, 2, 2, 4621, 4622, 7, 80, 2, 2, 4622, 4623, 7, 69, 2, 2, 4623, 4624, 7, 87, 2, 2, 4624, 4625, 7, 84, 2, 2, 4625, 4626, 7, 84, 2, 2, 4626, 4627, 7, 71, 2, 2, 4627, 4628, 7, 80, 2, 2, 4628, 4629, 7, 86, 2, 2, 4629, 624, 3, 2, 2, 2, 4630, 4631, 7, 69, 2, 2, 4631, 4632, 7, 81, 2, 2, 4632, 4633, 7, 80, 2, 2, 4633, 4634, 7, 80, 2, 2, 4634, 4635, 7, 71, 2, 2, 4635, 4636, 7, 69, 2, 2, 4636, 4637, 7, 86, 2, 2, 4637, 4638, 7, 75, 2, 2, 4638, 4639, 7, 81, 2, 2, 4639, 4640, 7, 80, 2, 2, 4640, 626, 3, 2, 2, 2, 4641, 4642, 7, 69, 2, 2, 4642, 4643, 7, 81, 2, 2, 4643, 4644, 7, 80, 2, 2, 4644, 4645, 7, 85, 2, 2, 4645, 4646, 7, 75, 2, 2, 4646, 4647, 7, 85, 2, 2, 4647, 4648, 7, 86, 2, 2, 4648, 4649, 7, 71, 2, 2, 4649, 4650, 7, 80, 2, 2, 4650, 4651, 7, 86, 2, 2, 4651, 628, 3, 2, 2, 2, 4652, 4653, 7, 69, 2, 2, 4653, 4654, 7, 81, 2, 2, 4654, 4655, 7, 80, 2, 2, 4655, 4656, 7, 85, 2, 2, 4656, 4657, 7, 86, 2, 2, 4657, 4658, 7, 84, 2, 2, 4658, 4659, 7, 67, 2, 2, 4659, 4660, 7, 75, 2, 2, 4660, 4661, 7, 80, 2, 2, 4661, 4662, 7, 86, 2, 2, 4662, 4663, 7, 97, 2, 2, 4663, 4664, 7, 69, 2, 2, 4664, 4665, 7, 67, 2, 2, 4665, 4666, 7, 86, 2, 2, 4666, 4667, 7, 67, 2, 2, 4667, 4668, 7, 78, 2, 2, 4668, 4669, 7, 81, 2, 2, 4669, 4670, 7, 73, 2, 2, 4670, 630, 3, 2, 2, 2, 4671, 4672, 7, 69, 2, 2, 4672, 4673, 7, 81, 2, 2, 4673, 4674, 7, 80, 2, 2, 4674, 4675, 7, 85, 2, 2, 4675, 4676, 7, 86, 2, 2, 4676, 4677, 7, 84, 2, 2, 4677, 4678, 7, 67, 2, 2, 4678, 4679, 7, 75, 2, 2, 4679, 4680, 7, 80, 2, 2, 4680, 4681, 7, 86, 2, 2, 4681, 4682, 7, 97, 2, 2, 4682, 4683, 7, 85, 2, 2, 4683, 4684, 7, 69, 2, 2, 4684, 4685, 7, 74, 2, 2, 4685, 4686, 7, 71, 2, 2, 4686, 4687, 7, 79, 2, 2, 4687, 4688, 7, 67, 2, 2, 4688, 632, 3, 2, 2, 2, 4689, 4690, 7, 69, 2, 2, 4690, 4691, 7, 81, 2, 2, 4691, 4692, 7, 80, 2, 2, 4692, 4693, 7, 85, 2, 2, 4693, 4694, 7, 86, 2, 2, 4694, 4695, 7, 84, 2, 2, 4695, 4696, 7, 67, 2, 2, 4696, 4697, 7, 75, 2, 2, 4697, 4698, 7, 80, 2, 2, 4698, 4699, 7, 86, 2, 2, 4699, 4700, 7, 97, 2, 2, 4700, 4701, 7, 80, 2, 2, 4701, 4702, 7, 67, 2, 2, 4702, 4703, 7, 79, 2, 2, 4703, 4704, 7, 71, 2, 2, 4704, 634, 3, 2, 2, 2, 4705, 4706, 7, 69, 2, 2, 4706, 4707, 7, 81, 2, 2, 4707, 4708, 7, 80, 2, 2, 4708, 4709, 7, 86, 2, 2, 4709, 4710, 7, 67, 2, 2, 4710, 4711, 7, 75, 2, 2, 4711, 4712, 7, 80, 2, 2, 4712, 4713, 7, 85, 2, 2, 4713, 636, 3, 2, 2, 2, 4714, 4715, 7, 69, 2, 2, 4715, 4716, 7, 81, 2, 2, 4716, 4717, 7, 80, 2, 2, 4717, 4718, 7, 86, 2, 2, 4718, 4719, 7, 71, 2, 2, 4719, 4720, 7, 90, 2, 2, 4720, 4721, 7, 86, 2, 2, 4721, 638, 3, 2, 2, 2, 4722, 4723, 7, 69, 2, 2, 4723, 4724, 7, 81, 2, 2, 4724, 4725, 7, 80, 2, 2, 4725, 4726, 7, 86, 2, 2, 4726, 4727, 7, 84, 2, 2, 4727, 4728, 7, 75, 2, 2, 4728, 4729, 7, 68, 2, 2, 4729, 4730, 7, 87, 2, 2, 4730, 4731, 7, 86, 2, 2, 4731, 4732, 7, 81, 2, 2, 4732, 4733, 7, 84, 2, 2, 4733, 4734, 7, 85, 2, 2, 4734, 640, 3, 2, 2, 2, 4735, 4736, 7, 69, 2, 2, 4736, 4737, 7, 81, 2, 2, 4737, 4738, 7, 82, 2, 2, 4738, 4739, 7, 91, 2, 2, 4739, 642, 3, 2, 2, 2, 4740, 4741, 7, 69, 2, 2, 4741, 4742, 7, 82, 2, 2, 4742, 4743, 7, 87, 2, 2, 4743, 644, 3, 2, 2, 2, 4744, 4745, 7, 69, 2, 2, 4745, 4746, 7, 87, 2, 2, 4746, 4747, 7, 84, 2, 2, 4747, 4748, 7, 85, 2, 2, 4748, 4749, 7, 81, 2, 2, 4749, 4750, 7, 84, 2, 2, 4750, 4751, 7, 97, 2, 2, 4751, 4752, 7, 80, 2, 2, 4752, 4753, 7, 67, 2, 2, 4753, 4754, 7, 79, 2, 2, 4754, 4755, 7, 71, 2, 2, 4755, 646, 3, 2, 2, 2, 4756, 4757, 7, 70, 2, 2, 4757, 4758, 7, 67, 2, 2, 4758, 4759, 7, 86, 2, 2, 4759, 4760, 7, 67, 2, 2, 4760, 648, 3, 2, 2, 2, 4761, 4762, 7, 70, 2, 2, 4762, 4763, 7, 67, 2, 2, 4763, 4764, 7, 86, 2, 2, 4764, 4765, 7, 67, 2, 2, 4765, 4766, 7, 72, 2, 2, 4766, 4767, 7, 75, 2, 2, 4767, 4768, 7, 78, 2, 2, 4768, 4769, 7, 71, 2, 2, 4769, 650, 3, 2, 2, 2, 4770, 4771, 7, 70, 2, 2, 4771, 4772, 7, 71, 2, 2, 4772, 4773, 7, 67, 2, 2, 4773, 4774, 7, 78, 2, 2, 4774, 4775, 7, 78, 2, 2, 4775, 4776, 7, 81, 2, 2, 4776, 4777, 7, 69, 2, 2, 4777, 4778, 7, 67, 2, 2, 4778, 4779, 7, 86, 2, 2, 4779, 4780, 7, 71, 2, 2, 4780, 652, 3, 2, 2, 2, 4781, 4782, 7, 70, 2, 2, 4782, 4783, 7, 71, 2, 2, 4783, 4784, 7, 72, 2, 2, 4784, 4785, 7, 67, 2, 2, 4785, 4786, 7, 87, 2, 2, 4786, 4787, 7, 78, 2, 2, 4787, 4788, 7, 86, 2, 2, 4788, 4789, 7, 97, 2, 2, 4789, 4790, 7, 67, 2, 2, 4790, 4791, 7, 87, 2, 2, 4791, 4792, 7, 86, 2, 2, 4792, 4793, 7, 74, 2, 2, 4793, 654, 3, 2, 2, 2, 4794, 4795, 7, 70, 2, 2, 4795, 4796, 7, 71, 2, 2, 4796, 4797, 7, 72, 2, 2, 4797, 4798, 7, 75, 2, 2, 4798, 4799, 7, 80, 2, 2, 4799, 4800, 7, 71, 2, 2, 4800, 4801, 7, 84, 2, 2, 4801, 656, 3, 2, 2, 2, 4802, 4803, 7, 70, 2, 2, 4803, 4804, 7, 71, 2, 2, 4804, 4805, 7, 78, 2, 2, 4805, 4806, 7, 67, 2, 2, 4806, 4807, 7, 91, 2, 2, 4807, 4808, 7, 97, 2, 2, 4808, 4809, 7, 77, 2, 2, 4809, 4810, 7, 71, 2, 2, 4810, 4811, 7, 91, 2, 2, 4811, 4812, 7, 97, 2, 2, 4812, 4813, 7, 89, 2, 2, 4813, 4814, 7, 84, 2, 2, 4814, 4815, 7, 75, 2, 2, 4815, 4816, 7, 86, 2, 2, 4816, 4817, 7, 71, 2, 2, 4817, 658, 3, 2, 2, 2, 4818, 4819, 7, 70, 2, 2, 4819, 4820, 7, 71, 2, 2, 4820, 4821, 7, 85, 2, 2, 4821, 4822, 7, 97, 2, 2, 4822, 4823, 7, 77, 2, 2, 4823, 4824, 7, 71, 2, 2, 4824, 4825, 7, 91, 2, 2, 4825, 4826, 7, 97, 2, 2, 4826, 4827, 7, 72, 2, 2, 4827, 4828, 7, 75, 2, 2, 4828, 4829, 7, 78, 2, 2, 4829, 4830, 7, 71, 2, 2, 4830, 660, 3, 2, 2, 2, 4831, 4832, 7, 70, 2, 2, 4832, 4833, 7, 75, 2, 2, 4833, 4834, 7, 84, 2, 2, 4834, 4835, 7, 71, 2, 2, 4835, 4836, 7, 69, 2, 2, 4836, 4837, 7, 86, 2, 2, 4837, 4838, 7, 81, 2, 2, 4838, 4839, 7, 84, 2, 2, 4839, 4840, 7, 91, 2, 2, 4840, 662, 3, 2, 2, 2, 4841, 4842, 7, 70, 2, 2, 4842, 4843, 7, 75, 2, 2, 4843, 4844, 7, 85, 2, 2, 4844, 4845, 7, 67, 2, 2, 4845, 4846, 7, 68, 2, 2, 4846, 4847, 7, 78, 2, 2, 4847, 4848, 7, 71, 2, 2, 4848, 664, 3, 2, 2, 2, 4849, 4850, 7, 70, 2, 2, 4850, 4851, 7, 75, 2, 2, 4851, 4852, 7, 85, 2, 2, 4852, 4853, 7, 69, 2, 2, 4853, 4854, 7, 67, 2, 2, 4854, 4855, 7, 84, 2, 2, 4855, 4856, 7, 70, 2, 2, 4856, 666, 3, 2, 2, 2, 4857, 4858, 7, 70, 2, 2, 4858, 4859, 7, 75, 2, 2, 4859, 4860, 7, 85, 2, 2, 4860, 4861, 7, 77, 2, 2, 4861, 668, 3, 2, 2, 2, 4862, 4863, 7, 70, 2, 2, 4863, 4864, 7, 81, 2, 2, 4864, 670, 3, 2, 2, 2, 4865, 4866, 7, 70, 2, 2, 4866, 4867, 7, 87, 2, 2, 4867, 4868, 7, 79, 2, 2, 4868, 4869, 7, 82, 2, 2, 4869, 4870, 7, 72, 2, 2, 4870, 4871, 7, 75, 2, 2, 4871, 4872, 7, 78, 2, 2, 4872, 4873, 7, 71, 2, 2, 4873, 672, 3, 2, 2, 2, 4874, 4875, 7, 70, 2, 2, 4875, 4876, 7, 87, 2, 2, 4876, 4877, 7, 82, 2, 2, 4877, 4878, 7, 78, 2, 2, 4878, 4879, 7, 75, 2, 2, 4879, 4880, 7, 69, 2, 2, 4880, 4881, 7, 67, 2, 2, 4881, 4882, 7, 86, 2, 2, 4882, 4883, 7, 71, 2, 2, 4883, 674, 3, 2, 2, 2, 4884, 4885, 7, 70, 2, 2, 4885, 4886, 7, 91, 2, 2, 4886, 4887, 7, 80, 2, 2, 4887, 4888, 7, 67, 2, 2, 4888, 4889, 7, 79, 2, 2, 4889, 4890, 7, 75, 2, 2, 4890, 4891, 7, 69, 2, 2, 4891, 676, 3, 2, 2, 2, 4892, 4893, 7, 71, 2, 2, 4893, 4894, 7, 80, 2, 2, 4894, 4895, 7, 67, 2, 2, 4895, 4896, 7, 68, 2, 2, 4896, 4897, 7, 78, 2, 2, 4897, 4898, 7, 71, 2, 2, 4898, 678, 3, 2, 2, 2, 4899, 4900, 7, 71, 2, 2, 4900, 4901, 7, 80, 2, 2, 4901, 4902, 7, 69, 2, 2, 4902, 4903, 7, 84, 2, 2, 4903, 4904, 7, 91, 2, 2, 4904, 4905, 7, 82, 2, 2, 4905, 4906, 7, 86, 2, 2, 4906, 4907, 7, 75, 2, 2, 4907, 4908, 7, 81, 2, 2, 4908, 4909, 7, 80, 2, 2, 4909, 680, 3, 2, 2, 2, 4910, 4911, 7, 71, 2, 2, 4911, 4912, 7, 80, 2, 2, 4912, 4913, 7, 70, 2, 2, 4913, 682, 3, 2, 2, 2, 4914, 4915, 7, 71, 2, 2, 4915, 4916, 7, 80, 2, 2, 4916, 4917, 7, 70, 2, 2, 4917, 4918, 7, 85, 2, 2, 4918, 684, 3, 2, 2, 2, 4919, 4920, 7, 71, 2, 2, 4920, 4921, 7, 80, 2, 2, 4921, 4922, 7, 73, 2, 2, 4922, 4923, 7, 75, 2, 2, 4923, 4924, 7, 80, 2, 2, 4924, 4925, 7, 71, 2, 2, 4925, 686, 3, 2, 2, 2, 4926, 4927, 7, 71, 2, 2, 4927, 4928, 7, 80, 2, 2, 4928, 4929, 7, 73, 2, 2, 4929, 4930, 7, 75, 2, 2, 4930, 4931, 7, 80, 2, 2, 4931, 4932, 7, 71, 2, 2, 4932, 4933, 7, 85, 2, 2, 4933, 688, 3, 2, 2, 2, 4934, 4935, 7, 71, 2, 2, 4935, 4936, 7, 84, 2, 2, 4936, 4937, 7, 84, 2, 2, 4937, 4938, 7, 81, 2, 2, 4938, 4939, 7, 84, 2, 2, 4939, 690, 3, 2, 2, 2, 4940, 4941, 7, 71, 2, 2, 4941, 4942, 7, 84, 2, 2, 4942, 4943, 7, 84, 2, 2, 4943, 4944, 7, 81, 2, 2, 4944, 4945, 7, 84, 2, 2, 4945, 4946, 7, 85, 2, 2, 4946, 692, 3, 2, 2, 2, 4947, 4948, 7, 71, 2, 2, 4948, 4949, 7, 85, 2, 2, 4949, 4950, 7, 69, 2, 2, 4950, 4951, 7, 67, 2, 2, 4951, 4952, 7, 82, 2, 2, 4952, 4953, 7, 71, 2, 2, 4953, 694, 3, 2, 2, 2, 4954, 4955, 7, 71, 2, 2, 4955, 4956, 7, 88, 2, 2, 4956, 4957, 7, 71, 2, 2, 4957, 4958, 7, 80, 2, 2, 4958, 696, 3, 2, 2, 2, 4959, 4960, 7, 71, 2, 2, 4960, 4961, 7, 88, 2, 2, 4961, 4962, 7, 71, 2, 2, 4962, 4963, 7, 80, 2, 2, 4963, 4964, 7, 86, 2, 2, 4964, 698, 3, 2, 2, 2, 4965, 4966, 7, 71, 2, 2, 4966, 4967, 7, 88, 2, 2, 4967, 4968, 7, 71, 2, 2, 4968, 4969, 7, 80, 2, 2, 4969, 4970, 7, 86, 2, 2, 4970, 4971, 7, 85, 2, 2, 4971, 700, 3, 2, 2, 2, 4972, 4973, 7, 71, 2, 2, 4973, 4974, 7, 88, 2, 2, 4974, 4975, 7, 71, 2, 2, 4975, 4976, 7, 84, 2, 2, 4976, 4977, 7, 91, 2, 2, 4977, 702, 3, 2, 2, 2, 4978, 4979, 7, 71, 2, 2, 4979, 4980, 7, 90, 2, 2, 4980, 4981, 7, 69, 2, 2, 4981, 4982, 7, 74, 2, 2, 4982, 4983, 7, 67, 2, 2, 4983, 4984, 7, 80, 2, 2, 4984, 4985, 7, 73, 2, 2, 4985, 4986, 7, 71, 2, 2, 4986, 704, 3, 2, 2, 2, 4987, 4988, 7, 71, 2, 2, 4988, 4989, 7, 90, 2, 2, 4989, 4990, 7, 69, 2, 2, 4990, 4991, 7, 78, 2, 2, 4991, 4992, 7, 87, 2, 2, 4992, 4993, 7, 85, 2, 2, 4993, 4994, 7, 75, 2, 2, 4994, 4995, 7, 88, 2, 2, 4995, 4996, 7, 71, 2, 2, 4996, 706, 3, 2, 2, 2, 4997, 4998, 7, 71, 2, 2, 4998, 4999, 7, 90, 2, 2, 4999, 5000, 7, 82, 2, 2, 5000, 5001, 7, 75, 2, 2, 5001, 5002, 7, 84, 2, 2, 5002, 5003, 7, 71, 2, 2, 5003, 708, 3, 2, 2, 2, 5004, 5005, 7, 71, 2, 2, 5005, 5006, 7, 90, 2, 2, 5006, 5007, 7, 82, 2, 2, 5007, 5008, 7, 81, 2, 2, 5008, 5009, 7, 84, 2, 2, 5009, 5010, 7, 86, 2, 2, 5010, 710, 3, 2, 2, 2, 5011, 5012, 7, 71, 2, 2, 5012, 5013, 7, 90, 2, 2, 5013, 5014, 7, 86, 2, 2, 5014, 5015, 7, 71, 2, 2, 5015, 5016, 7, 80, 2, 2, 5016, 5017, 7, 70, 2, 2, 5017, 5018, 7, 71, 2, 2, 5018, 5019, 7, 70, 2, 2, 5019, 712, 3, 2, 2, 2, 5020, 5021, 7, 71, 2, 2, 5021, 5022, 7, 90, 2, 2, 5022, 5023, 7, 86, 2, 2, 5023, 5024, 7, 71, 2, 2, 5024, 5025, 7, 80, 2, 2, 5025, 5026, 7, 86, 2, 2, 5026, 5027, 7, 97, 2, 2, 5027, 5028, 7, 85, 2, 2, 5028, 5029, 7, 75, 2, 2, 5029, 5030, 7, 92, 2, 2, 5030, 5031, 7, 71, 2, 2, 5031, 714, 3, 2, 2, 2, 5032, 5033, 7, 72, 2, 2, 5033, 5034, 7, 67, 2, 2, 5034, 5035, 7, 85, 2, 2, 5035, 5036, 7, 86, 2, 2, 5036, 716, 3, 2, 2, 2, 5037, 5038, 7, 72, 2, 2, 5038, 5039, 7, 67, 2, 2, 5039, 5040, 7, 87, 2, 2, 5040, 5041, 7, 78, 2, 2, 5041, 5042, 7, 86, 2, 2, 5042, 5043, 7, 85, 2, 2, 5043, 718, 3, 2, 2, 2, 5044, 5045, 7, 72, 2, 2, 5045, 5046, 7, 75, 2, 2, 5046, 5047, 7, 71, 2, 2, 5047, 5048, 7, 78, 2, 2, 5048, 5049, 7, 70, 2, 2, 5049, 5050, 7, 85, 2, 2, 5050, 720, 3, 2, 2, 2, 5051, 5052, 7, 72, 2, 2, 5052, 5053, 7, 75, 2, 2, 5053, 5054, 7, 78, 2, 2, 5054, 5055, 7, 71, 2, 2, 5055, 5056, 7, 97, 2, 2, 5056, 5057, 7, 68, 2, 2, 5057, 5058, 7, 78, 2, 2, 5058, 5059, 7, 81, 2, 2, 5059, 5060, 7, 69, 2, 2, 5060, 5061, 7, 77, 2, 2, 5061, 5062, 7, 97, 2, 2, 5062, 5063, 7, 85, 2, 2, 5063, 5064, 7, 75, 2, 2, 5064, 5065, 7, 92, 2, 2, 5065, 5066, 7, 71, 2, 2, 5066, 722, 3, 2, 2, 2, 5067, 5068, 7, 72, 2, 2, 5068, 5069, 7, 75, 2, 2, 5069, 5070, 7, 78, 2, 2, 5070, 5071, 7, 86, 2, 2, 5071, 5072, 7, 71, 2, 2, 5072, 5073, 7, 84, 2, 2, 5073, 724, 3, 2, 2, 2, 5074, 5075, 7, 72, 2, 2, 5075, 5076, 7, 75, 2, 2, 5076, 5077, 7, 84, 2, 2, 5077, 5078, 7, 85, 2, 2, 5078, 5079, 7, 86, 2, 2, 5079, 726, 3, 2, 2, 2, 5080, 5081, 7, 72, 2, 2, 5081, 5082, 7, 75, 2, 2, 5082, 5083, 7, 90, 2, 2, 5083, 5084, 7, 71, 2, 2, 5084, 5085, 7, 70, 2, 2, 5085, 728, 3, 2, 2, 2, 5086, 5087, 7, 72, 2, 2, 5087, 5088, 7, 78, 2, 2, 5088, 5089, 7, 87, 2, 2, 5089, 5090, 7, 85, 2, 2, 5090, 5091, 7, 74, 2, 2, 5091, 730, 3, 2, 2, 2, 5092, 5093, 7, 72, 2, 2, 5093, 5094, 7, 81, 2, 2, 5094, 5095, 7, 78, 2, 2, 5095, 5096, 7, 78, 2, 2, 5096, 5097, 7, 81, 2, 2, 5097, 5098, 7, 89, 2, 2, 5098, 5099, 7, 85, 2, 2, 5099, 732, 3, 2, 2, 2, 5100, 5101, 7, 72, 2, 2, 5101, 5102, 7, 81, 2, 2, 5102, 5103, 7, 87, 2, 2, 5103, 5104, 7, 80, 2, 2, 5104, 5105, 7, 70, 2, 2, 5105, 734, 3, 2, 2, 2, 5106, 5107, 7, 72, 2, 2, 5107, 5108, 7, 87, 2, 2, 5108, 5109, 7, 78, 2, 2, 5109, 5110, 7, 78, 2, 2, 5110, 736, 3, 2, 2, 2, 5111, 5112, 7, 72, 2, 2, 5112, 5113, 7, 87, 2, 2, 5113, 5114, 7, 80, 2, 2, 5114, 5115, 7, 69, 2, 2, 5115, 5116, 7, 86, 2, 2, 5116, 5117, 7, 75, 2, 2, 5117, 5118, 7, 81, 2, 2, 5118, 5119, 7, 80, 2, 2, 5119, 738, 3, 2, 2, 2, 5120, 5121, 7, 73, 2, 2, 5121, 5122, 7, 71, 2, 2, 5122, 5123, 7, 80, 2, 2, 5123, 5124, 7, 71, 2, 2, 5124, 5125, 7, 84, 2, 2, 5125, 5126, 7, 67, 2, 2, 5126, 5127, 7, 78, 2, 2, 5127, 740, 3, 2, 2, 2, 5128, 5129, 7, 73, 2, 2, 5129, 5130, 7, 78, 2, 2, 5130, 5131, 7, 81, 2, 2, 5131, 5132, 7, 68, 2, 2, 5132, 5133, 7, 67, 2, 2, 5133, 5134, 7, 78, 2, 2, 5134, 742, 3, 2, 2, 2, 5135, 5136, 7, 73, 2, 2, 5136, 5137, 7, 84, 2, 2, 5137, 5138, 7, 67, 2, 2, 5138, 5139, 7, 80, 2, 2, 5139, 5140, 7, 86, 2, 2, 5140, 5141, 7, 85, 2, 2, 5141, 744, 3, 2, 2, 2, 5142, 5143, 7, 73, 2, 2, 5143, 5144, 7, 84, 2, 2, 5144, 5145, 7, 81, 2, 2, 5145, 5146, 7, 87, 2, 2, 5146, 5147, 7, 82, 2, 2, 5147, 5148, 7, 97, 2, 2, 5148, 5149, 7, 84, 2, 2, 5149, 5150, 7, 71, 2, 2, 5150, 5151, 7, 82, 2, 2, 5151, 5152, 7, 78, 2, 2, 5152, 5153, 7, 75, 2, 2, 5153, 5154, 7, 69, 2, 2, 5154, 5155, 7, 67, 2, 2, 5155, 5156, 7, 86, 2, 2, 5156, 5157, 7, 75, 2, 2, 5157, 5158, 7, 81, 2, 2, 5158, 5159, 7, 80, 2, 2, 5159, 746, 3, 2, 2, 2, 5160, 5161, 7, 74, 2, 2, 5161, 5162, 7, 67, 2, 2, 5162, 5163, 7, 80, 2, 2, 5163, 5164, 7, 70, 2, 2, 5164, 5165, 7, 78, 2, 2, 5165, 5166, 7, 71, 2, 2, 5166, 5167, 7, 84, 2, 2, 5167, 748, 3, 2, 2, 2, 5168, 5169, 7, 74, 2, 2, 5169, 5170, 7, 67, 2, 2, 5170, 5171, 7, 85, 2, 2, 5171, 5172, 7, 74, 2, 2, 5172, 750, 3, 2, 2, 2, 5173, 5174, 7, 74, 2, 2, 5174, 5175, 7, 71, 2, 2, 5175, 5176, 7, 78, 2, 2, 5176, 5177, 7, 82, 2, 2, 5177, 752, 3, 2, 2, 2, 5178, 5179, 7, 74, 2, 2, 5179, 5180, 7, 81, 2, 2, 5180, 5181, 7, 85, 2, 2, 5181, 5182, 7, 86, 2, 2, 5182, 754, 3, 2, 2, 2, 5183, 5184, 7, 74, 2, 2, 5184, 5185, 7, 81, 2, 2, 5185, 5186, 7, 85, 2, 2, 5186, 5187, 7, 86, 2, 2, 5187, 5188, 7, 85, 2, 2, 5188, 756, 3, 2, 2, 2, 5189, 5190, 7, 75, 2, 2, 5190, 5191, 7, 70, 2, 2, 5191, 5192, 7, 71, 2, 2, 5192, 5193, 7, 80, 2, 2, 5193, 5194, 7, 86, 2, 2, 5194, 5195, 7, 75, 2, 2, 5195, 5196, 7, 72, 2, 2, 5196, 5197, 7, 75, 2, 2, 5197, 5198, 7, 71, 2, 2, 5198, 5199, 7, 70, 2, 2, 5199, 758, 3, 2, 2, 2, 5200, 5201, 7, 75, 2, 2, 5201, 5202, 7, 73, 2, 2, 5202, 5203, 7, 80, 2, 2, 5203, 5204, 7, 81, 2, 2, 5204, 5205, 7, 84, 2, 2, 5205, 5206, 7, 71, 2, 2, 5206, 5207, 7, 97, 2, 2, 5207, 5208, 7, 85, 2, 2, 5208, 5209, 7, 71, 2, 2, 5209, 5210, 7, 84, 2, 2, 5210, 5211, 7, 88, 2, 2, 5211, 5212, 7, 71, 2, 2, 5212, 5213, 7, 84, 2, 2, 5213, 5214, 7, 97, 2, 2, 5214, 5215, 7, 75, 2, 2, 5215, 5216, 7, 70, 2, 2, 5216, 5217, 7, 85, 2, 2, 5217, 760, 3, 2, 2, 2, 5218, 5219, 7, 75, 2, 2, 5219, 5220, 7, 79, 2, 2, 5220, 5221, 7, 82, 2, 2, 5221, 5222, 7, 81, 2, 2, 5222, 5223, 7, 84, 2, 2, 5223, 5224, 7, 86, 2, 2, 5224, 762, 3, 2, 2, 2, 5225, 5226, 7, 75, 2, 2, 5226, 5227, 7, 80, 2, 2, 5227, 5228, 7, 70, 2, 2, 5228, 5229, 7, 71, 2, 2, 5229, 5230, 7, 90, 2, 2, 5230, 5231, 7, 71, 2, 2, 5231, 5232, 7, 85, 2, 2, 5232, 764, 3, 2, 2, 2, 5233, 5234, 7, 75, 2, 2, 5234, 5235, 7, 80, 2, 2, 5235, 5236, 7, 75, 2, 2, 5236, 5237, 7, 86, 2, 2, 5237, 5238, 7, 75, 2, 2, 5238, 5239, 7, 67, 2, 2, 5239, 5240, 7, 78, 2, 2, 5240, 5241, 7, 97, 2, 2, 5241, 5242, 7, 85, 2, 2, 5242, 5243, 7, 75, 2, 2, 5243, 5244, 7, 92, 2, 2, 5244, 5245, 7, 71, 2, 2, 5245, 766, 3, 2, 2, 2, 5246, 5247, 7, 75, 2, 2, 5247, 5248, 7, 80, 2, 2, 5248, 5249, 7, 82, 2, 2, 5249, 5250, 7, 78, 2, 2, 5250, 5251, 7, 67, 2, 2, 5251, 5252, 7, 69, 2, 2, 5252, 5253, 7, 71, 2, 2, 5253, 768, 3, 2, 2, 2, 5254, 5255, 7, 75, 2, 2, 5255, 5256, 7, 80, 2, 2, 5256, 5257, 7, 85, 2, 2, 5257, 5258, 7, 71, 2, 2, 5258, 5259, 7, 84, 2, 2, 5259, 5260, 7, 86, 2, 2, 5260, 5261, 7, 97, 2, 2, 5261, 5262, 7, 79, 2, 2, 5262, 5263, 7, 71, 2, 2, 5263, 5264, 7, 86, 2, 2, 5264, 5265, 7, 74, 2, 2, 5265, 5266, 7, 81, 2, 2, 5266, 5267, 7, 70, 2, 2, 5267, 770, 3, 2, 2, 2, 5268, 5269, 7, 75, 2, 2, 5269, 5270, 7, 80, 2, 2, 5270, 5271, 7, 85, 2, 2, 5271, 5272, 7, 86, 2, 2, 5272, 5273, 7, 67, 2, 2, 5273, 5274, 7, 78, 2, 2, 5274, 5275, 7, 78, 2, 2, 5275, 772, 3, 2, 2, 2, 5276, 5277, 7, 75, 2, 2, 5277, 5278, 7, 80, 2, 2, 5278, 5279, 7, 85, 2, 2, 5279, 5280, 7, 86, 2, 2, 5280, 5281, 7, 67, 2, 2, 5281, 5282, 7, 80, 2, 2, 5282, 5283, 7, 69, 2, 2, 5283, 5284, 7, 71, 2, 2, 5284, 774, 3, 2, 2, 2, 5285, 5286, 7, 75, 2, 2, 5286, 5287, 7, 80, 2, 2, 5287, 5288, 7, 88, 2, 2, 5288, 5289, 7, 75, 2, 2, 5289, 5290, 7, 85, 2, 2, 5290, 5291, 7, 75, 2, 2, 5291, 5292, 7, 68, 2, 2, 5292, 5293, 7, 78, 2, 2, 5293, 5294, 7, 71, 2, 2, 5294, 776, 3, 2, 2, 2, 5295, 5296, 7, 75, 2, 2, 5296, 5297, 7, 80, 2, 2, 5297, 5298, 7, 88, 2, 2, 5298, 5299, 7, 81, 2, 2, 5299, 5300, 7, 77, 2, 2, 5300, 5301, 7, 71, 2, 2, 5301, 5302, 7, 84, 2, 2, 5302, 778, 3, 2, 2, 2, 5303, 5304, 7, 75, 2, 2, 5304, 5305, 7, 81, 2, 2, 5305, 780, 3, 2, 2, 2, 5306, 5307, 7, 75, 2, 2, 5307, 5308, 7, 81, 2, 2, 5308, 5309, 7, 97, 2, 2, 5309, 5310, 7, 86, 2, 2, 5310, 5311, 7, 74, 2, 2, 5311, 5312, 7, 84, 2, 2, 5312, 5313, 7, 71, 2, 2, 5313, 5314, 7, 67, 2, 2, 5314, 5315, 7, 70, 2, 2, 5315, 782, 3, 2, 2, 2, 5316, 5317, 7, 75, 2, 2, 5317, 5318, 7, 82, 2, 2, 5318, 5319, 7, 69, 2, 2, 5319, 784, 3, 2, 2, 2, 5320, 5321, 7, 75, 2, 2, 5321, 5322, 7, 85, 2, 2, 5322, 5323, 7, 81, 2, 2, 5323, 5324, 7, 78, 2, 2, 5324, 5325, 7, 67, 2, 2, 5325, 5326, 7, 86, 2, 2, 5326, 5327, 7, 75, 2, 2, 5327, 5328, 7, 81, 2, 2, 5328, 5329, 7, 80, 2, 2, 5329, 786, 3, 2, 2, 2, 5330, 5331, 7, 75, 2, 2, 5331, 5332, 7, 85, 2, 2, 5332, 5333, 7, 85, 2, 2, 5333, 5334, 7, 87, 2, 2, 5334, 5335, 7, 71, 2, 2, 5335, 5336, 7, 84, 2, 2, 5336, 788, 3, 2, 2, 2, 5337, 5338, 7, 76, 2, 2, 5338, 5339, 7, 85, 2, 2, 5339, 5340, 7, 81, 2, 2, 5340, 5341, 7, 80, 2, 2, 5341, 790, 3, 2, 2, 2, 5342, 5343, 7, 77, 2, 2, 5343, 5344, 7, 71, 2, 2, 5344, 5345, 7, 91, 2, 2, 5345, 5346, 7, 97, 2, 2, 5346, 5347, 7, 68, 2, 2, 5347, 5348, 7, 78, 2, 2, 5348, 5349, 7, 81, 2, 2, 5349, 5350, 7, 69, 2, 2, 5350, 5351, 7, 77, 2, 2, 5351, 5352, 7, 97, 2, 2, 5352, 5353, 7, 85, 2, 2, 5353, 5354, 7, 75, 2, 2, 5354, 5355, 7, 92, 2, 2, 5355, 5356, 7, 71, 2, 2, 5356, 792, 3, 2, 2, 2, 5357, 5358, 7, 78, 2, 2, 5358, 5359, 7, 67, 2, 2, 5359, 5360, 7, 80, 2, 2, 5360, 5361, 7, 73, 2, 2, 5361, 5362, 7, 87, 2, 2, 5362, 5363, 7, 67, 2, 2, 5363, 5364, 7, 73, 2, 2, 5364, 5365, 7, 71, 2, 2, 5365, 794, 3, 2, 2, 2, 5366, 5367, 7, 78, 2, 2, 5367, 5368, 7, 67, 2, 2, 5368, 5369, 7, 85, 2, 2, 5369, 5370, 7, 86, 2, 2, 5370, 796, 3, 2, 2, 2, 5371, 5372, 7, 78, 2, 2, 5372, 5373, 7, 71, 2, 2, 5373, 5374, 7, 67, 2, 2, 5374, 5375, 7, 88, 2, 2, 5375, 5376, 7, 71, 2, 2, 5376, 5377, 7, 85, 2, 2, 5377, 798, 3, 2, 2, 2, 5378, 5379, 7, 78, 2, 2, 5379, 5380, 7, 71, 2, 2, 5380, 5381, 7, 85, 2, 2, 5381, 5382, 7, 85, 2, 2, 5382, 800, 3, 2, 2, 2, 5383, 5384, 7, 78, 2, 2, 5384, 5385, 7, 71, 2, 2, 5385, 5386, 7, 88, 2, 2, 5386, 5387, 7, 71, 2, 2, 5387, 5388, 7, 78, 2, 2, 5388, 802, 3, 2, 2, 2, 5389, 5390, 7, 78, 2, 2, 5390, 5391, 7, 75, 2, 2, 5391, 5392, 7, 85, 2, 2, 5392, 5393, 7, 86, 2, 2, 5393, 804, 3, 2, 2, 2, 5394, 5395, 7, 78, 2, 2, 5395, 5396, 7, 81, 2, 2, 5396, 5397, 7, 69, 2, 2, 5397, 5398, 7, 67, 2, 2, 5398, 5399, 7, 78, 2, 2, 5399, 806, 3, 2, 2, 2, 5400, 5401, 7, 78, 2, 2, 5401, 5402, 7, 81, 2, 2, 5402, 5403, 7, 73, 2, 2, 5403, 5404, 7, 72, 2, 2, 5404, 5405, 7, 75, 2, 2, 5405, 5406, 7, 78, 2, 2, 5406, 5407, 7, 71, 2, 2, 5407, 808, 3, 2, 2, 2, 5408, 5409, 7, 78, 2, 2, 5409, 5410, 7, 81, 2, 2, 5410, 5411, 7, 73, 2, 2, 5411, 5412, 7, 85, 2, 2, 5412, 810, 3, 2, 2, 2, 5413, 5414, 7, 79, 2, 2, 5414, 5415, 7, 67, 2, 2, 5415, 5416, 7, 85, 2, 2, 5416, 5417, 7, 86, 2, 2, 5417, 5418, 7, 71, 2, 2, 5418, 5419, 7, 84, 2, 2, 5419, 812, 3, 2, 2, 2, 5420, 5421, 7, 79, 2, 2, 5421, 5422, 7, 67, 2, 2, 5422, 5423, 7, 85, 2, 2, 5423, 5424, 7, 86, 2, 2, 5424, 5425, 7, 71, 2, 2, 5425, 5426, 7, 84, 2, 2, 5426, 5427, 7, 97, 2, 2, 5427, 5428, 7, 67, 2, 2, 5428, 5429, 7, 87, 2, 2, 5429, 5430, 7, 86, 2, 2, 5430, 5431, 7, 81, 2, 2, 5431, 5432, 7, 97, 2, 2, 5432, 5433, 7, 82, 2, 2, 5433, 5434, 7, 81, 2, 2, 5434, 5435, 7, 85, 2, 2, 5435, 5436, 7, 75, 2, 2, 5436, 5437, 7, 86, 2, 2, 5437, 5438, 7, 75, 2, 2, 5438, 5439, 7, 81, 2, 2, 5439, 5440, 7, 80, 2, 2, 5440, 814, 3, 2, 2, 2, 5441, 5442, 7, 79, 2, 2, 5442, 5443, 7, 67, 2, 2, 5443, 5444, 7, 85, 2, 2, 5444, 5445, 7, 86, 2, 2, 5445, 5446, 7, 71, 2, 2, 5446, 5447, 7, 84, 2, 2, 5447, 5448, 7, 97, 2, 2, 5448, 5449, 7, 69, 2, 2, 5449, 5450, 7, 81, 2, 2, 5450, 5451, 7, 80, 2, 2, 5451, 5452, 7, 80, 2, 2, 5452, 5453, 7, 71, 2, 2, 5453, 5454, 7, 69, 2, 2, 5454, 5455, 7, 86, 2, 2, 5455, 5456, 7, 97, 2, 2, 5456, 5457, 7, 84, 2, 2, 5457, 5458, 7, 71, 2, 2, 5458, 5459, 7, 86, 2, 2, 5459, 5460, 7, 84, 2, 2, 5460, 5461, 7, 91, 2, 2, 5461, 816, 3, 2, 2, 2, 5462, 5463, 7, 79, 2, 2, 5463, 5464, 7, 67, 2, 2, 5464, 5465, 7, 85, 2, 2, 5465, 5466, 7, 86, 2, 2, 5466, 5467, 7, 71, 2, 2, 5467, 5468, 7, 84, 2, 2, 5468, 5469, 7, 97, 2, 2, 5469, 5470, 7, 70, 2, 2, 5470, 5471, 7, 71, 2, 2, 5471, 5472, 7, 78, 2, 2, 5472, 5473, 7, 67, 2, 2, 5473, 5474, 7, 91, 2, 2, 5474, 818, 3, 2, 2, 2, 5475, 5476, 7, 79, 2, 2, 5476, 5477, 7, 67, 2, 2, 5477, 5478, 7, 85, 2, 2, 5478, 5479, 7, 86, 2, 2, 5479, 5480, 7, 71, 2, 2, 5480, 5481, 7, 84, 2, 2, 5481, 5482, 7, 97, 2, 2, 5482, 5483, 7, 74, 2, 2, 5483, 5484, 7, 71, 2, 2, 5484, 5485, 7, 67, 2, 2, 5485, 5486, 7, 84, 2, 2, 5486, 5487, 7, 86, 2, 2, 5487, 5488, 7, 68, 2, 2, 5488, 5489, 7, 71, 2, 2, 5489, 5490, 7, 67, 2, 2, 5490, 5491, 7, 86, 2, 2, 5491, 5492, 7, 97, 2, 2, 5492, 5493, 7, 82, 2, 2, 5493, 5494, 7, 71, 2, 2, 5494, 5495, 7, 84, 2, 2, 5495, 5496, 7, 75, 2, 2, 5496, 5497, 7, 81, 2, 2, 5497, 5498, 7, 70, 2, 2, 5498, 820, 3, 2, 2, 2, 5499, 5500, 7, 79, 2, 2, 5500, 5501, 7, 67, 2, 2, 5501, 5502, 7, 85, 2, 2, 5502, 5503, 7, 86, 2, 2, 5503, 5504, 7, 71, 2, 2, 5504, 5505, 7, 84, 2, 2, 5505, 5506, 7, 97, 2, 2, 5506, 5507, 7, 74, 2, 2, 5507, 5508, 7, 81, 2, 2, 5508, 5509, 7, 85, 2, 2, 5509, 5510, 7, 86, 2, 2, 5510, 822, 3, 2, 2, 2, 5511, 5512, 7, 79, 2, 2, 5512, 5513, 7, 67, 2, 2, 5513, 5514, 7, 85, 2, 2, 5514, 5515, 7, 86, 2, 2, 5515, 5516, 7, 71, 2, 2, 5516, 5517, 7, 84, 2, 2, 5517, 5518, 7, 97, 2, 2, 5518, 5519, 7, 78, 2, 2, 5519, 5520, 7, 81, 2, 2, 5520, 5521, 7, 73, 2, 2, 5521, 5522, 7, 97, 2, 2, 5522, 5523, 7, 72, 2, 2, 5523, 5524, 7, 75, 2, 2, 5524, 5525, 7, 78, 2, 2, 5525, 5526, 7, 71, 2, 2, 5526, 824, 3, 2, 2, 2, 5527, 5528, 7, 79, 2, 2, 5528, 5529, 7, 67, 2, 2, 5529, 5530, 7, 85, 2, 2, 5530, 5531, 7, 86, 2, 2, 5531, 5532, 7, 71, 2, 2, 5532, 5533, 7, 84, 2, 2, 5533, 5534, 7, 97, 2, 2, 5534, 5535, 7, 78, 2, 2, 5535, 5536, 7, 81, 2, 2, 5536, 5537, 7, 73, 2, 2, 5537, 5538, 7, 97, 2, 2, 5538, 5539, 7, 82, 2, 2, 5539, 5540, 7, 81, 2, 2, 5540, 5541, 7, 85, 2, 2, 5541, 826, 3, 2, 2, 2, 5542, 5543, 7, 79, 2, 2, 5543, 5544, 7, 67, 2, 2, 5544, 5545, 7, 85, 2, 2, 5545, 5546, 7, 86, 2, 2, 5546, 5547, 7, 71, 2, 2, 5547, 5548, 7, 84, 2, 2, 5548, 5549, 7, 97, 2, 2, 5549, 5550, 7, 82, 2, 2, 5550, 5551, 7, 67, 2, 2, 5551, 5552, 7, 85, 2, 2, 5552, 5553, 7, 85, 2, 2, 5553, 5554, 7, 89, 2, 2, 5554, 5555, 7, 81, 2, 2, 5555, 5556, 7, 84, 2, 2, 5556, 5557, 7, 70, 2, 2, 5557, 828, 3, 2, 2, 2, 5558, 5559, 7, 79, 2, 2, 5559, 5560, 7, 67, 2, 2, 5560, 5561, 7, 85, 2, 2, 5561, 5562, 7, 86, 2, 2, 5562, 5563, 7, 71, 2, 2, 5563, 5564, 7, 84, 2, 2, 5564, 5565, 7, 97, 2, 2, 5565, 5566, 7, 82, 2, 2, 5566, 5567, 7, 81, 2, 2, 5567, 5568, 7, 84, 2, 2, 5568, 5569, 7, 86, 2, 2, 5569, 830, 3, 2, 2, 2, 5570, 5571, 7, 79, 2, 2, 5571, 5572, 7, 67, 2, 2, 5572, 5573, 7, 85, 2, 2, 5573, 5574, 7, 86, 2, 2, 5574, 5575, 7, 71, 2, 2, 5575, 5576, 7, 84, 2, 2, 5576, 5577, 7, 97, 2, 2, 5577, 5578, 7, 84, 2, 2, 5578, 5579, 7, 71, 2, 2, 5579, 5580, 7, 86, 2, 2, 5580, 5581, 7, 84, 2, 2, 5581, 5582, 7, 91, 2, 2, 5582, 5583, 7, 97, 2, 2, 5583, 5584, 7, 69, 2, 2, 5584, 5585, 7, 81, 2, 2, 5585, 5586, 7, 87, 2, 2, 5586, 5587, 7, 80, 2, 2, 5587, 5588, 7, 86, 2, 2, 5588, 832, 3, 2, 2, 2, 5589, 5590, 7, 79, 2, 2, 5590, 5591, 7, 67, 2, 2, 5591, 5592, 7, 85, 2, 2, 5592, 5593, 7, 86, 2, 2, 5593, 5594, 7, 71, 2, 2, 5594, 5595, 7, 84, 2, 2, 5595, 5596, 7, 97, 2, 2, 5596, 5597, 7, 85, 2, 2, 5597, 5598, 7, 85, 2, 2, 5598, 5599, 7, 78, 2, 2, 5599, 834, 3, 2, 2, 2, 5600, 5601, 7, 79, 2, 2, 5601, 5602, 7, 67, 2, 2, 5602, 5603, 7, 85, 2, 2, 5603, 5604, 7, 86, 2, 2, 5604, 5605, 7, 71, 2, 2, 5605, 5606, 7, 84, 2, 2, 5606, 5607, 7, 97, 2, 2, 5607, 5608, 7, 85, 2, 2, 5608, 5609, 7, 85, 2, 2, 5609, 5610, 7, 78, 2, 2, 5610, 5611, 7, 97, 2, 2, 5611, 5612, 7, 69, 2, 2, 5612, 5613, 7, 67, 2, 2, 5613, 836, 3, 2, 2, 2, 5614, 5615, 7, 79, 2, 2, 5615, 5616, 7, 67, 2, 2, 5616, 5617, 7, 85, 2, 2, 5617, 5618, 7, 86, 2, 2, 5618, 5619, 7, 71, 2, 2, 5619, 5620, 7, 84, 2, 2, 5620, 5621, 7, 97, 2, 2, 5621, 5622, 7, 85, 2, 2, 5622, 5623, 7, 85, 2, 2, 5623, 5624, 7, 78, 2, 2, 5624, 5625, 7, 97, 2, 2, 5625, 5626, 7, 69, 2, 2, 5626, 5627, 7, 67, 2, 2, 5627, 5628, 7, 82, 2, 2, 5628, 5629, 7, 67, 2, 2, 5629, 5630, 7, 86, 2, 2, 5630, 5631, 7, 74, 2, 2, 5631, 838, 3, 2, 2, 2, 5632, 5633, 7, 79, 2, 2, 5633, 5634, 7, 67, 2, 2, 5634, 5635, 7, 85, 2, 2, 5635, 5636, 7, 86, 2, 2, 5636, 5637, 7, 71, 2, 2, 5637, 5638, 7, 84, 2, 2, 5638, 5639, 7, 97, 2, 2, 5639, 5640, 7, 85, 2, 2, 5640, 5641, 7, 85, 2, 2, 5641, 5642, 7, 78, 2, 2, 5642, 5643, 7, 97, 2, 2, 5643, 5644, 7, 69, 2, 2, 5644, 5645, 7, 71, 2, 2, 5645, 5646, 7, 84, 2, 2, 5646, 5647, 7, 86, 2, 2, 5647, 840, 3, 2, 2, 2, 5648, 5649, 7, 79, 2, 2, 5649, 5650, 7, 67, 2, 2, 5650, 5651, 7, 85, 2, 2, 5651, 5652, 7, 86, 2, 2, 5652, 5653, 7, 71, 2, 2, 5653, 5654, 7, 84, 2, 2, 5654, 5655, 7, 97, 2, 2, 5655, 5656, 7, 85, 2, 2, 5656, 5657, 7, 85, 2, 2, 5657, 5658, 7, 78, 2, 2, 5658, 5659, 7, 97, 2, 2, 5659, 5660, 7, 69, 2, 2, 5660, 5661, 7, 75, 2, 2, 5661, 5662, 7, 82, 2, 2, 5662, 5663, 7, 74, 2, 2, 5663, 5664, 7, 71, 2, 2, 5664, 5665, 7, 84, 2, 2, 5665, 842, 3, 2, 2, 2, 5666, 5667, 7, 79, 2, 2, 5667, 5668, 7, 67, 2, 2, 5668, 5669, 7, 85, 2, 2, 5669, 5670, 7, 86, 2, 2, 5670, 5671, 7, 71, 2, 2, 5671, 5672, 7, 84, 2, 2, 5672, 5673, 7, 97, 2, 2, 5673, 5674, 7, 85, 2, 2, 5674, 5675, 7, 85, 2, 2, 5675, 5676, 7, 78, 2, 2, 5676, 5677, 7, 97, 2, 2, 5677, 5678, 7, 69, 2, 2, 5678, 5679, 7, 84, 2, 2, 5679, 5680, 7, 78, 2, 2, 5680, 844, 3, 2, 2, 2, 5681, 5682, 7, 79, 2, 2, 5682, 5683, 7, 67, 2, 2, 5683, 5684, 7, 85, 2, 2, 5684, 5685, 7, 86, 2, 2, 5685, 5686, 7, 71, 2, 2, 5686, 5687, 7, 84, 2, 2, 5687, 5688, 7, 97, 2, 2, 5688, 5689, 7, 85, 2, 2, 5689, 5690, 7, 85, 2, 2, 5690, 5691, 7, 78, 2, 2, 5691, 5692, 7, 97, 2, 2, 5692, 5693, 7, 69, 2, 2, 5693, 5694, 7, 84, 2, 2, 5694, 5695, 7, 78, 2, 2, 5695, 5696, 7, 82, 2, 2, 5696, 5697, 7, 67, 2, 2, 5697, 5698, 7, 86, 2, 2, 5698, 5699, 7, 74, 2, 2, 5699, 846, 3, 2, 2, 2, 5700, 5701, 7, 79, 2, 2, 5701, 5702, 7, 67, 2, 2, 5702, 5703, 7, 85, 2, 2, 5703, 5704, 7, 86, 2, 2, 5704, 5705, 7, 71, 2, 2, 5705, 5706, 7, 84, 2, 2, 5706, 5707, 7, 97, 2, 2, 5707, 5708, 7, 85, 2, 2, 5708, 5709, 7, 85, 2, 2, 5709, 5710, 7, 78, 2, 2, 5710, 5711, 7, 97, 2, 2, 5711, 5712, 7, 77, 2, 2, 5712, 5713, 7, 71, 2, 2, 5713, 5714, 7, 91, 2, 2, 5714, 848, 3, 2, 2, 2, 5715, 5716, 7, 79, 2, 2, 5716, 5717, 7, 67, 2, 2, 5717, 5718, 7, 85, 2, 2, 5718, 5719, 7, 86, 2, 2, 5719, 5720, 7, 71, 2, 2, 5720, 5721, 7, 84, 2, 2, 5721, 5722, 7, 97, 2, 2, 5722, 5723, 7, 86, 2, 2, 5723, 5724, 7, 78, 2, 2, 5724, 5725, 7, 85, 2, 2, 5725, 5726, 7, 97, 2, 2, 5726, 5727, 7, 88, 2, 2, 5727, 5728, 7, 71, 2, 2, 5728, 5729, 7, 84, 2, 2, 5729, 5730, 7, 85, 2, 2, 5730, 5731, 7, 75, 2, 2, 5731, 5732, 7, 81, 2, 2, 5732, 5733, 7, 80, 2, 2, 5733, 850, 3, 2, 2, 2, 5734, 5735, 7, 79, 2, 2, 5735, 5736, 7, 67, 2, 2, 5736, 5737, 7, 85, 2, 2, 5737, 5738, 7, 86, 2, 2, 5738, 5739, 7, 71, 2, 2, 5739, 5740, 7, 84, 2, 2, 5740, 5741, 7, 97, 2, 2, 5741, 5742, 7, 87, 2, 2, 5742, 5743, 7, 85, 2, 2, 5743, 5744, 7, 71, 2, 2, 5744, 5745, 7, 84, 2, 2, 5745, 852, 3, 2, 2, 2, 5746, 5747, 7, 79, 2, 2, 5747, 5748, 7, 67, 2, 2, 5748, 5749, 7, 90, 2, 2, 5749, 5750, 7, 97, 2, 2, 5750, 5751, 7, 69, 2, 2, 5751, 5752, 7, 81, 2, 2, 5752, 5753, 7, 80, 2, 2, 5753, 5754, 7, 80, 2, 2, 5754, 5755, 7, 71, 2, 2, 5755, 5756, 7, 69, 2, 2, 5756, 5757, 7, 86, 2, 2, 5757, 5758, 7, 75, 2, 2, 5758, 5759, 7, 81, 2, 2, 5759, 5760, 7, 80, 2, 2, 5760, 5761, 7, 85, 2, 2, 5761, 5762, 7, 97, 2, 2, 5762, 5763, 7, 82, 2, 2, 5763, 5764, 7, 71, 2, 2, 5764, 5765, 7, 84, 2, 2, 5765, 5766, 7, 97, 2, 2, 5766, 5767, 7, 74, 2, 2, 5767, 5768, 7, 81, 2, 2, 5768, 5769, 7, 87, 2, 2, 5769, 5770, 7, 84, 2, 2, 5770, 854, 3, 2, 2, 2, 5771, 5772, 7, 79, 2, 2, 5772, 5773, 7, 67, 2, 2, 5773, 5774, 7, 90, 2, 2, 5774, 5775, 7, 97, 2, 2, 5775, 5776, 7, 83, 2, 2, 5776, 5777, 7, 87, 2, 2, 5777, 5778, 7, 71, 2, 2, 5778, 5779, 7, 84, 2, 2, 5779, 5780, 7, 75, 2, 2, 5780, 5781, 7, 71, 2, 2, 5781, 5782, 7, 85, 2, 2, 5782, 5783, 7, 97, 2, 2, 5783, 5784, 7, 82, 2, 2, 5784, 5785, 7, 71, 2, 2, 5785, 5786, 7, 84, 2, 2, 5786, 5787, 7, 97, 2, 2, 5787, 5788, 7, 74, 2, 2, 5788, 5789, 7, 81, 2, 2, 5789, 5790, 7, 87, 2, 2, 5790, 5791, 7, 84, 2, 2, 5791, 856, 3, 2, 2, 2, 5792, 5793, 7, 79, 2, 2, 5793, 5794, 7, 67, 2, 2, 5794, 5795, 7, 90, 2, 2, 5795, 5796, 7, 97, 2, 2, 5796, 5797, 7, 84, 2, 2, 5797, 5798, 7, 81, 2, 2, 5798, 5799, 7, 89, 2, 2, 5799, 5800, 7, 85, 2, 2, 5800, 858, 3, 2, 2, 2, 5801, 5802, 7, 79, 2, 2, 5802, 5803, 7, 67, 2, 2, 5803, 5804, 7, 90, 2, 2, 5804, 5805, 7, 97, 2, 2, 5805, 5806, 7, 85, 2, 2, 5806, 5807, 7, 75, 2, 2, 5807, 5808, 7, 92, 2, 2, 5808, 5809, 7, 71, 2, 2, 5809, 860, 3, 2, 2, 2, 5810, 5811, 7, 79, 2, 2, 5811, 5812, 7, 67, 2, 2, 5812, 5813, 7, 90, 2, 2, 5813, 5814, 7, 97, 2, 2, 5814, 5815, 7, 87, 2, 2, 5815, 5816, 7, 82, 2, 2, 5816, 5817, 7, 70, 2, 2, 5817, 5818, 7, 67, 2, 2, 5818, 5819, 7, 86, 2, 2, 5819, 5820, 7, 71, 2, 2, 5820, 5821, 7, 85, 2, 2, 5821, 5822, 7, 97, 2, 2, 5822, 5823, 7, 82, 2, 2, 5823, 5824, 7, 71, 2, 2, 5824, 5825, 7, 84, 2, 2, 5825, 5826, 7, 97, 2, 2, 5826, 5827, 7, 74, 2, 2, 5827, 5828, 7, 81, 2, 2, 5828, 5829, 7, 87, 2, 2, 5829, 5830, 7, 84, 2, 2, 5830, 862, 3, 2, 2, 2, 5831, 5832, 7, 79, 2, 2, 5832, 5833, 7, 67, 2, 2, 5833, 5834, 7, 90, 2, 2, 5834, 5835, 7, 97, 2, 2, 5835, 5836, 7, 87, 2, 2, 5836, 5837, 7, 85, 2, 2, 5837, 5838, 7, 71, 2, 2, 5838, 5839, 7, 84, 2, 2, 5839, 5840, 7, 97, 2, 2, 5840, 5841, 7, 69, 2, 2, 5841, 5842, 7, 81, 2, 2, 5842, 5843, 7, 80, 2, 2, 5843, 5844, 7, 80, 2, 2, 5844, 5845, 7, 71, 2, 2, 5845, 5846, 7, 69, 2, 2, 5846, 5847, 7, 86, 2, 2, 5847, 5848, 7, 75, 2, 2, 5848, 5849, 7, 81, 2, 2, 5849, 5850, 7, 80, 2, 2, 5850, 5851, 7, 85, 2, 2, 5851, 864, 3, 2, 2, 2, 5852, 5853, 7, 79, 2, 2, 5853, 5854, 7, 71, 2, 2, 5854, 5855, 7, 70, 2, 2, 5855, 5856, 7, 75, 2, 2, 5856, 5857, 7, 87, 2, 2, 5857, 5858, 7, 79, 2, 2, 5858, 866, 3, 2, 2, 2, 5859, 5860, 7, 79, 2, 2, 5860, 5861, 7, 71, 2, 2, 5861, 5862, 7, 79, 2, 2, 5862, 5863, 7, 68, 2, 2, 5863, 5864, 7, 71, 2, 2, 5864, 5865, 7, 84, 2, 2, 5865, 868, 3, 2, 2, 2, 5866, 5867, 7, 79, 2, 2, 5867, 5868, 7, 71, 2, 2, 5868, 5869, 7, 84, 2, 2, 5869, 5870, 7, 73, 2, 2, 5870, 5871, 7, 71, 2, 2, 5871, 870, 3, 2, 2, 2, 5872, 5873, 7, 79, 2, 2, 5873, 5874, 7, 71, 2, 2, 5874, 5875, 7, 85, 2, 2, 5875, 5876, 7, 85, 2, 2, 5876, 5877, 7, 67, 2, 2, 5877, 5878, 7, 73, 2, 2, 5878, 5879, 7, 71, 2, 2, 5879, 5880, 7, 97, 2, 2, 5880, 5881, 7, 86, 2, 2, 5881, 5882, 7, 71, 2, 2, 5882, 5883, 7, 90, 2, 2, 5883, 5884, 7, 86, 2, 2, 5884, 872, 3, 2, 2, 2, 5885, 5886, 7, 79, 2, 2, 5886, 5887, 7, 75, 2, 2, 5887, 5888, 7, 70, 2, 2, 5888, 874, 3, 2, 2, 2, 5889, 5890, 7, 79, 2, 2, 5890, 5891, 7, 75, 2, 2, 5891, 5892, 7, 73, 2, 2, 5892, 5893, 7, 84, 2, 2, 5893, 5894, 7, 67, 2, 2, 5894, 5895, 7, 86, 2, 2, 5895, 5896, 7, 71, 2, 2, 5896, 876, 3, 2, 2, 2, 5897, 5898, 7, 79, 2, 2, 5898, 5899, 7, 75, 2, 2, 5899, 5900, 7, 80, 2, 2, 5900, 5901, 7, 97, 2, 2, 5901, 5902, 7, 84, 2, 2, 5902, 5903, 7, 81, 2, 2, 5903, 5904, 7, 89, 2, 2, 5904, 5905, 7, 85, 2, 2, 5905, 878, 3, 2, 2, 2, 5906, 5907, 7, 79, 2, 2, 5907, 5908, 7, 81, 2, 2, 5908, 5909, 7, 70, 2, 2, 5909, 5910, 7, 71, 2, 2, 5910, 880, 3, 2, 2, 2, 5911, 5912, 7, 79, 2, 2, 5912, 5913, 7, 81, 2, 2, 5913, 5914, 7, 70, 2, 2, 5914, 5915, 7, 75, 2, 2, 5915, 5916, 7, 72, 2, 2, 5916, 5917, 7, 91, 2, 2, 5917, 882, 3, 2, 2, 2, 5918, 5919, 7, 79, 2, 2, 5919, 5920, 7, 87, 2, 2, 5920, 5921, 7, 86, 2, 2, 5921, 5922, 7, 71, 2, 2, 5922, 5923, 7, 90, 2, 2, 5923, 884, 3, 2, 2, 2, 5924, 5925, 7, 79, 2, 2, 5925, 5926, 7, 91, 2, 2, 5926, 5927, 7, 85, 2, 2, 5927, 5928, 7, 83, 2, 2, 5928, 5929, 7, 78, 2, 2, 5929, 886, 3, 2, 2, 2, 5930, 5931, 7, 79, 2, 2, 5931, 5932, 7, 91, 2, 2, 5932, 5933, 7, 85, 2, 2, 5933, 5934, 7, 83, 2, 2, 5934, 5935, 7, 78, 2, 2, 5935, 5936, 7, 97, 2, 2, 5936, 5937, 7, 71, 2, 2, 5937, 5938, 7, 84, 2, 2, 5938, 5939, 7, 84, 2, 2, 5939, 5940, 7, 80, 2, 2, 5940, 5941, 7, 81, 2, 2, 5941, 888, 3, 2, 2, 2, 5942, 5943, 7, 80, 2, 2, 5943, 5944, 7, 67, 2, 2, 5944, 5945, 7, 79, 2, 2, 5945, 5946, 7, 71, 2, 2, 5946, 890, 3, 2, 2, 2, 5947, 5948, 7, 80, 2, 2, 5948, 5949, 7, 67, 2, 2, 5949, 5950, 7, 79, 2, 2, 5950, 5951, 7, 71, 2, 2, 5951, 5952, 7, 85, 2, 2, 5952, 892, 3, 2, 2, 2, 5953, 5954, 7, 80, 2, 2, 5954, 5955, 7, 69, 2, 2, 5955, 5956, 7, 74, 2, 2, 5956, 5957, 7, 67, 2, 2, 5957, 5958, 7, 84, 2, 2, 5958, 894, 3, 2, 2, 2, 5959, 5960, 7, 80, 2, 2, 5960, 5961, 7, 71, 2, 2, 5961, 5962, 7, 88, 2, 2, 5962, 5963, 7, 71, 2, 2, 5963, 5964, 7, 84, 2, 2, 5964, 896, 3, 2, 2, 2, 5965, 5966, 7, 80, 2, 2, 5966, 5967, 7, 71, 2, 2, 5967, 5968, 7, 90, 2, 2, 5968, 5969, 7, 86, 2, 2, 5969, 898, 3, 2, 2, 2, 5970, 5971, 7, 80, 2, 2, 5971, 5972, 7, 81, 2, 2, 5972, 900, 3, 2, 2, 2, 5973, 5974, 7, 80, 2, 2, 5974, 5975, 7, 81, 2, 2, 5975, 5976, 7, 70, 2, 2, 5976, 5977, 7, 71, 2, 2, 5977, 5978, 7, 73, 2, 2, 5978, 5979, 7, 84, 2, 2, 5979, 5980, 7, 81, 2, 2, 5980, 5981, 7, 87, 2, 2, 5981, 5982, 7, 82, 2, 2, 5982, 902, 3, 2, 2, 2, 5983, 5984, 7, 80, 2, 2, 5984, 5985, 7, 81, 2, 2, 5985, 5986, 7, 80, 2, 2, 5986, 5987, 7, 71, 2, 2, 5987, 904, 3, 2, 2, 2, 5988, 5989, 7, 81, 2, 2, 5989, 5990, 7, 72, 2, 2, 5990, 5991, 7, 72, 2, 2, 5991, 5992, 7, 78, 2, 2, 5992, 5993, 7, 75, 2, 2, 5993, 5994, 7, 80, 2, 2, 5994, 5995, 7, 71, 2, 2, 5995, 906, 3, 2, 2, 2, 5996, 5997, 7, 81, 2, 2, 5997, 5998, 7, 72, 2, 2, 5998, 5999, 7, 72, 2, 2, 5999, 6000, 7, 85, 2, 2, 6000, 6001, 7, 71, 2, 2, 6001, 6002, 7, 86, 2, 2, 6002, 908, 3, 2, 2, 2, 6003, 6004, 7, 81, 2, 2, 6004, 6005, 7, 72, 2, 2, 6005, 910, 3, 2, 2, 2, 6006, 6007, 7, 81, 2, 2, 6007, 6008, 7, 76, 2, 2, 6008, 912, 3, 2, 2, 2, 6009, 6010, 7, 81, 2, 2, 6010, 6011, 7, 78, 2, 2, 6011, 6012, 7, 70, 2, 2, 6012, 6013, 7, 97, 2, 2, 6013, 6014, 7, 82, 2, 2, 6014, 6015, 7, 67, 2, 2, 6015, 6016, 7, 85, 2, 2, 6016, 6017, 7, 85, 2, 2, 6017, 6018, 7, 89, 2, 2, 6018, 6019, 7, 81, 2, 2, 6019, 6020, 7, 84, 2, 2, 6020, 6021, 7, 70, 2, 2, 6021, 914, 3, 2, 2, 2, 6022, 6023, 7, 81, 2, 2, 6023, 6024, 7, 80, 2, 2, 6024, 6025, 7, 71, 2, 2, 6025, 916, 3, 2, 2, 2, 6026, 6027, 7, 81, 2, 2, 6027, 6028, 7, 80, 2, 2, 6028, 6029, 7, 78, 2, 2, 6029, 6030, 7, 75, 2, 2, 6030, 6031, 7, 80, 2, 2, 6031, 6032, 7, 71, 2, 2, 6032, 918, 3, 2, 2, 2, 6033, 6034, 7, 81, 2, 2, 6034, 6035, 7, 80, 2, 2, 6035, 6036, 7, 78, 2, 2, 6036, 6037, 7, 91, 2, 2, 6037, 920, 3, 2, 2, 2, 6038, 6039, 7, 81, 2, 2, 6039, 6040, 7, 82, 2, 2, 6040, 6041, 7, 71, 2, 2, 6041, 6042, 7, 80, 2, 2, 6042, 922, 3, 2, 2, 2, 6043, 6044, 7, 81, 2, 2, 6044, 6045, 7, 82, 2, 2, 6045, 6046, 7, 86, 2, 2, 6046, 6047, 7, 75, 2, 2, 6047, 6048, 7, 79, 2, 2, 6048, 6049, 7, 75, 2, 2, 6049, 6050, 7, 92, 2, 2, 6050, 6051, 7, 71, 2, 2, 6051, 6052, 7, 84, 2, 2, 6052, 6053, 7, 97, 2, 2, 6053, 6054, 7, 69, 2, 2, 6054, 6055, 7, 81, 2, 2, 6055, 6056, 7, 85, 2, 2, 6056, 6057, 7, 86, 2, 2, 6057, 6058, 7, 85, 2, 2, 6058, 924, 3, 2, 2, 2, 6059, 6060, 7, 81, 2, 2, 6060, 6061, 7, 82, 2, 2, 6061, 6062, 7, 86, 2, 2, 6062, 6063, 7, 75, 2, 2, 6063, 6064, 7, 81, 2, 2, 6064, 6065, 7, 80, 2, 2, 6065, 6066, 7, 85, 2, 2, 6066, 926, 3, 2, 2, 2, 6067, 6068, 7, 81, 2, 2, 6068, 6069, 7, 89, 2, 2, 6069, 6070, 7, 80, 2, 2, 6070, 6071, 7, 71, 2, 2, 6071, 6072, 7, 84, 2, 2, 6072, 928, 3, 2, 2, 2, 6073, 6074, 7, 82, 2, 2, 6074, 6075, 7, 67, 2, 2, 6075, 6076, 7, 69, 2, 2, 6076, 6077, 7, 77, 2, 2, 6077, 6078, 7, 97, 2, 2, 6078, 6079, 7, 77, 2, 2, 6079, 6080, 7, 71, 2, 2, 6080, 6081, 7, 91, 2, 2, 6081, 6082, 7, 85, 2, 2, 6082, 930, 3, 2, 2, 2, 6083, 6084, 7, 82, 2, 2, 6084, 6085, 7, 67, 2, 2, 6085, 6086, 7, 73, 2, 2, 6086, 6087, 7, 71, 2, 2, 6087, 932, 3, 2, 2, 2, 6088, 6089, 7, 82, 2, 2, 6089, 6090, 7, 67, 2, 2, 6090, 6091, 7, 84, 2, 2, 6091, 6092, 7, 85, 2, 2, 6092, 6093, 7, 71, 2, 2, 6093, 6094, 7, 84, 2, 2, 6094, 934, 3, 2, 2, 2, 6095, 6096, 7, 82, 2, 2, 6096, 6097, 7, 67, 2, 2, 6097, 6098, 7, 84, 2, 2, 6098, 6099, 7, 86, 2, 2, 6099, 6100, 7, 75, 2, 2, 6100, 6101, 7, 67, 2, 2, 6101, 6102, 7, 78, 2, 2, 6102, 936, 3, 2, 2, 2, 6103, 6104, 7, 82, 2, 2, 6104, 6105, 7, 67, 2, 2, 6105, 6106, 7, 84, 2, 2, 6106, 6107, 7, 86, 2, 2, 6107, 6108, 7, 75, 2, 2, 6108, 6109, 7, 86, 2, 2, 6109, 6110, 7, 75, 2, 2, 6110, 6111, 7, 81, 2, 2, 6111, 6112, 7, 80, 2, 2, 6112, 6113, 7, 75, 2, 2, 6113, 6114, 7, 80, 2, 2, 6114, 6115, 7, 73, 2, 2, 6115, 938, 3, 2, 2, 2, 6116, 6117, 7, 82, 2, 2, 6117, 6118, 7, 67, 2, 2, 6118, 6119, 7, 84, 2, 2, 6119, 6120, 7, 86, 2, 2, 6120, 6121, 7, 75, 2, 2, 6121, 6122, 7, 86, 2, 2, 6122, 6123, 7, 75, 2, 2, 6123, 6124, 7, 81, 2, 2, 6124, 6125, 7, 80, 2, 2, 6125, 6126, 7, 85, 2, 2, 6126, 940, 3, 2, 2, 2, 6127, 6128, 7, 82, 2, 2, 6128, 6129, 7, 67, 2, 2, 6129, 6130, 7, 85, 2, 2, 6130, 6131, 7, 85, 2, 2, 6131, 6132, 7, 89, 2, 2, 6132, 6133, 7, 81, 2, 2, 6133, 6134, 7, 84, 2, 2, 6134, 6135, 7, 70, 2, 2, 6135, 942, 3, 2, 2, 2, 6136, 6137, 7, 82, 2, 2, 6137, 6138, 7, 74, 2, 2, 6138, 6139, 7, 67, 2, 2, 6139, 6140, 7, 85, 2, 2, 6140, 6141, 7, 71, 2, 2, 6141, 944, 3, 2, 2, 2, 6142, 6143, 7, 82, 2, 2, 6143, 6144, 7, 78, 2, 2, 6144, 6145, 7, 87, 2, 2, 6145, 6146, 7, 73, 2, 2, 6146, 6147, 7, 75, 2, 2, 6147, 6148, 7, 80, 2, 2, 6148, 946, 3, 2, 2, 2, 6149, 6150, 7, 82, 2, 2, 6150, 6151, 7, 78, 2, 2, 6151, 6152, 7, 87, 2, 2, 6152, 6153, 7, 73, 2, 2, 6153, 6154, 7, 75, 2, 2, 6154, 6155, 7, 80, 2, 2, 6155, 6156, 7, 97, 2, 2, 6156, 6157, 7, 70, 2, 2, 6157, 6158, 7, 75, 2, 2, 6158, 6159, 7, 84, 2, 2, 6159, 948, 3, 2, 2, 2, 6160, 6161, 7, 82, 2, 2, 6161, 6162, 7, 78, 2, 2, 6162, 6163, 7, 87, 2, 2, 6163, 6164, 7, 73, 2, 2, 6164, 6165, 7, 75, 2, 2, 6165, 6166, 7, 80, 2, 2, 6166, 6167, 7, 85, 2, 2, 6167, 950, 3, 2, 2, 2, 6168, 6169, 7, 82, 2, 2, 6169, 6170, 7, 81, 2, 2, 6170, 6171, 7, 84, 2, 2, 6171, 6172, 7, 86, 2, 2, 6172, 952, 3, 2, 2, 2, 6173, 6174, 7, 82, 2, 2, 6174, 6175, 7, 84, 2, 2, 6175, 6176, 7, 71, 2, 2, 6176, 6177, 7, 69, 2, 2, 6177, 6178, 7, 71, 2, 2, 6178, 6179, 7, 70, 2, 2, 6179, 6180, 7, 71, 2, 2, 6180, 6181, 7, 85, 2, 2, 6181, 954, 3, 2, 2, 2, 6182, 6183, 7, 82, 2, 2, 6183, 6184, 7, 84, 2, 2, 6184, 6185, 7, 71, 2, 2, 6185, 6186, 7, 82, 2, 2, 6186, 6187, 7, 67, 2, 2, 6187, 6188, 7, 84, 2, 2, 6188, 6189, 7, 71, 2, 2, 6189, 956, 3, 2, 2, 2, 6190, 6191, 7, 82, 2, 2, 6191, 6192, 7, 84, 2, 2, 6192, 6193, 7, 71, 2, 2, 6193, 6194, 7, 85, 2, 2, 6194, 6195, 7, 71, 2, 2, 6195, 6196, 7, 84, 2, 2, 6196, 6197, 7, 88, 2, 2, 6197, 6198, 7, 71, 2, 2, 6198, 958, 3, 2, 2, 2, 6199, 6200, 7, 82, 2, 2, 6200, 6201, 7, 84, 2, 2, 6201, 6202, 7, 71, 2, 2, 6202, 6203, 7, 88, 2, 2, 6203, 960, 3, 2, 2, 2, 6204, 6205, 7, 82, 2, 2, 6205, 6206, 7, 84, 2, 2, 6206, 6207, 7, 81, 2, 2, 6207, 6208, 7, 69, 2, 2, 6208, 6209, 7, 71, 2, 2, 6209, 6210, 7, 85, 2, 2, 6210, 6211, 7, 85, 2, 2, 6211, 6212, 7, 78, 2, 2, 6212, 6213, 7, 75, 2, 2, 6213, 6214, 7, 85, 2, 2, 6214, 6215, 7, 86, 2, 2, 6215, 962, 3, 2, 2, 2, 6216, 6217, 7, 82, 2, 2, 6217, 6218, 7, 84, 2, 2, 6218, 6219, 7, 81, 2, 2, 6219, 6220, 7, 72, 2, 2, 6220, 6221, 7, 75, 2, 2, 6221, 6222, 7, 78, 2, 2, 6222, 6223, 7, 71, 2, 2, 6223, 964, 3, 2, 2, 2, 6224, 6225, 7, 82, 2, 2, 6225, 6226, 7, 84, 2, 2, 6226, 6227, 7, 81, 2, 2, 6227, 6228, 7, 72, 2, 2, 6228, 6229, 7, 75, 2, 2, 6229, 6230, 7, 78, 2, 2, 6230, 6231, 7, 71, 2, 2, 6231, 6232, 7, 85, 2, 2, 6232, 966, 3, 2, 2, 2, 6233, 6234, 7, 82, 2, 2, 6234, 6235, 7, 84, 2, 2, 6235, 6236, 7, 81, 2, 2, 6236, 6237, 7, 90, 2, 2, 6237, 6238, 7, 91, 2, 2, 6238, 968, 3, 2, 2, 2, 6239, 6240, 7, 83, 2, 2, 6240, 6241, 7, 87, 2, 2, 6241, 6242, 7, 71, 2, 2, 6242, 6243, 7, 84, 2, 2, 6243, 6244, 7, 91, 2, 2, 6244, 970, 3, 2, 2, 2, 6245, 6246, 7, 83, 2, 2, 6246, 6247, 7, 87, 2, 2, 6247, 6248, 7, 75, 2, 2, 6248, 6249, 7, 69, 2, 2, 6249, 6250, 7, 77, 2, 2, 6250, 972, 3, 2, 2, 2, 6251, 6252, 7, 84, 2, 2, 6252, 6253, 7, 71, 2, 2, 6253, 6254, 7, 68, 2, 2, 6254, 6255, 7, 87, 2, 2, 6255, 6256, 7, 75, 2, 2, 6256, 6257, 7, 78, 2, 2, 6257, 6258, 7, 70, 2, 2, 6258, 974, 3, 2, 2, 2, 6259, 6260, 7, 84, 2, 2, 6260, 6261, 7, 71, 2, 2, 6261, 6262, 7, 69, 2, 2, 6262, 6263, 7, 81, 2, 2, 6263, 6264, 7, 88, 2, 2, 6264, 6265, 7, 71, 2, 2, 6265, 6266, 7, 84, 2, 2, 6266, 976, 3, 2, 2, 2, 6267, 6268, 7, 84, 2, 2, 6268, 6269, 7, 71, 2, 2, 6269, 6270, 7, 70, 2, 2, 6270, 6271, 7, 81, 2, 2, 6271, 6272, 7, 97, 2, 2, 6272, 6273, 7, 68, 2, 2, 6273, 6274, 7, 87, 2, 2, 6274, 6275, 7, 72, 2, 2, 6275, 6276, 7, 72, 2, 2, 6276, 6277, 7, 71, 2, 2, 6277, 6278, 7, 84, 2, 2, 6278, 6279, 7, 97, 2, 2, 6279, 6280, 7, 85, 2, 2, 6280, 6281, 7, 75, 2, 2, 6281, 6282, 7, 92, 2, 2, 6282, 6283, 7, 71, 2, 2, 6283, 978, 3, 2, 2, 2, 6284, 6285, 7, 84, 2, 2, 6285, 6286, 7, 71, 2, 2, 6286, 6287, 7, 70, 2, 2, 6287, 6288, 7, 87, 2, 2, 6288, 6289, 7, 80, 2, 2, 6289, 6290, 7, 70, 2, 2, 6290, 6291, 7, 67, 2, 2, 6291, 6292, 7, 80, 2, 2, 6292, 6293, 7, 86, 2, 2, 6293, 980, 3, 2, 2, 2, 6294, 6295, 7, 84, 2, 2, 6295, 6296, 7, 71, 2, 2, 6296, 6297, 7, 78, 2, 2, 6297, 6298, 7, 67, 2, 2, 6298, 6299, 7, 91, 2, 2, 6299, 982, 3, 2, 2, 2, 6300, 6301, 7, 84, 2, 2, 6301, 6302, 7, 71, 2, 2, 6302, 6303, 7, 78, 2, 2, 6303, 6304, 7, 67, 2, 2, 6304, 6305, 7, 91, 2, 2, 6305, 6306, 7, 97, 2, 2, 6306, 6307, 7, 78, 2, 2, 6307, 6308, 7, 81, 2, 2, 6308, 6309, 7, 73, 2, 2, 6309, 6310, 7, 97, 2, 2, 6310, 6311, 7, 72, 2, 2, 6311, 6312, 7, 75, 2, 2, 6312, 6313, 7, 78, 2, 2, 6313, 6314, 7, 71, 2, 2, 6314, 984, 3, 2, 2, 2, 6315, 6316, 7, 84, 2, 2, 6316, 6317, 7, 71, 2, 2, 6317, 6318, 7, 78, 2, 2, 6318, 6319, 7, 67, 2, 2, 6319, 6320, 7, 91, 2, 2, 6320, 6321, 7, 97, 2, 2, 6321, 6322, 7, 78, 2, 2, 6322, 6323, 7, 81, 2, 2, 6323, 6324, 7, 73, 2, 2, 6324, 6325, 7, 97, 2, 2, 6325, 6326, 7, 82, 2, 2, 6326, 6327, 7, 81, 2, 2, 6327, 6328, 7, 85, 2, 2, 6328, 986, 3, 2, 2, 2, 6329, 6330, 7, 84, 2, 2, 6330, 6331, 7, 71, 2, 2, 6331, 6332, 7, 78, 2, 2, 6332, 6333, 7, 67, 2, 2, 6333, 6334, 7, 91, 2, 2, 6334, 6335, 7, 78, 2, 2, 6335, 6336, 7, 81, 2, 2, 6336, 6337, 7, 73, 2, 2, 6337, 988, 3, 2, 2, 2, 6338, 6339, 7, 84, 2, 2, 6339, 6340, 7, 71, 2, 2, 6340, 6341, 7, 79, 2, 2, 6341, 6342, 7, 81, 2, 2, 6342, 6343, 7, 88, 2, 2, 6343, 6344, 7, 71, 2, 2, 6344, 990, 3, 2, 2, 2, 6345, 6346, 7, 84, 2, 2, 6346, 6347, 7, 71, 2, 2, 6347, 6348, 7, 81, 2, 2, 6348, 6349, 7, 84, 2, 2, 6349, 6350, 7, 73, 2, 2, 6350, 6351, 7, 67, 2, 2, 6351, 6352, 7, 80, 2, 2, 6352, 6353, 7, 75, 2, 2, 6353, 6354, 7, 92, 2, 2, 6354, 6355, 7, 71, 2, 2, 6355, 992, 3, 2, 2, 2, 6356, 6357, 7, 84, 2, 2, 6357, 6358, 7, 71, 2, 2, 6358, 6359, 7, 82, 2, 2, 6359, 6360, 7, 67, 2, 2, 6360, 6361, 7, 75, 2, 2, 6361, 6362, 7, 84, 2, 2, 6362, 994, 3, 2, 2, 2, 6363, 6364, 7, 84, 2, 2, 6364, 6365, 7, 71, 2, 2, 6365, 6366, 7, 82, 2, 2, 6366, 6367, 7, 78, 2, 2, 6367, 6368, 7, 75, 2, 2, 6368, 6369, 7, 69, 2, 2, 6369, 6370, 7, 67, 2, 2, 6370, 6371, 7, 86, 2, 2, 6371, 6372, 7, 71, 2, 2, 6372, 6373, 7, 97, 2, 2, 6373, 6374, 7, 70, 2, 2, 6374, 6375, 7, 81, 2, 2, 6375, 6376, 7, 97, 2, 2, 6376, 6377, 7, 70, 2, 2, 6377, 6378, 7, 68, 2, 2, 6378, 996, 3, 2, 2, 2, 6379, 6380, 7, 84, 2, 2, 6380, 6381, 7, 71, 2, 2, 6381, 6382, 7, 82, 2, 2, 6382, 6383, 7, 78, 2, 2, 6383, 6384, 7, 75, 2, 2, 6384, 6385, 7, 69, 2, 2, 6385, 6386, 7, 67, 2, 2, 6386, 6387, 7, 86, 2, 2, 6387, 6388, 7, 71, 2, 2, 6388, 6389, 7, 97, 2, 2, 6389, 6390, 7, 70, 2, 2, 6390, 6391, 7, 81, 2, 2, 6391, 6392, 7, 97, 2, 2, 6392, 6393, 7, 86, 2, 2, 6393, 6394, 7, 67, 2, 2, 6394, 6395, 7, 68, 2, 2, 6395, 6396, 7, 78, 2, 2, 6396, 6397, 7, 71, 2, 2, 6397, 998, 3, 2, 2, 2, 6398, 6399, 7, 84, 2, 2, 6399, 6400, 7, 71, 2, 2, 6400, 6401, 7, 82, 2, 2, 6401, 6402, 7, 78, 2, 2, 6402, 6403, 7, 75, 2, 2, 6403, 6404, 7, 69, 2, 2, 6404, 6405, 7, 67, 2, 2, 6405, 6406, 7, 86, 2, 2, 6406, 6407, 7, 71, 2, 2, 6407, 6408, 7, 97, 2, 2, 6408, 6409, 7, 75, 2, 2, 6409, 6410, 7, 73, 2, 2, 6410, 6411, 7, 80, 2, 2, 6411, 6412, 7, 81, 2, 2, 6412, 6413, 7, 84, 2, 2, 6413, 6414, 7, 71, 2, 2, 6414, 6415, 7, 97, 2, 2, 6415, 6416, 7, 70, 2, 2, 6416, 6417, 7, 68, 2, 2, 6417, 1000, 3, 2, 2, 2, 6418, 6419, 7, 84, 2, 2, 6419, 6420, 7, 71, 2, 2, 6420, 6421, 7, 82, 2, 2, 6421, 6422, 7, 78, 2, 2, 6422, 6423, 7, 75, 2, 2, 6423, 6424, 7, 69, 2, 2, 6424, 6425, 7, 67, 2, 2, 6425, 6426, 7, 86, 2, 2, 6426, 6427, 7, 71, 2, 2, 6427, 6428, 7, 97, 2, 2, 6428, 6429, 7, 75, 2, 2, 6429, 6430, 7, 73, 2, 2, 6430, 6431, 7, 80, 2, 2, 6431, 6432, 7, 81, 2, 2, 6432, 6433, 7, 84, 2, 2, 6433, 6434, 7, 71, 2, 2, 6434, 6435, 7, 97, 2, 2, 6435, 6436, 7, 86, 2, 2, 6436, 6437, 7, 67, 2, 2, 6437, 6438, 7, 68, 2, 2, 6438, 6439, 7, 78, 2, 2, 6439, 6440, 7, 71, 2, 2, 6440, 1002, 3, 2, 2, 2, 6441, 6442, 7, 84, 2, 2, 6442, 6443, 7, 71, 2, 2, 6443, 6444, 7, 82, 2, 2, 6444, 6445, 7, 78, 2, 2, 6445, 6446, 7, 75, 2, 2, 6446, 6447, 7, 69, 2, 2, 6447, 6448, 7, 67, 2, 2, 6448, 6449, 7, 86, 2, 2, 6449, 6450, 7, 71, 2, 2, 6450, 6451, 7, 97, 2, 2, 6451, 6452, 7, 84, 2, 2, 6452, 6453, 7, 71, 2, 2, 6453, 6454, 7, 89, 2, 2, 6454, 6455, 7, 84, 2, 2, 6455, 6456, 7, 75, 2, 2, 6456, 6457, 7, 86, 2, 2, 6457, 6458, 7, 71, 2, 2, 6458, 6459, 7, 97, 2, 2, 6459, 6460, 7, 70, 2, 2, 6460, 6461, 7, 68, 2, 2, 6461, 1004, 3, 2, 2, 2, 6462, 6463, 7, 84, 2, 2, 6463, 6464, 7, 71, 2, 2, 6464, 6465, 7, 82, 2, 2, 6465, 6466, 7, 78, 2, 2, 6466, 6467, 7, 75, 2, 2, 6467, 6468, 7, 69, 2, 2, 6468, 6469, 7, 67, 2, 2, 6469, 6470, 7, 86, 2, 2, 6470, 6471, 7, 71, 2, 2, 6471, 6472, 7, 97, 2, 2, 6472, 6473, 7, 89, 2, 2, 6473, 6474, 7, 75, 2, 2, 6474, 6475, 7, 78, 2, 2, 6475, 6476, 7, 70, 2, 2, 6476, 6477, 7, 97, 2, 2, 6477, 6478, 7, 70, 2, 2, 6478, 6479, 7, 81, 2, 2, 6479, 6480, 7, 97, 2, 2, 6480, 6481, 7, 86, 2, 2, 6481, 6482, 7, 67, 2, 2, 6482, 6483, 7, 68, 2, 2, 6483, 6484, 7, 78, 2, 2, 6484, 6485, 7, 71, 2, 2, 6485, 1006, 3, 2, 2, 2, 6486, 6487, 7, 84, 2, 2, 6487, 6488, 7, 71, 2, 2, 6488, 6489, 7, 82, 2, 2, 6489, 6490, 7, 78, 2, 2, 6490, 6491, 7, 75, 2, 2, 6491, 6492, 7, 69, 2, 2, 6492, 6493, 7, 67, 2, 2, 6493, 6494, 7, 86, 2, 2, 6494, 6495, 7, 71, 2, 2, 6495, 6496, 7, 97, 2, 2, 6496, 6497, 7, 89, 2, 2, 6497, 6498, 7, 75, 2, 2, 6498, 6499, 7, 78, 2, 2, 6499, 6500, 7, 70, 2, 2, 6500, 6501, 7, 97, 2, 2, 6501, 6502, 7, 75, 2, 2, 6502, 6503, 7, 73, 2, 2, 6503, 6504, 7, 80, 2, 2, 6504, 6505, 7, 81, 2, 2, 6505, 6506, 7, 84, 2, 2, 6506, 6507, 7, 71, 2, 2, 6507, 6508, 7, 97, 2, 2, 6508, 6509, 7, 86, 2, 2, 6509, 6510, 7, 67, 2, 2, 6510, 6511, 7, 68, 2, 2, 6511, 6512, 7, 78, 2, 2, 6512, 6513, 7, 71, 2, 2, 6513, 1008, 3, 2, 2, 2, 6514, 6515, 7, 84, 2, 2, 6515, 6516, 7, 71, 2, 2, 6516, 6517, 7, 82, 2, 2, 6517, 6518, 7, 78, 2, 2, 6518, 6519, 7, 75, 2, 2, 6519, 6520, 7, 69, 2, 2, 6520, 6521, 7, 67, 2, 2, 6521, 6522, 7, 86, 2, 2, 6522, 6523, 7, 75, 2, 2, 6523, 6524, 7, 81, 2, 2, 6524, 6525, 7, 80, 2, 2, 6525, 1010, 3, 2, 2, 2, 6526, 6527, 7, 84, 2, 2, 6527, 6528, 7, 71, 2, 2, 6528, 6529, 7, 85, 2, 2, 6529, 6530, 7, 71, 2, 2, 6530, 6531, 7, 86, 2, 2, 6531, 1012, 3, 2, 2, 2, 6532, 6533, 7, 84, 2, 2, 6533, 6534, 7, 71, 2, 2, 6534, 6535, 7, 85, 2, 2, 6535, 6536, 7, 87, 2, 2, 6536, 6537, 7, 79, 2, 2, 6537, 6538, 7, 71, 2, 2, 6538, 1014, 3, 2, 2, 2, 6539, 6540, 7, 84, 2, 2, 6540, 6541, 7, 71, 2, 2, 6541, 6542, 7, 86, 2, 2, 6542, 6543, 7, 87, 2, 2, 6543, 6544, 7, 84, 2, 2, 6544, 6545, 7, 80, 2, 2, 6545, 6546, 7, 71, 2, 2, 6546, 6547, 7, 70, 2, 2, 6547, 6548, 7, 97, 2, 2, 6548, 6549, 7, 85, 2, 2, 6549, 6550, 7, 83, 2, 2, 6550, 6551, 7, 78, 2, 2, 6551, 6552, 7, 85, 2, 2, 6552, 6553, 7, 86, 2, 2, 6553, 6554, 7, 67, 2, 2, 6554, 6555, 7, 86, 2, 2, 6555, 6556, 7, 71, 2, 2, 6556, 1016, 3, 2, 2, 2, 6557, 6558, 7, 84, 2, 2, 6558, 6559, 7, 71, 2, 2, 6559, 6560, 7, 86, 2, 2, 6560, 6561, 7, 87, 2, 2, 6561, 6562, 7, 84, 2, 2, 6562, 6563, 7, 80, 2, 2, 6563, 6564, 7, 85, 2, 2, 6564, 1018, 3, 2, 2, 2, 6565, 6566, 7, 84, 2, 2, 6566, 6567, 7, 81, 2, 2, 6567, 6568, 7, 78, 2, 2, 6568, 6569, 7, 71, 2, 2, 6569, 1020, 3, 2, 2, 2, 6570, 6571, 7, 84, 2, 2, 6571, 6572, 7, 81, 2, 2, 6572, 6573, 7, 78, 2, 2, 6573, 6574, 7, 78, 2, 2, 6574, 6575, 7, 68, 2, 2, 6575, 6576, 7, 67, 2, 2, 6576, 6577, 7, 69, 2, 2, 6577, 6578, 7, 77, 2, 2, 6578, 1022, 3, 2, 2, 2, 6579, 6580, 7, 84, 2, 2, 6580, 6581, 7, 81, 2, 2, 6581, 6582, 7, 78, 2, 2, 6582, 6583, 7, 78, 2, 2, 6583, 6584, 7, 87, 2, 2, 6584, 6585, 7, 82, 2, 2, 6585, 1024, 3, 2, 2, 2, 6586, 6587, 7, 84, 2, 2, 6587, 6588, 7, 81, 2, 2, 6588, 6589, 7, 86, 2, 2, 6589, 6590, 7, 67, 2, 2, 6590, 6591, 7, 86, 2, 2, 6591, 6592, 7, 71, 2, 2, 6592, 1026, 3, 2, 2, 2, 6593, 6594, 7, 84, 2, 2, 6594, 6595, 7, 81, 2, 2, 6595, 6596, 7, 89, 2, 2, 6596, 1028, 3, 2, 2, 2, 6597, 6598, 7, 84, 2, 2, 6598, 6599, 7, 81, 2, 2, 6599, 6600, 7, 89, 2, 2, 6600, 6601, 7, 85, 2, 2, 6601, 1030, 3, 2, 2, 2, 6602, 6603, 7, 84, 2, 2, 6603, 6604, 7, 81, 2, 2, 6604, 6605, 7, 89, 2, 2, 6605, 6606, 7, 97, 2, 2, 6606, 6607, 7, 72, 2, 2, 6607, 6608, 7, 81, 2, 2, 6608, 6609, 7, 84, 2, 2, 6609, 6610, 7, 79, 2, 2, 6610, 6611, 7, 67, 2, 2, 6611, 6612, 7, 86, 2, 2, 6612, 1032, 3, 2, 2, 2, 6613, 6614, 7, 85, 2, 2, 6614, 6615, 7, 67, 2, 2, 6615, 6616, 7, 88, 2, 2, 6616, 6617, 7, 71, 2, 2, 6617, 6618, 7, 82, 2, 2, 6618, 6619, 7, 81, 2, 2, 6619, 6620, 7, 75, 2, 2, 6620, 6621, 7, 80, 2, 2, 6621, 6622, 7, 86, 2, 2, 6622, 1034, 3, 2, 2, 2, 6623, 6624, 7, 85, 2, 2, 6624, 6625, 7, 69, 2, 2, 6625, 6626, 7, 74, 2, 2, 6626, 6627, 7, 71, 2, 2, 6627, 6628, 7, 70, 2, 2, 6628, 6629, 7, 87, 2, 2, 6629, 6630, 7, 78, 2, 2, 6630, 6631, 7, 71, 2, 2, 6631, 1036, 3, 2, 2, 2, 6632, 6633, 7, 85, 2, 2, 6633, 6634, 7, 71, 2, 2, 6634, 6635, 7, 69, 2, 2, 6635, 6636, 7, 87, 2, 2, 6636, 6637, 7, 84, 2, 2, 6637, 6638, 7, 75, 2, 2, 6638, 6639, 7, 86, 2, 2, 6639, 6640, 7, 91, 2, 2, 6640, 1038, 3, 2, 2, 2, 6641, 6642, 7, 85, 2, 2, 6642, 6643, 7, 71, 2, 2, 6643, 6644, 7, 84, 2, 2, 6644, 6645, 7, 88, 2, 2, 6645, 6646, 7, 71, 2, 2, 6646, 6647, 7, 84, 2, 2, 6647, 1040, 3, 2, 2, 2, 6648, 6649, 7, 85, 2, 2, 6649, 6650, 7, 71, 2, 2, 6650, 6651, 7, 85, 2, 2, 6651, 6652, 7, 85, 2, 2, 6652, 6653, 7, 75, 2, 2, 6653, 6654, 7, 81, 2, 2, 6654, 6655, 7, 80, 2, 2, 6655, 1042, 3, 2, 2, 2, 6656, 6657, 7, 85, 2, 2, 6657, 6658, 7, 74, 2, 2, 6658, 6659, 7, 67, 2, 2, 6659, 6660, 7, 84, 2, 2, 6660, 6661, 7, 71, 2, 2, 6661, 1044, 3, 2, 2, 2, 6662, 6663, 7, 85, 2, 2, 6663, 6664, 7, 74, 2, 2, 6664, 6665, 7, 67, 2, 2, 6665, 6666, 7, 84, 2, 2, 6666, 6667, 7, 71, 2, 2, 6667, 6668, 7, 70, 2, 2, 6668, 1046, 3, 2, 2, 2, 6669, 6670, 7, 85, 2, 2, 6670, 6671, 7, 75, 2, 2, 6671, 6672, 7, 73, 2, 2, 6672, 6673, 7, 80, 2, 2, 6673, 6674, 7, 71, 2, 2, 6674, 6675, 7, 70, 2, 2, 6675, 1048, 3, 2, 2, 2, 6676, 6677, 7, 85, 2, 2, 6677, 6678, 7, 75, 2, 2, 6678, 6679, 7, 79, 2, 2, 6679, 6680, 7, 82, 2, 2, 6680, 6681, 7, 78, 2, 2, 6681, 6682, 7, 71, 2, 2, 6682, 1050, 3, 2, 2, 2, 6683, 6684, 7, 85, 2, 2, 6684, 6685, 7, 78, 2, 2, 6685, 6686, 7, 67, 2, 2, 6686, 6687, 7, 88, 2, 2, 6687, 6688, 7, 71, 2, 2, 6688, 1052, 3, 2, 2, 2, 6689, 6690, 7, 85, 2, 2, 6690, 6691, 7, 78, 2, 2, 6691, 6692, 7, 81, 2, 2, 6692, 6693, 7, 89, 2, 2, 6693, 1054, 3, 2, 2, 2, 6694, 6695, 7, 85, 2, 2, 6695, 6696, 7, 80, 2, 2, 6696, 6697, 7, 67, 2, 2, 6697, 6698, 7, 82, 2, 2, 6698, 6699, 7, 85, 2, 2, 6699, 6700, 7, 74, 2, 2, 6700, 6701, 7, 81, 2, 2, 6701, 6702, 7, 86, 2, 2, 6702, 1056, 3, 2, 2, 2, 6703, 6704, 7, 85, 2, 2, 6704, 6705, 7, 81, 2, 2, 6705, 6706, 7, 69, 2, 2, 6706, 6707, 7, 77, 2, 2, 6707, 6708, 7, 71, 2, 2, 6708, 6709, 7, 86, 2, 2, 6709, 1058, 3, 2, 2, 2, 6710, 6711, 7, 85, 2, 2, 6711, 6712, 7, 81, 2, 2, 6712, 6713, 7, 79, 2, 2, 6713, 6714, 7, 71, 2, 2, 6714, 1060, 3, 2, 2, 2, 6715, 6716, 7, 85, 2, 2, 6716, 6717, 7, 81, 2, 2, 6717, 6718, 7, 80, 2, 2, 6718, 6719, 7, 67, 2, 2, 6719, 6720, 7, 79, 2, 2, 6720, 6721, 7, 71, 2, 2, 6721, 1062, 3, 2, 2, 2, 6722, 6723, 7, 85, 2, 2, 6723, 6724, 7, 81, 2, 2, 6724, 6725, 7, 87, 2, 2, 6725, 6726, 7, 80, 2, 2, 6726, 6727, 7, 70, 2, 2, 6727, 6728, 7, 85, 2, 2, 6728, 1064, 3, 2, 2, 2, 6729, 6730, 7, 85, 2, 2, 6730, 6731, 7, 81, 2, 2, 6731, 6732, 7, 87, 2, 2, 6732, 6733, 7, 84, 2, 2, 6733, 6734, 7, 69, 2, 2, 6734, 6735, 7, 71, 2, 2, 6735, 1066, 3, 2, 2, 2, 6736, 6737, 7, 85, 2, 2, 6737, 6738, 7, 83, 2, 2, 6738, 6739, 7, 78, 2, 2, 6739, 6740, 7, 97, 2, 2, 6740, 6741, 7, 67, 2, 2, 6741, 6742, 7, 72, 2, 2, 6742, 6743, 7, 86, 2, 2, 6743, 6744, 7, 71, 2, 2, 6744, 6745, 7, 84, 2, 2, 6745, 6746, 7, 97, 2, 2, 6746, 6747, 7, 73, 2, 2, 6747, 6748, 7, 86, 2, 2, 6748, 6749, 7, 75, 2, 2, 6749, 6750, 7, 70, 2, 2, 6750, 6751, 7, 85, 2, 2, 6751, 1068, 3, 2, 2, 2, 6752, 6753, 7, 85, 2, 2, 6753, 6754, 7, 83, 2, 2, 6754, 6755, 7, 78, 2, 2, 6755, 6756, 7, 97, 2, 2, 6756, 6757, 7, 67, 2, 2, 6757, 6758, 7, 72, 2, 2, 6758, 6759, 7, 86, 2, 2, 6759, 6760, 7, 71, 2, 2, 6760, 6761, 7, 84, 2, 2, 6761, 6762, 7, 97, 2, 2, 6762, 6763, 7, 79, 2, 2, 6763, 6764, 7, 86, 2, 2, 6764, 6765, 7, 85, 2, 2, 6765, 6766, 7, 97, 2, 2, 6766, 6767, 7, 73, 2, 2, 6767, 6768, 7, 67, 2, 2, 6768, 6769, 7, 82, 2, 2, 6769, 6770, 7, 85, 2, 2, 6770, 1070, 3, 2, 2, 2, 6771, 6772, 7, 85, 2, 2, 6772, 6773, 7, 83, 2, 2, 6773, 6774, 7, 78, 2, 2, 6774, 6775, 7, 97, 2, 2, 6775, 6776, 7, 68, 2, 2, 6776, 6777, 7, 71, 2, 2, 6777, 6778, 7, 72, 2, 2, 6778, 6779, 7, 81, 2, 2, 6779, 6780, 7, 84, 2, 2, 6780, 6781, 7, 71, 2, 2, 6781, 6782, 7, 97, 2, 2, 6782, 6783, 7, 73, 2, 2, 6783, 6784, 7, 86, 2, 2, 6784, 6785, 7, 75, 2, 2, 6785, 6786, 7, 70, 2, 2, 6786, 6787, 7, 85, 2, 2, 6787, 1072, 3, 2, 2, 2, 6788, 6789, 7, 85, 2, 2, 6789, 6790, 7, 83, 2, 2, 6790, 6791, 7, 78, 2, 2, 6791, 6792, 7, 97, 2, 2, 6792, 6793, 7, 68, 2, 2, 6793, 6794, 7, 87, 2, 2, 6794, 6795, 7, 72, 2, 2, 6795, 6796, 7, 72, 2, 2, 6796, 6797, 7, 71, 2, 2, 6797, 6798, 7, 84, 2, 2, 6798, 6799, 7, 97, 2, 2, 6799, 6800, 7, 84, 2, 2, 6800, 6801, 7, 71, 2, 2, 6801, 6802, 7, 85, 2, 2, 6802, 6803, 7, 87, 2, 2, 6803, 6804, 7, 78, 2, 2, 6804, 6805, 7, 86, 2, 2, 6805, 1074, 3, 2, 2, 2, 6806, 6807, 7, 85, 2, 2, 6807, 6808, 7, 83, 2, 2, 6808, 6809, 7, 78, 2, 2, 6809, 6810, 7, 97, 2, 2, 6810, 6811, 7, 69, 2, 2, 6811, 6812, 7, 67, 2, 2, 6812, 6813, 7, 69, 2, 2, 6813, 6814, 7, 74, 2, 2, 6814, 6815, 7, 71, 2, 2, 6815, 1076, 3, 2, 2, 2, 6816, 6817, 7, 85, 2, 2, 6817, 6818, 7, 83, 2, 2, 6818, 6819, 7, 78, 2, 2, 6819, 6820, 7, 97, 2, 2, 6820, 6821, 7, 80, 2, 2, 6821, 6822, 7, 81, 2, 2, 6822, 6823, 7, 97, 2, 2, 6823, 6824, 7, 69, 2, 2, 6824, 6825, 7, 67, 2, 2, 6825, 6826, 7, 69, 2, 2, 6826, 6827, 7, 74, 2, 2, 6827, 6828, 7, 71, 2, 2, 6828, 1078, 3, 2, 2, 2, 6829, 6830, 7, 85, 2, 2, 6830, 6831, 7, 83, 2, 2, 6831, 6832, 7, 78, 2, 2, 6832, 6833, 7, 97, 2, 2, 6833, 6834, 7, 86, 2, 2, 6834, 6835, 7, 74, 2, 2, 6835, 6836, 7, 84, 2, 2, 6836, 6837, 7, 71, 2, 2, 6837, 6838, 7, 67, 2, 2, 6838, 6839, 7, 70, 2, 2, 6839, 1080, 3, 2, 2, 2, 6840, 6841, 7, 85, 2, 2, 6841, 6842, 7, 86, 2, 2, 6842, 6843, 7, 67, 2, 2, 6843, 6844, 7, 84, 2, 2, 6844, 6845, 7, 86, 2, 2, 6845, 1082, 3, 2, 2, 2, 6846, 6847, 7, 85, 2, 2, 6847, 6848, 7, 86, 2, 2, 6848, 6849, 7, 67, 2, 2, 6849, 6850, 7, 84, 2, 2, 6850, 6851, 7, 86, 2, 2, 6851, 6852, 7, 85, 2, 2, 6852, 1084, 3, 2, 2, 2, 6853, 6854, 7, 85, 2, 2, 6854, 6855, 7, 86, 2, 2, 6855, 6856, 7, 67, 2, 2, 6856, 6857, 7, 86, 2, 2, 6857, 6858, 7, 85, 2, 2, 6858, 6859, 7, 97, 2, 2, 6859, 6860, 7, 67, 2, 2, 6860, 6861, 7, 87, 2, 2, 6861, 6862, 7, 86, 2, 2, 6862, 6863, 7, 81, 2, 2, 6863, 6864, 7, 97, 2, 2, 6864, 6865, 7, 84, 2, 2, 6865, 6866, 7, 71, 2, 2, 6866, 6867, 7, 69, 2, 2, 6867, 6868, 7, 67, 2, 2, 6868, 6869, 7, 78, 2, 2, 6869, 6870, 7, 69, 2, 2, 6870, 1086, 3, 2, 2, 2, 6871, 6872, 7, 85, 2, 2, 6872, 6873, 7, 86, 2, 2, 6873, 6874, 7, 67, 2, 2, 6874, 6875, 7, 86, 2, 2, 6875, 6876, 7, 85, 2, 2, 6876, 6877, 7, 97, 2, 2, 6877, 6878, 7, 82, 2, 2, 6878, 6879, 7, 71, 2, 2, 6879, 6880, 7, 84, 2, 2, 6880, 6881, 7, 85, 2, 2, 6881, 6882, 7, 75, 2, 2, 6882, 6883, 7, 85, 2, 2, 6883, 6884, 7, 86, 2, 2, 6884, 6885, 7, 71, 2, 2, 6885, 6886, 7, 80, 2, 2, 6886, 6887, 7, 86, 2, 2, 6887, 1088, 3, 2, 2, 2, 6888, 6889, 7, 85, 2, 2, 6889, 6890, 7, 86, 2, 2, 6890, 6891, 7, 67, 2, 2, 6891, 6892, 7, 86, 2, 2, 6892, 6893, 7, 85, 2, 2, 6893, 6894, 7, 97, 2, 2, 6894, 6895, 7, 85, 2, 2, 6895, 6896, 7, 67, 2, 2, 6896, 6897, 7, 79, 2, 2, 6897, 6898, 7, 82, 2, 2, 6898, 6899, 7, 78, 2, 2, 6899, 6900, 7, 71, 2, 2, 6900, 6901, 7, 97, 2, 2, 6901, 6902, 7, 82, 2, 2, 6902, 6903, 7, 67, 2, 2, 6903, 6904, 7, 73, 2, 2, 6904, 6905, 7, 71, 2, 2, 6905, 6906, 7, 85, 2, 2, 6906, 1090, 3, 2, 2, 2, 6907, 6908, 7, 85, 2, 2, 6908, 6909, 7, 86, 2, 2, 6909, 6910, 7, 67, 2, 2, 6910, 6911, 7, 86, 2, 2, 6911, 6912, 7, 87, 2, 2, 6912, 6913, 7, 85, 2, 2, 6913, 1092, 3, 2, 2, 2, 6914, 6915, 7, 85, 2, 2, 6915, 6916, 7, 86, 2, 2, 6916, 6917, 7, 81, 2, 2, 6917, 6918, 7, 82, 2, 2, 6918, 1094, 3, 2, 2, 2, 6919, 6920, 7, 85, 2, 2, 6920, 6921, 7, 86, 2, 2, 6921, 6922, 7, 81, 2, 2, 6922, 6923, 7, 84, 2, 2, 6923, 6924, 7, 67, 2, 2, 6924, 6925, 7, 73, 2, 2, 6925, 6926, 7, 71, 2, 2, 6926, 1096, 3, 2, 2, 2, 6927, 6928, 7, 85, 2, 2, 6928, 6929, 7, 86, 2, 2, 6929, 6930, 7, 81, 2, 2, 6930, 6931, 7, 84, 2, 2, 6931, 6932, 7, 71, 2, 2, 6932, 6933, 7, 70, 2, 2, 6933, 1098, 3, 2, 2, 2, 6934, 6935, 7, 85, 2, 2, 6935, 6936, 7, 86, 2, 2, 6936, 6937, 7, 84, 2, 2, 6937, 6938, 7, 75, 2, 2, 6938, 6939, 7, 80, 2, 2, 6939, 6940, 7, 73, 2, 2, 6940, 1100, 3, 2, 2, 2, 6941, 6942, 7, 85, 2, 2, 6942, 6943, 7, 87, 2, 2, 6943, 6944, 7, 68, 2, 2, 6944, 6945, 7, 69, 2, 2, 6945, 6946, 7, 78, 2, 2, 6946, 6947, 7, 67, 2, 2, 6947, 6948, 7, 85, 2, 2, 6948, 6949, 7, 85, 2, 2, 6949, 6950, 7, 97, 2, 2, 6950, 6951, 7, 81, 2, 2, 6951, 6952, 7, 84, 2, 2, 6952, 6953, 7, 75, 2, 2, 6953, 6954, 7, 73, 2, 2, 6954, 6955, 7, 75, 2, 2, 6955, 6956, 7, 80, 2, 2, 6956, 1102, 3, 2, 2, 2, 6957, 6958, 7, 85, 2, 2, 6958, 6959, 7, 87, 2, 2, 6959, 6960, 7, 68, 2, 2, 6960, 6961, 7, 76, 2, 2, 6961, 6962, 7, 71, 2, 2, 6962, 6963, 7, 69, 2, 2, 6963, 6964, 7, 86, 2, 2, 6964, 1104, 3, 2, 2, 2, 6965, 6966, 7, 85, 2, 2, 6966, 6967, 7, 87, 2, 2, 6967, 6968, 7, 68, 2, 2, 6968, 6969, 7, 82, 2, 2, 6969, 6970, 7, 67, 2, 2, 6970, 6971, 7, 84, 2, 2, 6971, 6972, 7, 86, 2, 2, 6972, 6973, 7, 75, 2, 2, 6973, 6974, 7, 86, 2, 2, 6974, 6975, 7, 75, 2, 2, 6975, 6976, 7, 81, 2, 2, 6976, 6977, 7, 80, 2, 2, 6977, 1106, 3, 2, 2, 2, 6978, 6979, 7, 85, 2, 2, 6979, 6980, 7, 87, 2, 2, 6980, 6981, 7, 68, 2, 2, 6981, 6982, 7, 82, 2, 2, 6982, 6983, 7, 67, 2, 2, 6983, 6984, 7, 84, 2, 2, 6984, 6985, 7, 86, 2, 2, 6985, 6986, 7, 75, 2, 2, 6986, 6987, 7, 86, 2, 2, 6987, 6988, 7, 75, 2, 2, 6988, 6989, 7, 81, 2, 2, 6989, 6990, 7, 80, 2, 2, 6990, 6991, 7, 85, 2, 2, 6991, 1108, 3, 2, 2, 2, 6992, 6993, 7, 85, 2, 2, 6993, 6994, 7, 87, 2, 2, 6994, 6995, 7, 85, 2, 2, 6995, 6996, 7, 82, 2, 2, 6996, 6997, 7, 71, 2, 2, 6997, 6998, 7, 80, 2, 2, 6998, 6999, 7, 70, 2, 2, 6999, 1110, 3, 2, 2, 2, 7000, 7001, 7, 85, 2, 2, 7001, 7002, 7, 89, 2, 2, 7002, 7003, 7, 67, 2, 2, 7003, 7004, 7, 82, 2, 2, 7004, 7005, 7, 85, 2, 2, 7005, 1112, 3, 2, 2, 2, 7006, 7007, 7, 85, 2, 2, 7007, 7008, 7, 89, 2, 2, 7008, 7009, 7, 75, 2, 2, 7009, 7010, 7, 86, 2, 2, 7010, 7011, 7, 69, 2, 2, 7011, 7012, 7, 74, 2, 2, 7012, 7013, 7, 71, 2, 2, 7013, 7014, 7, 85, 2, 2, 7014, 1114, 3, 2, 2, 2, 7015, 7016, 7, 86, 2, 2, 7016, 7017, 7, 67, 2, 2, 7017, 7018, 7, 68, 2, 2, 7018, 7019, 7, 78, 2, 2, 7019, 7020, 7, 71, 2, 2, 7020, 7021, 7, 97, 2, 2, 7021, 7022, 7, 80, 2, 2, 7022, 7023, 7, 67, 2, 2, 7023, 7024, 7, 79, 2, 2, 7024, 7025, 7, 71, 2, 2, 7025, 1116, 3, 2, 2, 2, 7026, 7027, 7, 86, 2, 2, 7027, 7028, 7, 67, 2, 2, 7028, 7029, 7, 68, 2, 2, 7029, 7030, 7, 78, 2, 2, 7030, 7031, 7, 71, 2, 2, 7031, 7032, 7, 85, 2, 2, 7032, 7033, 7, 82, 2, 2, 7033, 7034, 7, 67, 2, 2, 7034, 7035, 7, 69, 2, 2, 7035, 7036, 7, 71, 2, 2, 7036, 1118, 3, 2, 2, 2, 7037, 7038, 7, 86, 2, 2, 7038, 7039, 7, 71, 2, 2, 7039, 7040, 7, 79, 2, 2, 7040, 7041, 7, 82, 2, 2, 7041, 7042, 7, 81, 2, 2, 7042, 7043, 7, 84, 2, 2, 7043, 7044, 7, 67, 2, 2, 7044, 7045, 7, 84, 2, 2, 7045, 7046, 7, 91, 2, 2, 7046, 1120, 3, 2, 2, 2, 7047, 7048, 7, 86, 2, 2, 7048, 7049, 7, 71, 2, 2, 7049, 7050, 7, 79, 2, 2, 7050, 7051, 7, 82, 2, 2, 7051, 7052, 7, 86, 2, 2, 7052, 7053, 7, 67, 2, 2, 7053, 7054, 7, 68, 2, 2, 7054, 7055, 7, 78, 2, 2, 7055, 7056, 7, 71, 2, 2, 7056, 1122, 3, 2, 2, 2, 7057, 7058, 7, 86, 2, 2, 7058, 7059, 7, 74, 2, 2, 7059, 7060, 7, 67, 2, 2, 7060, 7061, 7, 80, 2, 2, 7061, 1124, 3, 2, 2, 2, 7062, 7063, 7, 86, 2, 2, 7063, 7064, 7, 84, 2, 2, 7064, 7065, 7, 67, 2, 2, 7065, 7066, 7, 70, 2, 2, 7066, 7067, 7, 75, 2, 2, 7067, 7068, 7, 86, 2, 2, 7068, 7069, 7, 75, 2, 2, 7069, 7070, 7, 81, 2, 2, 7070, 7071, 7, 80, 2, 2, 7071, 7072, 7, 67, 2, 2, 7072, 7073, 7, 78, 2, 2, 7073, 1126, 3, 2, 2, 2, 7074, 7075, 7, 86, 2, 2, 7075, 7076, 7, 84, 2, 2, 7076, 7077, 7, 67, 2, 2, 7077, 7078, 7, 80, 2, 2, 7078, 7079, 7, 85, 2, 2, 7079, 7080, 7, 67, 2, 2, 7080, 7081, 7, 69, 2, 2, 7081, 7082, 7, 86, 2, 2, 7082, 7083, 7, 75, 2, 2, 7083, 7084, 7, 81, 2, 2, 7084, 7085, 7, 80, 2, 2, 7085, 1128, 3, 2, 2, 2, 7086, 7087, 7, 86, 2, 2, 7087, 7088, 7, 84, 2, 2, 7088, 7089, 7, 67, 2, 2, 7089, 7090, 7, 80, 2, 2, 7090, 7091, 7, 85, 2, 2, 7091, 7092, 7, 67, 2, 2, 7092, 7093, 7, 69, 2, 2, 7093, 7094, 7, 86, 2, 2, 7094, 7095, 7, 75, 2, 2, 7095, 7096, 7, 81, 2, 2, 7096, 7097, 7, 80, 2, 2, 7097, 7098, 7, 67, 2, 2, 7098, 7099, 7, 78, 2, 2, 7099, 1130, 3, 2, 2, 2, 7100, 7101, 7, 86, 2, 2, 7101, 7102, 7, 84, 2, 2, 7102, 7103, 7, 75, 2, 2, 7103, 7104, 7, 73, 2, 2, 7104, 7105, 7, 73, 2, 2, 7105, 7106, 7, 71, 2, 2, 7106, 7107, 7, 84, 2, 2, 7107, 7108, 7, 85, 2, 2, 7108, 1132, 3, 2, 2, 2, 7109, 7110, 7, 86, 2, 2, 7110, 7111, 7, 84, 2, 2, 7111, 7112, 7, 87, 2, 2, 7112, 7113, 7, 80, 2, 2, 7113, 7114, 7, 69, 2, 2, 7114, 7115, 7, 67, 2, 2, 7115, 7116, 7, 86, 2, 2, 7116, 7117, 7, 71, 2, 2, 7117, 1134, 3, 2, 2, 2, 7118, 7119, 7, 87, 2, 2, 7119, 7120, 7, 80, 2, 2, 7120, 7121, 7, 70, 2, 2, 7121, 7122, 7, 71, 2, 2, 7122, 7123, 7, 72, 2, 2, 7123, 7124, 7, 75, 2, 2, 7124, 7125, 7, 80, 2, 2, 7125, 7126, 7, 71, 2, 2, 7126, 7127, 7, 70, 2, 2, 7127, 1136, 3, 2, 2, 2, 7128, 7129, 7, 87, 2, 2, 7129, 7130, 7, 80, 2, 2, 7130, 7131, 7, 70, 2, 2, 7131, 7132, 7, 81, 2, 2, 7132, 7133, 7, 72, 2, 2, 7133, 7134, 7, 75, 2, 2, 7134, 7135, 7, 78, 2, 2, 7135, 7136, 7, 71, 2, 2, 7136, 1138, 3, 2, 2, 2, 7137, 7138, 7, 87, 2, 2, 7138, 7139, 7, 80, 2, 2, 7139, 7140, 7, 70, 2, 2, 7140, 7141, 7, 81, 2, 2, 7141, 7142, 7, 97, 2, 2, 7142, 7143, 7, 68, 2, 2, 7143, 7144, 7, 87, 2, 2, 7144, 7145, 7, 72, 2, 2, 7145, 7146, 7, 72, 2, 2, 7146, 7147, 7, 71, 2, 2, 7147, 7148, 7, 84, 2, 2, 7148, 7149, 7, 97, 2, 2, 7149, 7150, 7, 85, 2, 2, 7150, 7151, 7, 75, 2, 2, 7151, 7152, 7, 92, 2, 2, 7152, 7153, 7, 71, 2, 2, 7153, 1140, 3, 2, 2, 2, 7154, 7155, 7, 87, 2, 2, 7155, 7156, 7, 80, 2, 2, 7156, 7157, 7, 75, 2, 2, 7157, 7158, 7, 80, 2, 2, 7158, 7159, 7, 85, 2, 2, 7159, 7160, 7, 86, 2, 2, 7160, 7161, 7, 67, 2, 2, 7161, 7162, 7, 78, 2, 2, 7162, 7163, 7, 78, 2, 2, 7163, 1142, 3, 2, 2, 2, 7164, 7165, 7, 87, 2, 2, 7165, 7166, 7, 80, 2, 2, 7166, 7167, 7, 77, 2, 2, 7167, 7168, 7, 80, 2, 2, 7168, 7169, 7, 81, 2, 2, 7169, 7170, 7, 89, 2, 2, 7170, 7171, 7, 80, 2, 2, 7171, 1144, 3, 2, 2, 2, 7172, 7173, 7, 87, 2, 2, 7173, 7174, 7, 80, 2, 2, 7174, 7175, 7, 86, 2, 2, 7175, 7176, 7, 75, 2, 2, 7176, 7177, 7, 78, 2, 2, 7177, 1146, 3, 2, 2, 2, 7178, 7179, 7, 87, 2, 2, 7179, 7180, 7, 82, 2, 2, 7180, 7181, 7, 73, 2, 2, 7181, 7182, 7, 84, 2, 2, 7182, 7183, 7, 67, 2, 2, 7183, 7184, 7, 70, 2, 2, 7184, 7185, 7, 71, 2, 2, 7185, 1148, 3, 2, 2, 2, 7186, 7187, 7, 87, 2, 2, 7187, 7188, 7, 85, 2, 2, 7188, 7189, 7, 71, 2, 2, 7189, 7190, 7, 84, 2, 2, 7190, 1150, 3, 2, 2, 2, 7191, 7192, 7, 87, 2, 2, 7192, 7193, 7, 85, 2, 2, 7193, 7194, 7, 71, 2, 2, 7194, 7195, 7, 97, 2, 2, 7195, 7196, 7, 72, 2, 2, 7196, 7197, 7, 84, 2, 2, 7197, 7198, 7, 79, 2, 2, 7198, 1152, 3, 2, 2, 2, 7199, 7200, 7, 87, 2, 2, 7200, 7201, 7, 85, 2, 2, 7201, 7202, 7, 71, 2, 2, 7202, 7203, 7, 84, 2, 2, 7203, 7204, 7, 97, 2, 2, 7204, 7205, 7, 84, 2, 2, 7205, 7206, 7, 71, 2, 2, 7206, 7207, 7, 85, 2, 2, 7207, 7208, 7, 81, 2, 2, 7208, 7209, 7, 87, 2, 2, 7209, 7210, 7, 84, 2, 2, 7210, 7211, 7, 69, 2, 2, 7211, 7212, 7, 71, 2, 2, 7212, 7213, 7, 85, 2, 2, 7213, 1154, 3, 2, 2, 2, 7214, 7215, 7, 88, 2, 2, 7215, 7216, 7, 67, 2, 2, 7216, 7217, 7, 78, 2, 2, 7217, 7218, 7, 75, 2, 2, 7218, 7219, 7, 70, 2, 2, 7219, 7220, 7, 67, 2, 2, 7220, 7221, 7, 86, 2, 2, 7221, 7222, 7, 75, 2, 2, 7222, 7223, 7, 81, 2, 2, 7223, 7224, 7, 80, 2, 2, 7224, 1156, 3, 2, 2, 2, 7225, 7226, 7, 88, 2, 2, 7226, 7227, 7, 67, 2, 2, 7227, 7228, 7, 78, 2, 2, 7228, 7229, 7, 87, 2, 2, 7229, 7230, 7, 71, 2, 2, 7230, 1158, 3, 2, 2, 2, 7231, 7232, 7, 88, 2, 2, 7232, 7233, 7, 67, 2, 2, 7233, 7234, 7, 84, 2, 2, 7234, 7235, 7, 75, 2, 2, 7235, 7236, 7, 67, 2, 2, 7236, 7237, 7, 68, 2, 2, 7237, 7238, 7, 78, 2, 2, 7238, 7239, 7, 71, 2, 2, 7239, 7240, 7, 85, 2, 2, 7240, 1160, 3, 2, 2, 2, 7241, 7242, 7, 88, 2, 2, 7242, 7243, 7, 75, 2, 2, 7243, 7244, 7, 71, 2, 2, 7244, 7245, 7, 89, 2, 2, 7245, 1162, 3, 2, 2, 2, 7246, 7247, 7, 88, 2, 2, 7247, 7248, 7, 75, 2, 2, 7248, 7249, 7, 84, 2, 2, 7249, 7250, 7, 86, 2, 2, 7250, 7251, 7, 87, 2, 2, 7251, 7252, 7, 67, 2, 2, 7252, 7253, 7, 78, 2, 2, 7253, 1164, 3, 2, 2, 2, 7254, 7255, 7, 88, 2, 2, 7255, 7256, 7, 75, 2, 2, 7256, 7257, 7, 85, 2, 2, 7257, 7258, 7, 75, 2, 2, 7258, 7259, 7, 68, 2, 2, 7259, 7260, 7, 78, 2, 2, 7260, 7261, 7, 71, 2, 2, 7261, 1166, 3, 2, 2, 2, 7262, 7263, 7, 89, 2, 2, 7263, 7264, 7, 67, 2, 2, 7264, 7265, 7, 75, 2, 2, 7265, 7266, 7, 86, 2, 2, 7266, 1168, 3, 2, 2, 2, 7267, 7268, 7, 89, 2, 2, 7268, 7269, 7, 67, 2, 2, 7269, 7270, 7, 84, 2, 2, 7270, 7271, 7, 80, 2, 2, 7271, 7272, 7, 75, 2, 2, 7272, 7273, 7, 80, 2, 2, 7273, 7274, 7, 73, 2, 2, 7274, 7275, 7, 85, 2, 2, 7275, 1170, 3, 2, 2, 2, 7276, 7277, 7, 89, 2, 2, 7277, 7278, 7, 75, 2, 2, 7278, 7279, 7, 86, 2, 2, 7279, 7280, 7, 74, 2, 2, 7280, 7281, 7, 81, 2, 2, 7281, 7282, 7, 87, 2, 2, 7282, 7283, 7, 86, 2, 2, 7283, 1172, 3, 2, 2, 2, 7284, 7285, 7, 89, 2, 2, 7285, 7286, 7, 81, 2, 2, 7286, 7287, 7, 84, 2, 2, 7287, 7288, 7, 77, 2, 2, 7288, 1174, 3, 2, 2, 2, 7289, 7290, 7, 89, 2, 2, 7290, 7291, 7, 84, 2, 2, 7291, 7292, 7, 67, 2, 2, 7292, 7293, 7, 82, 2, 2, 7293, 7294, 7, 82, 2, 2, 7294, 7295, 7, 71, 2, 2, 7295, 7296, 7, 84, 2, 2, 7296, 1176, 3, 2, 2, 2, 7297, 7298, 7, 90, 2, 2, 7298, 7299, 7, 55, 2, 2, 7299, 7300, 7, 50, 2, 2, 7300, 7301, 7, 59, 2, 2, 7301, 1178, 3, 2, 2, 2, 7302, 7303, 7, 90, 2, 2, 7303, 7304, 7, 67, 2, 2, 7304, 1180, 3, 2, 2, 2, 7305, 7306, 7, 90, 2, 2, 7306, 7307, 7, 79, 2, 2, 7307, 7308, 7, 78, 2, 2, 7308, 1182, 3, 2, 2, 2, 7309, 7310, 7, 71, 2, 2, 7310, 7311, 7, 87, 2, 2, 7311, 7312, 7, 84, 2, 2, 7312, 1184, 3, 2, 2, 2, 7313, 7314, 7, 87, 2, 2, 7314, 7315, 7, 85, 2, 2, 7315, 7316, 7, 67, 2, 2, 7316, 1186, 3, 2, 2, 2, 7317, 7318, 7, 76, 2, 2, 7318, 7319, 7, 75, 2, 2, 7319, 7320, 7, 85, 2, 2, 7320, 1188, 3, 2, 2, 2, 7321, 7322, 7, 75, 2, 2, 7322, 7323, 7, 85, 2, 2, 7323, 7324, 7, 81, 2, 2, 7324, 1190, 3, 2, 2, 2, 7325, 7326, 7, 75, 2, 2, 7326, 7327, 7, 80, 2, 2, 7327, 7328, 7, 86, 2, 2, 7328, 7329, 7, 71, 2, 2, 7329, 7330, 7, 84, 2, 2, 7330, 7331, 7, 80, 2, 2, 7331, 7332, 7, 67, 2, 2, 7332, 7333, 7, 78, 2, 2, 7333, 1192, 3, 2, 2, 2, 7334, 7335, 7, 83, 2, 2, 7335, 7336, 7, 87, 2, 2, 7336, 7337, 7, 67, 2, 2, 7337, 7338, 7, 84, 2, 2, 7338, 7339, 7, 86, 2, 2, 7339, 7340, 7, 71, 2, 2, 7340, 7341, 7, 84, 2, 2, 7341, 1194, 3, 2, 2, 2, 7342, 7343, 7, 79, 2, 2, 7343, 7344, 7, 81, 2, 2, 7344, 7345, 7, 80, 2, 2, 7345, 7346, 7, 86, 2, 2, 7346, 7347, 7, 74, 2, 2, 7347, 1196, 3, 2, 2, 2, 7348, 7349, 7, 70, 2, 2, 7349, 7350, 7, 67, 2, 2, 7350, 7351, 7, 91, 2, 2, 7351, 1198, 3, 2, 2, 2, 7352, 7353, 7, 74, 2, 2, 7353, 7354, 7, 81, 2, 2, 7354, 7355, 7, 87, 2, 2, 7355, 7356, 7, 84, 2, 2, 7356, 1200, 3, 2, 2, 2, 7357, 7358, 7, 79, 2, 2, 7358, 7359, 7, 75, 2, 2, 7359, 7360, 7, 80, 2, 2, 7360, 7361, 7, 87, 2, 2, 7361, 7362, 7, 86, 2, 2, 7362, 7363, 7, 71, 2, 2, 7363, 1202, 3, 2, 2, 2, 7364, 7365, 7, 89, 2, 2, 7365, 7366, 7, 71, 2, 2, 7366, 7367, 7, 71, 2, 2, 7367, 7368, 7, 77, 2, 2, 7368, 1204, 3, 2, 2, 2, 7369, 7370, 7, 85, 2, 2, 7370, 7371, 7, 71, 2, 2, 7371, 7372, 7, 69, 2, 2, 7372, 7373, 7, 81, 2, 2, 7373, 7374, 7, 80, 2, 2, 7374, 7375, 7, 70, 2, 2, 7375, 1206, 3, 2, 2, 2, 7376, 7377, 7, 79, 2, 2, 7377, 7378, 7, 75, 2, 2, 7378, 7379, 7, 69, 2, 2, 7379, 7380, 7, 84, 2, 2, 7380, 7381, 7, 81, 2, 2, 7381, 7382, 7, 85, 2, 2, 7382, 7383, 7, 71, 2, 2, 7383, 7384, 7, 69, 2, 2, 7384, 7385, 7, 81, 2, 2, 7385, 7386, 7, 80, 2, 2, 7386, 7387, 7, 70, 2, 2, 7387, 1208, 3, 2, 2, 2, 7388, 7389, 7, 86, 2, 2, 7389, 7390, 7, 67, 2, 2, 7390, 7391, 7, 68, 2, 2, 7391, 7392, 7, 78, 2, 2, 7392, 7393, 7, 71, 2, 2, 7393, 7394, 7, 85, 2, 2, 7394, 1210, 3, 2, 2, 2, 7395, 7396, 7, 84, 2, 2, 7396, 7397, 7, 81, 2, 2, 7397, 7398, 7, 87, 2, 2, 7398, 7399, 7, 86, 2, 2, 7399, 7400, 7, 75, 2, 2, 7400, 7401, 7, 80, 2, 2, 7401, 7402, 7, 71, 2, 2, 7402, 1212, 3, 2, 2, 2, 7403, 7404, 7, 71, 2, 2, 7404, 7405, 7, 90, 2, 2, 7405, 7406, 7, 71, 2, 2, 7406, 7407, 7, 69, 2, 2, 7407, 7408, 7, 87, 2, 2, 7408, 7409, 7, 86, 2, 2, 7409, 7410, 7, 71, 2, 2, 7410, 1214, 3, 2, 2, 2, 7411, 7412, 7, 72, 2, 2, 7412, 7413, 7, 75, 2, 2, 7413, 7414, 7, 78, 2, 2, 7414, 7415, 7, 71, 2, 2, 7415, 1216, 3, 2, 2, 2, 7416, 7417, 7, 82, 2, 2, 7417, 7418, 7, 84, 2, 2, 7418, 7419, 7, 81, 2, 2, 7419, 7420, 7, 69, 2, 2, 7420, 7421, 7, 71, 2, 2, 7421, 7422, 7, 85, 2, 2, 7422, 7423, 7, 85, 2, 2, 7423, 1218, 3, 2, 2, 2, 7424, 7425, 7, 84, 2, 2, 7425, 7426, 7, 71, 2, 2, 7426, 7427, 7, 78, 2, 2, 7427, 7428, 7, 81, 2, 2, 7428, 7429, 7, 67, 2, 2, 7429, 7430, 7, 70, 2, 2, 7430, 1220, 3, 2, 2, 2, 7431, 7432, 7, 85, 2, 2, 7432, 7433, 7, 74, 2, 2, 7433, 7434, 7, 87, 2, 2, 7434, 7435, 7, 86, 2, 2, 7435, 7436, 7, 70, 2, 2, 7436, 7437, 7, 81, 2, 2, 7437, 7438, 7, 89, 2, 2, 7438, 7439, 7, 80, 2, 2, 7439, 1222, 3, 2, 2, 2, 7440, 7441, 7, 85, 2, 2, 7441, 7442, 7, 87, 2, 2, 7442, 7443, 7, 82, 2, 2, 7443, 7444, 7, 71, 2, 2, 7444, 7445, 7, 84, 2, 2, 7445, 1224, 3, 2, 2, 2, 7446, 7447, 7, 82, 2, 2, 7447, 7448, 7, 84, 2, 2, 7448, 7449, 7, 75, 2, 2, 7449, 7450, 7, 88, 2, 2, 7450, 7451, 7, 75, 2, 2, 7451, 7452, 7, 78, 2, 2, 7452, 7453, 7, 71, 2, 2, 7453, 7454, 7, 73, 2, 2, 7454, 7455, 7, 71, 2, 2, 7455, 7456, 7, 85, 2, 2, 7456, 1226, 3, 2, 2, 2, 7457, 7458, 7, 67, 2, 2, 7458, 7459, 7, 82, 2, 2, 7459, 7460, 7, 82, 2, 2, 7460, 7461, 7, 78, 2, 2, 7461, 7462, 7, 75, 2, 2, 7462, 7463, 7, 69, 2, 2, 7463, 7464, 7, 67, 2, 2, 7464, 7465, 7, 86, 2, 2, 7465, 7466, 7, 75, 2, 2, 7466, 7467, 7, 81, 2, 2, 7467, 7468, 7, 80, 2, 2, 7468, 7469, 7, 97, 2, 2, 7469, 7470, 7, 82, 2, 2, 7470, 7471, 7, 67, 2, 2, 7471, 7472, 7, 85, 2, 2, 7472, 7473, 7, 85, 2, 2, 7473, 7474, 7, 89, 2, 2, 7474, 7475, 7, 81, 2, 2, 7475, 7476, 7, 84, 2, 2, 7476, 7477, 7, 70, 2, 2, 7477, 7478, 7, 97, 2, 2, 7478, 7479, 7, 67, 2, 2, 7479, 7480, 7, 70, 2, 2, 7480, 7481, 7, 79, 2, 2, 7481, 7482, 7, 75, 2, 2, 7482, 7483, 7, 80, 2, 2, 7483, 1228, 3, 2, 2, 2, 7484, 7485, 7, 67, 2, 2, 7485, 7486, 7, 87, 2, 2, 7486, 7487, 7, 70, 2, 2, 7487, 7488, 7, 75, 2, 2, 7488, 7489, 7, 86, 2, 2, 7489, 7490, 7, 97, 2, 2, 7490, 7491, 7, 67, 2, 2, 7491, 7492, 7, 70, 2, 2, 7492, 7493, 7, 79, 2, 2, 7493, 7494, 7, 75, 2, 2, 7494, 7495, 7, 80, 2, 2, 7495, 1230, 3, 2, 2, 2, 7496, 7497, 7, 68, 2, 2, 7497, 7498, 7, 67, 2, 2, 7498, 7499, 7, 69, 2, 2, 7499, 7500, 7, 77, 2, 2, 7500, 7501, 7, 87, 2, 2, 7501, 7502, 7, 82, 2, 2, 7502, 7503, 7, 97, 2, 2, 7503, 7504, 7, 67, 2, 2, 7504, 7505, 7, 70, 2, 2, 7505, 7506, 7, 79, 2, 2, 7506, 7507, 7, 75, 2, 2, 7507, 7508, 7, 80, 2, 2, 7508, 1232, 3, 2, 2, 2, 7509, 7510, 7, 68, 2, 2, 7510, 7511, 7, 75, 2, 2, 7511, 7512, 7, 80, 2, 2, 7512, 7513, 7, 78, 2, 2, 7513, 7514, 7, 81, 2, 2, 7514, 7515, 7, 73, 2, 2, 7515, 7516, 7, 97, 2, 2, 7516, 7517, 7, 67, 2, 2, 7517, 7518, 7, 70, 2, 2, 7518, 7519, 7, 79, 2, 2, 7519, 7520, 7, 75, 2, 2, 7520, 7521, 7, 80, 2, 2, 7521, 1234, 3, 2, 2, 2, 7522, 7523, 7, 68, 2, 2, 7523, 7524, 7, 75, 2, 2, 7524, 7525, 7, 80, 2, 2, 7525, 7526, 7, 78, 2, 2, 7526, 7527, 7, 81, 2, 2, 7527, 7528, 7, 73, 2, 2, 7528, 7529, 7, 97, 2, 2, 7529, 7530, 7, 71, 2, 2, 7530, 7531, 7, 80, 2, 2, 7531, 7532, 7, 69, 2, 2, 7532, 7533, 7, 84, 2, 2, 7533, 7534, 7, 91, 2, 2, 7534, 7535, 7, 82, 2, 2, 7535, 7536, 7, 86, 2, 2, 7536, 7537, 7, 75, 2, 2, 7537, 7538, 7, 81, 2, 2, 7538, 7539, 7, 80, 2, 2, 7539, 7540, 7, 97, 2, 2, 7540, 7541, 7, 67, 2, 2, 7541, 7542, 7, 70, 2, 2, 7542, 7543, 7, 79, 2, 2, 7543, 7544, 7, 75, 2, 2, 7544, 7545, 7, 80, 2, 2, 7545, 1236, 3, 2, 2, 2, 7546, 7547, 7, 69, 2, 2, 7547, 7548, 7, 78, 2, 2, 7548, 7549, 7, 81, 2, 2, 7549, 7550, 7, 80, 2, 2, 7550, 7551, 7, 71, 2, 2, 7551, 7552, 7, 97, 2, 2, 7552, 7553, 7, 67, 2, 2, 7553, 7554, 7, 70, 2, 2, 7554, 7555, 7, 79, 2, 2, 7555, 7556, 7, 75, 2, 2, 7556, 7557, 7, 80, 2, 2, 7557, 1238, 3, 2, 2, 2, 7558, 7559, 7, 69, 2, 2, 7559, 7560, 7, 81, 2, 2, 7560, 7561, 7, 80, 2, 2, 7561, 7562, 7, 80, 2, 2, 7562, 7563, 7, 71, 2, 2, 7563, 7564, 7, 69, 2, 2, 7564, 7565, 7, 86, 2, 2, 7565, 7566, 7, 75, 2, 2, 7566, 7567, 7, 81, 2, 2, 7567, 7568, 7, 80, 2, 2, 7568, 7569, 7, 97, 2, 2, 7569, 7570, 7, 67, 2, 2, 7570, 7571, 7, 70, 2, 2, 7571, 7572, 7, 79, 2, 2, 7572, 7573, 7, 75, 2, 2, 7573, 7574, 7, 80, 2, 2, 7574, 1240, 3, 2, 2, 2, 7575, 7576, 7, 71, 2, 2, 7576, 7577, 7, 80, 2, 2, 7577, 7578, 7, 69, 2, 2, 7578, 7579, 7, 84, 2, 2, 7579, 7580, 7, 91, 2, 2, 7580, 7581, 7, 82, 2, 2, 7581, 7582, 7, 86, 2, 2, 7582, 7583, 7, 75, 2, 2, 7583, 7584, 7, 81, 2, 2, 7584, 7585, 7, 80, 2, 2, 7585, 7586, 7, 97, 2, 2, 7586, 7587, 7, 77, 2, 2, 7587, 7588, 7, 71, 2, 2, 7588, 7589, 7, 91, 2, 2, 7589, 7590, 7, 97, 2, 2, 7590, 7591, 7, 67, 2, 2, 7591, 7592, 7, 70, 2, 2, 7592, 7593, 7, 79, 2, 2, 7593, 7594, 7, 75, 2, 2, 7594, 7595, 7, 80, 2, 2, 7595, 1242, 3, 2, 2, 2, 7596, 7597, 7, 72, 2, 2, 7597, 7598, 7, 75, 2, 2, 7598, 7599, 7, 84, 2, 2, 7599, 7600, 7, 71, 2, 2, 7600, 7601, 7, 89, 2, 2, 7601, 7602, 7, 67, 2, 2, 7602, 7603, 7, 78, 2, 2, 7603, 7604, 7, 78, 2, 2, 7604, 7605, 7, 97, 2, 2, 7605, 7606, 7, 67, 2, 2, 7606, 7607, 7, 70, 2, 2, 7607, 7608, 7, 79, 2, 2, 7608, 7609, 7, 75, 2, 2, 7609, 7610, 7, 80, 2, 2, 7610, 1244, 3, 2, 2, 2, 7611, 7612, 7, 72, 2, 2, 7612, 7613, 7, 75, 2, 2, 7613, 7614, 7, 84, 2, 2, 7614, 7615, 7, 71, 2, 2, 7615, 7616, 7, 89, 2, 2, 7616, 7617, 7, 67, 2, 2, 7617, 7618, 7, 78, 2, 2, 7618, 7619, 7, 78, 2, 2, 7619, 7620, 7, 97, 2, 2, 7620, 7621, 7, 87, 2, 2, 7621, 7622, 7, 85, 2, 2, 7622, 7623, 7, 71, 2, 2, 7623, 7624, 7, 84, 2, 2, 7624, 1246, 3, 2, 2, 2, 7625, 7626, 7, 73, 2, 2, 7626, 7627, 7, 84, 2, 2, 7627, 7628, 7, 81, 2, 2, 7628, 7629, 7, 87, 2, 2, 7629, 7630, 7, 82, 2, 2, 7630, 7631, 7, 97, 2, 2, 7631, 7632, 7, 84, 2, 2, 7632, 7633, 7, 71, 2, 2, 7633, 7634, 7, 82, 2, 2, 7634, 7635, 7, 78, 2, 2, 7635, 7636, 7, 75, 2, 2, 7636, 7637, 7, 69, 2, 2, 7637, 7638, 7, 67, 2, 2, 7638, 7639, 7, 86, 2, 2, 7639, 7640, 7, 75, 2, 2, 7640, 7641, 7, 81, 2, 2, 7641, 7642, 7, 80, 2, 2, 7642, 7643, 7, 97, 2, 2, 7643, 7644, 7, 67, 2, 2, 7644, 7645, 7, 70, 2, 2, 7645, 7646, 7, 79, 2, 2, 7646, 7647, 7, 75, 2, 2, 7647, 7648, 7, 80, 2, 2, 7648, 1248, 3, 2, 2, 2, 7649, 7650, 7, 75, 2, 2, 7650, 7651, 7, 80, 2, 2, 7651, 7652, 7, 80, 2, 2, 7652, 7653, 7, 81, 2, 2, 7653, 7654, 7, 70, 2, 2, 7654, 7655, 7, 68, 2, 2, 7655, 7656, 7, 97, 2, 2, 7656, 7657, 7, 84, 2, 2, 7657, 7658, 7, 71, 2, 2, 7658, 7659, 7, 70, 2, 2, 7659, 7660, 7, 81, 2, 2, 7660, 7661, 7, 97, 2, 2, 7661, 7662, 7, 78, 2, 2, 7662, 7663, 7, 81, 2, 2, 7663, 7664, 7, 73, 2, 2, 7664, 7665, 7, 97, 2, 2, 7665, 7666, 7, 67, 2, 2, 7666, 7667, 7, 84, 2, 2, 7667, 7668, 7, 69, 2, 2, 7668, 7669, 7, 74, 2, 2, 7669, 7670, 7, 75, 2, 2, 7670, 7671, 7, 88, 2, 2, 7671, 7672, 7, 71, 2, 2, 7672, 1250, 3, 2, 2, 2, 7673, 7674, 7, 80, 2, 2, 7674, 7675, 7, 70, 2, 2, 7675, 7676, 7, 68, 2, 2, 7676, 7677, 7, 97, 2, 2, 7677, 7678, 7, 85, 2, 2, 7678, 7679, 7, 86, 2, 2, 7679, 7680, 7, 81, 2, 2, 7680, 7681, 7, 84, 2, 2, 7681, 7682, 7, 71, 2, 2, 7682, 7683, 7, 70, 2, 2, 7683, 7684, 7, 97, 2, 2, 7684, 7685, 7, 87, 2, 2, 7685, 7686, 7, 85, 2, 2, 7686, 7687, 7, 71, 2, 2, 7687, 7688, 7, 84, 2, 2, 7688, 1252, 3, 2, 2, 2, 7689, 7690, 7, 82, 2, 2, 7690, 7691, 7, 71, 2, 2, 7691, 7692, 7, 84, 2, 2, 7692, 7693, 7, 85, 2, 2, 7693, 7694, 7, 75, 2, 2, 7694, 7695, 7, 85, 2, 2, 7695, 7696, 7, 86, 2, 2, 7696, 7697, 7, 97, 2, 2, 7697, 7698, 7, 84, 2, 2, 7698, 7699, 7, 81, 2, 2, 7699, 7700, 7, 97, 2, 2, 7700, 7701, 7, 88, 2, 2, 7701, 7702, 7, 67, 2, 2, 7702, 7703, 7, 84, 2, 2, 7703, 7704, 7, 75, 2, 2, 7704, 7705, 7, 67, 2, 2, 7705, 7706, 7, 68, 2, 2, 7706, 7707, 7, 78, 2, 2, 7707, 7708, 7, 71, 2, 2, 7708, 7709, 7, 85, 2, 2, 7709, 7710, 7, 97, 2, 2, 7710, 7711, 7, 67, 2, 2, 7711, 7712, 7, 70, 2, 2, 7712, 7713, 7, 79, 2, 2, 7713, 7714, 7, 75, 2, 2, 7714, 7715, 7, 80, 2, 2, 7715, 1254, 3, 2, 2, 2, 7716, 7717, 7, 84, 2, 2, 7717, 7718, 7, 71, 2, 2, 7718, 7719, 7, 82, 2, 2, 7719, 7720, 7, 78, 2, 2, 7720, 7721, 7, 75, 2, 2, 7721, 7722, 7, 69, 2, 2, 7722, 7723, 7, 67, 2, 2, 7723, 7724, 7, 86, 2, 2, 7724, 7725, 7, 75, 2, 2, 7725, 7726, 7, 81, 2, 2, 7726, 7727, 7, 80, 2, 2, 7727, 7728, 7, 97, 2, 2, 7728, 7729, 7, 67, 2, 2, 7729, 7730, 7, 82, 2, 2, 7730, 7731, 7, 82, 2, 2, 7731, 7732, 7, 78, 2, 2, 7732, 7733, 7, 75, 2, 2, 7733, 7734, 7, 71, 2, 2, 7734, 7735, 7, 84, 2, 2, 7735, 1256, 3, 2, 2, 2, 7736, 7737, 7, 84, 2, 2, 7737, 7738, 7, 71, 2, 2, 7738, 7739, 7, 82, 2, 2, 7739, 7740, 7, 78, 2, 2, 7740, 7741, 7, 75, 2, 2, 7741, 7742, 7, 69, 2, 2, 7742, 7743, 7, 67, 2, 2, 7743, 7744, 7, 86, 2, 2, 7744, 7745, 7, 75, 2, 2, 7745, 7746, 7, 81, 2, 2, 7746, 7747, 7, 80, 2, 2, 7747, 7748, 7, 97, 2, 2, 7748, 7749, 7, 85, 2, 2, 7749, 7750, 7, 78, 2, 2, 7750, 7751, 7, 67, 2, 2, 7751, 7752, 7, 88, 2, 2, 7752, 7753, 7, 71, 2, 2, 7753, 7754, 7, 97, 2, 2, 7754, 7755, 7, 67, 2, 2, 7755, 7756, 7, 70, 2, 2, 7756, 7757, 7, 79, 2, 2, 7757, 7758, 7, 75, 2, 2, 7758, 7759, 7, 80, 2, 2, 7759, 1258, 3, 2, 2, 2, 7760, 7761, 7, 84, 2, 2, 7761, 7762, 7, 71, 2, 2, 7762, 7763, 7, 85, 2, 2, 7763, 7764, 7, 81, 2, 2, 7764, 7765, 7, 87, 2, 2, 7765, 7766, 7, 84, 2, 2, 7766, 7767, 7, 69, 2, 2, 7767, 7768, 7, 71, 2, 2, 7768, 7769, 7, 97, 2, 2, 7769, 7770, 7, 73, 2, 2, 7770, 7771, 7, 84, 2, 2, 7771, 7772, 7, 81, 2, 2, 7772, 7773, 7, 87, 2, 2, 7773, 7774, 7, 82, 2, 2, 7774, 7775, 7, 97, 2, 2, 7775, 7776, 7, 67, 2, 2, 7776, 7777, 7, 70, 2, 2, 7777, 7778, 7, 79, 2, 2, 7778, 7779, 7, 75, 2, 2, 7779, 7780, 7, 80, 2, 2, 7780, 1260, 3, 2, 2, 2, 7781, 7782, 7, 84, 2, 2, 7782, 7783, 7, 71, 2, 2, 7783, 7784, 7, 85, 2, 2, 7784, 7785, 7, 81, 2, 2, 7785, 7786, 7, 87, 2, 2, 7786, 7787, 7, 84, 2, 2, 7787, 7788, 7, 69, 2, 2, 7788, 7789, 7, 71, 2, 2, 7789, 7790, 7, 97, 2, 2, 7790, 7791, 7, 73, 2, 2, 7791, 7792, 7, 84, 2, 2, 7792, 7793, 7, 81, 2, 2, 7793, 7794, 7, 87, 2, 2, 7794, 7795, 7, 82, 2, 2, 7795, 7796, 7, 97, 2, 2, 7796, 7797, 7, 87, 2, 2, 7797, 7798, 7, 85, 2, 2, 7798, 7799, 7, 71, 2, 2, 7799, 7800, 7, 84, 2, 2, 7800, 1262, 3, 2, 2, 2, 7801, 7802, 7, 84, 2, 2, 7802, 7803, 7, 81, 2, 2, 7803, 7804, 7, 78, 2, 2, 7804, 7805, 7, 71, 2, 2, 7805, 7806, 7, 97, 2, 2, 7806, 7807, 7, 67, 2, 2, 7807, 7808, 7, 70, 2, 2, 7808, 7809, 7, 79, 2, 2, 7809, 7810, 7, 75, 2, 2, 7810, 7811, 7, 80, 2, 2, 7811, 1264, 3, 2, 2, 2, 7812, 7814, 5, 2069, 1035, 2, 7813, 7812, 3, 2, 2, 2, 7813, 7814, 3, 2, 2, 2, 7814, 7815, 3, 2, 2, 2, 7815, 7816, 7, 85, 2, 2, 7816, 7817, 7, 71, 2, 2, 7817, 7818, 7, 85, 2, 2, 7818, 7819, 7, 85, 2, 2, 7819, 7820, 7, 75, 2, 2, 7820, 7821, 7, 81, 2, 2, 7821, 7822, 7, 80, 2, 2, 7822, 7823, 7, 97, 2, 2, 7823, 7824, 7, 88, 2, 2, 7824, 7825, 7, 67, 2, 2, 7825, 7826, 7, 84, 2, 2, 7826, 7827, 7, 75, 2, 2, 7827, 7828, 7, 67, 2, 2, 7828, 7829, 7, 68, 2, 2, 7829, 7830, 7, 78, 2, 2, 7830, 7831, 7, 71, 2, 2, 7831, 7832, 7, 85, 2, 2, 7832, 7833, 7, 97, 2, 2, 7833, 7834, 7, 67, 2, 2, 7834, 7835, 7, 70, 2, 2, 7835, 7836, 7, 79, 2, 2, 7836, 7837, 7, 75, 2, 2, 7837, 7838, 7, 80, 2, 2, 7838, 7840, 3, 2, 2, 2, 7839, 7841, 5, 2069, 1035, 2, 7840, 7839, 3, 2, 2, 2, 7840, 7841, 3, 2, 2, 2, 7841, 1266, 3, 2, 2, 2, 7842, 7843, 7, 85, 2, 2, 7843, 7844, 7, 71, 2, 2, 7844, 7845, 7, 86, 2, 2, 7845, 7846, 7, 97, 2, 2, 7846, 7847, 7, 87, 2, 2, 7847, 7848, 7, 85, 2, 2, 7848, 7849, 7, 71, 2, 2, 7849, 7850, 7, 84, 2, 2, 7850, 7851, 7, 97, 2, 2, 7851, 7852, 7, 75, 2, 2, 7852, 7853, 7, 70, 2, 2, 7853, 1268, 3, 2, 2, 2, 7854, 7855, 7, 85, 2, 2, 7855, 7856, 7, 74, 2, 2, 7856, 7857, 7, 81, 2, 2, 7857, 7858, 7, 89, 2, 2, 7858, 7859, 7, 97, 2, 2, 7859, 7860, 7, 84, 2, 2, 7860, 7861, 7, 81, 2, 2, 7861, 7862, 7, 87, 2, 2, 7862, 7863, 7, 86, 2, 2, 7863, 7864, 7, 75, 2, 2, 7864, 7865, 7, 80, 2, 2, 7865, 7866, 7, 71, 2, 2, 7866, 1270, 3, 2, 2, 2, 7867, 7868, 7, 85, 2, 2, 7868, 7869, 7, 91, 2, 2, 7869, 7870, 7, 85, 2, 2, 7870, 7871, 7, 86, 2, 2, 7871, 7872, 7, 71, 2, 2, 7872, 7873, 7, 79, 2, 2, 7873, 7874, 7, 97, 2, 2, 7874, 7875, 7, 88, 2, 2, 7875, 7876, 7, 67, 2, 2, 7876, 7877, 7, 84, 2, 2, 7877, 7878, 7, 75, 2, 2, 7878, 7879, 7, 67, 2, 2, 7879, 7880, 7, 68, 2, 2, 7880, 7881, 7, 78, 2, 2, 7881, 7882, 7, 71, 2, 2, 7882, 7883, 7, 85, 2, 2, 7883, 7884, 7, 97, 2, 2, 7884, 7885, 7, 67, 2, 2, 7885, 7886, 7, 70, 2, 2, 7886, 7887, 7, 79, 2, 2, 7887, 7888, 7, 75, 2, 2, 7888, 7889, 7, 80, 2, 2, 7889, 1272, 3, 2, 2, 2, 7890, 7891, 7, 86, 2, 2, 7891, 7892, 7, 67, 2, 2, 7892, 7893, 7, 68, 2, 2, 7893, 7894, 7, 78, 2, 2, 7894, 7895, 7, 71, 2, 2, 7895, 7896, 7, 97, 2, 2, 7896, 7897, 7, 71, 2, 2, 7897, 7898, 7, 80, 2, 2, 7898, 7899, 7, 69, 2, 2, 7899, 7900, 7, 84, 2, 2, 7900, 7901, 7, 91, 2, 2, 7901, 7902, 7, 82, 2, 2, 7902, 7903, 7, 86, 2, 2, 7903, 7904, 7, 75, 2, 2, 7904, 7905, 7, 81, 2, 2, 7905, 7906, 7, 80, 2, 2, 7906, 7907, 7, 97, 2, 2, 7907, 7908, 7, 67, 2, 2, 7908, 7909, 7, 70, 2, 2, 7909, 7910, 7, 79, 2, 2, 7910, 7911, 7, 75, 2, 2, 7911, 7912, 7, 80, 2, 2, 7912, 1274, 3, 2, 2, 2, 7913, 7914, 7, 88, 2, 2, 7914, 7915, 7, 71, 2, 2, 7915, 7916, 7, 84, 2, 2, 7916, 7917, 7, 85, 2, 2, 7917, 7918, 7, 75, 2, 2, 7918, 7919, 7, 81, 2, 2, 7919, 7920, 7, 80, 2, 2, 7920, 7921, 7, 97, 2, 2, 7921, 7922, 7, 86, 2, 2, 7922, 7923, 7, 81, 2, 2, 7923, 7924, 7, 77, 2, 2, 7924, 7925, 7, 71, 2, 2, 7925, 7926, 7, 80, 2, 2, 7926, 7927, 7, 97, 2, 2, 7927, 7928, 7, 67, 2, 2, 7928, 7929, 7, 70, 2, 2, 7929, 7930, 7, 79, 2, 2, 7930, 7931, 7, 75, 2, 2, 7931, 7932, 7, 80, 2, 2, 7932, 1276, 3, 2, 2, 2, 7933, 7934, 7, 90, 2, 2, 7934, 7935, 7, 67, 2, 2, 7935, 7936, 7, 97, 2, 2, 7936, 7937, 7, 84, 2, 2, 7937, 7938, 7, 71, 2, 2, 7938, 7939, 7, 69, 2, 2, 7939, 7940, 7, 81, 2, 2, 7940, 7941, 7, 88, 2, 2, 7941, 7942, 7, 71, 2, 2, 7942, 7943, 7, 84, 2, 2, 7943, 7944, 7, 97, 2, 2, 7944, 7945, 7, 67, 2, 2, 7945, 7946, 7, 70, 2, 2, 7946, 7947, 7, 79, 2, 2, 7947, 7948, 7, 75, 2, 2, 7948, 7949, 7, 80, 2, 2, 7949, 1278, 3, 2, 2, 2, 7950, 7951, 7, 67, 2, 2, 7951, 7952, 7, 84, 2, 2, 7952, 7953, 7, 79, 2, 2, 7953, 7954, 7, 85, 2, 2, 7954, 7955, 7, 69, 2, 2, 7955, 7956, 7, 75, 2, 2, 7956, 7957, 7, 75, 2, 2, 7957, 7958, 7, 58, 2, 2, 7958, 1280, 3, 2, 2, 2, 7959, 7960, 7, 67, 2, 2, 7960, 7961, 7, 85, 2, 2, 7961, 7962, 7, 69, 2, 2, 7962, 7963, 7, 75, 2, 2, 7963, 7964, 7, 75, 2, 2, 7964, 1282, 3, 2, 2, 2, 7965, 7966, 7, 68, 2, 2, 7966, 7967, 7, 75, 2, 2, 7967, 7968, 7, 73, 2, 2, 7968, 7969, 7, 55, 2, 2, 7969, 1284, 3, 2, 2, 2, 7970, 7971, 7, 69, 2, 2, 7971, 7972, 7, 82, 2, 2, 7972, 7973, 7, 51, 2, 2, 7973, 7974, 7, 52, 2, 2, 7974, 7975, 7, 55, 2, 2, 7975, 7976, 7, 50, 2, 2, 7976, 1286, 3, 2, 2, 2, 7977, 7978, 7, 69, 2, 2, 7978, 7979, 7, 82, 2, 2, 7979, 7980, 7, 51, 2, 2, 7980, 7981, 7, 52, 2, 2, 7981, 7982, 7, 55, 2, 2, 7982, 7983, 7, 51, 2, 2, 7983, 1288, 3, 2, 2, 2, 7984, 7985, 7, 69, 2, 2, 7985, 7986, 7, 82, 2, 2, 7986, 7987, 7, 51, 2, 2, 7987, 7988, 7, 52, 2, 2, 7988, 7989, 7, 55, 2, 2, 7989, 7990, 7, 56, 2, 2, 7990, 1290, 3, 2, 2, 2, 7991, 7992, 7, 69, 2, 2, 7992, 7993, 7, 82, 2, 2, 7993, 7994, 7, 51, 2, 2, 7994, 7995, 7, 52, 2, 2, 7995, 7996, 7, 55, 2, 2, 7996, 7997, 7, 57, 2, 2, 7997, 1292, 3, 2, 2, 2, 7998, 7999, 7, 69, 2, 2, 7999, 8000, 7, 82, 2, 2, 8000, 8001, 7, 58, 2, 2, 8001, 8002, 7, 55, 2, 2, 8002, 8003, 7, 50, 2, 2, 8003, 1294, 3, 2, 2, 2, 8004, 8005, 7, 69, 2, 2, 8005, 8006, 7, 82, 2, 2, 8006, 8007, 7, 58, 2, 2, 8007, 8008, 7, 55, 2, 2, 8008, 8009, 7, 52, 2, 2, 8009, 1296, 3, 2, 2, 2, 8010, 8011, 7, 69, 2, 2, 8011, 8012, 7, 82, 2, 2, 8012, 8013, 7, 58, 2, 2, 8013, 8014, 7, 56, 2, 2, 8014, 8015, 7, 56, 2, 2, 8015, 1298, 3, 2, 2, 2, 8016, 8017, 7, 69, 2, 2, 8017, 8018, 7, 82, 2, 2, 8018, 8019, 7, 59, 2, 2, 8019, 8020, 7, 53, 2, 2, 8020, 8021, 7, 52, 2, 2, 8021, 1300, 3, 2, 2, 2, 8022, 8023, 7, 70, 2, 2, 8023, 8024, 7, 71, 2, 2, 8024, 8025, 7, 69, 2, 2, 8025, 8026, 7, 58, 2, 2, 8026, 1302, 3, 2, 2, 2, 8027, 8028, 7, 71, 2, 2, 8028, 8029, 7, 87, 2, 2, 8029, 8030, 7, 69, 2, 2, 8030, 8031, 7, 76, 2, 2, 8031, 8032, 7, 82, 2, 2, 8032, 8033, 7, 79, 2, 2, 8033, 8034, 7, 85, 2, 2, 8034, 1304, 3, 2, 2, 2, 8035, 8036, 7, 71, 2, 2, 8036, 8037, 7, 87, 2, 2, 8037, 8038, 7, 69, 2, 2, 8038, 8039, 7, 77, 2, 2, 8039, 8040, 7, 84, 2, 2, 8040, 1306, 3, 2, 2, 2, 8041, 8042, 7, 73, 2, 2, 8042, 8043, 7, 68, 2, 2, 8043, 8044, 7, 52, 2, 2, 8044, 8045, 7, 53, 2, 2, 8045, 8046, 7, 51, 2, 2, 8046, 8047, 7, 52, 2, 2, 8047, 1308, 3, 2, 2, 2, 8048, 8049, 7, 73, 2, 2, 8049, 8050, 7, 68, 2, 2, 8050, 8051, 7, 77, 2, 2, 8051, 1310, 3, 2, 2, 2, 8052, 8053, 7, 73, 2, 2, 8053, 8054, 7, 71, 2, 2, 8054, 8055, 7, 81, 2, 2, 8055, 8056, 7, 85, 2, 2, 8056, 8057, 7, 86, 2, 2, 8057, 8058, 7, 70, 2, 2, 8058, 8059, 7, 58, 2, 2, 8059, 1312, 3, 2, 2, 2, 8060, 8061, 7, 73, 2, 2, 8061, 8062, 7, 84, 2, 2, 8062, 8063, 7, 71, 2, 2, 8063, 8064, 7, 71, 2, 2, 8064, 8065, 7, 77, 2, 2, 8065, 1314, 3, 2, 2, 2, 8066, 8067, 7, 74, 2, 2, 8067, 8068, 7, 71, 2, 2, 8068, 8069, 7, 68, 2, 2, 8069, 8070, 7, 84, 2, 2, 8070, 8071, 7, 71, 2, 2, 8071, 8072, 7, 89, 2, 2, 8072, 1316, 3, 2, 2, 2, 8073, 8074, 7, 74, 2, 2, 8074, 8075, 7, 82, 2, 2, 8075, 8076, 7, 58, 2, 2, 8076, 1318, 3, 2, 2, 2, 8077, 8078, 7, 77, 2, 2, 8078, 8079, 7, 71, 2, 2, 8079, 8080, 7, 91, 2, 2, 8080, 8081, 7, 68, 2, 2, 8081, 8082, 7, 69, 2, 2, 8082, 8083, 7, 85, 2, 2, 8083, 8084, 7, 52, 2, 2, 8084, 1320, 3, 2, 2, 2, 8085, 8086, 7, 77, 2, 2, 8086, 8087, 7, 81, 2, 2, 8087, 8088, 7, 75, 2, 2, 8088, 8089, 7, 58, 2, 2, 8089, 8090, 7, 84, 2, 2, 8090, 1322, 3, 2, 2, 2, 8091, 8092, 7, 77, 2, 2, 8092, 8093, 7, 81, 2, 2, 8093, 8094, 7, 75, 2, 2, 8094, 8095, 7, 58, 2, 2, 8095, 8096, 7, 87, 2, 2, 8096, 1324, 3, 2, 2, 2, 8097, 8098, 7, 78, 2, 2, 8098, 8099, 7, 67, 2, 2, 8099, 8100, 7, 86, 2, 2, 8100, 8101, 7, 75, 2, 2, 8101, 8102, 7, 80, 2, 2, 8102, 8103, 7, 51, 2, 2, 8103, 1326, 3, 2, 2, 2, 8104, 8105, 7, 78, 2, 2, 8105, 8106, 7, 67, 2, 2, 8106, 8107, 7, 86, 2, 2, 8107, 8108, 7, 75, 2, 2, 8108, 8109, 7, 80, 2, 2, 8109, 8110, 7, 52, 2, 2, 8110, 1328, 3, 2, 2, 2, 8111, 8112, 7, 78, 2, 2, 8112, 8113, 7, 67, 2, 2, 8113, 8114, 7, 86, 2, 2, 8114, 8115, 7, 75, 2, 2, 8115, 8116, 7, 80, 2, 2, 8116, 8117, 7, 55, 2, 2, 8117, 1330, 3, 2, 2, 2, 8118, 8119, 7, 78, 2, 2, 8119, 8120, 7, 67, 2, 2, 8120, 8121, 7, 86, 2, 2, 8121, 8122, 7, 75, 2, 2, 8122, 8123, 7, 80, 2, 2, 8123, 8124, 7, 57, 2, 2, 8124, 1332, 3, 2, 2, 2, 8125, 8126, 7, 79, 2, 2, 8126, 8127, 7, 67, 2, 2, 8127, 8128, 7, 69, 2, 2, 8128, 8129, 7, 69, 2, 2, 8129, 8130, 7, 71, 2, 2, 8130, 1334, 3, 2, 2, 2, 8131, 8132, 7, 79, 2, 2, 8132, 8133, 7, 67, 2, 2, 8133, 8134, 7, 69, 2, 2, 8134, 8135, 7, 84, 2, 2, 8135, 8136, 7, 81, 2, 2, 8136, 8137, 7, 79, 2, 2, 8137, 8138, 7, 67, 2, 2, 8138, 8139, 7, 80, 2, 2, 8139, 1336, 3, 2, 2, 2, 8140, 8141, 7, 85, 2, 2, 8141, 8142, 7, 76, 2, 2, 8142, 8143, 7, 75, 2, 2, 8143, 8144, 7, 85, 2, 2, 8144, 1338, 3, 2, 2, 2, 8145, 8146, 7, 85, 2, 2, 8146, 8147, 7, 89, 2, 2, 8147, 8148, 7, 71, 2, 2, 8148, 8149, 7, 57, 2, 2, 8149, 1340, 3, 2, 2, 2, 8150, 8151, 7, 86, 2, 2, 8151, 8152, 7, 75, 2, 2, 8152, 8153, 7, 85, 2, 2, 8153, 8154, 7, 56, 2, 2, 8154, 8155, 7, 52, 2, 2, 8155, 8156, 7, 50, 2, 2, 8156, 1342, 3, 2, 2, 2, 8157, 8158, 7, 87, 2, 2, 8158, 8159, 7, 69, 2, 2, 8159, 8160, 7, 85, 2, 2, 8160, 8161, 7, 52, 2, 2, 8161, 1344, 3, 2, 2, 2, 8162, 8163, 7, 87, 2, 2, 8163, 8164, 7, 76, 2, 2, 8164, 8165, 7, 75, 2, 2, 8165, 8166, 7, 85, 2, 2, 8166, 1346, 3, 2, 2, 2, 8167, 8168, 7, 87, 2, 2, 8168, 8169, 7, 86, 2, 2, 8169, 8170, 7, 72, 2, 2, 8170, 8171, 7, 51, 2, 2, 8171, 8172, 7, 56, 2, 2, 8172, 1348, 3, 2, 2, 2, 8173, 8174, 7, 87, 2, 2, 8174, 8175, 7, 86, 2, 2, 8175, 8176, 7, 72, 2, 2, 8176, 8177, 7, 51, 2, 2, 8177, 8178, 7, 56, 2, 2, 8178, 8179, 7, 78, 2, 2, 8179, 8180, 7, 71, 2, 2, 8180, 1350, 3, 2, 2, 2, 8181, 8182, 7, 87, 2, 2, 8182, 8183, 7, 86, 2, 2, 8183, 8184, 7, 72, 2, 2, 8184, 8185, 7, 53, 2, 2, 8185, 8186, 7, 52, 2, 2, 8186, 1352, 3, 2, 2, 2, 8187, 8188, 7, 87, 2, 2, 8188, 8189, 7, 86, 2, 2, 8189, 8190, 7, 72, 2, 2, 8190, 8191, 7, 58, 2, 2, 8191, 1354, 3, 2, 2, 2, 8192, 8193, 7, 87, 2, 2, 8193, 8194, 7, 86, 2, 2, 8194, 8195, 7, 72, 2, 2, 8195, 8196, 7, 58, 2, 2, 8196, 8197, 7, 79, 2, 2, 8197, 8198, 7, 68, 2, 2, 8198, 8199, 7, 53, 2, 2, 8199, 1356, 3, 2, 2, 2, 8200, 8201, 7, 87, 2, 2, 8201, 8202, 7, 86, 2, 2, 8202, 8203, 7, 72, 2, 2, 8203, 8204, 7, 58, 2, 2, 8204, 8205, 7, 79, 2, 2, 8205, 8206, 7, 68, 2, 2, 8206, 8207, 7, 54, 2, 2, 8207, 1358, 3, 2, 2, 2, 8208, 8209, 7, 67, 2, 2, 8209, 8210, 7, 84, 2, 2, 8210, 8211, 7, 69, 2, 2, 8211, 8212, 7, 74, 2, 2, 8212, 8213, 7, 75, 2, 2, 8213, 8214, 7, 88, 2, 2, 8214, 8215, 7, 71, 2, 2, 8215, 1360, 3, 2, 2, 2, 8216, 8217, 7, 68, 2, 2, 8217, 8218, 7, 78, 2, 2, 8218, 8219, 7, 67, 2, 2, 8219, 8220, 7, 69, 2, 2, 8220, 8221, 7, 77, 2, 2, 8221, 8222, 7, 74, 2, 2, 8222, 8223, 7, 81, 2, 2, 8223, 8224, 7, 78, 2, 2, 8224, 8225, 7, 71, 2, 2, 8225, 1362, 3, 2, 2, 2, 8226, 8227, 7, 69, 2, 2, 8227, 8228, 7, 85, 2, 2, 8228, 8229, 7, 88, 2, 2, 8229, 1364, 3, 2, 2, 2, 8230, 8231, 7, 72, 2, 2, 8231, 8232, 7, 71, 2, 2, 8232, 8233, 7, 70, 2, 2, 8233, 8234, 7, 71, 2, 2, 8234, 8235, 7, 84, 2, 2, 8235, 8236, 7, 67, 2, 2, 8236, 8237, 7, 86, 2, 2, 8237, 8238, 7, 71, 2, 2, 8238, 8239, 7, 70, 2, 2, 8239, 1366, 3, 2, 2, 2, 8240, 8241, 7, 75, 2, 2, 8241, 8242, 7, 80, 2, 2, 8242, 8243, 7, 80, 2, 2, 8243, 8244, 7, 81, 2, 2, 8244, 8245, 7, 70, 2, 2, 8245, 8246, 7, 68, 2, 2, 8246, 1368, 3, 2, 2, 2, 8247, 8248, 7, 79, 2, 2, 8248, 8249, 7, 71, 2, 2, 8249, 8250, 7, 79, 2, 2, 8250, 8251, 7, 81, 2, 2, 8251, 8252, 7, 84, 2, 2, 8252, 8253, 7, 91, 2, 2, 8253, 1370, 3, 2, 2, 2, 8254, 8255, 7, 79, 2, 2, 8255, 8256, 7, 84, 2, 2, 8256, 8257, 7, 73, 2, 2, 8257, 8258, 7, 97, 2, 2, 8258, 8259, 7, 79, 2, 2, 8259, 8260, 7, 91, 2, 2, 8260, 8261, 7, 75, 2, 2, 8261, 8262, 7, 85, 2, 2, 8262, 8263, 7, 67, 2, 2, 8263, 8264, 7, 79, 2, 2, 8264, 1372, 3, 2, 2, 2, 8265, 8266, 7, 79, 2, 2, 8266, 8267, 7, 91, 2, 2, 8267, 8268, 7, 75, 2, 2, 8268, 8269, 7, 85, 2, 2, 8269, 8270, 7, 67, 2, 2, 8270, 8271, 7, 79, 2, 2, 8271, 1374, 3, 2, 2, 2, 8272, 8273, 7, 80, 2, 2, 8273, 8274, 7, 70, 2, 2, 8274, 8275, 7, 68, 2, 2, 8275, 1376, 3, 2, 2, 2, 8276, 8277, 7, 80, 2, 2, 8277, 8278, 7, 70, 2, 2, 8278, 8279, 7, 68, 2, 2, 8279, 8280, 7, 69, 2, 2, 8280, 8281, 7, 78, 2, 2, 8281, 8282, 7, 87, 2, 2, 8282, 8283, 7, 85, 2, 2, 8283, 8284, 7, 86, 2, 2, 8284, 8285, 7, 71, 2, 2, 8285, 8286, 7, 84, 2, 2, 8286, 1378, 3, 2, 2, 2, 8287, 8288, 7, 82, 2, 2, 8288, 8289, 7, 71, 2, 2, 8289, 8290, 7, 84, 2, 2, 8290, 8291, 7, 72, 2, 2, 8291, 8292, 7, 81, 2, 2, 8292, 8293, 7, 84, 2, 2, 8293, 8294, 7, 79, 2, 2, 8294, 8295, 7, 67, 2, 2, 8295, 8296, 7, 80, 2, 2, 8296, 8297, 7, 69, 2, 2, 8297, 8298, 7, 71, 2, 2, 8298, 8299, 7, 97, 2, 2, 8299, 8300, 7, 85, 2, 2, 8300, 8301, 7, 69, 2, 2, 8301, 8302, 7, 74, 2, 2, 8302, 8303, 7, 71, 2, 2, 8303, 8304, 7, 79, 2, 2, 8304, 8305, 7, 67, 2, 2, 8305, 1380, 3, 2, 2, 2, 8306, 8307, 7, 86, 2, 2, 8307, 8308, 7, 81, 2, 2, 8308, 8309, 7, 77, 2, 2, 8309, 8310, 7, 87, 2, 2, 8310, 8311, 7, 70, 2, 2, 8311, 8312, 7, 68, 2, 2, 8312, 1382, 3, 2, 2, 2, 8313, 8314, 7, 84, 2, 2, 8314, 8315, 7, 71, 2, 2, 8315, 8316, 7, 82, 2, 2, 8316, 8317, 7, 71, 2, 2, 8317, 8318, 7, 67, 2, 2, 8318, 8319, 7, 86, 2, 2, 8319, 8320, 7, 67, 2, 2, 8320, 8321, 7, 68, 2, 2, 8321, 8322, 7, 78, 2, 2, 8322, 8323, 7, 71, 2, 2, 8323, 1384, 3, 2, 2, 2, 8324, 8325, 7, 69, 2, 2, 8325, 8326, 7, 81, 2, 2, 8326, 8327, 7, 79, 2, 2, 8327, 8328, 7, 79, 2, 2, 8328, 8329, 7, 75, 2, 2, 8329, 8330, 7, 86, 2, 2, 8330, 8331, 7, 86, 2, 2, 8331, 8332, 7, 71, 2, 2, 8332, 8333, 7, 70, 2, 2, 8333, 1386, 3, 2, 2, 2, 8334, 8335, 7, 87, 2, 2, 8335, 8336, 7, 80, 2, 2, 8336, 8337, 7, 69, 2, 2, 8337, 8338, 7, 81, 2, 2, 8338, 8339, 7, 79, 2, 2, 8339, 8340, 7, 79, 2, 2, 8340, 8341, 7, 75, 2, 2, 8341, 8342, 7, 86, 2, 2, 8342, 8343, 7, 86, 2, 2, 8343, 8344, 7, 71, 2, 2, 8344, 8345, 7, 70, 2, 2, 8345, 1388, 3, 2, 2, 2, 8346, 8347, 7, 85, 2, 2, 8347, 8348, 7, 71, 2, 2, 8348, 8349, 7, 84, 2, 2, 8349, 8350, 7, 75, 2, 2, 8350, 8351, 7, 67, 2, 2, 8351, 8352, 7, 78, 2, 2, 8352, 8353, 7, 75, 2, 2, 8353, 8354, 7, 92, 2, 2, 8354, 8355, 7, 67, 2, 2, 8355, 8356, 7, 68, 2, 2, 8356, 8357, 7, 78, 2, 2, 8357, 8358, 7, 71, 2, 2, 8358, 1390, 3, 2, 2, 2, 8359, 8360, 7, 73, 2, 2, 8360, 8361, 7, 71, 2, 2, 8361, 8362, 7, 81, 2, 2, 8362, 8363, 7, 79, 2, 2, 8363, 8364, 7, 71, 2, 2, 8364, 8365, 7, 86, 2, 2, 8365, 8366, 7, 84, 2, 2, 8366, 8367, 7, 91, 2, 2, 8367, 8368, 7, 69, 2, 2, 8368, 8369, 7, 81, 2, 2, 8369, 8370, 7, 78, 2, 2, 8370, 8371, 7, 78, 2, 2, 8371, 8372, 7, 71, 2, 2, 8372, 8373, 7, 69, 2, 2, 8373, 8374, 7, 86, 2, 2, 8374, 8375, 7, 75, 2, 2, 8375, 8376, 7, 81, 2, 2, 8376, 8377, 7, 80, 2, 2, 8377, 1392, 3, 2, 2, 2, 8378, 8379, 7, 73, 2, 2, 8379, 8380, 7, 71, 2, 2, 8380, 8381, 7, 81, 2, 2, 8381, 8382, 7, 79, 2, 2, 8382, 8383, 7, 69, 2, 2, 8383, 8384, 7, 81, 2, 2, 8384, 8385, 7, 78, 2, 2, 8385, 8386, 7, 78, 2, 2, 8386, 8387, 7, 71, 2, 2, 8387, 8388, 7, 69, 2, 2, 8388, 8389, 7, 86, 2, 2, 8389, 8390, 7, 75, 2, 2, 8390, 8391, 7, 81, 2, 2, 8391, 8392, 7, 80, 2, 2, 8392, 1394, 3, 2, 2, 2, 8393, 8394, 7, 73, 2, 2, 8394, 8395, 7, 71, 2, 2, 8395, 8396, 7, 81, 2, 2, 8396, 8397, 7, 79, 2, 2, 8397, 8398, 7, 71, 2, 2, 8398, 8399, 7, 86, 2, 2, 8399, 8400, 7, 84, 2, 2, 8400, 8401, 7, 91, 2, 2, 8401, 1396, 3, 2, 2, 2, 8402, 8403, 7, 78, 2, 2, 8403, 8404, 7, 75, 2, 2, 8404, 8405, 7, 80, 2, 2, 8405, 8406, 7, 71, 2, 2, 8406, 8407, 7, 85, 2, 2, 8407, 8408, 7, 86, 2, 2, 8408, 8409, 7, 84, 2, 2, 8409, 8410, 7, 75, 2, 2, 8410, 8411, 7, 80, 2, 2, 8411, 8412, 7, 73, 2, 2, 8412, 1398, 3, 2, 2, 2, 8413, 8414, 7, 79, 2, 2, 8414, 8415, 7, 87, 2, 2, 8415, 8416, 7, 78, 2, 2, 8416, 8417, 7, 86, 2, 2, 8417, 8418, 7, 75, 2, 2, 8418, 8419, 7, 78, 2, 2, 8419, 8420, 7, 75, 2, 2, 8420, 8421, 7, 80, 2, 2, 8421, 8422, 7, 71, 2, 2, 8422, 8423, 7, 85, 2, 2, 8423, 8424, 7, 86, 2, 2, 8424, 8425, 7, 84, 2, 2, 8425, 8426, 7, 75, 2, 2, 8426, 8427, 7, 80, 2, 2, 8427, 8428, 7, 73, 2, 2, 8428, 1400, 3, 2, 2, 2, 8429, 8430, 7, 79, 2, 2, 8430, 8431, 7, 87, 2, 2, 8431, 8432, 7, 78, 2, 2, 8432, 8433, 7, 86, 2, 2, 8433, 8434, 7, 75, 2, 2, 8434, 8435, 7, 82, 2, 2, 8435, 8436, 7, 81, 2, 2, 8436, 8437, 7, 75, 2, 2, 8437, 8438, 7, 80, 2, 2, 8438, 8439, 7, 86, 2, 2, 8439, 1402, 3, 2, 2, 2, 8440, 8441, 7, 79, 2, 2, 8441, 8442, 7, 87, 2, 2, 8442, 8443, 7, 78, 2, 2, 8443, 8444, 7, 86, 2, 2, 8444, 8445, 7, 75, 2, 2, 8445, 8446, 7, 82, 2, 2, 8446, 8447, 7, 81, 2, 2, 8447, 8448, 7, 78, 2, 2, 8448, 8449, 7, 91, 2, 2, 8449, 8450, 7, 73, 2, 2, 8450, 8451, 7, 81, 2, 2, 8451, 8452, 7, 80, 2, 2, 8452, 1404, 3, 2, 2, 2, 8453, 8454, 7, 82, 2, 2, 8454, 8455, 7, 81, 2, 2, 8455, 8456, 7, 75, 2, 2, 8456, 8457, 7, 80, 2, 2, 8457, 8458, 7, 86, 2, 2, 8458, 1406, 3, 2, 2, 2, 8459, 8460, 7, 82, 2, 2, 8460, 8461, 7, 81, 2, 2, 8461, 8462, 7, 78, 2, 2, 8462, 8463, 7, 91, 2, 2, 8463, 8464, 7, 73, 2, 2, 8464, 8465, 7, 81, 2, 2, 8465, 8466, 7, 80, 2, 2, 8466, 1408, 3, 2, 2, 2, 8467, 8468, 7, 67, 2, 2, 8468, 8469, 7, 68, 2, 2, 8469, 8470, 7, 85, 2, 2, 8470, 1410, 3, 2, 2, 2, 8471, 8472, 7, 67, 2, 2, 8472, 8473, 7, 69, 2, 2, 8473, 8474, 7, 81, 2, 2, 8474, 8475, 7, 85, 2, 2, 8475, 1412, 3, 2, 2, 2, 8476, 8477, 7, 67, 2, 2, 8477, 8478, 7, 70, 2, 2, 8478, 8479, 7, 70, 2, 2, 8479, 8480, 7, 70, 2, 2, 8480, 8481, 7, 67, 2, 2, 8481, 8482, 7, 86, 2, 2, 8482, 8483, 7, 71, 2, 2, 8483, 1414, 3, 2, 2, 2, 8484, 8485, 7, 67, 2, 2, 8485, 8486, 7, 70, 2, 2, 8486, 8487, 7, 70, 2, 2, 8487, 8488, 7, 86, 2, 2, 8488, 8489, 7, 75, 2, 2, 8489, 8490, 7, 79, 2, 2, 8490, 8491, 7, 71, 2, 2, 8491, 1416, 3, 2, 2, 2, 8492, 8493, 7, 67, 2, 2, 8493, 8494, 7, 71, 2, 2, 8494, 8495, 7, 85, 2, 2, 8495, 8496, 7, 97, 2, 2, 8496, 8497, 7, 70, 2, 2, 8497, 8498, 7, 71, 2, 2, 8498, 8499, 7, 69, 2, 2, 8499, 8500, 7, 84, 2, 2, 8500, 8501, 7, 91, 2, 2, 8501, 8502, 7, 82, 2, 2, 8502, 8503, 7, 86, 2, 2, 8503, 1418, 3, 2, 2, 2, 8504, 8505, 7, 67, 2, 2, 8505, 8506, 7, 71, 2, 2, 8506, 8507, 7, 85, 2, 2, 8507, 8508, 7, 97, 2, 2, 8508, 8509, 7, 71, 2, 2, 8509, 8510, 7, 80, 2, 2, 8510, 8511, 7, 69, 2, 2, 8511, 8512, 7, 84, 2, 2, 8512, 8513, 7, 91, 2, 2, 8513, 8514, 7, 82, 2, 2, 8514, 8515, 7, 86, 2, 2, 8515, 1420, 3, 2, 2, 2, 8516, 8517, 7, 67, 2, 2, 8517, 8518, 7, 84, 2, 2, 8518, 8519, 7, 71, 2, 2, 8519, 8520, 7, 67, 2, 2, 8520, 1422, 3, 2, 2, 2, 8521, 8522, 7, 67, 2, 2, 8522, 8523, 7, 85, 2, 2, 8523, 8524, 7, 68, 2, 2, 8524, 8525, 7, 75, 2, 2, 8525, 8526, 7, 80, 2, 2, 8526, 8527, 7, 67, 2, 2, 8527, 8528, 7, 84, 2, 2, 8528, 8529, 7, 91, 2, 2, 8529, 1424, 3, 2, 2, 2, 8530, 8531, 7, 67, 2, 2, 8531, 8532, 7, 85, 2, 2, 8532, 8533, 7, 75, 2, 2, 8533, 8534, 7, 80, 2, 2, 8534, 1426, 3, 2, 2, 2, 8535, 8536, 7, 67, 2, 2, 8536, 8537, 7, 85, 2, 2, 8537, 8538, 7, 86, 2, 2, 8538, 8539, 7, 71, 2, 2, 8539, 8540, 7, 90, 2, 2, 8540, 8541, 7, 86, 2, 2, 8541, 1428, 3, 2, 2, 2, 8542, 8543, 7, 67, 2, 2, 8543, 8544, 7, 85, 2, 2, 8544, 8545, 7, 89, 2, 2, 8545, 8546, 7, 77, 2, 2, 8546, 8547, 7, 68, 2, 2, 8547, 1430, 3, 2, 2, 2, 8548, 8549, 7, 67, 2, 2, 8549, 8550, 7, 85, 2, 2, 8550, 8551, 7, 89, 2, 2, 8551, 8552, 7, 77, 2, 2, 8552, 8553, 7, 86, 2, 2, 8553, 1432, 3, 2, 2, 2, 8554, 8555, 7, 67, 2, 2, 8555, 8556, 7, 85, 2, 2, 8556, 8557, 7, 91, 2, 2, 8557, 8558, 7, 79, 2, 2, 8558, 8559, 7, 79, 2, 2, 8559, 8560, 7, 71, 2, 2, 8560, 8561, 7, 86, 2, 2, 8561, 8562, 7, 84, 2, 2, 8562, 8563, 7, 75, 2, 2, 8563, 8564, 7, 69, 2, 2, 8564, 8565, 7, 97, 2, 2, 8565, 8566, 7, 70, 2, 2, 8566, 8567, 7, 71, 2, 2, 8567, 8568, 7, 69, 2, 2, 8568, 8569, 7, 84, 2, 2, 8569, 8570, 7, 91, 2, 2, 8570, 8571, 7, 82, 2, 2, 8571, 8572, 7, 86, 2, 2, 8572, 1434, 3, 2, 2, 2, 8573, 8574, 7, 67, 2, 2, 8574, 8575, 7, 85, 2, 2, 8575, 8576, 7, 91, 2, 2, 8576, 8577, 7, 79, 2, 2, 8577, 8578, 7, 79, 2, 2, 8578, 8579, 7, 71, 2, 2, 8579, 8580, 7, 86, 2, 2, 8580, 8581, 7, 84, 2, 2, 8581, 8582, 7, 75, 2, 2, 8582, 8583, 7, 69, 2, 2, 8583, 8584, 7, 97, 2, 2, 8584, 8585, 7, 70, 2, 2, 8585, 8586, 7, 71, 2, 2, 8586, 8587, 7, 84, 2, 2, 8587, 8588, 7, 75, 2, 2, 8588, 8589, 7, 88, 2, 2, 8589, 8590, 7, 71, 2, 2, 8590, 1436, 3, 2, 2, 2, 8591, 8592, 7, 67, 2, 2, 8592, 8593, 7, 85, 2, 2, 8593, 8594, 7, 91, 2, 2, 8594, 8595, 7, 79, 2, 2, 8595, 8596, 7, 79, 2, 2, 8596, 8597, 7, 71, 2, 2, 8597, 8598, 7, 86, 2, 2, 8598, 8599, 7, 84, 2, 2, 8599, 8600, 7, 75, 2, 2, 8600, 8601, 7, 69, 2, 2, 8601, 8602, 7, 97, 2, 2, 8602, 8603, 7, 71, 2, 2, 8603, 8604, 7, 80, 2, 2, 8604, 8605, 7, 69, 2, 2, 8605, 8606, 7, 84, 2, 2, 8606, 8607, 7, 91, 2, 2, 8607, 8608, 7, 82, 2, 2, 8608, 8609, 7, 86, 2, 2, 8609, 1438, 3, 2, 2, 2, 8610, 8611, 7, 67, 2, 2, 8611, 8612, 7, 85, 2, 2, 8612, 8613, 7, 91, 2, 2, 8613, 8614, 7, 79, 2, 2, 8614, 8615, 7, 79, 2, 2, 8615, 8616, 7, 71, 2, 2, 8616, 8617, 7, 86, 2, 2, 8617, 8618, 7, 84, 2, 2, 8618, 8619, 7, 75, 2, 2, 8619, 8620, 7, 69, 2, 2, 8620, 8621, 7, 97, 2, 2, 8621, 8622, 7, 85, 2, 2, 8622, 8623, 7, 75, 2, 2, 8623, 8624, 7, 73, 2, 2, 8624, 8625, 7, 80, 2, 2, 8625, 1440, 3, 2, 2, 2, 8626, 8627, 7, 67, 2, 2, 8627, 8628, 7, 85, 2, 2, 8628, 8629, 7, 91, 2, 2, 8629, 8630, 7, 79, 2, 2, 8630, 8631, 7, 79, 2, 2, 8631, 8632, 7, 71, 2, 2, 8632, 8633, 7, 86, 2, 2, 8633, 8634, 7, 84, 2, 2, 8634, 8635, 7, 75, 2, 2, 8635, 8636, 7, 69, 2, 2, 8636, 8637, 7, 97, 2, 2, 8637, 8638, 7, 88, 2, 2, 8638, 8639, 7, 71, 2, 2, 8639, 8640, 7, 84, 2, 2, 8640, 8641, 7, 75, 2, 2, 8641, 8642, 7, 72, 2, 2, 8642, 8643, 7, 91, 2, 2, 8643, 1442, 3, 2, 2, 2, 8644, 8645, 7, 67, 2, 2, 8645, 8646, 7, 86, 2, 2, 8646, 8647, 7, 67, 2, 2, 8647, 8648, 7, 80, 2, 2, 8648, 1444, 3, 2, 2, 2, 8649, 8650, 7, 67, 2, 2, 8650, 8651, 7, 86, 2, 2, 8651, 8652, 7, 67, 2, 2, 8652, 8653, 7, 80, 2, 2, 8653, 8654, 7, 52, 2, 2, 8654, 1446, 3, 2, 2, 2, 8655, 8656, 7, 68, 2, 2, 8656, 8657, 7, 71, 2, 2, 8657, 8658, 7, 80, 2, 2, 8658, 8659, 7, 69, 2, 2, 8659, 8660, 7, 74, 2, 2, 8660, 8661, 7, 79, 2, 2, 8661, 8662, 7, 67, 2, 2, 8662, 8663, 7, 84, 2, 2, 8663, 8664, 7, 77, 2, 2, 8664, 1448, 3, 2, 2, 2, 8665, 8666, 7, 68, 2, 2, 8666, 8667, 7, 75, 2, 2, 8667, 8668, 7, 80, 2, 2, 8668, 1450, 3, 2, 2, 2, 8669, 8670, 7, 68, 2, 2, 8670, 8671, 7, 75, 2, 2, 8671, 8672, 7, 86, 2, 2, 8672, 8673, 7, 97, 2, 2, 8673, 8674, 7, 69, 2, 2, 8674, 8675, 7, 81, 2, 2, 8675, 8676, 7, 87, 2, 2, 8676, 8677, 7, 80, 2, 2, 8677, 8678, 7, 86, 2, 2, 8678, 1452, 3, 2, 2, 2, 8679, 8680, 7, 68, 2, 2, 8680, 8681, 7, 75, 2, 2, 8681, 8682, 7, 86, 2, 2, 8682, 8683, 7, 97, 2, 2, 8683, 8684, 7, 78, 2, 2, 8684, 8685, 7, 71, 2, 2, 8685, 8686, 7, 80, 2, 2, 8686, 8687, 7, 73, 2, 2, 8687, 8688, 7, 86, 2, 2, 8688, 8689, 7, 74, 2, 2, 8689, 1454, 3, 2, 2, 2, 8690, 8691, 7, 68, 2, 2, 8691, 8692, 7, 87, 2, 2, 8692, 8693, 7, 72, 2, 2, 8693, 8694, 7, 72, 2, 2, 8694, 8695, 7, 71, 2, 2, 8695, 8696, 7, 84, 2, 2, 8696, 1456, 3, 2, 2, 2, 8697, 8698, 7, 69, 2, 2, 8698, 8699, 7, 67, 2, 2, 8699, 8700, 7, 86, 2, 2, 8700, 8701, 7, 67, 2, 2, 8701, 8702, 7, 78, 2, 2, 8702, 8703, 7, 81, 2, 2, 8703, 8704, 7, 73, 2, 2, 8704, 8705, 7, 97, 2, 2, 8705, 8706, 7, 80, 2, 2, 8706, 8707, 7, 67, 2, 2, 8707, 8708, 7, 79, 2, 2, 8708, 8709, 7, 71, 2, 2, 8709, 1458, 3, 2, 2, 2, 8710, 8711, 7, 69, 2, 2, 8711, 8712, 7, 71, 2, 2, 8712, 8713, 7, 75, 2, 2, 8713, 8714, 7, 78, 2, 2, 8714, 1460, 3, 2, 2, 2, 8715, 8716, 7, 69, 2, 2, 8716, 8717, 7, 71, 2, 2, 8717, 8718, 7, 75, 2, 2, 8718, 8719, 7, 78, 2, 2, 8719, 8720, 7, 75, 2, 2, 8720, 8721, 7, 80, 2, 2, 8721, 8722, 7, 73, 2, 2, 8722, 1462, 3, 2, 2, 2, 8723, 8724, 7, 69, 2, 2, 8724, 8725, 7, 71, 2, 2, 8725, 8726, 7, 80, 2, 2, 8726, 8727, 7, 86, 2, 2, 8727, 8728, 7, 84, 2, 2, 8728, 8729, 7, 81, 2, 2, 8729, 8730, 7, 75, 2, 2, 8730, 8731, 7, 70, 2, 2, 8731, 1464, 3, 2, 2, 2, 8732, 8733, 7, 69, 2, 2, 8733, 8734, 7, 74, 2, 2, 8734, 8735, 7, 67, 2, 2, 8735, 8736, 7, 84, 2, 2, 8736, 8737, 7, 67, 2, 2, 8737, 8738, 7, 69, 2, 2, 8738, 8739, 7, 86, 2, 2, 8739, 8740, 7, 71, 2, 2, 8740, 8741, 7, 84, 2, 2, 8741, 8742, 7, 97, 2, 2, 8742, 8743, 7, 78, 2, 2, 8743, 8744, 7, 71, 2, 2, 8744, 8745, 7, 80, 2, 2, 8745, 8746, 7, 73, 2, 2, 8746, 8747, 7, 86, 2, 2, 8747, 8748, 7, 74, 2, 2, 8748, 1466, 3, 2, 2, 2, 8749, 8750, 7, 69, 2, 2, 8750, 8751, 7, 74, 2, 2, 8751, 8752, 7, 67, 2, 2, 8752, 8753, 7, 84, 2, 2, 8753, 8754, 7, 85, 2, 2, 8754, 8755, 7, 71, 2, 2, 8755, 8756, 7, 86, 2, 2, 8756, 1468, 3, 2, 2, 2, 8757, 8758, 7, 69, 2, 2, 8758, 8759, 7, 74, 2, 2, 8759, 8760, 7, 67, 2, 2, 8760, 8761, 7, 84, 2, 2, 8761, 8762, 7, 97, 2, 2, 8762, 8763, 7, 78, 2, 2, 8763, 8764, 7, 71, 2, 2, 8764, 8765, 7, 80, 2, 2, 8765, 8766, 7, 73, 2, 2, 8766, 8767, 7, 86, 2, 2, 8767, 8768, 7, 74, 2, 2, 8768, 1470, 3, 2, 2, 2, 8769, 8770, 7, 69, 2, 2, 8770, 8771, 7, 81, 2, 2, 8771, 8772, 7, 71, 2, 2, 8772, 8773, 7, 84, 2, 2, 8773, 8774, 7, 69, 2, 2, 8774, 8775, 7, 75, 2, 2, 8775, 8776, 7, 68, 2, 2, 8776, 8777, 7, 75, 2, 2, 8777, 8778, 7, 78, 2, 2, 8778, 8779, 7, 75, 2, 2, 8779, 8780, 7, 86, 2, 2, 8780, 8781, 7, 91, 2, 2, 8781, 1472, 3, 2, 2, 2, 8782, 8783, 7, 69, 2, 2, 8783, 8784, 7, 81, 2, 2, 8784, 8785, 7, 78, 2, 2, 8785, 8786, 7, 78, 2, 2, 8786, 8787, 7, 67, 2, 2, 8787, 8788, 7, 86, 2, 2, 8788, 8789, 7, 75, 2, 2, 8789, 8790, 7, 81, 2, 2, 8790, 8791, 7, 80, 2, 2, 8791, 1474, 3, 2, 2, 2, 8792, 8793, 7, 69, 2, 2, 8793, 8794, 7, 81, 2, 2, 8794, 8795, 7, 79, 2, 2, 8795, 8796, 7, 82, 2, 2, 8796, 8797, 7, 84, 2, 2, 8797, 8798, 7, 71, 2, 2, 8798, 8799, 7, 85, 2, 2, 8799, 8800, 7, 85, 2, 2, 8800, 1476, 3, 2, 2, 2, 8801, 8802, 7, 69, 2, 2, 8802, 8803, 7, 81, 2, 2, 8803, 8804, 7, 80, 2, 2, 8804, 8805, 7, 69, 2, 2, 8805, 8806, 7, 67, 2, 2, 8806, 8807, 7, 86, 2, 2, 8807, 1478, 3, 2, 2, 2, 8808, 8809, 7, 69, 2, 2, 8809, 8810, 7, 81, 2, 2, 8810, 8811, 7, 80, 2, 2, 8811, 8812, 7, 69, 2, 2, 8812, 8813, 7, 67, 2, 2, 8813, 8814, 7, 86, 2, 2, 8814, 8815, 7, 97, 2, 2, 8815, 8816, 7, 89, 2, 2, 8816, 8817, 7, 85, 2, 2, 8817, 1480, 3, 2, 2, 2, 8818, 8819, 7, 69, 2, 2, 8819, 8820, 7, 81, 2, 2, 8820, 8821, 7, 80, 2, 2, 8821, 8822, 7, 80, 2, 2, 8822, 8823, 7, 71, 2, 2, 8823, 8824, 7, 69, 2, 2, 8824, 8825, 7, 86, 2, 2, 8825, 8826, 7, 75, 2, 2, 8826, 8827, 7, 81, 2, 2, 8827, 8828, 7, 80, 2, 2, 8828, 8829, 7, 97, 2, 2, 8829, 8830, 7, 75, 2, 2, 8830, 8831, 7, 70, 2, 2, 8831, 1482, 3, 2, 2, 2, 8832, 8833, 7, 69, 2, 2, 8833, 8834, 7, 81, 2, 2, 8834, 8835, 7, 80, 2, 2, 8835, 8836, 7, 88, 2, 2, 8836, 1484, 3, 2, 2, 2, 8837, 8838, 7, 69, 2, 2, 8838, 8839, 7, 81, 2, 2, 8839, 8840, 7, 80, 2, 2, 8840, 8841, 7, 88, 2, 2, 8841, 8842, 7, 71, 2, 2, 8842, 8843, 7, 84, 2, 2, 8843, 8844, 7, 86, 2, 2, 8844, 8845, 7, 97, 2, 2, 8845, 8846, 7, 86, 2, 2, 8846, 8847, 7, 92, 2, 2, 8847, 1486, 3, 2, 2, 2, 8848, 8849, 7, 69, 2, 2, 8849, 8850, 7, 81, 2, 2, 8850, 8851, 7, 85, 2, 2, 8851, 1488, 3, 2, 2, 2, 8852, 8853, 7, 69, 2, 2, 8853, 8854, 7, 81, 2, 2, 8854, 8855, 7, 86, 2, 2, 8855, 1490, 3, 2, 2, 2, 8856, 8857, 7, 69, 2, 2, 8857, 8858, 7, 84, 2, 2, 8858, 8859, 7, 69, 2, 2, 8859, 8860, 7, 53, 2, 2, 8860, 8861, 7, 52, 2, 2, 8861, 1492, 3, 2, 2, 2, 8862, 8863, 7, 69, 2, 2, 8863, 8864, 7, 84, 2, 2, 8864, 8865, 7, 71, 2, 2, 8865, 8866, 7, 67, 2, 2, 8866, 8867, 7, 86, 2, 2, 8867, 8868, 7, 71, 2, 2, 8868, 8869, 7, 97, 2, 2, 8869, 8870, 7, 67, 2, 2, 8870, 8871, 7, 85, 2, 2, 8871, 8872, 7, 91, 2, 2, 8872, 8873, 7, 79, 2, 2, 8873, 8874, 7, 79, 2, 2, 8874, 8875, 7, 71, 2, 2, 8875, 8876, 7, 86, 2, 2, 8876, 8877, 7, 84, 2, 2, 8877, 8878, 7, 75, 2, 2, 8878, 8879, 7, 69, 2, 2, 8879, 8880, 7, 97, 2, 2, 8880, 8881, 7, 82, 2, 2, 8881, 8882, 7, 84, 2, 2, 8882, 8883, 7, 75, 2, 2, 8883, 8884, 7, 88, 2, 2, 8884, 8885, 7, 97, 2, 2, 8885, 8886, 7, 77, 2, 2, 8886, 8887, 7, 71, 2, 2, 8887, 8888, 7, 91, 2, 2, 8888, 1494, 3, 2, 2, 2, 8889, 8890, 7, 69, 2, 2, 8890, 8891, 7, 84, 2, 2, 8891, 8892, 7, 71, 2, 2, 8892, 8893, 7, 67, 2, 2, 8893, 8894, 7, 86, 2, 2, 8894, 8895, 7, 71, 2, 2, 8895, 8896, 7, 97, 2, 2, 8896, 8897, 7, 67, 2, 2, 8897, 8898, 7, 85, 2, 2, 8898, 8899, 7, 91, 2, 2, 8899, 8900, 7, 79, 2, 2, 8900, 8901, 7, 79, 2, 2, 8901, 8902, 7, 71, 2, 2, 8902, 8903, 7, 86, 2, 2, 8903, 8904, 7, 84, 2, 2, 8904, 8905, 7, 75, 2, 2, 8905, 8906, 7, 69, 2, 2, 8906, 8907, 7, 97, 2, 2, 8907, 8908, 7, 82, 2, 2, 8908, 8909, 7, 87, 2, 2, 8909, 8910, 7, 68, 2, 2, 8910, 8911, 7, 97, 2, 2, 8911, 8912, 7, 77, 2, 2, 8912, 8913, 7, 71, 2, 2, 8913, 8914, 7, 91, 2, 2, 8914, 1496, 3, 2, 2, 2, 8915, 8916, 7, 69, 2, 2, 8916, 8917, 7, 84, 2, 2, 8917, 8918, 7, 71, 2, 2, 8918, 8919, 7, 67, 2, 2, 8919, 8920, 7, 86, 2, 2, 8920, 8921, 7, 71, 2, 2, 8921, 8922, 7, 97, 2, 2, 8922, 8923, 7, 70, 2, 2, 8923, 8924, 7, 74, 2, 2, 8924, 8925, 7, 97, 2, 2, 8925, 8926, 7, 82, 2, 2, 8926, 8927, 7, 67, 2, 2, 8927, 8928, 7, 84, 2, 2, 8928, 8929, 7, 67, 2, 2, 8929, 8930, 7, 79, 2, 2, 8930, 8931, 7, 71, 2, 2, 8931, 8932, 7, 86, 2, 2, 8932, 8933, 7, 71, 2, 2, 8933, 8934, 7, 84, 2, 2, 8934, 8935, 7, 85, 2, 2, 8935, 1498, 3, 2, 2, 2, 8936, 8937, 7, 69, 2, 2, 8937, 8938, 7, 84, 2, 2, 8938, 8939, 7, 71, 2, 2, 8939, 8940, 7, 67, 2, 2, 8940, 8941, 7, 86, 2, 2, 8941, 8942, 7, 71, 2, 2, 8942, 8943, 7, 97, 2, 2, 8943, 8944, 7, 70, 2, 2, 8944, 8945, 7, 75, 2, 2, 8945, 8946, 7, 73, 2, 2, 8946, 8947, 7, 71, 2, 2, 8947, 8948, 7, 85, 2, 2, 8948, 8949, 7, 86, 2, 2, 8949, 1500, 3, 2, 2, 2, 8950, 8951, 7, 69, 2, 2, 8951, 8952, 7, 84, 2, 2, 8952, 8953, 7, 81, 2, 2, 8953, 8954, 7, 85, 2, 2, 8954, 8955, 7, 85, 2, 2, 8955, 8956, 7, 71, 2, 2, 8956, 8957, 7, 85, 2, 2, 8957, 1502, 3, 2, 2, 2, 8958, 8959, 7, 70, 2, 2, 8959, 8960, 7, 67, 2, 2, 8960, 8961, 7, 86, 2, 2, 8961, 8962, 7, 71, 2, 2, 8962, 8963, 7, 70, 2, 2, 8963, 8964, 7, 75, 2, 2, 8964, 8965, 7, 72, 2, 2, 8965, 8966, 7, 72, 2, 2, 8966, 1504, 3, 2, 2, 2, 8967, 8968, 7, 70, 2, 2, 8968, 8969, 7, 67, 2, 2, 8969, 8970, 7, 86, 2, 2, 8970, 8971, 7, 71, 2, 2, 8971, 8972, 7, 97, 2, 2, 8972, 8973, 7, 72, 2, 2, 8973, 8974, 7, 81, 2, 2, 8974, 8975, 7, 84, 2, 2, 8975, 8976, 7, 79, 2, 2, 8976, 8977, 7, 67, 2, 2, 8977, 8978, 7, 86, 2, 2, 8978, 1506, 3, 2, 2, 2, 8979, 8980, 7, 70, 2, 2, 8980, 8981, 7, 67, 2, 2, 8981, 8982, 7, 91, 2, 2, 8982, 8983, 7, 80, 2, 2, 8983, 8984, 7, 67, 2, 2, 8984, 8985, 7, 79, 2, 2, 8985, 8986, 7, 71, 2, 2, 8986, 1508, 3, 2, 2, 2, 8987, 8988, 7, 70, 2, 2, 8988, 8989, 7, 67, 2, 2, 8989, 8990, 7, 91, 2, 2, 8990, 8991, 7, 81, 2, 2, 8991, 8992, 7, 72, 2, 2, 8992, 8993, 7, 79, 2, 2, 8993, 8994, 7, 81, 2, 2, 8994, 8995, 7, 80, 2, 2, 8995, 8996, 7, 86, 2, 2, 8996, 8997, 7, 74, 2, 2, 8997, 1510, 3, 2, 2, 2, 8998, 8999, 7, 70, 2, 2, 8999, 9000, 7, 67, 2, 2, 9000, 9001, 7, 91, 2, 2, 9001, 9002, 7, 81, 2, 2, 9002, 9003, 7, 72, 2, 2, 9003, 9004, 7, 89, 2, 2, 9004, 9005, 7, 71, 2, 2, 9005, 9006, 7, 71, 2, 2, 9006, 9007, 7, 77, 2, 2, 9007, 1512, 3, 2, 2, 2, 9008, 9009, 7, 70, 2, 2, 9009, 9010, 7, 67, 2, 2, 9010, 9011, 7, 91, 2, 2, 9011, 9012, 7, 81, 2, 2, 9012, 9013, 7, 72, 2, 2, 9013, 9014, 7, 91, 2, 2, 9014, 9015, 7, 71, 2, 2, 9015, 9016, 7, 67, 2, 2, 9016, 9017, 7, 84, 2, 2, 9017, 1514, 3, 2, 2, 2, 9018, 9019, 7, 70, 2, 2, 9019, 9020, 7, 71, 2, 2, 9020, 9021, 7, 69, 2, 2, 9021, 9022, 7, 81, 2, 2, 9022, 9023, 7, 70, 2, 2, 9023, 9024, 7, 71, 2, 2, 9024, 1516, 3, 2, 2, 2, 9025, 9026, 7, 70, 2, 2, 9026, 9027, 7, 71, 2, 2, 9027, 9028, 7, 73, 2, 2, 9028, 9029, 7, 84, 2, 2, 9029, 9030, 7, 71, 2, 2, 9030, 9031, 7, 71, 2, 2, 9031, 9032, 7, 85, 2, 2, 9032, 1518, 3, 2, 2, 2, 9033, 9034, 7, 70, 2, 2, 9034, 9035, 7, 71, 2, 2, 9035, 9036, 7, 85, 2, 2, 9036, 9037, 7, 97, 2, 2, 9037, 9038, 7, 70, 2, 2, 9038, 9039, 7, 71, 2, 2, 9039, 9040, 7, 69, 2, 2, 9040, 9041, 7, 84, 2, 2, 9041, 9042, 7, 91, 2, 2, 9042, 9043, 7, 82, 2, 2, 9043, 9044, 7, 86, 2, 2, 9044, 1520, 3, 2, 2, 2, 9045, 9046, 7, 70, 2, 2, 9046, 9047, 7, 71, 2, 2, 9047, 9048, 7, 85, 2, 2, 9048, 9049, 7, 97, 2, 2, 9049, 9050, 7, 71, 2, 2, 9050, 9051, 7, 80, 2, 2, 9051, 9052, 7, 69, 2, 2, 9052, 9053, 7, 84, 2, 2, 9053, 9054, 7, 91, 2, 2, 9054, 9055, 7, 82, 2, 2, 9055, 9056, 7, 86, 2, 2, 9056, 1522, 3, 2, 2, 2, 9057, 9058, 7, 70, 2, 2, 9058, 9059, 7, 75, 2, 2, 9059, 9060, 7, 79, 2, 2, 9060, 9061, 7, 71, 2, 2, 9061, 9062, 7, 80, 2, 2, 9062, 9063, 7, 85, 2, 2, 9063, 9064, 7, 75, 2, 2, 9064, 9065, 7, 81, 2, 2, 9065, 9066, 7, 80, 2, 2, 9066, 1524, 3, 2, 2, 2, 9067, 9068, 7, 70, 2, 2, 9068, 9069, 7, 75, 2, 2, 9069, 9070, 7, 85, 2, 2, 9070, 9071, 7, 76, 2, 2, 9071, 9072, 7, 81, 2, 2, 9072, 9073, 7, 75, 2, 2, 9073, 9074, 7, 80, 2, 2, 9074, 9075, 7, 86, 2, 2, 9075, 1526, 3, 2, 2, 2, 9076, 9077, 7, 71, 2, 2, 9077, 9078, 7, 78, 2, 2, 9078, 9079, 7, 86, 2, 2, 9079, 1528, 3, 2, 2, 2, 9080, 9081, 7, 71, 2, 2, 9081, 9082, 7, 80, 2, 2, 9082, 9083, 7, 69, 2, 2, 9083, 9084, 7, 81, 2, 2, 9084, 9085, 7, 70, 2, 2, 9085, 9086, 7, 71, 2, 2, 9086, 1530, 3, 2, 2, 2, 9087, 9088, 7, 71, 2, 2, 9088, 9089, 7, 80, 2, 2, 9089, 9090, 7, 69, 2, 2, 9090, 9091, 7, 84, 2, 2, 9091, 9092, 7, 91, 2, 2, 9092, 9093, 7, 82, 2, 2, 9093, 9094, 7, 86, 2, 2, 9094, 1532, 3, 2, 2, 2, 9095, 9096, 7, 71, 2, 2, 9096, 9097, 7, 80, 2, 2, 9097, 9098, 7, 70, 2, 2, 9098, 9099, 7, 82, 2, 2, 9099, 9100, 7, 81, 2, 2, 9100, 9101, 7, 75, 2, 2, 9101, 9102, 7, 80, 2, 2, 9102, 9103, 7, 86, 2, 2, 9103, 1534, 3, 2, 2, 2, 9104, 9105, 7, 71, 2, 2, 9105, 9106, 7, 80, 2, 2, 9106, 9107, 7, 88, 2, 2, 9107, 9108, 7, 71, 2, 2, 9108, 9109, 7, 78, 2, 2, 9109, 9110, 7, 81, 2, 2, 9110, 9111, 7, 82, 2, 2, 9111, 9112, 7, 71, 2, 2, 9112, 1536, 3, 2, 2, 2, 9113, 9114, 7, 71, 2, 2, 9114, 9115, 7, 83, 2, 2, 9115, 9116, 7, 87, 2, 2, 9116, 9117, 7, 67, 2, 2, 9117, 9118, 7, 78, 2, 2, 9118, 9119, 7, 85, 2, 2, 9119, 1538, 3, 2, 2, 2, 9120, 9121, 7, 71, 2, 2, 9121, 9122, 7, 90, 2, 2, 9122, 9123, 7, 82, 2, 2, 9123, 1540, 3, 2, 2, 2, 9124, 9125, 7, 71, 2, 2, 9125, 9126, 7, 90, 2, 2, 9126, 9127, 7, 82, 2, 2, 9127, 9128, 7, 81, 2, 2, 9128, 9129, 7, 84, 2, 2, 9129, 9130, 7, 86, 2, 2, 9130, 9131, 7, 97, 2, 2, 9131, 9132, 7, 85, 2, 2, 9132, 9133, 7, 71, 2, 2, 9133, 9134, 7, 86, 2, 2, 9134, 1542, 3, 2, 2, 2, 9135, 9136, 7, 71, 2, 2, 9136, 9137, 7, 90, 2, 2, 9137, 9138, 7, 86, 2, 2, 9138, 9139, 7, 71, 2, 2, 9139, 9140, 7, 84, 2, 2, 9140, 9141, 7, 75, 2, 2, 9141, 9142, 7, 81, 2, 2, 9142, 9143, 7, 84, 2, 2, 9143, 9144, 7, 84, 2, 2, 9144, 9145, 7, 75, 2, 2, 9145, 9146, 7, 80, 2, 2, 9146, 9147, 7, 73, 2, 2, 9147, 1544, 3, 2, 2, 2, 9148, 9149, 7, 71, 2, 2, 9149, 9150, 7, 90, 2, 2, 9150, 9151, 7, 86, 2, 2, 9151, 9152, 7, 84, 2, 2, 9152, 9153, 7, 67, 2, 2, 9153, 9154, 7, 69, 2, 2, 9154, 9155, 7, 86, 2, 2, 9155, 9156, 7, 88, 2, 2, 9156, 9157, 7, 67, 2, 2, 9157, 9158, 7, 78, 2, 2, 9158, 9159, 7, 87, 2, 2, 9159, 9160, 7, 71, 2, 2, 9160, 1546, 3, 2, 2, 2, 9161, 9162, 7, 72, 2, 2, 9162, 9163, 7, 75, 2, 2, 9163, 9164, 7, 71, 2, 2, 9164, 9165, 7, 78, 2, 2, 9165, 9166, 7, 70, 2, 2, 9166, 1548, 3, 2, 2, 2, 9167, 9168, 7, 72, 2, 2, 9168, 9169, 7, 75, 2, 2, 9169, 9170, 7, 80, 2, 2, 9170, 9171, 7, 70, 2, 2, 9171, 9172, 7, 97, 2, 2, 9172, 9173, 7, 75, 2, 2, 9173, 9174, 7, 80, 2, 2, 9174, 9175, 7, 97, 2, 2, 9175, 9176, 7, 85, 2, 2, 9176, 9177, 7, 71, 2, 2, 9177, 9178, 7, 86, 2, 2, 9178, 1550, 3, 2, 2, 2, 9179, 9180, 7, 72, 2, 2, 9180, 9181, 7, 78, 2, 2, 9181, 9182, 7, 81, 2, 2, 9182, 9183, 7, 81, 2, 2, 9183, 9184, 7, 84, 2, 2, 9184, 1552, 3, 2, 2, 2, 9185, 9186, 7, 72, 2, 2, 9186, 9187, 7, 81, 2, 2, 9187, 9188, 7, 84, 2, 2, 9188, 9189, 7, 79, 2, 2, 9189, 9190, 7, 67, 2, 2, 9190, 9191, 7, 86, 2, 2, 9191, 1554, 3, 2, 2, 2, 9192, 9193, 7, 72, 2, 2, 9193, 9194, 7, 81, 2, 2, 9194, 9195, 7, 87, 2, 2, 9195, 9196, 7, 80, 2, 2, 9196, 9197, 7, 70, 2, 2, 9197, 9198, 7, 97, 2, 2, 9198, 9199, 7, 84, 2, 2, 9199, 9200, 7, 81, 2, 2, 9200, 9201, 7, 89, 2, 2, 9201, 9202, 7, 85, 2, 2, 9202, 1556, 3, 2, 2, 2, 9203, 9204, 7, 72, 2, 2, 9204, 9205, 7, 84, 2, 2, 9205, 9206, 7, 81, 2, 2, 9206, 9207, 7, 79, 2, 2, 9207, 9208, 7, 97, 2, 2, 9208, 9209, 7, 68, 2, 2, 9209, 9210, 7, 67, 2, 2, 9210, 9211, 7, 85, 2, 2, 9211, 9212, 7, 71, 2, 2, 9212, 9213, 7, 56, 2, 2, 9213, 9214, 7, 54, 2, 2, 9214, 1558, 3, 2, 2, 2, 9215, 9216, 7, 72, 2, 2, 9216, 9217, 7, 84, 2, 2, 9217, 9218, 7, 81, 2, 2, 9218, 9219, 7, 79, 2, 2, 9219, 9220, 7, 97, 2, 2, 9220, 9221, 7, 70, 2, 2, 9221, 9222, 7, 67, 2, 2, 9222, 9223, 7, 91, 2, 2, 9223, 9224, 7, 85, 2, 2, 9224, 1560, 3, 2, 2, 2, 9225, 9226, 7, 72, 2, 2, 9226, 9227, 7, 84, 2, 2, 9227, 9228, 7, 81, 2, 2, 9228, 9229, 7, 79, 2, 2, 9229, 9230, 7, 97, 2, 2, 9230, 9231, 7, 87, 2, 2, 9231, 9232, 7, 80, 2, 2, 9232, 9233, 7, 75, 2, 2, 9233, 9234, 7, 90, 2, 2, 9234, 9235, 7, 86, 2, 2, 9235, 9236, 7, 75, 2, 2, 9236, 9237, 7, 79, 2, 2, 9237, 9238, 7, 71, 2, 2, 9238, 1562, 3, 2, 2, 2, 9239, 9240, 7, 73, 2, 2, 9240, 9241, 7, 71, 2, 2, 9241, 9242, 7, 81, 2, 2, 9242, 9243, 7, 79, 2, 2, 9243, 9244, 7, 69, 2, 2, 9244, 9245, 7, 81, 2, 2, 9245, 9246, 7, 78, 2, 2, 9246, 9247, 7, 78, 2, 2, 9247, 9248, 7, 72, 2, 2, 9248, 9249, 7, 84, 2, 2, 9249, 9250, 7, 81, 2, 2, 9250, 9251, 7, 79, 2, 2, 9251, 9252, 7, 86, 2, 2, 9252, 9253, 7, 71, 2, 2, 9253, 9254, 7, 90, 2, 2, 9254, 9255, 7, 86, 2, 2, 9255, 1564, 3, 2, 2, 2, 9256, 9257, 7, 73, 2, 2, 9257, 9258, 7, 71, 2, 2, 9258, 9259, 7, 81, 2, 2, 9259, 9260, 7, 79, 2, 2, 9260, 9261, 7, 69, 2, 2, 9261, 9262, 7, 81, 2, 2, 9262, 9263, 7, 78, 2, 2, 9263, 9264, 7, 78, 2, 2, 9264, 9265, 7, 72, 2, 2, 9265, 9266, 7, 84, 2, 2, 9266, 9267, 7, 81, 2, 2, 9267, 9268, 7, 79, 2, 2, 9268, 9269, 7, 89, 2, 2, 9269, 9270, 7, 77, 2, 2, 9270, 9271, 7, 68, 2, 2, 9271, 1566, 3, 2, 2, 2, 9272, 9273, 7, 73, 2, 2, 9273, 9274, 7, 71, 2, 2, 9274, 9275, 7, 81, 2, 2, 9275, 9276, 7, 79, 2, 2, 9276, 9277, 7, 71, 2, 2, 9277, 9278, 7, 86, 2, 2, 9278, 9279, 7, 84, 2, 2, 9279, 9280, 7, 91, 2, 2, 9280, 9281, 7, 69, 2, 2, 9281, 9282, 7, 81, 2, 2, 9282, 9283, 7, 78, 2, 2, 9283, 9284, 7, 78, 2, 2, 9284, 9285, 7, 71, 2, 2, 9285, 9286, 7, 69, 2, 2, 9286, 9287, 7, 86, 2, 2, 9287, 9288, 7, 75, 2, 2, 9288, 9289, 7, 81, 2, 2, 9289, 9290, 7, 80, 2, 2, 9290, 9291, 7, 72, 2, 2, 9291, 9292, 7, 84, 2, 2, 9292, 9293, 7, 81, 2, 2, 9293, 9294, 7, 79, 2, 2, 9294, 9295, 7, 86, 2, 2, 9295, 9296, 7, 71, 2, 2, 9296, 9297, 7, 90, 2, 2, 9297, 9298, 7, 86, 2, 2, 9298, 1568, 3, 2, 2, 2, 9299, 9300, 7, 73, 2, 2, 9300, 9301, 7, 71, 2, 2, 9301, 9302, 7, 81, 2, 2, 9302, 9303, 7, 79, 2, 2, 9303, 9304, 7, 71, 2, 2, 9304, 9305, 7, 86, 2, 2, 9305, 9306, 7, 84, 2, 2, 9306, 9307, 7, 91, 2, 2, 9307, 9308, 7, 69, 2, 2, 9308, 9309, 7, 81, 2, 2, 9309, 9310, 7, 78, 2, 2, 9310, 9311, 7, 78, 2, 2, 9311, 9312, 7, 71, 2, 2, 9312, 9313, 7, 69, 2, 2, 9313, 9314, 7, 86, 2, 2, 9314, 9315, 7, 75, 2, 2, 9315, 9316, 7, 81, 2, 2, 9316, 9317, 7, 80, 2, 2, 9317, 9318, 7, 72, 2, 2, 9318, 9319, 7, 84, 2, 2, 9319, 9320, 7, 81, 2, 2, 9320, 9321, 7, 79, 2, 2, 9321, 9322, 7, 89, 2, 2, 9322, 9323, 7, 77, 2, 2, 9323, 9324, 7, 68, 2, 2, 9324, 1570, 3, 2, 2, 2, 9325, 9326, 7, 73, 2, 2, 9326, 9327, 7, 71, 2, 2, 9327, 9328, 7, 81, 2, 2, 9328, 9329, 7, 79, 2, 2, 9329, 9330, 7, 71, 2, 2, 9330, 9331, 7, 86, 2, 2, 9331, 9332, 7, 84, 2, 2, 9332, 9333, 7, 91, 2, 2, 9333, 9334, 7, 72, 2, 2, 9334, 9335, 7, 84, 2, 2, 9335, 9336, 7, 81, 2, 2, 9336, 9337, 7, 79, 2, 2, 9337, 9338, 7, 86, 2, 2, 9338, 9339, 7, 71, 2, 2, 9339, 9340, 7, 90, 2, 2, 9340, 9341, 7, 86, 2, 2, 9341, 1572, 3, 2, 2, 2, 9342, 9343, 7, 73, 2, 2, 9343, 9344, 7, 71, 2, 2, 9344, 9345, 7, 81, 2, 2, 9345, 9346, 7, 79, 2, 2, 9346, 9347, 7, 71, 2, 2, 9347, 9348, 7, 86, 2, 2, 9348, 9349, 7, 84, 2, 2, 9349, 9350, 7, 91, 2, 2, 9350, 9351, 7, 72, 2, 2, 9351, 9352, 7, 84, 2, 2, 9352, 9353, 7, 81, 2, 2, 9353, 9354, 7, 79, 2, 2, 9354, 9355, 7, 89, 2, 2, 9355, 9356, 7, 77, 2, 2, 9356, 9357, 7, 68, 2, 2, 9357, 1574, 3, 2, 2, 2, 9358, 9359, 7, 73, 2, 2, 9359, 9360, 7, 71, 2, 2, 9360, 9361, 7, 81, 2, 2, 9361, 9362, 7, 79, 2, 2, 9362, 9363, 7, 71, 2, 2, 9363, 9364, 7, 86, 2, 2, 9364, 9365, 7, 84, 2, 2, 9365, 9366, 7, 91, 2, 2, 9366, 9367, 7, 80, 2, 2, 9367, 1576, 3, 2, 2, 2, 9368, 9369, 7, 73, 2, 2, 9369, 9370, 7, 71, 2, 2, 9370, 9371, 7, 81, 2, 2, 9371, 9372, 7, 79, 2, 2, 9372, 9373, 7, 71, 2, 2, 9373, 9374, 7, 86, 2, 2, 9374, 9375, 7, 84, 2, 2, 9375, 9376, 7, 91, 2, 2, 9376, 9377, 7, 86, 2, 2, 9377, 9378, 7, 91, 2, 2, 9378, 9379, 7, 82, 2, 2, 9379, 9380, 7, 71, 2, 2, 9380, 1578, 3, 2, 2, 2, 9381, 9382, 7, 73, 2, 2, 9382, 9383, 7, 71, 2, 2, 9383, 9384, 7, 81, 2, 2, 9384, 9385, 7, 79, 2, 2, 9385, 9386, 7, 72, 2, 2, 9386, 9387, 7, 84, 2, 2, 9387, 9388, 7, 81, 2, 2, 9388, 9389, 7, 79, 2, 2, 9389, 9390, 7, 86, 2, 2, 9390, 9391, 7, 71, 2, 2, 9391, 9392, 7, 90, 2, 2, 9392, 9393, 7, 86, 2, 2, 9393, 1580, 3, 2, 2, 2, 9394, 9395, 7, 73, 2, 2, 9395, 9396, 7, 71, 2, 2, 9396, 9397, 7, 81, 2, 2, 9397, 9398, 7, 79, 2, 2, 9398, 9399, 7, 72, 2, 2, 9399, 9400, 7, 84, 2, 2, 9400, 9401, 7, 81, 2, 2, 9401, 9402, 7, 79, 2, 2, 9402, 9403, 7, 89, 2, 2, 9403, 9404, 7, 77, 2, 2, 9404, 9405, 7, 68, 2, 2, 9405, 1582, 3, 2, 2, 2, 9406, 9407, 7, 73, 2, 2, 9407, 9408, 7, 71, 2, 2, 9408, 9409, 7, 86, 2, 2, 9409, 9410, 7, 97, 2, 2, 9410, 9411, 7, 72, 2, 2, 9411, 9412, 7, 81, 2, 2, 9412, 9413, 7, 84, 2, 2, 9413, 9414, 7, 79, 2, 2, 9414, 9415, 7, 67, 2, 2, 9415, 9416, 7, 86, 2, 2, 9416, 1584, 3, 2, 2, 2, 9417, 9418, 7, 73, 2, 2, 9418, 9419, 7, 71, 2, 2, 9419, 9420, 7, 86, 2, 2, 9420, 9421, 7, 97, 2, 2, 9421, 9422, 7, 78, 2, 2, 9422, 9423, 7, 81, 2, 2, 9423, 9424, 7, 69, 2, 2, 9424, 9425, 7, 77, 2, 2, 9425, 1586, 3, 2, 2, 2, 9426, 9427, 7, 73, 2, 2, 9427, 9428, 7, 78, 2, 2, 9428, 9429, 7, 71, 2, 2, 9429, 9430, 7, 80, 2, 2, 9430, 9431, 7, 73, 2, 2, 9431, 9432, 7, 86, 2, 2, 9432, 9433, 7, 74, 2, 2, 9433, 1588, 3, 2, 2, 2, 9434, 9435, 7, 73, 2, 2, 9435, 9436, 7, 84, 2, 2, 9436, 9437, 7, 71, 2, 2, 9437, 9438, 7, 67, 2, 2, 9438, 9439, 7, 86, 2, 2, 9439, 9440, 7, 71, 2, 2, 9440, 9441, 7, 85, 2, 2, 9441, 9442, 7, 86, 2, 2, 9442, 1590, 3, 2, 2, 2, 9443, 9444, 7, 73, 2, 2, 9444, 9445, 7, 86, 2, 2, 9445, 9446, 7, 75, 2, 2, 9446, 9447, 7, 70, 2, 2, 9447, 9448, 7, 97, 2, 2, 9448, 9449, 7, 85, 2, 2, 9449, 9450, 7, 87, 2, 2, 9450, 9451, 7, 68, 2, 2, 9451, 9452, 7, 85, 2, 2, 9452, 9453, 7, 71, 2, 2, 9453, 9454, 7, 86, 2, 2, 9454, 1592, 3, 2, 2, 2, 9455, 9456, 7, 73, 2, 2, 9456, 9457, 7, 86, 2, 2, 9457, 9458, 7, 75, 2, 2, 9458, 9459, 7, 70, 2, 2, 9459, 9460, 7, 97, 2, 2, 9460, 9461, 7, 85, 2, 2, 9461, 9462, 7, 87, 2, 2, 9462, 9463, 7, 68, 2, 2, 9463, 9464, 7, 86, 2, 2, 9464, 9465, 7, 84, 2, 2, 9465, 9466, 7, 67, 2, 2, 9466, 9467, 7, 69, 2, 2, 9467, 9468, 7, 86, 2, 2, 9468, 1594, 3, 2, 2, 2, 9469, 9470, 7, 74, 2, 2, 9470, 9471, 7, 71, 2, 2, 9471, 9472, 7, 90, 2, 2, 9472, 1596, 3, 2, 2, 2, 9473, 9474, 7, 75, 2, 2, 9474, 9475, 7, 72, 2, 2, 9475, 9476, 7, 80, 2, 2, 9476, 9477, 7, 87, 2, 2, 9477, 9478, 7, 78, 2, 2, 9478, 9479, 7, 78, 2, 2, 9479, 1598, 3, 2, 2, 2, 9480, 9481, 7, 75, 2, 2, 9481, 9482, 7, 80, 2, 2, 9482, 9483, 7, 71, 2, 2, 9483, 9484, 7, 86, 2, 2, 9484, 9485, 7, 56, 2, 2, 9485, 9486, 7, 97, 2, 2, 9486, 9487, 7, 67, 2, 2, 9487, 9488, 7, 86, 2, 2, 9488, 9489, 7, 81, 2, 2, 9489, 9490, 7, 80, 2, 2, 9490, 1600, 3, 2, 2, 2, 9491, 9492, 7, 75, 2, 2, 9492, 9493, 7, 80, 2, 2, 9493, 9494, 7, 71, 2, 2, 9494, 9495, 7, 86, 2, 2, 9495, 9496, 7, 56, 2, 2, 9496, 9497, 7, 97, 2, 2, 9497, 9498, 7, 80, 2, 2, 9498, 9499, 7, 86, 2, 2, 9499, 9500, 7, 81, 2, 2, 9500, 9501, 7, 67, 2, 2, 9501, 1602, 3, 2, 2, 2, 9502, 9503, 7, 75, 2, 2, 9503, 9504, 7, 80, 2, 2, 9504, 9505, 7, 71, 2, 2, 9505, 9506, 7, 86, 2, 2, 9506, 9507, 7, 97, 2, 2, 9507, 9508, 7, 67, 2, 2, 9508, 9509, 7, 86, 2, 2, 9509, 9510, 7, 81, 2, 2, 9510, 9511, 7, 80, 2, 2, 9511, 1604, 3, 2, 2, 2, 9512, 9513, 7, 75, 2, 2, 9513, 9514, 7, 80, 2, 2, 9514, 9515, 7, 71, 2, 2, 9515, 9516, 7, 86, 2, 2, 9516, 9517, 7, 97, 2, 2, 9517, 9518, 7, 80, 2, 2, 9518, 9519, 7, 86, 2, 2, 9519, 9520, 7, 81, 2, 2, 9520, 9521, 7, 67, 2, 2, 9521, 1606, 3, 2, 2, 2, 9522, 9523, 7, 75, 2, 2, 9523, 9524, 7, 80, 2, 2, 9524, 9525, 7, 85, 2, 2, 9525, 9526, 7, 86, 2, 2, 9526, 9527, 7, 84, 2, 2, 9527, 1608, 3, 2, 2, 2, 9528, 9529, 7, 75, 2, 2, 9529, 9530, 7, 80, 2, 2, 9530, 9531, 7, 86, 2, 2, 9531, 9532, 7, 71, 2, 2, 9532, 9533, 7, 84, 2, 2, 9533, 9534, 7, 75, 2, 2, 9534, 9535, 7, 81, 2, 2, 9535, 9536, 7, 84, 2, 2, 9536, 9537, 7, 84, 2, 2, 9537, 9538, 7, 75, 2, 2, 9538, 9539, 7, 80, 2, 2, 9539, 9540, 7, 73, 2, 2, 9540, 9541, 7, 80, 2, 2, 9541, 1610, 3, 2, 2, 2, 9542, 9543, 7, 75, 2, 2, 9543, 9544, 7, 80, 2, 2, 9544, 9545, 7, 86, 2, 2, 9545, 9546, 7, 71, 2, 2, 9546, 9547, 7, 84, 2, 2, 9547, 9548, 7, 85, 2, 2, 9548, 9549, 7, 71, 2, 2, 9549, 9550, 7, 69, 2, 2, 9550, 9551, 7, 86, 2, 2, 9551, 9552, 7, 85, 2, 2, 9552, 1612, 3, 2, 2, 2, 9553, 9554, 7, 75, 2, 2, 9554, 9555, 7, 85, 2, 2, 9555, 9556, 7, 69, 2, 2, 9556, 9557, 7, 78, 2, 2, 9557, 9558, 7, 81, 2, 2, 9558, 9559, 7, 85, 2, 2, 9559, 9560, 7, 71, 2, 2, 9560, 9561, 7, 70, 2, 2, 9561, 1614, 3, 2, 2, 2, 9562, 9563, 7, 75, 2, 2, 9563, 9564, 7, 85, 2, 2, 9564, 9565, 7, 71, 2, 2, 9565, 9566, 7, 79, 2, 2, 9566, 9567, 7, 82, 2, 2, 9567, 9568, 7, 86, 2, 2, 9568, 9569, 7, 91, 2, 2, 9569, 1616, 3, 2, 2, 2, 9570, 9571, 7, 75, 2, 2, 9571, 9572, 7, 85, 2, 2, 9572, 9573, 7, 80, 2, 2, 9573, 9574, 7, 87, 2, 2, 9574, 9575, 7, 78, 2, 2, 9575, 9576, 7, 78, 2, 2, 9576, 1618, 3, 2, 2, 2, 9577, 9578, 7, 75, 2, 2, 9578, 9579, 7, 85, 2, 2, 9579, 9580, 7, 85, 2, 2, 9580, 9581, 7, 75, 2, 2, 9581, 9582, 7, 79, 2, 2, 9582, 9583, 7, 82, 2, 2, 9583, 9584, 7, 78, 2, 2, 9584, 9585, 7, 71, 2, 2, 9585, 1620, 3, 2, 2, 2, 9586, 9587, 7, 75, 2, 2, 9587, 9588, 7, 85, 2, 2, 9588, 9589, 7, 97, 2, 2, 9589, 9590, 7, 72, 2, 2, 9590, 9591, 7, 84, 2, 2, 9591, 9592, 7, 71, 2, 2, 9592, 9593, 7, 71, 2, 2, 9593, 9594, 7, 97, 2, 2, 9594, 9595, 7, 78, 2, 2, 9595, 9596, 7, 81, 2, 2, 9596, 9597, 7, 69, 2, 2, 9597, 9598, 7, 77, 2, 2, 9598, 1622, 3, 2, 2, 2, 9599, 9600, 7, 75, 2, 2, 9600, 9601, 7, 85, 2, 2, 9601, 9602, 7, 97, 2, 2, 9602, 9603, 7, 75, 2, 2, 9603, 9604, 7, 82, 2, 2, 9604, 9605, 7, 88, 2, 2, 9605, 9606, 7, 54, 2, 2, 9606, 1624, 3, 2, 2, 2, 9607, 9608, 7, 75, 2, 2, 9608, 9609, 7, 85, 2, 2, 9609, 9610, 7, 97, 2, 2, 9610, 9611, 7, 75, 2, 2, 9611, 9612, 7, 82, 2, 2, 9612, 9613, 7, 88, 2, 2, 9613, 9614, 7, 54, 2, 2, 9614, 9615, 7, 97, 2, 2, 9615, 9616, 7, 69, 2, 2, 9616, 9617, 7, 81, 2, 2, 9617, 9618, 7, 79, 2, 2, 9618, 9619, 7, 82, 2, 2, 9619, 9620, 7, 67, 2, 2, 9620, 9621, 7, 86, 2, 2, 9621, 1626, 3, 2, 2, 2, 9622, 9623, 7, 75, 2, 2, 9623, 9624, 7, 85, 2, 2, 9624, 9625, 7, 97, 2, 2, 9625, 9626, 7, 75, 2, 2, 9626, 9627, 7, 82, 2, 2, 9627, 9628, 7, 88, 2, 2, 9628, 9629, 7, 54, 2, 2, 9629, 9630, 7, 97, 2, 2, 9630, 9631, 7, 79, 2, 2, 9631, 9632, 7, 67, 2, 2, 9632, 9633, 7, 82, 2, 2, 9633, 9634, 7, 82, 2, 2, 9634, 9635, 7, 71, 2, 2, 9635, 9636, 7, 70, 2, 2, 9636, 1628, 3, 2, 2, 2, 9637, 9638, 7, 75, 2, 2, 9638, 9639, 7, 85, 2, 2, 9639, 9640, 7, 97, 2, 2, 9640, 9641, 7, 75, 2, 2, 9641, 9642, 7, 82, 2, 2, 9642, 9643, 7, 88, 2, 2, 9643, 9644, 7, 56, 2, 2, 9644, 1630, 3, 2, 2, 2, 9645, 9646, 7, 75, 2, 2, 9646, 9647, 7, 85, 2, 2, 9647, 9648, 7, 97, 2, 2, 9648, 9649, 7, 87, 2, 2, 9649, 9650, 7, 85, 2, 2, 9650, 9651, 7, 71, 2, 2, 9651, 9652, 7, 70, 2, 2, 9652, 9653, 7, 97, 2, 2, 9653, 9654, 7, 78, 2, 2, 9654, 9655, 7, 81, 2, 2, 9655, 9656, 7, 69, 2, 2, 9656, 9657, 7, 77, 2, 2, 9657, 1632, 3, 2, 2, 2, 9658, 9659, 7, 78, 2, 2, 9659, 9660, 7, 67, 2, 2, 9660, 9661, 7, 85, 2, 2, 9661, 9662, 7, 86, 2, 2, 9662, 9663, 7, 97, 2, 2, 9663, 9664, 7, 75, 2, 2, 9664, 9665, 7, 80, 2, 2, 9665, 9666, 7, 85, 2, 2, 9666, 9667, 7, 71, 2, 2, 9667, 9668, 7, 84, 2, 2, 9668, 9669, 7, 86, 2, 2, 9669, 9670, 7, 97, 2, 2, 9670, 9671, 7, 75, 2, 2, 9671, 9672, 7, 70, 2, 2, 9672, 1634, 3, 2, 2, 2, 9673, 9674, 7, 78, 2, 2, 9674, 9675, 7, 69, 2, 2, 9675, 9676, 7, 67, 2, 2, 9676, 9677, 7, 85, 2, 2, 9677, 9678, 7, 71, 2, 2, 9678, 1636, 3, 2, 2, 2, 9679, 9680, 7, 78, 2, 2, 9680, 9681, 7, 71, 2, 2, 9681, 9682, 7, 67, 2, 2, 9682, 9683, 7, 85, 2, 2, 9683, 9684, 7, 86, 2, 2, 9684, 1638, 3, 2, 2, 2, 9685, 9686, 7, 78, 2, 2, 9686, 9687, 7, 71, 2, 2, 9687, 9688, 7, 80, 2, 2, 9688, 9689, 7, 73, 2, 2, 9689, 9690, 7, 86, 2, 2, 9690, 9691, 7, 74, 2, 2, 9691, 1640, 3, 2, 2, 2, 9692, 9693, 7, 78, 2, 2, 9693, 9694, 7, 75, 2, 2, 9694, 9695, 7, 80, 2, 2, 9695, 9696, 7, 71, 2, 2, 9696, 9697, 7, 72, 2, 2, 9697, 9698, 7, 84, 2, 2, 9698, 9699, 7, 81, 2, 2, 9699, 9700, 7, 79, 2, 2, 9700, 9701, 7, 86, 2, 2, 9701, 9702, 7, 71, 2, 2, 9702, 9703, 7, 90, 2, 2, 9703, 9704, 7, 86, 2, 2, 9704, 1642, 3, 2, 2, 2, 9705, 9706, 7, 78, 2, 2, 9706, 9707, 7, 75, 2, 2, 9707, 9708, 7, 80, 2, 2, 9708, 9709, 7, 71, 2, 2, 9709, 9710, 7, 72, 2, 2, 9710, 9711, 7, 84, 2, 2, 9711, 9712, 7, 81, 2, 2, 9712, 9713, 7, 79, 2, 2, 9713, 9714, 7, 89, 2, 2, 9714, 9715, 7, 77, 2, 2, 9715, 9716, 7, 68, 2, 2, 9716, 1644, 3, 2, 2, 2, 9717, 9718, 7, 78, 2, 2, 9718, 9719, 7, 75, 2, 2, 9719, 9720, 7, 80, 2, 2, 9720, 9721, 7, 71, 2, 2, 9721, 9722, 7, 85, 2, 2, 9722, 9723, 7, 86, 2, 2, 9723, 9724, 7, 84, 2, 2, 9724, 9725, 7, 75, 2, 2, 9725, 9726, 7, 80, 2, 2, 9726, 9727, 7, 73, 2, 2, 9727, 9728, 7, 72, 2, 2, 9728, 9729, 7, 84, 2, 2, 9729, 9730, 7, 81, 2, 2, 9730, 9731, 7, 79, 2, 2, 9731, 9732, 7, 86, 2, 2, 9732, 9733, 7, 71, 2, 2, 9733, 9734, 7, 90, 2, 2, 9734, 9735, 7, 86, 2, 2, 9735, 1646, 3, 2, 2, 2, 9736, 9737, 7, 78, 2, 2, 9737, 9738, 7, 75, 2, 2, 9738, 9739, 7, 80, 2, 2, 9739, 9740, 7, 71, 2, 2, 9740, 9741, 7, 85, 2, 2, 9741, 9742, 7, 86, 2, 2, 9742, 9743, 7, 84, 2, 2, 9743, 9744, 7, 75, 2, 2, 9744, 9745, 7, 80, 2, 2, 9745, 9746, 7, 73, 2, 2, 9746, 9747, 7, 72, 2, 2, 9747, 9748, 7, 84, 2, 2, 9748, 9749, 7, 81, 2, 2, 9749, 9750, 7, 79, 2, 2, 9750, 9751, 7, 89, 2, 2, 9751, 9752, 7, 77, 2, 2, 9752, 9753, 7, 68, 2, 2, 9753, 1648, 3, 2, 2, 2, 9754, 9755, 7, 78, 2, 2, 9755, 9756, 7, 80, 2, 2, 9756, 1650, 3, 2, 2, 2, 9757, 9758, 7, 78, 2, 2, 9758, 9759, 7, 81, 2, 2, 9759, 9760, 7, 67, 2, 2, 9760, 9761, 7, 70, 2, 2, 9761, 9762, 7, 97, 2, 2, 9762, 9763, 7, 72, 2, 2, 9763, 9764, 7, 75, 2, 2, 9764, 9765, 7, 78, 2, 2, 9765, 9766, 7, 71, 2, 2, 9766, 1652, 3, 2, 2, 2, 9767, 9768, 7, 78, 2, 2, 9768, 9769, 7, 81, 2, 2, 9769, 9770, 7, 69, 2, 2, 9770, 9771, 7, 67, 2, 2, 9771, 9772, 7, 86, 2, 2, 9772, 9773, 7, 71, 2, 2, 9773, 1654, 3, 2, 2, 2, 9774, 9775, 7, 78, 2, 2, 9775, 9776, 7, 81, 2, 2, 9776, 9777, 7, 73, 2, 2, 9777, 1656, 3, 2, 2, 2, 9778, 9779, 7, 78, 2, 2, 9779, 9780, 7, 81, 2, 2, 9780, 9781, 7, 73, 2, 2, 9781, 9782, 7, 51, 2, 2, 9782, 9783, 7, 50, 2, 2, 9783, 1658, 3, 2, 2, 2, 9784, 9785, 7, 78, 2, 2, 9785, 9786, 7, 81, 2, 2, 9786, 9787, 7, 73, 2, 2, 9787, 9788, 7, 52, 2, 2, 9788, 1660, 3, 2, 2, 2, 9789, 9790, 7, 78, 2, 2, 9790, 9791, 7, 81, 2, 2, 9791, 9792, 7, 89, 2, 2, 9792, 9793, 7, 71, 2, 2, 9793, 9794, 7, 84, 2, 2, 9794, 1662, 3, 2, 2, 2, 9795, 9796, 7, 78, 2, 2, 9796, 9797, 7, 82, 2, 2, 9797, 9798, 7, 67, 2, 2, 9798, 9799, 7, 70, 2, 2, 9799, 1664, 3, 2, 2, 2, 9800, 9801, 7, 78, 2, 2, 9801, 9802, 7, 86, 2, 2, 9802, 9803, 7, 84, 2, 2, 9803, 9804, 7, 75, 2, 2, 9804, 9805, 7, 79, 2, 2, 9805, 1666, 3, 2, 2, 2, 9806, 9807, 7, 79, 2, 2, 9807, 9808, 7, 67, 2, 2, 9808, 9809, 7, 77, 2, 2, 9809, 9810, 7, 71, 2, 2, 9810, 9811, 7, 70, 2, 2, 9811, 9812, 7, 67, 2, 2, 9812, 9813, 7, 86, 2, 2, 9813, 9814, 7, 71, 2, 2, 9814, 1668, 3, 2, 2, 2, 9815, 9816, 7, 79, 2, 2, 9816, 9817, 7, 67, 2, 2, 9817, 9818, 7, 77, 2, 2, 9818, 9819, 7, 71, 2, 2, 9819, 9820, 7, 86, 2, 2, 9820, 9821, 7, 75, 2, 2, 9821, 9822, 7, 79, 2, 2, 9822, 9823, 7, 71, 2, 2, 9823, 1670, 3, 2, 2, 2, 9824, 9825, 7, 79, 2, 2, 9825, 9826, 7, 67, 2, 2, 9826, 9827, 7, 77, 2, 2, 9827, 9828, 7, 71, 2, 2, 9828, 9829, 7, 97, 2, 2, 9829, 9830, 7, 85, 2, 2, 9830, 9831, 7, 71, 2, 2, 9831, 9832, 7, 86, 2, 2, 9832, 1672, 3, 2, 2, 2, 9833, 9834, 7, 79, 2, 2, 9834, 9835, 7, 67, 2, 2, 9835, 9836, 7, 85, 2, 2, 9836, 9837, 7, 86, 2, 2, 9837, 9838, 7, 71, 2, 2, 9838, 9839, 7, 84, 2, 2, 9839, 9840, 7, 97, 2, 2, 9840, 9841, 7, 82, 2, 2, 9841, 9842, 7, 81, 2, 2, 9842, 9843, 7, 85, 2, 2, 9843, 9844, 7, 97, 2, 2, 9844, 9845, 7, 89, 2, 2, 9845, 9846, 7, 67, 2, 2, 9846, 9847, 7, 75, 2, 2, 9847, 9848, 7, 86, 2, 2, 9848, 1674, 3, 2, 2, 2, 9849, 9850, 7, 79, 2, 2, 9850, 9851, 7, 68, 2, 2, 9851, 9852, 7, 84, 2, 2, 9852, 9853, 7, 69, 2, 2, 9853, 9854, 7, 81, 2, 2, 9854, 9855, 7, 80, 2, 2, 9855, 9856, 7, 86, 2, 2, 9856, 9857, 7, 67, 2, 2, 9857, 9858, 7, 75, 2, 2, 9858, 9859, 7, 80, 2, 2, 9859, 9860, 7, 85, 2, 2, 9860, 1676, 3, 2, 2, 2, 9861, 9862, 7, 79, 2, 2, 9862, 9863, 7, 68, 2, 2, 9863, 9864, 7, 84, 2, 2, 9864, 9865, 7, 70, 2, 2, 9865, 9866, 7, 75, 2, 2, 9866, 9867, 7, 85, 2, 2, 9867, 9868, 7, 76, 2, 2, 9868, 9869, 7, 81, 2, 2, 9869, 9870, 7, 75, 2, 2, 9870, 9871, 7, 80, 2, 2, 9871, 9872, 7, 86, 2, 2, 9872, 1678, 3, 2, 2, 2, 9873, 9874, 7, 79, 2, 2, 9874, 9875, 7, 68, 2, 2, 9875, 9876, 7, 84, 2, 2, 9876, 9877, 7, 71, 2, 2, 9877, 9878, 7, 83, 2, 2, 9878, 9879, 7, 87, 2, 2, 9879, 9880, 7, 67, 2, 2, 9880, 9881, 7, 78, 2, 2, 9881, 1680, 3, 2, 2, 2, 9882, 9883, 7, 79, 2, 2, 9883, 9884, 7, 68, 2, 2, 9884, 9885, 7, 84, 2, 2, 9885, 9886, 7, 75, 2, 2, 9886, 9887, 7, 80, 2, 2, 9887, 9888, 7, 86, 2, 2, 9888, 9889, 7, 71, 2, 2, 9889, 9890, 7, 84, 2, 2, 9890, 9891, 7, 85, 2, 2, 9891, 9892, 7, 71, 2, 2, 9892, 9893, 7, 69, 2, 2, 9893, 9894, 7, 86, 2, 2, 9894, 9895, 7, 85, 2, 2, 9895, 1682, 3, 2, 2, 2, 9896, 9897, 7, 79, 2, 2, 9897, 9898, 7, 68, 2, 2, 9898, 9899, 7, 84, 2, 2, 9899, 9900, 7, 81, 2, 2, 9900, 9901, 7, 88, 2, 2, 9901, 9902, 7, 71, 2, 2, 9902, 9903, 7, 84, 2, 2, 9903, 9904, 7, 78, 2, 2, 9904, 9905, 7, 67, 2, 2, 9905, 9906, 7, 82, 2, 2, 9906, 9907, 7, 85, 2, 2, 9907, 1684, 3, 2, 2, 2, 9908, 9909, 7, 79, 2, 2, 9909, 9910, 7, 68, 2, 2, 9910, 9911, 7, 84, 2, 2, 9911, 9912, 7, 86, 2, 2, 9912, 9913, 7, 81, 2, 2, 9913, 9914, 7, 87, 2, 2, 9914, 9915, 7, 69, 2, 2, 9915, 9916, 7, 74, 2, 2, 9916, 9917, 7, 71, 2, 2, 9917, 9918, 7, 85, 2, 2, 9918, 1686, 3, 2, 2, 2, 9919, 9920, 7, 79, 2, 2, 9920, 9921, 7, 68, 2, 2, 9921, 9922, 7, 84, 2, 2, 9922, 9923, 7, 89, 2, 2, 9923, 9924, 7, 75, 2, 2, 9924, 9925, 7, 86, 2, 2, 9925, 9926, 7, 74, 2, 2, 9926, 9927, 7, 75, 2, 2, 9927, 9928, 7, 80, 2, 2, 9928, 1688, 3, 2, 2, 2, 9929, 9930, 7, 79, 2, 2, 9930, 9931, 7, 70, 2, 2, 9931, 9932, 7, 55, 2, 2, 9932, 1690, 3, 2, 2, 2, 9933, 9934, 7, 79, 2, 2, 9934, 9935, 7, 78, 2, 2, 9935, 9936, 7, 75, 2, 2, 9936, 9937, 7, 80, 2, 2, 9937, 9938, 7, 71, 2, 2, 9938, 9939, 7, 72, 2, 2, 9939, 9940, 7, 84, 2, 2, 9940, 9941, 7, 81, 2, 2, 9941, 9942, 7, 79, 2, 2, 9942, 9943, 7, 86, 2, 2, 9943, 9944, 7, 71, 2, 2, 9944, 9945, 7, 90, 2, 2, 9945, 9946, 7, 86, 2, 2, 9946, 1692, 3, 2, 2, 2, 9947, 9948, 7, 79, 2, 2, 9948, 9949, 7, 78, 2, 2, 9949, 9950, 7, 75, 2, 2, 9950, 9951, 7, 80, 2, 2, 9951, 9952, 7, 71, 2, 2, 9952, 9953, 7, 72, 2, 2, 9953, 9954, 7, 84, 2, 2, 9954, 9955, 7, 81, 2, 2, 9955, 9956, 7, 79, 2, 2, 9956, 9957, 7, 89, 2, 2, 9957, 9958, 7, 77, 2, 2, 9958, 9959, 7, 68, 2, 2, 9959, 1694, 3, 2, 2, 2, 9960, 9961, 7, 79, 2, 2, 9961, 9962, 7, 81, 2, 2, 9962, 9963, 7, 80, 2, 2, 9963, 9964, 7, 86, 2, 2, 9964, 9965, 7, 74, 2, 2, 9965, 9966, 7, 80, 2, 2, 9966, 9967, 7, 67, 2, 2, 9967, 9968, 7, 79, 2, 2, 9968, 9969, 7, 71, 2, 2, 9969, 1696, 3, 2, 2, 2, 9970, 9971, 7, 79, 2, 2, 9971, 9972, 7, 82, 2, 2, 9972, 9973, 7, 81, 2, 2, 9973, 9974, 7, 75, 2, 2, 9974, 9975, 7, 80, 2, 2, 9975, 9976, 7, 86, 2, 2, 9976, 9977, 7, 72, 2, 2, 9977, 9978, 7, 84, 2, 2, 9978, 9979, 7, 81, 2, 2, 9979, 9980, 7, 79, 2, 2, 9980, 9981, 7, 86, 2, 2, 9981, 9982, 7, 71, 2, 2, 9982, 9983, 7, 90, 2, 2, 9983, 9984, 7, 86, 2, 2, 9984, 1698, 3, 2, 2, 2, 9985, 9986, 7, 79, 2, 2, 9986, 9987, 7, 82, 2, 2, 9987, 9988, 7, 81, 2, 2, 9988, 9989, 7, 75, 2, 2, 9989, 9990, 7, 80, 2, 2, 9990, 9991, 7, 86, 2, 2, 9991, 9992, 7, 72, 2, 2, 9992, 9993, 7, 84, 2, 2, 9993, 9994, 7, 81, 2, 2, 9994, 9995, 7, 79, 2, 2, 9995, 9996, 7, 89, 2, 2, 9996, 9997, 7, 77, 2, 2, 9997, 9998, 7, 68, 2, 2, 9998, 1700, 3, 2, 2, 2, 9999, 10000, 7, 79, 2, 2, 10000, 10001, 7, 82, 2, 2, 10001, 10002, 7, 81, 2, 2, 10002, 10003, 7, 78, 2, 2, 10003, 10004, 7, 91, 2, 2, 10004, 10005, 7, 72, 2, 2, 10005, 10006, 7, 84, 2, 2, 10006, 10007, 7, 81, 2, 2, 10007, 10008, 7, 79, 2, 2, 10008, 10009, 7, 86, 2, 2, 10009, 10010, 7, 71, 2, 2, 10010, 10011, 7, 90, 2, 2, 10011, 10012, 7, 86, 2, 2, 10012, 1702, 3, 2, 2, 2, 10013, 10014, 7, 79, 2, 2, 10014, 10015, 7, 82, 2, 2, 10015, 10016, 7, 81, 2, 2, 10016, 10017, 7, 78, 2, 2, 10017, 10018, 7, 91, 2, 2, 10018, 10019, 7, 72, 2, 2, 10019, 10020, 7, 84, 2, 2, 10020, 10021, 7, 81, 2, 2, 10021, 10022, 7, 79, 2, 2, 10022, 10023, 7, 89, 2, 2, 10023, 10024, 7, 77, 2, 2, 10024, 10025, 7, 68, 2, 2, 10025, 1704, 3, 2, 2, 2, 10026, 10027, 7, 79, 2, 2, 10027, 10028, 7, 87, 2, 2, 10028, 10029, 7, 78, 2, 2, 10029, 10030, 7, 86, 2, 2, 10030, 10031, 7, 75, 2, 2, 10031, 10032, 7, 78, 2, 2, 10032, 10033, 7, 75, 2, 2, 10033, 10034, 7, 80, 2, 2, 10034, 10035, 7, 71, 2, 2, 10035, 10036, 7, 85, 2, 2, 10036, 10037, 7, 86, 2, 2, 10037, 10038, 7, 84, 2, 2, 10038, 10039, 7, 75, 2, 2, 10039, 10040, 7, 80, 2, 2, 10040, 10041, 7, 73, 2, 2, 10041, 10042, 7, 72, 2, 2, 10042, 10043, 7, 84, 2, 2, 10043, 10044, 7, 81, 2, 2, 10044, 10045, 7, 79, 2, 2, 10045, 10046, 7, 86, 2, 2, 10046, 10047, 7, 71, 2, 2, 10047, 10048, 7, 90, 2, 2, 10048, 10049, 7, 86, 2, 2, 10049, 1706, 3, 2, 2, 2, 10050, 10051, 7, 79, 2, 2, 10051, 10052, 7, 87, 2, 2, 10052, 10053, 7, 78, 2, 2, 10053, 10054, 7, 86, 2, 2, 10054, 10055, 7, 75, 2, 2, 10055, 10056, 7, 78, 2, 2, 10056, 10057, 7, 75, 2, 2, 10057, 10058, 7, 80, 2, 2, 10058, 10059, 7, 71, 2, 2, 10059, 10060, 7, 85, 2, 2, 10060, 10061, 7, 86, 2, 2, 10061, 10062, 7, 84, 2, 2, 10062, 10063, 7, 75, 2, 2, 10063, 10064, 7, 80, 2, 2, 10064, 10065, 7, 73, 2, 2, 10065, 10066, 7, 72, 2, 2, 10066, 10067, 7, 84, 2, 2, 10067, 10068, 7, 81, 2, 2, 10068, 10069, 7, 79, 2, 2, 10069, 10070, 7, 89, 2, 2, 10070, 10071, 7, 77, 2, 2, 10071, 10072, 7, 68, 2, 2, 10072, 1708, 3, 2, 2, 2, 10073, 10074, 7, 79, 2, 2, 10074, 10075, 7, 87, 2, 2, 10075, 10076, 7, 78, 2, 2, 10076, 10077, 7, 86, 2, 2, 10077, 10078, 7, 75, 2, 2, 10078, 10079, 7, 82, 2, 2, 10079, 10080, 7, 81, 2, 2, 10080, 10081, 7, 75, 2, 2, 10081, 10082, 7, 80, 2, 2, 10082, 10083, 7, 86, 2, 2, 10083, 10084, 7, 72, 2, 2, 10084, 10085, 7, 84, 2, 2, 10085, 10086, 7, 81, 2, 2, 10086, 10087, 7, 79, 2, 2, 10087, 10088, 7, 86, 2, 2, 10088, 10089, 7, 71, 2, 2, 10089, 10090, 7, 90, 2, 2, 10090, 10091, 7, 86, 2, 2, 10091, 1710, 3, 2, 2, 2, 10092, 10093, 7, 79, 2, 2, 10093, 10094, 7, 87, 2, 2, 10094, 10095, 7, 78, 2, 2, 10095, 10096, 7, 86, 2, 2, 10096, 10097, 7, 75, 2, 2, 10097, 10098, 7, 82, 2, 2, 10098, 10099, 7, 81, 2, 2, 10099, 10100, 7, 75, 2, 2, 10100, 10101, 7, 80, 2, 2, 10101, 10102, 7, 86, 2, 2, 10102, 10103, 7, 72, 2, 2, 10103, 10104, 7, 84, 2, 2, 10104, 10105, 7, 81, 2, 2, 10105, 10106, 7, 79, 2, 2, 10106, 10107, 7, 89, 2, 2, 10107, 10108, 7, 77, 2, 2, 10108, 10109, 7, 68, 2, 2, 10109, 1712, 3, 2, 2, 2, 10110, 10111, 7, 79, 2, 2, 10111, 10112, 7, 87, 2, 2, 10112, 10113, 7, 78, 2, 2, 10113, 10114, 7, 86, 2, 2, 10114, 10115, 7, 75, 2, 2, 10115, 10116, 7, 82, 2, 2, 10116, 10117, 7, 81, 2, 2, 10117, 10118, 7, 78, 2, 2, 10118, 10119, 7, 91, 2, 2, 10119, 10120, 7, 73, 2, 2, 10120, 10121, 7, 81, 2, 2, 10121, 10122, 7, 80, 2, 2, 10122, 10123, 7, 72, 2, 2, 10123, 10124, 7, 84, 2, 2, 10124, 10125, 7, 81, 2, 2, 10125, 10126, 7, 79, 2, 2, 10126, 10127, 7, 86, 2, 2, 10127, 10128, 7, 71, 2, 2, 10128, 10129, 7, 90, 2, 2, 10129, 10130, 7, 86, 2, 2, 10130, 1714, 3, 2, 2, 2, 10131, 10132, 7, 79, 2, 2, 10132, 10133, 7, 87, 2, 2, 10133, 10134, 7, 78, 2, 2, 10134, 10135, 7, 86, 2, 2, 10135, 10136, 7, 75, 2, 2, 10136, 10137, 7, 82, 2, 2, 10137, 10138, 7, 81, 2, 2, 10138, 10139, 7, 78, 2, 2, 10139, 10140, 7, 91, 2, 2, 10140, 10141, 7, 73, 2, 2, 10141, 10142, 7, 81, 2, 2, 10142, 10143, 7, 80, 2, 2, 10143, 10144, 7, 72, 2, 2, 10144, 10145, 7, 84, 2, 2, 10145, 10146, 7, 81, 2, 2, 10146, 10147, 7, 79, 2, 2, 10147, 10148, 7, 89, 2, 2, 10148, 10149, 7, 77, 2, 2, 10149, 10150, 7, 68, 2, 2, 10150, 1716, 3, 2, 2, 2, 10151, 10152, 7, 80, 2, 2, 10152, 10153, 7, 67, 2, 2, 10153, 10154, 7, 79, 2, 2, 10154, 10155, 7, 71, 2, 2, 10155, 10156, 7, 97, 2, 2, 10156, 10157, 7, 69, 2, 2, 10157, 10158, 7, 81, 2, 2, 10158, 10159, 7, 80, 2, 2, 10159, 10160, 7, 85, 2, 2, 10160, 10161, 7, 86, 2, 2, 10161, 1718, 3, 2, 2, 2, 10162, 10163, 7, 80, 2, 2, 10163, 10164, 7, 87, 2, 2, 10164, 10165, 7, 78, 2, 2, 10165, 10166, 7, 78, 2, 2, 10166, 10167, 7, 75, 2, 2, 10167, 10168, 7, 72, 2, 2, 10168, 1720, 3, 2, 2, 2, 10169, 10170, 7, 80, 2, 2, 10170, 10171, 7, 87, 2, 2, 10171, 10172, 7, 79, 2, 2, 10172, 10173, 7, 73, 2, 2, 10173, 10174, 7, 71, 2, 2, 10174, 10175, 7, 81, 2, 2, 10175, 10176, 7, 79, 2, 2, 10176, 10177, 7, 71, 2, 2, 10177, 10178, 7, 86, 2, 2, 10178, 10179, 7, 84, 2, 2, 10179, 10180, 7, 75, 2, 2, 10180, 10181, 7, 71, 2, 2, 10181, 10182, 7, 85, 2, 2, 10182, 1722, 3, 2, 2, 2, 10183, 10184, 7, 80, 2, 2, 10184, 10185, 7, 87, 2, 2, 10185, 10186, 7, 79, 2, 2, 10186, 10187, 7, 75, 2, 2, 10187, 10188, 7, 80, 2, 2, 10188, 10189, 7, 86, 2, 2, 10189, 10190, 7, 71, 2, 2, 10190, 10191, 7, 84, 2, 2, 10191, 10192, 7, 75, 2, 2, 10192, 10193, 7, 81, 2, 2, 10193, 10194, 7, 84, 2, 2, 10194, 10195, 7, 84, 2, 2, 10195, 10196, 7, 75, 2, 2, 10196, 10197, 7, 80, 2, 2, 10197, 10198, 7, 73, 2, 2, 10198, 10199, 7, 85, 2, 2, 10199, 1724, 3, 2, 2, 2, 10200, 10201, 7, 80, 2, 2, 10201, 10202, 7, 87, 2, 2, 10202, 10203, 7, 79, 2, 2, 10203, 10204, 7, 82, 2, 2, 10204, 10205, 7, 81, 2, 2, 10205, 10206, 7, 75, 2, 2, 10206, 10207, 7, 80, 2, 2, 10207, 10208, 7, 86, 2, 2, 10208, 10209, 7, 85, 2, 2, 10209, 1726, 3, 2, 2, 2, 10210, 10211, 7, 81, 2, 2, 10211, 10212, 7, 69, 2, 2, 10212, 10213, 7, 86, 2, 2, 10213, 1728, 3, 2, 2, 2, 10214, 10215, 7, 81, 2, 2, 10215, 10216, 7, 69, 2, 2, 10216, 10217, 7, 86, 2, 2, 10217, 10218, 7, 71, 2, 2, 10218, 10219, 7, 86, 2, 2, 10219, 10220, 7, 97, 2, 2, 10220, 10221, 7, 78, 2, 2, 10221, 10222, 7, 71, 2, 2, 10222, 10223, 7, 80, 2, 2, 10223, 10224, 7, 73, 2, 2, 10224, 10225, 7, 86, 2, 2, 10225, 10226, 7, 74, 2, 2, 10226, 1730, 3, 2, 2, 2, 10227, 10228, 7, 81, 2, 2, 10228, 10229, 7, 84, 2, 2, 10229, 10230, 7, 70, 2, 2, 10230, 1732, 3, 2, 2, 2, 10231, 10232, 7, 81, 2, 2, 10232, 10233, 7, 88, 2, 2, 10233, 10234, 7, 71, 2, 2, 10234, 10235, 7, 84, 2, 2, 10235, 10236, 7, 78, 2, 2, 10236, 10237, 7, 67, 2, 2, 10237, 10238, 7, 82, 2, 2, 10238, 10239, 7, 85, 2, 2, 10239, 1734, 3, 2, 2, 2, 10240, 10241, 7, 82, 2, 2, 10241, 10242, 7, 71, 2, 2, 10242, 10243, 7, 84, 2, 2, 10243, 10244, 7, 75, 2, 2, 10244, 10245, 7, 81, 2, 2, 10245, 10246, 7, 70, 2, 2, 10246, 10247, 7, 97, 2, 2, 10247, 10248, 7, 67, 2, 2, 10248, 10249, 7, 70, 2, 2, 10249, 10250, 7, 70, 2, 2, 10250, 1736, 3, 2, 2, 2, 10251, 10252, 7, 82, 2, 2, 10252, 10253, 7, 71, 2, 2, 10253, 10254, 7, 84, 2, 2, 10254, 10255, 7, 75, 2, 2, 10255, 10256, 7, 81, 2, 2, 10256, 10257, 7, 70, 2, 2, 10257, 10258, 7, 97, 2, 2, 10258, 10259, 7, 70, 2, 2, 10259, 10260, 7, 75, 2, 2, 10260, 10261, 7, 72, 2, 2, 10261, 10262, 7, 72, 2, 2, 10262, 1738, 3, 2, 2, 2, 10263, 10264, 7, 82, 2, 2, 10264, 10265, 7, 75, 2, 2, 10265, 1740, 3, 2, 2, 2, 10266, 10267, 7, 82, 2, 2, 10267, 10268, 7, 81, 2, 2, 10268, 10269, 7, 75, 2, 2, 10269, 10270, 7, 80, 2, 2, 10270, 10271, 7, 86, 2, 2, 10271, 10272, 7, 72, 2, 2, 10272, 10273, 7, 84, 2, 2, 10273, 10274, 7, 81, 2, 2, 10274, 10275, 7, 79, 2, 2, 10275, 10276, 7, 86, 2, 2, 10276, 10277, 7, 71, 2, 2, 10277, 10278, 7, 90, 2, 2, 10278, 10279, 7, 86, 2, 2, 10279, 1742, 3, 2, 2, 2, 10280, 10281, 7, 82, 2, 2, 10281, 10282, 7, 81, 2, 2, 10282, 10283, 7, 75, 2, 2, 10283, 10284, 7, 80, 2, 2, 10284, 10285, 7, 86, 2, 2, 10285, 10286, 7, 72, 2, 2, 10286, 10287, 7, 84, 2, 2, 10287, 10288, 7, 81, 2, 2, 10288, 10289, 7, 79, 2, 2, 10289, 10290, 7, 89, 2, 2, 10290, 10291, 7, 77, 2, 2, 10291, 10292, 7, 68, 2, 2, 10292, 1744, 3, 2, 2, 2, 10293, 10294, 7, 82, 2, 2, 10294, 10295, 7, 81, 2, 2, 10295, 10296, 7, 75, 2, 2, 10296, 10297, 7, 80, 2, 2, 10297, 10298, 7, 86, 2, 2, 10298, 10299, 7, 80, 2, 2, 10299, 1746, 3, 2, 2, 2, 10300, 10301, 7, 82, 2, 2, 10301, 10302, 7, 81, 2, 2, 10302, 10303, 7, 78, 2, 2, 10303, 10304, 7, 91, 2, 2, 10304, 10305, 7, 72, 2, 2, 10305, 10306, 7, 84, 2, 2, 10306, 10307, 7, 81, 2, 2, 10307, 10308, 7, 79, 2, 2, 10308, 10309, 7, 86, 2, 2, 10309, 10310, 7, 71, 2, 2, 10310, 10311, 7, 90, 2, 2, 10311, 10312, 7, 86, 2, 2, 10312, 1748, 3, 2, 2, 2, 10313, 10314, 7, 82, 2, 2, 10314, 10315, 7, 81, 2, 2, 10315, 10316, 7, 78, 2, 2, 10316, 10317, 7, 91, 2, 2, 10317, 10318, 7, 72, 2, 2, 10318, 10319, 7, 84, 2, 2, 10319, 10320, 7, 81, 2, 2, 10320, 10321, 7, 79, 2, 2, 10321, 10322, 7, 89, 2, 2, 10322, 10323, 7, 77, 2, 2, 10323, 10324, 7, 68, 2, 2, 10324, 1750, 3, 2, 2, 2, 10325, 10326, 7, 82, 2, 2, 10326, 10327, 7, 81, 2, 2, 10327, 10328, 7, 78, 2, 2, 10328, 10329, 7, 91, 2, 2, 10329, 10330, 7, 73, 2, 2, 10330, 10331, 7, 81, 2, 2, 10331, 10332, 7, 80, 2, 2, 10332, 10333, 7, 72, 2, 2, 10333, 10334, 7, 84, 2, 2, 10334, 10335, 7, 81, 2, 2, 10335, 10336, 7, 79, 2, 2, 10336, 10337, 7, 86, 2, 2, 10337, 10338, 7, 71, 2, 2, 10338, 10339, 7, 90, 2, 2, 10339, 10340, 7, 86, 2, 2, 10340, 1752, 3, 2, 2, 2, 10341, 10342, 7, 82, 2, 2, 10342, 10343, 7, 81, 2, 2, 10343, 10344, 7, 78, 2, 2, 10344, 10345, 7, 91, 2, 2, 10345, 10346, 7, 73, 2, 2, 10346, 10347, 7, 81, 2, 2, 10347, 10348, 7, 80, 2, 2, 10348, 10349, 7, 72, 2, 2, 10349, 10350, 7, 84, 2, 2, 10350, 10351, 7, 81, 2, 2, 10351, 10352, 7, 79, 2, 2, 10352, 10353, 7, 89, 2, 2, 10353, 10354, 7, 77, 2, 2, 10354, 10355, 7, 68, 2, 2, 10355, 1754, 3, 2, 2, 2, 10356, 10357, 7, 82, 2, 2, 10357, 10358, 7, 81, 2, 2, 10358, 10359, 7, 89, 2, 2, 10359, 1756, 3, 2, 2, 2, 10360, 10361, 7, 82, 2, 2, 10361, 10362, 7, 81, 2, 2, 10362, 10363, 7, 89, 2, 2, 10363, 10364, 7, 71, 2, 2, 10364, 10365, 7, 84, 2, 2, 10365, 1758, 3, 2, 2, 2, 10366, 10367, 7, 83, 2, 2, 10367, 10368, 7, 87, 2, 2, 10368, 10369, 7, 81, 2, 2, 10369, 10370, 7, 86, 2, 2, 10370, 10371, 7, 71, 2, 2, 10371, 1760, 3, 2, 2, 2, 10372, 10373, 7, 84, 2, 2, 10373, 10374, 7, 67, 2, 2, 10374, 10375, 7, 70, 2, 2, 10375, 10376, 7, 75, 2, 2, 10376, 10377, 7, 67, 2, 2, 10377, 10378, 7, 80, 2, 2, 10378, 10379, 7, 85, 2, 2, 10379, 1762, 3, 2, 2, 2, 10380, 10381, 7, 84, 2, 2, 10381, 10382, 7, 67, 2, 2, 10382, 10383, 7, 80, 2, 2, 10383, 10384, 7, 70, 2, 2, 10384, 1764, 3, 2, 2, 2, 10385, 10386, 7, 84, 2, 2, 10386, 10387, 7, 67, 2, 2, 10387, 10388, 7, 80, 2, 2, 10388, 10389, 7, 70, 2, 2, 10389, 10390, 7, 81, 2, 2, 10390, 10391, 7, 79, 2, 2, 10391, 10392, 7, 97, 2, 2, 10392, 10393, 7, 68, 2, 2, 10393, 10394, 7, 91, 2, 2, 10394, 10395, 7, 86, 2, 2, 10395, 10396, 7, 71, 2, 2, 10396, 10397, 7, 85, 2, 2, 10397, 1766, 3, 2, 2, 2, 10398, 10399, 7, 84, 2, 2, 10399, 10400, 7, 71, 2, 2, 10400, 10401, 7, 78, 2, 2, 10401, 10402, 7, 71, 2, 2, 10402, 10403, 7, 67, 2, 2, 10403, 10404, 7, 85, 2, 2, 10404, 10405, 7, 71, 2, 2, 10405, 10406, 7, 97, 2, 2, 10406, 10407, 7, 78, 2, 2, 10407, 10408, 7, 81, 2, 2, 10408, 10409, 7, 69, 2, 2, 10409, 10410, 7, 77, 2, 2, 10410, 1768, 3, 2, 2, 2, 10411, 10412, 7, 84, 2, 2, 10412, 10413, 7, 71, 2, 2, 10413, 10414, 7, 88, 2, 2, 10414, 10415, 7, 71, 2, 2, 10415, 10416, 7, 84, 2, 2, 10416, 10417, 7, 85, 2, 2, 10417, 10418, 7, 71, 2, 2, 10418, 1770, 3, 2, 2, 2, 10419, 10420, 7, 84, 2, 2, 10420, 10421, 7, 81, 2, 2, 10421, 10422, 7, 87, 2, 2, 10422, 10423, 7, 80, 2, 2, 10423, 10424, 7, 70, 2, 2, 10424, 1772, 3, 2, 2, 2, 10425, 10426, 7, 84, 2, 2, 10426, 10427, 7, 81, 2, 2, 10427, 10428, 7, 89, 2, 2, 10428, 10429, 7, 97, 2, 2, 10429, 10430, 7, 69, 2, 2, 10430, 10431, 7, 81, 2, 2, 10431, 10432, 7, 87, 2, 2, 10432, 10433, 7, 80, 2, 2, 10433, 10434, 7, 86, 2, 2, 10434, 1774, 3, 2, 2, 2, 10435, 10436, 7, 84, 2, 2, 10436, 10437, 7, 82, 2, 2, 10437, 10438, 7, 67, 2, 2, 10438, 10439, 7, 70, 2, 2, 10439, 1776, 3, 2, 2, 2, 10440, 10441, 7, 84, 2, 2, 10441, 10442, 7, 86, 2, 2, 10442, 10443, 7, 84, 2, 2, 10443, 10444, 7, 75, 2, 2, 10444, 10445, 7, 79, 2, 2, 10445, 1778, 3, 2, 2, 2, 10446, 10447, 7, 85, 2, 2, 10447, 10448, 7, 71, 2, 2, 10448, 10449, 7, 69, 2, 2, 10449, 10450, 7, 97, 2, 2, 10450, 10451, 7, 86, 2, 2, 10451, 10452, 7, 81, 2, 2, 10452, 10453, 7, 97, 2, 2, 10453, 10454, 7, 86, 2, 2, 10454, 10455, 7, 75, 2, 2, 10455, 10456, 7, 79, 2, 2, 10456, 10457, 7, 71, 2, 2, 10457, 1780, 3, 2, 2, 2, 10458, 10459, 7, 85, 2, 2, 10459, 10460, 7, 71, 2, 2, 10460, 10461, 7, 85, 2, 2, 10461, 10462, 7, 85, 2, 2, 10462, 10463, 7, 75, 2, 2, 10463, 10464, 7, 81, 2, 2, 10464, 10465, 7, 80, 2, 2, 10465, 10466, 7, 97, 2, 2, 10466, 10467, 7, 87, 2, 2, 10467, 10468, 7, 85, 2, 2, 10468, 10469, 7, 71, 2, 2, 10469, 10470, 7, 84, 2, 2, 10470, 1782, 3, 2, 2, 2, 10471, 10472, 7, 85, 2, 2, 10472, 10473, 7, 74, 2, 2, 10473, 10474, 7, 67, 2, 2, 10474, 1784, 3, 2, 2, 2, 10475, 10476, 7, 85, 2, 2, 10476, 10477, 7, 74, 2, 2, 10477, 10478, 7, 67, 2, 2, 10478, 10479, 7, 51, 2, 2, 10479, 1786, 3, 2, 2, 2, 10480, 10481, 7, 85, 2, 2, 10481, 10482, 7, 74, 2, 2, 10482, 10483, 7, 67, 2, 2, 10483, 10484, 7, 52, 2, 2, 10484, 1788, 3, 2, 2, 2, 10485, 10486, 7, 85, 2, 2, 10486, 10487, 7, 69, 2, 2, 10487, 10488, 7, 74, 2, 2, 10488, 10489, 7, 71, 2, 2, 10489, 10490, 7, 79, 2, 2, 10490, 10491, 7, 67, 2, 2, 10491, 10492, 7, 97, 2, 2, 10492, 10493, 7, 80, 2, 2, 10493, 10494, 7, 67, 2, 2, 10494, 10495, 7, 79, 2, 2, 10495, 10496, 7, 71, 2, 2, 10496, 1790, 3, 2, 2, 2, 10497, 10498, 7, 85, 2, 2, 10498, 10499, 7, 75, 2, 2, 10499, 10500, 7, 73, 2, 2, 10500, 10501, 7, 80, 2, 2, 10501, 1792, 3, 2, 2, 2, 10502, 10503, 7, 85, 2, 2, 10503, 10504, 7, 75, 2, 2, 10504, 10505, 7, 80, 2, 2, 10505, 1794, 3, 2, 2, 2, 10506, 10507, 7, 85, 2, 2, 10507, 10508, 7, 78, 2, 2, 10508, 10509, 7, 71, 2, 2, 10509, 10510, 7, 71, 2, 2, 10510, 10511, 7, 82, 2, 2, 10511, 1796, 3, 2, 2, 2, 10512, 10513, 7, 85, 2, 2, 10513, 10514, 7, 81, 2, 2, 10514, 10515, 7, 87, 2, 2, 10515, 10516, 7, 80, 2, 2, 10516, 10517, 7, 70, 2, 2, 10517, 10518, 7, 71, 2, 2, 10518, 10519, 7, 90, 2, 2, 10519, 1798, 3, 2, 2, 2, 10520, 10521, 7, 85, 2, 2, 10521, 10522, 7, 83, 2, 2, 10522, 10523, 7, 78, 2, 2, 10523, 10524, 7, 97, 2, 2, 10524, 10525, 7, 86, 2, 2, 10525, 10526, 7, 74, 2, 2, 10526, 10527, 7, 84, 2, 2, 10527, 10528, 7, 71, 2, 2, 10528, 10529, 7, 67, 2, 2, 10529, 10530, 7, 70, 2, 2, 10530, 10531, 7, 97, 2, 2, 10531, 10532, 7, 89, 2, 2, 10532, 10533, 7, 67, 2, 2, 10533, 10534, 7, 75, 2, 2, 10534, 10535, 7, 86, 2, 2, 10535, 10536, 7, 97, 2, 2, 10536, 10537, 7, 67, 2, 2, 10537, 10538, 7, 72, 2, 2, 10538, 10539, 7, 86, 2, 2, 10539, 10540, 7, 71, 2, 2, 10540, 10541, 7, 84, 2, 2, 10541, 10542, 7, 97, 2, 2, 10542, 10543, 7, 73, 2, 2, 10543, 10544, 7, 86, 2, 2, 10544, 10545, 7, 75, 2, 2, 10545, 10546, 7, 70, 2, 2, 10546, 10547, 7, 85, 2, 2, 10547, 1800, 3, 2, 2, 2, 10548, 10549, 7, 85, 2, 2, 10549, 10550, 7, 83, 2, 2, 10550, 10551, 7, 84, 2, 2, 10551, 10552, 7, 86, 2, 2, 10552, 1802, 3, 2, 2, 2, 10553, 10554, 7, 85, 2, 2, 10554, 10555, 7, 84, 2, 2, 10555, 10556, 7, 75, 2, 2, 10556, 10557, 7, 70, 2, 2, 10557, 1804, 3, 2, 2, 2, 10558, 10559, 7, 85, 2, 2, 10559, 10560, 7, 86, 2, 2, 10560, 10561, 7, 67, 2, 2, 10561, 10562, 7, 84, 2, 2, 10562, 10563, 7, 86, 2, 2, 10563, 10564, 7, 82, 2, 2, 10564, 10565, 7, 81, 2, 2, 10565, 10566, 7, 75, 2, 2, 10566, 10567, 7, 80, 2, 2, 10567, 10568, 7, 86, 2, 2, 10568, 1806, 3, 2, 2, 2, 10569, 10570, 7, 85, 2, 2, 10570, 10571, 7, 86, 2, 2, 10571, 10572, 7, 84, 2, 2, 10572, 10573, 7, 69, 2, 2, 10573, 10574, 7, 79, 2, 2, 10574, 10575, 7, 82, 2, 2, 10575, 1808, 3, 2, 2, 2, 10576, 10577, 7, 85, 2, 2, 10577, 10578, 7, 86, 2, 2, 10578, 10579, 7, 84, 2, 2, 10579, 10580, 7, 97, 2, 2, 10580, 10581, 7, 86, 2, 2, 10581, 10582, 7, 81, 2, 2, 10582, 10583, 7, 97, 2, 2, 10583, 10584, 7, 70, 2, 2, 10584, 10585, 7, 67, 2, 2, 10585, 10586, 7, 86, 2, 2, 10586, 10587, 7, 71, 2, 2, 10587, 1810, 3, 2, 2, 2, 10588, 10589, 7, 85, 2, 2, 10589, 10590, 7, 86, 2, 2, 10590, 10591, 7, 97, 2, 2, 10591, 10592, 7, 67, 2, 2, 10592, 10593, 7, 84, 2, 2, 10593, 10594, 7, 71, 2, 2, 10594, 10595, 7, 67, 2, 2, 10595, 1812, 3, 2, 2, 2, 10596, 10597, 7, 85, 2, 2, 10597, 10598, 7, 86, 2, 2, 10598, 10599, 7, 97, 2, 2, 10599, 10600, 7, 67, 2, 2, 10600, 10601, 7, 85, 2, 2, 10601, 10602, 7, 68, 2, 2, 10602, 10603, 7, 75, 2, 2, 10603, 10604, 7, 80, 2, 2, 10604, 10605, 7, 67, 2, 2, 10605, 10606, 7, 84, 2, 2, 10606, 10607, 7, 91, 2, 2, 10607, 1814, 3, 2, 2, 2, 10608, 10609, 7, 85, 2, 2, 10609, 10610, 7, 86, 2, 2, 10610, 10611, 7, 97, 2, 2, 10611, 10612, 7, 67, 2, 2, 10612, 10613, 7, 85, 2, 2, 10613, 10614, 7, 86, 2, 2, 10614, 10615, 7, 71, 2, 2, 10615, 10616, 7, 90, 2, 2, 10616, 10617, 7, 86, 2, 2, 10617, 1816, 3, 2, 2, 2, 10618, 10619, 7, 85, 2, 2, 10619, 10620, 7, 86, 2, 2, 10620, 10621, 7, 97, 2, 2, 10621, 10622, 7, 67, 2, 2, 10622, 10623, 7, 85, 2, 2, 10623, 10624, 7, 89, 2, 2, 10624, 10625, 7, 77, 2, 2, 10625, 10626, 7, 68, 2, 2, 10626, 1818, 3, 2, 2, 2, 10627, 10628, 7, 85, 2, 2, 10628, 10629, 7, 86, 2, 2, 10629, 10630, 7, 97, 2, 2, 10630, 10631, 7, 67, 2, 2, 10631, 10632, 7, 85, 2, 2, 10632, 10633, 7, 89, 2, 2, 10633, 10634, 7, 77, 2, 2, 10634, 10635, 7, 86, 2, 2, 10635, 1820, 3, 2, 2, 2, 10636, 10637, 7, 85, 2, 2, 10637, 10638, 7, 86, 2, 2, 10638, 10639, 7, 97, 2, 2, 10639, 10640, 7, 68, 2, 2, 10640, 10641, 7, 87, 2, 2, 10641, 10642, 7, 72, 2, 2, 10642, 10643, 7, 72, 2, 2, 10643, 10644, 7, 71, 2, 2, 10644, 10645, 7, 84, 2, 2, 10645, 1822, 3, 2, 2, 2, 10646, 10647, 7, 85, 2, 2, 10647, 10648, 7, 86, 2, 2, 10648, 10649, 7, 97, 2, 2, 10649, 10650, 7, 69, 2, 2, 10650, 10651, 7, 71, 2, 2, 10651, 10652, 7, 80, 2, 2, 10652, 10653, 7, 86, 2, 2, 10653, 10654, 7, 84, 2, 2, 10654, 10655, 7, 81, 2, 2, 10655, 10656, 7, 75, 2, 2, 10656, 10657, 7, 70, 2, 2, 10657, 1824, 3, 2, 2, 2, 10658, 10659, 7, 85, 2, 2, 10659, 10660, 7, 86, 2, 2, 10660, 10661, 7, 97, 2, 2, 10661, 10662, 7, 69, 2, 2, 10662, 10663, 7, 81, 2, 2, 10663, 10664, 7, 80, 2, 2, 10664, 10665, 7, 86, 2, 2, 10665, 10666, 7, 67, 2, 2, 10666, 10667, 7, 75, 2, 2, 10667, 10668, 7, 80, 2, 2, 10668, 10669, 7, 85, 2, 2, 10669, 1826, 3, 2, 2, 2, 10670, 10671, 7, 85, 2, 2, 10671, 10672, 7, 86, 2, 2, 10672, 10673, 7, 97, 2, 2, 10673, 10674, 7, 69, 2, 2, 10674, 10675, 7, 84, 2, 2, 10675, 10676, 7, 81, 2, 2, 10676, 10677, 7, 85, 2, 2, 10677, 10678, 7, 85, 2, 2, 10678, 10679, 7, 71, 2, 2, 10679, 10680, 7, 85, 2, 2, 10680, 1828, 3, 2, 2, 2, 10681, 10682, 7, 85, 2, 2, 10682, 10683, 7, 86, 2, 2, 10683, 10684, 7, 97, 2, 2, 10684, 10685, 7, 70, 2, 2, 10685, 10686, 7, 75, 2, 2, 10686, 10687, 7, 72, 2, 2, 10687, 10688, 7, 72, 2, 2, 10688, 10689, 7, 71, 2, 2, 10689, 10690, 7, 84, 2, 2, 10690, 10691, 7, 71, 2, 2, 10691, 10692, 7, 80, 2, 2, 10692, 10693, 7, 69, 2, 2, 10693, 10694, 7, 71, 2, 2, 10694, 1830, 3, 2, 2, 2, 10695, 10696, 7, 85, 2, 2, 10696, 10697, 7, 86, 2, 2, 10697, 10698, 7, 97, 2, 2, 10698, 10699, 7, 70, 2, 2, 10699, 10700, 7, 75, 2, 2, 10700, 10701, 7, 79, 2, 2, 10701, 10702, 7, 71, 2, 2, 10702, 10703, 7, 80, 2, 2, 10703, 10704, 7, 85, 2, 2, 10704, 10705, 7, 75, 2, 2, 10705, 10706, 7, 81, 2, 2, 10706, 10707, 7, 80, 2, 2, 10707, 1832, 3, 2, 2, 2, 10708, 10709, 7, 85, 2, 2, 10709, 10710, 7, 86, 2, 2, 10710, 10711, 7, 97, 2, 2, 10711, 10712, 7, 70, 2, 2, 10712, 10713, 7, 75, 2, 2, 10713, 10714, 7, 85, 2, 2, 10714, 10715, 7, 76, 2, 2, 10715, 10716, 7, 81, 2, 2, 10716, 10717, 7, 75, 2, 2, 10717, 10718, 7, 80, 2, 2, 10718, 10719, 7, 86, 2, 2, 10719, 1834, 3, 2, 2, 2, 10720, 10721, 7, 85, 2, 2, 10721, 10722, 7, 86, 2, 2, 10722, 10723, 7, 97, 2, 2, 10723, 10724, 7, 70, 2, 2, 10724, 10725, 7, 75, 2, 2, 10725, 10726, 7, 85, 2, 2, 10726, 10727, 7, 86, 2, 2, 10727, 10728, 7, 67, 2, 2, 10728, 10729, 7, 80, 2, 2, 10729, 10730, 7, 69, 2, 2, 10730, 10731, 7, 71, 2, 2, 10731, 1836, 3, 2, 2, 2, 10732, 10733, 7, 85, 2, 2, 10733, 10734, 7, 86, 2, 2, 10734, 10735, 7, 97, 2, 2, 10735, 10736, 7, 71, 2, 2, 10736, 10737, 7, 80, 2, 2, 10737, 10738, 7, 70, 2, 2, 10738, 10739, 7, 82, 2, 2, 10739, 10740, 7, 81, 2, 2, 10740, 10741, 7, 75, 2, 2, 10741, 10742, 7, 80, 2, 2, 10742, 10743, 7, 86, 2, 2, 10743, 1838, 3, 2, 2, 2, 10744, 10745, 7, 85, 2, 2, 10745, 10746, 7, 86, 2, 2, 10746, 10747, 7, 97, 2, 2, 10747, 10748, 7, 71, 2, 2, 10748, 10749, 7, 80, 2, 2, 10749, 10750, 7, 88, 2, 2, 10750, 10751, 7, 71, 2, 2, 10751, 10752, 7, 78, 2, 2, 10752, 10753, 7, 81, 2, 2, 10753, 10754, 7, 82, 2, 2, 10754, 10755, 7, 71, 2, 2, 10755, 1840, 3, 2, 2, 2, 10756, 10757, 7, 85, 2, 2, 10757, 10758, 7, 86, 2, 2, 10758, 10759, 7, 97, 2, 2, 10759, 10760, 7, 71, 2, 2, 10760, 10761, 7, 83, 2, 2, 10761, 10762, 7, 87, 2, 2, 10762, 10763, 7, 67, 2, 2, 10763, 10764, 7, 78, 2, 2, 10764, 10765, 7, 85, 2, 2, 10765, 1842, 3, 2, 2, 2, 10766, 10767, 7, 85, 2, 2, 10767, 10768, 7, 86, 2, 2, 10768, 10769, 7, 97, 2, 2, 10769, 10770, 7, 71, 2, 2, 10770, 10771, 7, 90, 2, 2, 10771, 10772, 7, 86, 2, 2, 10772, 10773, 7, 71, 2, 2, 10773, 10774, 7, 84, 2, 2, 10774, 10775, 7, 75, 2, 2, 10775, 10776, 7, 81, 2, 2, 10776, 10777, 7, 84, 2, 2, 10777, 10778, 7, 84, 2, 2, 10778, 10779, 7, 75, 2, 2, 10779, 10780, 7, 80, 2, 2, 10780, 10781, 7, 73, 2, 2, 10781, 1844, 3, 2, 2, 2, 10782, 10783, 7, 85, 2, 2, 10783, 10784, 7, 86, 2, 2, 10784, 10785, 7, 97, 2, 2, 10785, 10786, 7, 73, 2, 2, 10786, 10787, 7, 71, 2, 2, 10787, 10788, 7, 81, 2, 2, 10788, 10789, 7, 79, 2, 2, 10789, 10790, 7, 69, 2, 2, 10790, 10791, 7, 81, 2, 2, 10791, 10792, 7, 78, 2, 2, 10792, 10793, 7, 78, 2, 2, 10793, 10794, 7, 72, 2, 2, 10794, 10795, 7, 84, 2, 2, 10795, 10796, 7, 81, 2, 2, 10796, 10797, 7, 79, 2, 2, 10797, 10798, 7, 86, 2, 2, 10798, 10799, 7, 71, 2, 2, 10799, 10800, 7, 90, 2, 2, 10800, 10801, 7, 86, 2, 2, 10801, 1846, 3, 2, 2, 2, 10802, 10803, 7, 85, 2, 2, 10803, 10804, 7, 86, 2, 2, 10804, 10805, 7, 97, 2, 2, 10805, 10806, 7, 73, 2, 2, 10806, 10807, 7, 71, 2, 2, 10807, 10808, 7, 81, 2, 2, 10808, 10809, 7, 79, 2, 2, 10809, 10810, 7, 69, 2, 2, 10810, 10811, 7, 81, 2, 2, 10811, 10812, 7, 78, 2, 2, 10812, 10813, 7, 78, 2, 2, 10813, 10814, 7, 72, 2, 2, 10814, 10815, 7, 84, 2, 2, 10815, 10816, 7, 81, 2, 2, 10816, 10817, 7, 79, 2, 2, 10817, 10818, 7, 86, 2, 2, 10818, 10819, 7, 90, 2, 2, 10819, 10820, 7, 86, 2, 2, 10820, 1848, 3, 2, 2, 2, 10821, 10822, 7, 85, 2, 2, 10822, 10823, 7, 86, 2, 2, 10823, 10824, 7, 97, 2, 2, 10824, 10825, 7, 73, 2, 2, 10825, 10826, 7, 71, 2, 2, 10826, 10827, 7, 81, 2, 2, 10827, 10828, 7, 79, 2, 2, 10828, 10829, 7, 69, 2, 2, 10829, 10830, 7, 81, 2, 2, 10830, 10831, 7, 78, 2, 2, 10831, 10832, 7, 78, 2, 2, 10832, 10833, 7, 72, 2, 2, 10833, 10834, 7, 84, 2, 2, 10834, 10835, 7, 81, 2, 2, 10835, 10836, 7, 79, 2, 2, 10836, 10837, 7, 89, 2, 2, 10837, 10838, 7, 77, 2, 2, 10838, 10839, 7, 68, 2, 2, 10839, 1850, 3, 2, 2, 2, 10840, 10841, 7, 85, 2, 2, 10841, 10842, 7, 86, 2, 2, 10842, 10843, 7, 97, 2, 2, 10843, 10844, 7, 73, 2, 2, 10844, 10845, 7, 71, 2, 2, 10845, 10846, 7, 81, 2, 2, 10846, 10847, 7, 79, 2, 2, 10847, 10848, 7, 71, 2, 2, 10848, 10849, 7, 86, 2, 2, 10849, 10850, 7, 84, 2, 2, 10850, 10851, 7, 91, 2, 2, 10851, 10852, 7, 69, 2, 2, 10852, 10853, 7, 81, 2, 2, 10853, 10854, 7, 78, 2, 2, 10854, 10855, 7, 78, 2, 2, 10855, 10856, 7, 71, 2, 2, 10856, 10857, 7, 69, 2, 2, 10857, 10858, 7, 86, 2, 2, 10858, 10859, 7, 75, 2, 2, 10859, 10860, 7, 81, 2, 2, 10860, 10861, 7, 80, 2, 2, 10861, 10862, 7, 72, 2, 2, 10862, 10863, 7, 84, 2, 2, 10863, 10864, 7, 81, 2, 2, 10864, 10865, 7, 79, 2, 2, 10865, 10866, 7, 86, 2, 2, 10866, 10867, 7, 71, 2, 2, 10867, 10868, 7, 90, 2, 2, 10868, 10869, 7, 86, 2, 2, 10869, 1852, 3, 2, 2, 2, 10870, 10871, 7, 85, 2, 2, 10871, 10872, 7, 86, 2, 2, 10872, 10873, 7, 97, 2, 2, 10873, 10874, 7, 73, 2, 2, 10874, 10875, 7, 71, 2, 2, 10875, 10876, 7, 81, 2, 2, 10876, 10877, 7, 79, 2, 2, 10877, 10878, 7, 71, 2, 2, 10878, 10879, 7, 86, 2, 2, 10879, 10880, 7, 84, 2, 2, 10880, 10881, 7, 91, 2, 2, 10881, 10882, 7, 69, 2, 2, 10882, 10883, 7, 81, 2, 2, 10883, 10884, 7, 78, 2, 2, 10884, 10885, 7, 78, 2, 2, 10885, 10886, 7, 71, 2, 2, 10886, 10887, 7, 69, 2, 2, 10887, 10888, 7, 86, 2, 2, 10888, 10889, 7, 75, 2, 2, 10889, 10890, 7, 81, 2, 2, 10890, 10891, 7, 80, 2, 2, 10891, 10892, 7, 72, 2, 2, 10892, 10893, 7, 84, 2, 2, 10893, 10894, 7, 81, 2, 2, 10894, 10895, 7, 79, 2, 2, 10895, 10896, 7, 89, 2, 2, 10896, 10897, 7, 77, 2, 2, 10897, 10898, 7, 68, 2, 2, 10898, 1854, 3, 2, 2, 2, 10899, 10900, 7, 85, 2, 2, 10900, 10901, 7, 86, 2, 2, 10901, 10902, 7, 97, 2, 2, 10902, 10903, 7, 73, 2, 2, 10903, 10904, 7, 71, 2, 2, 10904, 10905, 7, 81, 2, 2, 10905, 10906, 7, 79, 2, 2, 10906, 10907, 7, 71, 2, 2, 10907, 10908, 7, 86, 2, 2, 10908, 10909, 7, 84, 2, 2, 10909, 10910, 7, 91, 2, 2, 10910, 10911, 7, 72, 2, 2, 10911, 10912, 7, 84, 2, 2, 10912, 10913, 7, 81, 2, 2, 10913, 10914, 7, 79, 2, 2, 10914, 10915, 7, 86, 2, 2, 10915, 10916, 7, 71, 2, 2, 10916, 10917, 7, 90, 2, 2, 10917, 10918, 7, 86, 2, 2, 10918, 1856, 3, 2, 2, 2, 10919, 10920, 7, 85, 2, 2, 10920, 10921, 7, 86, 2, 2, 10921, 10922, 7, 97, 2, 2, 10922, 10923, 7, 73, 2, 2, 10923, 10924, 7, 71, 2, 2, 10924, 10925, 7, 81, 2, 2, 10925, 10926, 7, 79, 2, 2, 10926, 10927, 7, 71, 2, 2, 10927, 10928, 7, 86, 2, 2, 10928, 10929, 7, 84, 2, 2, 10929, 10930, 7, 91, 2, 2, 10930, 10931, 7, 72, 2, 2, 10931, 10932, 7, 84, 2, 2, 10932, 10933, 7, 81, 2, 2, 10933, 10934, 7, 79, 2, 2, 10934, 10935, 7, 89, 2, 2, 10935, 10936, 7, 77, 2, 2, 10936, 10937, 7, 68, 2, 2, 10937, 1858, 3, 2, 2, 2, 10938, 10939, 7, 85, 2, 2, 10939, 10940, 7, 86, 2, 2, 10940, 10941, 7, 97, 2, 2, 10941, 10942, 7, 73, 2, 2, 10942, 10943, 7, 71, 2, 2, 10943, 10944, 7, 81, 2, 2, 10944, 10945, 7, 79, 2, 2, 10945, 10946, 7, 71, 2, 2, 10946, 10947, 7, 86, 2, 2, 10947, 10948, 7, 84, 2, 2, 10948, 10949, 7, 91, 2, 2, 10949, 10950, 7, 80, 2, 2, 10950, 1860, 3, 2, 2, 2, 10951, 10952, 7, 85, 2, 2, 10952, 10953, 7, 86, 2, 2, 10953, 10954, 7, 97, 2, 2, 10954, 10955, 7, 73, 2, 2, 10955, 10956, 7, 71, 2, 2, 10956, 10957, 7, 81, 2, 2, 10957, 10958, 7, 79, 2, 2, 10958, 10959, 7, 71, 2, 2, 10959, 10960, 7, 86, 2, 2, 10960, 10961, 7, 84, 2, 2, 10961, 10962, 7, 91, 2, 2, 10962, 10963, 7, 86, 2, 2, 10963, 10964, 7, 91, 2, 2, 10964, 10965, 7, 82, 2, 2, 10965, 10966, 7, 71, 2, 2, 10966, 1862, 3, 2, 2, 2, 10967, 10968, 7, 85, 2, 2, 10968, 10969, 7, 86, 2, 2, 10969, 10970, 7, 97, 2, 2, 10970, 10971, 7, 73, 2, 2, 10971, 10972, 7, 71, 2, 2, 10972, 10973, 7, 81, 2, 2, 10973, 10974, 7, 79, 2, 2, 10974, 10975, 7, 72, 2, 2, 10975, 10976, 7, 84, 2, 2, 10976, 10977, 7, 81, 2, 2, 10977, 10978, 7, 79, 2, 2, 10978, 10979, 7, 86, 2, 2, 10979, 10980, 7, 71, 2, 2, 10980, 10981, 7, 90, 2, 2, 10981, 10982, 7, 86, 2, 2, 10982, 1864, 3, 2, 2, 2, 10983, 10984, 7, 85, 2, 2, 10984, 10985, 7, 86, 2, 2, 10985, 10986, 7, 97, 2, 2, 10986, 10987, 7, 73, 2, 2, 10987, 10988, 7, 71, 2, 2, 10988, 10989, 7, 81, 2, 2, 10989, 10990, 7, 79, 2, 2, 10990, 10991, 7, 72, 2, 2, 10991, 10992, 7, 84, 2, 2, 10992, 10993, 7, 81, 2, 2, 10993, 10994, 7, 79, 2, 2, 10994, 10995, 7, 89, 2, 2, 10995, 10996, 7, 77, 2, 2, 10996, 10997, 7, 68, 2, 2, 10997, 1866, 3, 2, 2, 2, 10998, 10999, 7, 85, 2, 2, 10999, 11000, 7, 86, 2, 2, 11000, 11001, 7, 97, 2, 2, 11001, 11002, 7, 75, 2, 2, 11002, 11003, 7, 80, 2, 2, 11003, 11004, 7, 86, 2, 2, 11004, 11005, 7, 71, 2, 2, 11005, 11006, 7, 84, 2, 2, 11006, 11007, 7, 75, 2, 2, 11007, 11008, 7, 81, 2, 2, 11008, 11009, 7, 84, 2, 2, 11009, 11010, 7, 84, 2, 2, 11010, 11011, 7, 75, 2, 2, 11011, 11012, 7, 80, 2, 2, 11012, 11013, 7, 73, 2, 2, 11013, 11014, 7, 80, 2, 2, 11014, 1868, 3, 2, 2, 2, 11015, 11016, 7, 85, 2, 2, 11016, 11017, 7, 86, 2, 2, 11017, 11018, 7, 97, 2, 2, 11018, 11019, 7, 75, 2, 2, 11019, 11020, 7, 80, 2, 2, 11020, 11021, 7, 86, 2, 2, 11021, 11022, 7, 71, 2, 2, 11022, 11023, 7, 84, 2, 2, 11023, 11024, 7, 85, 2, 2, 11024, 11025, 7, 71, 2, 2, 11025, 11026, 7, 69, 2, 2, 11026, 11027, 7, 86, 2, 2, 11027, 11028, 7, 75, 2, 2, 11028, 11029, 7, 81, 2, 2, 11029, 11030, 7, 80, 2, 2, 11030, 1870, 3, 2, 2, 2, 11031, 11032, 7, 85, 2, 2, 11032, 11033, 7, 86, 2, 2, 11033, 11034, 7, 97, 2, 2, 11034, 11035, 7, 75, 2, 2, 11035, 11036, 7, 80, 2, 2, 11036, 11037, 7, 86, 2, 2, 11037, 11038, 7, 71, 2, 2, 11038, 11039, 7, 84, 2, 2, 11039, 11040, 7, 85, 2, 2, 11040, 11041, 7, 71, 2, 2, 11041, 11042, 7, 69, 2, 2, 11042, 11043, 7, 86, 2, 2, 11043, 11044, 7, 85, 2, 2, 11044, 1872, 3, 2, 2, 2, 11045, 11046, 7, 85, 2, 2, 11046, 11047, 7, 86, 2, 2, 11047, 11048, 7, 97, 2, 2, 11048, 11049, 7, 75, 2, 2, 11049, 11050, 7, 85, 2, 2, 11050, 11051, 7, 69, 2, 2, 11051, 11052, 7, 78, 2, 2, 11052, 11053, 7, 81, 2, 2, 11053, 11054, 7, 85, 2, 2, 11054, 11055, 7, 71, 2, 2, 11055, 11056, 7, 70, 2, 2, 11056, 1874, 3, 2, 2, 2, 11057, 11058, 7, 85, 2, 2, 11058, 11059, 7, 86, 2, 2, 11059, 11060, 7, 97, 2, 2, 11060, 11061, 7, 75, 2, 2, 11061, 11062, 7, 85, 2, 2, 11062, 11063, 7, 71, 2, 2, 11063, 11064, 7, 79, 2, 2, 11064, 11065, 7, 82, 2, 2, 11065, 11066, 7, 86, 2, 2, 11066, 11067, 7, 91, 2, 2, 11067, 1876, 3, 2, 2, 2, 11068, 11069, 7, 85, 2, 2, 11069, 11070, 7, 86, 2, 2, 11070, 11071, 7, 97, 2, 2, 11071, 11072, 7, 75, 2, 2, 11072, 11073, 7, 85, 2, 2, 11073, 11074, 7, 85, 2, 2, 11074, 11075, 7, 75, 2, 2, 11075, 11076, 7, 79, 2, 2, 11076, 11077, 7, 82, 2, 2, 11077, 11078, 7, 78, 2, 2, 11078, 11079, 7, 71, 2, 2, 11079, 1878, 3, 2, 2, 2, 11080, 11081, 7, 85, 2, 2, 11081, 11082, 7, 86, 2, 2, 11082, 11083, 7, 97, 2, 2, 11083, 11084, 7, 78, 2, 2, 11084, 11085, 7, 75, 2, 2, 11085, 11086, 7, 80, 2, 2, 11086, 11087, 7, 71, 2, 2, 11087, 11088, 7, 72, 2, 2, 11088, 11089, 7, 84, 2, 2, 11089, 11090, 7, 81, 2, 2, 11090, 11091, 7, 79, 2, 2, 11091, 11092, 7, 86, 2, 2, 11092, 11093, 7, 71, 2, 2, 11093, 11094, 7, 90, 2, 2, 11094, 11095, 7, 86, 2, 2, 11095, 1880, 3, 2, 2, 2, 11096, 11097, 7, 85, 2, 2, 11097, 11098, 7, 86, 2, 2, 11098, 11099, 7, 97, 2, 2, 11099, 11100, 7, 78, 2, 2, 11100, 11101, 7, 75, 2, 2, 11101, 11102, 7, 80, 2, 2, 11102, 11103, 7, 71, 2, 2, 11103, 11104, 7, 72, 2, 2, 11104, 11105, 7, 84, 2, 2, 11105, 11106, 7, 81, 2, 2, 11106, 11107, 7, 79, 2, 2, 11107, 11108, 7, 89, 2, 2, 11108, 11109, 7, 77, 2, 2, 11109, 11110, 7, 68, 2, 2, 11110, 1882, 3, 2, 2, 2, 11111, 11112, 7, 85, 2, 2, 11112, 11113, 7, 86, 2, 2, 11113, 11114, 7, 97, 2, 2, 11114, 11115, 7, 78, 2, 2, 11115, 11116, 7, 75, 2, 2, 11116, 11117, 7, 80, 2, 2, 11117, 11118, 7, 71, 2, 2, 11118, 11119, 7, 85, 2, 2, 11119, 11120, 7, 86, 2, 2, 11120, 11121, 7, 84, 2, 2, 11121, 11122, 7, 75, 2, 2, 11122, 11123, 7, 80, 2, 2, 11123, 11124, 7, 73, 2, 2, 11124, 11125, 7, 72, 2, 2, 11125, 11126, 7, 84, 2, 2, 11126, 11127, 7, 81, 2, 2, 11127, 11128, 7, 79, 2, 2, 11128, 11129, 7, 86, 2, 2, 11129, 11130, 7, 71, 2, 2, 11130, 11131, 7, 90, 2, 2, 11131, 11132, 7, 86, 2, 2, 11132, 1884, 3, 2, 2, 2, 11133, 11134, 7, 85, 2, 2, 11134, 11135, 7, 86, 2, 2, 11135, 11136, 7, 97, 2, 2, 11136, 11137, 7, 78, 2, 2, 11137, 11138, 7, 75, 2, 2, 11138, 11139, 7, 80, 2, 2, 11139, 11140, 7, 71, 2, 2, 11140, 11141, 7, 85, 2, 2, 11141, 11142, 7, 86, 2, 2, 11142, 11143, 7, 84, 2, 2, 11143, 11144, 7, 75, 2, 2, 11144, 11145, 7, 80, 2, 2, 11145, 11146, 7, 73, 2, 2, 11146, 11147, 7, 72, 2, 2, 11147, 11148, 7, 84, 2, 2, 11148, 11149, 7, 81, 2, 2, 11149, 11150, 7, 79, 2, 2, 11150, 11151, 7, 89, 2, 2, 11151, 11152, 7, 77, 2, 2, 11152, 11153, 7, 68, 2, 2, 11153, 1886, 3, 2, 2, 2, 11154, 11155, 7, 85, 2, 2, 11155, 11156, 7, 86, 2, 2, 11156, 11157, 7, 97, 2, 2, 11157, 11158, 7, 80, 2, 2, 11158, 11159, 7, 87, 2, 2, 11159, 11160, 7, 79, 2, 2, 11160, 11161, 7, 73, 2, 2, 11161, 11162, 7, 71, 2, 2, 11162, 11163, 7, 81, 2, 2, 11163, 11164, 7, 79, 2, 2, 11164, 11165, 7, 71, 2, 2, 11165, 11166, 7, 86, 2, 2, 11166, 11167, 7, 84, 2, 2, 11167, 11168, 7, 75, 2, 2, 11168, 11169, 7, 71, 2, 2, 11169, 11170, 7, 85, 2, 2, 11170, 1888, 3, 2, 2, 2, 11171, 11172, 7, 85, 2, 2, 11172, 11173, 7, 86, 2, 2, 11173, 11174, 7, 97, 2, 2, 11174, 11175, 7, 80, 2, 2, 11175, 11176, 7, 87, 2, 2, 11176, 11177, 7, 79, 2, 2, 11177, 11178, 7, 75, 2, 2, 11178, 11179, 7, 80, 2, 2, 11179, 11180, 7, 86, 2, 2, 11180, 11181, 7, 71, 2, 2, 11181, 11182, 7, 84, 2, 2, 11182, 11183, 7, 75, 2, 2, 11183, 11184, 7, 81, 2, 2, 11184, 11185, 7, 84, 2, 2, 11185, 11186, 7, 84, 2, 2, 11186, 11187, 7, 75, 2, 2, 11187, 11188, 7, 80, 2, 2, 11188, 11189, 7, 73, 2, 2, 11189, 1890, 3, 2, 2, 2, 11190, 11191, 7, 85, 2, 2, 11191, 11192, 7, 86, 2, 2, 11192, 11193, 7, 97, 2, 2, 11193, 11194, 7, 80, 2, 2, 11194, 11195, 7, 87, 2, 2, 11195, 11196, 7, 79, 2, 2, 11196, 11197, 7, 75, 2, 2, 11197, 11198, 7, 80, 2, 2, 11198, 11199, 7, 86, 2, 2, 11199, 11200, 7, 71, 2, 2, 11200, 11201, 7, 84, 2, 2, 11201, 11202, 7, 75, 2, 2, 11202, 11203, 7, 81, 2, 2, 11203, 11204, 7, 84, 2, 2, 11204, 11205, 7, 84, 2, 2, 11205, 11206, 7, 75, 2, 2, 11206, 11207, 7, 80, 2, 2, 11207, 11208, 7, 73, 2, 2, 11208, 11209, 7, 85, 2, 2, 11209, 1892, 3, 2, 2, 2, 11210, 11211, 7, 85, 2, 2, 11211, 11212, 7, 86, 2, 2, 11212, 11213, 7, 97, 2, 2, 11213, 11214, 7, 80, 2, 2, 11214, 11215, 7, 87, 2, 2, 11215, 11216, 7, 79, 2, 2, 11216, 11217, 7, 82, 2, 2, 11217, 11218, 7, 81, 2, 2, 11218, 11219, 7, 75, 2, 2, 11219, 11220, 7, 80, 2, 2, 11220, 11221, 7, 86, 2, 2, 11221, 11222, 7, 85, 2, 2, 11222, 1894, 3, 2, 2, 2, 11223, 11224, 7, 85, 2, 2, 11224, 11225, 7, 86, 2, 2, 11225, 11226, 7, 97, 2, 2, 11226, 11227, 7, 81, 2, 2, 11227, 11228, 7, 88, 2, 2, 11228, 11229, 7, 71, 2, 2, 11229, 11230, 7, 84, 2, 2, 11230, 11231, 7, 78, 2, 2, 11231, 11232, 7, 67, 2, 2, 11232, 11233, 7, 82, 2, 2, 11233, 11234, 7, 85, 2, 2, 11234, 1896, 3, 2, 2, 2, 11235, 11236, 7, 85, 2, 2, 11236, 11237, 7, 86, 2, 2, 11237, 11238, 7, 97, 2, 2, 11238, 11239, 7, 82, 2, 2, 11239, 11240, 7, 81, 2, 2, 11240, 11241, 7, 75, 2, 2, 11241, 11242, 7, 80, 2, 2, 11242, 11243, 7, 86, 2, 2, 11243, 11244, 7, 72, 2, 2, 11244, 11245, 7, 84, 2, 2, 11245, 11246, 7, 81, 2, 2, 11246, 11247, 7, 79, 2, 2, 11247, 11248, 7, 86, 2, 2, 11248, 11249, 7, 71, 2, 2, 11249, 11250, 7, 90, 2, 2, 11250, 11251, 7, 86, 2, 2, 11251, 1898, 3, 2, 2, 2, 11252, 11253, 7, 85, 2, 2, 11253, 11254, 7, 86, 2, 2, 11254, 11255, 7, 97, 2, 2, 11255, 11256, 7, 82, 2, 2, 11256, 11257, 7, 81, 2, 2, 11257, 11258, 7, 75, 2, 2, 11258, 11259, 7, 80, 2, 2, 11259, 11260, 7, 86, 2, 2, 11260, 11261, 7, 72, 2, 2, 11261, 11262, 7, 84, 2, 2, 11262, 11263, 7, 81, 2, 2, 11263, 11264, 7, 79, 2, 2, 11264, 11265, 7, 89, 2, 2, 11265, 11266, 7, 77, 2, 2, 11266, 11267, 7, 68, 2, 2, 11267, 1900, 3, 2, 2, 2, 11268, 11269, 7, 85, 2, 2, 11269, 11270, 7, 86, 2, 2, 11270, 11271, 7, 97, 2, 2, 11271, 11272, 7, 82, 2, 2, 11272, 11273, 7, 81, 2, 2, 11273, 11274, 7, 75, 2, 2, 11274, 11275, 7, 80, 2, 2, 11275, 11276, 7, 86, 2, 2, 11276, 11277, 7, 80, 2, 2, 11277, 1902, 3, 2, 2, 2, 11278, 11279, 7, 85, 2, 2, 11279, 11280, 7, 86, 2, 2, 11280, 11281, 7, 97, 2, 2, 11281, 11282, 7, 82, 2, 2, 11282, 11283, 7, 81, 2, 2, 11283, 11284, 7, 78, 2, 2, 11284, 11285, 7, 91, 2, 2, 11285, 11286, 7, 72, 2, 2, 11286, 11287, 7, 84, 2, 2, 11287, 11288, 7, 81, 2, 2, 11288, 11289, 7, 79, 2, 2, 11289, 11290, 7, 86, 2, 2, 11290, 11291, 7, 71, 2, 2, 11291, 11292, 7, 90, 2, 2, 11292, 11293, 7, 86, 2, 2, 11293, 1904, 3, 2, 2, 2, 11294, 11295, 7, 85, 2, 2, 11295, 11296, 7, 86, 2, 2, 11296, 11297, 7, 97, 2, 2, 11297, 11298, 7, 82, 2, 2, 11298, 11299, 7, 81, 2, 2, 11299, 11300, 7, 78, 2, 2, 11300, 11301, 7, 91, 2, 2, 11301, 11302, 7, 72, 2, 2, 11302, 11303, 7, 84, 2, 2, 11303, 11304, 7, 81, 2, 2, 11304, 11305, 7, 79, 2, 2, 11305, 11306, 7, 89, 2, 2, 11306, 11307, 7, 77, 2, 2, 11307, 11308, 7, 68, 2, 2, 11308, 1906, 3, 2, 2, 2, 11309, 11310, 7, 85, 2, 2, 11310, 11311, 7, 86, 2, 2, 11311, 11312, 7, 97, 2, 2, 11312, 11313, 7, 82, 2, 2, 11313, 11314, 7, 81, 2, 2, 11314, 11315, 7, 78, 2, 2, 11315, 11316, 7, 91, 2, 2, 11316, 11317, 7, 73, 2, 2, 11317, 11318, 7, 81, 2, 2, 11318, 11319, 7, 80, 2, 2, 11319, 11320, 7, 72, 2, 2, 11320, 11321, 7, 84, 2, 2, 11321, 11322, 7, 81, 2, 2, 11322, 11323, 7, 79, 2, 2, 11323, 11324, 7, 86, 2, 2, 11324, 11325, 7, 71, 2, 2, 11325, 11326, 7, 90, 2, 2, 11326, 11327, 7, 86, 2, 2, 11327, 1908, 3, 2, 2, 2, 11328, 11329, 7, 85, 2, 2, 11329, 11330, 7, 86, 2, 2, 11330, 11331, 7, 97, 2, 2, 11331, 11332, 7, 82, 2, 2, 11332, 11333, 7, 81, 2, 2, 11333, 11334, 7, 78, 2, 2, 11334, 11335, 7, 91, 2, 2, 11335, 11336, 7, 73, 2, 2, 11336, 11337, 7, 81, 2, 2, 11337, 11338, 7, 80, 2, 2, 11338, 11339, 7, 72, 2, 2, 11339, 11340, 7, 84, 2, 2, 11340, 11341, 7, 81, 2, 2, 11341, 11342, 7, 79, 2, 2, 11342, 11343, 7, 89, 2, 2, 11343, 11344, 7, 77, 2, 2, 11344, 11345, 7, 68, 2, 2, 11345, 1910, 3, 2, 2, 2, 11346, 11347, 7, 85, 2, 2, 11347, 11348, 7, 86, 2, 2, 11348, 11349, 7, 97, 2, 2, 11349, 11350, 7, 85, 2, 2, 11350, 11351, 7, 84, 2, 2, 11351, 11352, 7, 75, 2, 2, 11352, 11353, 7, 70, 2, 2, 11353, 1912, 3, 2, 2, 2, 11354, 11355, 7, 85, 2, 2, 11355, 11356, 7, 86, 2, 2, 11356, 11357, 7, 97, 2, 2, 11357, 11358, 7, 85, 2, 2, 11358, 11359, 7, 86, 2, 2, 11359, 11360, 7, 67, 2, 2, 11360, 11361, 7, 84, 2, 2, 11361, 11362, 7, 86, 2, 2, 11362, 11363, 7, 82, 2, 2, 11363, 11364, 7, 81, 2, 2, 11364, 11365, 7, 75, 2, 2, 11365, 11366, 7, 80, 2, 2, 11366, 11367, 7, 86, 2, 2, 11367, 1914, 3, 2, 2, 2, 11368, 11369, 7, 85, 2, 2, 11369, 11370, 7, 86, 2, 2, 11370, 11371, 7, 97, 2, 2, 11371, 11372, 7, 85, 2, 2, 11372, 11373, 7, 91, 2, 2, 11373, 11374, 7, 79, 2, 2, 11374, 11375, 7, 70, 2, 2, 11375, 11376, 7, 75, 2, 2, 11376, 11377, 7, 72, 2, 2, 11377, 11378, 7, 72, 2, 2, 11378, 11379, 7, 71, 2, 2, 11379, 11380, 7, 84, 2, 2, 11380, 11381, 7, 71, 2, 2, 11381, 11382, 7, 80, 2, 2, 11382, 11383, 7, 69, 2, 2, 11383, 11384, 7, 71, 2, 2, 11384, 1916, 3, 2, 2, 2, 11385, 11386, 7, 85, 2, 2, 11386, 11387, 7, 86, 2, 2, 11387, 11388, 7, 97, 2, 2, 11388, 11389, 7, 86, 2, 2, 11389, 11390, 7, 81, 2, 2, 11390, 11391, 7, 87, 2, 2, 11391, 11392, 7, 69, 2, 2, 11392, 11393, 7, 74, 2, 2, 11393, 11394, 7, 71, 2, 2, 11394, 11395, 7, 85, 2, 2, 11395, 1918, 3, 2, 2, 2, 11396, 11397, 7, 85, 2, 2, 11397, 11398, 7, 86, 2, 2, 11398, 11399, 7, 97, 2, 2, 11399, 11400, 7, 87, 2, 2, 11400, 11401, 7, 80, 2, 2, 11401, 11402, 7, 75, 2, 2, 11402, 11403, 7, 81, 2, 2, 11403, 11404, 7, 80, 2, 2, 11404, 1920, 3, 2, 2, 2, 11405, 11406, 7, 85, 2, 2, 11406, 11407, 7, 86, 2, 2, 11407, 11408, 7, 97, 2, 2, 11408, 11409, 7, 89, 2, 2, 11409, 11410, 7, 75, 2, 2, 11410, 11411, 7, 86, 2, 2, 11411, 11412, 7, 74, 2, 2, 11412, 11413, 7, 75, 2, 2, 11413, 11414, 7, 80, 2, 2, 11414, 1922, 3, 2, 2, 2, 11415, 11416, 7, 85, 2, 2, 11416, 11417, 7, 86, 2, 2, 11417, 11418, 7, 97, 2, 2, 11418, 11419, 7, 90, 2, 2, 11419, 1924, 3, 2, 2, 2, 11420, 11421, 7, 85, 2, 2, 11421, 11422, 7, 86, 2, 2, 11422, 11423, 7, 97, 2, 2, 11423, 11424, 7, 91, 2, 2, 11424, 1926, 3, 2, 2, 2, 11425, 11426, 7, 85, 2, 2, 11426, 11427, 7, 87, 2, 2, 11427, 11428, 7, 68, 2, 2, 11428, 11429, 7, 70, 2, 2, 11429, 11430, 7, 67, 2, 2, 11430, 11431, 7, 86, 2, 2, 11431, 11432, 7, 71, 2, 2, 11432, 1928, 3, 2, 2, 2, 11433, 11434, 7, 85, 2, 2, 11434, 11435, 7, 87, 2, 2, 11435, 11436, 7, 68, 2, 2, 11436, 11437, 7, 85, 2, 2, 11437, 11438, 7, 86, 2, 2, 11438, 11439, 7, 84, 2, 2, 11439, 11440, 7, 75, 2, 2, 11440, 11441, 7, 80, 2, 2, 11441, 11442, 7, 73, 2, 2, 11442, 11443, 7, 97, 2, 2, 11443, 11444, 7, 75, 2, 2, 11444, 11445, 7, 80, 2, 2, 11445, 11446, 7, 70, 2, 2, 11446, 11447, 7, 71, 2, 2, 11447, 11448, 7, 90, 2, 2, 11448, 1930, 3, 2, 2, 2, 11449, 11450, 7, 85, 2, 2, 11450, 11451, 7, 87, 2, 2, 11451, 11452, 7, 68, 2, 2, 11452, 11453, 7, 86, 2, 2, 11453, 11454, 7, 75, 2, 2, 11454, 11455, 7, 79, 2, 2, 11455, 11456, 7, 71, 2, 2, 11456, 1932, 3, 2, 2, 2, 11457, 11458, 7, 85, 2, 2, 11458, 11459, 7, 91, 2, 2, 11459, 11460, 7, 85, 2, 2, 11460, 11461, 7, 86, 2, 2, 11461, 11462, 7, 71, 2, 2, 11462, 11463, 7, 79, 2, 2, 11463, 11464, 7, 97, 2, 2, 11464, 11465, 7, 87, 2, 2, 11465, 11466, 7, 85, 2, 2, 11466, 11467, 7, 71, 2, 2, 11467, 11468, 7, 84, 2, 2, 11468, 1934, 3, 2, 2, 2, 11469, 11470, 7, 86, 2, 2, 11470, 11471, 7, 67, 2, 2, 11471, 11472, 7, 80, 2, 2, 11472, 1936, 3, 2, 2, 2, 11473, 11474, 7, 86, 2, 2, 11474, 11475, 7, 75, 2, 2, 11475, 11476, 7, 79, 2, 2, 11476, 11477, 7, 71, 2, 2, 11477, 11478, 7, 70, 2, 2, 11478, 11479, 7, 75, 2, 2, 11479, 11480, 7, 72, 2, 2, 11480, 11481, 7, 72, 2, 2, 11481, 1938, 3, 2, 2, 2, 11482, 11483, 7, 86, 2, 2, 11483, 11484, 7, 75, 2, 2, 11484, 11485, 7, 79, 2, 2, 11485, 11486, 7, 71, 2, 2, 11486, 11487, 7, 85, 2, 2, 11487, 11488, 7, 86, 2, 2, 11488, 11489, 7, 67, 2, 2, 11489, 11490, 7, 79, 2, 2, 11490, 11491, 7, 82, 2, 2, 11491, 11492, 7, 67, 2, 2, 11492, 11493, 7, 70, 2, 2, 11493, 11494, 7, 70, 2, 2, 11494, 1940, 3, 2, 2, 2, 11495, 11496, 7, 86, 2, 2, 11496, 11497, 7, 75, 2, 2, 11497, 11498, 7, 79, 2, 2, 11498, 11499, 7, 71, 2, 2, 11499, 11500, 7, 85, 2, 2, 11500, 11501, 7, 86, 2, 2, 11501, 11502, 7, 67, 2, 2, 11502, 11503, 7, 79, 2, 2, 11503, 11504, 7, 82, 2, 2, 11504, 11505, 7, 70, 2, 2, 11505, 11506, 7, 75, 2, 2, 11506, 11507, 7, 72, 2, 2, 11507, 11508, 7, 72, 2, 2, 11508, 1942, 3, 2, 2, 2, 11509, 11510, 7, 86, 2, 2, 11510, 11511, 7, 75, 2, 2, 11511, 11512, 7, 79, 2, 2, 11512, 11513, 7, 71, 2, 2, 11513, 11514, 7, 97, 2, 2, 11514, 11515, 7, 72, 2, 2, 11515, 11516, 7, 81, 2, 2, 11516, 11517, 7, 84, 2, 2, 11517, 11518, 7, 79, 2, 2, 11518, 11519, 7, 67, 2, 2, 11519, 11520, 7, 86, 2, 2, 11520, 1944, 3, 2, 2, 2, 11521, 11522, 7, 86, 2, 2, 11522, 11523, 7, 75, 2, 2, 11523, 11524, 7, 79, 2, 2, 11524, 11525, 7, 71, 2, 2, 11525, 11526, 7, 97, 2, 2, 11526, 11527, 7, 86, 2, 2, 11527, 11528, 7, 81, 2, 2, 11528, 11529, 7, 97, 2, 2, 11529, 11530, 7, 85, 2, 2, 11530, 11531, 7, 71, 2, 2, 11531, 11532, 7, 69, 2, 2, 11532, 1946, 3, 2, 2, 2, 11533, 11534, 7, 86, 2, 2, 11534, 11535, 7, 81, 2, 2, 11535, 11536, 7, 87, 2, 2, 11536, 11537, 7, 69, 2, 2, 11537, 11538, 7, 74, 2, 2, 11538, 11539, 7, 71, 2, 2, 11539, 11540, 7, 85, 2, 2, 11540, 1948, 3, 2, 2, 2, 11541, 11542, 7, 86, 2, 2, 11542, 11543, 7, 81, 2, 2, 11543, 11544, 7, 97, 2, 2, 11544, 11545, 7, 68, 2, 2, 11545, 11546, 7, 67, 2, 2, 11546, 11547, 7, 85, 2, 2, 11547, 11548, 7, 71, 2, 2, 11548, 11549, 7, 56, 2, 2, 11549, 11550, 7, 54, 2, 2, 11550, 1950, 3, 2, 2, 2, 11551, 11552, 7, 86, 2, 2, 11552, 11553, 7, 81, 2, 2, 11553, 11554, 7, 97, 2, 2, 11554, 11555, 7, 70, 2, 2, 11555, 11556, 7, 67, 2, 2, 11556, 11557, 7, 91, 2, 2, 11557, 11558, 7, 85, 2, 2, 11558, 1952, 3, 2, 2, 2, 11559, 11560, 7, 86, 2, 2, 11560, 11561, 7, 81, 2, 2, 11561, 11562, 7, 97, 2, 2, 11562, 11563, 7, 85, 2, 2, 11563, 11564, 7, 71, 2, 2, 11564, 11565, 7, 69, 2, 2, 11565, 11566, 7, 81, 2, 2, 11566, 11567, 7, 80, 2, 2, 11567, 11568, 7, 70, 2, 2, 11568, 11569, 7, 85, 2, 2, 11569, 1954, 3, 2, 2, 2, 11570, 11571, 7, 87, 2, 2, 11571, 11572, 7, 69, 2, 2, 11572, 11573, 7, 67, 2, 2, 11573, 11574, 7, 85, 2, 2, 11574, 11575, 7, 71, 2, 2, 11575, 1956, 3, 2, 2, 2, 11576, 11577, 7, 87, 2, 2, 11577, 11578, 7, 80, 2, 2, 11578, 11579, 7, 69, 2, 2, 11579, 11580, 7, 81, 2, 2, 11580, 11581, 7, 79, 2, 2, 11581, 11582, 7, 82, 2, 2, 11582, 11583, 7, 84, 2, 2, 11583, 11584, 7, 71, 2, 2, 11584, 11585, 7, 85, 2, 2, 11585, 11586, 7, 85, 2, 2, 11586, 1958, 3, 2, 2, 2, 11587, 11588, 7, 87, 2, 2, 11588, 11589, 7, 80, 2, 2, 11589, 11590, 7, 69, 2, 2, 11590, 11591, 7, 81, 2, 2, 11591, 11592, 7, 79, 2, 2, 11592, 11593, 7, 82, 2, 2, 11593, 11594, 7, 84, 2, 2, 11594, 11595, 7, 71, 2, 2, 11595, 11596, 7, 85, 2, 2, 11596, 11597, 7, 85, 2, 2, 11597, 11598, 7, 71, 2, 2, 11598, 11599, 7, 70, 2, 2, 11599, 11600, 7, 97, 2, 2, 11600, 11601, 7, 78, 2, 2, 11601, 11602, 7, 71, 2, 2, 11602, 11603, 7, 80, 2, 2, 11603, 11604, 7, 73, 2, 2, 11604, 11605, 7, 86, 2, 2, 11605, 11606, 7, 74, 2, 2, 11606, 1960, 3, 2, 2, 2, 11607, 11608, 7, 87, 2, 2, 11608, 11609, 7, 80, 2, 2, 11609, 11610, 7, 74, 2, 2, 11610, 11611, 7, 71, 2, 2, 11611, 11612, 7, 90, 2, 2, 11612, 1962, 3, 2, 2, 2, 11613, 11614, 7, 87, 2, 2, 11614, 11615, 7, 80, 2, 2, 11615, 11616, 7, 75, 2, 2, 11616, 11617, 7, 90, 2, 2, 11617, 11618, 7, 97, 2, 2, 11618, 11619, 7, 86, 2, 2, 11619, 11620, 7, 75, 2, 2, 11620, 11621, 7, 79, 2, 2, 11621, 11622, 7, 71, 2, 2, 11622, 11623, 7, 85, 2, 2, 11623, 11624, 7, 86, 2, 2, 11624, 11625, 7, 67, 2, 2, 11625, 11626, 7, 79, 2, 2, 11626, 11627, 7, 82, 2, 2, 11627, 1964, 3, 2, 2, 2, 11628, 11629, 7, 87, 2, 2, 11629, 11630, 7, 82, 2, 2, 11630, 11631, 7, 70, 2, 2, 11631, 11632, 7, 67, 2, 2, 11632, 11633, 7, 86, 2, 2, 11633, 11634, 7, 71, 2, 2, 11634, 11635, 7, 90, 2, 2, 11635, 11636, 7, 79, 2, 2, 11636, 11637, 7, 78, 2, 2, 11637, 1966, 3, 2, 2, 2, 11638, 11639, 7, 87, 2, 2, 11639, 11640, 7, 82, 2, 2, 11640, 11641, 7, 82, 2, 2, 11641, 11642, 7, 71, 2, 2, 11642, 11643, 7, 84, 2, 2, 11643, 1968, 3, 2, 2, 2, 11644, 11645, 7, 87, 2, 2, 11645, 11646, 7, 87, 2, 2, 11646, 11647, 7, 75, 2, 2, 11647, 11648, 7, 70, 2, 2, 11648, 1970, 3, 2, 2, 2, 11649, 11650, 7, 87, 2, 2, 11650, 11651, 7, 87, 2, 2, 11651, 11652, 7, 75, 2, 2, 11652, 11653, 7, 70, 2, 2, 11653, 11654, 7, 97, 2, 2, 11654, 11655, 7, 85, 2, 2, 11655, 11656, 7, 74, 2, 2, 11656, 11657, 7, 81, 2, 2, 11657, 11658, 7, 84, 2, 2, 11658, 11659, 7, 86, 2, 2, 11659, 1972, 3, 2, 2, 2, 11660, 11661, 7, 88, 2, 2, 11661, 11662, 7, 67, 2, 2, 11662, 11663, 7, 78, 2, 2, 11663, 11664, 7, 75, 2, 2, 11664, 11665, 7, 70, 2, 2, 11665, 11666, 7, 67, 2, 2, 11666, 11667, 7, 86, 2, 2, 11667, 11668, 7, 71, 2, 2, 11668, 11669, 7, 97, 2, 2, 11669, 11670, 7, 82, 2, 2, 11670, 11671, 7, 67, 2, 2, 11671, 11672, 7, 85, 2, 2, 11672, 11673, 7, 85, 2, 2, 11673, 11674, 7, 89, 2, 2, 11674, 11675, 7, 81, 2, 2, 11675, 11676, 7, 84, 2, 2, 11676, 11677, 7, 70, 2, 2, 11677, 11678, 7, 97, 2, 2, 11678, 11679, 7, 85, 2, 2, 11679, 11680, 7, 86, 2, 2, 11680, 11681, 7, 84, 2, 2, 11681, 11682, 7, 71, 2, 2, 11682, 11683, 7, 80, 2, 2, 11683, 11684, 7, 73, 2, 2, 11684, 11685, 7, 86, 2, 2, 11685, 11686, 7, 74, 2, 2, 11686, 1974, 3, 2, 2, 2, 11687, 11688, 7, 88, 2, 2, 11688, 11689, 7, 71, 2, 2, 11689, 11690, 7, 84, 2, 2, 11690, 11691, 7, 85, 2, 2, 11691, 11692, 7, 75, 2, 2, 11692, 11693, 7, 81, 2, 2, 11693, 11694, 7, 80, 2, 2, 11694, 1976, 3, 2, 2, 2, 11695, 11696, 7, 89, 2, 2, 11696, 11697, 7, 67, 2, 2, 11697, 11698, 7, 75, 2, 2, 11698, 11699, 7, 86, 2, 2, 11699, 11700, 7, 97, 2, 2, 11700, 11701, 7, 87, 2, 2, 11701, 11702, 7, 80, 2, 2, 11702, 11703, 7, 86, 2, 2, 11703, 11704, 7, 75, 2, 2, 11704, 11705, 7, 78, 2, 2, 11705, 11706, 7, 97, 2, 2, 11706, 11707, 7, 85, 2, 2, 11707, 11708, 7, 83, 2, 2, 11708, 11709, 7, 78, 2, 2, 11709, 11710, 7, 97, 2, 2, 11710, 11711, 7, 86, 2, 2, 11711, 11712, 7, 74, 2, 2, 11712, 11713, 7, 84, 2, 2, 11713, 11714, 7, 71, 2, 2, 11714, 11715, 7, 67, 2, 2, 11715, 11716, 7, 70, 2, 2, 11716, 11717, 7, 97, 2, 2, 11717, 11718, 7, 67, 2, 2, 11718, 11719, 7, 72, 2, 2, 11719, 11720, 7, 86, 2, 2, 11720, 11721, 7, 71, 2, 2, 11721, 11722, 7, 84, 2, 2, 11722, 11723, 7, 97, 2, 2, 11723, 11724, 7, 73, 2, 2, 11724, 11725, 7, 86, 2, 2, 11725, 11726, 7, 75, 2, 2, 11726, 11727, 7, 70, 2, 2, 11727, 11728, 7, 85, 2, 2, 11728, 1978, 3, 2, 2, 2, 11729, 11730, 7, 89, 2, 2, 11730, 11731, 7, 71, 2, 2, 11731, 11732, 7, 71, 2, 2, 11732, 11733, 7, 77, 2, 2, 11733, 11734, 7, 70, 2, 2, 11734, 11735, 7, 67, 2, 2, 11735, 11736, 7, 91, 2, 2, 11736, 1980, 3, 2, 2, 2, 11737, 11738, 7, 89, 2, 2, 11738, 11739, 7, 71, 2, 2, 11739, 11740, 7, 71, 2, 2, 11740, 11741, 7, 77, 2, 2, 11741, 11742, 7, 81, 2, 2, 11742, 11743, 7, 72, 2, 2, 11743, 11744, 7, 91, 2, 2, 11744, 11745, 7, 71, 2, 2, 11745, 11746, 7, 67, 2, 2, 11746, 11747, 7, 84, 2, 2, 11747, 1982, 3, 2, 2, 2, 11748, 11749, 7, 89, 2, 2, 11749, 11750, 7, 71, 2, 2, 11750, 11751, 7, 75, 2, 2, 11751, 11752, 7, 73, 2, 2, 11752, 11753, 7, 74, 2, 2, 11753, 11754, 7, 86, 2, 2, 11754, 11755, 7, 97, 2, 2, 11755, 11756, 7, 85, 2, 2, 11756, 11757, 7, 86, 2, 2, 11757, 11758, 7, 84, 2, 2, 11758, 11759, 7, 75, 2, 2, 11759, 11760, 7, 80, 2, 2, 11760, 11761, 7, 73, 2, 2, 11761, 1984, 3, 2, 2, 2, 11762, 11763, 7, 89, 2, 2, 11763, 11764, 7, 75, 2, 2, 11764, 11765, 7, 86, 2, 2, 11765, 11766, 7, 74, 2, 2, 11766, 11767, 7, 75, 2, 2, 11767, 11768, 7, 80, 2, 2, 11768, 1986, 3, 2, 2, 2, 11769, 11770, 7, 91, 2, 2, 11770, 11771, 7, 71, 2, 2, 11771, 11772, 7, 67, 2, 2, 11772, 11773, 7, 84, 2, 2, 11773, 11774, 7, 89, 2, 2, 11774, 11775, 7, 71, 2, 2, 11775, 11776, 7, 71, 2, 2, 11776, 11777, 7, 77, 2, 2, 11777, 1988, 3, 2, 2, 2, 11778, 11779, 7, 91, 2, 2, 11779, 1990, 3, 2, 2, 2, 11780, 11781, 7, 90, 2, 2, 11781, 1992, 3, 2, 2, 2, 11782, 11783, 7, 60, 2, 2, 11783, 11784, 7, 63, 2, 2, 11784, 1994, 3, 2, 2, 2, 11785, 11786, 7, 45, 2, 2, 11786, 11787, 7, 63, 2, 2, 11787, 1996, 3, 2, 2, 2, 11788, 11789, 7, 47, 2, 2, 11789, 11790, 7, 63, 2, 2, 11790, 1998, 3, 2, 2, 2, 11791, 11792, 7, 44, 2, 2, 11792, 11793, 7, 63, 2, 2, 11793, 2000, 3, 2, 2, 2, 11794, 11795, 7, 49, 2, 2, 11795, 11796, 7, 63, 2, 2, 11796, 2002, 3, 2, 2, 2, 11797, 11798, 7, 39, 2, 2, 11798, 11799, 7, 63, 2, 2, 11799, 2004, 3, 2, 2, 2, 11800, 11801, 7, 40, 2, 2, 11801, 11802, 7, 63, 2, 2, 11802, 2006, 3, 2, 2, 2, 11803, 11804, 7, 96, 2, 2, 11804, 11805, 7, 63, 2, 2, 11805, 2008, 3, 2, 2, 2, 11806, 11807, 7, 126, 2, 2, 11807, 11808, 7, 63, 2, 2, 11808, 2010, 3, 2, 2, 2, 11809, 11810, 7, 44, 2, 2, 11810, 2012, 3, 2, 2, 2, 11811, 11812, 7, 49, 2, 2, 11812, 2014, 3, 2, 2, 2, 11813, 11814, 7, 39, 2, 2, 11814, 2016, 3, 2, 2, 2, 11815, 11816, 7, 45, 2, 2, 11816, 2018, 3, 2, 2, 2, 11817, 11818, 7, 47, 2, 2, 11818, 11819, 7, 47, 2, 2, 11819, 2020, 3, 2, 2, 2, 11820, 11821, 7, 47, 2, 2, 11821, 2022, 3, 2, 2, 2, 11822, 11823, 7, 70, 2, 2, 11823, 11824, 7, 75, 2, 2, 11824, 11825, 7, 88, 2, 2, 11825, 2024, 3, 2, 2, 2, 11826, 11827, 7, 79, 2, 2, 11827, 11828, 7, 81, 2, 2, 11828, 11829, 7, 70, 2, 2, 11829, 2026, 3, 2, 2, 2, 11830, 11831, 7, 63, 2, 2, 11831, 2028, 3, 2, 2, 2, 11832, 11833, 7, 64, 2, 2, 11833, 2030, 3, 2, 2, 2, 11834, 11835, 7, 62, 2, 2, 11835, 2032, 3, 2, 2, 2, 11836, 11837, 7, 35, 2, 2, 11837, 2034, 3, 2, 2, 2, 11838, 11839, 7, 128, 2, 2, 11839, 2036, 3, 2, 2, 2, 11840, 11841, 7, 126, 2, 2, 11841, 2038, 3, 2, 2, 2, 11842, 11843, 7, 40, 2, 2, 11843, 2040, 3, 2, 2, 2, 11844, 11845, 7, 96, 2, 2, 11845, 2042, 3, 2, 2, 2, 11846, 11847, 7, 48, 2, 2, 11847, 2044, 3, 2, 2, 2, 11848, 11849, 7, 42, 2, 2, 11849, 2046, 3, 2, 2, 2, 11850, 11851, 7, 43, 2, 2, 11851, 2048, 3, 2, 2, 2, 11852, 11853, 7, 46, 2, 2, 11853, 2050, 3, 2, 2, 2, 11854, 11855, 7, 61, 2, 2, 11855, 2052, 3, 2, 2, 2, 11856, 11857, 7, 66, 2, 2, 11857, 2054, 3, 2, 2, 2, 11858, 11859, 7, 50, 2, 2, 11859, 2056, 3, 2, 2, 2, 11860, 11861, 7, 51, 2, 2, 11861, 2058, 3, 2, 2, 2, 11862, 11863, 7, 52, 2, 2, 11863, 2060, 3, 2, 2, 2, 11864, 11865, 7, 41, 2, 2, 11865, 2062, 3, 2, 2, 2, 11866, 11867, 7, 36, 2, 2, 11867, 2064, 3, 2, 2, 2, 11868, 11869, 7, 98, 2, 2, 11869, 2066, 3, 2, 2, 2, 11870, 11871, 7, 60, 2, 2, 11871, 2068, 3, 2, 2, 2, 11872, 11876, 5, 2061, 1031, 2, 11873, 11876, 5, 2063, 1032, 2, 11874, 11876, 5, 2065, 1033, 2, 11875, 11872, 3, 2, 2, 2, 11875, 11873, 3, 2, 2, 2, 11875, 11874, 3, 2, 2, 2, 11876, 2070, 3, 2, 2, 2, 11877, 11878, 7, 98, 2, 2, 11878, 11879, 5, 2103, 1052, 2, 11879, 11880, 7, 98, 2, 2, 11880, 2072, 3, 2, 2, 2, 11881, 11883, 5, 2117, 1059, 2, 11882, 11881, 3, 2, 2, 2, 11883, 11884, 3, 2, 2, 2, 11884, 11882, 3, 2, 2, 2, 11884, 11885, 3, 2, 2, 2, 11885, 11886, 3, 2, 2, 2, 11886, 11887, 9, 4, 2, 2, 11887, 2074, 3, 2, 2, 2, 11888, 11889, 7, 80, 2, 2, 11889, 11890, 5, 2111, 1056, 2, 11890, 2076, 3, 2, 2, 2, 11891, 11895, 5, 2109, 1055, 2, 11892, 11895, 5, 2111, 1056, 2, 11893, 11895, 5, 2113, 1057, 2, 11894, 11891, 3, 2, 2, 2, 11894, 11892, 3, 2, 2, 2, 11894, 11893, 3, 2, 2, 2, 11895, 2078, 3, 2, 2, 2, 11896, 11898, 5, 2117, 1059, 2, 11897, 11896, 3, 2, 2, 2, 11898, 11899, 3, 2, 2, 2, 11899, 11897, 3, 2, 2, 2, 11899, 11900, 3, 2, 2, 2, 11900, 2080, 3, 2, 2, 2, 11901, 11902, 7, 90, 2, 2, 11902, 11906, 7, 41, 2, 2, 11903, 11904, 5, 2115, 1058, 2, 11904, 11905, 5, 2115, 1058, 2, 11905, 11907, 3, 2, 2, 2, 11906, 11903, 3, 2, 2, 2, 11907, 11908, 3, 2, 2, 2, 11908, 11906, 3, 2, 2, 2, 11908, 11909, 3, 2, 2, 2, 11909, 11910, 3, 2, 2, 2, 11910, 11911, 7, 41, 2, 2, 11911, 11921, 3, 2, 2, 2, 11912, 11913, 7, 50, 2, 2, 11913, 11914, 7, 90, 2, 2, 11914, 11916, 3, 2, 2, 2, 11915, 11917, 5, 2115, 1058, 2, 11916, 11915, 3, 2, 2, 2, 11917, 11918, 3, 2, 2, 2, 11918, 11916, 3, 2, 2, 2, 11918, 11919, 3, 2, 2, 2, 11919, 11921, 3, 2, 2, 2, 11920, 11901, 3, 2, 2, 2, 11920, 11912, 3, 2, 2, 2, 11921, 2082, 3, 2, 2, 2, 11922, 11924, 5, 2117, 1059, 2, 11923, 11922, 3, 2, 2, 2, 11924, 11925, 3, 2, 2, 2, 11925, 11923, 3, 2, 2, 2, 11925, 11926, 3, 2, 2, 2, 11926, 11928, 3, 2, 2, 2, 11927, 11923, 3, 2, 2, 2, 11927, 11928, 3, 2, 2, 2, 11928, 11929, 3, 2, 2, 2, 11929, 11931, 7, 48, 2, 2, 11930, 11932, 5, 2117, 1059, 2, 11931, 11930, 3, 2, 2, 2, 11932, 11933, 3, 2, 2, 2, 11933, 11931, 3, 2, 2, 2, 11933, 11934, 3, 2, 2, 2, 11934, 11966, 3, 2, 2, 2, 11935, 11937, 5, 2117, 1059, 2, 11936, 11935, 3, 2, 2, 2, 11937, 11938, 3, 2, 2, 2, 11938, 11936, 3, 2, 2, 2, 11938, 11939, 3, 2, 2, 2, 11939, 11940, 3, 2, 2, 2, 11940, 11941, 7, 48, 2, 2, 11941, 11942, 5, 2105, 1053, 2, 11942, 11966, 3, 2, 2, 2, 11943, 11945, 5, 2117, 1059, 2, 11944, 11943, 3, 2, 2, 2, 11945, 11946, 3, 2, 2, 2, 11946, 11944, 3, 2, 2, 2, 11946, 11947, 3, 2, 2, 2, 11947, 11949, 3, 2, 2, 2, 11948, 11944, 3, 2, 2, 2, 11948, 11949, 3, 2, 2, 2, 11949, 11950, 3, 2, 2, 2, 11950, 11952, 7, 48, 2, 2, 11951, 11953, 5, 2117, 1059, 2, 11952, 11951, 3, 2, 2, 2, 11953, 11954, 3, 2, 2, 2, 11954, 11952, 3, 2, 2, 2, 11954, 11955, 3, 2, 2, 2, 11955, 11956, 3, 2, 2, 2, 11956, 11957, 5, 2105, 1053, 2, 11957, 11966, 3, 2, 2, 2, 11958, 11960, 5, 2117, 1059, 2, 11959, 11958, 3, 2, 2, 2, 11960, 11961, 3, 2, 2, 2, 11961, 11959, 3, 2, 2, 2, 11961, 11962, 3, 2, 2, 2, 11962, 11963, 3, 2, 2, 2, 11963, 11964, 5, 2105, 1053, 2, 11964, 11966, 3, 2, 2, 2, 11965, 11927, 3, 2, 2, 2, 11965, 11936, 3, 2, 2, 2, 11965, 11948, 3, 2, 2, 2, 11965, 11959, 3, 2, 2, 2, 11966, 2084, 3, 2, 2, 2, 11967, 11968, 7, 94, 2, 2, 11968, 11969, 7, 80, 2, 2, 11969, 2086, 3, 2, 2, 2, 11970, 11971, 5, 2119, 1060, 2, 11971, 2088, 3, 2, 2, 2, 11972, 11973, 7, 97, 2, 2, 11973, 11974, 5, 2103, 1052, 2, 11974, 2090, 3, 2, 2, 2, 11975, 11976, 7, 48, 2, 2, 11976, 11977, 5, 2107, 1054, 2, 11977, 2092, 3, 2, 2, 2, 11978, 11979, 5, 2107, 1054, 2, 11979, 2094, 3, 2, 2, 2, 11980, 11982, 7, 98, 2, 2, 11981, 11983, 10, 5, 2, 2, 11982, 11981, 3, 2, 2, 2, 11983, 11984, 3, 2, 2, 2, 11984, 11982, 3, 2, 2, 2, 11984, 11985, 3, 2, 2, 2, 11985, 11986, 3, 2, 2, 2, 11986, 11987, 7, 98, 2, 2, 11987, 2096, 3, 2, 2, 2, 11988, 11993, 5, 2111, 1056, 2, 11989, 11993, 5, 2109, 1055, 2, 11990, 11993, 5, 2113, 1057, 2, 11991, 11993, 5, 2107, 1054, 2, 11992, 11988, 3, 2, 2, 2, 11992, 11989, 3, 2, 2, 2, 11992, 11990, 3, 2, 2, 2, 11992, 11991, 3, 2, 2, 2, 11993, 11994, 3, 2, 2, 2, 11994, 11999, 7, 66, 2, 2, 11995, 12000, 5, 2111, 1056, 2, 11996, 12000, 5, 2109, 1055, 2, 11997, 12000, 5, 2113, 1057, 2, 11998, 12000, 5, 2107, 1054, 2, 11999, 11995, 3, 2, 2, 2, 11999, 11996, 3, 2, 2, 2, 11999, 11997, 3, 2, 2, 2, 11999, 11998, 3, 2, 2, 2, 12000, 2098, 3, 2, 2, 2, 12001, 12010, 7, 66, 2, 2, 12002, 12004, 9, 6, 2, 2, 12003, 12002, 3, 2, 2, 2, 12004, 12005, 3, 2, 2, 2, 12005, 12003, 3, 2, 2, 2, 12005, 12006, 3, 2, 2, 2, 12006, 12011, 3, 2, 2, 2, 12007, 12011, 5, 2111, 1056, 2, 12008, 12011, 5, 2109, 1055, 2, 12009, 12011, 5, 2113, 1057, 2, 12010, 12003, 3, 2, 2, 2, 12010, 12007, 3, 2, 2, 2, 12010, 12008, 3, 2, 2, 2, 12010, 12009, 3, 2, 2, 2, 12011, 2100, 3, 2, 2, 2, 12012, 12013, 7, 66, 2, 2, 12013, 12020, 7, 66, 2, 2, 12014, 12016, 9, 6, 2, 2, 12015, 12014, 3, 2, 2, 2, 12016, 12017, 3, 2, 2, 2, 12017, 12015, 3, 2, 2, 2, 12017, 12018, 3, 2, 2, 2, 12018, 12021, 3, 2, 2, 2, 12019, 12021, 5, 2113, 1057, 2, 12020, 12015, 3, 2, 2, 2, 12020, 12019, 3, 2, 2, 2, 12021, 2102, 3, 2, 2, 2, 12022, 12064, 5, 1279, 640, 2, 12023, 12064, 5, 1281, 641, 2, 12024, 12064, 5, 1283, 642, 2, 12025, 12064, 5, 417, 209, 2, 12026, 12064, 5, 1285, 643, 2, 12027, 12064, 5, 1287, 644, 2, 12028, 12064, 5, 1289, 645, 2, 12029, 12064, 5, 1291, 646, 2, 12030, 12064, 5, 1293, 647, 2, 12031, 12064, 5, 1295, 648, 2, 12032, 12064, 5, 1297, 649, 2, 12033, 12064, 5, 1299, 650, 2, 12034, 12064, 5, 1301, 651, 2, 12035, 12064, 5, 1303, 652, 2, 12036, 12064, 5, 1305, 653, 2, 12037, 12064, 5, 1307, 654, 2, 12038, 12064, 5, 1309, 655, 2, 12039, 12064, 5, 1311, 656, 2, 12040, 12064, 5, 1313, 657, 2, 12041, 12064, 5, 1315, 658, 2, 12042, 12064, 5, 1317, 659, 2, 12043, 12064, 5, 1319, 660, 2, 12044, 12064, 5, 1321, 661, 2, 12045, 12064, 5, 1323, 662, 2, 12046, 12064, 5, 1325, 663, 2, 12047, 12064, 5, 1327, 664, 2, 12048, 12064, 5, 1329, 665, 2, 12049, 12064, 5, 1331, 666, 2, 12050, 12064, 5, 1333, 667, 2, 12051, 12064, 5, 1335, 668, 2, 12052, 12064, 5, 1337, 669, 2, 12053, 12064, 5, 1339, 670, 2, 12054, 12064, 5, 1341, 671, 2, 12055, 12064, 5, 1343, 672, 2, 12056, 12064, 5, 1345, 673, 2, 12057, 12064, 5, 1347, 674, 2, 12058, 12064, 5, 1349, 675, 2, 12059, 12064, 5, 1351, 676, 2, 12060, 12064, 5, 1353, 677, 2, 12061, 12064, 5, 1355, 678, 2, 12062, 12064, 5, 1357, 679, 2, 12063, 12022, 3, 2, 2, 2, 12063, 12023, 3, 2, 2, 2, 12063, 12024, 3, 2, 2, 2, 12063, 12025, 3, 2, 2, 2, 12063, 12026, 3, 2, 2, 2, 12063, 12027, 3, 2, 2, 2, 12063, 12028, 3, 2, 2, 2, 12063, 12029, 3, 2, 2, 2, 12063, 12030, 3, 2, 2, 2, 12063, 12031, 3, 2, 2, 2, 12063, 12032, 3, 2, 2, 2, 12063, 12033, 3, 2, 2, 2, 12063, 12034, 3, 2, 2, 2, 12063, 12035, 3, 2, 2, 2, 12063, 12036, 3, 2, 2, 2, 12063, 12037, 3, 2, 2, 2, 12063, 12038, 3, 2, 2, 2, 12063, 12039, 3, 2, 2, 2, 12063, 12040, 3, 2, 2, 2, 12063, 12041, 3, 2, 2, 2, 12063, 12042, 3, 2, 2, 2, 12063, 12043, 3, 2, 2, 2, 12063, 12044, 3, 2, 2, 2, 12063, 12045, 3, 2, 2, 2, 12063, 12046, 3, 2, 2, 2, 12063, 12047, 3, 2, 2, 2, 12063, 12048, 3, 2, 2, 2, 12063, 12049, 3, 2, 2, 2, 12063, 12050, 3, 2, 2, 2, 12063, 12051, 3, 2, 2, 2, 12063, 12052, 3, 2, 2, 2, 12063, 12053, 3, 2, 2, 2, 12063, 12054, 3, 2, 2, 2, 12063, 12055, 3, 2, 2, 2, 12063, 12056, 3, 2, 2, 2, 12063, 12057, 3, 2, 2, 2, 12063, 12058, 3, 2, 2, 2, 12063, 12059, 3, 2, 2, 2, 12063, 12060, 3, 2, 2, 2, 12063, 12061, 3, 2, 2, 2, 12063, 12062, 3, 2, 2, 2, 12064, 2104, 3, 2, 2, 2, 12065, 12067, 7, 71, 2, 2, 12066, 12068, 9, 7, 2, 2, 12067, 12066, 3, 2, 2, 2, 12067, 12068, 3, 2, 2, 2, 12068, 12070, 3, 2, 2, 2, 12069, 12071, 5, 2117, 1059, 2, 12070, 12069, 3, 2, 2, 2, 12071, 12072, 3, 2, 2, 2, 12072, 12070, 3, 2, 2, 2, 12072, 12073, 3, 2, 2, 2, 12073, 2106, 3, 2, 2, 2, 12074, 12076, 9, 8, 2, 2, 12075, 12074, 3, 2, 2, 2, 12076, 12079, 3, 2, 2, 2, 12077, 12078, 3, 2, 2, 2, 12077, 12075, 3, 2, 2, 2, 12078, 12081, 3, 2, 2, 2, 12079, 12077, 3, 2, 2, 2, 12080, 12082, 9, 9, 2, 2, 12081, 12080, 3, 2, 2, 2, 12082, 12083, 3, 2, 2, 2, 12083, 12084, 3, 2, 2, 2, 12083, 12081, 3, 2, 2, 2, 12084, 12088, 3, 2, 2, 2, 12085, 12087, 9, 8, 2, 2, 12086, 12085, 3, 2, 2, 2, 12087, 12090, 3, 2, 2, 2, 12088, 12086, 3, 2, 2, 2, 12088, 12089, 3, 2, 2, 2, 12089, 12093, 3, 2, 2, 2, 12090, 12088, 3, 2, 2, 2, 12091, 12093, 7, 65, 2, 2, 12092, 12077, 3, 2, 2, 2, 12092, 12091, 3, 2, 2, 2, 12093, 2108, 3, 2, 2, 2, 12094, 12102, 7, 36, 2, 2, 12095, 12096, 7, 94, 2, 2, 12096, 12101, 11, 2, 2, 2, 12097, 12098, 7, 36, 2, 2, 12098, 12101, 7, 36, 2, 2, 12099, 12101, 10, 10, 2, 2, 12100, 12095, 3, 2, 2, 2, 12100, 12097, 3, 2, 2, 2, 12100, 12099, 3, 2, 2, 2, 12101, 12104, 3, 2, 2, 2, 12102, 12100, 3, 2, 2, 2, 12102, 12103, 3, 2, 2, 2, 12103, 12105, 3, 2, 2, 2, 12104, 12102, 3, 2, 2, 2, 12105, 12108, 7, 36, 2, 2, 12106, 12108, 7, 65, 2, 2, 12107, 12094, 3, 2, 2, 2, 12107, 12106, 3, 2, 2, 2, 12108, 2110, 3, 2, 2, 2, 12109, 12117, 7, 41, 2, 2, 12110, 12111, 7, 94, 2, 2, 12111, 12116, 11, 2, 2, 2, 12112, 12113, 7, 41, 2, 2, 12113, 12116, 7, 41, 2, 2, 12114, 12116, 10, 11, 2, 2, 12115, 12110, 3, 2, 2, 2, 12115, 12112, 3, 2, 2, 2, 12115, 12114, 3, 2, 2, 2, 12116, 12119, 3, 2, 2, 2, 12117, 12115, 3, 2, 2, 2, 12117, 12118, 3, 2, 2, 2, 12118, 12120, 3, 2, 2, 2, 12119, 12117, 3, 2, 2, 2, 12120, 12121, 7, 41, 2, 2, 12121, 2112, 3, 2, 2, 2, 12122, 12130, 7, 98, 2, 2, 12123, 12124, 7, 94, 2, 2, 12124, 12129, 11, 2, 2, 2, 12125, 12126, 7, 98, 2, 2, 12126, 12129, 7, 98, 2, 2, 12127, 12129, 10, 12, 2, 2, 12128, 12123, 3, 2, 2, 2, 12128, 12125, 3, 2, 2, 2, 12128, 12127, 3, 2, 2, 2, 12129, 12132, 3, 2, 2, 2, 12130, 12128, 3, 2, 2, 2, 12130, 12131, 3, 2, 2, 2, 12131, 12133, 3, 2, 2, 2, 12132, 12130, 3, 2, 2, 2, 12133, 12134, 7, 98, 2, 2, 12134, 2114, 3, 2, 2, 2, 12135, 12136, 9, 13, 2, 2, 12136, 2116, 3, 2, 2, 2, 12137, 12138, 9, 14, 2, 2, 12138, 2118, 3, 2, 2, 2, 12139, 12140, 7, 68, 2, 2, 12140, 12142, 7, 41, 2, 2, 12141, 12143, 9, 15, 2, 2, 12142, 12141, 3, 2, 2, 2, 12143, 12144, 3, 2, 2, 2, 12144, 12142, 3, 2, 2, 2, 12144, 12145, 3, 2, 2, 2, 12145, 12146, 3, 2, 2, 2, 12146, 12147, 7, 41, 2, 2, 12147, 2120, 3, 2, 2, 2, 12148, 12149, 11, 2, 2, 2, 12149, 12150, 3, 2, 2, 2, 12150, 12151, 8, 1061, 4, 2, 12151, 2122, 3, 2, 2, 2, 53, 2, 2126, 2137, 2150, 2162, 2167, 2171, 2175, 2181, 2185, 2187, 7813, 7840, 11875, 11884, 11894, 11899, 11908, 11918, 11920, 11925, 11927, 11933, 11938, 11946, 11948, 11954, 11961, 11965, 11984, 11992, 11999, 12005, 12010, 12017, 12020, 12063, 12067, 12072, 12077, 12083, 12088, 12092, 12100, 12102, 12107, 12115, 12117, 12128, 12130, 12144, 5, 2, 3, 2, 2, 4, 2, 2, 5, 2] \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlLexer.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlLexer.java new file mode 100644 index 00000000000..8c2469caa0a --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlLexer.java @@ -0,0 +1,5644 @@ +// Generated from E:/seata/seata/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr\MySqlLexer.g4 by ANTLR 4.8 +package io.seata.sqlparser.antlr.mysql.parser; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class MySqlLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.8", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + SPACE=1, SPEC_MYSQL_COMMENT=2, COMMENT_INPUT=3, LINE_COMMENT=4, ADD=5, + ALL=6, ALTER=7, ALWAYS=8, ANALYZE=9, AND=10, AS=11, ASC=12, BEFORE=13, + BETWEEN=14, BOTH=15, BY=16, CALL=17, CASCADE=18, CASE=19, CAST=20, CHANGE=21, + CHARACTER=22, CHECK=23, COLLATE=24, COLUMN=25, CONDITION=26, CONSTRAINT=27, + CONTINUE=28, CONVERT=29, CREATE=30, CROSS=31, CURRENT=32, CURRENT_USER=33, + CURSOR=34, DATABASE=35, DATABASES=36, DECLARE=37, DEFAULT=38, DELAYED=39, + DELETE=40, DESC=41, DESCRIBE=42, DETERMINISTIC=43, DIAGNOSTICS=44, DISTINCT=45, + DISTINCTROW=46, DROP=47, EACH=48, ELSE=49, ELSEIF=50, ENCLOSED=51, ESCAPED=52, + EXISTS=53, EXIT=54, EXPLAIN=55, FALSE=56, FETCH=57, FOR=58, FORCE=59, + FOREIGN=60, FROM=61, FULLTEXT=62, GENERATED=63, GET=64, GRANT=65, GROUP=66, + HAVING=67, HIGH_PRIORITY=68, IF=69, IGNORE=70, IN=71, INDEX=72, INFILE=73, + INNER=74, INOUT=75, INSERT=76, INTERVAL=77, INTO=78, IS=79, ITERATE=80, + JOIN=81, KEY=82, KEYS=83, KILL=84, LEADING=85, LEAVE=86, LEFT=87, LIKE=88, + LIMIT=89, LINEAR=90, LINES=91, LOAD=92, LOCK=93, LOOP=94, LOW_PRIORITY=95, + MASTER_BIND=96, MASTER_SSL_VERIFY_SERVER_CERT=97, MATCH=98, MAXVALUE=99, + MODIFIES=100, NATURAL=101, NOT=102, NO_WRITE_TO_BINLOG=103, NULL_LITERAL=104, + NUMBER=105, ON=106, OPTIMIZE=107, OPTION=108, OPTIONALLY=109, OR=110, + ORDER=111, OUT=112, OUTER=113, OUTFILE=114, PARTITION=115, PRIMARY=116, + PROCEDURE=117, PURGE=118, RANGE=119, READ=120, READS=121, REFERENCES=122, + REGEXP=123, RELEASE=124, RENAME=125, REPEAT=126, REPLACE=127, REQUIRE=128, + RESIGNAL=129, RESTRICT=130, RETURN=131, REVOKE=132, RIGHT=133, RLIKE=134, + SCHEMA=135, SCHEMAS=136, SELECT=137, SET=138, SEPARATOR=139, SHOW=140, + SIGNAL=141, SPATIAL=142, SQL=143, SQLEXCEPTION=144, SQLSTATE=145, SQLWARNING=146, + SQL_BIG_RESULT=147, SQL_CALC_FOUND_ROWS=148, SQL_SMALL_RESULT=149, SSL=150, + STACKED=151, STARTING=152, STRAIGHT_JOIN=153, TABLE=154, TERMINATED=155, + THEN=156, TO=157, TRAILING=158, TRIGGER=159, TRUE=160, UNDO=161, UNION=162, + UNIQUE=163, UNLOCK=164, UNSIGNED=165, UPDATE=166, USAGE=167, USE=168, + USING=169, VALUES=170, WHEN=171, WHERE=172, WHILE=173, WITH=174, WRITE=175, + XOR=176, ZEROFILL=177, TINYINT=178, SMALLINT=179, MEDIUMINT=180, MIDDLEINT=181, + INT=182, INT1=183, INT2=184, INT3=185, INT4=186, INT8=187, INTEGER=188, + BIGINT=189, REAL=190, DOUBLE=191, PRECISION=192, FLOAT=193, FLOAT4=194, + FLOAT8=195, DECIMAL=196, DEC=197, NUMERIC=198, DATE=199, TIME=200, TIMESTAMP=201, + DATETIME=202, YEAR=203, CHAR=204, VARCHAR=205, NVARCHAR=206, NATIONAL=207, + BINARY=208, VARBINARY=209, TINYBLOB=210, BLOB=211, MEDIUMBLOB=212, LONG=213, + LONGBLOB=214, TINYTEXT=215, TEXT=216, MEDIUMTEXT=217, LONGTEXT=218, ENUM=219, + VARYING=220, SERIAL=221, YEAR_MONTH=222, DAY_HOUR=223, DAY_MINUTE=224, + DAY_SECOND=225, HOUR_MINUTE=226, HOUR_SECOND=227, MINUTE_SECOND=228, SECOND_MICROSECOND=229, + MINUTE_MICROSECOND=230, HOUR_MICROSECOND=231, DAY_MICROSECOND=232, JSON_VALID=233, + JSON_SCHEMA_VALID=234, AVG=235, BIT_AND=236, BIT_OR=237, BIT_XOR=238, + COUNT=239, GROUP_CONCAT=240, MAX=241, MIN=242, STD=243, STDDEV=244, STDDEV_POP=245, + STDDEV_SAMP=246, SUM=247, VAR_POP=248, VAR_SAMP=249, VARIANCE=250, CURRENT_DATE=251, + CURRENT_TIME=252, CURRENT_TIMESTAMP=253, LOCALTIME=254, CURDATE=255, CURTIME=256, + DATE_ADD=257, DATE_SUB=258, EXTRACT=259, LOCALTIMESTAMP=260, NOW=261, + POSITION=262, SUBSTR=263, SUBSTRING=264, SYSDATE=265, TRIM=266, UTC_DATE=267, + UTC_TIME=268, UTC_TIMESTAMP=269, ACCOUNT=270, ACTION=271, AFTER=272, AGGREGATE=273, + ALGORITHM=274, ANY=275, AT=276, AUTHORS=277, AUTOCOMMIT=278, AUTOEXTEND_SIZE=279, + AUTO_INCREMENT=280, AVG_ROW_LENGTH=281, BEGIN=282, BINLOG=283, BIT=284, + BLOCK=285, BOOL=286, BOOLEAN=287, BTREE=288, CACHE=289, CASCADED=290, + CHAIN=291, CHANGED=292, CHANNEL=293, CHECKSUM=294, PAGE_CHECKSUM=295, + CIPHER=296, CLASS_ORIGIN=297, CLIENT=298, CLOSE=299, COALESCE=300, CODE=301, + COLUMNS=302, COLUMN_FORMAT=303, COLUMN_NAME=304, COMMENT=305, COMMIT=306, + COMPACT=307, COMPLETION=308, COMPRESSED=309, COMPRESSION=310, CONCURRENT=311, + CONNECTION=312, CONSISTENT=313, CONSTRAINT_CATALOG=314, CONSTRAINT_SCHEMA=315, + CONSTRAINT_NAME=316, CONTAINS=317, CONTEXT=318, CONTRIBUTORS=319, COPY=320, + CPU=321, CURSOR_NAME=322, DATA=323, DATAFILE=324, DEALLOCATE=325, DEFAULT_AUTH=326, + DEFINER=327, DELAY_KEY_WRITE=328, DES_KEY_FILE=329, DIRECTORY=330, DISABLE=331, + DISCARD=332, DISK=333, DO=334, DUMPFILE=335, DUPLICATE=336, DYNAMIC=337, + ENABLE=338, ENCRYPTION=339, END=340, ENDS=341, ENGINE=342, ENGINES=343, + ERROR=344, ERRORS=345, ESCAPE=346, EVEN=347, EVENT=348, EVENTS=349, EVERY=350, + EXCHANGE=351, EXCLUSIVE=352, EXPIRE=353, EXPORT=354, EXTENDED=355, EXTENT_SIZE=356, + FAST=357, FAULTS=358, FIELDS=359, FILE_BLOCK_SIZE=360, FILTER=361, FIRST=362, + FIXED=363, FLUSH=364, FOLLOWS=365, FOUND=366, FULL=367, FUNCTION=368, + GENERAL=369, GLOBAL=370, GRANTS=371, GROUP_REPLICATION=372, HANDLER=373, + HASH=374, HELP=375, HOST=376, HOSTS=377, IDENTIFIED=378, IGNORE_SERVER_IDS=379, + IMPORT=380, INDEXES=381, INITIAL_SIZE=382, INPLACE=383, INSERT_METHOD=384, + INSTALL=385, INSTANCE=386, INVISIBLE=387, INVOKER=388, IO=389, IO_THREAD=390, + IPC=391, ISOLATION=392, ISSUER=393, JSON=394, KEY_BLOCK_SIZE=395, LANGUAGE=396, + LAST=397, LEAVES=398, LESS=399, LEVEL=400, LIST=401, LOCAL=402, LOGFILE=403, + LOGS=404, MASTER=405, MASTER_AUTO_POSITION=406, MASTER_CONNECT_RETRY=407, + MASTER_DELAY=408, MASTER_HEARTBEAT_PERIOD=409, MASTER_HOST=410, MASTER_LOG_FILE=411, + MASTER_LOG_POS=412, MASTER_PASSWORD=413, MASTER_PORT=414, MASTER_RETRY_COUNT=415, + MASTER_SSL=416, MASTER_SSL_CA=417, MASTER_SSL_CAPATH=418, MASTER_SSL_CERT=419, + MASTER_SSL_CIPHER=420, MASTER_SSL_CRL=421, MASTER_SSL_CRLPATH=422, MASTER_SSL_KEY=423, + MASTER_TLS_VERSION=424, MASTER_USER=425, MAX_CONNECTIONS_PER_HOUR=426, + MAX_QUERIES_PER_HOUR=427, MAX_ROWS=428, MAX_SIZE=429, MAX_UPDATES_PER_HOUR=430, + MAX_USER_CONNECTIONS=431, MEDIUM=432, MEMBER=433, MERGE=434, MESSAGE_TEXT=435, + MID=436, MIGRATE=437, MIN_ROWS=438, MODE=439, MODIFY=440, MUTEX=441, MYSQL=442, + MYSQL_ERRNO=443, NAME=444, NAMES=445, NCHAR=446, NEVER=447, NEXT=448, + NO=449, NODEGROUP=450, NONE=451, OFFLINE=452, OFFSET=453, OF=454, OJ=455, + OLD_PASSWORD=456, ONE=457, ONLINE=458, ONLY=459, OPEN=460, OPTIMIZER_COSTS=461, + OPTIONS=462, OWNER=463, PACK_KEYS=464, PAGE=465, PARSER=466, PARTIAL=467, + PARTITIONING=468, PARTITIONS=469, PASSWORD=470, PHASE=471, PLUGIN=472, + PLUGIN_DIR=473, PLUGINS=474, PORT=475, PRECEDES=476, PREPARE=477, PRESERVE=478, + PREV=479, PROCESSLIST=480, PROFILE=481, PROFILES=482, PROXY=483, QUERY=484, + QUICK=485, REBUILD=486, RECOVER=487, REDO_BUFFER_SIZE=488, REDUNDANT=489, + RELAY=490, RELAY_LOG_FILE=491, RELAY_LOG_POS=492, RELAYLOG=493, REMOVE=494, + REORGANIZE=495, REPAIR=496, REPLICATE_DO_DB=497, REPLICATE_DO_TABLE=498, + REPLICATE_IGNORE_DB=499, REPLICATE_IGNORE_TABLE=500, REPLICATE_REWRITE_DB=501, + REPLICATE_WILD_DO_TABLE=502, REPLICATE_WILD_IGNORE_TABLE=503, REPLICATION=504, + RESET=505, RESUME=506, RETURNED_SQLSTATE=507, RETURNS=508, ROLE=509, ROLLBACK=510, + ROLLUP=511, ROTATE=512, ROW=513, ROWS=514, ROW_FORMAT=515, SAVEPOINT=516, + SCHEDULE=517, SECURITY=518, SERVER=519, SESSION=520, SHARE=521, SHARED=522, + SIGNED=523, SIMPLE=524, SLAVE=525, SLOW=526, SNAPSHOT=527, SOCKET=528, + SOME=529, SONAME=530, SOUNDS=531, SOURCE=532, SQL_AFTER_GTIDS=533, SQL_AFTER_MTS_GAPS=534, + SQL_BEFORE_GTIDS=535, SQL_BUFFER_RESULT=536, SQL_CACHE=537, SQL_NO_CACHE=538, + SQL_THREAD=539, START=540, STARTS=541, STATS_AUTO_RECALC=542, STATS_PERSISTENT=543, + STATS_SAMPLE_PAGES=544, STATUS=545, STOP=546, STORAGE=547, STORED=548, + STRING=549, SUBCLASS_ORIGIN=550, SUBJECT=551, SUBPARTITION=552, SUBPARTITIONS=553, + SUSPEND=554, SWAPS=555, SWITCHES=556, TABLE_NAME=557, TABLESPACE=558, + TEMPORARY=559, TEMPTABLE=560, THAN=561, TRADITIONAL=562, TRANSACTION=563, + TRANSACTIONAL=564, TRIGGERS=565, TRUNCATE=566, UNDEFINED=567, UNDOFILE=568, + UNDO_BUFFER_SIZE=569, UNINSTALL=570, UNKNOWN=571, UNTIL=572, UPGRADE=573, + USER=574, USE_FRM=575, USER_RESOURCES=576, VALIDATION=577, VALUE=578, + VARIABLES=579, VIEW=580, VIRTUAL=581, VISIBLE=582, WAIT=583, WARNINGS=584, + WITHOUT=585, WORK=586, WRAPPER=587, X509=588, XA=589, XML=590, EUR=591, + USA=592, JIS=593, ISO=594, INTERNAL=595, QUARTER=596, MONTH=597, DAY=598, + HOUR=599, MINUTE=600, WEEK=601, SECOND=602, MICROSECOND=603, TABLES=604, + ROUTINE=605, EXECUTE=606, FILE=607, PROCESS=608, RELOAD=609, SHUTDOWN=610, + SUPER=611, PRIVILEGES=612, APPLICATION_PASSWORD_ADMIN=613, AUDIT_ADMIN=614, + BACKUP_ADMIN=615, BINLOG_ADMIN=616, BINLOG_ENCRYPTION_ADMIN=617, CLONE_ADMIN=618, + CONNECTION_ADMIN=619, ENCRYPTION_KEY_ADMIN=620, FIREWALL_ADMIN=621, FIREWALL_USER=622, + GROUP_REPLICATION_ADMIN=623, INNODB_REDO_LOG_ARCHIVE=624, NDB_STORED_USER=625, + PERSIST_RO_VARIABLES_ADMIN=626, REPLICATION_APPLIER=627, REPLICATION_SLAVE_ADMIN=628, + RESOURCE_GROUP_ADMIN=629, RESOURCE_GROUP_USER=630, ROLE_ADMIN=631, SESSION_VARIABLES_ADMIN=632, + SET_USER_ID=633, SHOW_ROUTINE=634, SYSTEM_VARIABLES_ADMIN=635, TABLE_ENCRYPTION_ADMIN=636, + VERSION_TOKEN_ADMIN=637, XA_RECOVER_ADMIN=638, ARMSCII8=639, ASCII=640, + BIG5=641, CP1250=642, CP1251=643, CP1256=644, CP1257=645, CP850=646, CP852=647, + CP866=648, CP932=649, DEC8=650, EUCJPMS=651, EUCKR=652, GB2312=653, GBK=654, + GEOSTD8=655, GREEK=656, HEBREW=657, HP8=658, KEYBCS2=659, KOI8R=660, KOI8U=661, + LATIN1=662, LATIN2=663, LATIN5=664, LATIN7=665, MACCE=666, MACROMAN=667, + SJIS=668, SWE7=669, TIS620=670, UCS2=671, UJIS=672, UTF16=673, UTF16LE=674, + UTF32=675, UTF8=676, UTF8MB3=677, UTF8MB4=678, ARCHIVE=679, BLACKHOLE=680, + CSV=681, FEDERATED=682, INNODB=683, MEMORY=684, MRG_MYISAM=685, MYISAM=686, + NDB=687, NDBCLUSTER=688, PERFORMANCE_SCHEMA=689, TOKUDB=690, REPEATABLE=691, + COMMITTED=692, UNCOMMITTED=693, SERIALIZABLE=694, GEOMETRYCOLLECTION=695, + GEOMCOLLECTION=696, GEOMETRY=697, LINESTRING=698, MULTILINESTRING=699, + MULTIPOINT=700, MULTIPOLYGON=701, POINT=702, POLYGON=703, ABS=704, ACOS=705, + ADDDATE=706, ADDTIME=707, AES_DECRYPT=708, AES_ENCRYPT=709, AREA=710, + ASBINARY=711, ASIN=712, ASTEXT=713, ASWKB=714, ASWKT=715, ASYMMETRIC_DECRYPT=716, + ASYMMETRIC_DERIVE=717, ASYMMETRIC_ENCRYPT=718, ASYMMETRIC_SIGN=719, ASYMMETRIC_VERIFY=720, + ATAN=721, ATAN2=722, BENCHMARK=723, BIN=724, BIT_COUNT=725, BIT_LENGTH=726, + BUFFER=727, CATALOG_NAME=728, CEIL=729, CEILING=730, CENTROID=731, CHARACTER_LENGTH=732, + CHARSET=733, CHAR_LENGTH=734, COERCIBILITY=735, COLLATION=736, COMPRESS=737, + CONCAT=738, CONCAT_WS=739, CONNECTION_ID=740, CONV=741, CONVERT_TZ=742, + COS=743, COT=744, CRC32=745, CREATE_ASYMMETRIC_PRIV_KEY=746, CREATE_ASYMMETRIC_PUB_KEY=747, + CREATE_DH_PARAMETERS=748, CREATE_DIGEST=749, CROSSES=750, DATEDIFF=751, + DATE_FORMAT=752, DAYNAME=753, DAYOFMONTH=754, DAYOFWEEK=755, DAYOFYEAR=756, + DECODE=757, DEGREES=758, DES_DECRYPT=759, DES_ENCRYPT=760, DIMENSION=761, + DISJOINT=762, ELT=763, ENCODE=764, ENCRYPT=765, ENDPOINT=766, ENVELOPE=767, + EQUALS=768, EXP=769, EXPORT_SET=770, EXTERIORRING=771, EXTRACTVALUE=772, + FIELD=773, FIND_IN_SET=774, FLOOR=775, FORMAT=776, FOUND_ROWS=777, FROM_BASE64=778, + FROM_DAYS=779, FROM_UNIXTIME=780, GEOMCOLLFROMTEXT=781, GEOMCOLLFROMWKB=782, + GEOMETRYCOLLECTIONFROMTEXT=783, GEOMETRYCOLLECTIONFROMWKB=784, GEOMETRYFROMTEXT=785, + GEOMETRYFROMWKB=786, GEOMETRYN=787, GEOMETRYTYPE=788, GEOMFROMTEXT=789, + GEOMFROMWKB=790, GET_FORMAT=791, GET_LOCK=792, GLENGTH=793, GREATEST=794, + GTID_SUBSET=795, GTID_SUBTRACT=796, HEX=797, IFNULL=798, INET6_ATON=799, + INET6_NTOA=800, INET_ATON=801, INET_NTOA=802, INSTR=803, INTERIORRINGN=804, + INTERSECTS=805, ISCLOSED=806, ISEMPTY=807, ISNULL=808, ISSIMPLE=809, IS_FREE_LOCK=810, + IS_IPV4=811, IS_IPV4_COMPAT=812, IS_IPV4_MAPPED=813, IS_IPV6=814, IS_USED_LOCK=815, + LAST_INSERT_ID=816, LCASE=817, LEAST=818, LENGTH=819, LINEFROMTEXT=820, + LINEFROMWKB=821, LINESTRINGFROMTEXT=822, LINESTRINGFROMWKB=823, LN=824, + LOAD_FILE=825, LOCATE=826, LOG=827, LOG10=828, LOG2=829, LOWER=830, LPAD=831, + LTRIM=832, MAKEDATE=833, MAKETIME=834, MAKE_SET=835, MASTER_POS_WAIT=836, + MBRCONTAINS=837, MBRDISJOINT=838, MBREQUAL=839, MBRINTERSECTS=840, MBROVERLAPS=841, + MBRTOUCHES=842, MBRWITHIN=843, MD5=844, MLINEFROMTEXT=845, MLINEFROMWKB=846, + MONTHNAME=847, MPOINTFROMTEXT=848, MPOINTFROMWKB=849, MPOLYFROMTEXT=850, + MPOLYFROMWKB=851, MULTILINESTRINGFROMTEXT=852, MULTILINESTRINGFROMWKB=853, + MULTIPOINTFROMTEXT=854, MULTIPOINTFROMWKB=855, MULTIPOLYGONFROMTEXT=856, + MULTIPOLYGONFROMWKB=857, NAME_CONST=858, NULLIF=859, NUMGEOMETRIES=860, + NUMINTERIORRINGS=861, NUMPOINTS=862, OCT=863, OCTET_LENGTH=864, ORD=865, + OVERLAPS=866, PERIOD_ADD=867, PERIOD_DIFF=868, PI=869, POINTFROMTEXT=870, + POINTFROMWKB=871, POINTN=872, POLYFROMTEXT=873, POLYFROMWKB=874, POLYGONFROMTEXT=875, + POLYGONFROMWKB=876, POW=877, POWER=878, QUOTE=879, RADIANS=880, RAND=881, + RANDOM_BYTES=882, RELEASE_LOCK=883, REVERSE=884, ROUND=885, ROW_COUNT=886, + RPAD=887, RTRIM=888, SEC_TO_TIME=889, SESSION_USER=890, SHA=891, SHA1=892, + SHA2=893, SCHEMA_NAME=894, SIGN=895, SIN=896, SLEEP=897, SOUNDEX=898, + SQL_THREAD_WAIT_AFTER_GTIDS=899, SQRT=900, SRID=901, STARTPOINT=902, STRCMP=903, + STR_TO_DATE=904, ST_AREA=905, ST_ASBINARY=906, ST_ASTEXT=907, ST_ASWKB=908, + ST_ASWKT=909, ST_BUFFER=910, ST_CENTROID=911, ST_CONTAINS=912, ST_CROSSES=913, + ST_DIFFERENCE=914, ST_DIMENSION=915, ST_DISJOINT=916, ST_DISTANCE=917, + ST_ENDPOINT=918, ST_ENVELOPE=919, ST_EQUALS=920, ST_EXTERIORRING=921, + ST_GEOMCOLLFROMTEXT=922, ST_GEOMCOLLFROMTXT=923, ST_GEOMCOLLFROMWKB=924, + ST_GEOMETRYCOLLECTIONFROMTEXT=925, ST_GEOMETRYCOLLECTIONFROMWKB=926, ST_GEOMETRYFROMTEXT=927, + ST_GEOMETRYFROMWKB=928, ST_GEOMETRYN=929, ST_GEOMETRYTYPE=930, ST_GEOMFROMTEXT=931, + ST_GEOMFROMWKB=932, ST_INTERIORRINGN=933, ST_INTERSECTION=934, ST_INTERSECTS=935, + ST_ISCLOSED=936, ST_ISEMPTY=937, ST_ISSIMPLE=938, ST_LINEFROMTEXT=939, + ST_LINEFROMWKB=940, ST_LINESTRINGFROMTEXT=941, ST_LINESTRINGFROMWKB=942, + ST_NUMGEOMETRIES=943, ST_NUMINTERIORRING=944, ST_NUMINTERIORRINGS=945, + ST_NUMPOINTS=946, ST_OVERLAPS=947, ST_POINTFROMTEXT=948, ST_POINTFROMWKB=949, + ST_POINTN=950, ST_POLYFROMTEXT=951, ST_POLYFROMWKB=952, ST_POLYGONFROMTEXT=953, + ST_POLYGONFROMWKB=954, ST_SRID=955, ST_STARTPOINT=956, ST_SYMDIFFERENCE=957, + ST_TOUCHES=958, ST_UNION=959, ST_WITHIN=960, ST_X=961, ST_Y=962, SUBDATE=963, + SUBSTRING_INDEX=964, SUBTIME=965, SYSTEM_USER=966, TAN=967, TIMEDIFF=968, + TIMESTAMPADD=969, TIMESTAMPDIFF=970, TIME_FORMAT=971, TIME_TO_SEC=972, + TOUCHES=973, TO_BASE64=974, TO_DAYS=975, TO_SECONDS=976, UCASE=977, UNCOMPRESS=978, + UNCOMPRESSED_LENGTH=979, UNHEX=980, UNIX_TIMESTAMP=981, UPDATEXML=982, + UPPER=983, UUID=984, UUID_SHORT=985, VALIDATE_PASSWORD_STRENGTH=986, VERSION=987, + WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS=988, WEEKDAY=989, WEEKOFYEAR=990, WEIGHT_STRING=991, + WITHIN=992, YEARWEEK=993, Y_FUNCTION=994, X_FUNCTION=995, VAR_ASSIGN=996, + PLUS_ASSIGN=997, MINUS_ASSIGN=998, MULT_ASSIGN=999, DIV_ASSIGN=1000, MOD_ASSIGN=1001, + AND_ASSIGN=1002, XOR_ASSIGN=1003, OR_ASSIGN=1004, STAR=1005, DIVIDE=1006, + MODULE=1007, PLUS=1008, MINUSMINUS=1009, MINUS=1010, DIV=1011, MOD=1012, + EQUAL_SYMBOL=1013, GREATER_SYMBOL=1014, LESS_SYMBOL=1015, EXCLAMATION_SYMBOL=1016, + BIT_NOT_OP=1017, BIT_OR_OP=1018, BIT_AND_OP=1019, BIT_XOR_OP=1020, DOT=1021, + LR_BRACKET=1022, RR_BRACKET=1023, COMMA=1024, SEMI=1025, AT_SIGN=1026, + ZERO_DECIMAL=1027, ONE_DECIMAL=1028, TWO_DECIMAL=1029, SINGLE_QUOTE_SYMB=1030, + DOUBLE_QUOTE_SYMB=1031, REVERSE_QUOTE_SYMB=1032, COLON_SYMB=1033, CHARSET_REVERSE_QOUTE_STRING=1034, + FILESIZE_LITERAL=1035, START_NATIONAL_STRING_LITERAL=1036, STRING_LITERAL=1037, + DECIMAL_LITERAL=1038, HEXADECIMAL_LITERAL=1039, REAL_LITERAL=1040, NULL_SPEC_LITERAL=1041, + BIT_STRING=1042, STRING_CHARSET_NAME=1043, DOT_ID=1044, ID=1045, REVERSE_QUOTE_ID=1046, + STRING_USER_NAME=1047, LOCAL_ID=1048, GLOBAL_ID=1049, ERROR_RECONGNIGION=1050; + public static final int + MYSQLCOMMENT=2, ERRORCHANNEL=3; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "MYSQLCOMMENT", "ERRORCHANNEL" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "SPACE", "SPEC_MYSQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", "ADD", + "ALL", "ALTER", "ALWAYS", "ANALYZE", "AND", "AS", "ASC", "BEFORE", "BETWEEN", + "BOTH", "BY", "CALL", "CASCADE", "CASE", "CAST", "CHANGE", "CHARACTER", + "CHECK", "COLLATE", "COLUMN", "CONDITION", "CONSTRAINT", "CONTINUE", + "CONVERT", "CREATE", "CROSS", "CURRENT", "CURRENT_USER", "CURSOR", "DATABASE", + "DATABASES", "DECLARE", "DEFAULT", "DELAYED", "DELETE", "DESC", "DESCRIBE", + "DETERMINISTIC", "DIAGNOSTICS", "DISTINCT", "DISTINCTROW", "DROP", "EACH", + "ELSE", "ELSEIF", "ENCLOSED", "ESCAPED", "EXISTS", "EXIT", "EXPLAIN", + "FALSE", "FETCH", "FOR", "FORCE", "FOREIGN", "FROM", "FULLTEXT", "GENERATED", + "GET", "GRANT", "GROUP", "HAVING", "HIGH_PRIORITY", "IF", "IGNORE", "IN", + "INDEX", "INFILE", "INNER", "INOUT", "INSERT", "INTERVAL", "INTO", "IS", + "ITERATE", "JOIN", "KEY", "KEYS", "KILL", "LEADING", "LEAVE", "LEFT", + "LIKE", "LIMIT", "LINEAR", "LINES", "LOAD", "LOCK", "LOOP", "LOW_PRIORITY", + "MASTER_BIND", "MASTER_SSL_VERIFY_SERVER_CERT", "MATCH", "MAXVALUE", + "MODIFIES", "NATURAL", "NOT", "NO_WRITE_TO_BINLOG", "NULL_LITERAL", "NUMBER", + "ON", "OPTIMIZE", "OPTION", "OPTIONALLY", "OR", "ORDER", "OUT", "OUTER", + "OUTFILE", "PARTITION", "PRIMARY", "PROCEDURE", "PURGE", "RANGE", "READ", + "READS", "REFERENCES", "REGEXP", "RELEASE", "RENAME", "REPEAT", "REPLACE", + "REQUIRE", "RESIGNAL", "RESTRICT", "RETURN", "REVOKE", "RIGHT", "RLIKE", + "SCHEMA", "SCHEMAS", "SELECT", "SET", "SEPARATOR", "SHOW", "SIGNAL", + "SPATIAL", "SQL", "SQLEXCEPTION", "SQLSTATE", "SQLWARNING", "SQL_BIG_RESULT", + "SQL_CALC_FOUND_ROWS", "SQL_SMALL_RESULT", "SSL", "STACKED", "STARTING", + "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_VALID", + "JSON_SCHEMA_VALID", "AVG", "BIT_AND", "BIT_OR", "BIT_XOR", "COUNT", + "GROUP_CONCAT", "MAX", "MIN", "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", "COALESCE", "CODE", "COLUMNS", + "COLUMN_FORMAT", "COLUMN_NAME", "COMMENT", "COMMIT", "COMPACT", "COMPLETION", + "COMPRESSED", "COMPRESSION", "CONCURRENT", "CONNECTION", "CONSISTENT", + "CONSTRAINT_CATALOG", "CONSTRAINT_SCHEMA", "CONSTRAINT_NAME", "CONTAINS", + "CONTEXT", "CONTRIBUTORS", "COPY", "CPU", "CURSOR_NAME", "DATA", "DATAFILE", + "DEALLOCATE", "DEFAULT_AUTH", "DEFINER", "DELAY_KEY_WRITE", "DES_KEY_FILE", + "DIRECTORY", "DISABLE", "DISCARD", "DISK", "DO", "DUMPFILE", "DUPLICATE", + "DYNAMIC", "ENABLE", "ENCRYPTION", "END", "ENDS", "ENGINE", "ENGINES", + "ERROR", "ERRORS", "ESCAPE", "EVEN", "EVENT", "EVENTS", "EVERY", "EXCHANGE", + "EXCLUSIVE", "EXPIRE", "EXPORT", "EXTENDED", "EXTENT_SIZE", "FAST", "FAULTS", + "FIELDS", "FILE_BLOCK_SIZE", "FILTER", "FIRST", "FIXED", "FLUSH", "FOLLOWS", + "FOUND", "FULL", "FUNCTION", "GENERAL", "GLOBAL", "GRANTS", "GROUP_REPLICATION", + "HANDLER", "HASH", "HELP", "HOST", "HOSTS", "IDENTIFIED", "IGNORE_SERVER_IDS", + "IMPORT", "INDEXES", "INITIAL_SIZE", "INPLACE", "INSERT_METHOD", "INSTALL", + "INSTANCE", "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", "NODEGROUP", "NONE", + "OFFLINE", "OFFSET", "OF", "OJ", "OLD_PASSWORD", "ONE", "ONLINE", "ONLY", + "OPEN", "OPTIMIZER_COSTS", "OPTIONS", "OWNER", "PACK_KEYS", "PAGE", "PARSER", + "PARTIAL", "PARTITIONING", "PARTITIONS", "PASSWORD", "PHASE", "PLUGIN", + "PLUGIN_DIR", "PLUGINS", "PORT", "PRECEDES", "PREPARE", "PRESERVE", "PREV", + "PROCESSLIST", "PROFILE", "PROFILES", "PROXY", "QUERY", "QUICK", "REBUILD", + "RECOVER", "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", "RESUME", "RETURNED_SQLSTATE", "RETURNS", "ROLE", + "ROLLBACK", "ROLLUP", "ROTATE", "ROW", "ROWS", "ROW_FORMAT", "SAVEPOINT", + "SCHEDULE", "SECURITY", "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", "TEMPORARY", "TEMPTABLE", "THAN", "TRADITIONAL", "TRANSACTION", + "TRANSACTIONAL", "TRIGGERS", "TRUNCATE", "UNDEFINED", "UNDOFILE", "UNDO_BUFFER_SIZE", + "UNINSTALL", "UNKNOWN", "UNTIL", "UPGRADE", "USER", "USE_FRM", "USER_RESOURCES", + "VALIDATION", "VALUE", "VARIABLES", "VIEW", "VIRTUAL", "VISIBLE", "WAIT", + "WARNINGS", "WITHOUT", "WORK", "WRAPPER", "X509", "XA", "XML", "EUR", + "USA", "JIS", "ISO", "INTERNAL", "QUARTER", "MONTH", "DAY", "HOUR", "MINUTE", + "WEEK", "SECOND", "MICROSECOND", "TABLES", "ROUTINE", "EXECUTE", "FILE", + "PROCESS", "RELOAD", "SHUTDOWN", "SUPER", "PRIVILEGES", "APPLICATION_PASSWORD_ADMIN", + "AUDIT_ADMIN", "BACKUP_ADMIN", "BINLOG_ADMIN", "BINLOG_ENCRYPTION_ADMIN", + "CLONE_ADMIN", "CONNECTION_ADMIN", "ENCRYPTION_KEY_ADMIN", "FIREWALL_ADMIN", + "FIREWALL_USER", "GROUP_REPLICATION_ADMIN", "INNODB_REDO_LOG_ARCHIVE", + "NDB_STORED_USER", "PERSIST_RO_VARIABLES_ADMIN", "REPLICATION_APPLIER", + "REPLICATION_SLAVE_ADMIN", "RESOURCE_GROUP_ADMIN", "RESOURCE_GROUP_USER", + "ROLE_ADMIN", "SESSION_VARIABLES_ADMIN", "SET_USER_ID", "SHOW_ROUTINE", + "SYSTEM_VARIABLES_ADMIN", "TABLE_ENCRYPTION_ADMIN", "VERSION_TOKEN_ADMIN", + "XA_RECOVER_ADMIN", "ARMSCII8", "ASCII", "BIG5", "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", "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", "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", + "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", "MINUSMINUS", "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", "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" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, null, "'ADD'", "'ALL'", "'ALTER'", "'ALWAYS'", + "'ANALYZE'", "'AND'", "'AS'", "'ASC'", "'BEFORE'", "'BETWEEN'", "'BOTH'", + "'BY'", "'CALL'", "'CASCADE'", "'CASE'", "'CAST'", "'CHANGE'", "'CHARACTER'", + "'CHECK'", "'COLLATE'", "'COLUMN'", "'CONDITION'", "'CONSTRAINT'", "'CONTINUE'", + "'CONVERT'", "'CREATE'", "'CROSS'", "'CURRENT'", "'CURRENT_USER'", "'CURSOR'", + "'DATABASE'", "'DATABASES'", "'DECLARE'", "'DEFAULT'", "'DELAYED'", "'DELETE'", + "'DESC'", "'DESCRIBE'", "'DETERMINISTIC'", "'DIAGNOSTICS'", "'DISTINCT'", + "'DISTINCTROW'", "'DROP'", "'EACH'", "'ELSE'", "'ELSEIF'", "'ENCLOSED'", + "'ESCAPED'", "'EXISTS'", "'EXIT'", "'EXPLAIN'", "'FALSE'", "'FETCH'", + "'FOR'", "'FORCE'", "'FOREIGN'", "'FROM'", "'FULLTEXT'", "'GENERATED'", + "'GET'", "'GRANT'", "'GROUP'", "'HAVING'", "'HIGH_PRIORITY'", "'IF'", + "'IGNORE'", "'IN'", "'INDEX'", "'INFILE'", "'INNER'", "'INOUT'", "'INSERT'", + "'INTERVAL'", "'INTO'", "'IS'", "'ITERATE'", "'JOIN'", "'KEY'", "'KEYS'", + "'KILL'", "'LEADING'", "'LEAVE'", "'LEFT'", "'LIKE'", "'LIMIT'", "'LINEAR'", + "'LINES'", "'LOAD'", "'LOCK'", "'LOOP'", "'LOW_PRIORITY'", "'MASTER_BIND'", + "'MASTER_SSL_VERIFY_SERVER_CERT'", "'MATCH'", "'MAXVALUE'", "'MODIFIES'", + "'NATURAL'", "'NOT'", "'NO_WRITE_TO_BINLOG'", "'NULL'", "'NUMBER'", "'ON'", + "'OPTIMIZE'", "'OPTION'", "'OPTIONALLY'", "'OR'", "'ORDER'", "'OUT'", + "'OUTER'", "'OUTFILE'", "'PARTITION'", "'PRIMARY'", "'PROCEDURE'", "'PURGE'", + "'RANGE'", "'READ'", "'READS'", "'REFERENCES'", "'REGEXP'", "'RELEASE'", + "'RENAME'", "'REPEAT'", "'REPLACE'", "'REQUIRE'", "'RESIGNAL'", "'RESTRICT'", + "'RETURN'", "'REVOKE'", "'RIGHT'", "'RLIKE'", "'SCHEMA'", "'SCHEMAS'", + "'SELECT'", "'SET'", "'SEPARATOR'", "'SHOW'", "'SIGNAL'", "'SPATIAL'", + "'SQL'", "'SQLEXCEPTION'", "'SQLSTATE'", "'SQLWARNING'", "'SQL_BIG_RESULT'", + "'SQL_CALC_FOUND_ROWS'", "'SQL_SMALL_RESULT'", "'SSL'", "'STACKED'", + "'STARTING'", "'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_VALID'", "'JSON_SCHEMA_VALID'", "'AVG'", + "'BIT_AND'", "'BIT_OR'", "'BIT_XOR'", "'COUNT'", "'GROUP_CONCAT'", "'MAX'", + "'MIN'", "'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'", "'COALESCE'", "'CODE'", + "'COLUMNS'", "'COLUMN_FORMAT'", "'COLUMN_NAME'", "'COMMENT'", "'COMMIT'", + "'COMPACT'", "'COMPLETION'", "'COMPRESSED'", "'COMPRESSION'", "'CONCURRENT'", + "'CONNECTION'", "'CONSISTENT'", "'CONSTRAINT_CATALOG'", "'CONSTRAINT_SCHEMA'", + "'CONSTRAINT_NAME'", "'CONTAINS'", "'CONTEXT'", "'CONTRIBUTORS'", "'COPY'", + "'CPU'", "'CURSOR_NAME'", "'DATA'", "'DATAFILE'", "'DEALLOCATE'", "'DEFAULT_AUTH'", + "'DEFINER'", "'DELAY_KEY_WRITE'", "'DES_KEY_FILE'", "'DIRECTORY'", "'DISABLE'", + "'DISCARD'", "'DISK'", "'DO'", "'DUMPFILE'", "'DUPLICATE'", "'DYNAMIC'", + "'ENABLE'", "'ENCRYPTION'", "'END'", "'ENDS'", "'ENGINE'", "'ENGINES'", + "'ERROR'", "'ERRORS'", "'ESCAPE'", "'EVEN'", "'EVENT'", "'EVENTS'", "'EVERY'", + "'EXCHANGE'", "'EXCLUSIVE'", "'EXPIRE'", "'EXPORT'", "'EXTENDED'", "'EXTENT_SIZE'", + "'FAST'", "'FAULTS'", "'FIELDS'", "'FILE_BLOCK_SIZE'", "'FILTER'", "'FIRST'", + "'FIXED'", "'FLUSH'", "'FOLLOWS'", "'FOUND'", "'FULL'", "'FUNCTION'", + "'GENERAL'", "'GLOBAL'", "'GRANTS'", "'GROUP_REPLICATION'", "'HANDLER'", + "'HASH'", "'HELP'", "'HOST'", "'HOSTS'", "'IDENTIFIED'", "'IGNORE_SERVER_IDS'", + "'IMPORT'", "'INDEXES'", "'INITIAL_SIZE'", "'INPLACE'", "'INSERT_METHOD'", + "'INSTALL'", "'INSTANCE'", "'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'", "'NODEGROUP'", "'NONE'", "'OFFLINE'", "'OFFSET'", "'OF'", + "'OJ'", "'OLD_PASSWORD'", "'ONE'", "'ONLINE'", "'ONLY'", "'OPEN'", "'OPTIMIZER_COSTS'", + "'OPTIONS'", "'OWNER'", "'PACK_KEYS'", "'PAGE'", "'PARSER'", "'PARTIAL'", + "'PARTITIONING'", "'PARTITIONS'", "'PASSWORD'", "'PHASE'", "'PLUGIN'", + "'PLUGIN_DIR'", "'PLUGINS'", "'PORT'", "'PRECEDES'", "'PREPARE'", "'PRESERVE'", + "'PREV'", "'PROCESSLIST'", "'PROFILE'", "'PROFILES'", "'PROXY'", "'QUERY'", + "'QUICK'", "'REBUILD'", "'RECOVER'", "'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'", "'RESUME'", "'RETURNED_SQLSTATE'", "'RETURNS'", "'ROLE'", + "'ROLLBACK'", "'ROLLUP'", "'ROTATE'", "'ROW'", "'ROWS'", "'ROW_FORMAT'", + "'SAVEPOINT'", "'SCHEDULE'", "'SECURITY'", "'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'", "'TEMPORARY'", "'TEMPTABLE'", + "'THAN'", "'TRADITIONAL'", "'TRANSACTION'", "'TRANSACTIONAL'", "'TRIGGERS'", + "'TRUNCATE'", "'UNDEFINED'", "'UNDOFILE'", "'UNDO_BUFFER_SIZE'", "'UNINSTALL'", + "'UNKNOWN'", "'UNTIL'", "'UPGRADE'", "'USER'", "'USE_FRM'", "'USER_RESOURCES'", + "'VALIDATION'", "'VALUE'", "'VARIABLES'", "'VIEW'", "'VIRTUAL'", "'VISIBLE'", + "'WAIT'", "'WARNINGS'", "'WITHOUT'", "'WORK'", "'WRAPPER'", "'X509'", + "'XA'", "'XML'", "'EUR'", "'USA'", "'JIS'", "'ISO'", "'INTERNAL'", "'QUARTER'", + "'MONTH'", "'DAY'", "'HOUR'", "'MINUTE'", "'WEEK'", "'SECOND'", "'MICROSECOND'", + "'TABLES'", "'ROUTINE'", "'EXECUTE'", "'FILE'", "'PROCESS'", "'RELOAD'", + "'SHUTDOWN'", "'SUPER'", "'PRIVILEGES'", "'APPLICATION_PASSWORD_ADMIN'", + "'AUDIT_ADMIN'", "'BACKUP_ADMIN'", "'BINLOG_ADMIN'", "'BINLOG_ENCRYPTION_ADMIN'", + "'CLONE_ADMIN'", "'CONNECTION_ADMIN'", "'ENCRYPTION_KEY_ADMIN'", "'FIREWALL_ADMIN'", + "'FIREWALL_USER'", "'GROUP_REPLICATION_ADMIN'", "'INNODB_REDO_LOG_ARCHIVE'", + "'NDB_STORED_USER'", "'PERSIST_RO_VARIABLES_ADMIN'", "'REPLICATION_APPLIER'", + "'REPLICATION_SLAVE_ADMIN'", "'RESOURCE_GROUP_ADMIN'", "'RESOURCE_GROUP_USER'", + "'ROLE_ADMIN'", null, "'SET_USER_ID'", "'SHOW_ROUTINE'", "'SYSTEM_VARIABLES_ADMIN'", + "'TABLE_ENCRYPTION_ADMIN'", "'VERSION_TOKEN_ADMIN'", "'XA_RECOVER_ADMIN'", + "'ARMSCII8'", "'ASCII'", "'BIG5'", "'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'", "'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'", "'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'", "'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'", "'''", "'\"'", "'`'", "':'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "SPACE", "SPEC_MYSQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", + "ADD", "ALL", "ALTER", "ALWAYS", "ANALYZE", "AND", "AS", "ASC", "BEFORE", + "BETWEEN", "BOTH", "BY", "CALL", "CASCADE", "CASE", "CAST", "CHANGE", + "CHARACTER", "CHECK", "COLLATE", "COLUMN", "CONDITION", "CONSTRAINT", + "CONTINUE", "CONVERT", "CREATE", "CROSS", "CURRENT", "CURRENT_USER", + "CURSOR", "DATABASE", "DATABASES", "DECLARE", "DEFAULT", "DELAYED", "DELETE", + "DESC", "DESCRIBE", "DETERMINISTIC", "DIAGNOSTICS", "DISTINCT", "DISTINCTROW", + "DROP", "EACH", "ELSE", "ELSEIF", "ENCLOSED", "ESCAPED", "EXISTS", "EXIT", + "EXPLAIN", "FALSE", "FETCH", "FOR", "FORCE", "FOREIGN", "FROM", "FULLTEXT", + "GENERATED", "GET", "GRANT", "GROUP", "HAVING", "HIGH_PRIORITY", "IF", + "IGNORE", "IN", "INDEX", "INFILE", "INNER", "INOUT", "INSERT", "INTERVAL", + "INTO", "IS", "ITERATE", "JOIN", "KEY", "KEYS", "KILL", "LEADING", "LEAVE", + "LEFT", "LIKE", "LIMIT", "LINEAR", "LINES", "LOAD", "LOCK", "LOOP", "LOW_PRIORITY", + "MASTER_BIND", "MASTER_SSL_VERIFY_SERVER_CERT", "MATCH", "MAXVALUE", + "MODIFIES", "NATURAL", "NOT", "NO_WRITE_TO_BINLOG", "NULL_LITERAL", "NUMBER", + "ON", "OPTIMIZE", "OPTION", "OPTIONALLY", "OR", "ORDER", "OUT", "OUTER", + "OUTFILE", "PARTITION", "PRIMARY", "PROCEDURE", "PURGE", "RANGE", "READ", + "READS", "REFERENCES", "REGEXP", "RELEASE", "RENAME", "REPEAT", "REPLACE", + "REQUIRE", "RESIGNAL", "RESTRICT", "RETURN", "REVOKE", "RIGHT", "RLIKE", + "SCHEMA", "SCHEMAS", "SELECT", "SET", "SEPARATOR", "SHOW", "SIGNAL", + "SPATIAL", "SQL", "SQLEXCEPTION", "SQLSTATE", "SQLWARNING", "SQL_BIG_RESULT", + "SQL_CALC_FOUND_ROWS", "SQL_SMALL_RESULT", "SSL", "STACKED", "STARTING", + "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_VALID", + "JSON_SCHEMA_VALID", "AVG", "BIT_AND", "BIT_OR", "BIT_XOR", "COUNT", + "GROUP_CONCAT", "MAX", "MIN", "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", "COALESCE", "CODE", "COLUMNS", + "COLUMN_FORMAT", "COLUMN_NAME", "COMMENT", "COMMIT", "COMPACT", "COMPLETION", + "COMPRESSED", "COMPRESSION", "CONCURRENT", "CONNECTION", "CONSISTENT", + "CONSTRAINT_CATALOG", "CONSTRAINT_SCHEMA", "CONSTRAINT_NAME", "CONTAINS", + "CONTEXT", "CONTRIBUTORS", "COPY", "CPU", "CURSOR_NAME", "DATA", "DATAFILE", + "DEALLOCATE", "DEFAULT_AUTH", "DEFINER", "DELAY_KEY_WRITE", "DES_KEY_FILE", + "DIRECTORY", "DISABLE", "DISCARD", "DISK", "DO", "DUMPFILE", "DUPLICATE", + "DYNAMIC", "ENABLE", "ENCRYPTION", "END", "ENDS", "ENGINE", "ENGINES", + "ERROR", "ERRORS", "ESCAPE", "EVEN", "EVENT", "EVENTS", "EVERY", "EXCHANGE", + "EXCLUSIVE", "EXPIRE", "EXPORT", "EXTENDED", "EXTENT_SIZE", "FAST", "FAULTS", + "FIELDS", "FILE_BLOCK_SIZE", "FILTER", "FIRST", "FIXED", "FLUSH", "FOLLOWS", + "FOUND", "FULL", "FUNCTION", "GENERAL", "GLOBAL", "GRANTS", "GROUP_REPLICATION", + "HANDLER", "HASH", "HELP", "HOST", "HOSTS", "IDENTIFIED", "IGNORE_SERVER_IDS", + "IMPORT", "INDEXES", "INITIAL_SIZE", "INPLACE", "INSERT_METHOD", "INSTALL", + "INSTANCE", "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", "NODEGROUP", "NONE", + "OFFLINE", "OFFSET", "OF", "OJ", "OLD_PASSWORD", "ONE", "ONLINE", "ONLY", + "OPEN", "OPTIMIZER_COSTS", "OPTIONS", "OWNER", "PACK_KEYS", "PAGE", "PARSER", + "PARTIAL", "PARTITIONING", "PARTITIONS", "PASSWORD", "PHASE", "PLUGIN", + "PLUGIN_DIR", "PLUGINS", "PORT", "PRECEDES", "PREPARE", "PRESERVE", "PREV", + "PROCESSLIST", "PROFILE", "PROFILES", "PROXY", "QUERY", "QUICK", "REBUILD", + "RECOVER", "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", "RESUME", "RETURNED_SQLSTATE", "RETURNS", "ROLE", + "ROLLBACK", "ROLLUP", "ROTATE", "ROW", "ROWS", "ROW_FORMAT", "SAVEPOINT", + "SCHEDULE", "SECURITY", "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", "TEMPORARY", "TEMPTABLE", "THAN", "TRADITIONAL", "TRANSACTION", + "TRANSACTIONAL", "TRIGGERS", "TRUNCATE", "UNDEFINED", "UNDOFILE", "UNDO_BUFFER_SIZE", + "UNINSTALL", "UNKNOWN", "UNTIL", "UPGRADE", "USER", "USE_FRM", "USER_RESOURCES", + "VALIDATION", "VALUE", "VARIABLES", "VIEW", "VIRTUAL", "VISIBLE", "WAIT", + "WARNINGS", "WITHOUT", "WORK", "WRAPPER", "X509", "XA", "XML", "EUR", + "USA", "JIS", "ISO", "INTERNAL", "QUARTER", "MONTH", "DAY", "HOUR", "MINUTE", + "WEEK", "SECOND", "MICROSECOND", "TABLES", "ROUTINE", "EXECUTE", "FILE", + "PROCESS", "RELOAD", "SHUTDOWN", "SUPER", "PRIVILEGES", "APPLICATION_PASSWORD_ADMIN", + "AUDIT_ADMIN", "BACKUP_ADMIN", "BINLOG_ADMIN", "BINLOG_ENCRYPTION_ADMIN", + "CLONE_ADMIN", "CONNECTION_ADMIN", "ENCRYPTION_KEY_ADMIN", "FIREWALL_ADMIN", + "FIREWALL_USER", "GROUP_REPLICATION_ADMIN", "INNODB_REDO_LOG_ARCHIVE", + "NDB_STORED_USER", "PERSIST_RO_VARIABLES_ADMIN", "REPLICATION_APPLIER", + "REPLICATION_SLAVE_ADMIN", "RESOURCE_GROUP_ADMIN", "RESOURCE_GROUP_USER", + "ROLE_ADMIN", "SESSION_VARIABLES_ADMIN", "SET_USER_ID", "SHOW_ROUTINE", + "SYSTEM_VARIABLES_ADMIN", "TABLE_ENCRYPTION_ADMIN", "VERSION_TOKEN_ADMIN", + "XA_RECOVER_ADMIN", "ARMSCII8", "ASCII", "BIG5", "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", "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", "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", + "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", "MINUSMINUS", "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", + "LOCAL_ID", "GLOBAL_ID", "ERROR_RECONGNIGION" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public MySqlLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "MySqlLexer.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + private static final int _serializedATNSegments = 5; + private static final String _serializedATNSegment0 = + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u041c\u2f78\b\1\4"+ + "\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n"+ + "\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+ + "\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+ + "\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t"+ + " \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t"+ + "+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64"+ + "\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t"+ + "=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4"+ + "I\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\t"+ + "T\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_"+ + "\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k"+ + "\tk\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv"+ + "\4w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t"+ + "\u0080\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084"+ + "\4\u0085\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089"+ + "\t\u0089\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d"+ + "\4\u008e\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092"+ + "\t\u0092\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095\4\u0096\t\u0096"+ + "\4\u0097\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\4\u009a\t\u009a\4\u009b"+ + "\t\u009b\4\u009c\t\u009c\4\u009d\t\u009d\4\u009e\t\u009e\4\u009f\t\u009f"+ + "\4\u00a0\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3\t\u00a3\4\u00a4"+ + "\t\u00a4\4\u00a5\t\u00a5\4\u00a6\t\u00a6\4\u00a7\t\u00a7\4\u00a8\t\u00a8"+ + "\4\u00a9\t\u00a9\4\u00aa\t\u00aa\4\u00ab\t\u00ab\4\u00ac\t\u00ac\4\u00ad"+ + "\t\u00ad\4\u00ae\t\u00ae\4\u00af\t\u00af\4\u00b0\t\u00b0\4\u00b1\t\u00b1"+ + "\4\u00b2\t\u00b2\4\u00b3\t\u00b3\4\u00b4\t\u00b4\4\u00b5\t\u00b5\4\u00b6"+ + "\t\u00b6\4\u00b7\t\u00b7\4\u00b8\t\u00b8\4\u00b9\t\u00b9\4\u00ba\t\u00ba"+ + "\4\u00bb\t\u00bb\4\u00bc\t\u00bc\4\u00bd\t\u00bd\4\u00be\t\u00be\4\u00bf"+ + "\t\u00bf\4\u00c0\t\u00c0\4\u00c1\t\u00c1\4\u00c2\t\u00c2\4\u00c3\t\u00c3"+ + "\4\u00c4\t\u00c4\4\u00c5\t\u00c5\4\u00c6\t\u00c6\4\u00c7\t\u00c7\4\u00c8"+ + "\t\u00c8\4\u00c9\t\u00c9\4\u00ca\t\u00ca\4\u00cb\t\u00cb\4\u00cc\t\u00cc"+ + "\4\u00cd\t\u00cd\4\u00ce\t\u00ce\4\u00cf\t\u00cf\4\u00d0\t\u00d0\4\u00d1"+ + "\t\u00d1\4\u00d2\t\u00d2\4\u00d3\t\u00d3\4\u00d4\t\u00d4\4\u00d5\t\u00d5"+ + "\4\u00d6\t\u00d6\4\u00d7\t\u00d7\4\u00d8\t\u00d8\4\u00d9\t\u00d9\4\u00da"+ + "\t\u00da\4\u00db\t\u00db\4\u00dc\t\u00dc\4\u00dd\t\u00dd\4\u00de\t\u00de"+ + "\4\u00df\t\u00df\4\u00e0\t\u00e0\4\u00e1\t\u00e1\4\u00e2\t\u00e2\4\u00e3"+ + "\t\u00e3\4\u00e4\t\u00e4\4\u00e5\t\u00e5\4\u00e6\t\u00e6\4\u00e7\t\u00e7"+ + "\4\u00e8\t\u00e8\4\u00e9\t\u00e9\4\u00ea\t\u00ea\4\u00eb\t\u00eb\4\u00ec"+ + "\t\u00ec\4\u00ed\t\u00ed\4\u00ee\t\u00ee\4\u00ef\t\u00ef\4\u00f0\t\u00f0"+ + "\4\u00f1\t\u00f1\4\u00f2\t\u00f2\4\u00f3\t\u00f3\4\u00f4\t\u00f4\4\u00f5"+ + "\t\u00f5\4\u00f6\t\u00f6\4\u00f7\t\u00f7\4\u00f8\t\u00f8\4\u00f9\t\u00f9"+ + "\4\u00fa\t\u00fa\4\u00fb\t\u00fb\4\u00fc\t\u00fc\4\u00fd\t\u00fd\4\u00fe"+ + "\t\u00fe\4\u00ff\t\u00ff\4\u0100\t\u0100\4\u0101\t\u0101\4\u0102\t\u0102"+ + "\4\u0103\t\u0103\4\u0104\t\u0104\4\u0105\t\u0105\4\u0106\t\u0106\4\u0107"+ + "\t\u0107\4\u0108\t\u0108\4\u0109\t\u0109\4\u010a\t\u010a\4\u010b\t\u010b"+ + "\4\u010c\t\u010c\4\u010d\t\u010d\4\u010e\t\u010e\4\u010f\t\u010f\4\u0110"+ + "\t\u0110\4\u0111\t\u0111\4\u0112\t\u0112\4\u0113\t\u0113\4\u0114\t\u0114"+ + "\4\u0115\t\u0115\4\u0116\t\u0116\4\u0117\t\u0117\4\u0118\t\u0118\4\u0119"+ + "\t\u0119\4\u011a\t\u011a\4\u011b\t\u011b\4\u011c\t\u011c\4\u011d\t\u011d"+ + "\4\u011e\t\u011e\4\u011f\t\u011f\4\u0120\t\u0120\4\u0121\t\u0121\4\u0122"+ + "\t\u0122\4\u0123\t\u0123\4\u0124\t\u0124\4\u0125\t\u0125\4\u0126\t\u0126"+ + "\4\u0127\t\u0127\4\u0128\t\u0128\4\u0129\t\u0129\4\u012a\t\u012a\4\u012b"+ + "\t\u012b\4\u012c\t\u012c\4\u012d\t\u012d\4\u012e\t\u012e\4\u012f\t\u012f"+ + "\4\u0130\t\u0130\4\u0131\t\u0131\4\u0132\t\u0132\4\u0133\t\u0133\4\u0134"+ + "\t\u0134\4\u0135\t\u0135\4\u0136\t\u0136\4\u0137\t\u0137\4\u0138\t\u0138"+ + "\4\u0139\t\u0139\4\u013a\t\u013a\4\u013b\t\u013b\4\u013c\t\u013c\4\u013d"+ + "\t\u013d\4\u013e\t\u013e\4\u013f\t\u013f\4\u0140\t\u0140\4\u0141\t\u0141"+ + "\4\u0142\t\u0142\4\u0143\t\u0143\4\u0144\t\u0144\4\u0145\t\u0145\4\u0146"+ + "\t\u0146\4\u0147\t\u0147\4\u0148\t\u0148\4\u0149\t\u0149\4\u014a\t\u014a"+ + "\4\u014b\t\u014b\4\u014c\t\u014c\4\u014d\t\u014d\4\u014e\t\u014e\4\u014f"+ + "\t\u014f\4\u0150\t\u0150\4\u0151\t\u0151\4\u0152\t\u0152\4\u0153\t\u0153"+ + "\4\u0154\t\u0154\4\u0155\t\u0155\4\u0156\t\u0156\4\u0157\t\u0157\4\u0158"+ + "\t\u0158\4\u0159\t\u0159\4\u015a\t\u015a\4\u015b\t\u015b\4\u015c\t\u015c"+ + "\4\u015d\t\u015d\4\u015e\t\u015e\4\u015f\t\u015f\4\u0160\t\u0160\4\u0161"+ + "\t\u0161\4\u0162\t\u0162\4\u0163\t\u0163\4\u0164\t\u0164\4\u0165\t\u0165"+ + "\4\u0166\t\u0166\4\u0167\t\u0167\4\u0168\t\u0168\4\u0169\t\u0169\4\u016a"+ + "\t\u016a\4\u016b\t\u016b\4\u016c\t\u016c\4\u016d\t\u016d\4\u016e\t\u016e"+ + "\4\u016f\t\u016f\4\u0170\t\u0170\4\u0171\t\u0171\4\u0172\t\u0172\4\u0173"+ + "\t\u0173\4\u0174\t\u0174\4\u0175\t\u0175\4\u0176\t\u0176\4\u0177\t\u0177"+ + "\4\u0178\t\u0178\4\u0179\t\u0179\4\u017a\t\u017a\4\u017b\t\u017b\4\u017c"+ + "\t\u017c\4\u017d\t\u017d\4\u017e\t\u017e\4\u017f\t\u017f\4\u0180\t\u0180"+ + "\4\u0181\t\u0181\4\u0182\t\u0182\4\u0183\t\u0183\4\u0184\t\u0184\4\u0185"+ + "\t\u0185\4\u0186\t\u0186\4\u0187\t\u0187\4\u0188\t\u0188\4\u0189\t\u0189"+ + "\4\u018a\t\u018a\4\u018b\t\u018b\4\u018c\t\u018c\4\u018d\t\u018d\4\u018e"+ + "\t\u018e\4\u018f\t\u018f\4\u0190\t\u0190\4\u0191\t\u0191\4\u0192\t\u0192"+ + "\4\u0193\t\u0193\4\u0194\t\u0194\4\u0195\t\u0195\4\u0196\t\u0196\4\u0197"+ + "\t\u0197\4\u0198\t\u0198\4\u0199\t\u0199\4\u019a\t\u019a\4\u019b\t\u019b"+ + "\4\u019c\t\u019c\4\u019d\t\u019d\4\u019e\t\u019e\4\u019f\t\u019f\4\u01a0"+ + "\t\u01a0\4\u01a1\t\u01a1\4\u01a2\t\u01a2\4\u01a3\t\u01a3\4\u01a4\t\u01a4"+ + "\4\u01a5\t\u01a5\4\u01a6\t\u01a6\4\u01a7\t\u01a7\4\u01a8\t\u01a8\4\u01a9"+ + "\t\u01a9\4\u01aa\t\u01aa\4\u01ab\t\u01ab\4\u01ac\t\u01ac\4\u01ad\t\u01ad"+ + "\4\u01ae\t\u01ae\4\u01af\t\u01af\4\u01b0\t\u01b0\4\u01b1\t\u01b1\4\u01b2"+ + "\t\u01b2\4\u01b3\t\u01b3\4\u01b4\t\u01b4\4\u01b5\t\u01b5\4\u01b6\t\u01b6"+ + "\4\u01b7\t\u01b7\4\u01b8\t\u01b8\4\u01b9\t\u01b9\4\u01ba\t\u01ba\4\u01bb"+ + "\t\u01bb\4\u01bc\t\u01bc\4\u01bd\t\u01bd\4\u01be\t\u01be\4\u01bf\t\u01bf"+ + "\4\u01c0\t\u01c0\4\u01c1\t\u01c1\4\u01c2\t\u01c2\4\u01c3\t\u01c3\4\u01c4"+ + "\t\u01c4\4\u01c5\t\u01c5\4\u01c6\t\u01c6\4\u01c7\t\u01c7\4\u01c8\t\u01c8"+ + "\4\u01c9\t\u01c9\4\u01ca\t\u01ca\4\u01cb\t\u01cb\4\u01cc\t\u01cc\4\u01cd"+ + "\t\u01cd\4\u01ce\t\u01ce\4\u01cf\t\u01cf\4\u01d0\t\u01d0\4\u01d1\t\u01d1"+ + "\4\u01d2\t\u01d2\4\u01d3\t\u01d3\4\u01d4\t\u01d4\4\u01d5\t\u01d5\4\u01d6"+ + "\t\u01d6\4\u01d7\t\u01d7\4\u01d8\t\u01d8\4\u01d9\t\u01d9\4\u01da\t\u01da"+ + "\4\u01db\t\u01db\4\u01dc\t\u01dc\4\u01dd\t\u01dd\4\u01de\t\u01de\4\u01df"+ + "\t\u01df\4\u01e0\t\u01e0\4\u01e1\t\u01e1\4\u01e2\t\u01e2\4\u01e3\t\u01e3"+ + "\4\u01e4\t\u01e4\4\u01e5\t\u01e5\4\u01e6\t\u01e6\4\u01e7\t\u01e7\4\u01e8"+ + "\t\u01e8\4\u01e9\t\u01e9\4\u01ea\t\u01ea\4\u01eb\t\u01eb\4\u01ec\t\u01ec"+ + "\4\u01ed\t\u01ed\4\u01ee\t\u01ee\4\u01ef\t\u01ef\4\u01f0\t\u01f0\4\u01f1"+ + "\t\u01f1\4\u01f2\t\u01f2\4\u01f3\t\u01f3\4\u01f4\t\u01f4\4\u01f5\t\u01f5"+ + "\4\u01f6\t\u01f6\4\u01f7\t\u01f7\4\u01f8\t\u01f8\4\u01f9\t\u01f9\4\u01fa"+ + "\t\u01fa\4\u01fb\t\u01fb\4\u01fc\t\u01fc\4\u01fd\t\u01fd\4\u01fe\t\u01fe"+ + "\4\u01ff\t\u01ff\4\u0200\t\u0200\4\u0201\t\u0201\4\u0202\t\u0202\4\u0203"+ + "\t\u0203\4\u0204\t\u0204\4\u0205\t\u0205\4\u0206\t\u0206\4\u0207\t\u0207"+ + "\4\u0208\t\u0208\4\u0209\t\u0209\4\u020a\t\u020a\4\u020b\t\u020b\4\u020c"+ + "\t\u020c\4\u020d\t\u020d\4\u020e\t\u020e\4\u020f\t\u020f\4\u0210\t\u0210"+ + "\4\u0211\t\u0211\4\u0212\t\u0212\4\u0213\t\u0213\4\u0214\t\u0214\4\u0215"+ + "\t\u0215\4\u0216\t\u0216\4\u0217\t\u0217\4\u0218\t\u0218\4\u0219\t\u0219"+ + "\4\u021a\t\u021a\4\u021b\t\u021b\4\u021c\t\u021c\4\u021d\t\u021d\4\u021e"+ + "\t\u021e\4\u021f\t\u021f\4\u0220\t\u0220\4\u0221\t\u0221\4\u0222\t\u0222"+ + "\4\u0223\t\u0223\4\u0224\t\u0224\4\u0225\t\u0225\4\u0226\t\u0226\4\u0227"+ + "\t\u0227\4\u0228\t\u0228\4\u0229\t\u0229\4\u022a\t\u022a\4\u022b\t\u022b"+ + "\4\u022c\t\u022c\4\u022d\t\u022d\4\u022e\t\u022e\4\u022f\t\u022f\4\u0230"+ + "\t\u0230\4\u0231\t\u0231\4\u0232\t\u0232\4\u0233\t\u0233\4\u0234\t\u0234"+ + "\4\u0235\t\u0235\4\u0236\t\u0236\4\u0237\t\u0237\4\u0238\t\u0238\4\u0239"+ + "\t\u0239\4\u023a\t\u023a\4\u023b\t\u023b\4\u023c\t\u023c\4\u023d\t\u023d"+ + "\4\u023e\t\u023e\4\u023f\t\u023f\4\u0240\t\u0240\4\u0241\t\u0241\4\u0242"+ + "\t\u0242\4\u0243\t\u0243\4\u0244\t\u0244\4\u0245\t\u0245\4\u0246\t\u0246"+ + "\4\u0247\t\u0247\4\u0248\t\u0248\4\u0249\t\u0249\4\u024a\t\u024a\4\u024b"+ + "\t\u024b\4\u024c\t\u024c\4\u024d\t\u024d\4\u024e\t\u024e\4\u024f\t\u024f"+ + "\4\u0250\t\u0250\4\u0251\t\u0251\4\u0252\t\u0252\4\u0253\t\u0253\4\u0254"+ + "\t\u0254\4\u0255\t\u0255\4\u0256\t\u0256\4\u0257\t\u0257\4\u0258\t\u0258"+ + "\4\u0259\t\u0259\4\u025a\t\u025a\4\u025b\t\u025b\4\u025c\t\u025c\4\u025d"+ + "\t\u025d\4\u025e\t\u025e\4\u025f\t\u025f\4\u0260\t\u0260\4\u0261\t\u0261"+ + "\4\u0262\t\u0262\4\u0263\t\u0263\4\u0264\t\u0264\4\u0265\t\u0265\4\u0266"+ + "\t\u0266\4\u0267\t\u0267\4\u0268\t\u0268\4\u0269\t\u0269\4\u026a\t\u026a"+ + "\4\u026b\t\u026b\4\u026c\t\u026c\4\u026d\t\u026d\4\u026e\t\u026e\4\u026f"+ + "\t\u026f\4\u0270\t\u0270\4\u0271\t\u0271\4\u0272\t\u0272\4\u0273\t\u0273"+ + "\4\u0274\t\u0274\4\u0275\t\u0275\4\u0276\t\u0276\4\u0277\t\u0277\4\u0278"+ + "\t\u0278\4\u0279\t\u0279\4\u027a\t\u027a\4\u027b\t\u027b\4\u027c\t\u027c"+ + "\4\u027d\t\u027d\4\u027e\t\u027e\4\u027f\t\u027f\4\u0280\t\u0280\4\u0281"+ + "\t\u0281\4\u0282\t\u0282\4\u0283\t\u0283\4\u0284\t\u0284\4\u0285\t\u0285"+ + "\4\u0286\t\u0286\4\u0287\t\u0287\4\u0288\t\u0288\4\u0289\t\u0289\4\u028a"+ + "\t\u028a\4\u028b\t\u028b\4\u028c\t\u028c\4\u028d\t\u028d\4\u028e\t\u028e"+ + "\4\u028f\t\u028f\4\u0290\t\u0290\4\u0291\t\u0291\4\u0292\t\u0292\4\u0293"+ + "\t\u0293\4\u0294\t\u0294\4\u0295\t\u0295\4\u0296\t\u0296\4\u0297\t\u0297"+ + "\4\u0298\t\u0298\4\u0299\t\u0299\4\u029a\t\u029a\4\u029b\t\u029b\4\u029c"+ + "\t\u029c\4\u029d\t\u029d\4\u029e\t\u029e\4\u029f\t\u029f\4\u02a0\t\u02a0"+ + "\4\u02a1\t\u02a1\4\u02a2\t\u02a2\4\u02a3\t\u02a3\4\u02a4\t\u02a4\4\u02a5"+ + "\t\u02a5\4\u02a6\t\u02a6\4\u02a7\t\u02a7\4\u02a8\t\u02a8\4\u02a9\t\u02a9"+ + "\4\u02aa\t\u02aa\4\u02ab\t\u02ab\4\u02ac\t\u02ac\4\u02ad\t\u02ad\4\u02ae"+ + "\t\u02ae\4\u02af\t\u02af\4\u02b0\t\u02b0\4\u02b1\t\u02b1\4\u02b2\t\u02b2"+ + "\4\u02b3\t\u02b3\4\u02b4\t\u02b4\4\u02b5\t\u02b5\4\u02b6\t\u02b6\4\u02b7"+ + "\t\u02b7\4\u02b8\t\u02b8\4\u02b9\t\u02b9\4\u02ba\t\u02ba\4\u02bb\t\u02bb"+ + "\4\u02bc\t\u02bc\4\u02bd\t\u02bd\4\u02be\t\u02be\4\u02bf\t\u02bf\4\u02c0"+ + "\t\u02c0\4\u02c1\t\u02c1\4\u02c2\t\u02c2\4\u02c3\t\u02c3\4\u02c4\t\u02c4"+ + "\4\u02c5\t\u02c5\4\u02c6\t\u02c6\4\u02c7\t\u02c7\4\u02c8\t\u02c8\4\u02c9"+ + "\t\u02c9\4\u02ca\t\u02ca\4\u02cb\t\u02cb\4\u02cc\t\u02cc\4\u02cd\t\u02cd"+ + "\4\u02ce\t\u02ce\4\u02cf\t\u02cf\4\u02d0\t\u02d0\4\u02d1\t\u02d1\4\u02d2"+ + "\t\u02d2\4\u02d3\t\u02d3\4\u02d4\t\u02d4\4\u02d5\t\u02d5\4\u02d6\t\u02d6"+ + "\4\u02d7\t\u02d7\4\u02d8\t\u02d8\4\u02d9\t\u02d9\4\u02da\t\u02da\4\u02db"+ + "\t\u02db\4\u02dc\t\u02dc\4\u02dd\t\u02dd\4\u02de\t\u02de\4\u02df\t\u02df"+ + "\4\u02e0\t\u02e0\4\u02e1\t\u02e1\4\u02e2\t\u02e2\4\u02e3\t\u02e3\4\u02e4"+ + "\t\u02e4\4\u02e5\t\u02e5\4\u02e6\t\u02e6\4\u02e7\t\u02e7\4\u02e8\t\u02e8"+ + "\4\u02e9\t\u02e9\4\u02ea\t\u02ea\4\u02eb\t\u02eb\4\u02ec\t\u02ec\4\u02ed"+ + "\t\u02ed\4\u02ee\t\u02ee\4\u02ef\t\u02ef\4\u02f0\t\u02f0\4\u02f1\t\u02f1"+ + "\4\u02f2\t\u02f2\4\u02f3\t\u02f3\4\u02f4\t\u02f4\4\u02f5\t\u02f5\4\u02f6"+ + "\t\u02f6\4\u02f7\t\u02f7\4\u02f8\t\u02f8\4\u02f9\t\u02f9\4\u02fa\t\u02fa"+ + "\4\u02fb\t\u02fb\4\u02fc\t\u02fc\4\u02fd\t\u02fd\4\u02fe\t\u02fe\4\u02ff"+ + "\t\u02ff\4\u0300\t\u0300\4\u0301\t\u0301\4\u0302\t\u0302\4\u0303\t\u0303"+ + "\4\u0304\t\u0304\4\u0305\t\u0305\4\u0306\t\u0306\4\u0307\t\u0307\4\u0308"+ + "\t\u0308\4\u0309\t\u0309\4\u030a\t\u030a\4\u030b\t\u030b\4\u030c\t\u030c"+ + "\4\u030d\t\u030d\4\u030e\t\u030e\4\u030f\t\u030f\4\u0310\t\u0310\4\u0311"+ + "\t\u0311\4\u0312\t\u0312\4\u0313\t\u0313\4\u0314\t\u0314\4\u0315\t\u0315"+ + "\4\u0316\t\u0316\4\u0317\t\u0317\4\u0318\t\u0318\4\u0319\t\u0319\4\u031a"+ + "\t\u031a\4\u031b\t\u031b\4\u031c\t\u031c\4\u031d\t\u031d\4\u031e\t\u031e"+ + "\4\u031f\t\u031f\4\u0320\t\u0320\4\u0321\t\u0321\4\u0322\t\u0322\4\u0323"+ + "\t\u0323\4\u0324\t\u0324\4\u0325\t\u0325\4\u0326\t\u0326\4\u0327\t\u0327"+ + "\4\u0328\t\u0328\4\u0329\t\u0329\4\u032a\t\u032a\4\u032b\t\u032b\4\u032c"+ + "\t\u032c\4\u032d\t\u032d\4\u032e\t\u032e\4\u032f\t\u032f\4\u0330\t\u0330"+ + "\4\u0331\t\u0331\4\u0332\t\u0332\4\u0333\t\u0333\4\u0334\t\u0334\4\u0335"+ + "\t\u0335\4\u0336\t\u0336\4\u0337\t\u0337\4\u0338\t\u0338\4\u0339\t\u0339"+ + "\4\u033a\t\u033a\4\u033b\t\u033b\4\u033c\t\u033c\4\u033d\t\u033d\4\u033e"+ + "\t\u033e\4\u033f\t\u033f\4\u0340\t\u0340\4\u0341\t\u0341\4\u0342\t\u0342"+ + "\4\u0343\t\u0343\4\u0344\t\u0344\4\u0345\t\u0345\4\u0346\t\u0346\4\u0347"+ + "\t\u0347\4\u0348\t\u0348\4\u0349\t\u0349\4\u034a\t\u034a\4\u034b\t\u034b"+ + "\4\u034c\t\u034c\4\u034d\t\u034d\4\u034e\t\u034e\4\u034f\t\u034f\4\u0350"+ + "\t\u0350\4\u0351\t\u0351\4\u0352\t\u0352\4\u0353\t\u0353\4\u0354\t\u0354"+ + "\4\u0355\t\u0355\4\u0356\t\u0356\4\u0357\t\u0357\4\u0358\t\u0358\4\u0359"+ + "\t\u0359\4\u035a\t\u035a\4\u035b\t\u035b\4\u035c\t\u035c\4\u035d\t\u035d"+ + "\4\u035e\t\u035e\4\u035f\t\u035f\4\u0360\t\u0360\4\u0361\t\u0361\4\u0362"+ + "\t\u0362\4\u0363\t\u0363\4\u0364\t\u0364\4\u0365\t\u0365\4\u0366\t\u0366"+ + "\4\u0367\t\u0367\4\u0368\t\u0368\4\u0369\t\u0369\4\u036a\t\u036a\4\u036b"+ + "\t\u036b\4\u036c\t\u036c\4\u036d\t\u036d\4\u036e\t\u036e\4\u036f\t\u036f"+ + "\4\u0370\t\u0370\4\u0371\t\u0371\4\u0372\t\u0372\4\u0373\t\u0373\4\u0374"+ + "\t\u0374\4\u0375\t\u0375\4\u0376\t\u0376\4\u0377\t\u0377\4\u0378\t\u0378"+ + "\4\u0379\t\u0379\4\u037a\t\u037a\4\u037b\t\u037b\4\u037c\t\u037c\4\u037d"+ + "\t\u037d\4\u037e\t\u037e\4\u037f\t\u037f\4\u0380\t\u0380\4\u0381\t\u0381"+ + "\4\u0382\t\u0382\4\u0383\t\u0383\4\u0384\t\u0384\4\u0385\t\u0385\4\u0386"+ + "\t\u0386\4\u0387\t\u0387\4\u0388\t\u0388\4\u0389\t\u0389\4\u038a\t\u038a"+ + "\4\u038b\t\u038b\4\u038c\t\u038c\4\u038d\t\u038d\4\u038e\t\u038e\4\u038f"+ + "\t\u038f\4\u0390\t\u0390\4\u0391\t\u0391\4\u0392\t\u0392\4\u0393\t\u0393"+ + "\4\u0394\t\u0394\4\u0395\t\u0395\4\u0396\t\u0396\4\u0397\t\u0397\4\u0398"+ + "\t\u0398\4\u0399\t\u0399\4\u039a\t\u039a\4\u039b\t\u039b\4\u039c\t\u039c"+ + "\4\u039d\t\u039d\4\u039e\t\u039e\4\u039f\t\u039f\4\u03a0\t\u03a0\4\u03a1"+ + "\t\u03a1\4\u03a2\t\u03a2\4\u03a3\t\u03a3\4\u03a4\t\u03a4\4\u03a5\t\u03a5"+ + "\4\u03a6\t\u03a6\4\u03a7\t\u03a7\4\u03a8\t\u03a8\4\u03a9\t\u03a9\4\u03aa"+ + "\t\u03aa\4\u03ab\t\u03ab\4\u03ac\t\u03ac\4\u03ad\t\u03ad\4\u03ae\t\u03ae"+ + "\4\u03af\t\u03af\4\u03b0\t\u03b0\4\u03b1\t\u03b1\4\u03b2\t\u03b2\4\u03b3"+ + "\t\u03b3\4\u03b4\t\u03b4\4\u03b5\t\u03b5\4\u03b6\t\u03b6\4\u03b7\t\u03b7"+ + "\4\u03b8\t\u03b8\4\u03b9\t\u03b9\4\u03ba\t\u03ba\4\u03bb\t\u03bb\4\u03bc"+ + "\t\u03bc\4\u03bd\t\u03bd\4\u03be\t\u03be\4\u03bf\t\u03bf\4\u03c0\t\u03c0"+ + "\4\u03c1\t\u03c1\4\u03c2\t\u03c2\4\u03c3\t\u03c3\4\u03c4\t\u03c4\4\u03c5"+ + "\t\u03c5\4\u03c6\t\u03c6\4\u03c7\t\u03c7\4\u03c8\t\u03c8\4\u03c9\t\u03c9"+ + "\4\u03ca\t\u03ca\4\u03cb\t\u03cb\4\u03cc\t\u03cc\4\u03cd\t\u03cd\4\u03ce"+ + "\t\u03ce\4\u03cf\t\u03cf\4\u03d0\t\u03d0\4\u03d1\t\u03d1\4\u03d2\t\u03d2"+ + "\4\u03d3\t\u03d3\4\u03d4\t\u03d4\4\u03d5\t\u03d5\4\u03d6\t\u03d6\4\u03d7"+ + "\t\u03d7\4\u03d8\t\u03d8\4\u03d9\t\u03d9\4\u03da\t\u03da\4\u03db\t\u03db"+ + "\4\u03dc\t\u03dc\4\u03dd\t\u03dd\4\u03de\t\u03de\4\u03df\t\u03df\4\u03e0"+ + "\t\u03e0\4\u03e1\t\u03e1\4\u03e2\t\u03e2\4\u03e3\t\u03e3\4\u03e4\t\u03e4"+ + "\4\u03e5\t\u03e5\4\u03e6\t\u03e6\4\u03e7\t\u03e7\4\u03e8\t\u03e8\4\u03e9"+ + "\t\u03e9\4\u03ea\t\u03ea\4\u03eb\t\u03eb\4\u03ec\t\u03ec\4\u03ed\t\u03ed"+ + "\4\u03ee\t\u03ee\4\u03ef\t\u03ef\4\u03f0\t\u03f0\4\u03f1\t\u03f1\4\u03f2"+ + "\t\u03f2\4\u03f3\t\u03f3\4\u03f4\t\u03f4\4\u03f5\t\u03f5\4\u03f6\t\u03f6"+ + "\4\u03f7\t\u03f7\4\u03f8\t\u03f8\4\u03f9\t\u03f9\4\u03fa\t\u03fa\4\u03fb"+ + "\t\u03fb\4\u03fc\t\u03fc\4\u03fd\t\u03fd\4\u03fe\t\u03fe\4\u03ff\t\u03ff"+ + "\4\u0400\t\u0400\4\u0401\t\u0401\4\u0402\t\u0402\4\u0403\t\u0403\4\u0404"+ + "\t\u0404\4\u0405\t\u0405\4\u0406\t\u0406\4\u0407\t\u0407\4\u0408\t\u0408"+ + "\4\u0409\t\u0409\4\u040a\t\u040a\4\u040b\t\u040b\4\u040c\t\u040c\4\u040d"+ + "\t\u040d\4\u040e\t\u040e\4\u040f\t\u040f\4\u0410\t\u0410\4\u0411\t\u0411"+ + "\4\u0412\t\u0412\4\u0413\t\u0413\4\u0414\t\u0414\4\u0415\t\u0415\4\u0416"+ + "\t\u0416\4\u0417\t\u0417\4\u0418\t\u0418\4\u0419\t\u0419\4\u041a\t\u041a"+ + "\4\u041b\t\u041b\4\u041c\t\u041c\4\u041d\t\u041d\4\u041e\t\u041e\4\u041f"+ + "\t\u041f\4\u0420\t\u0420\4\u0421\t\u0421\4\u0422\t\u0422\4\u0423\t\u0423"+ + "\4\u0424\t\u0424\4\u0425\t\u0425\3\2\6\2\u084d\n\2\r\2\16\2\u084e\3\2"+ + "\3\2\3\3\3\3\3\3\3\3\3\3\6\3\u0858\n\3\r\3\16\3\u0859\3\3\3\3\3\3\3\3"+ + "\3\3\3\4\3\4\3\4\3\4\7\4\u0865\n\4\f\4\16\4\u0868\13\4\3\4\3\4\3\4\3\4"+ + "\3\4\3\5\3\5\3\5\3\5\5\5\u0873\n\5\3\5\7\5\u0876\n\5\f\5\16\5\u0879\13"+ + "\5\3\5\5\5\u087c\n\5\3\5\3\5\5\5\u0880\n\5\3\5\3\5\3\5\3\5\5\5\u0886\n"+ + "\5\3\5\3\5\5\5\u088a\n\5\5\5\u088c\n\5\3\5\3\5\3\6\3\6\3\6\3\6\3\7\3\7"+ + "\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3"+ + "\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r"+ + "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17"+ + "\3\17\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22"+ + "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\25"+ + "\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27"+ + "\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\31"+ + "\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32"+ + "\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34"+ + "\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35"+ + "\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37"+ + "\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3!\3!\3!\3\"\3\"\3\""+ + "\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3#\3#\3$\3$\3"+ + "$\3$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3"+ + "&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3(\3(\3)\3)\3)"+ + "\3)\3)\3)\3)\3*\3*\3*\3*\3*\3+\3+\3+\3+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,"+ + "\3,\3,\3,\3,\3,\3,\3,\3,\3,\3-\3-\3-\3-\3-\3-\3-\3-\3-\3-\3-\3-\3.\3."+ + "\3.\3.\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3\60\3\60\3"+ + "\60\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\63\3"+ + "\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3"+ + "\64\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3"+ + "\66\3\66\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\38\38\39\39\39\39"+ + "\39\39\3:\3:\3:\3:\3:\3:\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3=\3=\3=\3=\3="+ + "\3=\3=\3=\3>\3>\3>\3>\3>\3?\3?\3?\3?\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3@"+ + "\3@\3@\3@\3@\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3D\3D\3D"+ + "\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3F\3F\3F\3G\3G"+ + "\3G\3G\3G\3G\3G\3H\3H\3H\3I\3I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3J\3K\3K"+ + "\3K\3K\3K\3K\3L\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3N"+ + "\3N\3N\3N\3O\3O\3O\3O\3O\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R"+ + "\3R\3S\3S\3S\3S\3T\3T\3T\3T\3T\3U\3U\3U\3U\3U\3V\3V\3V\3V\3V\3V\3V\3V"+ + "\3W\3W\3W\3W\3W\3W\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Y\3Y\3Z\3Z\3Z\3Z\3Z\3Z\3["+ + "\3[\3[\3[\3[\3[\3[\3\\\3\\\3\\\3\\\3\\\3\\\3]\3]\3]\3]\3]\3^\3^\3^\3^"+ + "\3^\3_\3_\3_\3_\3_\3`\3`\3`\3`\3`\3`\3`\3`\3`\3`\3`\3`\3`\3a\3a\3a\3a"+ + "\3a\3a\3a\3a\3a\3a\3a\3a\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b"+ + "\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3c\3c\3c\3c\3c\3c\3d\3d"+ + "\3d\3d\3d\3d\3d\3d\3d\3e\3e\3e\3e\3e\3e\3e\3e\3e\3f\3f\3f\3f\3f\3f\3f"+ + "\3f\3g\3g\3g\3g\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h"+ + "\3h\3i\3i\3i\3i\3i\3j\3j\3j\3j\3j\3j\3j\3k\3k\3k\3l\3l\3l\3l\3l\3l\3l"+ + "\3l\3l\3m\3m\3m\3m\3m\3m\3m\3n\3n\3n\3n\3n\3n\3n\3n\3n\3n\3n\3o\3o\3o"+ + "\3p\3p\3p\3p\3p\3p\3q\3q\3q\3q\3r\3r\3r\3r\3r\3r\3s\3s\3s\3s\3s\3s\3s"+ + "\3s\3t\3t\3t\3t\3t\3t\3t\3t\3t\3t\3u\3u\3u\3u\3u\3u\3u\3u\3v\3v\3v\3v"+ + "\3v\3v\3v\3v\3v\3v\3w\3w\3w\3w\3w\3w\3x\3x\3x\3x\3x\3x\3y\3y\3y\3y\3y"+ + "\3z\3z\3z\3z\3z\3z\3{\3{\3{\3{\3{\3{\3{\3{\3{\3{\3{\3|\3|\3|\3|\3|\3|"+ + "\3|\3}\3}\3}\3}\3}\3}\3}\3}\3~\3~\3~\3~\3~\3~\3~\3\177\3\177\3\177\3\177"+ + "\3\177\3\177\3\177\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080"+ + "\3\u0080\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081"+ + "\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082"+ + "\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083"+ + "\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084\3\u0085\3\u0085"+ + "\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0086\3\u0086\3\u0086\3\u0086"+ + "\3\u0086\3\u0086\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0088"+ + "\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0089\3\u0089\3\u0089"+ + "\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\3\u008a\3\u008a\3\u008a\3\u008a"+ + "\3\u008a\3\u008a\3\u008a\3\u008b\3\u008b\3\u008b\3\u008b\3\u008c\3\u008c"+ + "\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008d"+ + "\3\u008d\3\u008d\3\u008d\3\u008d\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e"+ + "\3\u008e\3\u008e\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f"+ + "\3\u008f\3\u0090\3\u0090\3\u0090\3\u0090\3\u0091\3\u0091\3\u0091\3\u0091"+ + "\3\u0091\3\u0091\3\u0091\3\u0091\3\u0091\3\u0091\3\u0091\3\u0091\3\u0091"+ + "\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092"+ + "\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093"+ + "\3\u0093\3\u0093\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094"+ + "\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0095"+ + "\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095"+ + "\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095"+ + "\3\u0095\3\u0096\3\u0096\3\u0096\3\u0096\3\u0096\3\u0096\3\u0096\3\u0096"+ + "\3\u0096\3\u0096\3\u0096\3\u0096\3\u0096\3\u0096\3\u0096\3\u0096\3\u0096"+ + "\3\u0097\3\u0097\3\u0097\3\u0097\3\u0098\3\u0098\3\u0098\3\u0098\3\u0098"+ + "\3\u0098\3\u0098\3\u0098\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099"+ + "\3\u0099\3\u0099\3\u0099\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a"+ + "\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009c\3\u009c\3\u009c\3\u009c"+ + "\3\u009c\3\u009c\3\u009c\3\u009c\3\u009c\3\u009c\3\u009c\3\u009d\3\u009d"+ + "\3\u009d\3\u009d\3\u009d\3\u009e\3\u009e\3\u009e\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u00a0\3\u00a0\3\u00a0"+ + "\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a1\3\u00a1\3\u00a1\3\u00a1"+ + "\3\u00a1\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a3\3\u00a3\3\u00a3"+ + "\3\u00a3\3\u00a3\3\u00a3\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4"+ + "\3\u00a4\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a6"+ + "\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a7"+ + "\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a8\3\u00a8\3\u00a8"+ + "\3\u00a8\3\u00a8\3\u00a8\3\u00a9\3\u00a9\3\u00a9\3\u00a9\3\u00aa\3\u00aa"+ + "\3\u00aa\3\u00aa\3\u00aa\3\u00aa\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ab"+ + "\3\u00ab\3\u00ab\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ad\3\u00ad"+ + "\3\u00ad\3\u00ad\3\u00ad\3\u00ad\3\u00ae\3\u00ae\3\u00ae\3\u00ae\3\u00ae"+ + "\3\u00ae\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af\3\u00b0\3\u00b0\3\u00b0"+ + "\3\u00b0\3\u00b0\3\u00b0\3\u00b1\3\u00b1\3\u00b1\3\u00b1\3\u00b2\3\u00b2"+ + "\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b3\3\u00b3"+ + "\3\u00b3\3\u00b3\3\u00b3\3\u00b3\3\u00b3\3\u00b3\3\u00b4\3\u00b4\3\u00b4"+ + "\3\u00b4\3\u00b4\3\u00b4\3\u00b4\3\u00b4\3\u00b4\3\u00b5\3\u00b5\3\u00b5"+ + "\3\u00b5\3\u00b5\3\u00b5\3\u00b5\3\u00b5\3\u00b5\3\u00b5\3\u00b6\3\u00b6"+ + "\3\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b7"+ + "\3\u00b7\3\u00b7\3\u00b7\3\u00b8\3\u00b8\3\u00b8\3\u00b8\3\u00b8\3\u00b9"+ + "\3\u00b9\3\u00b9\3\u00b9\3\u00b9\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba"+ + "\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bc\3\u00bc\3\u00bc\3\u00bc"+ + "\3\u00bc\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd"+ + "\3\u00be\3\u00be\3\u00be\3\u00be\3\u00be\3\u00be\3\u00be\3\u00bf\3\u00bf"+ + "\3\u00bf\3\u00bf\3\u00bf\3\u00c0\3\u00c0\3\u00c0\3\u00c0\3\u00c0\3\u00c0"+ + "\3\u00c0\3\u00c1\3\u00c1\3\u00c1\3\u00c1\3\u00c1\3\u00c1\3\u00c1\3\u00c1"+ + "\3\u00c1\3\u00c1\3\u00c2\3\u00c2\3\u00c2\3\u00c2\3\u00c2\3\u00c2\3\u00c3"+ + "\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c4\3\u00c4\3\u00c4"+ + "\3\u00c4\3\u00c4\3\u00c4\3\u00c4\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5"+ + "\3\u00c5\3\u00c5\3\u00c5\3\u00c6\3\u00c6\3\u00c6\3\u00c6\3\u00c7\3\u00c7"+ + "\3\u00c7\3\u00c7\3\u00c7\3\u00c7\3\u00c7\3\u00c7\3\u00c8\3\u00c8\3\u00c8"+ + "\3\u00c8\3\u00c8\3\u00c9\3\u00c9\3\u00c9\3\u00c9\3\u00c9\3\u00ca\3\u00ca"+ + "\3\u00ca\3\u00ca\3\u00ca\3\u00ca\3\u00ca\3\u00ca\3\u00ca\3\u00ca\3\u00cb"+ + "\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cc"+ + "\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cd\3\u00cd\3\u00cd\3\u00cd\3\u00cd"+ + "\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00cf"+ + "\3\u00cf\3\u00cf\3\u00cf\3\u00cf\3\u00cf\3\u00cf\3\u00cf\3\u00cf\3\u00d0"+ + "\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d1"+ + "\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d2\3\u00d2\3\u00d2"+ + "\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d3\3\u00d3"+ + "\3\u00d3\3\u00d3\3\u00d3\3\u00d3\3\u00d3\3\u00d3\3\u00d3\3\u00d4\3\u00d4"+ + "\3\u00d4\3\u00d4\3\u00d4\3\u00d5\3\u00d5\3\u00d5\3\u00d5\3\u00d5\3\u00d5"+ + "\3\u00d5\3\u00d5\3\u00d5\3\u00d5\3\u00d5\3\u00d6\3\u00d6\3\u00d6\3\u00d6"+ + "\3\u00d6\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7"+ + "\3\u00d7\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8"+ + "\3\u00d8\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00da\3\u00da\3\u00da"+ + "\3\u00da\3\u00da\3\u00da\3\u00da\3\u00da\3\u00da\3\u00da\3\u00da\3\u00db"+ + "\3\u00db\3\u00db\3\u00db\3\u00db\3\u00db\3\u00db\3\u00db\3\u00db\3\u00dc"+ + "\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd"+ + "\3\u00dd\3\u00dd\3\u00dd\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de"+ + "\3\u00de\3\u00df\3\u00df\3\u00df\3\u00df\3\u00df\3\u00df\3\u00df\3\u00df"+ + "\3\u00df\3\u00df\3\u00df\3\u00e0\3\u00e0\3\u00e0\3\u00e0\3\u00e0\3\u00e0"+ + "\3\u00e0\3\u00e0\3\u00e0\3\u00e1\3\u00e1\3\u00e1\3\u00e1\3\u00e1\3\u00e1"+ + "\3\u00e1\3\u00e1\3\u00e1\3\u00e1\3\u00e1\3\u00e2\3\u00e2\3\u00e2\3\u00e2"+ + "\3\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e3\3\u00e3"+ + "\3\u00e3\3\u00e3\3\u00e3\3\u00e3\3\u00e3\3\u00e3\3\u00e3\3\u00e3\3\u00e3"+ + "\3\u00e3\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e4"+ + "\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e5\3\u00e5\3\u00e5\3\u00e5\3\u00e5"+ + "\3\u00e5\3\u00e5\3\u00e5\3\u00e5\3\u00e5\3\u00e5\3\u00e5\3\u00e5\3\u00e5"+ + "\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6"+ + "\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6"+ + "\3\u00e6\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7"+ + "\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7"+ + "\3\u00e7\3\u00e7\3\u00e8\3\u00e8\3\u00e8\3\u00e8\3\u00e8\3\u00e8\3\u00e8"+ + "\3\u00e8\3\u00e8\3\u00e8\3\u00e8\3\u00e8\3\u00e8\3\u00e8\3\u00e8\3\u00e8"+ + "\3\u00e8\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9"+ + "\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00ea"+ + "\3\u00ea\3\u00ea\3\u00ea\3\u00ea\3\u00ea\3\u00ea\3\u00ea\3\u00ea\3\u00ea"+ + "\3\u00ea\3\u00eb\3\u00eb\3\u00eb\3\u00eb\3\u00eb\3\u00eb\3\u00eb\3\u00eb"+ + "\3\u00eb\3\u00eb\3\u00eb\3\u00eb\3\u00eb\3\u00eb\3\u00eb\3\u00eb\3\u00eb"+ + "\3\u00eb\3\u00ec\3\u00ec\3\u00ec\3\u00ec\3\u00ed\3\u00ed\3\u00ed\3\u00ed"+ + "\3\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee"+ + "\3\u00ee\3\u00ee\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00ef"+ + "\3\u00ef\3\u00f0\3\u00f0\3\u00f0\3\u00f0\3\u00f0\3\u00f0\3\u00f1\3\u00f1"+ + "\3\u00f1\3\u00f1\3\u00f1\3\u00f1\3\u00f1\3\u00f1\3\u00f1\3\u00f1\3\u00f1"+ + "\3\u00f1\3\u00f1\3\u00f2\3\u00f2\3\u00f2\3\u00f2\3\u00f3\3\u00f3\3\u00f3"+ + "\3\u00f3\3\u00f4\3\u00f4\3\u00f4\3\u00f4\3\u00f5\3\u00f5\3\u00f5\3\u00f5"+ + "\3\u00f5\3\u00f5\3\u00f5\3\u00f6\3\u00f6\3\u00f6\3\u00f6\3\u00f6\3\u00f6"+ + "\3\u00f6\3\u00f6\3\u00f6\3\u00f6\3\u00f6\3\u00f7\3\u00f7\3\u00f7\3\u00f7"+ + "\3\u00f7\3\u00f7\3\u00f7\3\u00f7\3\u00f7\3\u00f7\3\u00f7\3\u00f7\3\u00f8"+ + "\3\u00f8\3\u00f8\3\u00f8\3\u00f9\3\u00f9\3\u00f9\3\u00f9\3\u00f9\3\u00f9"+ + "\3\u00f9\3\u00f9\3\u00fa\3\u00fa\3\u00fa\3\u00fa\3\u00fa\3\u00fa\3\u00fa"+ + "\3\u00fa\3\u00fa\3\u00fb\3\u00fb\3\u00fb\3\u00fb\3\u00fb\3\u00fb\3\u00fb"+ + "\3\u00fb\3\u00fb\3\u00fc\3\u00fc\3\u00fc\3\u00fc\3\u00fc\3\u00fc\3\u00fc"+ + "\3\u00fc\3\u00fc\3\u00fc\3\u00fc\3\u00fc\3\u00fc\3\u00fd\3\u00fd\3\u00fd"+ + "\3\u00fd\3\u00fd\3\u00fd\3\u00fd\3\u00fd\3\u00fd\3\u00fd\3\u00fd\3\u00fd"+ + "\3\u00fd\3\u00fe\3\u00fe\3\u00fe\3\u00fe\3\u00fe\3\u00fe\3\u00fe\3\u00fe"+ + "\3\u00fe\3\u00fe\3\u00fe\3\u00fe\3\u00fe\3\u00fe\3\u00fe\3\u00fe\3\u00fe"+ + "\3\u00fe\3\u00ff\3\u00ff\3\u00ff\3\u00ff\3\u00ff\3\u00ff\3\u00ff\3\u00ff"+ + "\3\u00ff\3\u00ff\3\u0100\3\u0100\3\u0100\3\u0100\3\u0100\3\u0100\3\u0100"+ + "\3\u0100\3\u0101\3\u0101\3\u0101\3\u0101\3\u0101\3\u0101\3\u0101\3\u0101"+ + "\3\u0102\3\u0102\3\u0102\3\u0102\3\u0102\3\u0102\3\u0102\3\u0102\3\u0102"+ + "\3\u0103\3\u0103\3\u0103\3\u0103\3\u0103\3\u0103\3\u0103\3\u0103\3\u0103"+ + "\3\u0104\3\u0104\3\u0104\3\u0104\3\u0104\3\u0104\3\u0104\3\u0104\3\u0105"+ + "\3\u0105\3\u0105\3\u0105\3\u0105\3\u0105\3\u0105\3\u0105\3\u0105\3\u0105"+ + "\3\u0105\3\u0105\3\u0105\3\u0105\3\u0105\3\u0106\3\u0106\3\u0106\3\u0106"+ + "\3\u0107\3\u0107\3\u0107\3\u0107\3\u0107\3\u0107\3\u0107\3\u0107\3\u0107"+ + "\3\u0108\3\u0108\3\u0108\3\u0108\3\u0108\3\u0108\3\u0108\3\u0109\3\u0109"+ + "\3\u0109\3\u0109\3\u0109\3\u0109\3\u0109\3\u0109\3\u0109\3\u0109\3\u010a"+ + "\3\u010a\3\u010a\3\u010a\3\u010a\3\u010a\3\u010a\3\u010a\3\u010b\3\u010b"+ + "\3\u010b\3\u010b\3\u010b\3\u010c\3\u010c\3\u010c\3\u010c\3\u010c\3\u010c"+ + "\3\u010c\3\u010c\3\u010c\3\u010d\3\u010d\3\u010d\3\u010d\3\u010d\3\u010d"+ + "\3\u010d\3\u010d\3\u010d\3\u010e\3\u010e\3\u010e\3\u010e\3\u010e\3\u010e"+ + "\3\u010e\3\u010e\3\u010e\3\u010e\3\u010e\3\u010e\3\u010e\3\u010e\3\u010f"+ + "\3\u010f\3\u010f\3\u010f\3\u010f\3\u010f\3\u010f\3\u010f\3\u0110\3\u0110"+ + "\3\u0110\3\u0110\3\u0110\3\u0110\3\u0110\3\u0111\3\u0111\3\u0111\3\u0111"+ + "\3\u0111\3\u0111\3\u0112\3\u0112\3\u0112\3\u0112\3\u0112\3\u0112\3\u0112"+ + "\3\u0112\3\u0112\3\u0112\3\u0113\3\u0113\3\u0113\3\u0113\3\u0113\3\u0113"+ + "\3\u0113\3\u0113\3\u0113\3\u0113\3\u0114\3\u0114\3\u0114\3\u0114\3\u0115"+ + "\3\u0115\3\u0115\3\u0116\3\u0116\3\u0116\3\u0116\3\u0116\3\u0116\3\u0116"+ + "\3\u0116\3\u0117\3\u0117\3\u0117\3\u0117\3\u0117\3\u0117\3\u0117\3\u0117"+ + "\3\u0117\3\u0117\3\u0117\3\u0118\3\u0118\3\u0118\3\u0118\3\u0118\3\u0118"+ + "\3\u0118\3\u0118\3\u0118\3\u0118\3\u0118\3\u0118\3\u0118\3\u0118\3\u0118"+ + "\3\u0118\3\u0119\3\u0119\3\u0119\3\u0119\3\u0119\3\u0119\3\u0119\3\u0119"+ + "\3\u0119\3\u0119\3\u0119\3\u0119\3\u0119\3\u0119\3\u0119\3\u011a\3\u011a"+ + "\3\u011a\3\u011a\3\u011a\3\u011a\3\u011a\3\u011a\3\u011a\3\u011a\3\u011a"+ + "\3\u011a\3\u011a\3\u011a\3\u011a\3\u011b\3\u011b\3\u011b\3\u011b\3\u011b"+ + "\3\u011b\3\u011c\3\u011c\3\u011c\3\u011c\3\u011c\3\u011c\3\u011c\3\u011d"+ + "\3\u011d\3\u011d\3\u011d\3\u011e\3\u011e\3\u011e\3\u011e\3\u011e\3\u011e"+ + "\3\u011f\3\u011f\3\u011f\3\u011f\3\u011f\3\u0120\3\u0120\3\u0120\3\u0120"+ + "\3\u0120\3\u0120\3\u0120\3\u0120\3\u0121\3\u0121\3\u0121\3\u0121\3\u0121"+ + "\3\u0121\3\u0122\3\u0122\3\u0122\3\u0122\3\u0122\3\u0122\3\u0123\3\u0123"+ + "\3\u0123\3\u0123\3\u0123\3\u0123\3\u0123\3\u0123\3\u0123\3\u0124\3\u0124"+ + "\3\u0124\3\u0124\3\u0124\3\u0124\3\u0125\3\u0125\3\u0125\3\u0125\3\u0125"+ + "\3\u0125\3\u0125\3\u0125\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126"+ + "\3\u0126\3\u0126\3\u0127\3\u0127\3\u0127\3\u0127\3\u0127\3\u0127\3\u0127"+ + "\3\u0127\3\u0127\3\u0128\3\u0128\3\u0128\3\u0128\3\u0128\3\u0128\3\u0128"+ + "\3\u0128\3\u0128\3\u0128\3\u0128\3\u0128\3\u0128\3\u0128\3\u0129\3\u0129"+ + "\3\u0129\3\u0129\3\u0129\3\u0129\3\u0129\3\u012a\3\u012a\3\u012a\3\u012a"+ + "\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a"+ + "\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b\3\u012c\3\u012c"+ + "\3\u012c\3\u012c\3\u012c\3\u012c\3\u012d\3\u012d\3\u012d\3\u012d\3\u012d"+ + "\3\u012d\3\u012d\3\u012d\3\u012d\3\u012e\3\u012e\3\u012e\3\u012e\3\u012e"+ + "\3\u012f\3\u012f\3\u012f\3\u012f\3\u012f\3\u012f\3\u012f\3\u012f\3\u0130"+ + "\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130"+ + "\3\u0130\3\u0130\3\u0130\3\u0130\3\u0131\3\u0131\3\u0131\3\u0131\3\u0131"+ + "\3\u0131\3\u0131\3\u0131\3\u0131\3\u0131\3\u0131\3\u0131\3\u0132\3\u0132"+ + "\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132\3\u0133\3\u0133\3\u0133"+ + "\3\u0133\3\u0133\3\u0133\3\u0133\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134"+ + "\3\u0134\3\u0134\3\u0134\3\u0135\3\u0135\3\u0135\3\u0135\3\u0135\3\u0135"+ + "\3\u0135\3\u0135\3\u0135\3\u0135\3\u0135\3\u0136\3\u0136\3\u0136\3\u0136"+ + "\3\u0136\3\u0136\3\u0136\3\u0136\3\u0136\3\u0136\3\u0136\3\u0137\3\u0137"+ + "\3\u0137\3\u0137\3\u0137\3\u0137\3\u0137\3\u0137\3\u0137\3\u0137\3\u0137"+ + "\3\u0137\3\u0138\3\u0138\3\u0138\3\u0138\3\u0138\3\u0138\3\u0138\3\u0138"+ + "\3\u0138\3\u0138\3\u0138\3\u0139\3\u0139\3\u0139\3\u0139\3\u0139\3\u0139"+ + "\3\u0139\3\u0139\3\u0139\3\u0139\3\u0139\3\u013a\3\u013a\3\u013a\3\u013a"+ + "\3\u013a\3\u013a\3\u013a\3\u013a\3\u013a\3\u013a\3\u013a\3\u013b\3\u013b"+ + "\3\u013b\3\u013b\3\u013b\3\u013b\3\u013b\3\u013b\3\u013b\3\u013b\3\u013b"+ + "\3\u013b\3\u013b\3\u013b\3\u013b\3\u013b\3\u013b\3\u013b\3\u013b\3\u013c"+ + "\3\u013c\3\u013c\3\u013c\3\u013c\3\u013c\3\u013c\3\u013c\3\u013c\3\u013c"+ + "\3\u013c\3\u013c\3\u013c\3\u013c\3\u013c\3\u013c\3\u013c\3\u013c\3\u013d"+ + "\3\u013d\3\u013d\3\u013d\3\u013d\3\u013d\3\u013d\3\u013d\3\u013d\3\u013d"+ + "\3\u013d\3\u013d\3\u013d\3\u013d\3\u013d\3\u013d\3\u013e\3\u013e\3\u013e"+ + "\3\u013e\3\u013e\3\u013e\3\u013e\3\u013e\3\u013e\3\u013f\3\u013f\3\u013f"+ + "\3\u013f\3\u013f\3\u013f\3\u013f\3\u013f\3\u0140\3\u0140\3\u0140\3\u0140"+ + "\3\u0140\3\u0140\3\u0140\3\u0140\3\u0140\3\u0140\3\u0140\3\u0140\3\u0140"+ + "\3\u0141\3\u0141\3\u0141\3\u0141\3\u0141\3\u0142\3\u0142\3\u0142\3\u0142"+ + "\3\u0143\3\u0143\3\u0143\3\u0143\3\u0143\3\u0143\3\u0143\3\u0143\3\u0143"+ + "\3\u0143\3\u0143\3\u0143\3\u0144\3\u0144\3\u0144\3\u0144\3\u0144\3\u0145"+ + "\3\u0145\3\u0145\3\u0145\3\u0145\3\u0145\3\u0145\3\u0145\3\u0145\3\u0146"+ + "\3\u0146\3\u0146\3\u0146\3\u0146\3\u0146\3\u0146\3\u0146\3\u0146\3\u0146"+ + "\3\u0146\3\u0147\3\u0147\3\u0147\3\u0147\3\u0147\3\u0147\3\u0147\3\u0147"+ + "\3\u0147\3\u0147\3\u0147\3\u0147\3\u0147\3\u0148\3\u0148\3\u0148\3\u0148"+ + "\3\u0148\3\u0148\3\u0148\3\u0148\3\u0149\3\u0149\3\u0149\3\u0149\3\u0149"+ + "\3\u0149\3\u0149\3\u0149\3\u0149\3\u0149\3\u0149\3\u0149\3\u0149\3\u0149"+ + "\3\u0149\3\u0149\3\u014a\3\u014a\3\u014a\3\u014a\3\u014a\3\u014a\3\u014a"+ + "\3\u014a\3\u014a\3\u014a\3\u014a\3\u014a\3\u014a\3\u014b\3\u014b\3\u014b"+ + "\3\u014b\3\u014b\3\u014b\3\u014b\3\u014b\3\u014b\3\u014b\3\u014c\3\u014c"+ + "\3\u014c\3\u014c\3\u014c\3\u014c\3\u014c\3\u014c\3\u014d\3\u014d\3\u014d"+ + "\3\u014d\3\u014d\3\u014d\3\u014d\3\u014d\3\u014e\3\u014e\3\u014e\3\u014e"+ + "\3\u014e\3\u014f\3\u014f\3\u014f\3\u0150\3\u0150\3\u0150\3\u0150\3\u0150"+ + "\3\u0150\3\u0150\3\u0150\3\u0150\3\u0151\3\u0151\3\u0151\3\u0151\3\u0151"+ + "\3\u0151\3\u0151\3\u0151\3\u0151\3\u0151\3\u0152\3\u0152\3\u0152\3\u0152"+ + "\3\u0152\3\u0152\3\u0152\3\u0152\3\u0153\3\u0153\3\u0153\3\u0153\3\u0153"+ + "\3\u0153\3\u0153\3\u0154\3\u0154\3\u0154\3\u0154\3\u0154\3\u0154\3\u0154"+ + "\3\u0154\3\u0154\3\u0154\3\u0154\3\u0155\3\u0155\3\u0155\3\u0155\3\u0156"+ + "\3\u0156\3\u0156\3\u0156\3\u0156\3\u0157\3\u0157\3\u0157\3\u0157\3\u0157"+ + "\3\u0157\3\u0157\3\u0158\3\u0158\3\u0158\3\u0158\3\u0158\3\u0158\3\u0158"+ + "\3\u0158\3\u0159\3\u0159\3\u0159\3\u0159\3\u0159\3\u0159\3\u015a\3\u015a"+ + "\3\u015a\3\u015a\3\u015a\3\u015a\3\u015a\3\u015b\3\u015b\3\u015b\3\u015b"+ + "\3\u015b\3\u015b\3\u015b\3\u015c\3\u015c\3\u015c\3\u015c\3\u015c\3\u015d"+ + "\3\u015d\3\u015d\3\u015d\3\u015d\3\u015d\3\u015e\3\u015e\3\u015e\3\u015e"+ + "\3\u015e\3\u015e\3\u015e\3\u015f\3\u015f\3\u015f\3\u015f\3\u015f\3\u015f"+ + "\3\u0160\3\u0160\3\u0160\3\u0160\3\u0160\3\u0160\3\u0160\3\u0160\3\u0160"+ + "\3\u0161\3\u0161\3\u0161\3\u0161\3\u0161\3\u0161\3\u0161\3\u0161\3\u0161"+ + "\3\u0161\3\u0162\3\u0162\3\u0162\3\u0162\3\u0162\3\u0162\3\u0162\3\u0163"+ + "\3\u0163\3\u0163\3\u0163\3\u0163\3\u0163\3\u0163\3\u0164\3\u0164\3\u0164"+ + "\3\u0164\3\u0164\3\u0164\3\u0164\3\u0164\3\u0164\3\u0165\3\u0165\3\u0165"+ + "\3\u0165\3\u0165\3\u0165\3\u0165\3\u0165\3\u0165\3\u0165\3\u0165\3\u0165"+ + "\3\u0166\3\u0166\3\u0166\3\u0166\3\u0166\3\u0167\3\u0167\3\u0167\3\u0167"+ + "\3\u0167\3\u0167\3\u0167\3\u0168\3\u0168\3\u0168\3\u0168\3\u0168\3\u0168"+ + "\3\u0168\3\u0169\3\u0169\3\u0169\3\u0169\3\u0169\3\u0169\3\u0169\3\u0169"+ + "\3\u0169\3\u0169\3\u0169\3\u0169\3\u0169\3\u0169\3\u0169\3\u0169\3\u016a"+ + "\3\u016a\3\u016a\3\u016a\3\u016a\3\u016a\3\u016a\3\u016b\3\u016b\3\u016b"+ + "\3\u016b\3\u016b\3\u016b\3\u016c\3\u016c\3\u016c\3\u016c\3\u016c\3\u016c"+ + "\3\u016d\3\u016d\3\u016d\3\u016d\3\u016d\3\u016d\3\u016e\3\u016e\3\u016e"+ + "\3\u016e\3\u016e\3\u016e\3\u016e\3\u016e\3\u016f\3\u016f\3\u016f\3\u016f"+ + "\3\u016f\3\u016f\3\u0170\3\u0170\3\u0170\3\u0170\3\u0170\3\u0171\3\u0171"+ + "\3\u0171\3\u0171\3\u0171\3\u0171\3\u0171\3\u0171\3\u0171\3\u0172\3\u0172"+ + "\3\u0172\3\u0172\3\u0172\3\u0172\3\u0172\3\u0172\3\u0173\3\u0173\3\u0173"+ + "\3\u0173\3\u0173\3\u0173\3\u0173\3\u0174\3\u0174\3\u0174\3\u0174\3\u0174"+ + "\3\u0174\3\u0174\3\u0175\3\u0175\3\u0175\3\u0175\3\u0175\3\u0175\3\u0175"+ + "\3\u0175\3\u0175\3\u0175\3\u0175\3\u0175\3\u0175\3\u0175\3\u0175\3\u0175"+ + "\3\u0175\3\u0175\3\u0176\3\u0176\3\u0176\3\u0176\3\u0176\3\u0176\3\u0176"+ + "\3\u0176\3\u0177\3\u0177\3\u0177\3\u0177\3\u0177\3\u0178\3\u0178\3\u0178"+ + "\3\u0178\3\u0178\3\u0179\3\u0179\3\u0179\3\u0179\3\u0179\3\u017a\3\u017a"+ + "\3\u017a\3\u017a\3\u017a\3\u017a\3\u017b\3\u017b\3\u017b\3\u017b\3\u017b"+ + "\3\u017b\3\u017b\3\u017b\3\u017b\3\u017b\3\u017b\3\u017c\3\u017c\3\u017c"+ + "\3\u017c\3\u017c\3\u017c\3\u017c\3\u017c\3\u017c\3\u017c\3\u017c\3\u017c"+ + "\3\u017c\3\u017c\3\u017c\3\u017c\3\u017c\3\u017c\3\u017d\3\u017d\3\u017d"+ + "\3\u017d\3\u017d\3\u017d\3\u017d\3\u017e\3\u017e\3\u017e\3\u017e\3\u017e"+ + "\3\u017e\3\u017e\3\u017e\3\u017f\3\u017f\3\u017f\3\u017f\3\u017f\3\u017f"+ + "\3\u017f\3\u017f\3\u017f\3\u017f\3\u017f\3\u017f\3\u017f\3\u0180\3\u0180"+ + "\3\u0180\3\u0180\3\u0180\3\u0180\3\u0180\3\u0180\3\u0181\3\u0181\3\u0181"+ + "\3\u0181\3\u0181\3\u0181\3\u0181\3\u0181\3\u0181\3\u0181\3\u0181\3\u0181"+ + "\3\u0181\3\u0181\3\u0182\3\u0182\3\u0182\3\u0182\3\u0182\3\u0182\3\u0182"+ + "\3\u0182\3\u0183\3\u0183\3\u0183\3\u0183\3\u0183\3\u0183\3\u0183\3\u0183"+ + "\3\u0183\3\u0184\3\u0184\3\u0184\3\u0184\3\u0184\3\u0184\3\u0184\3\u0184"+ + "\3\u0184\3\u0184\3\u0185\3\u0185\3\u0185\3\u0185\3\u0185\3\u0185\3\u0185"+ + "\3\u0185\3\u0186\3\u0186\3\u0186\3\u0187\3\u0187\3\u0187\3\u0187\3\u0187"+ + "\3\u0187\3\u0187\3\u0187\3\u0187\3\u0187\3\u0188\3\u0188\3\u0188\3\u0188"+ + "\3\u0189\3\u0189\3\u0189\3\u0189\3\u0189\3\u0189\3\u0189\3\u0189\3\u0189"+ + "\3\u0189\3\u018a\3\u018a\3\u018a\3\u018a\3\u018a\3\u018a\3\u018a\3\u018b"+ + "\3\u018b\3\u018b\3\u018b\3\u018b\3\u018c\3\u018c\3\u018c\3\u018c\3\u018c"+ + "\3\u018c\3\u018c\3\u018c\3\u018c\3\u018c\3\u018c\3\u018c\3\u018c\3\u018c"+ + "\3\u018c\3\u018d\3\u018d\3\u018d\3\u018d\3\u018d\3\u018d\3\u018d\3\u018d"+ + "\3\u018d\3\u018e\3\u018e\3\u018e\3\u018e\3\u018e\3\u018f\3\u018f\3\u018f"+ + "\3\u018f\3\u018f\3\u018f\3\u018f\3\u0190\3\u0190\3\u0190\3\u0190\3\u0190"+ + "\3\u0191\3\u0191\3\u0191\3\u0191\3\u0191\3\u0191\3\u0192\3\u0192\3\u0192"+ + "\3\u0192\3\u0192\3\u0193\3\u0193\3\u0193\3\u0193\3\u0193\3\u0193\3\u0194"+ + "\3\u0194\3\u0194\3\u0194\3\u0194\3\u0194\3\u0194\3\u0194\3\u0195\3\u0195"+ + "\3\u0195\3\u0195\3\u0195\3\u0196\3\u0196\3\u0196\3\u0196\3\u0196\3\u0196"+ + "\3\u0196\3\u0197\3\u0197\3\u0197\3\u0197\3\u0197\3\u0197\3\u0197\3\u0197"+ + "\3\u0197\3\u0197\3\u0197\3\u0197\3\u0197\3\u0197\3\u0197\3\u0197\3\u0197"+ + "\3\u0197\3\u0197\3\u0197\3\u0197\3\u0198\3\u0198\3\u0198\3\u0198\3\u0198"+ + "\3\u0198\3\u0198\3\u0198\3\u0198\3\u0198\3\u0198\3\u0198\3\u0198\3\u0198"+ + "\3\u0198\3\u0198\3\u0198\3\u0198\3\u0198\3\u0198\3\u0198\3\u0199\3\u0199"+ + "\3\u0199\3\u0199\3\u0199\3\u0199\3\u0199\3\u0199\3\u0199\3\u0199\3\u0199"+ + "\3\u0199\3\u0199\3\u019a\3\u019a\3\u019a\3\u019a\3\u019a\3\u019a\3\u019a"+ + "\3\u019a\3\u019a\3\u019a\3\u019a\3\u019a\3\u019a\3\u019a\3\u019a\3\u019a"+ + "\3\u019a\3\u019a\3\u019a\3\u019a\3\u019a\3\u019a\3\u019a\3\u019a\3\u019b"+ + "\3\u019b\3\u019b\3\u019b\3\u019b\3\u019b\3\u019b\3\u019b\3\u019b\3\u019b"+ + "\3\u019b\3\u019b\3\u019c\3\u019c\3\u019c\3\u019c\3\u019c\3\u019c\3\u019c"+ + "\3\u019c\3\u019c\3\u019c\3\u019c\3\u019c\3\u019c\3\u019c\3\u019c\3\u019c"+ + "\3\u019d\3\u019d\3\u019d\3\u019d\3\u019d\3\u019d\3\u019d\3\u019d\3\u019d"+ + "\3\u019d\3\u019d\3\u019d\3\u019d\3\u019d\3\u019d\3\u019e\3\u019e\3\u019e"+ + "\3\u019e\3\u019e\3\u019e\3\u019e\3\u019e\3\u019e\3\u019e\3\u019e\3\u019e"+ + "\3\u019e\3\u019e\3\u019e\3\u019e\3\u019f\3\u019f\3\u019f\3\u019f\3\u019f"+ + "\3\u019f\3\u019f\3\u019f\3\u019f\3\u019f\3\u019f\3\u019f\3\u01a0\3\u01a0"+ + "\3\u01a0\3\u01a0\3\u01a0\3\u01a0\3\u01a0\3\u01a0\3\u01a0\3\u01a0\3\u01a0"+ + "\3\u01a0\3\u01a0\3\u01a0\3\u01a0\3\u01a0\3\u01a0\3\u01a0\3\u01a0\3\u01a1"+ + "\3\u01a1\3\u01a1\3\u01a1\3\u01a1\3\u01a1\3\u01a1\3\u01a1\3\u01a1\3\u01a1"+ + "\3\u01a1\3\u01a2\3\u01a2\3\u01a2\3\u01a2\3\u01a2\3\u01a2\3\u01a2\3\u01a2"+ + "\3\u01a2\3\u01a2\3\u01a2\3\u01a2\3\u01a2\3\u01a2\3\u01a3\3\u01a3\3\u01a3"+ + "\3\u01a3\3\u01a3\3\u01a3\3\u01a3\3\u01a3\3\u01a3\3\u01a3\3\u01a3\3\u01a3"+ + "\3\u01a3\3\u01a3\3\u01a3\3\u01a3\3\u01a3\3\u01a3\3\u01a4\3\u01a4\3\u01a4"+ + "\3\u01a4\3\u01a4\3\u01a4\3\u01a4\3\u01a4\3\u01a4\3\u01a4\3\u01a4\3\u01a4"+ + "\3\u01a4\3\u01a4\3\u01a4\3\u01a4\3\u01a5\3\u01a5\3\u01a5\3\u01a5\3\u01a5"+ + "\3\u01a5\3\u01a5\3\u01a5\3\u01a5\3\u01a5\3\u01a5\3\u01a5\3\u01a5\3\u01a5"+ + "\3\u01a5\3\u01a5\3\u01a5\3\u01a5\3\u01a6\3\u01a6\3\u01a6\3\u01a6\3\u01a6"+ + "\3\u01a6\3\u01a6\3\u01a6\3\u01a6\3\u01a6\3\u01a6\3\u01a6\3\u01a6\3\u01a6"+ + "\3\u01a6\3\u01a7\3\u01a7\3\u01a7\3\u01a7\3\u01a7\3\u01a7\3\u01a7\3\u01a7"+ + "\3\u01a7\3\u01a7\3\u01a7\3\u01a7\3\u01a7\3\u01a7\3\u01a7\3\u01a7\3\u01a7"+ + "\3\u01a7\3\u01a7\3\u01a8\3\u01a8\3\u01a8\3\u01a8\3\u01a8\3\u01a8\3\u01a8"+ + "\3\u01a8\3\u01a8\3\u01a8\3\u01a8\3\u01a8\3\u01a8\3\u01a8\3\u01a8\3\u01a9"+ + "\3\u01a9\3\u01a9\3\u01a9\3\u01a9\3\u01a9\3\u01a9\3\u01a9\3\u01a9\3\u01a9"+ + "\3\u01a9\3\u01a9\3\u01a9\3\u01a9\3\u01a9\3\u01a9\3\u01a9\3\u01a9\3\u01a9"+ + "\3\u01aa\3\u01aa\3\u01aa\3\u01aa\3\u01aa\3\u01aa\3\u01aa\3\u01aa\3\u01aa"+ + "\3\u01aa\3\u01aa\3\u01aa\3\u01ab\3\u01ab\3\u01ab\3\u01ab\3\u01ab\3\u01ab"+ + "\3\u01ab\3\u01ab\3\u01ab\3\u01ab\3\u01ab\3\u01ab\3\u01ab\3\u01ab\3\u01ab"+ + "\3\u01ab\3\u01ab\3\u01ab\3\u01ab\3\u01ab\3\u01ab\3\u01ab\3\u01ab\3\u01ab"+ + "\3\u01ab\3\u01ac\3\u01ac\3\u01ac\3\u01ac\3\u01ac\3\u01ac\3\u01ac\3\u01ac"+ + "\3\u01ac\3\u01ac\3\u01ac\3\u01ac\3\u01ac\3\u01ac\3\u01ac\3\u01ac\3\u01ac"+ + "\3\u01ac\3\u01ac\3\u01ac\3\u01ac\3\u01ad\3\u01ad\3\u01ad\3\u01ad\3\u01ad"+ + "\3\u01ad\3\u01ad\3\u01ad\3\u01ad\3\u01ae\3\u01ae\3\u01ae\3\u01ae\3\u01ae"+ + "\3\u01ae\3\u01ae\3\u01ae\3\u01ae\3\u01af\3\u01af\3\u01af\3\u01af\3\u01af"+ + "\3\u01af\3\u01af\3\u01af\3\u01af\3\u01af\3\u01af\3\u01af\3\u01af\3\u01af"+ + "\3\u01af\3\u01af\3\u01af\3\u01af\3\u01af\3\u01af\3\u01af\3\u01b0\3\u01b0"+ + "\3\u01b0\3\u01b0\3\u01b0\3\u01b0\3\u01b0\3\u01b0\3\u01b0\3\u01b0\3\u01b0"+ + "\3\u01b0\3\u01b0\3\u01b0\3\u01b0\3\u01b0\3\u01b0\3\u01b0\3\u01b0\3\u01b0"+ + "\3\u01b0\3\u01b1\3\u01b1\3\u01b1\3\u01b1\3\u01b1\3\u01b1\3\u01b1\3\u01b2"+ + "\3\u01b2\3\u01b2\3\u01b2\3\u01b2\3\u01b2\3\u01b2\3\u01b3\3\u01b3\3\u01b3"+ + "\3\u01b3\3\u01b3\3\u01b3\3\u01b4\3\u01b4\3\u01b4\3\u01b4\3\u01b4\3\u01b4"+ + "\3\u01b4\3\u01b4\3\u01b4\3\u01b4\3\u01b4\3\u01b4\3\u01b4\3\u01b5\3\u01b5"+ + "\3\u01b5\3\u01b5\3\u01b6\3\u01b6\3\u01b6\3\u01b6\3\u01b6\3\u01b6\3\u01b6"+ + "\3\u01b6\3\u01b7\3\u01b7\3\u01b7\3\u01b7\3\u01b7\3\u01b7\3\u01b7\3\u01b7"+ + "\3\u01b7\3\u01b8\3\u01b8\3\u01b8\3\u01b8\3\u01b8\3\u01b9\3\u01b9\3\u01b9"+ + "\3\u01b9\3\u01b9\3\u01b9\3\u01b9\3\u01ba\3\u01ba\3\u01ba\3\u01ba\3\u01ba"+ + "\3\u01ba\3\u01bb\3\u01bb\3\u01bb\3\u01bb\3\u01bb\3\u01bb\3\u01bc\3\u01bc"+ + "\3\u01bc\3\u01bc\3\u01bc\3\u01bc\3\u01bc\3\u01bc\3\u01bc\3\u01bc\3\u01bc"+ + "\3\u01bc\3\u01bd\3\u01bd\3\u01bd\3\u01bd\3\u01bd\3\u01be\3\u01be\3\u01be"+ + "\3\u01be\3\u01be\3\u01be\3\u01bf\3\u01bf\3\u01bf\3\u01bf\3\u01bf\3\u01bf"+ + "\3\u01c0\3\u01c0\3\u01c0\3\u01c0\3\u01c0\3\u01c0\3\u01c1\3\u01c1\3\u01c1"+ + "\3\u01c1\3\u01c1\3\u01c2\3\u01c2\3\u01c2\3\u01c3\3\u01c3\3\u01c3\3\u01c3"+ + "\3\u01c3\3\u01c3\3\u01c3\3\u01c3\3\u01c3\3\u01c3\3\u01c4\3\u01c4\3\u01c4"+ + "\3\u01c4\3\u01c4\3\u01c5\3\u01c5\3\u01c5\3\u01c5\3\u01c5\3\u01c5\3\u01c5"+ + "\3\u01c5\3\u01c6\3\u01c6\3\u01c6\3\u01c6\3\u01c6\3\u01c6\3\u01c6\3\u01c7"+ + "\3\u01c7\3\u01c7\3\u01c8\3\u01c8\3\u01c8\3\u01c9\3\u01c9\3\u01c9\3\u01c9"+ + "\3\u01c9\3\u01c9\3\u01c9\3\u01c9\3\u01c9\3\u01c9\3\u01c9\3\u01c9\3\u01c9"+ + "\3\u01ca\3\u01ca\3\u01ca\3\u01ca\3\u01cb\3\u01cb\3\u01cb\3\u01cb\3\u01cb"+ + "\3\u01cb\3\u01cb\3\u01cc\3\u01cc\3\u01cc\3\u01cc\3\u01cc\3\u01cd\3\u01cd"+ + "\3\u01cd\3\u01cd\3\u01cd\3\u01ce\3\u01ce\3\u01ce\3\u01ce\3\u01ce\3\u01ce"+ + "\3\u01ce\3\u01ce\3\u01ce\3\u01ce\3\u01ce\3\u01ce\3\u01ce\3\u01ce\3\u01ce"+ + "\3\u01ce\3\u01cf\3\u01cf\3\u01cf\3\u01cf\3\u01cf\3\u01cf\3\u01cf\3\u01cf"+ + "\3\u01d0\3\u01d0\3\u01d0\3\u01d0\3\u01d0\3\u01d0\3\u01d1\3\u01d1\3\u01d1"+ + "\3\u01d1\3\u01d1\3\u01d1\3\u01d1\3\u01d1\3\u01d1\3\u01d1\3\u01d2\3\u01d2"+ + "\3\u01d2\3\u01d2\3\u01d2\3\u01d3\3\u01d3\3\u01d3\3\u01d3\3\u01d3\3\u01d3"+ + "\3\u01d3\3\u01d4\3\u01d4\3\u01d4\3\u01d4\3\u01d4\3\u01d4\3\u01d4\3\u01d4"+ + "\3\u01d5\3\u01d5\3\u01d5\3\u01d5\3\u01d5\3\u01d5\3\u01d5\3\u01d5\3\u01d5"+ + "\3\u01d5\3\u01d5\3\u01d5\3\u01d5\3\u01d6\3\u01d6\3\u01d6\3\u01d6\3\u01d6"+ + "\3\u01d6\3\u01d6\3\u01d6\3\u01d6\3\u01d6\3\u01d6\3\u01d7\3\u01d7\3\u01d7"+ + "\3\u01d7\3\u01d7\3\u01d7\3\u01d7\3\u01d7\3\u01d7\3\u01d8\3\u01d8\3\u01d8"+ + "\3\u01d8\3\u01d8\3\u01d8\3\u01d9\3\u01d9\3\u01d9\3\u01d9\3\u01d9\3\u01d9"+ + "\3\u01d9\3\u01da\3\u01da\3\u01da\3\u01da\3\u01da\3\u01da\3\u01da\3\u01da"+ + "\3\u01da\3\u01da\3\u01da\3\u01db\3\u01db\3\u01db\3\u01db\3\u01db\3\u01db"+ + "\3\u01db\3\u01db\3\u01dc\3\u01dc\3\u01dc\3\u01dc\3\u01dc\3\u01dd\3\u01dd"+ + "\3\u01dd\3\u01dd\3\u01dd\3\u01dd\3\u01dd\3\u01dd\3\u01dd\3\u01de\3\u01de"+ + "\3\u01de\3\u01de\3\u01de\3\u01de\3\u01de\3\u01de\3\u01df\3\u01df\3\u01df"+ + "\3\u01df\3\u01df\3\u01df\3\u01df\3\u01df\3\u01df\3\u01e0\3\u01e0\3\u01e0"+ + "\3\u01e0\3\u01e0\3\u01e1\3\u01e1\3\u01e1\3\u01e1\3\u01e1\3\u01e1\3\u01e1"+ + "\3\u01e1\3\u01e1\3\u01e1\3\u01e1\3\u01e1\3\u01e2\3\u01e2\3\u01e2\3\u01e2"+ + "\3\u01e2\3\u01e2\3\u01e2\3\u01e2\3\u01e3\3\u01e3\3\u01e3\3\u01e3\3\u01e3"+ + "\3\u01e3\3\u01e3\3\u01e3\3\u01e3\3\u01e4\3\u01e4\3\u01e4\3\u01e4\3\u01e4"+ + "\3\u01e4\3\u01e5\3\u01e5\3\u01e5\3\u01e5\3\u01e5\3\u01e5\3\u01e6\3\u01e6"+ + "\3\u01e6\3\u01e6\3\u01e6\3\u01e6\3\u01e7\3\u01e7\3\u01e7\3\u01e7\3\u01e7"+ + "\3\u01e7\3\u01e7\3\u01e7\3\u01e8\3\u01e8\3\u01e8\3\u01e8\3\u01e8\3\u01e8"+ + "\3\u01e8\3\u01e8\3\u01e9\3\u01e9\3\u01e9\3\u01e9\3\u01e9\3\u01e9\3\u01e9"+ + "\3\u01e9\3\u01e9\3\u01e9\3\u01e9\3\u01e9\3\u01e9\3\u01e9\3\u01e9\3\u01e9"+ + "\3\u01e9\3\u01ea\3\u01ea\3\u01ea\3\u01ea\3\u01ea\3\u01ea\3\u01ea\3\u01ea"+ + "\3\u01ea\3\u01ea\3\u01eb\3\u01eb\3\u01eb\3\u01eb\3\u01eb\3\u01eb\3\u01ec"+ + "\3\u01ec\3\u01ec\3\u01ec\3\u01ec\3\u01ec\3\u01ec\3\u01ec\3\u01ec\3\u01ec"+ + "\3\u01ec\3\u01ec\3\u01ec\3\u01ec\3\u01ec\3\u01ed\3\u01ed\3\u01ed\3\u01ed"+ + "\3\u01ed\3\u01ed\3\u01ed\3\u01ed\3\u01ed\3\u01ed\3\u01ed\3\u01ed\3\u01ed"+ + "\3\u01ed\3\u01ee\3\u01ee\3\u01ee\3\u01ee\3\u01ee\3\u01ee\3\u01ee\3\u01ee"+ + "\3\u01ee\3\u01ef\3\u01ef\3\u01ef\3\u01ef\3\u01ef\3\u01ef\3\u01ef\3\u01f0"+ + "\3\u01f0\3\u01f0\3\u01f0\3\u01f0\3\u01f0\3\u01f0\3\u01f0\3\u01f0\3\u01f0"+ + "\3\u01f0\3\u01f1\3\u01f1\3\u01f1\3\u01f1\3\u01f1\3\u01f1\3\u01f1\3\u01f2"+ + "\3\u01f2\3\u01f2\3\u01f2\3\u01f2\3\u01f2\3\u01f2\3\u01f2\3\u01f2\3\u01f2"+ + "\3\u01f2\3\u01f2\3\u01f2\3\u01f2\3\u01f2\3\u01f2\3\u01f3\3\u01f3\3\u01f3"+ + "\3\u01f3\3\u01f3\3\u01f3\3\u01f3\3\u01f3\3\u01f3\3\u01f3\3\u01f3\3\u01f3"+ + "\3\u01f3\3\u01f3\3\u01f3\3\u01f3\3\u01f3\3\u01f3\3\u01f3\3\u01f4\3\u01f4"+ + "\3\u01f4\3\u01f4\3\u01f4\3\u01f4\3\u01f4\3\u01f4\3\u01f4\3\u01f4\3\u01f4"+ + "\3\u01f4\3\u01f4\3\u01f4\3\u01f4\3\u01f4\3\u01f4\3\u01f4\3\u01f4\3\u01f4"+ + "\3\u01f5\3\u01f5\3\u01f5\3\u01f5\3\u01f5\3\u01f5\3\u01f5\3\u01f5\3\u01f5"+ + "\3\u01f5\3\u01f5\3\u01f5\3\u01f5\3\u01f5\3\u01f5\3\u01f5\3\u01f5\3\u01f5"+ + "\3\u01f5\3\u01f5\3\u01f5\3\u01f5\3\u01f5\3\u01f6\3\u01f6\3\u01f6\3\u01f6"+ + "\3\u01f6\3\u01f6\3\u01f6\3\u01f6\3\u01f6\3\u01f6\3\u01f6\3\u01f6\3\u01f6"+ + "\3\u01f6\3\u01f6\3\u01f6\3\u01f6\3\u01f6\3\u01f6\3\u01f6\3\u01f6\3\u01f7"+ + "\3\u01f7\3\u01f7\3\u01f7\3\u01f7\3\u01f7\3\u01f7\3\u01f7\3\u01f7\3\u01f7"+ + "\3\u01f7\3\u01f7\3\u01f7\3\u01f7\3\u01f7\3\u01f7\3\u01f7\3\u01f7\3\u01f7"+ + "\3\u01f7\3\u01f7\3\u01f7\3\u01f7\3\u01f7\3\u01f8\3\u01f8\3\u01f8\3\u01f8"+ + "\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f8"+ + "\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f8"+ + "\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f8\3\u01f9\3\u01f9\3\u01f9"+ + "\3\u01f9\3\u01f9\3\u01f9\3\u01f9\3\u01f9\3\u01f9\3\u01f9\3\u01f9\3\u01f9"+ + "\3\u01fa\3\u01fa\3\u01fa\3\u01fa\3\u01fa\3\u01fa\3\u01fb\3\u01fb\3\u01fb"+ + "\3\u01fb\3\u01fb\3\u01fb\3\u01fb\3\u01fc\3\u01fc\3\u01fc\3\u01fc\3\u01fc"+ + "\3\u01fc\3\u01fc\3\u01fc\3\u01fc\3\u01fc\3\u01fc\3\u01fc\3\u01fc\3\u01fc"+ + "\3\u01fc\3\u01fc\3\u01fc\3\u01fc\3\u01fd\3\u01fd\3\u01fd\3\u01fd\3\u01fd"+ + "\3\u01fd\3\u01fd\3\u01fd\3\u01fe\3\u01fe\3\u01fe\3\u01fe\3\u01fe\3\u01ff"+ + "\3\u01ff\3\u01ff\3\u01ff\3\u01ff\3\u01ff\3\u01ff\3\u01ff\3\u01ff\3\u0200"+ + "\3\u0200\3\u0200\3\u0200\3\u0200\3\u0200\3\u0200\3\u0201\3\u0201\3\u0201"+ + "\3\u0201\3\u0201\3\u0201\3\u0201\3\u0202\3\u0202\3\u0202\3\u0202\3\u0203"+ + "\3\u0203\3\u0203\3\u0203\3\u0203\3\u0204\3\u0204\3\u0204\3\u0204\3\u0204"+ + "\3\u0204\3\u0204\3\u0204\3\u0204\3\u0204\3\u0204\3\u0205\3\u0205\3\u0205"+ + "\3\u0205\3\u0205\3\u0205\3\u0205\3\u0205\3\u0205\3\u0205\3\u0206\3\u0206"+ + "\3\u0206\3\u0206\3\u0206\3\u0206\3\u0206\3\u0206\3\u0206\3\u0207\3\u0207"+ + "\3\u0207\3\u0207\3\u0207\3\u0207\3\u0207\3\u0207\3\u0207\3\u0208\3\u0208"+ + "\3\u0208\3\u0208\3\u0208\3\u0208\3\u0208\3\u0209\3\u0209\3\u0209\3\u0209"+ + "\3\u0209\3\u0209\3\u0209\3\u0209\3\u020a\3\u020a\3\u020a\3\u020a\3\u020a"+ + "\3\u020a\3\u020b\3\u020b\3\u020b\3\u020b\3\u020b\3\u020b\3\u020b\3\u020c"+ + "\3\u020c\3\u020c\3\u020c\3\u020c\3\u020c\3\u020c\3\u020d\3\u020d\3\u020d"+ + "\3\u020d\3\u020d\3\u020d\3\u020d\3\u020e\3\u020e\3\u020e\3\u020e\3\u020e"+ + "\3\u020e\3\u020f\3\u020f\3\u020f\3\u020f\3\u020f\3\u0210\3\u0210\3\u0210"+ + "\3\u0210\3\u0210\3\u0210\3\u0210\3\u0210\3\u0210\3\u0211\3\u0211\3\u0211"+ + "\3\u0211\3\u0211\3\u0211\3\u0211\3\u0212\3\u0212\3\u0212\3\u0212\3\u0212"+ + "\3\u0213\3\u0213\3\u0213\3\u0213\3\u0213\3\u0213\3\u0213\3\u0214\3\u0214"+ + "\3\u0214\3\u0214\3\u0214\3\u0214\3\u0214\3\u0215\3\u0215\3\u0215\3\u0215"+ + "\3\u0215\3\u0215\3\u0215\3\u0216\3\u0216\3\u0216\3\u0216\3\u0216\3\u0216"+ + "\3\u0216\3\u0216\3\u0216\3\u0216\3\u0216\3\u0216\3\u0216\3\u0216\3\u0216"+ + "\3\u0216\3\u0217\3\u0217\3\u0217\3\u0217\3\u0217\3\u0217\3\u0217\3\u0217"+ + "\3\u0217\3\u0217\3\u0217\3\u0217\3\u0217\3\u0217\3\u0217\3\u0217\3\u0217"+ + "\3\u0217\3\u0217\3\u0218\3\u0218\3\u0218\3\u0218\3\u0218\3\u0218\3\u0218"+ + "\3\u0218\3\u0218\3\u0218\3\u0218\3\u0218\3\u0218\3\u0218\3\u0218\3\u0218"+ + "\3\u0218\3\u0219\3\u0219\3\u0219\3\u0219\3\u0219\3\u0219\3\u0219\3\u0219"+ + "\3\u0219\3\u0219\3\u0219\3\u0219\3\u0219\3\u0219\3\u0219\3\u0219\3\u0219"+ + "\3\u0219\3\u021a\3\u021a\3\u021a\3\u021a\3\u021a\3\u021a\3\u021a\3\u021a"+ + "\3\u021a\3\u021a\3\u021b\3\u021b\3\u021b\3\u021b\3\u021b\3\u021b\3\u021b"+ + "\3\u021b\3\u021b\3\u021b\3\u021b\3\u021b\3\u021b\3\u021c\3\u021c\3\u021c"+ + "\3\u021c\3\u021c\3\u021c\3\u021c\3\u021c\3\u021c\3\u021c\3\u021c\3\u021d"+ + "\3\u021d\3\u021d\3\u021d\3\u021d\3\u021d\3\u021e\3\u021e\3\u021e\3\u021e"+ + "\3\u021e\3\u021e\3\u021e\3\u021f\3\u021f\3\u021f\3\u021f\3\u021f\3\u021f"+ + "\3\u021f\3\u021f\3\u021f\3\u021f\3\u021f\3\u021f\3\u021f\3\u021f\3\u021f"+ + "\3\u021f\3\u021f\3\u021f\3\u0220\3\u0220\3\u0220\3\u0220\3\u0220\3\u0220"+ + "\3\u0220\3\u0220\3\u0220\3\u0220\3\u0220\3\u0220\3\u0220\3\u0220\3\u0220"+ + "\3\u0220\3\u0220\3\u0221\3\u0221\3\u0221\3\u0221\3\u0221\3\u0221\3\u0221"+ + "\3\u0221\3\u0221\3\u0221\3\u0221\3\u0221\3\u0221\3\u0221\3\u0221\3\u0221"+ + "\3\u0221\3\u0221\3\u0221\3\u0222\3\u0222\3\u0222\3\u0222\3\u0222\3\u0222"+ + "\3\u0222\3\u0223\3\u0223\3\u0223\3\u0223\3\u0223\3\u0224\3\u0224\3\u0224"+ + "\3\u0224\3\u0224\3\u0224\3\u0224\3\u0224\3\u0225\3\u0225\3\u0225\3\u0225"+ + "\3\u0225\3\u0225\3\u0225\3\u0226\3\u0226\3\u0226\3\u0226\3\u0226\3\u0226"+ + "\3\u0226\3\u0227\3\u0227\3\u0227\3\u0227\3\u0227\3\u0227\3\u0227\3\u0227"+ + "\3\u0227\3\u0227\3\u0227\3\u0227\3\u0227\3\u0227\3\u0227\3\u0227\3\u0228"+ + "\3\u0228\3\u0228\3\u0228\3\u0228\3\u0228\3\u0228\3\u0228\3\u0229\3\u0229"+ + "\3\u0229\3\u0229\3\u0229\3\u0229\3\u0229\3\u0229\3\u0229\3\u0229\3\u0229"+ + "\3\u0229\3\u0229\3\u022a\3\u022a\3\u022a\3\u022a\3\u022a\3\u022a\3\u022a"+ + "\3\u022a\3\u022a\3\u022a\3\u022a\3\u022a\3\u022a\3\u022a\3\u022b\3\u022b"+ + "\3\u022b\3\u022b\3\u022b\3\u022b\3\u022b\3\u022b\3\u022c\3\u022c\3\u022c"+ + "\3\u022c\3\u022c\3\u022c\3\u022d\3\u022d\3\u022d\3\u022d\3\u022d\3\u022d"+ + "\3\u022d\3\u022d\3\u022d\3\u022e\3\u022e\3\u022e\3\u022e\3\u022e\3\u022e"+ + "\3\u022e\3\u022e\3\u022e\3\u022e\3\u022e\3\u022f\3\u022f\3\u022f\3\u022f"+ + "\3\u022f\3\u022f\3\u022f\3\u022f\3\u022f\3\u022f\3\u022f\3\u0230\3\u0230"+ + "\3\u0230\3\u0230\3\u0230\3\u0230\3\u0230\3\u0230\3\u0230\3\u0230\3\u0231"+ + "\3\u0231\3\u0231\3\u0231\3\u0231\3\u0231\3\u0231\3\u0231\3\u0231\3\u0231"+ + "\3\u0232\3\u0232\3\u0232\3\u0232\3\u0232\3\u0233\3\u0233\3\u0233\3\u0233"+ + "\3\u0233\3\u0233\3\u0233\3\u0233\3\u0233\3\u0233\3\u0233\3\u0233\3\u0234"+ + "\3\u0234\3\u0234\3\u0234\3\u0234\3\u0234\3\u0234\3\u0234\3\u0234\3\u0234"+ + "\3\u0234\3\u0234\3\u0235\3\u0235\3\u0235\3\u0235\3\u0235\3\u0235\3\u0235"+ + "\3\u0235\3\u0235\3\u0235\3\u0235\3\u0235\3\u0235\3\u0235\3\u0236\3\u0236"+ + "\3\u0236\3\u0236\3\u0236\3\u0236\3\u0236\3\u0236\3\u0236\3\u0237\3\u0237"+ + "\3\u0237\3\u0237\3\u0237\3\u0237\3\u0237\3\u0237\3\u0237\3\u0238\3\u0238"+ + "\3\u0238\3\u0238\3\u0238\3\u0238\3\u0238\3\u0238\3\u0238\3\u0238\3\u0239"+ + "\3\u0239\3\u0239\3\u0239\3\u0239\3\u0239\3\u0239\3\u0239\3\u0239\3\u023a"+ + "\3\u023a\3\u023a\3\u023a\3\u023a\3\u023a\3\u023a\3\u023a\3\u023a\3\u023a"+ + "\3\u023a\3\u023a\3\u023a\3\u023a\3\u023a\3\u023a\3\u023a\3\u023b\3\u023b"+ + "\3\u023b\3\u023b\3\u023b\3\u023b\3\u023b\3\u023b\3\u023b\3\u023b\3\u023c"+ + "\3\u023c\3\u023c\3\u023c\3\u023c\3\u023c\3\u023c\3\u023c\3\u023d\3\u023d"+ + "\3\u023d\3\u023d\3\u023d\3\u023d\3\u023e\3\u023e\3\u023e\3\u023e\3\u023e"+ + "\3\u023e\3\u023e\3\u023e\3\u023f\3\u023f\3\u023f\3\u023f\3\u023f\3\u0240"+ + "\3\u0240\3\u0240\3\u0240\3\u0240\3\u0240\3\u0240\3\u0240\3\u0241\3\u0241"+ + "\3\u0241\3\u0241\3\u0241\3\u0241\3\u0241\3\u0241\3\u0241\3\u0241\3\u0241"+ + "\3\u0241\3\u0241\3\u0241\3\u0241\3\u0242\3\u0242\3\u0242\3\u0242\3\u0242"+ + "\3\u0242\3\u0242\3\u0242\3\u0242\3\u0242\3\u0242\3\u0243\3\u0243\3\u0243"+ + "\3\u0243\3\u0243\3\u0243\3\u0244\3\u0244\3\u0244\3\u0244\3\u0244\3\u0244"+ + "\3\u0244\3\u0244\3\u0244\3\u0244\3\u0245\3\u0245\3\u0245\3\u0245\3\u0245"+ + "\3\u0246\3\u0246\3\u0246\3\u0246\3\u0246\3\u0246\3\u0246\3\u0246\3\u0247"+ + "\3\u0247\3\u0247\3\u0247\3\u0247\3\u0247\3\u0247\3\u0247\3\u0248\3\u0248"+ + "\3\u0248\3\u0248\3\u0248\3\u0249\3\u0249\3\u0249\3\u0249\3\u0249\3\u0249"+ + "\3\u0249\3\u0249\3\u0249\3\u024a\3\u024a\3\u024a\3\u024a\3\u024a\3\u024a"+ + "\3\u024a\3\u024a\3\u024b\3\u024b\3\u024b\3\u024b\3\u024b\3\u024c\3\u024c"+ + "\3\u024c\3\u024c\3\u024c\3\u024c\3\u024c\3\u024c\3\u024d\3\u024d\3\u024d"+ + "\3\u024d\3\u024d\3\u024e\3\u024e\3\u024e\3\u024f\3\u024f\3\u024f\3\u024f"+ + "\3\u0250\3\u0250\3\u0250\3\u0250\3\u0251\3\u0251\3\u0251\3\u0251\3\u0252"+ + "\3\u0252\3\u0252\3\u0252\3\u0253\3\u0253\3\u0253\3\u0253\3\u0254\3\u0254"+ + "\3\u0254\3\u0254\3\u0254\3\u0254\3\u0254\3\u0254\3\u0254\3\u0255\3\u0255"+ + "\3\u0255\3\u0255\3\u0255\3\u0255\3\u0255\3\u0255\3\u0256\3\u0256\3\u0256"+ + "\3\u0256\3\u0256\3\u0256\3\u0257\3\u0257\3\u0257\3\u0257\3\u0258\3\u0258"+ + "\3\u0258\3\u0258\3\u0258\3\u0259\3\u0259\3\u0259\3\u0259\3\u0259\3\u0259"+ + "\3\u0259\3\u025a\3\u025a\3\u025a\3\u025a\3\u025a\3\u025b\3\u025b\3\u025b"+ + "\3\u025b\3\u025b\3\u025b\3\u025b\3\u025c\3\u025c\3\u025c\3\u025c\3\u025c"+ + "\3\u025c\3\u025c\3\u025c\3\u025c\3\u025c\3\u025c\3\u025c\3\u025d\3\u025d"+ + "\3\u025d\3\u025d\3\u025d\3\u025d\3\u025d\3\u025e\3\u025e\3\u025e\3\u025e"+ + "\3\u025e\3\u025e\3\u025e\3\u025e\3\u025f\3\u025f\3\u025f\3\u025f\3\u025f"+ + "\3\u025f\3\u025f\3\u025f\3\u0260\3\u0260\3\u0260\3\u0260\3\u0260\3\u0261"+ + "\3\u0261\3\u0261\3\u0261\3\u0261\3\u0261\3\u0261\3\u0261\3\u0262\3\u0262"+ + "\3\u0262\3\u0262\3\u0262\3\u0262\3\u0262\3\u0263\3\u0263\3\u0263\3\u0263"+ + "\3\u0263\3\u0263\3\u0263\3\u0263\3\u0263\3\u0264\3\u0264\3\u0264\3\u0264"+ + "\3\u0264\3\u0264\3\u0265\3\u0265\3\u0265\3\u0265\3\u0265\3\u0265\3\u0265"+ + "\3\u0265\3\u0265\3\u0265\3\u0265\3\u0266\3\u0266\3\u0266\3\u0266\3\u0266"+ + "\3\u0266\3\u0266\3\u0266\3\u0266\3\u0266\3\u0266\3\u0266\3\u0266\3\u0266"+ + "\3\u0266\3\u0266\3\u0266\3\u0266\3\u0266\3\u0266\3\u0266\3\u0266\3\u0266"+ + "\3\u0266\3\u0266\3\u0266\3\u0266\3\u0267\3\u0267\3\u0267\3\u0267\3\u0267"+ + "\3\u0267\3\u0267\3\u0267\3\u0267\3\u0267\3\u0267\3\u0267\3\u0268\3\u0268"+ + "\3\u0268\3\u0268\3\u0268\3\u0268\3\u0268\3\u0268\3\u0268\3\u0268\3\u0268"+ + "\3\u0268\3\u0268\3\u0269\3\u0269\3\u0269\3\u0269\3\u0269\3\u0269\3\u0269"+ + "\3\u0269\3\u0269\3\u0269\3\u0269\3\u0269\3\u0269\3\u026a\3\u026a\3\u026a"+ + "\3\u026a\3\u026a\3\u026a\3\u026a\3\u026a\3\u026a\3\u026a\3\u026a\3\u026a"+ + "\3\u026a\3\u026a\3\u026a\3\u026a\3\u026a\3\u026a\3\u026a\3\u026a\3\u026a"+ + "\3\u026a\3\u026a\3\u026a\3\u026b\3\u026b\3\u026b\3\u026b\3\u026b\3\u026b"+ + "\3\u026b\3\u026b\3\u026b\3\u026b\3\u026b\3\u026b\3\u026c\3\u026c\3\u026c"+ + "\3\u026c\3\u026c\3\u026c\3\u026c\3\u026c\3\u026c\3\u026c\3\u026c\3\u026c"+ + "\3\u026c\3\u026c\3\u026c\3\u026c\3\u026c\3\u026d\3\u026d\3\u026d\3\u026d"+ + "\3\u026d\3\u026d\3\u026d\3\u026d\3\u026d\3\u026d\3\u026d\3\u026d\3\u026d"+ + "\3\u026d\3\u026d\3\u026d\3\u026d\3\u026d\3\u026d\3\u026d\3\u026d\3\u026e"+ + "\3\u026e\3\u026e\3\u026e\3\u026e\3\u026e\3\u026e\3\u026e\3\u026e\3\u026e"+ + "\3\u026e\3\u026e\3\u026e\3\u026e\3\u026e\3\u026f\3\u026f\3\u026f\3\u026f"+ + "\3\u026f\3\u026f\3\u026f\3\u026f\3\u026f\3\u026f\3\u026f\3\u026f\3\u026f"+ + "\3\u026f\3\u0270\3\u0270\3\u0270\3\u0270\3\u0270\3\u0270\3\u0270\3\u0270"+ + "\3\u0270\3\u0270\3\u0270\3\u0270\3\u0270\3\u0270\3\u0270\3\u0270\3\u0270"+ + "\3\u0270\3\u0270\3\u0270\3\u0270\3\u0270\3\u0270\3\u0270\3\u0271\3\u0271"+ + "\3\u0271\3\u0271\3\u0271\3\u0271\3\u0271\3\u0271\3\u0271\3\u0271\3\u0271"+ + "\3\u0271\3\u0271\3\u0271\3\u0271\3\u0271\3\u0271\3\u0271\3\u0271\3\u0271"+ + "\3\u0271\3\u0271\3\u0271\3\u0271\3\u0272\3\u0272\3\u0272\3\u0272\3\u0272"+ + "\3\u0272\3\u0272\3\u0272\3\u0272\3\u0272\3\u0272\3\u0272\3\u0272\3\u0272"+ + "\3\u0272\3\u0272\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273"+ + "\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273"+ + "\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273\3\u0273"+ + "\3\u0273\3\u0273\3\u0274\3\u0274\3\u0274\3\u0274\3\u0274\3\u0274\3\u0274"+ + "\3\u0274\3\u0274\3\u0274\3\u0274\3\u0274\3\u0274\3\u0274\3\u0274\3\u0274"+ + "\3\u0274\3\u0274\3\u0274\3\u0274\3\u0275\3\u0275\3\u0275\3\u0275\3\u0275"+ + "\3\u0275\3\u0275\3\u0275\3\u0275\3\u0275\3\u0275\3\u0275\3\u0275\3\u0275"+ + "\3\u0275\3\u0275\3\u0275\3\u0275\3\u0275\3\u0275\3\u0275\3\u0275\3\u0275"+ + "\3\u0275\3\u0276\3\u0276\3\u0276\3\u0276\3\u0276\3\u0276\3\u0276\3\u0276"+ + "\3\u0276\3\u0276\3\u0276\3\u0276\3\u0276\3\u0276\3\u0276\3\u0276\3\u0276"+ + "\3\u0276\3\u0276\3\u0276\3\u0276\3\u0277\3\u0277\3\u0277\3\u0277\3\u0277"+ + "\3\u0277\3\u0277\3\u0277\3\u0277\3\u0277\3\u0277\3\u0277\3\u0277\3\u0277"+ + "\3\u0277\3\u0277\3\u0277\3\u0277\3\u0277\3\u0277\3\u0278\3\u0278\3\u0278"+ + "\3\u0278\3\u0278\3\u0278\3\u0278\3\u0278\3\u0278\3\u0278\3\u0278\3\u0279"+ + "\5\u0279\u1e86\n\u0279\3\u0279\3\u0279\3\u0279\3\u0279\3\u0279\3\u0279"+ + "\3\u0279\3\u0279\3\u0279\3\u0279\3\u0279\3\u0279\3\u0279\3\u0279\3\u0279"+ + "\3\u0279\3\u0279\3\u0279\3\u0279\3\u0279\3\u0279\3\u0279\3\u0279\3\u0279"+ + "\3\u0279\5\u0279\u1ea1\n\u0279\3\u027a\3\u027a\3\u027a\3\u027a\3\u027a"+ + "\3\u027a\3\u027a\3\u027a\3\u027a\3\u027a\3\u027a\3\u027a\3\u027b\3\u027b"+ + "\3\u027b\3\u027b\3\u027b\3\u027b\3\u027b\3\u027b\3\u027b\3\u027b\3\u027b"+ + "\3\u027b\3\u027b\3\u027c\3\u027c\3\u027c\3\u027c\3\u027c\3\u027c\3\u027c"+ + "\3\u027c\3\u027c\3\u027c\3\u027c\3\u027c\3\u027c\3\u027c\3\u027c\3\u027c"+ + "\3\u027c\3\u027c\3\u027c\3\u027c\3\u027c\3\u027c\3\u027c\3\u027d\3\u027d"+ + "\3\u027d\3\u027d\3\u027d\3\u027d\3\u027d\3\u027d\3\u027d\3\u027d\3\u027d"+ + "\3\u027d\3\u027d\3\u027d\3\u027d\3\u027d\3\u027d\3\u027d\3\u027d\3\u027d"+ + "\3\u027d\3\u027d\3\u027d\3\u027e\3\u027e\3\u027e\3\u027e\3\u027e\3\u027e"+ + "\3\u027e\3\u027e\3\u027e\3\u027e\3\u027e\3\u027e\3\u027e\3\u027e\3\u027e"+ + "\3\u027e\3\u027e\3\u027e\3\u027e\3\u027e\3\u027f\3\u027f\3\u027f\3\u027f"+ + "\3\u027f\3\u027f\3\u027f\3\u027f\3\u027f\3\u027f\3\u027f\3\u027f\3\u027f"+ + "\3\u027f\3\u027f\3\u027f\3\u027f\3\u0280\3\u0280\3\u0280\3\u0280\3\u0280"+ + "\3\u0280\3\u0280\3\u0280\3\u0280\3\u0281\3\u0281\3\u0281\3\u0281\3\u0281"+ + "\3\u0281\3\u0282\3\u0282\3\u0282\3\u0282\3\u0282\3\u0283\3\u0283\3\u0283"+ + "\3\u0283\3\u0283\3\u0283\3\u0283\3\u0284\3\u0284\3\u0284\3\u0284\3\u0284"+ + "\3\u0284\3\u0284\3\u0285\3\u0285\3\u0285\3\u0285\3\u0285\3\u0285\3\u0285"+ + "\3\u0286\3\u0286\3\u0286\3\u0286\3\u0286\3\u0286\3\u0286\3\u0287\3\u0287"+ + "\3\u0287\3\u0287\3\u0287\3\u0287\3\u0288\3\u0288\3\u0288\3\u0288\3\u0288"+ + "\3\u0288\3\u0289\3\u0289\3\u0289\3\u0289\3\u0289\3\u0289\3\u028a\3\u028a"+ + "\3\u028a\3\u028a\3\u028a\3\u028a\3\u028b\3\u028b\3\u028b\3\u028b\3\u028b"+ + "\3\u028c\3\u028c\3\u028c\3\u028c\3\u028c\3\u028c\3\u028c\3\u028c\3\u028d"+ + "\3\u028d\3\u028d\3\u028d\3\u028d\3\u028d\3\u028e\3\u028e\3\u028e\3\u028e"+ + "\3\u028e\3\u028e\3\u028e\3\u028f\3\u028f\3\u028f\3\u028f\3\u0290\3\u0290"+ + "\3\u0290\3\u0290\3\u0290\3\u0290\3\u0290\3\u0290\3\u0291\3\u0291\3\u0291"+ + "\3\u0291\3\u0291\3\u0291\3\u0292\3\u0292\3\u0292\3\u0292\3\u0292\3\u0292"+ + "\3\u0292\3\u0293\3\u0293\3\u0293\3\u0293\3\u0294\3\u0294\3\u0294\3\u0294"+ + "\3\u0294\3\u0294\3\u0294\3\u0294\3\u0295\3\u0295\3\u0295\3\u0295\3\u0295"+ + "\3\u0295\3\u0296\3\u0296\3\u0296\3\u0296\3\u0296\3\u0296\3\u0297\3\u0297"+ + "\3\u0297\3\u0297\3\u0297\3\u0297\3\u0297\3\u0298\3\u0298\3\u0298\3\u0298"+ + "\3\u0298\3\u0298\3\u0298\3\u0299\3\u0299\3\u0299\3\u0299\3\u0299\3\u0299"+ + "\3\u0299\3\u029a\3\u029a\3\u029a\3\u029a\3\u029a\3\u029a\3\u029a\3\u029b"+ + "\3\u029b\3\u029b\3\u029b\3\u029b\3\u029b\3\u029c\3\u029c\3\u029c\3\u029c"+ + "\3\u029c\3\u029c\3\u029c\3\u029c\3\u029c\3\u029d\3\u029d\3\u029d\3\u029d"+ + "\3\u029d\3\u029e\3\u029e\3\u029e\3\u029e\3\u029e\3\u029f\3\u029f\3\u029f"+ + "\3\u029f\3\u029f\3\u029f\3\u029f\3\u02a0\3\u02a0\3\u02a0\3\u02a0\3\u02a0"+ + "\3\u02a1\3\u02a1\3\u02a1\3\u02a1\3\u02a1\3\u02a2\3\u02a2\3\u02a2\3\u02a2"+ + "\3\u02a2\3\u02a2\3\u02a3\3\u02a3\3\u02a3\3\u02a3\3\u02a3\3\u02a3\3\u02a3"+ + "\3\u02a3\3\u02a4\3\u02a4\3\u02a4\3\u02a4\3\u02a4\3\u02a4\3\u02a5\3\u02a5"+ + "\3\u02a5\3\u02a5\3\u02a5\3\u02a6\3\u02a6\3\u02a6\3\u02a6\3\u02a6\3\u02a6"+ + "\3\u02a6\3\u02a6\3\u02a7\3\u02a7\3\u02a7\3\u02a7\3\u02a7\3\u02a7\3\u02a7"+ + "\3\u02a7\3\u02a8\3\u02a8\3\u02a8\3\u02a8\3\u02a8\3\u02a8\3\u02a8\3\u02a8"+ + "\3\u02a9\3\u02a9\3\u02a9\3\u02a9\3\u02a9\3\u02a9\3\u02a9\3\u02a9\3\u02a9"+ + "\3\u02a9\3\u02aa\3\u02aa\3\u02aa\3\u02aa\3\u02ab\3\u02ab\3\u02ab\3\u02ab"+ + "\3\u02ab\3\u02ab\3\u02ab\3\u02ab\3\u02ab\3\u02ab\3\u02ac\3\u02ac\3\u02ac"+ + "\3\u02ac\3\u02ac\3\u02ac\3\u02ac\3\u02ad\3\u02ad\3\u02ad\3\u02ad\3\u02ad"+ + "\3\u02ad\3\u02ad\3\u02ae\3\u02ae\3\u02ae\3\u02ae\3\u02ae\3\u02ae\3\u02ae"+ + "\3\u02ae\3\u02ae\3\u02ae\3\u02ae\3\u02af\3\u02af\3\u02af\3\u02af\3\u02af"+ + "\3\u02af\3\u02af\3\u02b0\3\u02b0\3\u02b0\3\u02b0\3\u02b1\3\u02b1\3\u02b1"+ + "\3\u02b1\3\u02b1\3\u02b1\3\u02b1\3\u02b1\3\u02b1\3\u02b1\3\u02b1\3\u02b2"+ + "\3\u02b2\3\u02b2\3\u02b2\3\u02b2\3\u02b2\3\u02b2\3\u02b2\3\u02b2\3\u02b2"+ + "\3\u02b2\3\u02b2\3\u02b2\3\u02b2\3\u02b2\3\u02b2\3\u02b2\3\u02b2\3\u02b2"+ + "\3\u02b3\3\u02b3\3\u02b3\3\u02b3\3\u02b3\3\u02b3\3\u02b3\3\u02b4\3\u02b4"+ + "\3\u02b4\3\u02b4\3\u02b4\3\u02b4\3\u02b4\3\u02b4\3\u02b4\3\u02b4\3\u02b4"+ + "\3\u02b5\3\u02b5\3\u02b5\3\u02b5\3\u02b5\3\u02b5\3\u02b5\3\u02b5\3\u02b5"+ + "\3\u02b5\3\u02b6\3\u02b6\3\u02b6\3\u02b6\3\u02b6\3\u02b6\3\u02b6\3\u02b6"+ + "\3\u02b6\3\u02b6\3\u02b6\3\u02b6\3\u02b7\3\u02b7\3\u02b7\3\u02b7\3\u02b7"+ + "\3\u02b7\3\u02b7\3\u02b7\3\u02b7\3\u02b7\3\u02b7\3\u02b7\3\u02b7\3\u02b8"+ + "\3\u02b8\3\u02b8\3\u02b8\3\u02b8\3\u02b8\3\u02b8\3\u02b8\3\u02b8\3\u02b8"+ + "\3\u02b8\3\u02b8\3\u02b8\3\u02b8\3\u02b8\3\u02b8\3\u02b8\3\u02b8\3\u02b8"+ + "\3\u02b9\3\u02b9\3\u02b9\3\u02b9\3\u02b9\3\u02b9\3\u02b9\3\u02b9\3\u02b9"+ + "\3\u02b9\3\u02b9\3\u02b9\3\u02b9\3\u02b9\3\u02b9\3\u02ba\3\u02ba\3\u02ba"+ + "\3\u02ba\3\u02ba\3\u02ba\3\u02ba\3\u02ba\3\u02ba\3\u02bb\3\u02bb\3\u02bb"+ + "\3\u02bb\3\u02bb\3\u02bb\3\u02bb\3\u02bb\3\u02bb\3\u02bb\3\u02bb\3\u02bc"+ + "\3\u02bc\3\u02bc\3\u02bc\3\u02bc\3\u02bc\3\u02bc\3\u02bc\3\u02bc\3\u02bc"+ + "\3\u02bc\3\u02bc\3\u02bc\3\u02bc\3\u02bc\3\u02bc\3\u02bd\3\u02bd\3\u02bd"+ + "\3\u02bd\3\u02bd\3\u02bd\3\u02bd\3\u02bd\3\u02bd\3\u02bd\3\u02bd\3\u02be"+ + "\3\u02be\3\u02be\3\u02be\3\u02be\3\u02be\3\u02be\3\u02be\3\u02be\3\u02be"+ + "\3\u02be\3\u02be\3\u02be\3\u02bf\3\u02bf\3\u02bf\3\u02bf\3\u02bf\3\u02bf"+ + "\3\u02c0\3\u02c0\3\u02c0\3\u02c0\3\u02c0\3\u02c0\3\u02c0\3\u02c0\3\u02c1"+ + "\3\u02c1\3\u02c1\3\u02c1\3\u02c2\3\u02c2\3\u02c2\3\u02c2\3\u02c2\3\u02c3"+ + "\3\u02c3\3\u02c3\3\u02c3\3\u02c3\3\u02c3\3\u02c3\3\u02c3\3\u02c4\3\u02c4"+ + "\3\u02c4\3\u02c4\3\u02c4\3\u02c4\3\u02c4\3\u02c4\3\u02c5\3\u02c5\3\u02c5"+ + "\3\u02c5\3\u02c5\3\u02c5\3\u02c5\3\u02c5\3\u02c5\3\u02c5\3\u02c5\3\u02c5"+ + "\3\u02c6\3\u02c6\3\u02c6\3\u02c6\3\u02c6\3\u02c6\3\u02c6\3\u02c6\3\u02c6"+ + "\3\u02c6\3\u02c6\3\u02c6\3\u02c7\3\u02c7\3\u02c7\3\u02c7\3\u02c7\3\u02c8"+ + "\3\u02c8\3\u02c8\3\u02c8\3\u02c8\3\u02c8\3\u02c8\3\u02c8\3\u02c8\3\u02c9"+ + "\3\u02c9\3\u02c9\3\u02c9\3\u02c9\3\u02ca\3\u02ca\3\u02ca\3\u02ca\3\u02ca"+ + "\3\u02ca\3\u02ca\3\u02cb\3\u02cb\3\u02cb\3\u02cb\3\u02cb\3\u02cb\3\u02cc"+ + "\3\u02cc\3\u02cc\3\u02cc\3\u02cc\3\u02cc\3\u02cd\3\u02cd\3\u02cd\3\u02cd"+ + "\3\u02cd\3\u02cd\3\u02cd\3\u02cd\3\u02cd\3\u02cd\3\u02cd\3\u02cd\3\u02cd"+ + "\3\u02cd\3\u02cd\3\u02cd\3\u02cd\3\u02cd\3\u02cd\3\u02ce\3\u02ce\3\u02ce"+ + "\3\u02ce\3\u02ce\3\u02ce\3\u02ce\3\u02ce\3\u02ce\3\u02ce\3\u02ce\3\u02ce"+ + "\3\u02ce\3\u02ce\3\u02ce\3\u02ce\3\u02ce\3\u02ce\3\u02cf\3\u02cf\3\u02cf"+ + "\3\u02cf\3\u02cf\3\u02cf\3\u02cf\3\u02cf\3\u02cf\3\u02cf\3\u02cf\3\u02cf"+ + "\3\u02cf\3\u02cf\3\u02cf\3\u02cf\3\u02cf\3\u02cf\3\u02cf\3\u02d0\3\u02d0"+ + "\3\u02d0\3\u02d0\3\u02d0\3\u02d0\3\u02d0\3\u02d0\3\u02d0\3\u02d0\3\u02d0"+ + "\3\u02d0\3\u02d0\3\u02d0\3\u02d0\3\u02d0\3\u02d1\3\u02d1\3\u02d1\3\u02d1"+ + "\3\u02d1\3\u02d1\3\u02d1\3\u02d1\3\u02d1\3\u02d1\3\u02d1\3\u02d1\3\u02d1"+ + "\3\u02d1\3\u02d1\3\u02d1\3\u02d1\3\u02d1\3\u02d2\3\u02d2\3\u02d2\3\u02d2"+ + "\3\u02d2\3\u02d3\3\u02d3\3\u02d3\3\u02d3\3\u02d3\3\u02d3\3\u02d4\3\u02d4"+ + "\3\u02d4\3\u02d4\3\u02d4\3\u02d4\3\u02d4\3\u02d4\3\u02d4\3\u02d4\3\u02d5"+ + "\3\u02d5\3\u02d5\3\u02d5\3\u02d6\3\u02d6\3\u02d6\3\u02d6\3\u02d6\3\u02d6"+ + "\3\u02d6\3\u02d6\3\u02d6\3\u02d6\3\u02d7\3\u02d7\3\u02d7\3\u02d7\3\u02d7"+ + "\3\u02d7\3\u02d7\3\u02d7\3\u02d7\3\u02d7\3\u02d7\3\u02d8\3\u02d8\3\u02d8"+ + "\3\u02d8\3\u02d8\3\u02d8\3\u02d8\3\u02d9\3\u02d9\3\u02d9\3\u02d9\3\u02d9"+ + "\3\u02d9\3\u02d9\3\u02d9\3\u02d9\3\u02d9\3\u02d9\3\u02d9\3\u02d9\3\u02da"+ + "\3\u02da\3\u02da\3\u02da\3\u02da\3\u02db\3\u02db\3\u02db\3\u02db\3\u02db"+ + "\3\u02db\3\u02db\3\u02db\3\u02dc\3\u02dc\3\u02dc\3\u02dc\3\u02dc\3\u02dc"+ + "\3\u02dc\3\u02dc\3\u02dc\3\u02dd\3\u02dd\3\u02dd\3\u02dd\3\u02dd\3\u02dd"+ + "\3\u02dd\3\u02dd\3\u02dd\3\u02dd\3\u02dd\3\u02dd\3\u02dd\3\u02dd\3\u02dd"+ + "\3\u02dd\3\u02dd\3\u02de\3\u02de\3\u02de\3\u02de\3\u02de\3\u02de\3\u02de"+ + "\3\u02de\3\u02df\3\u02df\3\u02df\3\u02df\3\u02df\3\u02df\3\u02df\3\u02df"+ + "\3\u02df\3\u02df\3\u02df\3\u02df\3\u02e0\3\u02e0\3\u02e0\3\u02e0\3\u02e0"+ + "\3\u02e0\3\u02e0\3\u02e0\3\u02e0\3\u02e0\3\u02e0\3\u02e0\3\u02e0\3\u02e1"+ + "\3\u02e1\3\u02e1\3\u02e1\3\u02e1\3\u02e1\3\u02e1\3\u02e1\3\u02e1\3\u02e1"+ + "\3\u02e2\3\u02e2\3\u02e2\3\u02e2\3\u02e2\3\u02e2\3\u02e2\3\u02e2\3\u02e2"+ + "\3\u02e3\3\u02e3\3\u02e3\3\u02e3\3\u02e3\3\u02e3\3\u02e3\3\u02e4\3\u02e4"+ + "\3\u02e4\3\u02e4\3\u02e4\3\u02e4\3\u02e4\3\u02e4\3\u02e4\3\u02e4\3\u02e5"+ + "\3\u02e5\3\u02e5\3\u02e5\3\u02e5\3\u02e5\3\u02e5\3\u02e5\3\u02e5\3\u02e5"+ + "\3\u02e5\3\u02e5\3\u02e5\3\u02e5\3\u02e6\3\u02e6\3\u02e6\3\u02e6\3\u02e6"+ + "\3\u02e7\3\u02e7\3\u02e7\3\u02e7\3\u02e7\3\u02e7\3\u02e7\3\u02e7\3\u02e7"+ + "\3\u02e7\3\u02e7\3\u02e8\3\u02e8\3\u02e8\3\u02e8\3\u02e9\3\u02e9\3\u02e9"+ + "\3\u02e9\3\u02ea\3\u02ea\3\u02ea\3\u02ea\3\u02ea\3\u02ea\3\u02eb\3\u02eb"+ + "\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb"+ + "\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb"+ + "\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02eb\3\u02ec\3\u02ec"+ + "\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ec"+ + "\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ec"+ + "\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ec\3\u02ed\3\u02ed\3\u02ed"+ + "\3\u02ed\3\u02ed\3\u02ed\3\u02ed\3\u02ed\3\u02ed\3\u02ed\3\u02ed\3\u02ed"+ + "\3\u02ed\3\u02ed\3\u02ed\3\u02ed\3\u02ed\3\u02ed\3\u02ed\3\u02ed\3\u02ed"+ + "\3\u02ee\3\u02ee\3\u02ee\3\u02ee\3\u02ee\3\u02ee\3\u02ee\3\u02ee\3\u02ee"+ + "\3\u02ee\3\u02ee\3\u02ee\3\u02ee\3\u02ee\3\u02ef\3\u02ef\3\u02ef\3\u02ef"+ + "\3\u02ef\3\u02ef\3\u02ef\3\u02ef\3\u02f0\3\u02f0\3\u02f0\3\u02f0\3\u02f0"+ + "\3\u02f0\3\u02f0\3\u02f0\3\u02f0\3\u02f1\3\u02f1\3\u02f1\3\u02f1\3\u02f1"+ + "\3\u02f1\3\u02f1\3\u02f1\3\u02f1\3\u02f1\3\u02f1\3\u02f1\3\u02f2\3\u02f2"+ + "\3\u02f2\3\u02f2\3\u02f2\3\u02f2\3\u02f2\3\u02f2\3\u02f3\3\u02f3\3\u02f3"+ + "\3\u02f3\3\u02f3\3\u02f3\3\u02f3\3\u02f3\3\u02f3\3\u02f3\3\u02f3\3\u02f4"+ + "\3\u02f4\3\u02f4\3\u02f4\3\u02f4\3\u02f4\3\u02f4\3\u02f4\3\u02f4\3\u02f4"+ + "\3\u02f5\3\u02f5\3\u02f5\3\u02f5\3\u02f5\3\u02f5\3\u02f5\3\u02f5\3\u02f5"+ + "\3\u02f5\3\u02f6\3\u02f6\3\u02f6\3\u02f6\3\u02f6\3\u02f6\3\u02f6\3\u02f7"+ + "\3\u02f7\3\u02f7\3\u02f7\3\u02f7\3\u02f7\3\u02f7\3\u02f7\3\u02f8\3\u02f8"+ + "\3\u02f8\3\u02f8\3\u02f8\3\u02f8\3\u02f8\3\u02f8\3\u02f8\3\u02f8\3\u02f8"+ + "\3\u02f8\3\u02f9\3\u02f9\3\u02f9\3\u02f9\3\u02f9\3\u02f9\3\u02f9\3\u02f9"+ + "\3\u02f9\3\u02f9\3\u02f9\3\u02f9\3\u02fa\3\u02fa\3\u02fa\3\u02fa\3\u02fa"+ + "\3\u02fa\3\u02fa\3\u02fa\3\u02fa\3\u02fa\3\u02fb\3\u02fb\3\u02fb\3\u02fb"+ + "\3\u02fb\3\u02fb\3\u02fb\3\u02fb\3\u02fb\3\u02fc\3\u02fc\3\u02fc\3\u02fc"+ + "\3\u02fd\3\u02fd\3\u02fd\3\u02fd\3\u02fd\3\u02fd\3\u02fd\3\u02fe\3\u02fe"+ + "\3\u02fe\3\u02fe\3\u02fe\3\u02fe\3\u02fe\3\u02fe\3\u02ff\3\u02ff\3\u02ff"+ + "\3\u02ff\3\u02ff\3\u02ff\3\u02ff\3\u02ff\3\u02ff\3\u0300\3\u0300\3\u0300"+ + "\3\u0300\3\u0300\3\u0300\3\u0300\3\u0300\3\u0300\3\u0301\3\u0301\3\u0301"+ + "\3\u0301\3\u0301\3\u0301\3\u0301\3\u0302\3\u0302\3\u0302\3\u0302\3\u0303"+ + "\3\u0303\3\u0303\3\u0303\3\u0303\3\u0303\3\u0303\3\u0303\3\u0303\3\u0303"+ + "\3\u0303\3\u0304\3\u0304\3\u0304\3\u0304\3\u0304\3\u0304\3\u0304\3\u0304"+ + "\3\u0304\3\u0304\3\u0304\3\u0304\3\u0304\3\u0305\3\u0305\3\u0305\3\u0305"+ + "\3\u0305\3\u0305\3\u0305\3\u0305\3\u0305\3\u0305\3\u0305\3\u0305\3\u0305"+ + "\3\u0306\3\u0306\3\u0306\3\u0306\3\u0306\3\u0306\3\u0307\3\u0307\3\u0307"+ + "\3\u0307\3\u0307\3\u0307\3\u0307\3\u0307\3\u0307\3\u0307\3\u0307\3\u0307"+ + "\3\u0308\3\u0308\3\u0308\3\u0308\3\u0308\3\u0308\3\u0309\3\u0309\3\u0309"+ + "\3\u0309\3\u0309\3\u0309\3\u0309\3\u030a\3\u030a\3\u030a\3\u030a\3\u030a"+ + "\3\u030a\3\u030a\3\u030a\3\u030a\3\u030a\3\u030a\3\u030b\3\u030b\3\u030b"+ + "\3\u030b\3\u030b\3\u030b\3\u030b\3\u030b\3\u030b\3\u030b\3\u030b\3\u030b"+ + "\3\u030c\3\u030c\3\u030c\3\u030c\3\u030c\3\u030c\3\u030c\3\u030c\3\u030c"+ + "\3\u030c\3\u030d\3\u030d\3\u030d\3\u030d\3\u030d\3\u030d\3\u030d\3\u030d"+ + "\3\u030d\3\u030d\3\u030d\3\u030d\3\u030d\3\u030d\3\u030e\3\u030e\3\u030e"+ + "\3\u030e\3\u030e\3\u030e\3\u030e\3\u030e\3\u030e\3\u030e\3\u030e\3\u030e"+ + "\3\u030e\3\u030e\3\u030e\3\u030e\3\u030e\3\u030f\3\u030f\3\u030f\3\u030f"+ + "\3\u030f\3\u030f\3\u030f\3\u030f\3\u030f\3\u030f\3\u030f\3\u030f\3\u030f"+ + "\3\u030f\3\u030f\3\u030f\3\u0310\3\u0310\3\u0310\3\u0310\3\u0310\3\u0310"+ + "\3\u0310\3\u0310\3\u0310\3\u0310\3\u0310\3\u0310\3\u0310\3\u0310\3\u0310"+ + "\3\u0310\3\u0310\3\u0310\3\u0310\3\u0310\3\u0310\3\u0310\3\u0310\3\u0310"+ + "\3\u0310\3\u0310\3\u0310\3\u0311\3\u0311\3\u0311\3\u0311\3\u0311\3\u0311"+ + "\3\u0311\3\u0311\3\u0311\3\u0311\3\u0311\3\u0311\3\u0311\3\u0311\3\u0311"+ + "\3\u0311\3\u0311\3\u0311\3\u0311\3\u0311\3\u0311\3\u0311\3\u0311\3\u0311"+ + "\3\u0311\3\u0311\3\u0312\3\u0312\3\u0312\3\u0312\3\u0312\3\u0312\3\u0312"+ + "\3\u0312\3\u0312\3\u0312\3\u0312\3\u0312\3\u0312\3\u0312\3\u0312\3\u0312"+ + "\3\u0312\3\u0313\3\u0313\3\u0313\3\u0313\3\u0313\3\u0313\3\u0313\3\u0313"+ + "\3\u0313\3\u0313\3\u0313\3\u0313\3\u0313\3\u0313\3\u0313\3\u0313\3\u0314"+ + "\3\u0314\3\u0314\3\u0314\3\u0314\3\u0314\3\u0314\3\u0314\3\u0314\3\u0314"+ + "\3\u0315\3\u0315\3\u0315\3\u0315\3\u0315\3\u0315\3\u0315\3\u0315\3\u0315"+ + "\3\u0315\3\u0315\3\u0315\3\u0315\3\u0316\3\u0316\3\u0316\3\u0316\3\u0316"+ + "\3\u0316\3\u0316\3\u0316\3\u0316\3\u0316\3\u0316\3\u0316\3\u0316\3\u0317"+ + "\3\u0317\3\u0317\3\u0317\3\u0317\3\u0317\3\u0317\3\u0317\3\u0317\3\u0317"+ + "\3\u0317\3\u0317\3\u0318\3\u0318\3\u0318\3\u0318\3\u0318\3\u0318\3\u0318"+ + "\3\u0318\3\u0318\3\u0318\3\u0318\3\u0319\3\u0319\3\u0319\3\u0319\3\u0319"+ + "\3\u0319\3\u0319\3\u0319\3\u0319\3\u031a\3\u031a\3\u031a\3\u031a\3\u031a"+ + "\3\u031a\3\u031a\3\u031a\3\u031b\3\u031b\3\u031b\3\u031b\3\u031b\3\u031b"+ + "\3\u031b\3\u031b\3\u031b\3\u031c\3\u031c\3\u031c\3\u031c\3\u031c\3\u031c"+ + "\3\u031c\3\u031c\3\u031c\3\u031c\3\u031c\3\u031c\3\u031d\3\u031d\3\u031d"+ + "\3\u031d\3\u031d\3\u031d\3\u031d\3\u031d\3\u031d\3\u031d\3\u031d\3\u031d"+ + "\3\u031d\3\u031d\3\u031e\3\u031e\3\u031e\3\u031e\3\u031f\3\u031f\3\u031f"+ + "\3\u031f\3\u031f\3\u031f\3\u031f\3\u0320\3\u0320\3\u0320\3\u0320\3\u0320"+ + "\3\u0320\3\u0320\3\u0320\3\u0320\3\u0320\3\u0320\3\u0321\3\u0321\3\u0321"+ + "\3\u0321\3\u0321\3\u0321\3\u0321\3\u0321\3\u0321\3\u0321\3\u0321\3\u0322"+ + "\3\u0322\3\u0322\3\u0322\3\u0322\3\u0322\3\u0322\3\u0322\3\u0322\3\u0322"+ + "\3\u0323\3\u0323\3\u0323\3\u0323\3\u0323\3\u0323\3\u0323\3\u0323\3\u0323"+ + "\3\u0323\3\u0324\3\u0324\3\u0324\3\u0324\3\u0324\3\u0324\3\u0325\3\u0325"+ + "\3\u0325\3\u0325\3\u0325\3\u0325\3\u0325\3\u0325\3\u0325\3\u0325\3\u0325"+ + "\3\u0325\3\u0325\3\u0325\3\u0326\3\u0326\3\u0326\3\u0326\3\u0326\3\u0326"+ + "\3\u0326\3\u0326\3\u0326\3\u0326\3\u0326\3\u0327\3\u0327\3\u0327\3\u0327"+ + "\3\u0327\3\u0327\3\u0327\3\u0327\3\u0327\3\u0328\3\u0328\3\u0328\3\u0328"+ + "\3\u0328\3\u0328\3\u0328\3\u0328\3\u0329\3\u0329\3\u0329\3\u0329\3\u0329"+ + "\3\u0329\3\u0329\3\u032a\3\u032a\3\u032a\3\u032a\3\u032a\3\u032a\3\u032a"+ + "\3\u032a\3\u032a\3\u032b\3\u032b\3\u032b\3\u032b\3\u032b\3\u032b\3\u032b"+ + "\3\u032b\3\u032b\3\u032b\3\u032b\3\u032b\3\u032b\3\u032c\3\u032c\3\u032c"+ + "\3\u032c\3\u032c\3\u032c\3\u032c\3\u032c\3\u032d\3\u032d\3\u032d\3\u032d"+ + "\3\u032d\3\u032d\3\u032d\3\u032d\3\u032d\3\u032d\3\u032d\3\u032d\3\u032d"+ + "\3\u032d\3\u032d\3\u032e\3\u032e\3\u032e\3\u032e\3\u032e\3\u032e\3\u032e"+ + "\3\u032e\3\u032e\3\u032e\3\u032e\3\u032e\3\u032e\3\u032e\3\u032e\3\u032f"+ + "\3\u032f\3\u032f\3\u032f\3\u032f\3\u032f\3\u032f\3\u032f\3\u0330\3\u0330"+ + "\3\u0330\3\u0330\3\u0330\3\u0330\3\u0330\3\u0330\3\u0330\3\u0330\3\u0330"+ + "\3\u0330\3\u0330\3\u0331\3\u0331\3\u0331\3\u0331\3\u0331\3\u0331\3\u0331"+ + "\3\u0331\3\u0331\3\u0331\3\u0331\3\u0331\3\u0331\3\u0331\3\u0331\3\u0332"+ + "\3\u0332\3\u0332\3\u0332\3\u0332\3\u0332\3\u0333\3\u0333\3\u0333\3\u0333"+ + "\3\u0333\3\u0333\3\u0334\3\u0334\3\u0334\3\u0334\3\u0334\3\u0334\3\u0334"+ + "\3\u0335\3\u0335\3\u0335\3\u0335\3\u0335\3\u0335\3\u0335\3\u0335\3\u0335"+ + "\3\u0335\3\u0335\3\u0335\3\u0335\3\u0336\3\u0336\3\u0336\3\u0336\3\u0336"+ + "\3\u0336\3\u0336\3\u0336\3\u0336\3\u0336\3\u0336\3\u0336\3\u0337\3\u0337"+ + "\3\u0337\3\u0337\3\u0337\3\u0337\3\u0337\3\u0337\3\u0337\3\u0337\3\u0337"+ + "\3\u0337\3\u0337\3\u0337\3\u0337\3\u0337\3\u0337\3\u0337\3\u0337\3\u0338"+ + "\3\u0338\3\u0338\3\u0338\3\u0338\3\u0338\3\u0338\3\u0338\3\u0338\3\u0338"+ + "\3\u0338\3\u0338\3\u0338\3\u0338\3\u0338\3\u0338\3\u0338\3\u0338\3\u0339"+ + "\3\u0339\3\u0339\3\u033a\3\u033a\3\u033a\3\u033a\3\u033a\3\u033a\3\u033a"+ + "\3\u033a\3\u033a\3\u033a\3\u033b\3\u033b\3\u033b\3\u033b\3\u033b\3\u033b"+ + "\3\u033b\3\u033c\3\u033c\3\u033c\3\u033c\3\u033d\3\u033d\3\u033d\3\u033d"+ + "\3\u033d\3\u033d\3\u033e\3\u033e\3\u033e\3\u033e\3\u033e\3\u033f\3\u033f"+ + "\3\u033f\3\u033f\3\u033f\3\u033f\3\u0340\3\u0340\3\u0340\3\u0340\3\u0340"+ + "\3\u0341\3\u0341\3\u0341\3\u0341\3\u0341\3\u0341\3\u0342\3\u0342\3\u0342"+ + "\3\u0342\3\u0342\3\u0342\3\u0342\3\u0342\3\u0342\3\u0343\3\u0343\3\u0343"+ + "\3\u0343\3\u0343\3\u0343\3\u0343\3\u0343\3\u0343\3\u0344\3\u0344\3\u0344"+ + "\3\u0344\3\u0344\3\u0344\3\u0344\3\u0344\3\u0344\3\u0345\3\u0345\3\u0345"+ + "\3\u0345\3\u0345\3\u0345\3\u0345\3\u0345\3\u0345\3\u0345\3\u0345\3\u0345"+ + "\3\u0345\3\u0345\3\u0345\3\u0345\3\u0346\3\u0346\3\u0346\3\u0346\3\u0346"+ + "\3\u0346\3\u0346\3\u0346\3\u0346\3\u0346\3\u0346\3\u0346\3\u0347\3\u0347"+ + "\3\u0347\3\u0347\3\u0347\3\u0347\3\u0347\3\u0347\3\u0347\3\u0347\3\u0347"+ + "\3\u0347\3\u0348\3\u0348\3\u0348\3\u0348\3\u0348\3\u0348\3\u0348\3\u0348"+ + "\3\u0348\3\u0349\3\u0349\3\u0349\3\u0349\3\u0349\3\u0349\3\u0349\3\u0349"+ + "\3\u0349\3\u0349\3\u0349\3\u0349\3\u0349\3\u0349\3\u034a\3\u034a\3\u034a"+ + "\3\u034a\3\u034a\3\u034a\3\u034a\3\u034a\3\u034a\3\u034a\3\u034a\3\u034a"+ + "\3\u034b\3\u034b\3\u034b\3\u034b\3\u034b\3\u034b\3\u034b\3\u034b\3\u034b"+ + "\3\u034b\3\u034b\3\u034c\3\u034c\3\u034c\3\u034c\3\u034c\3\u034c\3\u034c"+ + "\3\u034c\3\u034c\3\u034c\3\u034d\3\u034d\3\u034d\3\u034d\3\u034e\3\u034e"+ + "\3\u034e\3\u034e\3\u034e\3\u034e\3\u034e\3\u034e\3\u034e\3\u034e\3\u034e"+ + "\3\u034e\3\u034e\3\u034e\3\u034f\3\u034f\3\u034f\3\u034f\3\u034f\3\u034f"+ + "\3\u034f\3\u034f\3\u034f\3\u034f\3\u034f\3\u034f\3\u034f\3\u0350\3\u0350"+ + "\3\u0350\3\u0350\3\u0350\3\u0350\3\u0350\3\u0350\3\u0350\3\u0350\3\u0351"+ + "\3\u0351\3\u0351\3\u0351\3\u0351\3\u0351\3\u0351\3\u0351\3\u0351\3\u0351"+ + "\3\u0351\3\u0351\3\u0351\3\u0351\3\u0351\3\u0352\3\u0352\3\u0352\3\u0352"+ + "\3\u0352\3\u0352\3\u0352\3\u0352\3\u0352\3\u0352\3\u0352\3\u0352\3\u0352"+ + "\3\u0352\3\u0353\3\u0353\3\u0353\3\u0353\3\u0353\3\u0353\3\u0353\3\u0353"+ + "\3\u0353\3\u0353\3\u0353\3\u0353\3\u0353\3\u0353\3\u0354\3\u0354\3\u0354"+ + "\3\u0354\3\u0354\3\u0354\3\u0354\3\u0354\3\u0354\3\u0354\3\u0354\3\u0354"+ + "\3\u0354\3\u0355\3\u0355\3\u0355\3\u0355\3\u0355\3\u0355\3\u0355\3\u0355"+ + "\3\u0355\3\u0355\3\u0355\3\u0355\3\u0355\3\u0355\3\u0355\3\u0355\3\u0355"+ + "\3\u0355\3\u0355\3\u0355\3\u0355\3\u0355\3\u0355\3\u0355\3\u0356\3\u0356"+ + "\3\u0356\3\u0356\3\u0356\3\u0356\3\u0356\3\u0356\3\u0356\3\u0356\3\u0356"+ + "\3\u0356\3\u0356\3\u0356\3\u0356\3\u0356\3\u0356\3\u0356\3\u0356\3\u0356"+ + "\3\u0356\3\u0356\3\u0356\3\u0357\3\u0357\3\u0357\3\u0357\3\u0357\3\u0357"+ + "\3\u0357\3\u0357\3\u0357\3\u0357\3\u0357\3\u0357\3\u0357\3\u0357\3\u0357"+ + "\3\u0357\3\u0357\3\u0357\3\u0357\3\u0358\3\u0358\3\u0358\3\u0358\3\u0358"+ + "\3\u0358\3\u0358\3\u0358\3\u0358\3\u0358\3\u0358\3\u0358\3\u0358\3\u0358"+ + "\3\u0358\3\u0358\3\u0358\3\u0358\3\u0359\3\u0359\3\u0359\3\u0359\3\u0359"+ + "\3\u0359\3\u0359\3\u0359\3\u0359\3\u0359\3\u0359\3\u0359\3\u0359\3\u0359"+ + "\3\u0359\3\u0359\3\u0359\3\u0359\3\u0359\3\u0359\3\u0359\3\u035a\3\u035a"+ + "\3\u035a\3\u035a\3\u035a\3\u035a\3\u035a\3\u035a\3\u035a\3\u035a\3\u035a"+ + "\3\u035a\3\u035a\3\u035a\3\u035a\3\u035a\3\u035a\3\u035a\3\u035a\3\u035a"+ + "\3\u035b\3\u035b\3\u035b\3\u035b\3\u035b\3\u035b\3\u035b\3\u035b\3\u035b"+ + "\3\u035b\3\u035b\3\u035c\3\u035c\3\u035c\3\u035c\3\u035c\3\u035c\3\u035c"+ + "\3\u035d\3\u035d\3\u035d\3\u035d\3\u035d\3\u035d\3\u035d\3\u035d\3\u035d"+ + "\3\u035d\3\u035d\3\u035d\3\u035d\3\u035d\3\u035e\3\u035e\3\u035e\3\u035e"+ + "\3\u035e\3\u035e\3\u035e\3\u035e\3\u035e\3\u035e\3\u035e\3\u035e\3\u035e"+ + "\3\u035e\3\u035e\3\u035e\3\u035e\3\u035f\3\u035f\3\u035f\3\u035f\3\u035f"+ + "\3\u035f\3\u035f\3\u035f\3\u035f\3\u035f\3\u0360\3\u0360\3\u0360\3\u0360"+ + "\3\u0361\3\u0361\3\u0361\3\u0361\3\u0361\3\u0361\3\u0361\3\u0361\3\u0361"+ + "\3\u0361\3\u0361\3\u0361\3\u0361\3\u0362\3\u0362\3\u0362\3\u0362\3\u0363"+ + "\3\u0363\3\u0363\3\u0363\3\u0363\3\u0363\3\u0363\3\u0363\3\u0363\3\u0364"+ + "\3\u0364\3\u0364\3\u0364\3\u0364\3\u0364\3\u0364\3\u0364\3\u0364\3\u0364"+ + "\3\u0364\3\u0365\3\u0365\3\u0365\3\u0365\3\u0365\3\u0365\3\u0365\3\u0365"+ + "\3\u0365\3\u0365\3\u0365\3\u0365\3\u0366\3\u0366\3\u0366\3\u0367\3\u0367"+ + "\3\u0367\3\u0367\3\u0367\3\u0367\3\u0367\3\u0367\3\u0367\3\u0367\3\u0367"+ + "\3\u0367\3\u0367\3\u0367\3\u0368\3\u0368\3\u0368\3\u0368\3\u0368\3\u0368"+ + "\3\u0368\3\u0368\3\u0368\3\u0368\3\u0368\3\u0368\3\u0368\3\u0369\3\u0369"+ + "\3\u0369\3\u0369\3\u0369\3\u0369\3\u0369\3\u036a\3\u036a\3\u036a\3\u036a"+ + "\3\u036a\3\u036a\3\u036a\3\u036a\3\u036a\3\u036a\3\u036a\3\u036a\3\u036a"+ + "\3\u036b\3\u036b\3\u036b\3\u036b\3\u036b\3\u036b\3\u036b\3\u036b\3\u036b"+ + "\3\u036b\3\u036b\3\u036b\3\u036c\3\u036c\3\u036c\3\u036c\3\u036c\3\u036c"+ + "\3\u036c\3\u036c\3\u036c\3\u036c\3\u036c\3\u036c\3\u036c\3\u036c\3\u036c"+ + "\3\u036c\3\u036d\3\u036d\3\u036d\3\u036d\3\u036d\3\u036d\3\u036d\3\u036d"+ + "\3\u036d\3\u036d\3\u036d\3\u036d\3\u036d\3\u036d\3\u036d\3\u036e\3\u036e"+ + "\3\u036e\3\u036e\3\u036f\3\u036f\3\u036f\3\u036f\3\u036f\3\u036f\3\u0370"+ + "\3\u0370\3\u0370\3\u0370\3\u0370\3\u0370\3\u0371\3\u0371\3\u0371\3\u0371"+ + "\3\u0371\3\u0371\3\u0371\3\u0371\3\u0372\3\u0372\3\u0372\3\u0372\3\u0372"+ + "\3\u0373\3\u0373\3\u0373\3\u0373\3\u0373\3\u0373\3\u0373\3\u0373\3\u0373"+ + "\3\u0373\3\u0373\3\u0373\3\u0373\3\u0374\3\u0374\3\u0374\3\u0374\3\u0374"+ + "\3\u0374\3\u0374\3\u0374\3\u0374\3\u0374\3\u0374\3\u0374\3\u0374\3\u0375"+ + "\3\u0375\3\u0375\3\u0375\3\u0375\3\u0375\3\u0375\3\u0375\3\u0376\3\u0376"+ + "\3\u0376\3\u0376\3\u0376\3\u0376\3\u0377\3\u0377\3\u0377\3\u0377\3\u0377"+ + "\3\u0377\3\u0377\3\u0377\3\u0377\3\u0377\3\u0378\3\u0378\3\u0378\3\u0378"+ + "\3\u0378\3\u0379\3\u0379\3\u0379\3\u0379\3\u0379\3\u0379\3\u037a\3\u037a"+ + "\3\u037a\3\u037a\3\u037a\3\u037a\3\u037a\3\u037a\3\u037a\3\u037a\3\u037a"+ + "\3\u037a\3\u037b\3\u037b\3\u037b\3\u037b\3\u037b\3\u037b\3\u037b\3\u037b"+ + "\3\u037b\3\u037b\3\u037b\3\u037b\3\u037b\3\u037c\3\u037c\3\u037c\3\u037c"+ + "\3\u037d\3\u037d\3\u037d\3\u037d\3\u037d\3\u037e\3\u037e\3\u037e\3\u037e"+ + "\3\u037e\3\u037f\3\u037f\3\u037f\3\u037f\3\u037f\3\u037f\3\u037f\3\u037f"+ + "\3\u037f\3\u037f\3\u037f\3\u037f\3\u0380\3\u0380\3\u0380\3\u0380\3\u0380"+ + "\3\u0381\3\u0381\3\u0381\3\u0381\3\u0382\3\u0382\3\u0382\3\u0382\3\u0382"+ + "\3\u0382\3\u0383\3\u0383\3\u0383\3\u0383\3\u0383\3\u0383\3\u0383\3\u0383"+ + "\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384"+ + "\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384"+ + "\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384\3\u0384"+ + "\3\u0384\3\u0385\3\u0385\3\u0385\3\u0385\3\u0385\3\u0386\3\u0386\3\u0386"+ + "\3\u0386\3\u0386\3\u0387\3\u0387\3\u0387\3\u0387\3\u0387\3\u0387\3\u0387"+ + "\3\u0387\3\u0387\3\u0387\3\u0387\3\u0388\3\u0388\3\u0388\3\u0388\3\u0388"+ + "\3\u0388\3\u0388\3\u0389\3\u0389\3\u0389\3\u0389\3\u0389\3\u0389\3\u0389"+ + "\3\u0389\3\u0389\3\u0389\3\u0389\3\u0389\3\u038a\3\u038a\3\u038a\3\u038a"+ + "\3\u038a\3\u038a\3\u038a\3\u038a\3\u038b\3\u038b\3\u038b\3\u038b\3\u038b"+ + "\3\u038b\3\u038b\3\u038b\3\u038b\3\u038b\3\u038b\3\u038b\3\u038c\3\u038c"+ + "\3\u038c\3\u038c\3\u038c\3\u038c\3\u038c\3\u038c\3\u038c\3\u038c\3\u038d"+ + "\3\u038d\3\u038d\3\u038d\3\u038d\3\u038d\3\u038d\3\u038d\3\u038d\3\u038e"+ + "\3\u038e\3\u038e\3\u038e\3\u038e\3\u038e\3\u038e\3\u038e\3\u038e\3\u038f"+ + "\3\u038f\3\u038f\3\u038f\3\u038f\3\u038f\3\u038f\3\u038f\3\u038f\3\u038f"+ + "\3\u0390\3\u0390\3\u0390\3\u0390\3\u0390\3\u0390\3\u0390\3\u0390\3\u0390"+ + "\3\u0390\3\u0390\3\u0390\3\u0391\3\u0391\3\u0391\3\u0391\3\u0391\3\u0391"+ + "\3\u0391\3\u0391\3\u0391\3\u0391\3\u0391\3\u0391\3\u0392\3\u0392\3\u0392"+ + "\3\u0392\3\u0392\3\u0392\3\u0392\3\u0392\3\u0392\3\u0392\3\u0392\3\u0393"+ + "\3\u0393\3\u0393\3\u0393\3\u0393\3\u0393\3\u0393\3\u0393\3\u0393\3\u0393"+ + "\3\u0393\3\u0393\3\u0393\3\u0393\3\u0394\3\u0394\3\u0394\3\u0394\3\u0394"+ + "\3\u0394\3\u0394\3\u0394\3\u0394\3\u0394\3\u0394\3\u0394\3\u0394\3\u0395"+ + "\3\u0395\3\u0395\3\u0395\3\u0395\3\u0395\3\u0395\3\u0395\3\u0395\3\u0395"+ + "\3\u0395\3\u0395\3\u0396\3\u0396\3\u0396\3\u0396\3\u0396\3\u0396\3\u0396"+ + "\3\u0396\3\u0396\3\u0396\3\u0396\3\u0396\3\u0397\3\u0397\3\u0397\3\u0397"+ + "\3\u0397\3\u0397\3\u0397\3\u0397\3\u0397\3\u0397\3\u0397\3\u0397\3\u0398"+ + "\3\u0398\3\u0398\3\u0398\3\u0398\3\u0398\3\u0398\3\u0398\3\u0398\3\u0398"+ + "\3\u0398\3\u0398\3\u0399\3\u0399\3\u0399\3\u0399\3\u0399\3\u0399\3\u0399"+ + "\3\u0399\3\u0399\3\u0399\3\u039a\3\u039a\3\u039a\3\u039a\3\u039a\3\u039a"+ + "\3\u039a\3\u039a\3\u039a\3\u039a\3\u039a\3\u039a\3\u039a\3\u039a\3\u039a"+ + "\3\u039a\3\u039b\3\u039b\3\u039b\3\u039b\3\u039b\3\u039b\3\u039b\3\u039b"+ + "\3\u039b\3\u039b\3\u039b\3\u039b\3\u039b\3\u039b\3\u039b\3\u039b\3\u039b"+ + "\3\u039b\3\u039b\3\u039b\3\u039c\3\u039c\3\u039c\3\u039c\3\u039c\3\u039c"+ + "\3\u039c\3\u039c\3\u039c\3\u039c\3\u039c\3\u039c\3\u039c\3\u039c\3\u039c"+ + "\3\u039c\3\u039c\3\u039c\3\u039c\3\u039d\3\u039d\3\u039d\3\u039d\3\u039d"+ + "\3\u039d\3\u039d\3\u039d\3\u039d\3\u039d\3\u039d\3\u039d\3\u039d\3\u039d"+ + "\3\u039d\3\u039d\3\u039d\3\u039d\3\u039d\3\u039e\3\u039e\3\u039e\3\u039e"+ + "\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e"+ + "\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e"+ + "\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e\3\u039e\3\u039f"+ + "\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f"+ + "\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f"+ + "\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f\3\u039f"+ + "\3\u039f\3\u03a0\3\u03a0\3\u03a0\3\u03a0\3\u03a0\3\u03a0\3\u03a0\3\u03a0"+ + "\3\u03a0\3\u03a0\3\u03a0\3"; + private static final String _serializedATNSegment1 = + "\u03a0\3\u03a0\3\u03a0\3\u03a0\3\u03a0\3\u03a0\3\u03a0\3\u03a0\3\u03a0"+ + "\3\u03a1\3\u03a1\3\u03a1\3\u03a1\3\u03a1\3\u03a1\3\u03a1\3\u03a1\3\u03a1"+ + "\3\u03a1\3\u03a1\3\u03a1\3\u03a1\3\u03a1\3\u03a1\3\u03a1\3\u03a1\3\u03a1"+ + "\3\u03a1\3\u03a2\3\u03a2\3\u03a2\3\u03a2\3\u03a2\3\u03a2\3\u03a2\3\u03a2"+ + "\3\u03a2\3\u03a2\3\u03a2\3\u03a2\3\u03a2\3\u03a3\3\u03a3\3\u03a3\3\u03a3"+ + "\3\u03a3\3\u03a3\3\u03a3\3\u03a3\3\u03a3\3\u03a3\3\u03a3\3\u03a3\3\u03a3"+ + "\3\u03a3\3\u03a3\3\u03a3\3\u03a4\3\u03a4\3\u03a4\3\u03a4\3\u03a4\3\u03a4"+ + "\3\u03a4\3\u03a4\3\u03a4\3\u03a4\3\u03a4\3\u03a4\3\u03a4\3\u03a4\3\u03a4"+ + "\3\u03a4\3\u03a5\3\u03a5\3\u03a5\3\u03a5\3\u03a5\3\u03a5\3\u03a5\3\u03a5"+ + "\3\u03a5\3\u03a5\3\u03a5\3\u03a5\3\u03a5\3\u03a5\3\u03a5\3\u03a6\3\u03a6"+ + "\3\u03a6\3\u03a6\3\u03a6\3\u03a6\3\u03a6\3\u03a6\3\u03a6\3\u03a6\3\u03a6"+ + "\3\u03a6\3\u03a6\3\u03a6\3\u03a6\3\u03a6\3\u03a6\3\u03a7\3\u03a7\3\u03a7"+ + "\3\u03a7\3\u03a7\3\u03a7\3\u03a7\3\u03a7\3\u03a7\3\u03a7\3\u03a7\3\u03a7"+ + "\3\u03a7\3\u03a7\3\u03a7\3\u03a7\3\u03a8\3\u03a8\3\u03a8\3\u03a8\3\u03a8"+ + "\3\u03a8\3\u03a8\3\u03a8\3\u03a8\3\u03a8\3\u03a8\3\u03a8\3\u03a8\3\u03a8"+ + "\3\u03a9\3\u03a9\3\u03a9\3\u03a9\3\u03a9\3\u03a9\3\u03a9\3\u03a9\3\u03a9"+ + "\3\u03a9\3\u03a9\3\u03a9\3\u03aa\3\u03aa\3\u03aa\3\u03aa\3\u03aa\3\u03aa"+ + "\3\u03aa\3\u03aa\3\u03aa\3\u03aa\3\u03aa\3\u03ab\3\u03ab\3\u03ab\3\u03ab"+ + "\3\u03ab\3\u03ab\3\u03ab\3\u03ab\3\u03ab\3\u03ab\3\u03ab\3\u03ab\3\u03ac"+ + "\3\u03ac\3\u03ac\3\u03ac\3\u03ac\3\u03ac\3\u03ac\3\u03ac\3\u03ac\3\u03ac"+ + "\3\u03ac\3\u03ac\3\u03ac\3\u03ac\3\u03ac\3\u03ac\3\u03ad\3\u03ad\3\u03ad"+ + "\3\u03ad\3\u03ad\3\u03ad\3\u03ad\3\u03ad\3\u03ad\3\u03ad\3\u03ad\3\u03ad"+ + "\3\u03ad\3\u03ad\3\u03ad\3\u03ae\3\u03ae\3\u03ae\3\u03ae\3\u03ae\3\u03ae"+ + "\3\u03ae\3\u03ae\3\u03ae\3\u03ae\3\u03ae\3\u03ae\3\u03ae\3\u03ae\3\u03ae"+ + "\3\u03ae\3\u03ae\3\u03ae\3\u03ae\3\u03ae\3\u03ae\3\u03ae\3\u03af\3\u03af"+ + "\3\u03af\3\u03af\3\u03af\3\u03af\3\u03af\3\u03af\3\u03af\3\u03af\3\u03af"+ + "\3\u03af\3\u03af\3\u03af\3\u03af\3\u03af\3\u03af\3\u03af\3\u03af\3\u03af"+ + "\3\u03af\3\u03b0\3\u03b0\3\u03b0\3\u03b0\3\u03b0\3\u03b0\3\u03b0\3\u03b0"+ + "\3\u03b0\3\u03b0\3\u03b0\3\u03b0\3\u03b0\3\u03b0\3\u03b0\3\u03b0\3\u03b0"+ + "\3\u03b1\3\u03b1\3\u03b1\3\u03b1\3\u03b1\3\u03b1\3\u03b1\3\u03b1\3\u03b1"+ + "\3\u03b1\3\u03b1\3\u03b1\3\u03b1\3\u03b1\3\u03b1\3\u03b1\3\u03b1\3\u03b1"+ + "\3\u03b1\3\u03b2\3\u03b2\3\u03b2\3\u03b2\3\u03b2\3\u03b2\3\u03b2\3\u03b2"+ + "\3\u03b2\3\u03b2\3\u03b2\3\u03b2\3\u03b2\3\u03b2\3\u03b2\3\u03b2\3\u03b2"+ + "\3\u03b2\3\u03b2\3\u03b2\3\u03b3\3\u03b3\3\u03b3\3\u03b3\3\u03b3\3\u03b3"+ + "\3\u03b3\3\u03b3\3\u03b3\3\u03b3\3\u03b3\3\u03b3\3\u03b3\3\u03b4\3\u03b4"+ + "\3\u03b4\3\u03b4\3\u03b4\3\u03b4\3\u03b4\3\u03b4\3\u03b4\3\u03b4\3\u03b4"+ + "\3\u03b4\3\u03b5\3\u03b5\3\u03b5\3\u03b5\3\u03b5\3\u03b5\3\u03b5\3\u03b5"+ + "\3\u03b5\3\u03b5\3\u03b5\3\u03b5\3\u03b5\3\u03b5\3\u03b5\3\u03b5\3\u03b5"+ + "\3\u03b6\3\u03b6\3\u03b6\3\u03b6\3\u03b6\3\u03b6\3\u03b6\3\u03b6\3\u03b6"+ + "\3\u03b6\3\u03b6\3\u03b6\3\u03b6\3\u03b6\3\u03b6\3\u03b6\3\u03b7\3\u03b7"+ + "\3\u03b7\3\u03b7\3\u03b7\3\u03b7\3\u03b7\3\u03b7\3\u03b7\3\u03b7\3\u03b8"+ + "\3\u03b8\3\u03b8\3\u03b8\3\u03b8\3\u03b8\3\u03b8\3\u03b8\3\u03b8\3\u03b8"+ + "\3\u03b8\3\u03b8\3\u03b8\3\u03b8\3\u03b8\3\u03b8\3\u03b9\3\u03b9\3\u03b9"+ + "\3\u03b9\3\u03b9\3\u03b9\3\u03b9\3\u03b9\3\u03b9\3\u03b9\3\u03b9\3\u03b9"+ + "\3\u03b9\3\u03b9\3\u03b9\3\u03ba\3\u03ba\3\u03ba\3\u03ba\3\u03ba\3\u03ba"+ + "\3\u03ba\3\u03ba\3\u03ba\3\u03ba\3\u03ba\3\u03ba\3\u03ba\3\u03ba\3\u03ba"+ + "\3\u03ba\3\u03ba\3\u03ba\3\u03ba\3\u03bb\3\u03bb\3\u03bb\3\u03bb\3\u03bb"+ + "\3\u03bb\3\u03bb\3\u03bb\3\u03bb\3\u03bb\3\u03bb\3\u03bb\3\u03bb\3\u03bb"+ + "\3\u03bb\3\u03bb\3\u03bb\3\u03bb\3\u03bc\3\u03bc\3\u03bc\3\u03bc\3\u03bc"+ + "\3\u03bc\3\u03bc\3\u03bc\3\u03bd\3\u03bd\3\u03bd\3\u03bd\3\u03bd\3\u03bd"+ + "\3\u03bd\3\u03bd\3\u03bd\3\u03bd\3\u03bd\3\u03bd\3\u03bd\3\u03bd\3\u03be"+ + "\3\u03be\3\u03be\3\u03be\3\u03be\3\u03be\3\u03be\3\u03be\3\u03be\3\u03be"+ + "\3\u03be\3\u03be\3\u03be\3\u03be\3\u03be\3\u03be\3\u03be\3\u03bf\3\u03bf"+ + "\3\u03bf\3\u03bf\3\u03bf\3\u03bf\3\u03bf\3\u03bf\3\u03bf\3\u03bf\3\u03bf"+ + "\3\u03c0\3\u03c0\3\u03c0\3\u03c0\3\u03c0\3\u03c0\3\u03c0\3\u03c0\3\u03c0"+ + "\3\u03c1\3\u03c1\3\u03c1\3\u03c1\3\u03c1\3\u03c1\3\u03c1\3\u03c1\3\u03c1"+ + "\3\u03c1\3\u03c2\3\u03c2\3\u03c2\3\u03c2\3\u03c2\3\u03c3\3\u03c3\3\u03c3"+ + "\3\u03c3\3\u03c3\3\u03c4\3\u03c4\3\u03c4\3\u03c4\3\u03c4\3\u03c4\3\u03c4"+ + "\3\u03c4\3\u03c5\3\u03c5\3\u03c5\3\u03c5\3\u03c5\3\u03c5\3\u03c5\3\u03c5"+ + "\3\u03c5\3\u03c5\3\u03c5\3\u03c5\3\u03c5\3\u03c5\3\u03c5\3\u03c5\3\u03c6"+ + "\3\u03c6\3\u03c6\3\u03c6\3\u03c6\3\u03c6\3\u03c6\3\u03c6\3\u03c7\3\u03c7"+ + "\3\u03c7\3\u03c7\3\u03c7\3\u03c7\3\u03c7\3\u03c7\3\u03c7\3\u03c7\3\u03c7"+ + "\3\u03c7\3\u03c8\3\u03c8\3\u03c8\3\u03c8\3\u03c9\3\u03c9\3\u03c9\3\u03c9"+ + "\3\u03c9\3\u03c9\3\u03c9\3\u03c9\3\u03c9\3\u03ca\3\u03ca\3\u03ca\3\u03ca"+ + "\3\u03ca\3\u03ca\3\u03ca\3\u03ca\3\u03ca\3\u03ca\3\u03ca\3\u03ca\3\u03ca"+ + "\3\u03cb\3\u03cb\3\u03cb\3\u03cb\3\u03cb\3\u03cb\3\u03cb\3\u03cb\3\u03cb"+ + "\3\u03cb\3\u03cb\3\u03cb\3\u03cb\3\u03cb\3\u03cc\3\u03cc\3\u03cc\3\u03cc"+ + "\3\u03cc\3\u03cc\3\u03cc\3\u03cc\3\u03cc\3\u03cc\3\u03cc\3\u03cc\3\u03cd"+ + "\3\u03cd\3\u03cd\3\u03cd\3\u03cd\3\u03cd\3\u03cd\3\u03cd\3\u03cd\3\u03cd"+ + "\3\u03cd\3\u03cd\3\u03ce\3\u03ce\3\u03ce\3\u03ce\3\u03ce\3\u03ce\3\u03ce"+ + "\3\u03ce\3\u03cf\3\u03cf\3\u03cf\3\u03cf\3\u03cf\3\u03cf\3\u03cf\3\u03cf"+ + "\3\u03cf\3\u03cf\3\u03d0\3\u03d0\3\u03d0\3\u03d0\3\u03d0\3\u03d0\3\u03d0"+ + "\3\u03d0\3\u03d1\3\u03d1\3\u03d1\3\u03d1\3\u03d1\3\u03d1\3\u03d1\3\u03d1"+ + "\3\u03d1\3\u03d1\3\u03d1\3\u03d2\3\u03d2\3\u03d2\3\u03d2\3\u03d2\3\u03d2"+ + "\3\u03d3\3\u03d3\3\u03d3\3\u03d3\3\u03d3\3\u03d3\3\u03d3\3\u03d3\3\u03d3"+ + "\3\u03d3\3\u03d3\3\u03d4\3\u03d4\3\u03d4\3\u03d4\3\u03d4\3\u03d4\3\u03d4"+ + "\3\u03d4\3\u03d4\3\u03d4\3\u03d4\3\u03d4\3\u03d4\3\u03d4\3\u03d4\3\u03d4"+ + "\3\u03d4\3\u03d4\3\u03d4\3\u03d4\3\u03d5\3\u03d5\3\u03d5\3\u03d5\3\u03d5"+ + "\3\u03d5\3\u03d6\3\u03d6\3\u03d6\3\u03d6\3\u03d6\3\u03d6\3\u03d6\3\u03d6"+ + "\3\u03d6\3\u03d6\3\u03d6\3\u03d6\3\u03d6\3\u03d6\3\u03d6\3\u03d7\3\u03d7"+ + "\3\u03d7\3\u03d7\3\u03d7\3\u03d7\3\u03d7\3\u03d7\3\u03d7\3\u03d7\3\u03d8"+ + "\3\u03d8\3\u03d8\3\u03d8\3\u03d8\3\u03d8\3\u03d9\3\u03d9\3\u03d9\3\u03d9"+ + "\3\u03d9\3\u03da\3\u03da\3\u03da\3\u03da\3\u03da\3\u03da\3\u03da\3\u03da"+ + "\3\u03da\3\u03da\3\u03da\3\u03db\3\u03db\3\u03db\3\u03db\3\u03db\3\u03db"+ + "\3\u03db\3\u03db\3\u03db\3\u03db\3\u03db\3\u03db\3\u03db\3\u03db\3\u03db"+ + "\3\u03db\3\u03db\3\u03db\3\u03db\3\u03db\3\u03db\3\u03db\3\u03db\3\u03db"+ + "\3\u03db\3\u03db\3\u03db\3\u03dc\3\u03dc\3\u03dc\3\u03dc\3\u03dc\3\u03dc"+ + "\3\u03dc\3\u03dc\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd"+ + "\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd"+ + "\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd"+ + "\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd\3\u03dd"+ + "\3\u03de\3\u03de\3\u03de\3\u03de\3\u03de\3\u03de\3\u03de\3\u03de\3\u03df"+ + "\3\u03df\3\u03df\3\u03df\3\u03df\3\u03df\3\u03df\3\u03df\3\u03df\3\u03df"+ + "\3\u03df\3\u03e0\3\u03e0\3\u03e0\3\u03e0\3\u03e0\3\u03e0\3\u03e0\3\u03e0"+ + "\3\u03e0\3\u03e0\3\u03e0\3\u03e0\3\u03e0\3\u03e0\3\u03e1\3\u03e1\3\u03e1"+ + "\3\u03e1\3\u03e1\3\u03e1\3\u03e1\3\u03e2\3\u03e2\3\u03e2\3\u03e2\3\u03e2"+ + "\3\u03e2\3\u03e2\3\u03e2\3\u03e2\3\u03e3\3\u03e3\3\u03e4\3\u03e4\3\u03e5"+ + "\3\u03e5\3\u03e5\3\u03e6\3\u03e6\3\u03e6\3\u03e7\3\u03e7\3\u03e7\3\u03e8"+ + "\3\u03e8\3\u03e8\3\u03e9\3\u03e9\3\u03e9\3\u03ea\3\u03ea\3\u03ea\3\u03eb"+ + "\3\u03eb\3\u03eb\3\u03ec\3\u03ec\3\u03ec\3\u03ed\3\u03ed\3\u03ed\3\u03ee"+ + "\3\u03ee\3\u03ef\3\u03ef\3\u03f0\3\u03f0\3\u03f1\3\u03f1\3\u03f2\3\u03f2"+ + "\3\u03f2\3\u03f3\3\u03f3\3\u03f4\3\u03f4\3\u03f4\3\u03f4\3\u03f5\3\u03f5"+ + "\3\u03f5\3\u03f5\3\u03f6\3\u03f6\3\u03f7\3\u03f7\3\u03f8\3\u03f8\3\u03f9"+ + "\3\u03f9\3\u03fa\3\u03fa\3\u03fb\3\u03fb\3\u03fc\3\u03fc\3\u03fd\3\u03fd"+ + "\3\u03fe\3\u03fe\3\u03ff\3\u03ff\3\u0400\3\u0400\3\u0401\3\u0401\3\u0402"+ + "\3\u0402\3\u0403\3\u0403\3\u0404\3\u0404\3\u0405\3\u0405\3\u0406\3\u0406"+ + "\3\u0407\3\u0407\3\u0408\3\u0408\3\u0409\3\u0409\3\u040a\3\u040a\3\u040b"+ + "\3\u040b\3\u040b\5\u040b\u2e64\n\u040b\3\u040c\3\u040c\3\u040c\3\u040c"+ + "\3\u040d\6\u040d\u2e6b\n\u040d\r\u040d\16\u040d\u2e6c\3\u040d\3\u040d"+ + "\3\u040e\3\u040e\3\u040e\3\u040f\3\u040f\3\u040f\5\u040f\u2e77\n\u040f"+ + "\3\u0410\6\u0410\u2e7a\n\u0410\r\u0410\16\u0410\u2e7b\3\u0411\3\u0411"+ + "\3\u0411\3\u0411\3\u0411\6\u0411\u2e83\n\u0411\r\u0411\16\u0411\u2e84"+ + "\3\u0411\3\u0411\3\u0411\3\u0411\3\u0411\3\u0411\6\u0411\u2e8d\n\u0411"+ + "\r\u0411\16\u0411\u2e8e\5\u0411\u2e91\n\u0411\3\u0412\6\u0412\u2e94\n"+ + "\u0412\r\u0412\16\u0412\u2e95\5\u0412\u2e98\n\u0412\3\u0412\3\u0412\6"+ + "\u0412\u2e9c\n\u0412\r\u0412\16\u0412\u2e9d\3\u0412\6\u0412\u2ea1\n\u0412"+ + "\r\u0412\16\u0412\u2ea2\3\u0412\3\u0412\3\u0412\3\u0412\6\u0412\u2ea9"+ + "\n\u0412\r\u0412\16\u0412\u2eaa\5\u0412\u2ead\n\u0412\3\u0412\3\u0412"+ + "\6\u0412\u2eb1\n\u0412\r\u0412\16\u0412\u2eb2\3\u0412\3\u0412\3\u0412"+ + "\6\u0412\u2eb8\n\u0412\r\u0412\16\u0412\u2eb9\3\u0412\3\u0412\5\u0412"+ + "\u2ebe\n\u0412\3\u0413\3\u0413\3\u0413\3\u0414\3\u0414\3\u0415\3\u0415"+ + "\3\u0415\3\u0416\3\u0416\3\u0416\3\u0417\3\u0417\3\u0418\3\u0418\6\u0418"+ + "\u2ecf\n\u0418\r\u0418\16\u0418\u2ed0\3\u0418\3\u0418\3\u0419\3\u0419"+ + "\3\u0419\3\u0419\5\u0419\u2ed9\n\u0419\3\u0419\3\u0419\3\u0419\3\u0419"+ + "\3\u0419\5\u0419\u2ee0\n\u0419\3\u041a\3\u041a\6\u041a\u2ee4\n\u041a\r"+ + "\u041a\16\u041a\u2ee5\3\u041a\3\u041a\3\u041a\5\u041a\u2eeb\n\u041a\3"+ + "\u041b\3\u041b\3\u041b\6\u041b\u2ef0\n\u041b\r\u041b\16\u041b\u2ef1\3"+ + "\u041b\5\u041b\u2ef5\n\u041b\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3"+ + "\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c"+ + "\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c"+ + "\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c"+ + "\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c\3\u041c"+ + "\5\u041c\u2f20\n\u041c\3\u041d\3\u041d\5\u041d\u2f24\n\u041d\3\u041d\6"+ + "\u041d\u2f27\n\u041d\r\u041d\16\u041d\u2f28\3\u041e\7\u041e\u2f2c\n\u041e"+ + "\f\u041e\16\u041e\u2f2f\13\u041e\3\u041e\6\u041e\u2f32\n\u041e\r\u041e"+ + "\16\u041e\u2f33\3\u041e\7\u041e\u2f37\n\u041e\f\u041e\16\u041e\u2f3a\13"+ + "\u041e\3\u041e\5\u041e\u2f3d\n\u041e\3\u041f\3\u041f\3\u041f\3\u041f\3"+ + "\u041f\3\u041f\7\u041f\u2f45\n\u041f\f\u041f\16\u041f\u2f48\13\u041f\3"+ + "\u041f\3\u041f\5\u041f\u2f4c\n\u041f\3\u0420\3\u0420\3\u0420\3\u0420\3"+ + "\u0420\3\u0420\7\u0420\u2f54\n\u0420\f\u0420\16\u0420\u2f57\13\u0420\3"+ + "\u0420\3\u0420\3\u0421\3\u0421\3\u0421\3\u0421\3\u0421\3\u0421\7\u0421"+ + "\u2f61\n\u0421\f\u0421\16\u0421\u2f64\13\u0421\3\u0421\3\u0421\3\u0422"+ + "\3\u0422\3\u0423\3\u0423\3\u0424\3\u0424\3\u0424\6\u0424\u2f6f\n\u0424"+ + "\r\u0424\16\u0424\u2f70\3\u0424\3\u0424\3\u0425\3\u0425\3\u0425\3\u0425"+ + "\6\u0859\u0866\u2f2d\u2f33\2\u0426\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n"+ + "\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30"+ + "/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.["+ + "/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083"+ + "C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097"+ + "M\u0099N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00ab"+ + "W\u00adX\u00afY\u00b1Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bf"+ + "a\u00c1b\u00c3c\u00c5d\u00c7e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3"+ + "k\u00d5l\u00d7m\u00d9n\u00dbo\u00ddp\u00dfq\u00e1r\u00e3s\u00e5t\u00e7"+ + "u\u00e9v\u00ebw\u00edx\u00efy\u00f1z\u00f3{\u00f5|\u00f7}\u00f9~\u00fb"+ + "\177\u00fd\u0080\u00ff\u0081\u0101\u0082\u0103\u0083\u0105\u0084\u0107"+ + "\u0085\u0109\u0086\u010b\u0087\u010d\u0088\u010f\u0089\u0111\u008a\u0113"+ + "\u008b\u0115\u008c\u0117\u008d\u0119\u008e\u011b\u008f\u011d\u0090\u011f"+ + "\u0091\u0121\u0092\u0123\u0093\u0125\u0094\u0127\u0095\u0129\u0096\u012b"+ + "\u0097\u012d\u0098\u012f\u0099\u0131\u009a\u0133\u009b\u0135\u009c\u0137"+ + "\u009d\u0139\u009e\u013b\u009f\u013d\u00a0\u013f\u00a1\u0141\u00a2\u0143"+ + "\u00a3\u0145\u00a4\u0147\u00a5\u0149\u00a6\u014b\u00a7\u014d\u00a8\u014f"+ + "\u00a9\u0151\u00aa\u0153\u00ab\u0155\u00ac\u0157\u00ad\u0159\u00ae\u015b"+ + "\u00af\u015d\u00b0\u015f\u00b1\u0161\u00b2\u0163\u00b3\u0165\u00b4\u0167"+ + "\u00b5\u0169\u00b6\u016b\u00b7\u016d\u00b8\u016f\u00b9\u0171\u00ba\u0173"+ + "\u00bb\u0175\u00bc\u0177\u00bd\u0179\u00be\u017b\u00bf\u017d\u00c0\u017f"+ + "\u00c1\u0181\u00c2\u0183\u00c3\u0185\u00c4\u0187\u00c5\u0189\u00c6\u018b"+ + "\u00c7\u018d\u00c8\u018f\u00c9\u0191\u00ca\u0193\u00cb\u0195\u00cc\u0197"+ + "\u00cd\u0199\u00ce\u019b\u00cf\u019d\u00d0\u019f\u00d1\u01a1\u00d2\u01a3"+ + "\u00d3\u01a5\u00d4\u01a7\u00d5\u01a9\u00d6\u01ab\u00d7\u01ad\u00d8\u01af"+ + "\u00d9\u01b1\u00da\u01b3\u00db\u01b5\u00dc\u01b7\u00dd\u01b9\u00de\u01bb"+ + "\u00df\u01bd\u00e0\u01bf\u00e1\u01c1\u00e2\u01c3\u00e3\u01c5\u00e4\u01c7"+ + "\u00e5\u01c9\u00e6\u01cb\u00e7\u01cd\u00e8\u01cf\u00e9\u01d1\u00ea\u01d3"+ + "\u00eb\u01d5\u00ec\u01d7\u00ed\u01d9\u00ee\u01db\u00ef\u01dd\u00f0\u01df"+ + "\u00f1\u01e1\u00f2\u01e3\u00f3\u01e5\u00f4\u01e7\u00f5\u01e9\u00f6\u01eb"+ + "\u00f7\u01ed\u00f8\u01ef\u00f9\u01f1\u00fa\u01f3\u00fb\u01f5\u00fc\u01f7"+ + "\u00fd\u01f9\u00fe\u01fb\u00ff\u01fd\u0100\u01ff\u0101\u0201\u0102\u0203"+ + "\u0103\u0205\u0104\u0207\u0105\u0209\u0106\u020b\u0107\u020d\u0108\u020f"+ + "\u0109\u0211\u010a\u0213\u010b\u0215\u010c\u0217\u010d\u0219\u010e\u021b"+ + "\u010f\u021d\u0110\u021f\u0111\u0221\u0112\u0223\u0113\u0225\u0114\u0227"+ + "\u0115\u0229\u0116\u022b\u0117\u022d\u0118\u022f\u0119\u0231\u011a\u0233"+ + "\u011b\u0235\u011c\u0237\u011d\u0239\u011e\u023b\u011f\u023d\u0120\u023f"+ + "\u0121\u0241\u0122\u0243\u0123\u0245\u0124\u0247\u0125\u0249\u0126\u024b"+ + "\u0127\u024d\u0128\u024f\u0129\u0251\u012a\u0253\u012b\u0255\u012c\u0257"+ + "\u012d\u0259\u012e\u025b\u012f\u025d\u0130\u025f\u0131\u0261\u0132\u0263"+ + "\u0133\u0265\u0134\u0267\u0135\u0269\u0136\u026b\u0137\u026d\u0138\u026f"+ + "\u0139\u0271\u013a\u0273\u013b\u0275\u013c\u0277\u013d\u0279\u013e\u027b"+ + "\u013f\u027d\u0140\u027f\u0141\u0281\u0142\u0283\u0143\u0285\u0144\u0287"+ + "\u0145\u0289\u0146\u028b\u0147\u028d\u0148\u028f\u0149\u0291\u014a\u0293"+ + "\u014b\u0295\u014c\u0297\u014d\u0299\u014e\u029b\u014f\u029d\u0150\u029f"+ + "\u0151\u02a1\u0152\u02a3\u0153\u02a5\u0154\u02a7\u0155\u02a9\u0156\u02ab"+ + "\u0157\u02ad\u0158\u02af\u0159\u02b1\u015a\u02b3\u015b\u02b5\u015c\u02b7"+ + "\u015d\u02b9\u015e\u02bb\u015f\u02bd\u0160\u02bf\u0161\u02c1\u0162\u02c3"+ + "\u0163\u02c5\u0164\u02c7\u0165\u02c9\u0166\u02cb\u0167\u02cd\u0168\u02cf"+ + "\u0169\u02d1\u016a\u02d3\u016b\u02d5\u016c\u02d7\u016d\u02d9\u016e\u02db"+ + "\u016f\u02dd\u0170\u02df\u0171\u02e1\u0172\u02e3\u0173\u02e5\u0174\u02e7"+ + "\u0175\u02e9\u0176\u02eb\u0177\u02ed\u0178\u02ef\u0179\u02f1\u017a\u02f3"+ + "\u017b\u02f5\u017c\u02f7\u017d\u02f9\u017e\u02fb\u017f\u02fd\u0180\u02ff"+ + "\u0181\u0301\u0182\u0303\u0183\u0305\u0184\u0307\u0185\u0309\u0186\u030b"+ + "\u0187\u030d\u0188\u030f\u0189\u0311\u018a\u0313\u018b\u0315\u018c\u0317"+ + "\u018d\u0319\u018e\u031b\u018f\u031d\u0190\u031f\u0191\u0321\u0192\u0323"+ + "\u0193\u0325\u0194\u0327\u0195\u0329\u0196\u032b\u0197\u032d\u0198\u032f"+ + "\u0199\u0331\u019a\u0333\u019b\u0335\u019c\u0337\u019d\u0339\u019e\u033b"+ + "\u019f\u033d\u01a0\u033f\u01a1\u0341\u01a2\u0343\u01a3\u0345\u01a4\u0347"+ + "\u01a5\u0349\u01a6\u034b\u01a7\u034d\u01a8\u034f\u01a9\u0351\u01aa\u0353"+ + "\u01ab\u0355\u01ac\u0357\u01ad\u0359\u01ae\u035b\u01af\u035d\u01b0\u035f"+ + "\u01b1\u0361\u01b2\u0363\u01b3\u0365\u01b4\u0367\u01b5\u0369\u01b6\u036b"+ + "\u01b7\u036d\u01b8\u036f\u01b9\u0371\u01ba\u0373\u01bb\u0375\u01bc\u0377"+ + "\u01bd\u0379\u01be\u037b\u01bf\u037d\u01c0\u037f\u01c1\u0381\u01c2\u0383"+ + "\u01c3\u0385\u01c4\u0387\u01c5\u0389\u01c6\u038b\u01c7\u038d\u01c8\u038f"+ + "\u01c9\u0391\u01ca\u0393\u01cb\u0395\u01cc\u0397\u01cd\u0399\u01ce\u039b"+ + "\u01cf\u039d\u01d0\u039f\u01d1\u03a1\u01d2\u03a3\u01d3\u03a5\u01d4\u03a7"+ + "\u01d5\u03a9\u01d6\u03ab\u01d7\u03ad\u01d8\u03af\u01d9\u03b1\u01da\u03b3"+ + "\u01db\u03b5\u01dc\u03b7\u01dd\u03b9\u01de\u03bb\u01df\u03bd\u01e0\u03bf"+ + "\u01e1\u03c1\u01e2\u03c3\u01e3\u03c5\u01e4\u03c7\u01e5\u03c9\u01e6\u03cb"+ + "\u01e7\u03cd\u01e8\u03cf\u01e9\u03d1\u01ea\u03d3\u01eb\u03d5\u01ec\u03d7"+ + "\u01ed\u03d9\u01ee\u03db\u01ef\u03dd\u01f0\u03df\u01f1\u03e1\u01f2\u03e3"+ + "\u01f3\u03e5\u01f4\u03e7\u01f5\u03e9\u01f6\u03eb\u01f7\u03ed\u01f8\u03ef"+ + "\u01f9\u03f1\u01fa\u03f3\u01fb\u03f5\u01fc\u03f7\u01fd\u03f9\u01fe\u03fb"+ + "\u01ff\u03fd\u0200\u03ff\u0201\u0401\u0202\u0403\u0203\u0405\u0204\u0407"+ + "\u0205\u0409\u0206\u040b\u0207\u040d\u0208\u040f\u0209\u0411\u020a\u0413"+ + "\u020b\u0415\u020c\u0417\u020d\u0419\u020e\u041b\u020f\u041d\u0210\u041f"+ + "\u0211\u0421\u0212\u0423\u0213\u0425\u0214\u0427\u0215\u0429\u0216\u042b"+ + "\u0217\u042d\u0218\u042f\u0219\u0431\u021a\u0433\u021b\u0435\u021c\u0437"+ + "\u021d\u0439\u021e\u043b\u021f\u043d\u0220\u043f\u0221\u0441\u0222\u0443"+ + "\u0223\u0445\u0224\u0447\u0225\u0449\u0226\u044b\u0227\u044d\u0228\u044f"+ + "\u0229\u0451\u022a\u0453\u022b\u0455\u022c\u0457\u022d\u0459\u022e\u045b"+ + "\u022f\u045d\u0230\u045f\u0231\u0461\u0232\u0463\u0233\u0465\u0234\u0467"+ + "\u0235\u0469\u0236\u046b\u0237\u046d\u0238\u046f\u0239\u0471\u023a\u0473"+ + "\u023b\u0475\u023c\u0477\u023d\u0479\u023e\u047b\u023f\u047d\u0240\u047f"+ + "\u0241\u0481\u0242\u0483\u0243\u0485\u0244\u0487\u0245\u0489\u0246\u048b"+ + "\u0247\u048d\u0248\u048f\u0249\u0491\u024a\u0493\u024b\u0495\u024c\u0497"+ + "\u024d\u0499\u024e\u049b\u024f\u049d\u0250\u049f\u0251\u04a1\u0252\u04a3"+ + "\u0253\u04a5\u0254\u04a7\u0255\u04a9\u0256\u04ab\u0257\u04ad\u0258\u04af"+ + "\u0259\u04b1\u025a\u04b3\u025b\u04b5\u025c\u04b7\u025d\u04b9\u025e\u04bb"+ + "\u025f\u04bd\u0260\u04bf\u0261\u04c1\u0262\u04c3\u0263\u04c5\u0264\u04c7"+ + "\u0265\u04c9\u0266\u04cb\u0267\u04cd\u0268\u04cf\u0269\u04d1\u026a\u04d3"+ + "\u026b\u04d5\u026c\u04d7\u026d\u04d9\u026e\u04db\u026f\u04dd\u0270\u04df"+ + "\u0271\u04e1\u0272\u04e3\u0273\u04e5\u0274\u04e7\u0275\u04e9\u0276\u04eb"+ + "\u0277\u04ed\u0278\u04ef\u0279\u04f1\u027a\u04f3\u027b\u04f5\u027c\u04f7"+ + "\u027d\u04f9\u027e\u04fb\u027f\u04fd\u0280\u04ff\u0281\u0501\u0282\u0503"+ + "\u0283\u0505\u0284\u0507\u0285\u0509\u0286\u050b\u0287\u050d\u0288\u050f"+ + "\u0289\u0511\u028a\u0513\u028b\u0515\u028c\u0517\u028d\u0519\u028e\u051b"+ + "\u028f\u051d\u0290\u051f\u0291\u0521\u0292\u0523\u0293\u0525\u0294\u0527"+ + "\u0295\u0529\u0296\u052b\u0297\u052d\u0298\u052f\u0299\u0531\u029a\u0533"+ + "\u029b\u0535\u029c\u0537\u029d\u0539\u029e\u053b\u029f\u053d\u02a0\u053f"+ + "\u02a1\u0541\u02a2\u0543\u02a3\u0545\u02a4\u0547\u02a5\u0549\u02a6\u054b"+ + "\u02a7\u054d\u02a8\u054f\u02a9\u0551\u02aa\u0553\u02ab\u0555\u02ac\u0557"+ + "\u02ad\u0559\u02ae\u055b\u02af\u055d\u02b0\u055f\u02b1\u0561\u02b2\u0563"+ + "\u02b3\u0565\u02b4\u0567\u02b5\u0569\u02b6\u056b\u02b7\u056d\u02b8\u056f"+ + "\u02b9\u0571\u02ba\u0573\u02bb\u0575\u02bc\u0577\u02bd\u0579\u02be\u057b"+ + "\u02bf\u057d\u02c0\u057f\u02c1\u0581\u02c2\u0583\u02c3\u0585\u02c4\u0587"+ + "\u02c5\u0589\u02c6\u058b\u02c7\u058d\u02c8\u058f\u02c9\u0591\u02ca\u0593"+ + "\u02cb\u0595\u02cc\u0597\u02cd\u0599\u02ce\u059b\u02cf\u059d\u02d0\u059f"+ + "\u02d1\u05a1\u02d2\u05a3\u02d3\u05a5\u02d4\u05a7\u02d5\u05a9\u02d6\u05ab"+ + "\u02d7\u05ad\u02d8\u05af\u02d9\u05b1\u02da\u05b3\u02db\u05b5\u02dc\u05b7"+ + "\u02dd\u05b9\u02de\u05bb\u02df\u05bd\u02e0\u05bf\u02e1\u05c1\u02e2\u05c3"+ + "\u02e3\u05c5\u02e4\u05c7\u02e5\u05c9\u02e6\u05cb\u02e7\u05cd\u02e8\u05cf"+ + "\u02e9\u05d1\u02ea\u05d3\u02eb\u05d5\u02ec\u05d7\u02ed\u05d9\u02ee\u05db"+ + "\u02ef\u05dd\u02f0\u05df\u02f1\u05e1\u02f2\u05e3\u02f3\u05e5\u02f4\u05e7"+ + "\u02f5\u05e9\u02f6\u05eb\u02f7\u05ed\u02f8\u05ef\u02f9\u05f1\u02fa\u05f3"+ + "\u02fb\u05f5\u02fc\u05f7\u02fd\u05f9\u02fe\u05fb\u02ff\u05fd\u0300\u05ff"+ + "\u0301\u0601\u0302\u0603\u0303\u0605\u0304\u0607\u0305\u0609\u0306\u060b"+ + "\u0307\u060d\u0308\u060f\u0309\u0611\u030a\u0613\u030b\u0615\u030c\u0617"+ + "\u030d\u0619\u030e\u061b\u030f\u061d\u0310\u061f\u0311\u0621\u0312\u0623"+ + "\u0313\u0625\u0314\u0627\u0315\u0629\u0316\u062b\u0317\u062d\u0318\u062f"+ + "\u0319\u0631\u031a\u0633\u031b\u0635\u031c\u0637\u031d\u0639\u031e\u063b"+ + "\u031f\u063d\u0320\u063f\u0321\u0641\u0322\u0643\u0323\u0645\u0324\u0647"+ + "\u0325\u0649\u0326\u064b\u0327\u064d\u0328\u064f\u0329\u0651\u032a\u0653"+ + "\u032b\u0655\u032c\u0657\u032d\u0659\u032e\u065b\u032f\u065d\u0330\u065f"+ + "\u0331\u0661\u0332\u0663\u0333\u0665\u0334\u0667\u0335\u0669\u0336\u066b"+ + "\u0337\u066d\u0338\u066f\u0339\u0671\u033a\u0673\u033b\u0675\u033c\u0677"+ + "\u033d\u0679\u033e\u067b\u033f\u067d\u0340\u067f\u0341\u0681\u0342\u0683"+ + "\u0343\u0685\u0344\u0687\u0345\u0689\u0346\u068b\u0347\u068d\u0348\u068f"+ + "\u0349\u0691\u034a\u0693\u034b\u0695\u034c\u0697\u034d\u0699\u034e\u069b"+ + "\u034f\u069d\u0350\u069f\u0351\u06a1\u0352\u06a3\u0353\u06a5\u0354\u06a7"+ + "\u0355\u06a9\u0356\u06ab\u0357\u06ad\u0358\u06af\u0359\u06b1\u035a\u06b3"+ + "\u035b\u06b5\u035c\u06b7\u035d\u06b9\u035e\u06bb\u035f\u06bd\u0360\u06bf"+ + "\u0361\u06c1\u0362\u06c3\u0363\u06c5\u0364\u06c7\u0365\u06c9\u0366\u06cb"+ + "\u0367\u06cd\u0368\u06cf\u0369\u06d1\u036a\u06d3\u036b\u06d5\u036c\u06d7"+ + "\u036d\u06d9\u036e\u06db\u036f\u06dd\u0370\u06df\u0371\u06e1\u0372\u06e3"+ + "\u0373\u06e5\u0374\u06e7\u0375\u06e9\u0376\u06eb\u0377\u06ed\u0378\u06ef"+ + "\u0379\u06f1\u037a\u06f3\u037b\u06f5\u037c\u06f7\u037d\u06f9\u037e\u06fb"+ + "\u037f\u06fd\u0380\u06ff\u0381\u0701\u0382\u0703\u0383\u0705\u0384\u0707"+ + "\u0385\u0709\u0386\u070b\u0387\u070d\u0388\u070f\u0389\u0711\u038a\u0713"+ + "\u038b\u0715\u038c\u0717\u038d\u0719\u038e\u071b\u038f\u071d\u0390\u071f"+ + "\u0391\u0721\u0392\u0723\u0393\u0725\u0394\u0727\u0395\u0729\u0396\u072b"+ + "\u0397\u072d\u0398\u072f\u0399\u0731\u039a\u0733\u039b\u0735\u039c\u0737"+ + "\u039d\u0739\u039e\u073b\u039f\u073d\u03a0\u073f\u03a1\u0741\u03a2\u0743"+ + "\u03a3\u0745\u03a4\u0747\u03a5\u0749\u03a6\u074b\u03a7\u074d\u03a8\u074f"+ + "\u03a9\u0751\u03aa\u0753\u03ab\u0755\u03ac\u0757\u03ad\u0759\u03ae\u075b"+ + "\u03af\u075d\u03b0\u075f\u03b1\u0761\u03b2\u0763\u03b3\u0765\u03b4\u0767"+ + "\u03b5\u0769\u03b6\u076b\u03b7\u076d\u03b8\u076f\u03b9\u0771\u03ba\u0773"+ + "\u03bb\u0775\u03bc\u0777\u03bd\u0779\u03be\u077b\u03bf\u077d\u03c0\u077f"+ + "\u03c1\u0781\u03c2\u0783\u03c3\u0785\u03c4\u0787\u03c5\u0789\u03c6\u078b"+ + "\u03c7\u078d\u03c8\u078f\u03c9\u0791\u03ca\u0793\u03cb\u0795\u03cc\u0797"+ + "\u03cd\u0799\u03ce\u079b\u03cf\u079d\u03d0\u079f\u03d1\u07a1\u03d2\u07a3"+ + "\u03d3\u07a5\u03d4\u07a7\u03d5\u07a9\u03d6\u07ab\u03d7\u07ad\u03d8\u07af"+ + "\u03d9\u07b1\u03da\u07b3\u03db\u07b5\u03dc\u07b7\u03dd\u07b9\u03de\u07bb"+ + "\u03df\u07bd\u03e0\u07bf\u03e1\u07c1\u03e2\u07c3\u03e3\u07c5\u03e4\u07c7"+ + "\u03e5\u07c9\u03e6\u07cb\u03e7\u07cd\u03e8\u07cf\u03e9\u07d1\u03ea\u07d3"+ + "\u03eb\u07d5\u03ec\u07d7\u03ed\u07d9\u03ee\u07db\u03ef\u07dd\u03f0\u07df"+ + "\u03f1\u07e1\u03f2\u07e3\u03f3\u07e5\u03f4\u07e7\u03f5\u07e9\u03f6\u07eb"+ + "\u03f7\u07ed\u03f8\u07ef\u03f9\u07f1\u03fa\u07f3\u03fb\u07f5\u03fc\u07f7"+ + "\u03fd\u07f9\u03fe\u07fb\u03ff\u07fd\u0400\u07ff\u0401\u0801\u0402\u0803"+ + "\u0403\u0805\u0404\u0807\u0405\u0809\u0406\u080b\u0407\u080d\u0408\u080f"+ + "\u0409\u0811\u040a\u0813\u040b\u0815\2\u0817\u040c\u0819\u040d\u081b\u040e"+ + "\u081d\u040f\u081f\u0410\u0821\u0411\u0823\u0412\u0825\u0413\u0827\u0414"+ + "\u0829\u0415\u082b\u0416\u082d\u0417\u082f\u0418\u0831\u0419\u0833\u041a"+ + "\u0835\u041b\u0837\2\u0839\2\u083b\2\u083d\2\u083f\2\u0841\2\u0843\2\u0845"+ + "\2\u0847\2\u0849\u041c\3\2\20\5\2\13\f\17\17\"\"\4\2\f\f\17\17\6\2IIM"+ + "MOOVV\3\2bb\7\2&&\60\60\62;C\\aa\4\2--//\6\2&&\62;C\\aa\5\2&&C\\aa\4\2"+ + "$$^^\4\2))^^\4\2^^bb\4\2\62;CH\3\2\62;\3\2\62\63\2\u2fd3\2\3\3\2\2\2\2"+ + "\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\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\31\3\2\2\2\2"+ + "\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2"+ + "\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\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\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2"+ + "\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2"+ + "K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3"+ + "\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2"+ + "\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2"+ + "q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3"+ + "\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2"+ + "\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f"+ + "\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2"+ + "\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1"+ + "\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2"+ + "\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3"+ + "\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb\3\2\2"+ + "\2\2\u00bd\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2\2\2\u00c5"+ + "\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2\2\2\u00cb\3\2\2\2\2\u00cd\3\2\2"+ + "\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2\2\2\u00d3\3\2\2\2\2\u00d5\3\2\2\2\2\u00d7"+ + "\3\2\2\2\2\u00d9\3\2\2\2\2\u00db\3\2\2\2\2\u00dd\3\2\2\2\2\u00df\3\2\2"+ + "\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2\2\2\u00e5\3\2\2\2\2\u00e7\3\2\2\2\2\u00e9"+ + "\3\2\2\2\2\u00eb\3\2\2\2\2\u00ed\3\2\2\2\2\u00ef\3\2\2\2\2\u00f1\3\2\2"+ + "\2\2\u00f3\3\2\2\2\2\u00f5\3\2\2\2\2\u00f7\3\2\2\2\2\u00f9\3\2\2\2\2\u00fb"+ + "\3\2\2\2\2\u00fd\3\2\2\2\2\u00ff\3\2\2\2\2\u0101\3\2\2\2\2\u0103\3\2\2"+ + "\2\2\u0105\3\2\2\2\2\u0107\3\2\2\2\2\u0109\3\2\2\2\2\u010b\3\2\2\2\2\u010d"+ + "\3\2\2\2\2\u010f\3\2\2\2\2\u0111\3\2\2\2\2\u0113\3\2\2\2\2\u0115\3\2\2"+ + "\2\2\u0117\3\2\2\2\2\u0119\3\2\2\2\2\u011b\3\2\2\2\2\u011d\3\2\2\2\2\u011f"+ + "\3\2\2\2\2\u0121\3\2\2\2\2\u0123\3\2\2\2\2\u0125\3\2\2\2\2\u0127\3\2\2"+ + "\2\2\u0129\3\2\2\2\2\u012b\3\2\2\2\2\u012d\3\2\2\2\2\u012f\3\2\2\2\2\u0131"+ + "\3\2\2\2\2\u0133\3\2\2\2\2\u0135\3\2\2\2\2\u0137\3\2\2\2\2\u0139\3\2\2"+ + "\2\2\u013b\3\2\2\2\2\u013d\3\2\2\2\2\u013f\3\2\2\2\2\u0141\3\2\2\2\2\u0143"+ + "\3\2\2\2\2\u0145\3\2\2\2\2\u0147\3\2\2\2\2\u0149\3\2\2\2\2\u014b\3\2\2"+ + "\2\2\u014d\3\2\2\2\2\u014f\3\2\2\2\2\u0151\3\2\2\2\2\u0153\3\2\2\2\2\u0155"+ + "\3\2\2\2\2\u0157\3\2\2\2\2\u0159\3\2\2\2\2\u015b\3\2\2\2\2\u015d\3\2\2"+ + "\2\2\u015f\3\2\2\2\2\u0161\3\2\2\2\2\u0163\3\2\2\2\2\u0165\3\2\2\2\2\u0167"+ + "\3\2\2\2\2\u0169\3\2\2\2\2\u016b\3\2\2\2\2\u016d\3\2\2\2\2\u016f\3\2\2"+ + "\2\2\u0171\3\2\2\2\2\u0173\3\2\2\2\2\u0175\3\2\2\2\2\u0177\3\2\2\2\2\u0179"+ + "\3\2\2\2\2\u017b\3\2\2\2\2\u017d\3\2\2\2\2\u017f\3\2\2\2\2\u0181\3\2\2"+ + "\2\2\u0183\3\2\2\2\2\u0185\3\2\2\2\2\u0187\3\2\2\2\2\u0189\3\2\2\2\2\u018b"+ + "\3\2\2\2\2\u018d\3\2\2\2\2\u018f\3\2\2\2\2\u0191\3\2\2\2\2\u0193\3\2\2"+ + "\2\2\u0195\3\2\2\2\2\u0197\3\2\2\2\2\u0199\3\2\2\2\2\u019b\3\2\2\2\2\u019d"+ + "\3\2\2\2\2\u019f\3\2\2\2\2\u01a1\3\2\2\2\2\u01a3\3\2\2\2\2\u01a5\3\2\2"+ + "\2\2\u01a7\3\2\2\2\2\u01a9\3\2\2\2\2\u01ab\3\2\2\2\2\u01ad\3\2\2\2\2\u01af"+ + "\3\2\2\2\2\u01b1\3\2\2\2\2\u01b3\3\2\2\2\2\u01b5\3\2\2\2\2\u01b7\3\2\2"+ + "\2\2\u01b9\3\2\2\2\2\u01bb\3\2\2\2\2\u01bd\3\2\2\2\2\u01bf\3\2\2\2\2\u01c1"+ + "\3\2\2\2\2\u01c3\3\2\2\2\2\u01c5\3\2\2\2\2\u01c7\3\2\2\2\2\u01c9\3\2\2"+ + "\2\2\u01cb\3\2\2\2\2\u01cd\3\2\2\2\2\u01cf\3\2\2\2\2\u01d1\3\2\2\2\2\u01d3"+ + "\3\2\2\2\2\u01d5\3\2\2\2\2\u01d7\3\2\2\2\2\u01d9\3\2\2\2\2\u01db\3\2\2"+ + "\2\2\u01dd\3\2\2\2\2\u01df\3\2\2\2\2\u01e1\3\2\2\2\2\u01e3\3\2\2\2\2\u01e5"+ + "\3\2\2\2\2\u01e7\3\2\2\2\2\u01e9\3\2\2\2\2\u01eb\3\2\2\2\2\u01ed\3\2\2"+ + "\2\2\u01ef\3\2\2\2\2\u01f1\3\2\2\2\2\u01f3\3\2\2\2\2\u01f5\3\2\2\2\2\u01f7"+ + "\3\2\2\2\2\u01f9\3\2\2\2\2\u01fb\3\2\2\2\2\u01fd\3\2\2\2\2\u01ff\3\2\2"+ + "\2\2\u0201\3\2\2\2\2\u0203\3\2\2\2\2\u0205\3\2\2\2\2\u0207\3\2\2\2\2\u0209"+ + "\3\2\2\2\2\u020b\3\2\2\2\2\u020d\3\2\2\2\2\u020f\3\2\2\2\2\u0211\3\2\2"+ + "\2\2\u0213\3\2\2\2\2\u0215\3\2\2\2\2\u0217\3\2\2\2\2\u0219\3\2\2\2\2\u021b"+ + "\3\2\2\2\2\u021d\3\2\2\2\2\u021f\3\2\2\2\2\u0221\3\2\2\2\2\u0223\3\2\2"+ + "\2\2\u0225\3\2\2\2\2\u0227\3\2\2\2\2\u0229\3\2\2\2\2\u022b\3\2\2\2\2\u022d"+ + "\3\2\2\2\2\u022f\3\2\2\2\2\u0231\3\2\2\2\2\u0233\3\2\2\2\2\u0235\3\2\2"+ + "\2\2\u0237\3\2\2\2\2\u0239\3\2\2\2\2\u023b\3\2\2\2\2\u023d\3\2\2\2\2\u023f"+ + "\3\2\2\2\2\u0241\3\2\2\2\2\u0243\3\2\2\2\2\u0245\3\2\2\2\2\u0247\3\2\2"+ + "\2\2\u0249\3\2\2\2\2\u024b\3\2\2\2\2\u024d\3\2\2\2\2\u024f\3\2\2\2\2\u0251"+ + "\3\2\2\2\2\u0253\3\2\2\2\2\u0255\3\2\2\2\2\u0257\3\2\2\2\2\u0259\3\2\2"+ + "\2\2\u025b\3\2\2\2\2\u025d\3\2\2\2\2\u025f\3\2\2\2\2\u0261\3\2\2\2\2\u0263"+ + "\3\2\2\2\2\u0265\3\2\2\2\2\u0267\3\2\2\2\2\u0269\3\2\2\2\2\u026b\3\2\2"+ + "\2\2\u026d\3\2\2\2\2\u026f\3\2\2\2\2\u0271\3\2\2\2\2\u0273\3\2\2\2\2\u0275"+ + "\3\2\2\2\2\u0277\3\2\2\2\2\u0279\3\2\2\2\2\u027b\3\2\2\2\2\u027d\3\2\2"+ + "\2\2\u027f\3\2\2\2\2\u0281\3\2\2\2\2\u0283\3\2\2\2\2\u0285\3\2\2\2\2\u0287"+ + "\3\2\2\2\2\u0289\3\2\2\2\2\u028b\3\2\2\2\2\u028d\3\2\2\2\2\u028f\3\2\2"+ + "\2\2\u0291\3\2\2\2\2\u0293\3\2\2\2\2\u0295\3\2\2\2\2\u0297\3\2\2\2\2\u0299"+ + "\3\2\2\2\2\u029b\3\2\2\2\2\u029d\3\2\2\2\2\u029f\3\2\2\2\2\u02a1\3\2\2"+ + "\2\2\u02a3\3\2\2\2\2\u02a5\3\2\2\2\2\u02a7\3\2\2\2\2\u02a9\3\2\2\2\2\u02ab"+ + "\3\2\2\2\2\u02ad\3\2\2\2\2\u02af\3\2\2\2\2\u02b1\3\2\2\2\2\u02b3\3\2\2"+ + "\2\2\u02b5\3\2\2\2\2\u02b7\3\2\2\2\2\u02b9\3\2\2\2\2\u02bb\3\2\2\2\2\u02bd"+ + "\3\2\2\2\2\u02bf\3\2\2\2\2\u02c1\3\2\2\2\2\u02c3\3\2\2\2\2\u02c5\3\2\2"+ + "\2\2\u02c7\3\2\2\2\2\u02c9\3\2\2\2\2\u02cb\3\2\2\2\2\u02cd\3\2\2\2\2\u02cf"+ + "\3\2\2\2\2\u02d1\3\2\2\2\2\u02d3\3\2\2\2\2\u02d5\3\2\2\2\2\u02d7\3\2\2"+ + "\2\2\u02d9\3\2\2\2\2\u02db\3\2\2\2\2\u02dd\3\2\2\2\2\u02df\3\2\2\2\2\u02e1"+ + "\3\2\2\2\2\u02e3\3\2\2\2\2\u02e5\3\2\2\2\2\u02e7\3\2\2\2\2\u02e9\3\2\2"+ + "\2\2\u02eb\3\2\2\2\2\u02ed\3\2\2\2\2\u02ef\3\2\2\2\2\u02f1\3\2\2\2\2\u02f3"+ + "\3\2\2\2\2\u02f5\3\2\2\2\2\u02f7\3\2\2\2\2\u02f9\3\2\2\2\2\u02fb\3\2\2"+ + "\2\2\u02fd\3\2\2\2\2\u02ff\3\2\2\2\2\u0301\3\2\2\2\2\u0303\3\2\2\2\2\u0305"+ + "\3\2\2\2\2\u0307\3\2\2\2\2\u0309\3\2\2\2\2\u030b\3\2\2\2\2\u030d\3\2\2"+ + "\2\2\u030f\3\2\2\2\2\u0311\3\2\2\2\2\u0313\3\2\2\2\2\u0315\3\2\2\2\2\u0317"+ + "\3\2\2\2\2\u0319\3\2\2\2\2\u031b\3\2\2\2\2\u031d\3\2\2\2\2\u031f\3\2\2"+ + "\2\2\u0321\3\2\2\2\2\u0323\3\2\2\2\2\u0325\3\2\2\2\2\u0327\3\2\2\2\2\u0329"+ + "\3\2\2\2\2\u032b\3\2\2\2\2\u032d\3\2\2\2\2\u032f\3\2\2\2\2\u0331\3\2\2"+ + "\2\2\u0333\3\2\2\2\2\u0335\3\2\2\2\2\u0337\3\2\2\2\2\u0339\3\2\2\2\2\u033b"+ + "\3\2\2\2\2\u033d\3\2\2\2\2\u033f\3\2\2\2\2\u0341\3\2\2\2\2\u0343\3\2\2"+ + "\2\2\u0345\3\2\2\2\2\u0347\3\2\2\2\2\u0349\3\2\2\2\2\u034b\3\2\2\2\2\u034d"+ + "\3\2\2\2\2\u034f\3\2\2\2\2\u0351\3\2\2\2\2\u0353\3\2\2\2\2\u0355\3\2\2"+ + "\2\2\u0357\3\2\2\2\2\u0359\3\2\2\2\2\u035b\3\2\2\2\2\u035d\3\2\2\2\2\u035f"+ + "\3\2\2\2\2\u0361\3\2\2\2\2\u0363\3\2\2\2\2\u0365\3\2\2\2\2\u0367\3\2\2"+ + "\2\2\u0369\3\2\2\2\2\u036b\3\2\2\2\2\u036d\3\2\2\2\2\u036f\3\2\2\2\2\u0371"+ + "\3\2\2\2\2\u0373\3\2\2\2\2\u0375\3\2\2\2\2\u0377\3\2\2\2\2\u0379\3\2\2"+ + "\2\2\u037b\3\2\2\2\2\u037d\3\2\2\2\2\u037f\3\2\2\2\2\u0381\3\2\2\2\2\u0383"+ + "\3\2\2\2\2\u0385\3\2\2\2\2\u0387\3\2\2\2\2\u0389\3\2\2\2\2\u038b\3\2\2"+ + "\2\2\u038d\3\2\2\2\2\u038f\3\2\2\2\2\u0391\3\2\2\2\2\u0393\3\2\2\2\2\u0395"+ + "\3\2\2\2\2\u0397\3\2\2\2\2\u0399\3\2\2\2\2\u039b\3\2\2\2\2\u039d\3\2\2"+ + "\2\2\u039f\3\2\2\2\2\u03a1\3\2\2\2\2\u03a3\3\2\2\2\2\u03a5\3\2\2\2\2\u03a7"+ + "\3\2\2\2\2\u03a9\3\2\2\2\2\u03ab\3\2\2\2\2\u03ad\3\2\2\2\2\u03af\3\2\2"+ + "\2\2\u03b1\3\2\2\2\2\u03b3\3\2\2\2\2\u03b5\3\2\2\2\2\u03b7\3\2\2\2\2\u03b9"+ + "\3\2\2\2\2\u03bb\3\2\2\2\2\u03bd\3\2\2\2\2\u03bf\3\2\2\2\2\u03c1\3\2\2"+ + "\2\2\u03c3\3\2\2\2\2\u03c5\3\2\2\2\2\u03c7\3\2\2\2\2\u03c9\3\2\2\2\2\u03cb"+ + "\3\2\2\2\2\u03cd\3\2\2\2\2\u03cf\3\2\2\2\2\u03d1\3\2\2\2\2\u03d3\3\2\2"+ + "\2\2\u03d5\3\2\2\2\2\u03d7\3\2\2\2\2\u03d9\3\2\2\2\2\u03db\3\2\2\2\2\u03dd"+ + "\3\2\2\2\2\u03df\3\2\2\2\2\u03e1\3\2\2\2\2\u03e3\3\2\2\2\2\u03e5\3\2\2"+ + "\2\2\u03e7\3\2\2\2\2\u03e9\3\2\2\2\2\u03eb\3\2\2\2\2\u03ed\3\2\2\2\2\u03ef"+ + "\3\2\2\2\2\u03f1\3\2\2\2\2\u03f3\3\2\2\2\2\u03f5\3\2\2\2\2\u03f7\3\2\2"+ + "\2\2\u03f9\3\2\2\2\2\u03fb\3\2\2\2\2\u03fd\3\2\2\2\2\u03ff\3\2\2\2\2\u0401"+ + "\3\2\2\2\2\u0403\3\2\2\2\2\u0405\3\2\2\2\2\u0407\3\2\2\2\2\u0409\3\2\2"+ + "\2\2\u040b\3\2\2\2\2\u040d\3\2\2\2\2\u040f\3\2\2\2\2\u0411\3\2\2\2\2\u0413"+ + "\3\2\2\2\2\u0415\3\2\2\2\2\u0417\3\2\2\2\2\u0419\3\2\2\2\2\u041b\3\2\2"+ + "\2\2\u041d\3\2\2\2\2\u041f\3\2\2\2\2\u0421\3\2\2\2\2\u0423\3\2\2\2\2\u0425"+ + "\3\2\2\2\2\u0427\3\2\2\2\2\u0429\3\2\2\2\2\u042b\3\2\2\2\2\u042d\3\2\2"+ + "\2\2\u042f\3\2\2\2\2\u0431\3\2\2\2\2\u0433\3\2\2\2\2\u0435\3\2\2\2\2\u0437"+ + "\3\2\2\2\2\u0439\3\2\2\2\2\u043b\3\2\2\2\2\u043d\3\2\2\2\2\u043f\3\2\2"+ + "\2\2\u0441\3\2\2\2\2\u0443\3\2\2\2\2\u0445\3\2\2\2\2\u0447\3\2\2\2\2\u0449"+ + "\3\2\2\2\2\u044b\3\2\2\2\2\u044d\3\2\2\2\2\u044f\3\2\2\2\2\u0451\3\2\2"+ + "\2\2\u0453\3\2\2\2\2\u0455\3\2\2\2\2\u0457\3\2\2\2\2\u0459\3\2\2\2\2\u045b"+ + "\3\2\2\2\2\u045d\3\2\2\2\2\u045f\3\2\2\2\2\u0461\3\2\2\2\2\u0463\3\2\2"+ + "\2\2\u0465\3\2\2\2\2\u0467\3\2\2\2\2\u0469\3\2\2\2\2\u046b\3\2\2\2\2\u046d"+ + "\3\2\2\2\2\u046f\3\2\2\2\2\u0471\3\2\2\2\2\u0473\3\2\2\2\2\u0475\3\2\2"+ + "\2\2\u0477\3\2\2\2\2\u0479\3\2\2\2\2\u047b\3\2\2\2\2\u047d\3\2\2\2\2\u047f"+ + "\3\2\2\2\2\u0481\3\2\2\2\2\u0483\3\2\2\2\2\u0485\3\2\2\2\2\u0487\3\2\2"+ + "\2\2\u0489\3\2\2\2\2\u048b\3\2\2\2\2\u048d\3\2\2\2\2\u048f\3\2\2\2\2\u0491"+ + "\3\2\2\2\2\u0493\3\2\2\2\2\u0495\3\2\2\2\2\u0497\3\2\2\2\2\u0499\3\2\2"+ + "\2\2\u049b\3\2\2\2\2\u049d\3\2\2\2\2\u049f\3\2\2\2\2\u04a1\3\2\2\2\2\u04a3"+ + "\3\2\2\2\2\u04a5\3\2\2\2\2\u04a7\3\2\2\2\2\u04a9\3\2\2\2\2\u04ab\3\2\2"+ + "\2\2\u04ad\3\2\2\2\2\u04af\3\2\2\2\2\u04b1\3\2\2\2\2\u04b3\3\2\2\2\2\u04b5"+ + "\3\2\2\2\2\u04b7\3\2\2\2\2\u04b9\3\2\2\2\2\u04bb\3\2\2\2\2\u04bd\3\2\2"+ + "\2\2\u04bf\3\2\2\2\2\u04c1\3\2\2\2\2\u04c3\3\2\2\2\2\u04c5\3\2\2\2\2\u04c7"+ + "\3\2\2\2\2\u04c9\3\2\2\2\2\u04cb\3\2\2\2\2\u04cd\3\2\2\2\2\u04cf\3\2\2"+ + "\2\2\u04d1\3\2\2\2\2\u04d3\3\2\2\2\2\u04d5\3\2\2\2\2\u04d7\3\2\2\2\2\u04d9"+ + "\3\2\2\2\2\u04db\3\2\2\2\2\u04dd\3\2\2\2\2\u04df\3\2\2\2\2\u04e1\3\2\2"+ + "\2\2\u04e3\3\2\2\2\2\u04e5\3\2\2\2\2\u04e7\3\2\2\2\2\u04e9\3\2\2\2\2\u04eb"+ + "\3\2\2\2\2\u04ed\3\2\2\2\2\u04ef\3\2\2\2\2\u04f1\3\2\2\2\2\u04f3\3\2\2"+ + "\2\2\u04f5\3\2\2\2\2\u04f7\3\2\2\2\2\u04f9\3\2\2\2\2\u04fb\3\2\2\2\2\u04fd"+ + "\3\2\2\2\2\u04ff\3\2\2\2\2\u0501\3\2\2\2\2\u0503\3\2\2\2\2\u0505\3\2\2"+ + "\2\2\u0507\3\2\2\2\2\u0509\3\2\2\2\2\u050b\3\2\2\2\2\u050d\3\2\2\2\2\u050f"+ + "\3\2\2\2\2\u0511\3\2\2\2\2\u0513\3\2\2\2\2\u0515\3\2\2\2\2\u0517\3\2\2"+ + "\2\2\u0519\3\2\2\2\2\u051b\3\2\2\2\2\u051d\3\2\2\2\2\u051f\3\2\2\2\2\u0521"+ + "\3\2\2\2\2\u0523\3\2\2\2\2\u0525\3\2\2\2\2\u0527\3\2\2\2\2\u0529\3\2\2"+ + "\2\2\u052b\3\2\2\2\2\u052d\3\2\2\2\2\u052f\3\2\2\2\2\u0531\3\2\2\2\2\u0533"+ + "\3\2\2\2\2\u0535\3\2\2\2\2\u0537\3\2\2\2\2\u0539\3\2\2\2\2\u053b\3\2\2"+ + "\2\2\u053d\3\2\2\2\2\u053f\3\2\2\2\2\u0541\3\2\2\2\2\u0543\3\2\2\2\2\u0545"+ + "\3\2\2\2\2\u0547\3\2\2\2\2\u0549\3\2\2\2\2\u054b\3\2\2\2\2\u054d\3\2\2"+ + "\2\2\u054f\3\2\2\2\2\u0551\3\2\2\2\2\u0553\3\2\2\2\2\u0555\3\2\2\2\2\u0557"+ + "\3\2\2\2\2\u0559\3\2\2\2\2\u055b\3\2\2\2\2\u055d\3\2\2\2\2\u055f\3\2\2"+ + "\2\2\u0561\3\2\2\2\2\u0563\3\2\2\2\2\u0565\3\2\2\2\2\u0567\3\2\2\2\2\u0569"+ + "\3\2\2\2\2\u056b\3\2\2\2\2\u056d\3\2\2\2\2\u056f\3\2\2\2\2\u0571\3\2\2"+ + "\2\2\u0573\3\2\2\2\2\u0575\3\2\2\2\2\u0577\3\2\2\2\2\u0579\3\2\2\2\2\u057b"+ + "\3\2\2\2\2\u057d\3\2\2\2\2\u057f\3\2\2\2\2\u0581\3\2\2\2\2\u0583\3\2\2"+ + "\2\2\u0585\3\2\2\2\2\u0587\3\2\2\2\2\u0589\3\2\2\2\2\u058b\3\2\2\2\2\u058d"+ + "\3\2\2\2\2\u058f\3\2\2\2\2\u0591\3\2\2\2\2\u0593\3\2\2\2\2\u0595\3\2\2"+ + "\2\2\u0597\3\2\2\2\2\u0599\3\2\2\2\2\u059b\3\2\2\2\2\u059d\3\2\2\2\2\u059f"+ + "\3\2\2\2\2\u05a1\3\2\2\2\2\u05a3\3\2\2\2\2\u05a5\3\2\2\2\2\u05a7\3\2\2"+ + "\2\2\u05a9\3\2\2\2\2\u05ab\3\2\2\2\2\u05ad\3\2\2\2\2\u05af\3\2\2\2\2\u05b1"+ + "\3\2\2\2\2\u05b3\3\2\2\2\2\u05b5\3\2\2\2\2\u05b7\3\2\2\2\2\u05b9\3\2\2"+ + "\2\2\u05bb\3\2\2\2\2\u05bd\3\2\2\2\2\u05bf\3\2\2\2\2\u05c1\3\2\2\2\2\u05c3"+ + "\3\2\2\2\2\u05c5\3\2\2\2\2\u05c7\3\2\2\2\2\u05c9\3\2\2\2\2\u05cb\3\2\2"+ + "\2\2\u05cd\3\2\2\2\2\u05cf\3\2\2\2\2\u05d1\3\2\2\2\2\u05d3\3\2\2\2\2\u05d5"+ + "\3\2\2\2\2\u05d7\3\2\2\2\2\u05d9\3\2\2\2\2\u05db\3\2\2\2\2\u05dd\3\2\2"+ + "\2\2\u05df\3\2\2\2\2\u05e1\3\2\2\2\2\u05e3\3\2\2\2\2\u05e5\3\2\2\2\2\u05e7"+ + "\3\2\2\2\2\u05e9\3\2\2\2\2\u05eb\3\2\2\2\2\u05ed\3\2\2\2\2\u05ef\3\2\2"+ + "\2\2\u05f1\3\2\2\2\2\u05f3\3\2\2\2\2\u05f5\3\2\2\2\2\u05f7\3\2\2\2\2\u05f9"+ + "\3\2\2\2\2\u05fb\3\2\2\2\2\u05fd\3\2\2\2\2\u05ff\3\2\2\2\2\u0601\3\2\2"+ + "\2\2\u0603\3\2\2\2\2\u0605\3\2\2\2\2\u0607\3\2\2\2\2\u0609\3\2\2\2\2\u060b"+ + "\3\2\2\2\2\u060d\3\2\2\2\2\u060f\3\2\2\2\2\u0611\3\2\2\2\2\u0613\3\2\2"+ + "\2\2\u0615\3\2\2\2\2\u0617\3\2\2\2\2\u0619\3\2\2\2\2\u061b\3\2\2\2\2\u061d"+ + "\3\2\2\2\2\u061f\3\2\2\2\2\u0621\3\2\2\2\2\u0623\3\2\2\2\2\u0625\3\2\2"+ + "\2\2\u0627\3\2\2\2\2\u0629\3\2\2\2\2\u062b\3\2\2\2\2\u062d\3\2\2\2\2\u062f"+ + "\3\2\2\2\2\u0631\3\2\2\2\2\u0633\3\2\2\2\2\u0635\3\2\2\2\2\u0637\3\2\2"+ + "\2\2\u0639\3\2\2\2\2\u063b\3\2\2\2\2\u063d\3\2\2\2\2\u063f\3\2\2\2\2\u0641"+ + "\3\2\2\2\2\u0643\3\2\2\2\2\u0645\3\2\2\2\2\u0647\3\2\2\2\2\u0649\3\2\2"+ + "\2\2\u064b\3\2\2\2\2\u064d\3\2\2\2\2\u064f\3\2\2\2\2\u0651\3\2\2\2\2\u0653"+ + "\3\2\2\2\2\u0655\3\2\2\2\2\u0657\3\2\2\2\2\u0659\3\2\2\2\2\u065b\3\2\2"+ + "\2\2\u065d\3\2\2\2\2\u065f\3\2\2\2\2\u0661\3\2\2\2\2\u0663\3\2\2\2\2\u0665"+ + "\3\2\2\2\2\u0667\3\2\2\2\2\u0669\3\2\2\2\2\u066b\3\2\2\2\2\u066d\3\2\2"+ + "\2\2\u066f\3\2\2\2\2\u0671\3\2\2\2\2\u0673\3\2\2\2\2\u0675\3\2\2\2\2\u0677"+ + "\3\2\2\2\2\u0679\3\2\2\2\2\u067b\3\2\2\2\2\u067d\3\2\2\2\2\u067f\3\2\2"+ + "\2\2\u0681\3\2\2\2\2\u0683\3\2\2\2\2\u0685\3\2\2\2\2\u0687\3\2\2\2\2\u0689"+ + "\3\2\2\2\2\u068b\3\2\2\2\2\u068d\3\2\2\2\2\u068f\3\2\2\2\2\u0691\3\2\2"+ + "\2\2\u0693\3\2\2\2\2\u0695\3\2\2\2\2\u0697\3\2\2\2\2\u0699\3\2\2\2\2\u069b"+ + "\3\2\2\2\2\u069d\3\2\2\2\2\u069f\3\2\2\2\2\u06a1\3\2\2\2\2\u06a3\3\2\2"+ + "\2\2\u06a5\3\2\2\2\2\u06a7\3\2\2\2\2\u06a9\3\2\2\2\2\u06ab\3\2\2\2\2\u06ad"+ + "\3\2\2\2\2\u06af\3\2\2\2\2\u06b1\3\2\2\2\2\u06b3\3\2\2\2\2\u06b5\3\2\2"+ + "\2\2\u06b7\3\2\2\2\2\u06b9\3\2\2\2\2\u06bb\3\2\2\2\2\u06bd\3\2\2\2\2\u06bf"+ + "\3\2\2\2\2\u06c1\3\2\2\2\2\u06c3\3\2\2\2\2\u06c5\3\2\2\2\2\u06c7\3\2\2"+ + "\2\2\u06c9\3\2\2\2\2\u06cb\3\2\2\2\2\u06cd\3\2\2\2\2\u06cf\3\2\2\2\2\u06d1"+ + "\3\2\2\2\2\u06d3\3\2\2\2\2\u06d5\3\2\2\2\2\u06d7\3\2\2\2\2\u06d9\3\2\2"+ + "\2\2\u06db\3\2\2\2\2\u06dd\3\2\2\2\2\u06df\3\2\2\2\2\u06e1\3\2\2\2\2\u06e3"+ + "\3\2\2\2\2\u06e5\3\2\2\2\2\u06e7\3\2\2\2\2\u06e9\3\2\2\2\2\u06eb\3\2\2"+ + "\2\2\u06ed\3\2\2\2\2\u06ef\3\2\2\2\2\u06f1\3\2\2\2\2\u06f3\3\2\2\2\2\u06f5"+ + "\3\2\2\2\2\u06f7\3\2\2\2\2\u06f9\3\2\2\2\2\u06fb\3\2\2\2\2\u06fd\3\2\2"+ + "\2\2\u06ff\3\2\2\2\2\u0701\3\2\2\2\2\u0703\3\2\2\2\2\u0705\3\2\2\2\2\u0707"+ + "\3\2\2\2\2\u0709\3\2\2\2\2\u070b\3\2\2\2\2\u070d\3\2\2\2\2\u070f\3\2\2"+ + "\2\2\u0711\3\2\2\2\2\u0713\3\2\2\2\2\u0715\3\2\2\2\2\u0717\3\2\2\2\2\u0719"+ + "\3\2\2\2\2\u071b\3\2\2\2\2\u071d\3\2\2\2\2\u071f\3\2\2\2\2\u0721\3\2\2"+ + "\2\2\u0723\3\2\2\2\2\u0725\3\2\2\2\2\u0727\3\2\2\2\2\u0729\3\2\2\2\2\u072b"+ + "\3\2\2\2\2\u072d\3\2\2\2\2\u072f\3\2\2\2\2\u0731\3\2\2\2\2\u0733\3\2\2"+ + "\2\2\u0735\3\2\2\2\2\u0737\3\2\2\2\2\u0739\3\2\2\2\2\u073b\3\2\2\2\2\u073d"+ + "\3\2\2\2\2\u073f\3\2\2\2\2\u0741\3\2\2\2\2\u0743\3\2\2\2\2\u0745\3\2\2"+ + "\2\2\u0747\3\2\2\2\2\u0749\3\2\2\2\2\u074b\3\2\2\2\2\u074d\3\2\2\2\2\u074f"+ + "\3\2\2\2\2\u0751\3\2\2\2\2\u0753\3\2\2\2\2\u0755\3\2\2\2\2\u0757\3\2\2"+ + "\2\2\u0759\3\2\2\2\2\u075b\3\2\2\2\2\u075d\3\2\2\2\2\u075f\3\2\2\2\2\u0761"+ + "\3\2\2\2\2\u0763\3\2\2\2\2\u0765\3\2\2\2\2\u0767\3\2\2\2\2\u0769\3\2\2"+ + "\2\2\u076b\3\2\2\2\2\u076d\3\2\2\2\2\u076f\3\2\2\2\2\u0771\3\2\2\2\2\u0773"+ + "\3\2\2\2\2\u0775\3\2\2\2\2\u0777\3\2\2\2\2\u0779\3\2\2\2\2\u077b\3\2\2"+ + "\2\2\u077d\3\2\2\2\2\u077f\3\2\2\2\2\u0781\3\2\2\2\2\u0783\3\2\2\2\2\u0785"+ + "\3\2\2\2\2\u0787\3\2\2\2\2\u0789\3\2\2\2\2\u078b\3\2\2\2\2\u078d\3\2\2"+ + "\2\2\u078f\3\2\2\2\2\u0791\3\2\2\2\2\u0793\3\2\2\2\2\u0795\3\2\2\2\2\u0797"+ + "\3\2\2\2\2\u0799\3\2\2\2\2\u079b\3\2\2\2\2\u079d\3\2\2\2\2\u079f\3\2\2"+ + "\2\2\u07a1\3\2\2\2\2\u07a3\3\2\2\2\2\u07a5\3\2\2\2\2\u07a7\3\2\2\2\2\u07a9"+ + "\3\2\2\2\2\u07ab\3\2\2\2\2\u07ad\3\2\2\2\2\u07af\3\2\2\2\2\u07b1\3\2\2"+ + "\2\2\u07b3\3\2\2\2\2\u07b5\3\2\2\2\2\u07b7\3\2\2\2\2\u07b9\3\2\2\2\2\u07bb"+ + "\3\2\2\2\2\u07bd\3\2\2\2\2\u07bf\3\2\2\2\2\u07c1\3\2\2\2\2\u07c3\3\2\2"+ + "\2\2\u07c5\3\2\2\2\2\u07c7\3\2\2\2\2\u07c9\3\2\2\2\2\u07cb\3\2\2\2\2\u07cd"+ + "\3\2\2\2\2\u07cf\3\2\2\2\2\u07d1\3\2\2\2\2\u07d3\3\2\2\2\2\u07d5\3\2\2"+ + "\2\2\u07d7\3\2\2\2\2\u07d9\3\2\2\2\2\u07db\3\2\2\2\2\u07dd\3\2\2\2\2\u07df"+ + "\3\2\2\2\2\u07e1\3\2\2\2\2\u07e3\3\2\2\2\2\u07e5\3\2\2\2\2\u07e7\3\2\2"+ + "\2\2\u07e9\3\2\2\2\2\u07eb\3\2\2\2\2\u07ed\3\2\2\2\2\u07ef\3\2\2\2\2\u07f1"+ + "\3\2\2\2\2\u07f3\3\2\2\2\2\u07f5\3\2\2\2\2\u07f7\3\2\2\2\2\u07f9\3\2\2"+ + "\2\2\u07fb\3\2\2\2\2\u07fd\3\2\2\2\2\u07ff\3\2\2\2\2\u0801\3\2\2\2\2\u0803"+ + "\3\2\2\2\2\u0805\3\2\2\2\2\u0807\3\2\2\2\2\u0809\3\2\2\2\2\u080b\3\2\2"+ + "\2\2\u080d\3\2\2\2\2\u080f\3\2\2\2\2\u0811\3\2\2\2\2\u0813\3\2\2\2\2\u0817"+ + "\3\2\2\2\2\u0819\3\2\2\2\2\u081b\3\2\2\2\2\u081d\3\2\2\2\2\u081f\3\2\2"+ + "\2\2\u0821\3\2\2\2\2\u0823\3\2\2\2\2\u0825\3\2\2\2\2\u0827\3\2\2\2\2\u0829"+ + "\3\2\2\2\2\u082b\3\2\2\2\2\u082d\3\2\2\2\2\u082f\3\2\2\2\2\u0831\3\2\2"+ + "\2\2\u0833\3\2\2\2\2\u0835\3\2\2\2\2\u0849\3\2\2\2\3\u084c\3\2\2\2\5\u0852"+ + "\3\2\2\2\7\u0860\3\2\2\2\t\u088b\3\2\2\2\13\u088f\3\2\2\2\r\u0893\3\2"+ + "\2\2\17\u0897\3\2\2\2\21\u089d\3\2\2\2\23\u08a4\3\2\2\2\25\u08ac\3\2\2"+ + "\2\27\u08b0\3\2\2\2\31\u08b3\3\2\2\2\33\u08b7\3\2\2\2\35\u08be\3\2\2\2"+ + "\37\u08c6\3\2\2\2!\u08cb\3\2\2\2#\u08ce\3\2\2\2%\u08d3\3\2\2\2\'\u08db"+ + "\3\2\2\2)\u08e0\3\2\2\2+\u08e5\3\2\2\2-\u08ec\3\2\2\2/\u08f6\3\2\2\2\61"+ + "\u08fc\3\2\2\2\63\u0904\3\2\2\2\65\u090b\3\2\2\2\67\u0915\3\2\2\29\u0920"+ + "\3\2\2\2;\u0929\3\2\2\2=\u0931\3\2\2\2?\u0938\3\2\2\2A\u093e\3\2\2\2C"+ + "\u0946\3\2\2\2E\u0953\3\2\2\2G\u095a\3\2\2\2I\u0963\3\2\2\2K\u096d\3\2"+ + "\2\2M\u0975\3\2\2\2O\u097d\3\2\2\2Q\u0985\3\2\2\2S\u098c\3\2\2\2U\u0991"+ + "\3\2\2\2W\u099a\3\2\2\2Y\u09a8\3\2\2\2[\u09b4\3\2\2\2]\u09bd\3\2\2\2_"+ + "\u09c9\3\2\2\2a\u09ce\3\2\2\2c\u09d3\3\2\2\2e\u09d8\3\2\2\2g\u09df\3\2"+ + "\2\2i\u09e8\3\2\2\2k\u09f0\3\2\2\2m\u09f7\3\2\2\2o\u09fc\3\2\2\2q\u0a04"+ + "\3\2\2\2s\u0a0a\3\2\2\2u\u0a10\3\2\2\2w\u0a14\3\2\2\2y\u0a1a\3\2\2\2{"+ + "\u0a22\3\2\2\2}\u0a27\3\2\2\2\177\u0a30\3\2\2\2\u0081\u0a3a\3\2\2\2\u0083"+ + "\u0a3e\3\2\2\2\u0085\u0a44\3\2\2\2\u0087\u0a4a\3\2\2\2\u0089\u0a51\3\2"+ + "\2\2\u008b\u0a5f\3\2\2\2\u008d\u0a62\3\2\2\2\u008f\u0a69\3\2\2\2\u0091"+ + "\u0a6c\3\2\2\2\u0093\u0a72\3\2\2\2\u0095\u0a79\3\2\2\2\u0097\u0a7f\3\2"+ + "\2\2\u0099\u0a85\3\2\2\2\u009b\u0a8c\3\2\2\2\u009d\u0a95\3\2\2\2\u009f"+ + "\u0a9a\3\2\2\2\u00a1\u0a9d\3\2\2\2\u00a3\u0aa5\3\2\2\2\u00a5\u0aaa\3\2"+ + "\2\2\u00a7\u0aae\3\2\2\2\u00a9\u0ab3\3\2\2\2\u00ab\u0ab8\3\2\2\2\u00ad"+ + "\u0ac0\3\2\2\2\u00af\u0ac6\3\2\2\2\u00b1\u0acb\3\2\2\2\u00b3\u0ad0\3\2"+ + "\2\2\u00b5\u0ad6\3\2\2\2\u00b7\u0add\3\2\2\2\u00b9\u0ae3\3\2\2\2\u00bb"+ + "\u0ae8\3\2\2\2\u00bd\u0aed\3\2\2\2\u00bf\u0af2\3\2\2\2\u00c1\u0aff\3\2"+ + "\2\2\u00c3\u0b0b\3\2\2\2\u00c5\u0b29\3\2\2\2\u00c7\u0b2f\3\2\2\2\u00c9"+ + "\u0b38\3\2\2\2\u00cb\u0b41\3\2\2\2\u00cd\u0b49\3\2\2\2\u00cf\u0b4d\3\2"+ + "\2\2\u00d1\u0b60\3\2\2\2\u00d3\u0b65\3\2\2\2\u00d5\u0b6c\3\2\2\2\u00d7"+ + "\u0b6f\3\2\2\2\u00d9\u0b78\3\2\2\2\u00db\u0b7f\3\2\2\2\u00dd\u0b8a\3\2"+ + "\2\2\u00df\u0b8d\3\2\2\2\u00e1\u0b93\3\2\2\2\u00e3\u0b97\3\2\2\2\u00e5"+ + "\u0b9d\3\2\2\2\u00e7\u0ba5\3\2\2\2\u00e9\u0baf\3\2\2\2\u00eb\u0bb7\3\2"+ + "\2\2\u00ed\u0bc1\3\2\2\2\u00ef\u0bc7\3\2\2\2\u00f1\u0bcd\3\2\2\2\u00f3"+ + "\u0bd2\3\2\2\2\u00f5\u0bd8\3\2\2\2\u00f7\u0be3\3\2\2\2\u00f9\u0bea\3\2"+ + "\2\2\u00fb\u0bf2\3\2\2\2\u00fd\u0bf9\3\2\2\2\u00ff\u0c00\3\2\2\2\u0101"+ + "\u0c08\3\2\2\2\u0103\u0c10\3\2\2\2\u0105\u0c19\3\2\2\2\u0107\u0c22\3\2"+ + "\2\2\u0109\u0c29\3\2\2\2\u010b\u0c30\3\2\2\2\u010d\u0c36\3\2\2\2\u010f"+ + "\u0c3c\3\2\2\2\u0111\u0c43\3\2\2\2\u0113\u0c4b\3\2\2\2\u0115\u0c52\3\2"+ + "\2\2\u0117\u0c56\3\2\2\2\u0119\u0c60\3\2\2\2\u011b\u0c65\3\2\2\2\u011d"+ + "\u0c6c\3\2\2\2\u011f\u0c74\3\2\2\2\u0121\u0c78\3\2\2\2\u0123\u0c85\3\2"+ + "\2\2\u0125\u0c8e\3\2\2\2\u0127\u0c99\3\2\2\2\u0129\u0ca8\3\2\2\2\u012b"+ + "\u0cbc\3\2\2\2\u012d\u0ccd\3\2\2\2\u012f\u0cd1\3\2\2\2\u0131\u0cd9\3\2"+ + "\2\2\u0133\u0ce2\3\2\2\2\u0135\u0cf0\3\2\2\2\u0137\u0cf6\3\2\2\2\u0139"+ + "\u0d01\3\2\2\2\u013b\u0d06\3\2\2\2\u013d\u0d09\3\2\2\2\u013f\u0d12\3\2"+ + "\2\2\u0141\u0d1a\3\2\2\2\u0143\u0d1f\3\2\2\2\u0145\u0d24\3\2\2\2\u0147"+ + "\u0d2a\3\2\2\2\u0149\u0d31\3\2\2\2\u014b\u0d38\3\2\2\2\u014d\u0d41\3\2"+ + "\2\2\u014f\u0d48\3\2\2\2\u0151\u0d4e\3\2\2\2\u0153\u0d52\3\2\2\2\u0155"+ + "\u0d58\3\2\2\2\u0157\u0d5f\3\2\2\2\u0159\u0d64\3\2\2\2\u015b\u0d6a\3\2"+ + "\2\2\u015d\u0d70\3\2\2\2\u015f\u0d75\3\2\2\2\u0161\u0d7b\3\2\2\2\u0163"+ + "\u0d7f\3\2\2\2\u0165\u0d88\3\2\2\2\u0167\u0d90\3\2\2\2\u0169\u0d99\3\2"+ + "\2\2\u016b\u0da3\3\2\2\2\u016d\u0dad\3\2\2\2\u016f\u0db1\3\2\2\2\u0171"+ + "\u0db6\3\2\2\2\u0173\u0dbb\3\2\2\2\u0175\u0dc0\3\2\2\2\u0177\u0dc5\3\2"+ + "\2\2\u0179\u0dca\3\2\2\2\u017b\u0dd2\3\2\2\2\u017d\u0dd9\3\2\2\2\u017f"+ + "\u0dde\3\2\2\2\u0181\u0de5\3\2\2\2\u0183\u0def\3\2\2\2\u0185\u0df5\3\2"+ + "\2\2\u0187\u0dfc\3\2\2\2\u0189\u0e03\3\2\2\2\u018b\u0e0b\3\2\2\2\u018d"+ + "\u0e0f\3\2\2\2\u018f\u0e17\3\2\2\2\u0191\u0e1c\3\2\2\2\u0193\u0e21\3\2"+ + "\2\2\u0195\u0e2b\3\2\2\2\u0197\u0e34\3\2\2\2\u0199\u0e39\3\2\2\2\u019b"+ + "\u0e3e\3\2\2\2\u019d\u0e46\3\2\2\2\u019f\u0e4f\3\2\2\2\u01a1\u0e58\3\2"+ + "\2\2\u01a3\u0e5f\3\2\2\2\u01a5\u0e69\3\2\2\2\u01a7\u0e72\3\2\2\2\u01a9"+ + "\u0e77\3\2\2\2\u01ab\u0e82\3\2\2\2\u01ad\u0e87\3\2\2\2\u01af\u0e90\3\2"+ + "\2\2\u01b1\u0e99\3\2\2\2\u01b3\u0e9e\3\2\2\2\u01b5\u0ea9\3\2\2\2\u01b7"+ + "\u0eb2\3\2\2\2\u01b9\u0eb7\3\2\2\2\u01bb\u0ebf\3\2\2\2\u01bd\u0ec6\3\2"+ + "\2\2\u01bf\u0ed1\3\2\2\2\u01c1\u0eda\3\2\2\2\u01c3\u0ee5\3\2\2\2\u01c5"+ + "\u0ef0\3\2\2\2\u01c7\u0efc\3\2\2\2\u01c9\u0f08\3\2\2\2\u01cb\u0f16\3\2"+ + "\2\2\u01cd\u0f29\3\2\2\2\u01cf\u0f3c\3\2\2\2\u01d1\u0f4d\3\2\2\2\u01d3"+ + "\u0f5d\3\2\2\2\u01d5\u0f68\3\2\2\2\u01d7\u0f7a\3\2\2\2\u01d9\u0f7e\3\2"+ + "\2\2\u01db\u0f86\3\2\2\2\u01dd\u0f8d\3\2\2\2\u01df\u0f95\3\2\2\2\u01e1"+ + "\u0f9b\3\2\2\2\u01e3\u0fa8\3\2\2\2\u01e5\u0fac\3\2\2\2\u01e7\u0fb0\3\2"+ + "\2\2\u01e9\u0fb4\3\2\2\2\u01eb\u0fbb\3\2\2\2\u01ed\u0fc6\3\2\2\2\u01ef"+ + "\u0fd2\3\2\2\2\u01f1\u0fd6\3\2\2\2\u01f3\u0fde\3\2\2\2\u01f5\u0fe7\3\2"+ + "\2\2\u01f7\u0ff0\3\2\2\2\u01f9\u0ffd\3\2\2\2\u01fb\u100a\3\2\2\2\u01fd"+ + "\u101c\3\2\2\2\u01ff\u1026\3\2\2\2\u0201\u102e\3\2\2\2\u0203\u1036\3\2"+ + "\2\2\u0205\u103f\3\2\2\2\u0207\u1048\3\2\2\2\u0209\u1050\3\2\2\2\u020b"+ + "\u105f\3\2\2\2\u020d\u1063\3\2\2\2\u020f\u106c\3\2\2\2\u0211\u1073\3\2"+ + "\2\2\u0213\u107d\3\2\2\2\u0215\u1085\3\2\2\2\u0217\u108a\3\2\2\2\u0219"+ + "\u1093\3\2\2\2\u021b\u109c\3\2\2\2\u021d\u10aa\3\2\2\2\u021f\u10b2\3\2"+ + "\2\2\u0221\u10b9\3\2\2\2\u0223\u10bf\3\2\2\2\u0225\u10c9\3\2\2\2\u0227"+ + "\u10d3\3\2\2\2\u0229\u10d7\3\2\2\2\u022b\u10da\3\2\2\2\u022d\u10e2\3\2"+ + "\2\2\u022f\u10ed\3\2\2\2\u0231\u10fd\3\2\2\2\u0233\u110c\3\2\2\2\u0235"+ + "\u111b\3\2\2\2\u0237\u1121\3\2\2\2\u0239\u1128\3\2\2\2\u023b\u112c\3\2"+ + "\2\2\u023d\u1132\3\2\2\2\u023f\u1137\3\2\2\2\u0241\u113f\3\2\2\2\u0243"+ + "\u1145\3\2\2\2\u0245\u114b\3\2\2\2\u0247\u1154\3\2\2\2\u0249\u115a\3\2"+ + "\2\2\u024b\u1162\3\2\2\2\u024d\u116a\3\2\2\2\u024f\u1173\3\2\2\2\u0251"+ + "\u1181\3\2\2\2\u0253\u1188\3\2\2\2\u0255\u1195\3\2\2\2\u0257\u119c\3\2"+ + "\2\2\u0259\u11a2\3\2\2\2\u025b\u11ab\3\2\2\2\u025d\u11b0\3\2\2\2\u025f"+ + "\u11b8\3\2\2\2\u0261\u11c6\3\2\2\2\u0263\u11d2\3\2\2\2\u0265\u11da\3\2"+ + "\2\2\u0267\u11e1\3\2\2\2\u0269\u11e9\3\2\2\2\u026b\u11f4\3\2\2\2\u026d"+ + "\u11ff\3\2\2\2\u026f\u120b\3\2\2\2\u0271\u1216\3\2\2\2\u0273\u1221\3\2"+ + "\2\2\u0275\u122c\3\2\2\2\u0277\u123f\3\2\2\2\u0279\u1251\3\2\2\2\u027b"+ + "\u1261\3\2\2\2\u027d\u126a\3\2\2\2\u027f\u1272\3\2\2\2\u0281\u127f\3\2"+ + "\2\2\u0283\u1284\3\2\2\2\u0285\u1288\3\2\2\2\u0287\u1294\3\2\2\2\u0289"+ + "\u1299\3\2\2\2\u028b\u12a2\3\2\2\2\u028d\u12ad\3\2\2\2\u028f\u12ba\3\2"+ + "\2\2\u0291\u12c2\3\2\2\2\u0293\u12d2\3\2\2\2\u0295\u12df\3\2\2\2\u0297"+ + "\u12e9\3\2\2\2\u0299\u12f1\3\2\2\2\u029b\u12f9\3\2\2\2\u029d\u12fe\3\2"+ + "\2\2\u029f\u1301\3\2\2\2\u02a1\u130a\3\2\2\2\u02a3\u1314\3\2\2\2\u02a5"+ + "\u131c\3\2\2\2\u02a7\u1323\3\2\2\2\u02a9\u132e\3\2\2\2\u02ab\u1332\3\2"+ + "\2\2\u02ad\u1337\3\2\2\2\u02af\u133e\3\2\2\2\u02b1\u1346\3\2\2\2\u02b3"+ + "\u134c\3\2\2\2\u02b5\u1353\3\2\2\2\u02b7\u135a\3\2\2\2\u02b9\u135f\3\2"+ + "\2\2\u02bb\u1365\3\2\2\2\u02bd\u136c\3\2\2\2\u02bf\u1372\3\2\2\2\u02c1"+ + "\u137b\3\2\2\2\u02c3\u1385\3\2\2\2\u02c5\u138c\3\2\2\2\u02c7\u1393\3\2"+ + "\2\2\u02c9\u139c\3\2\2\2\u02cb\u13a8\3\2\2\2\u02cd\u13ad\3\2\2\2\u02cf"+ + "\u13b4\3\2\2\2\u02d1\u13bb\3\2\2\2\u02d3\u13cb\3\2\2\2\u02d5\u13d2\3\2"+ + "\2\2\u02d7\u13d8\3\2\2\2\u02d9\u13de\3\2\2\2\u02db\u13e4\3\2\2\2\u02dd"+ + "\u13ec\3\2\2\2\u02df\u13f2\3\2\2\2\u02e1\u13f7\3\2\2\2\u02e3\u1400\3\2"+ + "\2\2\u02e5\u1408\3\2\2\2\u02e7\u140f\3\2\2\2\u02e9\u1416\3\2\2\2\u02eb"+ + "\u1428\3\2\2\2\u02ed\u1430\3\2\2\2\u02ef\u1435\3\2\2\2\u02f1\u143a\3\2"+ + "\2\2\u02f3\u143f\3\2\2\2\u02f5\u1445\3\2\2\2\u02f7\u1450\3\2\2\2\u02f9"+ + "\u1462\3\2\2\2\u02fb\u1469\3\2\2\2\u02fd\u1471\3\2\2\2\u02ff\u147e\3\2"+ + "\2\2\u0301\u1486\3\2\2\2\u0303\u1494\3\2\2\2\u0305\u149c\3\2\2\2\u0307"+ + "\u14a5\3\2\2\2\u0309\u14af\3\2\2\2\u030b\u14b7\3\2\2\2\u030d\u14ba\3\2"+ + "\2\2\u030f\u14c4\3\2\2\2\u0311\u14c8\3\2\2\2\u0313\u14d2\3\2\2\2\u0315"+ + "\u14d9\3\2\2\2\u0317\u14de\3\2\2\2\u0319\u14ed\3\2\2\2\u031b\u14f6\3\2"+ + "\2\2\u031d\u14fb\3\2\2\2\u031f\u1502\3\2\2\2\u0321\u1507\3\2\2\2\u0323"+ + "\u150d\3\2\2\2\u0325\u1512\3\2\2\2\u0327\u1518\3\2\2\2\u0329\u1520\3\2"+ + "\2\2\u032b\u1525\3\2\2\2\u032d\u152c\3\2\2\2\u032f\u1541\3\2\2\2\u0331"+ + "\u1556\3\2\2\2\u0333\u1563\3\2\2\2\u0335\u157b\3\2\2\2\u0337\u1587\3\2"+ + "\2\2\u0339\u1597\3\2\2\2\u033b\u15a6\3\2\2\2\u033d\u15b6\3\2\2\2\u033f"+ + "\u15c2\3\2\2\2\u0341\u15d5\3\2\2\2\u0343\u15e0\3\2\2\2\u0345\u15ee\3\2"+ + "\2\2\u0347\u1600\3\2\2\2\u0349\u1610\3\2\2\2\u034b\u1622\3\2\2\2\u034d"+ + "\u1631\3\2\2\2\u034f\u1644\3\2\2\2\u0351\u1653\3\2\2\2\u0353\u1666\3\2"+ + "\2\2\u0355\u1672\3\2\2\2\u0357\u168b\3\2\2\2\u0359\u16a0\3\2\2\2\u035b"+ + "\u16a9\3\2\2\2\u035d\u16b2\3\2\2\2\u035f\u16c7\3\2\2\2\u0361\u16dc\3\2"+ + "\2\2\u0363\u16e3\3\2\2\2\u0365\u16ea\3\2\2\2\u0367\u16f0\3\2\2\2\u0369"+ + "\u16fd\3\2\2\2\u036b\u1701\3\2\2\2\u036d\u1709\3\2\2\2\u036f\u1712\3\2"+ + "\2\2\u0371\u1717\3\2\2\2\u0373\u171e\3\2\2\2\u0375\u1724\3\2\2\2\u0377"+ + "\u172a\3\2\2\2\u0379\u1736\3\2\2\2\u037b\u173b\3\2\2\2\u037d\u1741\3\2"+ + "\2\2\u037f\u1747\3\2\2\2\u0381\u174d\3\2\2\2\u0383\u1752\3\2\2\2\u0385"+ + "\u1755\3\2\2\2\u0387\u175f\3\2\2\2\u0389\u1764\3\2\2\2\u038b\u176c\3\2"+ + "\2\2\u038d\u1773\3\2\2\2\u038f\u1776\3\2\2\2\u0391\u1779\3\2\2\2\u0393"+ + "\u1786\3\2\2\2\u0395\u178a\3\2\2\2\u0397\u1791\3\2\2\2\u0399\u1796\3\2"+ + "\2\2\u039b\u179b\3\2\2\2\u039d\u17ab\3\2\2\2\u039f\u17b3\3\2\2\2\u03a1"+ + "\u17b9\3\2\2\2\u03a3\u17c3\3\2\2\2\u03a5\u17c8\3\2\2\2\u03a7\u17cf\3\2"+ + "\2\2\u03a9\u17d7\3\2\2\2\u03ab\u17e4\3\2\2\2\u03ad\u17ef\3\2\2\2\u03af"+ + "\u17f8\3\2\2\2\u03b1\u17fe\3\2\2\2\u03b3\u1805\3\2\2\2\u03b5\u1810\3\2"+ + "\2\2\u03b7\u1818\3\2\2\2\u03b9\u181d\3\2\2\2\u03bb\u1826\3\2\2\2\u03bd"+ + "\u182e\3\2\2\2\u03bf\u1837\3\2\2\2\u03c1\u183c\3\2\2\2\u03c3\u1848\3\2"+ + "\2\2\u03c5\u1850\3\2\2\2\u03c7\u1859\3\2\2\2\u03c9\u185f\3\2\2\2\u03cb"+ + "\u1865\3\2\2\2\u03cd\u186b\3\2\2\2\u03cf\u1873\3\2\2\2\u03d1\u187b\3\2"+ + "\2\2\u03d3\u188c\3\2\2\2\u03d5\u1896\3\2\2\2\u03d7\u189c\3\2\2\2\u03d9"+ + "\u18ab\3\2\2\2\u03db\u18b9\3\2\2\2\u03dd\u18c2\3\2\2\2\u03df\u18c9\3\2"+ + "\2\2\u03e1\u18d4\3\2\2\2\u03e3\u18db\3\2\2\2\u03e5\u18eb\3\2\2\2\u03e7"+ + "\u18fe\3\2\2\2\u03e9\u1912\3\2\2\2\u03eb\u1929\3\2\2\2\u03ed\u193e\3\2"+ + "\2\2\u03ef\u1956\3\2\2\2\u03f1\u1972\3\2\2\2\u03f3\u197e\3\2\2\2\u03f5"+ + "\u1984\3\2\2\2\u03f7\u198b\3\2\2\2\u03f9\u199d\3\2\2\2\u03fb\u19a5\3\2"+ + "\2\2\u03fd\u19aa\3\2\2\2\u03ff\u19b3\3\2\2\2\u0401\u19ba\3\2\2\2\u0403"+ + "\u19c1\3\2\2\2\u0405\u19c5\3\2\2\2\u0407\u19ca\3\2\2\2\u0409\u19d5\3\2"+ + "\2\2\u040b\u19df\3\2\2\2\u040d\u19e8\3\2\2\2\u040f\u19f1\3\2\2\2\u0411"+ + "\u19f8\3\2\2\2\u0413\u1a00\3\2\2\2\u0415\u1a06\3\2\2\2\u0417\u1a0d\3\2"+ + "\2\2\u0419\u1a14\3\2\2\2\u041b\u1a1b\3\2\2\2\u041d\u1a21\3\2\2\2\u041f"+ + "\u1a26\3\2\2\2\u0421\u1a2f\3\2\2\2\u0423\u1a36\3\2\2\2\u0425\u1a3b\3\2"+ + "\2\2\u0427\u1a42\3\2\2\2\u0429\u1a49\3\2\2\2\u042b\u1a50\3\2\2\2\u042d"+ + "\u1a60\3\2\2\2\u042f\u1a73\3\2\2\2\u0431\u1a84\3\2\2\2\u0433\u1a96\3\2"+ + "\2\2\u0435\u1aa0\3\2\2\2\u0437\u1aad\3\2\2\2\u0439\u1ab8\3\2\2\2\u043b"+ + "\u1abe\3\2\2\2\u043d\u1ac5\3\2\2\2\u043f\u1ad7\3\2\2\2\u0441\u1ae8\3\2"+ + "\2\2\u0443\u1afb\3\2\2\2\u0445\u1b02\3\2\2\2\u0447\u1b07\3\2\2\2\u0449"+ + "\u1b0f\3\2\2\2\u044b\u1b16\3\2\2\2\u044d\u1b1d\3\2\2\2\u044f\u1b2d\3\2"+ + "\2\2\u0451\u1b35\3\2\2\2\u0453\u1b42\3\2\2\2\u0455\u1b50\3\2\2\2\u0457"+ + "\u1b58\3\2\2\2\u0459\u1b5e\3\2\2\2\u045b\u1b67\3\2\2\2\u045d\u1b72\3\2"+ + "\2\2\u045f\u1b7d\3\2\2\2\u0461\u1b87\3\2\2\2\u0463\u1b91\3\2\2\2\u0465"+ + "\u1b96\3\2\2\2\u0467\u1ba2\3\2\2\2\u0469\u1bae\3\2\2\2\u046b\u1bbc\3\2"+ + "\2\2\u046d\u1bc5\3\2\2\2\u046f\u1bce\3\2\2\2\u0471\u1bd8\3\2\2\2\u0473"+ + "\u1be1\3\2\2\2\u0475\u1bf2\3\2\2\2\u0477\u1bfc\3\2\2\2\u0479\u1c04\3\2"+ + "\2\2\u047b\u1c0a\3\2\2\2\u047d\u1c12\3\2\2\2\u047f\u1c17\3\2\2\2\u0481"+ + "\u1c1f\3\2\2\2\u0483\u1c2e\3\2\2\2\u0485\u1c39\3\2\2\2\u0487\u1c3f\3\2"+ + "\2\2\u0489\u1c49\3\2\2\2\u048b\u1c4e\3\2\2\2\u048d\u1c56\3\2\2\2\u048f"+ + "\u1c5e\3\2\2\2\u0491\u1c63\3\2\2\2\u0493\u1c6c\3\2\2\2\u0495\u1c74\3\2"+ + "\2\2\u0497\u1c79\3\2\2\2\u0499\u1c81\3\2\2\2\u049b\u1c86\3\2\2\2\u049d"+ + "\u1c89\3\2\2\2\u049f\u1c8d\3\2\2\2\u04a1\u1c91\3\2\2\2\u04a3\u1c95\3\2"+ + "\2\2\u04a5\u1c99\3\2\2\2\u04a7\u1c9d\3\2\2\2\u04a9\u1ca6\3\2\2\2\u04ab"+ + "\u1cae\3\2\2\2\u04ad\u1cb4\3\2\2\2\u04af\u1cb8\3\2\2\2\u04b1\u1cbd\3\2"+ + "\2\2\u04b3\u1cc4\3\2\2\2\u04b5\u1cc9\3\2\2\2\u04b7\u1cd0\3\2\2\2\u04b9"+ + "\u1cdc\3\2\2\2\u04bb\u1ce3\3\2\2\2\u04bd\u1ceb\3\2\2\2\u04bf\u1cf3\3\2"+ + "\2\2\u04c1\u1cf8\3\2\2\2\u04c3\u1d00\3\2\2\2\u04c5\u1d07\3\2\2\2\u04c7"+ + "\u1d10\3\2\2\2\u04c9\u1d16\3\2\2\2\u04cb\u1d21\3\2\2\2\u04cd\u1d3c\3\2"+ + "\2\2\u04cf\u1d48\3\2\2\2\u04d1\u1d55\3\2\2\2\u04d3\u1d62\3\2\2\2\u04d5"+ + "\u1d7a\3\2\2\2\u04d7\u1d86\3\2\2\2\u04d9\u1d97\3\2\2\2\u04db\u1dac\3\2"+ + "\2\2\u04dd\u1dbb\3\2\2\2\u04df\u1dc9\3\2\2\2\u04e1\u1de1\3\2\2\2\u04e3"+ + "\u1df9\3\2\2\2\u04e5\u1e09\3\2\2\2\u04e7\u1e24\3\2\2\2\u04e9\u1e38\3\2"+ + "\2\2\u04eb\u1e50\3\2\2\2\u04ed\u1e65\3\2\2\2\u04ef\u1e79\3\2\2\2\u04f1"+ + "\u1e85\3\2\2\2\u04f3\u1ea2\3\2\2\2\u04f5\u1eae\3\2\2\2\u04f7\u1ebb\3\2"+ + "\2\2\u04f9\u1ed2\3\2\2\2\u04fb\u1ee9\3\2\2\2\u04fd\u1efd\3\2\2\2\u04ff"+ + "\u1f0e\3\2\2\2\u0501\u1f17\3\2\2\2\u0503\u1f1d\3\2\2\2\u0505\u1f22\3\2"+ + "\2\2\u0507\u1f29\3\2\2\2\u0509\u1f30\3\2\2\2\u050b\u1f37\3\2\2\2\u050d"+ + "\u1f3e\3\2\2\2\u050f\u1f44\3\2\2\2\u0511\u1f4a\3\2\2\2\u0513\u1f50\3\2"+ + "\2\2\u0515\u1f56\3\2\2\2\u0517\u1f5b\3\2\2\2\u0519\u1f63\3\2\2\2\u051b"+ + "\u1f69\3\2\2\2\u051d\u1f70\3\2\2\2\u051f\u1f74\3\2\2\2\u0521\u1f7c\3\2"+ + "\2\2\u0523\u1f82\3\2\2\2\u0525\u1f89\3\2\2\2\u0527\u1f8d\3\2\2\2\u0529"+ + "\u1f95\3\2\2\2\u052b\u1f9b\3\2\2\2\u052d\u1fa1\3\2\2\2\u052f\u1fa8\3\2"+ + "\2\2\u0531\u1faf\3\2\2\2\u0533\u1fb6\3\2\2\2\u0535\u1fbd\3\2\2\2\u0537"+ + "\u1fc3\3\2\2\2\u0539\u1fcc\3\2\2\2\u053b\u1fd1\3\2\2\2\u053d\u1fd6\3\2"+ + "\2\2\u053f\u1fdd\3\2\2\2\u0541\u1fe2\3\2\2\2\u0543\u1fe7\3\2\2\2\u0545"+ + "\u1fed\3\2\2\2\u0547\u1ff5\3\2\2\2\u0549\u1ffb\3\2\2\2\u054b\u2000\3\2"+ + "\2\2\u054d\u2008\3\2\2\2\u054f\u2010\3\2\2\2\u0551\u2018\3\2\2\2\u0553"+ + "\u2022\3\2\2\2\u0555\u2026\3\2\2\2\u0557\u2030\3\2\2\2\u0559\u2037\3\2"+ + "\2\2\u055b\u203e\3\2\2\2\u055d\u2049\3\2\2\2\u055f\u2050\3\2\2\2\u0561"+ + "\u2054\3\2\2\2\u0563\u205f\3\2\2\2\u0565\u2072\3\2\2\2\u0567\u2079\3\2"+ + "\2\2\u0569\u2084\3\2\2\2\u056b\u208e\3\2\2\2\u056d\u209a\3\2\2\2\u056f"+ + "\u20a7\3\2\2\2\u0571\u20ba\3\2\2\2\u0573\u20c9\3\2\2\2\u0575\u20d2\3\2"+ + "\2\2\u0577\u20dd\3\2\2\2\u0579\u20ed\3\2\2\2\u057b\u20f8\3\2\2\2\u057d"+ + "\u2105\3\2\2\2\u057f\u210b\3\2\2\2\u0581\u2113\3\2\2\2\u0583\u2117\3\2"+ + "\2\2\u0585\u211c\3\2\2\2\u0587\u2124\3\2\2\2\u0589\u212c\3\2\2\2\u058b"+ + "\u2138\3\2\2\2\u058d\u2144\3\2\2\2\u058f\u2149\3\2\2\2\u0591\u2152\3\2"+ + "\2\2\u0593\u2157\3\2\2\2\u0595\u215e\3\2\2\2\u0597\u2164\3\2\2\2\u0599"+ + "\u216a\3\2\2\2\u059b\u217d\3\2\2\2\u059d\u218f\3\2\2\2\u059f\u21a2\3\2"+ + "\2\2\u05a1\u21b2\3\2\2\2\u05a3\u21c4\3\2\2\2\u05a5\u21c9\3\2\2\2\u05a7"+ + "\u21cf\3\2\2\2\u05a9\u21d9\3\2\2\2\u05ab\u21dd\3\2\2\2\u05ad\u21e7\3\2"+ + "\2\2\u05af\u21f2\3\2\2\2\u05b1\u21f9\3\2\2\2\u05b3\u2206\3\2\2\2\u05b5"+ + "\u220b\3\2\2\2\u05b7\u2213\3\2\2\2\u05b9\u221c\3\2\2\2\u05bb\u222d\3\2"+ + "\2\2\u05bd\u2235\3\2\2\2\u05bf\u2241\3\2\2\2\u05c1\u224e\3\2\2\2\u05c3"+ + "\u2258\3\2\2\2\u05c5\u2261\3\2\2\2\u05c7\u2268\3\2\2\2\u05c9\u2272\3\2"+ + "\2\2\u05cb\u2280\3\2\2\2\u05cd\u2285\3\2\2\2\u05cf\u2290\3\2\2\2\u05d1"+ + "\u2294\3\2\2\2\u05d3\u2298\3\2\2\2\u05d5\u229e\3\2\2\2\u05d7\u22b9\3\2"+ + "\2\2\u05d9\u22d3\3\2\2\2\u05db\u22e8\3\2\2\2\u05dd\u22f6\3\2\2\2\u05df"+ + "\u22fe\3\2\2\2\u05e1\u2307\3\2\2\2\u05e3\u2313\3\2\2\2\u05e5\u231b\3\2"+ + "\2\2\u05e7\u2326\3\2\2\2\u05e9\u2330\3\2\2\2\u05eb\u233a\3\2\2\2\u05ed"+ + "\u2341\3\2\2\2\u05ef\u2349\3\2\2\2\u05f1\u2355\3\2\2\2\u05f3\u2361\3\2"+ + "\2\2\u05f5\u236b\3\2\2\2\u05f7\u2374\3\2\2\2\u05f9\u2378\3\2\2\2\u05fb"+ + "\u237f\3\2\2\2\u05fd\u2387\3\2\2\2\u05ff\u2390\3\2\2\2\u0601\u2399\3\2"+ + "\2\2\u0603\u23a0\3\2\2\2\u0605\u23a4\3\2\2\2\u0607\u23af\3\2\2\2\u0609"+ + "\u23bc\3\2\2\2\u060b\u23c9\3\2\2\2\u060d\u23cf\3\2\2\2\u060f\u23db\3\2"+ + "\2\2\u0611\u23e1\3\2\2\2\u0613\u23e8\3\2\2\2\u0615\u23f3\3\2\2\2\u0617"+ + "\u23ff\3\2\2\2\u0619\u2409\3\2\2\2\u061b\u2417\3\2\2\2\u061d\u2428\3\2"+ + "\2\2\u061f\u2438\3\2\2\2\u0621\u2453\3\2\2\2\u0623\u246d\3\2\2\2\u0625"+ + "\u247e\3\2\2\2\u0627\u248e\3\2\2\2\u0629\u2498\3\2\2\2\u062b\u24a5\3\2"+ + "\2\2\u062d\u24b2\3\2\2\2\u062f\u24be\3\2\2\2\u0631\u24c9\3\2\2\2\u0633"+ + "\u24d2\3\2\2\2\u0635\u24da\3\2\2\2\u0637\u24e3\3\2\2\2\u0639\u24ef\3\2"+ + "\2\2\u063b\u24fd\3\2\2\2\u063d\u2501\3\2\2\2\u063f\u2508\3\2\2\2\u0641"+ + "\u2513\3\2\2\2\u0643\u251e\3\2\2\2\u0645\u2528\3\2\2\2\u0647\u2532\3\2"+ + "\2\2\u0649\u2538\3\2\2\2\u064b\u2546\3\2\2\2\u064d\u2551\3\2\2\2\u064f"+ + "\u255a\3\2\2\2\u0651\u2562\3\2\2\2\u0653\u2569\3\2\2\2\u0655\u2572\3\2"+ + "\2\2\u0657\u257f\3\2\2\2\u0659\u2587\3\2\2\2\u065b\u2596\3\2\2\2\u065d"+ + "\u25a5\3\2\2\2\u065f\u25ad\3\2\2\2\u0661\u25ba\3\2\2\2\u0663\u25c9\3\2"+ + "\2\2\u0665\u25cf\3\2\2\2\u0667\u25d5\3\2\2\2\u0669\u25dc\3\2\2\2\u066b"+ + "\u25e9\3\2\2\2\u066d\u25f5\3\2\2\2\u066f\u2608\3\2\2\2\u0671\u261a\3\2"+ + "\2\2\u0673\u261d\3\2\2\2\u0675\u2627\3\2\2\2\u0677\u262e\3\2\2\2\u0679"+ + "\u2632\3\2\2\2\u067b\u2638\3\2\2\2\u067d\u263d\3\2\2\2\u067f\u2643\3\2"+ + "\2\2\u0681\u2648\3\2\2\2\u0683\u264e\3\2\2\2\u0685\u2657\3\2\2\2\u0687"+ + "\u2660\3\2\2\2\u0689\u2669\3\2\2\2\u068b\u2679\3\2\2\2\u068d\u2685\3\2"+ + "\2\2\u068f\u2691\3\2\2\2\u0691\u269a\3\2\2\2\u0693\u26a8\3\2\2\2\u0695"+ + "\u26b4\3\2\2\2\u0697\u26bf\3\2\2\2\u0699\u26c9\3\2\2\2\u069b\u26cd\3\2"+ + "\2\2\u069d\u26db\3\2\2\2\u069f\u26e8\3\2\2\2\u06a1\u26f2\3\2\2\2\u06a3"+ + "\u2701\3\2\2\2\u06a5\u270f\3\2\2\2\u06a7\u271d\3\2\2\2\u06a9\u272a\3\2"+ + "\2\2\u06ab\u2742\3\2\2\2\u06ad\u2759\3\2\2\2\u06af\u276c\3\2\2\2\u06b1"+ + "\u277e\3\2\2\2\u06b3\u2793\3\2\2\2\u06b5\u27a7\3\2\2\2\u06b7\u27b2\3\2"+ + "\2\2\u06b9\u27b9\3\2\2\2\u06bb\u27c7\3\2\2\2\u06bd\u27d8\3\2\2\2\u06bf"+ + "\u27e2\3\2\2\2\u06c1\u27e6\3\2\2\2\u06c3\u27f3\3\2\2\2\u06c5\u27f7\3\2"+ + "\2\2\u06c7\u2800\3\2\2\2\u06c9\u280b\3\2\2\2\u06cb\u2817\3\2\2\2\u06cd"+ + "\u281a\3\2\2\2\u06cf\u2828\3\2\2\2\u06d1\u2835\3\2\2\2\u06d3\u283c\3\2"+ + "\2\2\u06d5\u2849\3\2\2\2\u06d7\u2855\3\2\2\2\u06d9\u2865\3\2\2\2\u06db"+ + "\u2874\3\2\2\2\u06dd\u2878\3\2\2\2\u06df\u287e\3\2\2\2\u06e1\u2884\3\2"+ + "\2\2\u06e3\u288c\3\2\2\2\u06e5\u2891\3\2\2\2\u06e7\u289e\3\2\2\2\u06e9"+ + "\u28ab\3\2\2\2\u06eb\u28b3\3\2\2\2\u06ed\u28b9\3\2\2\2\u06ef\u28c3\3\2"+ + "\2\2\u06f1\u28c8\3\2\2\2\u06f3\u28ce\3\2\2\2\u06f5\u28da\3\2\2\2\u06f7"+ + "\u28e7\3\2\2\2\u06f9\u28eb\3\2\2\2\u06fb\u28f0\3\2\2\2\u06fd\u28f5\3\2"+ + "\2\2\u06ff\u2901\3\2\2\2\u0701\u2906\3\2\2\2\u0703\u290a\3\2\2\2\u0705"+ + "\u2910\3\2\2\2\u0707\u2918\3\2\2\2\u0709\u2934\3\2\2\2\u070b\u2939\3\2"+ + "\2\2\u070d\u293e\3\2\2\2\u070f\u2949\3\2\2\2\u0711\u2950\3\2\2\2\u0713"+ + "\u295c\3\2\2\2\u0715\u2964\3\2\2\2\u0717\u2970\3\2\2\2\u0719\u297a\3\2"+ + "\2\2\u071b\u2983\3\2\2\2\u071d\u298c\3\2\2\2\u071f\u2996\3\2\2\2\u0721"+ + "\u29a2\3\2\2\2\u0723\u29ae\3\2\2\2\u0725\u29b9\3\2\2\2\u0727\u29c7\3\2"+ + "\2\2\u0729\u29d4\3\2\2\2\u072b\u29e0\3\2\2\2\u072d\u29ec\3\2\2\2\u072f"+ + "\u29f8\3\2\2\2\u0731\u2a04\3\2\2\2\u0733\u2a0e\3\2\2\2\u0735\u2a1e\3\2"+ + "\2\2\u0737\u2a32\3\2\2\2\u0739\u2a45\3\2\2\2\u073b\u2a58\3\2\2\2\u073d"+ + "\u2a76\3\2\2\2\u073f\u2a93\3\2\2\2\u0741\u2aa7\3\2\2\2\u0743\u2aba\3\2"+ + "\2\2\u0745\u2ac7\3\2\2\2\u0747\u2ad7\3\2\2\2\u0749\u2ae7\3\2\2\2\u074b"+ + "\u2af6\3\2\2\2\u074d\u2b07\3\2\2\2\u074f\u2b17\3\2\2\2\u0751\u2b25\3\2"+ + "\2\2\u0753\u2b31\3\2\2\2\u0755\u2b3c\3\2\2\2\u0757\u2b48\3\2\2\2\u0759"+ + "\u2b58\3\2\2\2\u075b\u2b67\3\2\2\2\u075d\u2b7d\3\2\2\2\u075f\u2b92\3\2"+ + "\2\2\u0761\u2ba3\3\2\2\2\u0763\u2bb6\3\2\2\2\u0765\u2bca\3\2\2\2\u0767"+ + "\u2bd7\3\2\2\2\u0769\u2be3\3\2\2\2\u076b\u2bf4\3\2\2\2\u076d\u2c04\3\2"+ + "\2\2\u076f\u2c0e\3\2\2\2\u0771\u2c1e\3\2\2\2\u0773\u2c2d\3\2\2\2\u0775"+ + "\u2c40\3\2\2\2\u0777\u2c52\3\2\2\2\u0779\u2c5a\3\2\2\2\u077b\u2c68\3\2"+ + "\2\2\u077d\u2c79\3\2\2\2\u077f\u2c84\3\2\2\2\u0781\u2c8d\3\2\2\2\u0783"+ + "\u2c97\3\2\2\2\u0785\u2c9c\3\2\2\2\u0787\u2ca1\3\2\2\2\u0789\u2ca9\3\2"+ + "\2\2\u078b\u2cb9\3\2\2\2\u078d\u2cc1\3\2\2\2\u078f\u2ccd\3\2\2\2\u0791"+ + "\u2cd1\3\2\2\2\u0793\u2cda\3\2\2\2\u0795\u2ce7\3\2\2\2\u0797\u2cf5\3\2"+ + "\2\2\u0799\u2d01\3\2\2\2\u079b\u2d0d\3\2\2\2\u079d\u2d15\3\2\2\2\u079f"+ + "\u2d1f\3\2\2\2\u07a1\u2d27\3\2\2\2\u07a3\u2d32\3\2\2\2\u07a5\u2d38\3\2"+ + "\2\2\u07a7\u2d43\3\2\2\2\u07a9\u2d57\3\2\2\2\u07ab\u2d5d\3\2\2\2\u07ad"+ + "\u2d6c\3\2\2\2\u07af\u2d76\3\2\2\2\u07b1\u2d7c\3\2\2\2\u07b3\u2d81\3\2"+ + "\2\2\u07b5\u2d8c\3\2\2\2\u07b7\u2da7\3\2\2\2\u07b9\u2daf\3\2\2\2\u07bb"+ + "\u2dd1\3\2\2\2\u07bd\u2dd9\3\2\2\2\u07bf\u2de4\3\2\2\2\u07c1\u2df2\3\2"+ + "\2\2\u07c3\u2df9\3\2\2\2\u07c5\u2e02\3\2\2\2\u07c7\u2e04\3\2\2\2\u07c9"+ + "\u2e06\3\2\2\2\u07cb\u2e09\3\2\2\2\u07cd\u2e0c\3\2\2\2\u07cf\u2e0f\3\2"+ + "\2\2\u07d1\u2e12\3\2\2\2\u07d3\u2e15\3\2\2\2\u07d5\u2e18\3\2\2\2\u07d7"+ + "\u2e1b\3\2\2\2\u07d9\u2e1e\3\2\2\2\u07db\u2e21\3\2\2\2\u07dd\u2e23\3\2"+ + "\2\2\u07df\u2e25\3\2\2\2\u07e1\u2e27\3\2\2\2\u07e3\u2e29\3\2\2\2\u07e5"+ + "\u2e2c\3\2\2\2\u07e7\u2e2e\3\2\2\2\u07e9\u2e32\3\2\2\2\u07eb\u2e36\3\2"+ + "\2\2\u07ed\u2e38\3\2\2\2\u07ef\u2e3a\3\2\2\2\u07f1\u2e3c\3\2\2\2\u07f3"+ + "\u2e3e\3\2\2\2\u07f5\u2e40\3\2\2\2\u07f7\u2e42\3\2\2\2\u07f9\u2e44\3\2"+ + "\2\2\u07fb\u2e46\3\2\2\2\u07fd\u2e48\3\2\2\2\u07ff\u2e4a\3\2\2\2\u0801"+ + "\u2e4c\3\2\2\2\u0803\u2e4e\3\2\2\2\u0805\u2e50\3\2\2\2\u0807\u2e52\3\2"+ + "\2\2\u0809\u2e54\3\2\2\2\u080b\u2e56\3\2\2\2\u080d\u2e58\3\2\2\2\u080f"+ + "\u2e5a\3\2\2\2\u0811\u2e5c\3\2\2\2\u0813\u2e5e\3\2\2\2\u0815\u2e63\3\2"+ + "\2\2\u0817\u2e65\3\2\2\2\u0819\u2e6a\3\2\2\2\u081b\u2e70\3\2\2\2\u081d"+ + "\u2e76\3\2\2\2\u081f\u2e79\3\2\2\2\u0821\u2e90\3\2\2\2\u0823\u2ebd\3\2"+ + "\2\2\u0825\u2ebf\3\2\2\2\u0827\u2ec2\3\2\2\2\u0829\u2ec4\3\2\2\2\u082b"+ + "\u2ec7\3\2\2\2\u082d\u2eca\3\2\2\2\u082f\u2ecc\3\2\2\2\u0831\u2ed8\3\2"+ + "\2\2\u0833\u2ee1\3\2\2\2\u0835\u2eec\3\2\2\2\u0837\u2f1f\3\2\2\2\u0839"+ + "\u2f21\3\2\2\2\u083b\u2f3c\3\2\2\2\u083d\u2f4b\3\2\2\2\u083f\u2f4d\3\2"+ + "\2\2\u0841\u2f5a\3\2\2\2\u0843\u2f67\3\2\2\2\u0845\u2f69\3\2\2\2\u0847"+ + "\u2f6b\3\2\2\2\u0849\u2f74\3\2\2\2\u084b\u084d\t\2\2\2\u084c\u084b\3\2"+ + "\2\2\u084d\u084e\3\2\2\2\u084e\u084c\3\2\2\2\u084e\u084f\3\2\2\2\u084f"+ + "\u0850\3\2\2\2\u0850\u0851\b\2\2\2\u0851\4\3\2\2\2\u0852\u0853\7\61\2"+ + "\2\u0853\u0854\7,\2\2\u0854\u0855\7#\2\2\u0855\u0857\3\2\2\2\u0856\u0858"+ + "\13\2\2\2\u0857\u0856\3\2\2\2\u0858\u0859\3\2\2\2\u0859\u085a\3\2\2\2"+ + "\u0859\u0857\3\2\2\2\u085a\u085b\3\2\2\2\u085b\u085c\7,\2\2\u085c\u085d"+ + "\7\61\2\2\u085d\u085e\3\2\2\2\u085e\u085f\b\3\3\2\u085f\6\3\2\2\2\u0860"+ + "\u0861\7\61\2\2\u0861\u0862\7,\2\2\u0862\u0866\3\2\2\2\u0863\u0865\13"+ + "\2\2\2\u0864\u0863\3\2\2\2\u0865\u0868\3\2\2\2\u0866\u0867\3\2\2\2\u0866"+ + "\u0864\3\2\2\2\u0867\u0869\3\2\2\2\u0868\u0866\3\2\2\2\u0869\u086a\7,"+ + "\2\2\u086a\u086b\7\61\2\2\u086b\u086c\3\2\2\2\u086c\u086d\b\4\2\2\u086d"+ + "\b\3\2\2\2\u086e\u086f\7/\2\2\u086f\u0870\7/\2\2\u0870\u0873\7\"\2\2\u0871"+ + "\u0873\7%\2\2\u0872\u086e\3\2\2\2\u0872\u0871\3\2\2\2\u0873\u0877\3\2"+ + "\2\2\u0874\u0876\n\3\2\2\u0875\u0874\3\2\2\2\u0876\u0879\3\2\2\2\u0877"+ + "\u0875\3\2\2\2\u0877\u0878\3\2\2\2\u0878\u087f\3\2\2\2\u0879\u0877\3\2"+ + "\2\2\u087a\u087c\7\17\2\2\u087b\u087a\3\2\2\2\u087b\u087c\3\2\2\2\u087c"+ + "\u087d\3\2\2\2\u087d\u0880\7\f\2\2\u087e\u0880\7\2\2\3\u087f\u087b\3\2"+ + "\2\2\u087f\u087e\3\2\2\2\u0880\u088c\3\2\2\2\u0881\u0882\7/\2\2\u0882"+ + "\u0883\7/\2\2\u0883\u0889\3\2\2\2\u0884\u0886\7\17\2\2\u0885\u0884\3\2"+ + "\2\2\u0885\u0886\3\2\2\2\u0886\u0887\3\2\2\2\u0887\u088a\7\f\2\2\u0888"+ + "\u088a\7\2\2\3\u0889\u0885\3\2\2\2\u0889\u0888\3\2\2\2\u088a\u088c\3\2"+ + "\2\2\u088b\u0872\3\2\2\2\u088b\u0881\3\2\2\2\u088c\u088d\3\2\2\2\u088d"+ + "\u088e\b\5\2\2\u088e\n\3\2\2\2\u088f\u0890\7C\2\2\u0890\u0891\7F\2\2\u0891"+ + "\u0892\7F\2\2\u0892\f\3\2\2\2\u0893\u0894\7C\2\2\u0894\u0895\7N\2\2\u0895"+ + "\u0896\7N\2\2\u0896\16\3\2\2\2\u0897\u0898\7C\2\2\u0898\u0899\7N\2\2\u0899"+ + "\u089a\7V\2\2\u089a\u089b\7G\2\2\u089b\u089c\7T\2\2\u089c\20\3\2\2\2\u089d"+ + "\u089e\7C\2\2\u089e\u089f\7N\2\2\u089f\u08a0\7Y\2\2\u08a0\u08a1\7C\2\2"+ + "\u08a1\u08a2\7[\2\2\u08a2\u08a3\7U\2\2\u08a3\22\3\2\2\2\u08a4\u08a5\7"+ + "C\2\2\u08a5\u08a6\7P\2\2\u08a6\u08a7\7C\2\2\u08a7\u08a8\7N\2\2\u08a8\u08a9"+ + "\7[\2\2\u08a9\u08aa\7\\\2\2\u08aa\u08ab\7G\2\2\u08ab\24\3\2\2\2\u08ac"+ + "\u08ad\7C\2\2\u08ad\u08ae\7P\2\2\u08ae\u08af\7F\2\2\u08af\26\3\2\2\2\u08b0"+ + "\u08b1\7C\2\2\u08b1\u08b2\7U\2\2\u08b2\30\3\2\2\2\u08b3\u08b4\7C\2\2\u08b4"+ + "\u08b5\7U\2\2\u08b5\u08b6\7E\2\2\u08b6\32\3\2\2\2\u08b7\u08b8\7D\2\2\u08b8"+ + "\u08b9\7G\2\2\u08b9\u08ba\7H\2\2\u08ba\u08bb\7Q\2\2\u08bb\u08bc\7T\2\2"+ + "\u08bc\u08bd\7G\2\2\u08bd\34\3\2\2\2\u08be\u08bf\7D\2\2\u08bf\u08c0\7"+ + "G\2\2\u08c0\u08c1\7V\2\2\u08c1\u08c2\7Y\2\2\u08c2\u08c3\7G\2\2\u08c3\u08c4"+ + "\7G\2\2\u08c4\u08c5\7P\2\2\u08c5\36\3\2\2\2\u08c6\u08c7\7D\2\2\u08c7\u08c8"+ + "\7Q\2\2\u08c8\u08c9\7V\2\2\u08c9\u08ca\7J\2\2\u08ca \3\2\2\2\u08cb\u08cc"+ + "\7D\2\2\u08cc\u08cd\7[\2\2\u08cd\"\3\2\2\2\u08ce\u08cf\7E\2\2\u08cf\u08d0"+ + "\7C\2\2\u08d0\u08d1\7N\2\2\u08d1\u08d2\7N\2\2\u08d2$\3\2\2\2\u08d3\u08d4"+ + "\7E\2\2\u08d4\u08d5\7C\2\2\u08d5\u08d6\7U\2\2\u08d6\u08d7\7E\2\2\u08d7"+ + "\u08d8\7C\2\2\u08d8\u08d9\7F\2\2\u08d9\u08da\7G\2\2\u08da&\3\2\2\2\u08db"+ + "\u08dc\7E\2\2\u08dc\u08dd\7C\2\2\u08dd\u08de\7U\2\2\u08de\u08df\7G\2\2"+ + "\u08df(\3\2\2\2\u08e0\u08e1\7E\2\2\u08e1\u08e2\7C\2\2\u08e2\u08e3\7U\2"+ + "\2\u08e3\u08e4\7V\2\2\u08e4*\3\2\2\2\u08e5\u08e6\7E\2\2\u08e6\u08e7\7"+ + "J\2\2\u08e7\u08e8\7C\2\2\u08e8\u08e9\7P\2\2\u08e9\u08ea\7I\2\2\u08ea\u08eb"+ + "\7G\2\2\u08eb,\3\2\2\2\u08ec\u08ed\7E\2\2\u08ed\u08ee\7J\2\2\u08ee\u08ef"+ + "\7C\2\2\u08ef\u08f0\7T\2\2\u08f0\u08f1\7C\2\2\u08f1\u08f2\7E\2\2\u08f2"+ + "\u08f3\7V\2\2\u08f3\u08f4\7G\2\2\u08f4\u08f5\7T\2\2\u08f5.\3\2\2\2\u08f6"+ + "\u08f7\7E\2\2\u08f7\u08f8\7J\2\2\u08f8\u08f9\7G\2\2\u08f9\u08fa\7E\2\2"+ + "\u08fa\u08fb\7M\2\2\u08fb\60\3\2\2\2\u08fc\u08fd\7E\2\2\u08fd\u08fe\7"+ + "Q\2\2\u08fe\u08ff\7N\2\2\u08ff\u0900\7N\2\2\u0900\u0901\7C\2\2\u0901\u0902"+ + "\7V\2\2\u0902\u0903\7G\2\2\u0903\62\3\2\2\2\u0904\u0905\7E\2\2\u0905\u0906"+ + "\7Q\2\2\u0906\u0907\7N\2\2\u0907\u0908\7W\2\2\u0908\u0909\7O\2\2\u0909"+ + "\u090a\7P\2\2\u090a\64\3\2\2\2\u090b\u090c\7E\2\2\u090c\u090d\7Q\2\2\u090d"+ + "\u090e\7P\2\2\u090e\u090f\7F\2\2\u090f\u0910\7K\2\2\u0910\u0911\7V\2\2"+ + "\u0911\u0912\7K\2\2\u0912\u0913\7Q\2\2\u0913\u0914\7P\2\2\u0914\66\3\2"+ + "\2\2\u0915\u0916\7E\2\2\u0916\u0917\7Q\2\2\u0917\u0918\7P\2\2\u0918\u0919"+ + "\7U\2\2\u0919\u091a\7V\2\2\u091a\u091b\7T\2\2\u091b\u091c\7C\2\2\u091c"+ + "\u091d\7K\2\2\u091d\u091e\7P\2\2\u091e\u091f\7V\2\2\u091f8\3\2\2\2\u0920"+ + "\u0921\7E\2\2\u0921\u0922\7Q\2\2\u0922\u0923\7P\2\2\u0923\u0924\7V\2\2"+ + "\u0924\u0925\7K\2\2\u0925\u0926\7P\2\2\u0926\u0927\7W\2\2\u0927\u0928"+ + "\7G\2\2\u0928:\3\2\2\2\u0929\u092a\7E\2\2\u092a\u092b\7Q\2\2\u092b\u092c"+ + "\7P\2\2\u092c\u092d\7X\2\2\u092d\u092e\7G\2\2\u092e\u092f\7T\2\2\u092f"+ + "\u0930\7V\2\2\u0930<\3\2\2\2\u0931\u0932\7E\2\2\u0932\u0933\7T\2\2\u0933"+ + "\u0934\7G\2\2\u0934\u0935\7C\2\2\u0935\u0936\7V\2\2\u0936\u0937\7G\2\2"+ + "\u0937>\3\2\2\2\u0938\u0939\7E\2\2\u0939\u093a\7T\2\2\u093a\u093b\7Q\2"+ + "\2\u093b\u093c\7U\2\2\u093c\u093d\7U\2\2\u093d@\3\2\2\2\u093e\u093f\7"+ + "E\2\2\u093f\u0940\7W\2\2\u0940\u0941\7T\2\2\u0941\u0942\7T\2\2\u0942\u0943"+ + "\7G\2\2\u0943\u0944\7P\2\2\u0944\u0945\7V\2\2\u0945B\3\2\2\2\u0946\u0947"+ + "\7E\2\2\u0947\u0948\7W\2\2\u0948\u0949\7T\2\2\u0949\u094a\7T\2\2\u094a"+ + "\u094b\7G\2\2\u094b\u094c\7P\2\2\u094c\u094d\7V\2\2\u094d\u094e\7a\2\2"+ + "\u094e\u094f\7W\2\2\u094f\u0950\7U\2\2\u0950\u0951\7G\2\2\u0951\u0952"+ + "\7T\2\2\u0952D\3\2\2\2\u0953\u0954\7E\2\2\u0954\u0955\7W\2\2\u0955\u0956"+ + "\7T\2\2\u0956\u0957\7U\2\2\u0957\u0958\7Q\2\2\u0958\u0959\7T\2\2\u0959"+ + "F\3\2\2\2\u095a\u095b\7F\2\2\u095b\u095c\7C\2\2\u095c\u095d\7V\2\2\u095d"+ + "\u095e\7C\2\2\u095e\u095f\7D\2\2\u095f\u0960\7C\2\2\u0960\u0961\7U\2\2"+ + "\u0961\u0962\7G\2\2\u0962H\3\2\2\2\u0963\u0964\7F\2\2\u0964\u0965\7C\2"+ + "\2\u0965\u0966\7V\2\2\u0966\u0967\7C\2\2\u0967\u0968\7D\2\2\u0968\u0969"+ + "\7C\2\2\u0969\u096a\7U\2\2\u096a\u096b\7G\2\2\u096b\u096c\7U\2\2\u096c"+ + "J\3\2\2\2\u096d\u096e\7F\2\2\u096e\u096f\7G\2\2\u096f\u0970\7E\2\2\u0970"+ + "\u0971\7N\2\2\u0971\u0972\7C\2\2\u0972\u0973\7T\2\2\u0973\u0974\7G\2\2"+ + "\u0974L\3\2\2\2\u0975\u0976\7F\2\2\u0976\u0977\7G\2\2\u0977\u0978\7H\2"+ + "\2\u0978\u0979\7C\2\2\u0979\u097a\7W\2\2\u097a\u097b\7N\2\2\u097b\u097c"+ + "\7V\2\2\u097cN\3\2\2\2\u097d\u097e\7F\2\2\u097e\u097f\7G\2\2\u097f\u0980"+ + "\7N\2\2\u0980\u0981\7C\2\2\u0981\u0982\7[\2\2\u0982\u0983\7G\2\2\u0983"+ + "\u0984\7F\2\2\u0984P\3\2\2\2\u0985\u0986\7F\2\2\u0986\u0987\7G\2\2\u0987"+ + "\u0988\7N\2\2\u0988\u0989\7G\2\2\u0989\u098a\7V\2\2\u098a\u098b\7G\2\2"+ + "\u098bR\3\2\2\2\u098c\u098d\7F\2\2\u098d\u098e\7G\2\2\u098e\u098f\7U\2"+ + "\2\u098f\u0990\7E\2\2\u0990T\3\2\2\2\u0991\u0992\7F\2\2\u0992\u0993\7"+ + "G\2\2\u0993\u0994\7U\2\2\u0994\u0995\7E\2\2\u0995\u0996\7T\2\2\u0996\u0997"+ + "\7K\2\2\u0997\u0998\7D\2\2\u0998\u0999\7G\2\2\u0999V\3\2\2\2\u099a\u099b"+ + "\7F\2\2\u099b\u099c\7G\2\2\u099c\u099d\7V\2\2\u099d\u099e\7G\2\2\u099e"+ + "\u099f\7T\2\2\u099f\u09a0\7O\2\2\u09a0\u09a1\7K\2\2\u09a1\u09a2\7P\2\2"+ + "\u09a2\u09a3\7K\2\2\u09a3\u09a4\7U\2\2\u09a4\u09a5\7V\2\2\u09a5\u09a6"+ + "\7K\2\2\u09a6\u09a7\7E\2\2\u09a7X\3\2\2\2\u09a8\u09a9\7F\2\2\u09a9\u09aa"+ + "\7K\2\2\u09aa\u09ab\7C\2\2\u09ab\u09ac\7I\2\2\u09ac\u09ad\7P\2\2\u09ad"+ + "\u09ae\7Q\2\2\u09ae\u09af\7U\2\2\u09af\u09b0\7V\2\2\u09b0\u09b1\7K\2\2"+ + "\u09b1\u09b2\7E\2\2\u09b2\u09b3\7U\2\2\u09b3Z\3\2\2\2\u09b4\u09b5\7F\2"+ + "\2\u09b5\u09b6\7K\2\2\u09b6\u09b7\7U\2\2\u09b7\u09b8\7V\2\2\u09b8\u09b9"+ + "\7K\2\2\u09b9\u09ba\7P\2\2\u09ba\u09bb\7E\2\2\u09bb\u09bc\7V\2\2\u09bc"+ + "\\\3\2\2\2\u09bd\u09be\7F\2\2\u09be\u09bf\7K\2\2\u09bf\u09c0\7U\2\2\u09c0"+ + "\u09c1\7V\2\2\u09c1\u09c2\7K\2\2\u09c2\u09c3\7P\2\2\u09c3\u09c4\7E\2\2"+ + "\u09c4\u09c5\7V\2\2\u09c5\u09c6\7T\2\2\u09c6\u09c7\7Q\2\2\u09c7\u09c8"+ + "\7Y\2\2\u09c8^\3\2\2\2\u09c9\u09ca\7F\2\2\u09ca\u09cb\7T\2\2\u09cb\u09cc"+ + "\7Q\2\2\u09cc\u09cd\7R\2\2\u09cd`\3\2\2\2\u09ce\u09cf\7G\2\2\u09cf\u09d0"+ + "\7C\2\2\u09d0\u09d1\7E\2\2\u09d1\u09d2\7J\2\2\u09d2b\3\2\2\2\u09d3\u09d4"+ + "\7G\2\2\u09d4\u09d5\7N\2\2\u09d5\u09d6\7U\2\2\u09d6\u09d7\7G\2\2\u09d7"+ + "d\3\2\2\2\u09d8\u09d9\7G\2\2\u09d9\u09da\7N\2\2\u09da\u09db\7U\2\2\u09db"+ + "\u09dc\7G\2\2\u09dc\u09dd\7K\2\2\u09dd\u09de\7H\2\2\u09def\3\2\2\2\u09df"+ + "\u09e0\7G\2\2\u09e0\u09e1\7P\2\2\u09e1\u09e2\7E\2\2\u09e2\u09e3\7N\2\2"+ + "\u09e3\u09e4\7Q\2\2\u09e4\u09e5\7U\2\2\u09e5\u09e6\7G\2\2\u09e6\u09e7"+ + "\7F\2\2\u09e7h\3\2\2\2\u09e8\u09e9\7G\2\2\u09e9\u09ea\7U\2\2\u09ea\u09eb"+ + "\7E\2\2\u09eb\u09ec\7C\2\2\u09ec\u09ed\7R\2\2\u09ed\u09ee\7G\2\2\u09ee"+ + "\u09ef\7F\2\2\u09efj\3\2\2\2\u09f0\u09f1\7G\2\2\u09f1\u09f2\7Z\2\2\u09f2"+ + "\u09f3\7K\2\2\u09f3\u09f4\7U\2\2\u09f4\u09f5\7V\2\2\u09f5\u09f6\7U\2\2"+ + "\u09f6l\3\2\2\2\u09f7\u09f8\7G\2\2\u09f8\u09f9\7Z\2\2\u09f9\u09fa\7K\2"+ + "\2\u09fa\u09fb\7V\2\2\u09fbn\3\2\2\2\u09fc\u09fd\7G\2\2\u09fd\u09fe\7"+ + "Z\2\2\u09fe\u09ff\7R\2\2\u09ff\u0a00\7N\2\2\u0a00\u0a01\7C\2\2\u0a01\u0a02"+ + "\7K\2\2\u0a02\u0a03\7P\2\2\u0a03p\3\2\2\2\u0a04\u0a05\7H\2\2\u0a05\u0a06"+ + "\7C\2\2\u0a06\u0a07\7N\2\2\u0a07\u0a08\7U\2\2\u0a08\u0a09\7G\2\2\u0a09"+ + "r\3\2\2\2\u0a0a\u0a0b\7H\2\2\u0a0b\u0a0c\7G\2\2\u0a0c\u0a0d\7V\2\2\u0a0d"+ + "\u0a0e\7E\2\2\u0a0e\u0a0f\7J\2\2\u0a0ft\3\2\2\2\u0a10\u0a11\7H\2\2\u0a11"+ + "\u0a12\7Q\2\2\u0a12\u0a13\7T\2\2\u0a13v\3\2\2\2\u0a14\u0a15\7H\2\2\u0a15"+ + "\u0a16\7Q\2\2\u0a16\u0a17\7T\2\2\u0a17\u0a18\7E\2\2\u0a18\u0a19\7G\2\2"+ + "\u0a19x\3\2\2\2\u0a1a\u0a1b\7H\2\2\u0a1b\u0a1c\7Q\2\2\u0a1c\u0a1d\7T\2"+ + "\2\u0a1d\u0a1e\7G\2\2\u0a1e\u0a1f\7K\2\2\u0a1f\u0a20\7I\2\2\u0a20\u0a21"+ + "\7P\2\2\u0a21z\3\2\2\2\u0a22\u0a23\7H\2\2\u0a23\u0a24\7T\2\2\u0a24\u0a25"+ + "\7Q\2\2\u0a25\u0a26\7O\2\2\u0a26|\3\2\2\2\u0a27\u0a28\7H\2\2\u0a28\u0a29"+ + "\7W\2\2\u0a29\u0a2a\7N\2\2\u0a2a\u0a2b\7N\2\2\u0a2b\u0a2c\7V\2\2\u0a2c"+ + "\u0a2d\7G\2\2\u0a2d\u0a2e\7Z\2\2\u0a2e\u0a2f\7V\2\2\u0a2f~\3\2\2\2\u0a30"+ + "\u0a31\7I\2\2\u0a31\u0a32\7G\2\2\u0a32\u0a33\7P\2\2\u0a33\u0a34\7G\2\2"+ + "\u0a34\u0a35\7T\2\2\u0a35\u0a36\7C\2\2\u0a36\u0a37\7V\2\2\u0a37\u0a38"+ + "\7G\2\2\u0a38\u0a39\7F\2\2\u0a39\u0080\3\2\2\2\u0a3a\u0a3b\7I\2\2\u0a3b"+ + "\u0a3c\7G\2\2\u0a3c\u0a3d\7V\2\2\u0a3d\u0082\3\2\2\2\u0a3e\u0a3f\7I\2"+ + "\2\u0a3f\u0a40\7T\2\2\u0a40\u0a41\7C\2\2\u0a41\u0a42\7P\2\2\u0a42\u0a43"+ + "\7V\2\2\u0a43\u0084\3\2\2\2\u0a44\u0a45\7I\2\2\u0a45\u0a46\7T\2\2\u0a46"+ + "\u0a47\7Q\2\2\u0a47\u0a48\7W\2\2\u0a48\u0a49\7R\2\2\u0a49\u0086\3\2\2"+ + "\2\u0a4a\u0a4b\7J\2\2\u0a4b\u0a4c\7C\2\2\u0a4c\u0a4d\7X\2\2\u0a4d\u0a4e"+ + "\7K\2\2\u0a4e\u0a4f\7P\2\2\u0a4f\u0a50\7I\2\2\u0a50\u0088\3\2\2\2\u0a51"+ + "\u0a52\7J\2\2\u0a52\u0a53\7K\2\2\u0a53\u0a54\7I\2\2\u0a54\u0a55\7J\2\2"+ + "\u0a55\u0a56\7a\2\2\u0a56\u0a57\7R\2\2\u0a57\u0a58\7T\2\2\u0a58\u0a59"+ + "\7K\2\2\u0a59\u0a5a\7Q\2\2\u0a5a\u0a5b\7T\2\2\u0a5b\u0a5c\7K\2\2\u0a5c"+ + "\u0a5d\7V\2\2\u0a5d\u0a5e\7[\2\2\u0a5e\u008a\3\2\2\2\u0a5f\u0a60\7K\2"+ + "\2\u0a60\u0a61\7H\2\2\u0a61\u008c\3\2\2\2\u0a62\u0a63\7K\2\2\u0a63\u0a64"+ + "\7I\2\2\u0a64\u0a65\7P\2\2\u0a65\u0a66\7Q\2\2\u0a66\u0a67\7T\2\2\u0a67"+ + "\u0a68\7G\2\2\u0a68\u008e\3\2\2\2\u0a69\u0a6a\7K\2\2\u0a6a\u0a6b\7P\2"+ + "\2\u0a6b\u0090\3\2\2\2\u0a6c\u0a6d\7K\2\2\u0a6d\u0a6e\7P\2\2\u0a6e\u0a6f"+ + "\7F\2\2\u0a6f\u0a70\7G\2\2\u0a70\u0a71\7Z\2\2\u0a71\u0092\3\2\2\2\u0a72"+ + "\u0a73\7K\2\2\u0a73\u0a74\7P\2\2\u0a74\u0a75\7H\2\2\u0a75\u0a76\7K\2\2"+ + "\u0a76\u0a77\7N\2\2\u0a77\u0a78\7G\2\2\u0a78\u0094\3\2\2\2\u0a79\u0a7a"+ + "\7K\2\2\u0a7a\u0a7b\7P\2\2\u0a7b\u0a7c\7P\2\2\u0a7c\u0a7d\7G\2\2\u0a7d"+ + "\u0a7e\7T\2\2\u0a7e\u0096\3\2\2\2\u0a7f\u0a80\7K\2\2\u0a80\u0a81\7P\2"+ + "\2\u0a81\u0a82\7Q\2\2\u0a82\u0a83\7W\2\2\u0a83\u0a84\7V\2\2\u0a84\u0098"+ + "\3\2\2\2\u0a85\u0a86\7K\2\2\u0a86\u0a87\7P\2\2\u0a87\u0a88\7U\2\2\u0a88"+ + "\u0a89\7G\2\2\u0a89\u0a8a\7T\2\2\u0a8a\u0a8b\7V\2\2\u0a8b\u009a\3\2\2"+ + "\2\u0a8c\u0a8d\7K\2\2\u0a8d\u0a8e\7P\2\2\u0a8e\u0a8f\7V\2\2\u0a8f\u0a90"+ + "\7G\2\2\u0a90\u0a91\7T\2\2\u0a91\u0a92\7X\2\2\u0a92\u0a93\7C\2\2\u0a93"+ + "\u0a94\7N\2\2\u0a94\u009c\3\2\2\2\u0a95\u0a96\7K\2\2\u0a96\u0a97\7P\2"+ + "\2\u0a97\u0a98\7V\2\2\u0a98\u0a99\7Q\2\2\u0a99\u009e\3\2\2\2\u0a9a\u0a9b"+ + "\7K\2\2\u0a9b\u0a9c\7U\2\2\u0a9c\u00a0\3\2\2\2\u0a9d\u0a9e\7K\2\2\u0a9e"+ + "\u0a9f\7V\2\2\u0a9f\u0aa0\7G\2\2\u0aa0\u0aa1\7T\2\2\u0aa1\u0aa2\7C\2\2"+ + "\u0aa2\u0aa3\7V\2\2\u0aa3\u0aa4\7G\2\2\u0aa4\u00a2\3\2\2\2\u0aa5\u0aa6"+ + "\7L\2\2\u0aa6\u0aa7\7Q\2\2\u0aa7\u0aa8\7K\2\2\u0aa8\u0aa9\7P\2\2\u0aa9"+ + "\u00a4\3\2\2\2\u0aaa\u0aab\7M\2\2\u0aab\u0aac\7G\2\2\u0aac\u0aad\7[\2"+ + "\2\u0aad\u00a6\3\2\2\2\u0aae\u0aaf\7M\2\2\u0aaf\u0ab0\7G\2\2\u0ab0\u0ab1"+ + "\7[\2\2\u0ab1\u0ab2\7U\2\2\u0ab2\u00a8\3\2\2\2\u0ab3\u0ab4\7M\2\2\u0ab4"+ + "\u0ab5\7K\2\2\u0ab5\u0ab6\7N\2\2\u0ab6\u0ab7\7N\2\2\u0ab7\u00aa\3\2\2"+ + "\2\u0ab8\u0ab9\7N\2\2\u0ab9\u0aba\7G\2\2\u0aba\u0abb\7C\2\2\u0abb\u0abc"+ + "\7F\2\2\u0abc\u0abd\7K\2\2\u0abd\u0abe\7P\2\2\u0abe\u0abf\7I\2\2\u0abf"+ + "\u00ac\3\2\2\2\u0ac0\u0ac1\7N\2\2\u0ac1\u0ac2\7G\2\2\u0ac2\u0ac3\7C\2"+ + "\2\u0ac3\u0ac4\7X\2\2\u0ac4\u0ac5\7G\2\2\u0ac5\u00ae\3\2\2\2\u0ac6\u0ac7"+ + "\7N\2\2\u0ac7\u0ac8\7G\2\2\u0ac8\u0ac9\7H\2\2\u0ac9\u0aca\7V\2\2\u0aca"+ + "\u00b0\3\2\2\2\u0acb\u0acc\7N\2\2\u0acc\u0acd\7K\2\2\u0acd\u0ace\7M\2"+ + "\2\u0ace\u0acf\7G\2\2\u0acf\u00b2\3\2\2\2\u0ad0\u0ad1\7N\2\2\u0ad1\u0ad2"+ + "\7K\2\2\u0ad2\u0ad3\7O\2\2\u0ad3\u0ad4\7K\2\2\u0ad4\u0ad5\7V\2\2\u0ad5"+ + "\u00b4\3\2\2\2\u0ad6\u0ad7\7N\2\2\u0ad7\u0ad8\7K\2\2\u0ad8\u0ad9\7P\2"+ + "\2\u0ad9\u0ada\7G\2\2\u0ada\u0adb\7C\2\2\u0adb\u0adc\7T\2\2\u0adc\u00b6"+ + "\3\2\2\2\u0add\u0ade\7N\2\2\u0ade\u0adf\7K\2\2\u0adf\u0ae0\7P\2\2\u0ae0"+ + "\u0ae1\7G\2\2\u0ae1\u0ae2\7U\2\2\u0ae2\u00b8\3\2\2\2\u0ae3\u0ae4\7N\2"+ + "\2\u0ae4\u0ae5\7Q\2\2\u0ae5\u0ae6\7C\2\2\u0ae6\u0ae7\7F\2\2\u0ae7\u00ba"+ + "\3\2\2\2\u0ae8\u0ae9\7N\2\2\u0ae9\u0aea\7Q\2\2\u0aea\u0aeb\7E\2\2\u0aeb"+ + "\u0aec\7M\2\2\u0aec\u00bc\3\2\2\2\u0aed\u0aee\7N\2\2\u0aee\u0aef\7Q\2"+ + "\2\u0aef\u0af0\7Q\2\2\u0af0\u0af1\7R\2\2\u0af1\u00be\3\2\2\2\u0af2\u0af3"+ + "\7N\2\2\u0af3\u0af4\7Q\2\2\u0af4\u0af5\7Y\2\2\u0af5\u0af6\7a\2\2\u0af6"+ + "\u0af7\7R\2\2\u0af7\u0af8\7T\2\2\u0af8\u0af9\7K\2\2\u0af9\u0afa\7Q\2\2"+ + "\u0afa\u0afb\7T\2\2\u0afb\u0afc\7K\2\2\u0afc\u0afd\7V\2\2\u0afd\u0afe"+ + "\7[\2\2\u0afe\u00c0\3\2\2\2\u0aff\u0b00\7O\2\2\u0b00\u0b01\7C\2\2\u0b01"+ + "\u0b02\7U\2\2\u0b02\u0b03\7V\2\2\u0b03\u0b04\7G\2\2\u0b04\u0b05\7T\2\2"+ + "\u0b05\u0b06\7a\2\2\u0b06\u0b07\7D\2\2\u0b07\u0b08\7K\2\2\u0b08\u0b09"+ + "\7P\2\2\u0b09\u0b0a\7F\2\2\u0b0a\u00c2\3\2\2\2\u0b0b\u0b0c\7O\2\2\u0b0c"+ + "\u0b0d\7C\2\2\u0b0d\u0b0e\7U\2\2\u0b0e\u0b0f\7V\2\2\u0b0f\u0b10\7G\2\2"+ + "\u0b10\u0b11\7T\2\2\u0b11\u0b12\7a\2\2\u0b12\u0b13\7U\2\2\u0b13\u0b14"+ + "\7U\2\2\u0b14\u0b15\7N\2\2\u0b15\u0b16\7a\2\2\u0b16\u0b17\7X\2\2\u0b17"+ + "\u0b18\7G\2\2\u0b18\u0b19\7T\2\2\u0b19\u0b1a\7K\2\2\u0b1a\u0b1b\7H\2\2"+ + "\u0b1b\u0b1c\7[\2\2\u0b1c\u0b1d\7a\2\2\u0b1d\u0b1e\7U\2\2\u0b1e\u0b1f"+ + "\7G\2\2\u0b1f\u0b20\7T\2\2\u0b20\u0b21\7X\2\2\u0b21\u0b22"; + private static final String _serializedATNSegment2 = + "\7G\2\2\u0b22\u0b23\7T\2\2\u0b23\u0b24\7a\2\2\u0b24\u0b25\7E\2\2\u0b25"+ + "\u0b26\7G\2\2\u0b26\u0b27\7T\2\2\u0b27\u0b28\7V\2\2\u0b28\u00c4\3\2\2"+ + "\2\u0b29\u0b2a\7O\2\2\u0b2a\u0b2b\7C\2\2\u0b2b\u0b2c\7V\2\2\u0b2c\u0b2d"+ + "\7E\2\2\u0b2d\u0b2e\7J\2\2\u0b2e\u00c6\3\2\2\2\u0b2f\u0b30\7O\2\2\u0b30"+ + "\u0b31\7C\2\2\u0b31\u0b32\7Z\2\2\u0b32\u0b33\7X\2\2\u0b33\u0b34\7C\2\2"+ + "\u0b34\u0b35\7N\2\2\u0b35\u0b36\7W\2\2\u0b36\u0b37\7G\2\2\u0b37\u00c8"+ + "\3\2\2\2\u0b38\u0b39\7O\2\2\u0b39\u0b3a\7Q\2\2\u0b3a\u0b3b\7F\2\2\u0b3b"+ + "\u0b3c\7K\2\2\u0b3c\u0b3d\7H\2\2\u0b3d\u0b3e\7K\2\2\u0b3e\u0b3f\7G\2\2"+ + "\u0b3f\u0b40\7U\2\2\u0b40\u00ca\3\2\2\2\u0b41\u0b42\7P\2\2\u0b42\u0b43"+ + "\7C\2\2\u0b43\u0b44\7V\2\2\u0b44\u0b45\7W\2\2\u0b45\u0b46\7T\2\2\u0b46"+ + "\u0b47\7C\2\2\u0b47\u0b48\7N\2\2\u0b48\u00cc\3\2\2\2\u0b49\u0b4a\7P\2"+ + "\2\u0b4a\u0b4b\7Q\2\2\u0b4b\u0b4c\7V\2\2\u0b4c\u00ce\3\2\2\2\u0b4d\u0b4e"+ + "\7P\2\2\u0b4e\u0b4f\7Q\2\2\u0b4f\u0b50\7a\2\2\u0b50\u0b51\7Y\2\2\u0b51"+ + "\u0b52\7T\2\2\u0b52\u0b53\7K\2\2\u0b53\u0b54\7V\2\2\u0b54\u0b55\7G\2\2"+ + "\u0b55\u0b56\7a\2\2\u0b56\u0b57\7V\2\2\u0b57\u0b58\7Q\2\2\u0b58\u0b59"+ + "\7a\2\2\u0b59\u0b5a\7D\2\2\u0b5a\u0b5b\7K\2\2\u0b5b\u0b5c\7P\2\2\u0b5c"+ + "\u0b5d\7N\2\2\u0b5d\u0b5e\7Q\2\2\u0b5e\u0b5f\7I\2\2\u0b5f\u00d0\3\2\2"+ + "\2\u0b60\u0b61\7P\2\2\u0b61\u0b62\7W\2\2\u0b62\u0b63\7N\2\2\u0b63\u0b64"+ + "\7N\2\2\u0b64\u00d2\3\2\2\2\u0b65\u0b66\7P\2\2\u0b66\u0b67\7W\2\2\u0b67"+ + "\u0b68\7O\2\2\u0b68\u0b69\7D\2\2\u0b69\u0b6a\7G\2\2\u0b6a\u0b6b\7T\2\2"+ + "\u0b6b\u00d4\3\2\2\2\u0b6c\u0b6d\7Q\2\2\u0b6d\u0b6e\7P\2\2\u0b6e\u00d6"+ + "\3\2\2\2\u0b6f\u0b70\7Q\2\2\u0b70\u0b71\7R\2\2\u0b71\u0b72\7V\2\2\u0b72"+ + "\u0b73\7K\2\2\u0b73\u0b74\7O\2\2\u0b74\u0b75\7K\2\2\u0b75\u0b76\7\\\2"+ + "\2\u0b76\u0b77\7G\2\2\u0b77\u00d8\3\2\2\2\u0b78\u0b79\7Q\2\2\u0b79\u0b7a"+ + "\7R\2\2\u0b7a\u0b7b\7V\2\2\u0b7b\u0b7c\7K\2\2\u0b7c\u0b7d\7Q\2\2\u0b7d"+ + "\u0b7e\7P\2\2\u0b7e\u00da\3\2\2\2\u0b7f\u0b80\7Q\2\2\u0b80\u0b81\7R\2"+ + "\2\u0b81\u0b82\7V\2\2\u0b82\u0b83\7K\2\2\u0b83\u0b84\7Q\2\2\u0b84\u0b85"+ + "\7P\2\2\u0b85\u0b86\7C\2\2\u0b86\u0b87\7N\2\2\u0b87\u0b88\7N\2\2\u0b88"+ + "\u0b89\7[\2\2\u0b89\u00dc\3\2\2\2\u0b8a\u0b8b\7Q\2\2\u0b8b\u0b8c\7T\2"+ + "\2\u0b8c\u00de\3\2\2\2\u0b8d\u0b8e\7Q\2\2\u0b8e\u0b8f\7T\2\2\u0b8f\u0b90"+ + "\7F\2\2\u0b90\u0b91\7G\2\2\u0b91\u0b92\7T\2\2\u0b92\u00e0\3\2\2\2\u0b93"+ + "\u0b94\7Q\2\2\u0b94\u0b95\7W\2\2\u0b95\u0b96\7V\2\2\u0b96\u00e2\3\2\2"+ + "\2\u0b97\u0b98\7Q\2\2\u0b98\u0b99\7W\2\2\u0b99\u0b9a\7V\2\2\u0b9a\u0b9b"+ + "\7G\2\2\u0b9b\u0b9c\7T\2\2\u0b9c\u00e4\3\2\2\2\u0b9d\u0b9e\7Q\2\2\u0b9e"+ + "\u0b9f\7W\2\2\u0b9f\u0ba0\7V\2\2\u0ba0\u0ba1\7H\2\2\u0ba1\u0ba2\7K\2\2"+ + "\u0ba2\u0ba3\7N\2\2\u0ba3\u0ba4\7G\2\2\u0ba4\u00e6\3\2\2\2\u0ba5\u0ba6"+ + "\7R\2\2\u0ba6\u0ba7\7C\2\2\u0ba7\u0ba8\7T\2\2\u0ba8\u0ba9\7V\2\2\u0ba9"+ + "\u0baa\7K\2\2\u0baa\u0bab\7V\2\2\u0bab\u0bac\7K\2\2\u0bac\u0bad\7Q\2\2"+ + "\u0bad\u0bae\7P\2\2\u0bae\u00e8\3\2\2\2\u0baf\u0bb0\7R\2\2\u0bb0\u0bb1"+ + "\7T\2\2\u0bb1\u0bb2\7K\2\2\u0bb2\u0bb3\7O\2\2\u0bb3\u0bb4\7C\2\2\u0bb4"+ + "\u0bb5\7T\2\2\u0bb5\u0bb6\7[\2\2\u0bb6\u00ea\3\2\2\2\u0bb7\u0bb8\7R\2"+ + "\2\u0bb8\u0bb9\7T\2\2\u0bb9\u0bba\7Q\2\2\u0bba\u0bbb\7E\2\2\u0bbb\u0bbc"+ + "\7G\2\2\u0bbc\u0bbd\7F\2\2\u0bbd\u0bbe\7W\2\2\u0bbe\u0bbf\7T\2\2\u0bbf"+ + "\u0bc0\7G\2\2\u0bc0\u00ec\3\2\2\2\u0bc1\u0bc2\7R\2\2\u0bc2\u0bc3\7W\2"+ + "\2\u0bc3\u0bc4\7T\2\2\u0bc4\u0bc5\7I\2\2\u0bc5\u0bc6\7G\2\2\u0bc6\u00ee"+ + "\3\2\2\2\u0bc7\u0bc8\7T\2\2\u0bc8\u0bc9\7C\2\2\u0bc9\u0bca\7P\2\2\u0bca"+ + "\u0bcb\7I\2\2\u0bcb\u0bcc\7G\2\2\u0bcc\u00f0\3\2\2\2\u0bcd\u0bce\7T\2"+ + "\2\u0bce\u0bcf\7G\2\2\u0bcf\u0bd0\7C\2\2\u0bd0\u0bd1\7F\2\2\u0bd1\u00f2"+ + "\3\2\2\2\u0bd2\u0bd3\7T\2\2\u0bd3\u0bd4\7G\2\2\u0bd4\u0bd5\7C\2\2\u0bd5"+ + "\u0bd6\7F\2\2\u0bd6\u0bd7\7U\2\2\u0bd7\u00f4\3\2\2\2\u0bd8\u0bd9\7T\2"+ + "\2\u0bd9\u0bda\7G\2\2\u0bda\u0bdb\7H\2\2\u0bdb\u0bdc\7G\2\2\u0bdc\u0bdd"+ + "\7T\2\2\u0bdd\u0bde\7G\2\2\u0bde\u0bdf\7P\2\2\u0bdf\u0be0\7E\2\2\u0be0"+ + "\u0be1\7G\2\2\u0be1\u0be2\7U\2\2\u0be2\u00f6\3\2\2\2\u0be3\u0be4\7T\2"+ + "\2\u0be4\u0be5\7G\2\2\u0be5\u0be6\7I\2\2\u0be6\u0be7\7G\2\2\u0be7\u0be8"+ + "\7Z\2\2\u0be8\u0be9\7R\2\2\u0be9\u00f8\3\2\2\2\u0bea\u0beb\7T\2\2\u0beb"+ + "\u0bec\7G\2\2\u0bec\u0bed\7N\2\2\u0bed\u0bee\7G\2\2\u0bee\u0bef\7C\2\2"+ + "\u0bef\u0bf0\7U\2\2\u0bf0\u0bf1\7G\2\2\u0bf1\u00fa\3\2\2\2\u0bf2\u0bf3"+ + "\7T\2\2\u0bf3\u0bf4\7G\2\2\u0bf4\u0bf5\7P\2\2\u0bf5\u0bf6\7C\2\2\u0bf6"+ + "\u0bf7\7O\2\2\u0bf7\u0bf8\7G\2\2\u0bf8\u00fc\3\2\2\2\u0bf9\u0bfa\7T\2"+ + "\2\u0bfa\u0bfb\7G\2\2\u0bfb\u0bfc\7R\2\2\u0bfc\u0bfd\7G\2\2\u0bfd\u0bfe"+ + "\7C\2\2\u0bfe\u0bff\7V\2\2\u0bff\u00fe\3\2\2\2\u0c00\u0c01\7T\2\2\u0c01"+ + "\u0c02\7G\2\2\u0c02\u0c03\7R\2\2\u0c03\u0c04\7N\2\2\u0c04\u0c05\7C\2\2"+ + "\u0c05\u0c06\7E\2\2\u0c06\u0c07\7G\2\2\u0c07\u0100\3\2\2\2\u0c08\u0c09"+ + "\7T\2\2\u0c09\u0c0a\7G\2\2\u0c0a\u0c0b\7S\2\2\u0c0b\u0c0c\7W\2\2\u0c0c"+ + "\u0c0d\7K\2\2\u0c0d\u0c0e\7T\2\2\u0c0e\u0c0f\7G\2\2\u0c0f\u0102\3\2\2"+ + "\2\u0c10\u0c11\7T\2\2\u0c11\u0c12\7G\2\2\u0c12\u0c13\7U\2\2\u0c13\u0c14"+ + "\7K\2\2\u0c14\u0c15\7I\2\2\u0c15\u0c16\7P\2\2\u0c16\u0c17\7C\2\2\u0c17"+ + "\u0c18\7N\2\2\u0c18\u0104\3\2\2\2\u0c19\u0c1a\7T\2\2\u0c1a\u0c1b\7G\2"+ + "\2\u0c1b\u0c1c\7U\2\2\u0c1c\u0c1d\7V\2\2\u0c1d\u0c1e\7T\2\2\u0c1e\u0c1f"+ + "\7K\2\2\u0c1f\u0c20\7E\2\2\u0c20\u0c21\7V\2\2\u0c21\u0106\3\2\2\2\u0c22"+ + "\u0c23\7T\2\2\u0c23\u0c24\7G\2\2\u0c24\u0c25\7V\2\2\u0c25\u0c26\7W\2\2"+ + "\u0c26\u0c27\7T\2\2\u0c27\u0c28\7P\2\2\u0c28\u0108\3\2\2\2\u0c29\u0c2a"+ + "\7T\2\2\u0c2a\u0c2b\7G\2\2\u0c2b\u0c2c\7X\2\2\u0c2c\u0c2d\7Q\2\2\u0c2d"+ + "\u0c2e\7M\2\2\u0c2e\u0c2f\7G\2\2\u0c2f\u010a\3\2\2\2\u0c30\u0c31\7T\2"+ + "\2\u0c31\u0c32\7K\2\2\u0c32\u0c33\7I\2\2\u0c33\u0c34\7J\2\2\u0c34\u0c35"+ + "\7V\2\2\u0c35\u010c\3\2\2\2\u0c36\u0c37\7T\2\2\u0c37\u0c38\7N\2\2\u0c38"+ + "\u0c39\7K\2\2\u0c39\u0c3a\7M\2\2\u0c3a\u0c3b\7G\2\2\u0c3b\u010e\3\2\2"+ + "\2\u0c3c\u0c3d\7U\2\2\u0c3d\u0c3e\7E\2\2\u0c3e\u0c3f\7J\2\2\u0c3f\u0c40"+ + "\7G\2\2\u0c40\u0c41\7O\2\2\u0c41\u0c42\7C\2\2\u0c42\u0110\3\2\2\2\u0c43"+ + "\u0c44\7U\2\2\u0c44\u0c45\7E\2\2\u0c45\u0c46\7J\2\2\u0c46\u0c47\7G\2\2"+ + "\u0c47\u0c48\7O\2\2\u0c48\u0c49\7C\2\2\u0c49\u0c4a\7U\2\2\u0c4a\u0112"+ + "\3\2\2\2\u0c4b\u0c4c\7U\2\2\u0c4c\u0c4d\7G\2\2\u0c4d\u0c4e\7N\2\2\u0c4e"+ + "\u0c4f\7G\2\2\u0c4f\u0c50\7E\2\2\u0c50\u0c51\7V\2\2\u0c51\u0114\3\2\2"+ + "\2\u0c52\u0c53\7U\2\2\u0c53\u0c54\7G\2\2\u0c54\u0c55\7V\2\2\u0c55\u0116"+ + "\3\2\2\2\u0c56\u0c57\7U\2\2\u0c57\u0c58\7G\2\2\u0c58\u0c59\7R\2\2\u0c59"+ + "\u0c5a\7C\2\2\u0c5a\u0c5b\7T\2\2\u0c5b\u0c5c\7C\2\2\u0c5c\u0c5d\7V\2\2"+ + "\u0c5d\u0c5e\7Q\2\2\u0c5e\u0c5f\7T\2\2\u0c5f\u0118\3\2\2\2\u0c60\u0c61"+ + "\7U\2\2\u0c61\u0c62\7J\2\2\u0c62\u0c63\7Q\2\2\u0c63\u0c64\7Y\2\2\u0c64"+ + "\u011a\3\2\2\2\u0c65\u0c66\7U\2\2\u0c66\u0c67\7K\2\2\u0c67\u0c68\7I\2"+ + "\2\u0c68\u0c69\7P\2\2\u0c69\u0c6a\7C\2\2\u0c6a\u0c6b\7N\2\2\u0c6b\u011c"+ + "\3\2\2\2\u0c6c\u0c6d\7U\2\2\u0c6d\u0c6e\7R\2\2\u0c6e\u0c6f\7C\2\2\u0c6f"+ + "\u0c70\7V\2\2\u0c70\u0c71\7K\2\2\u0c71\u0c72\7C\2\2\u0c72\u0c73\7N\2\2"+ + "\u0c73\u011e\3\2\2\2\u0c74\u0c75\7U\2\2\u0c75\u0c76\7S\2\2\u0c76\u0c77"+ + "\7N\2\2\u0c77\u0120\3\2\2\2\u0c78\u0c79\7U\2\2\u0c79\u0c7a\7S\2\2\u0c7a"+ + "\u0c7b\7N\2\2\u0c7b\u0c7c\7G\2\2\u0c7c\u0c7d\7Z\2\2\u0c7d\u0c7e\7E\2\2"+ + "\u0c7e\u0c7f\7G\2\2\u0c7f\u0c80\7R\2\2\u0c80\u0c81\7V\2\2\u0c81\u0c82"+ + "\7K\2\2\u0c82\u0c83\7Q\2\2\u0c83\u0c84\7P\2\2\u0c84\u0122\3\2\2\2\u0c85"+ + "\u0c86\7U\2\2\u0c86\u0c87\7S\2\2\u0c87\u0c88\7N\2\2\u0c88\u0c89\7U\2\2"+ + "\u0c89\u0c8a\7V\2\2\u0c8a\u0c8b\7C\2\2\u0c8b\u0c8c\7V\2\2\u0c8c\u0c8d"+ + "\7G\2\2\u0c8d\u0124\3\2\2\2\u0c8e\u0c8f\7U\2\2\u0c8f\u0c90\7S\2\2\u0c90"+ + "\u0c91\7N\2\2\u0c91\u0c92\7Y\2\2\u0c92\u0c93\7C\2\2\u0c93\u0c94\7T\2\2"+ + "\u0c94\u0c95\7P\2\2\u0c95\u0c96\7K\2\2\u0c96\u0c97\7P\2\2\u0c97\u0c98"+ + "\7I\2\2\u0c98\u0126\3\2\2\2\u0c99\u0c9a\7U\2\2\u0c9a\u0c9b\7S\2\2\u0c9b"+ + "\u0c9c\7N\2\2\u0c9c\u0c9d\7a\2\2\u0c9d\u0c9e\7D\2\2\u0c9e\u0c9f\7K\2\2"+ + "\u0c9f\u0ca0\7I\2\2\u0ca0\u0ca1\7a\2\2\u0ca1\u0ca2\7T\2\2\u0ca2\u0ca3"+ + "\7G\2\2\u0ca3\u0ca4\7U\2\2\u0ca4\u0ca5\7W\2\2\u0ca5\u0ca6\7N\2\2\u0ca6"+ + "\u0ca7\7V\2\2\u0ca7\u0128\3\2\2\2\u0ca8\u0ca9\7U\2\2\u0ca9\u0caa\7S\2"+ + "\2\u0caa\u0cab\7N\2\2\u0cab\u0cac\7a\2\2\u0cac\u0cad\7E\2\2\u0cad\u0cae"+ + "\7C\2\2\u0cae\u0caf\7N\2\2\u0caf\u0cb0\7E\2\2\u0cb0\u0cb1\7a\2\2\u0cb1"+ + "\u0cb2\7H\2\2\u0cb2\u0cb3\7Q\2\2\u0cb3\u0cb4\7W\2\2\u0cb4\u0cb5\7P\2\2"+ + "\u0cb5\u0cb6\7F\2\2\u0cb6\u0cb7\7a\2\2\u0cb7\u0cb8\7T\2\2\u0cb8\u0cb9"+ + "\7Q\2\2\u0cb9\u0cba\7Y\2\2\u0cba\u0cbb\7U\2\2\u0cbb\u012a\3\2\2\2\u0cbc"+ + "\u0cbd\7U\2\2\u0cbd\u0cbe\7S\2\2\u0cbe\u0cbf\7N\2\2\u0cbf\u0cc0\7a\2\2"+ + "\u0cc0\u0cc1\7U\2\2\u0cc1\u0cc2\7O\2\2\u0cc2\u0cc3\7C\2\2\u0cc3\u0cc4"+ + "\7N\2\2\u0cc4\u0cc5\7N\2\2\u0cc5\u0cc6\7a\2\2\u0cc6\u0cc7\7T\2\2\u0cc7"+ + "\u0cc8\7G\2\2\u0cc8\u0cc9\7U\2\2\u0cc9\u0cca\7W\2\2\u0cca\u0ccb\7N\2\2"+ + "\u0ccb\u0ccc\7V\2\2\u0ccc\u012c\3\2\2\2\u0ccd\u0cce\7U\2\2\u0cce\u0ccf"+ + "\7U\2\2\u0ccf\u0cd0\7N\2\2\u0cd0\u012e\3\2\2\2\u0cd1\u0cd2\7U\2\2\u0cd2"+ + "\u0cd3\7V\2\2\u0cd3\u0cd4\7C\2\2\u0cd4\u0cd5\7E\2\2\u0cd5\u0cd6\7M\2\2"+ + "\u0cd6\u0cd7\7G\2\2\u0cd7\u0cd8\7F\2\2\u0cd8\u0130\3\2\2\2\u0cd9\u0cda"+ + "\7U\2\2\u0cda\u0cdb\7V\2\2\u0cdb\u0cdc\7C\2\2\u0cdc\u0cdd\7T\2\2\u0cdd"+ + "\u0cde\7V\2\2\u0cde\u0cdf\7K\2\2\u0cdf\u0ce0\7P\2\2\u0ce0\u0ce1\7I\2\2"+ + "\u0ce1\u0132\3\2\2\2\u0ce2\u0ce3\7U\2\2\u0ce3\u0ce4\7V\2\2\u0ce4\u0ce5"+ + "\7T\2\2\u0ce5\u0ce6\7C\2\2\u0ce6\u0ce7\7K\2\2\u0ce7\u0ce8\7I\2\2\u0ce8"+ + "\u0ce9\7J\2\2\u0ce9\u0cea\7V\2\2\u0cea\u0ceb\7a\2\2\u0ceb\u0cec\7L\2\2"+ + "\u0cec\u0ced\7Q\2\2\u0ced\u0cee\7K\2\2\u0cee\u0cef\7P\2\2\u0cef\u0134"+ + "\3\2\2\2\u0cf0\u0cf1\7V\2\2\u0cf1\u0cf2\7C\2\2\u0cf2\u0cf3\7D\2\2\u0cf3"+ + "\u0cf4\7N\2\2\u0cf4\u0cf5\7G\2\2\u0cf5\u0136\3\2\2\2\u0cf6\u0cf7\7V\2"+ + "\2\u0cf7\u0cf8\7G\2\2\u0cf8\u0cf9\7T\2\2\u0cf9\u0cfa\7O\2\2\u0cfa\u0cfb"+ + "\7K\2\2\u0cfb\u0cfc\7P\2\2\u0cfc\u0cfd\7C\2\2\u0cfd\u0cfe\7V\2\2\u0cfe"+ + "\u0cff\7G\2\2\u0cff\u0d00\7F\2\2\u0d00\u0138\3\2\2\2\u0d01\u0d02\7V\2"+ + "\2\u0d02\u0d03\7J\2\2\u0d03\u0d04\7G\2\2\u0d04\u0d05\7P\2\2\u0d05\u013a"+ + "\3\2\2\2\u0d06\u0d07\7V\2\2\u0d07\u0d08\7Q\2\2\u0d08\u013c\3\2\2\2\u0d09"+ + "\u0d0a\7V\2\2\u0d0a\u0d0b\7T\2\2\u0d0b\u0d0c\7C\2\2\u0d0c\u0d0d\7K\2\2"+ + "\u0d0d\u0d0e\7N\2\2\u0d0e\u0d0f\7K\2\2\u0d0f\u0d10\7P\2\2\u0d10\u0d11"+ + "\7I\2\2\u0d11\u013e\3\2\2\2\u0d12\u0d13\7V\2\2\u0d13\u0d14\7T\2\2\u0d14"+ + "\u0d15\7K\2\2\u0d15\u0d16\7I\2\2\u0d16\u0d17\7I\2\2\u0d17\u0d18\7G\2\2"+ + "\u0d18\u0d19\7T\2\2\u0d19\u0140\3\2\2\2\u0d1a\u0d1b\7V\2\2\u0d1b\u0d1c"+ + "\7T\2\2\u0d1c\u0d1d\7W\2\2\u0d1d\u0d1e\7G\2\2\u0d1e\u0142\3\2\2\2\u0d1f"+ + "\u0d20\7W\2\2\u0d20\u0d21\7P\2\2\u0d21\u0d22\7F\2\2\u0d22\u0d23\7Q\2\2"+ + "\u0d23\u0144\3\2\2\2\u0d24\u0d25\7W\2\2\u0d25\u0d26\7P\2\2\u0d26\u0d27"+ + "\7K\2\2\u0d27\u0d28\7Q\2\2\u0d28\u0d29\7P\2\2\u0d29\u0146\3\2\2\2\u0d2a"+ + "\u0d2b\7W\2\2\u0d2b\u0d2c\7P\2\2\u0d2c\u0d2d\7K\2\2\u0d2d\u0d2e\7S\2\2"+ + "\u0d2e\u0d2f\7W\2\2\u0d2f\u0d30\7G\2\2\u0d30\u0148\3\2\2\2\u0d31\u0d32"+ + "\7W\2\2\u0d32\u0d33\7P\2\2\u0d33\u0d34\7N\2\2\u0d34\u0d35\7Q\2\2\u0d35"+ + "\u0d36\7E\2\2\u0d36\u0d37\7M\2\2\u0d37\u014a\3\2\2\2\u0d38\u0d39\7W\2"+ + "\2\u0d39\u0d3a\7P\2\2\u0d3a\u0d3b\7U\2\2\u0d3b\u0d3c\7K\2\2\u0d3c\u0d3d"+ + "\7I\2\2\u0d3d\u0d3e\7P\2\2\u0d3e\u0d3f\7G\2\2\u0d3f\u0d40\7F\2\2\u0d40"+ + "\u014c\3\2\2\2\u0d41\u0d42\7W\2\2\u0d42\u0d43\7R\2\2\u0d43\u0d44\7F\2"+ + "\2\u0d44\u0d45\7C\2\2\u0d45\u0d46\7V\2\2\u0d46\u0d47\7G\2\2\u0d47\u014e"+ + "\3\2\2\2\u0d48\u0d49\7W\2\2\u0d49\u0d4a\7U\2\2\u0d4a\u0d4b\7C\2\2\u0d4b"+ + "\u0d4c\7I\2\2\u0d4c\u0d4d\7G\2\2\u0d4d\u0150\3\2\2\2\u0d4e\u0d4f\7W\2"+ + "\2\u0d4f\u0d50\7U\2\2\u0d50\u0d51\7G\2\2\u0d51\u0152\3\2\2\2\u0d52\u0d53"+ + "\7W\2\2\u0d53\u0d54\7U\2\2\u0d54\u0d55\7K\2\2\u0d55\u0d56\7P\2\2\u0d56"+ + "\u0d57\7I\2\2\u0d57\u0154\3\2\2\2\u0d58\u0d59\7X\2\2\u0d59\u0d5a\7C\2"+ + "\2\u0d5a\u0d5b\7N\2\2\u0d5b\u0d5c\7W\2\2\u0d5c\u0d5d\7G\2\2\u0d5d\u0d5e"+ + "\7U\2\2\u0d5e\u0156\3\2\2\2\u0d5f\u0d60\7Y\2\2\u0d60\u0d61\7J\2\2\u0d61"+ + "\u0d62\7G\2\2\u0d62\u0d63\7P\2\2\u0d63\u0158\3\2\2\2\u0d64\u0d65\7Y\2"+ + "\2\u0d65\u0d66\7J\2\2\u0d66\u0d67\7G\2\2\u0d67\u0d68\7T\2\2\u0d68\u0d69"+ + "\7G\2\2\u0d69\u015a\3\2\2\2\u0d6a\u0d6b\7Y\2\2\u0d6b\u0d6c\7J\2\2\u0d6c"+ + "\u0d6d\7K\2\2\u0d6d\u0d6e\7N\2\2\u0d6e\u0d6f\7G\2\2\u0d6f\u015c\3\2\2"+ + "\2\u0d70\u0d71\7Y\2\2\u0d71\u0d72\7K\2\2\u0d72\u0d73\7V\2\2\u0d73\u0d74"+ + "\7J\2\2\u0d74\u015e\3\2\2\2\u0d75\u0d76\7Y\2\2\u0d76\u0d77\7T\2\2\u0d77"+ + "\u0d78\7K\2\2\u0d78\u0d79\7V\2\2\u0d79\u0d7a\7G\2\2\u0d7a\u0160\3\2\2"+ + "\2\u0d7b\u0d7c\7Z\2\2\u0d7c\u0d7d\7Q\2\2\u0d7d\u0d7e\7T\2\2\u0d7e\u0162"+ + "\3\2\2\2\u0d7f\u0d80\7\\\2\2\u0d80\u0d81\7G\2\2\u0d81\u0d82\7T\2\2\u0d82"+ + "\u0d83\7Q\2\2\u0d83\u0d84\7H\2\2\u0d84\u0d85\7K\2\2\u0d85\u0d86\7N\2\2"+ + "\u0d86\u0d87\7N\2\2\u0d87\u0164\3\2\2\2\u0d88\u0d89\7V\2\2\u0d89\u0d8a"+ + "\7K\2\2\u0d8a\u0d8b\7P\2\2\u0d8b\u0d8c\7[\2\2\u0d8c\u0d8d\7K\2\2\u0d8d"+ + "\u0d8e\7P\2\2\u0d8e\u0d8f\7V\2\2\u0d8f\u0166\3\2\2\2\u0d90\u0d91\7U\2"+ + "\2\u0d91\u0d92\7O\2\2\u0d92\u0d93\7C\2\2\u0d93\u0d94\7N\2\2\u0d94\u0d95"+ + "\7N\2\2\u0d95\u0d96\7K\2\2\u0d96\u0d97\7P\2\2\u0d97\u0d98\7V\2\2\u0d98"+ + "\u0168\3\2\2\2\u0d99\u0d9a\7O\2\2\u0d9a\u0d9b\7G\2\2\u0d9b\u0d9c\7F\2"+ + "\2\u0d9c\u0d9d\7K\2\2\u0d9d\u0d9e\7W\2\2\u0d9e\u0d9f\7O\2\2\u0d9f\u0da0"+ + "\7K\2\2\u0da0\u0da1\7P\2\2\u0da1\u0da2\7V\2\2\u0da2\u016a\3\2\2\2\u0da3"+ + "\u0da4\7O\2\2\u0da4\u0da5\7K\2\2\u0da5\u0da6\7F\2\2\u0da6\u0da7\7F\2\2"+ + "\u0da7\u0da8\7N\2\2\u0da8\u0da9\7G\2\2\u0da9\u0daa\7K\2\2\u0daa\u0dab"+ + "\7P\2\2\u0dab\u0dac\7V\2\2\u0dac\u016c\3\2\2\2\u0dad\u0dae\7K\2\2\u0dae"+ + "\u0daf\7P\2\2\u0daf\u0db0\7V\2\2\u0db0\u016e\3\2\2\2\u0db1\u0db2\7K\2"+ + "\2\u0db2\u0db3\7P\2\2\u0db3\u0db4\7V\2\2\u0db4\u0db5\7\63\2\2\u0db5\u0170"+ + "\3\2\2\2\u0db6\u0db7\7K\2\2\u0db7\u0db8\7P\2\2\u0db8\u0db9\7V\2\2\u0db9"+ + "\u0dba\7\64\2\2\u0dba\u0172\3\2\2\2\u0dbb\u0dbc\7K\2\2\u0dbc\u0dbd\7P"+ + "\2\2\u0dbd\u0dbe\7V\2\2\u0dbe\u0dbf\7\65\2\2\u0dbf\u0174\3\2\2\2\u0dc0"+ + "\u0dc1\7K\2\2\u0dc1\u0dc2\7P\2\2\u0dc2\u0dc3\7V\2\2\u0dc3\u0dc4\7\66\2"+ + "\2\u0dc4\u0176\3\2\2\2\u0dc5\u0dc6\7K\2\2\u0dc6\u0dc7\7P\2\2\u0dc7\u0dc8"+ + "\7V\2\2\u0dc8\u0dc9\7:\2\2\u0dc9\u0178\3\2\2\2\u0dca\u0dcb\7K\2\2\u0dcb"+ + "\u0dcc\7P\2\2\u0dcc\u0dcd\7V\2\2\u0dcd\u0dce\7G\2\2\u0dce\u0dcf\7I\2\2"+ + "\u0dcf\u0dd0\7G\2\2\u0dd0\u0dd1\7T\2\2\u0dd1\u017a\3\2\2\2\u0dd2\u0dd3"+ + "\7D\2\2\u0dd3\u0dd4\7K\2\2\u0dd4\u0dd5\7I\2\2\u0dd5\u0dd6\7K\2\2\u0dd6"+ + "\u0dd7\7P\2\2\u0dd7\u0dd8\7V\2\2\u0dd8\u017c\3\2\2\2\u0dd9\u0dda\7T\2"+ + "\2\u0dda\u0ddb\7G\2\2\u0ddb\u0ddc\7C\2\2\u0ddc\u0ddd\7N\2\2\u0ddd\u017e"+ + "\3\2\2\2\u0dde\u0ddf\7F\2\2\u0ddf\u0de0\7Q\2\2\u0de0\u0de1\7W\2\2\u0de1"+ + "\u0de2\7D\2\2\u0de2\u0de3\7N\2\2\u0de3\u0de4\7G\2\2\u0de4\u0180\3\2\2"+ + "\2\u0de5\u0de6\7R\2\2\u0de6\u0de7\7T\2\2\u0de7\u0de8\7G\2\2\u0de8\u0de9"+ + "\7E\2\2\u0de9\u0dea\7K\2\2\u0dea\u0deb\7U\2\2\u0deb\u0dec\7K\2\2\u0dec"+ + "\u0ded\7Q\2\2\u0ded\u0dee\7P\2\2\u0dee\u0182\3\2\2\2\u0def\u0df0\7H\2"+ + "\2\u0df0\u0df1\7N\2\2\u0df1\u0df2\7Q\2\2\u0df2\u0df3\7C\2\2\u0df3\u0df4"+ + "\7V\2\2\u0df4\u0184\3\2\2\2\u0df5\u0df6\7H\2\2\u0df6\u0df7\7N\2\2\u0df7"+ + "\u0df8\7Q\2\2\u0df8\u0df9\7C\2\2\u0df9\u0dfa\7V\2\2\u0dfa\u0dfb\7\66\2"+ + "\2\u0dfb\u0186\3\2\2\2\u0dfc\u0dfd\7H\2\2\u0dfd\u0dfe\7N\2\2\u0dfe\u0dff"+ + "\7Q\2\2\u0dff\u0e00\7C\2\2\u0e00\u0e01\7V\2\2\u0e01\u0e02\7:\2\2\u0e02"+ + "\u0188\3\2\2\2\u0e03\u0e04\7F\2\2\u0e04\u0e05\7G\2\2\u0e05\u0e06\7E\2"+ + "\2\u0e06\u0e07\7K\2\2\u0e07\u0e08\7O\2\2\u0e08\u0e09\7C\2\2\u0e09\u0e0a"+ + "\7N\2\2\u0e0a\u018a\3\2\2\2\u0e0b\u0e0c\7F\2\2\u0e0c\u0e0d\7G\2\2\u0e0d"+ + "\u0e0e\7E\2\2\u0e0e\u018c\3\2\2\2\u0e0f\u0e10\7P\2\2\u0e10\u0e11\7W\2"+ + "\2\u0e11\u0e12\7O\2\2\u0e12\u0e13\7G\2\2\u0e13\u0e14\7T\2\2\u0e14\u0e15"+ + "\7K\2\2\u0e15\u0e16\7E\2\2\u0e16\u018e\3\2\2\2\u0e17\u0e18\7F\2\2\u0e18"+ + "\u0e19\7C\2\2\u0e19\u0e1a\7V\2\2\u0e1a\u0e1b\7G\2\2\u0e1b\u0190\3\2\2"+ + "\2\u0e1c\u0e1d\7V\2\2\u0e1d\u0e1e\7K\2\2\u0e1e\u0e1f\7O\2\2\u0e1f\u0e20"+ + "\7G\2\2\u0e20\u0192\3\2\2\2\u0e21\u0e22\7V\2\2\u0e22\u0e23\7K\2\2\u0e23"+ + "\u0e24\7O\2\2\u0e24\u0e25\7G\2\2\u0e25\u0e26\7U\2\2\u0e26\u0e27\7V\2\2"+ + "\u0e27\u0e28\7C\2\2\u0e28\u0e29\7O\2\2\u0e29\u0e2a\7R\2\2\u0e2a\u0194"+ + "\3\2\2\2\u0e2b\u0e2c\7F\2\2\u0e2c\u0e2d\7C\2\2\u0e2d\u0e2e\7V\2\2\u0e2e"+ + "\u0e2f\7G\2\2\u0e2f\u0e30\7V\2\2\u0e30\u0e31\7K\2\2\u0e31\u0e32\7O\2\2"+ + "\u0e32\u0e33\7G\2\2\u0e33\u0196\3\2\2\2\u0e34\u0e35\7[\2\2\u0e35\u0e36"+ + "\7G\2\2\u0e36\u0e37\7C\2\2\u0e37\u0e38\7T\2\2\u0e38\u0198\3\2\2\2\u0e39"+ + "\u0e3a\7E\2\2\u0e3a\u0e3b\7J\2\2\u0e3b\u0e3c\7C\2\2\u0e3c\u0e3d\7T\2\2"+ + "\u0e3d\u019a\3\2\2\2\u0e3e\u0e3f\7X\2\2\u0e3f\u0e40\7C\2\2\u0e40\u0e41"+ + "\7T\2\2\u0e41\u0e42\7E\2\2\u0e42\u0e43\7J\2\2\u0e43\u0e44\7C\2\2\u0e44"+ + "\u0e45\7T\2\2\u0e45\u019c\3\2\2\2\u0e46\u0e47\7P\2\2\u0e47\u0e48\7X\2"+ + "\2\u0e48\u0e49\7C\2\2\u0e49\u0e4a\7T\2\2\u0e4a\u0e4b\7E\2\2\u0e4b\u0e4c"+ + "\7J\2\2\u0e4c\u0e4d\7C\2\2\u0e4d\u0e4e\7T\2\2\u0e4e\u019e\3\2\2\2\u0e4f"+ + "\u0e50\7P\2\2\u0e50\u0e51\7C\2\2\u0e51\u0e52\7V\2\2\u0e52\u0e53\7K\2\2"+ + "\u0e53\u0e54\7Q\2\2\u0e54\u0e55\7P\2\2\u0e55\u0e56\7C\2\2\u0e56\u0e57"+ + "\7N\2\2\u0e57\u01a0\3\2\2\2\u0e58\u0e59\7D\2\2\u0e59\u0e5a\7K\2\2\u0e5a"+ + "\u0e5b\7P\2\2\u0e5b\u0e5c\7C\2\2\u0e5c\u0e5d\7T\2\2\u0e5d\u0e5e\7[\2\2"+ + "\u0e5e\u01a2\3\2\2\2\u0e5f\u0e60\7X\2\2\u0e60\u0e61\7C\2\2\u0e61\u0e62"+ + "\7T\2\2\u0e62\u0e63\7D\2\2\u0e63\u0e64\7K\2\2\u0e64\u0e65\7P\2\2\u0e65"+ + "\u0e66\7C\2\2\u0e66\u0e67\7T\2\2\u0e67\u0e68\7[\2\2\u0e68\u01a4\3\2\2"+ + "\2\u0e69\u0e6a\7V\2\2\u0e6a\u0e6b\7K\2\2\u0e6b\u0e6c\7P\2\2\u0e6c\u0e6d"+ + "\7[\2\2\u0e6d\u0e6e\7D\2\2\u0e6e\u0e6f\7N\2\2\u0e6f\u0e70\7Q\2\2\u0e70"+ + "\u0e71\7D\2\2\u0e71\u01a6\3\2\2\2\u0e72\u0e73\7D\2\2\u0e73\u0e74\7N\2"+ + "\2\u0e74\u0e75\7Q\2\2\u0e75\u0e76\7D\2\2\u0e76\u01a8\3\2\2\2\u0e77\u0e78"+ + "\7O\2\2\u0e78\u0e79\7G\2\2\u0e79\u0e7a\7F\2\2\u0e7a\u0e7b\7K\2\2\u0e7b"+ + "\u0e7c\7W\2\2\u0e7c\u0e7d\7O\2\2\u0e7d\u0e7e\7D\2\2\u0e7e\u0e7f\7N\2\2"+ + "\u0e7f\u0e80\7Q\2\2\u0e80\u0e81\7D\2\2\u0e81\u01aa\3\2\2\2\u0e82\u0e83"+ + "\7N\2\2\u0e83\u0e84\7Q\2\2\u0e84\u0e85\7P\2\2\u0e85\u0e86\7I\2\2\u0e86"+ + "\u01ac\3\2\2\2\u0e87\u0e88\7N\2\2\u0e88\u0e89\7Q\2\2\u0e89\u0e8a\7P\2"+ + "\2\u0e8a\u0e8b\7I\2\2\u0e8b\u0e8c\7D\2\2\u0e8c\u0e8d\7N\2\2\u0e8d\u0e8e"+ + "\7Q\2\2\u0e8e\u0e8f\7D\2\2\u0e8f\u01ae\3\2\2\2\u0e90\u0e91\7V\2\2\u0e91"+ + "\u0e92\7K\2\2\u0e92\u0e93\7P\2\2\u0e93\u0e94\7[\2\2\u0e94\u0e95\7V\2\2"+ + "\u0e95\u0e96\7G\2\2\u0e96\u0e97\7Z\2\2\u0e97\u0e98\7V\2\2\u0e98\u01b0"+ + "\3\2\2\2\u0e99\u0e9a\7V\2\2\u0e9a\u0e9b\7G\2\2\u0e9b\u0e9c\7Z\2\2\u0e9c"+ + "\u0e9d\7V\2\2\u0e9d\u01b2\3\2\2\2\u0e9e\u0e9f\7O\2\2\u0e9f\u0ea0\7G\2"+ + "\2\u0ea0\u0ea1\7F\2\2\u0ea1\u0ea2\7K\2\2\u0ea2\u0ea3\7W\2\2\u0ea3\u0ea4"+ + "\7O\2\2\u0ea4\u0ea5\7V\2\2\u0ea5\u0ea6\7G\2\2\u0ea6\u0ea7\7Z\2\2\u0ea7"+ + "\u0ea8\7V\2\2\u0ea8\u01b4\3\2\2\2\u0ea9\u0eaa\7N\2\2\u0eaa\u0eab\7Q\2"+ + "\2\u0eab\u0eac\7P\2\2\u0eac\u0ead\7I\2\2\u0ead\u0eae\7V\2\2\u0eae\u0eaf"+ + "\7G\2\2\u0eaf\u0eb0\7Z\2\2\u0eb0\u0eb1\7V\2\2\u0eb1\u01b6\3\2\2\2\u0eb2"+ + "\u0eb3\7G\2\2\u0eb3\u0eb4\7P\2\2\u0eb4\u0eb5\7W\2\2\u0eb5\u0eb6\7O\2\2"+ + "\u0eb6\u01b8\3\2\2\2\u0eb7\u0eb8\7X\2\2\u0eb8\u0eb9\7C\2\2\u0eb9\u0eba"+ + "\7T\2\2\u0eba\u0ebb\7[\2\2\u0ebb\u0ebc\7K\2\2\u0ebc\u0ebd\7P\2\2\u0ebd"+ + "\u0ebe\7I\2\2\u0ebe\u01ba\3\2\2\2\u0ebf\u0ec0\7U\2\2\u0ec0\u0ec1\7G\2"+ + "\2\u0ec1\u0ec2\7T\2\2\u0ec2\u0ec3\7K\2\2\u0ec3\u0ec4\7C\2\2\u0ec4\u0ec5"+ + "\7N\2\2\u0ec5\u01bc\3\2\2\2\u0ec6\u0ec7\7[\2\2\u0ec7\u0ec8\7G\2\2\u0ec8"+ + "\u0ec9\7C\2\2\u0ec9\u0eca\7T\2\2\u0eca\u0ecb\7a\2\2\u0ecb\u0ecc\7O\2\2"+ + "\u0ecc\u0ecd\7Q\2\2\u0ecd\u0ece\7P\2\2\u0ece\u0ecf\7V\2\2\u0ecf\u0ed0"+ + "\7J\2\2\u0ed0\u01be\3\2\2\2\u0ed1\u0ed2\7F\2\2\u0ed2\u0ed3\7C\2\2\u0ed3"+ + "\u0ed4\7[\2\2\u0ed4\u0ed5\7a\2\2\u0ed5\u0ed6\7J\2\2\u0ed6\u0ed7\7Q\2\2"+ + "\u0ed7\u0ed8\7W\2\2\u0ed8\u0ed9\7T\2\2\u0ed9\u01c0\3\2\2\2\u0eda\u0edb"+ + "\7F\2\2\u0edb\u0edc\7C\2\2\u0edc\u0edd\7[\2\2\u0edd\u0ede\7a\2\2\u0ede"+ + "\u0edf\7O\2\2\u0edf\u0ee0\7K\2\2\u0ee0\u0ee1\7P\2\2\u0ee1\u0ee2\7W\2\2"+ + "\u0ee2\u0ee3\7V\2\2\u0ee3\u0ee4\7G\2\2\u0ee4\u01c2\3\2\2\2\u0ee5\u0ee6"+ + "\7F\2\2\u0ee6\u0ee7\7C\2\2\u0ee7\u0ee8\7[\2\2\u0ee8\u0ee9\7a\2\2\u0ee9"+ + "\u0eea\7U\2\2\u0eea\u0eeb\7G\2\2\u0eeb\u0eec\7E\2\2\u0eec\u0eed\7Q\2\2"+ + "\u0eed\u0eee\7P\2\2\u0eee\u0eef\7F\2\2\u0eef\u01c4\3\2\2\2\u0ef0\u0ef1"+ + "\7J\2\2\u0ef1\u0ef2\7Q\2\2\u0ef2\u0ef3\7W\2\2\u0ef3\u0ef4\7T\2\2\u0ef4"+ + "\u0ef5\7a\2\2\u0ef5\u0ef6\7O\2\2\u0ef6\u0ef7\7K\2\2\u0ef7\u0ef8\7P\2\2"+ + "\u0ef8\u0ef9\7W\2\2\u0ef9\u0efa\7V\2\2\u0efa\u0efb\7G\2\2\u0efb\u01c6"+ + "\3\2\2\2\u0efc\u0efd\7J\2\2\u0efd\u0efe\7Q\2\2\u0efe\u0eff\7W\2\2\u0eff"+ + "\u0f00\7T\2\2\u0f00\u0f01\7a\2\2\u0f01\u0f02\7U\2\2\u0f02\u0f03\7G\2\2"+ + "\u0f03\u0f04\7E\2\2\u0f04\u0f05\7Q\2\2\u0f05\u0f06\7P\2\2\u0f06\u0f07"+ + "\7F\2\2\u0f07\u01c8\3\2\2\2\u0f08\u0f09\7O\2\2\u0f09\u0f0a\7K\2\2\u0f0a"+ + "\u0f0b\7P\2\2\u0f0b\u0f0c\7W\2\2\u0f0c\u0f0d\7V\2\2\u0f0d\u0f0e\7G\2\2"+ + "\u0f0e\u0f0f\7a\2\2\u0f0f\u0f10\7U\2\2\u0f10\u0f11\7G\2\2\u0f11\u0f12"+ + "\7E\2\2\u0f12\u0f13\7Q\2\2\u0f13\u0f14\7P\2\2\u0f14\u0f15\7F\2\2\u0f15"+ + "\u01ca\3\2\2\2\u0f16\u0f17\7U\2\2\u0f17\u0f18\7G\2\2\u0f18\u0f19\7E\2"+ + "\2\u0f19\u0f1a\7Q\2\2\u0f1a\u0f1b\7P\2\2\u0f1b\u0f1c\7F\2\2\u0f1c\u0f1d"+ + "\7a\2\2\u0f1d\u0f1e\7O\2\2\u0f1e\u0f1f\7K\2\2\u0f1f\u0f20\7E\2\2\u0f20"+ + "\u0f21\7T\2\2\u0f21\u0f22\7Q\2\2\u0f22\u0f23\7U\2\2\u0f23\u0f24\7G\2\2"+ + "\u0f24\u0f25\7E\2\2\u0f25\u0f26\7Q\2\2\u0f26\u0f27\7P\2\2\u0f27\u0f28"+ + "\7F\2\2\u0f28\u01cc\3\2\2\2\u0f29\u0f2a\7O\2\2\u0f2a\u0f2b\7K\2\2\u0f2b"+ + "\u0f2c\7P\2\2\u0f2c\u0f2d\7W\2\2\u0f2d\u0f2e\7V\2\2\u0f2e\u0f2f\7G\2\2"+ + "\u0f2f\u0f30\7a\2\2\u0f30\u0f31\7O\2\2\u0f31\u0f32\7K\2\2\u0f32\u0f33"+ + "\7E\2\2\u0f33\u0f34\7T\2\2\u0f34\u0f35\7Q\2\2\u0f35\u0f36\7U\2\2\u0f36"+ + "\u0f37\7G\2\2\u0f37\u0f38\7E\2\2\u0f38\u0f39\7Q\2\2\u0f39\u0f3a\7P\2\2"+ + "\u0f3a\u0f3b\7F\2\2\u0f3b\u01ce\3\2\2\2\u0f3c\u0f3d\7J\2\2\u0f3d\u0f3e"+ + "\7Q\2\2\u0f3e\u0f3f\7W\2\2\u0f3f\u0f40\7T\2\2\u0f40\u0f41\7a\2\2\u0f41"+ + "\u0f42\7O\2\2\u0f42\u0f43\7K\2\2\u0f43\u0f44\7E\2\2\u0f44\u0f45\7T\2\2"+ + "\u0f45\u0f46\7Q\2\2\u0f46\u0f47\7U\2\2\u0f47\u0f48\7G\2\2\u0f48\u0f49"+ + "\7E\2\2\u0f49\u0f4a\7Q\2\2\u0f4a\u0f4b\7P\2\2\u0f4b\u0f4c\7F\2\2\u0f4c"+ + "\u01d0\3\2\2\2\u0f4d\u0f4e\7F\2\2\u0f4e\u0f4f\7C\2\2\u0f4f\u0f50\7[\2"+ + "\2\u0f50\u0f51\7a\2\2\u0f51\u0f52\7O\2\2\u0f52\u0f53\7K\2\2\u0f53\u0f54"+ + "\7E\2\2\u0f54\u0f55\7T\2\2\u0f55\u0f56\7Q\2\2\u0f56\u0f57\7U\2\2\u0f57"+ + "\u0f58\7G\2\2\u0f58\u0f59\7E\2\2\u0f59\u0f5a\7Q\2\2\u0f5a\u0f5b\7P\2\2"+ + "\u0f5b\u0f5c\7F\2\2\u0f5c\u01d2\3\2\2\2\u0f5d\u0f5e\7L\2\2\u0f5e\u0f5f"+ + "\7U\2\2\u0f5f\u0f60\7Q\2\2\u0f60\u0f61\7P\2\2\u0f61\u0f62\7a\2\2\u0f62"+ + "\u0f63\7X\2\2\u0f63\u0f64\7C\2\2\u0f64\u0f65\7N\2\2\u0f65\u0f66\7K\2\2"+ + "\u0f66\u0f67\7F\2\2\u0f67\u01d4\3\2\2\2\u0f68\u0f69\7L\2\2\u0f69\u0f6a"+ + "\7U\2\2\u0f6a\u0f6b\7Q\2\2\u0f6b\u0f6c\7P\2\2\u0f6c\u0f6d\7a\2\2\u0f6d"+ + "\u0f6e\7U\2\2\u0f6e\u0f6f\7E\2\2\u0f6f\u0f70\7J\2\2\u0f70\u0f71\7G\2\2"+ + "\u0f71\u0f72\7O\2\2\u0f72\u0f73\7C\2\2\u0f73\u0f74\7a\2\2\u0f74\u0f75"+ + "\7X\2\2\u0f75\u0f76\7C\2\2\u0f76\u0f77\7N\2\2\u0f77\u0f78\7K\2\2\u0f78"+ + "\u0f79\7F\2\2\u0f79\u01d6\3\2\2\2\u0f7a\u0f7b\7C\2\2\u0f7b\u0f7c\7X\2"+ + "\2\u0f7c\u0f7d\7I\2\2\u0f7d\u01d8\3\2\2\2\u0f7e\u0f7f\7D\2\2\u0f7f\u0f80"+ + "\7K\2\2\u0f80\u0f81\7V\2\2\u0f81\u0f82\7a\2\2\u0f82\u0f83\7C\2\2\u0f83"+ + "\u0f84\7P\2\2\u0f84\u0f85\7F\2\2\u0f85\u01da\3\2\2\2\u0f86\u0f87\7D\2"+ + "\2\u0f87\u0f88\7K\2\2\u0f88\u0f89\7V\2\2\u0f89\u0f8a\7a\2\2\u0f8a\u0f8b"+ + "\7Q\2\2\u0f8b\u0f8c\7T\2\2\u0f8c\u01dc\3\2\2\2\u0f8d\u0f8e\7D\2\2\u0f8e"+ + "\u0f8f\7K\2\2\u0f8f\u0f90\7V\2\2\u0f90\u0f91\7a\2\2\u0f91\u0f92\7Z\2\2"+ + "\u0f92\u0f93\7Q\2\2\u0f93\u0f94\7T\2\2\u0f94\u01de\3\2\2\2\u0f95\u0f96"+ + "\7E\2\2\u0f96\u0f97\7Q\2\2\u0f97\u0f98\7W\2\2\u0f98\u0f99\7P\2\2\u0f99"+ + "\u0f9a\7V\2\2\u0f9a\u01e0\3\2\2\2\u0f9b\u0f9c\7I\2\2\u0f9c\u0f9d\7T\2"+ + "\2\u0f9d\u0f9e\7Q\2\2\u0f9e\u0f9f\7W\2\2\u0f9f\u0fa0\7R\2\2\u0fa0\u0fa1"+ + "\7a\2\2\u0fa1\u0fa2\7E\2\2\u0fa2\u0fa3\7Q\2\2\u0fa3\u0fa4\7P\2\2\u0fa4"+ + "\u0fa5\7E\2\2\u0fa5\u0fa6\7C\2\2\u0fa6\u0fa7\7V\2\2\u0fa7\u01e2\3\2\2"+ + "\2\u0fa8\u0fa9\7O\2\2\u0fa9\u0faa\7C\2\2\u0faa\u0fab\7Z\2\2\u0fab\u01e4"+ + "\3\2\2\2\u0fac\u0fad\7O\2\2\u0fad\u0fae\7K\2\2\u0fae\u0faf\7P\2\2\u0faf"+ + "\u01e6\3\2\2\2\u0fb0\u0fb1\7U\2\2\u0fb1\u0fb2\7V\2\2\u0fb2\u0fb3\7F\2"+ + "\2\u0fb3\u01e8\3\2\2\2\u0fb4\u0fb5\7U\2\2\u0fb5\u0fb6\7V\2\2\u0fb6\u0fb7"+ + "\7F\2\2\u0fb7\u0fb8\7F\2\2\u0fb8\u0fb9\7G\2\2\u0fb9\u0fba\7X\2\2\u0fba"+ + "\u01ea\3\2\2\2\u0fbb\u0fbc\7U\2\2\u0fbc\u0fbd\7V\2\2\u0fbd\u0fbe\7F\2"+ + "\2\u0fbe\u0fbf\7F\2\2\u0fbf\u0fc0\7G\2\2\u0fc0\u0fc1\7X\2\2\u0fc1\u0fc2"+ + "\7a\2\2\u0fc2\u0fc3\7R\2\2\u0fc3\u0fc4\7Q\2\2\u0fc4\u0fc5\7R\2\2\u0fc5"+ + "\u01ec\3\2\2\2\u0fc6\u0fc7\7U\2\2\u0fc7\u0fc8\7V\2\2\u0fc8\u0fc9\7F\2"+ + "\2\u0fc9\u0fca\7F\2\2\u0fca\u0fcb\7G\2\2\u0fcb\u0fcc\7X\2\2\u0fcc\u0fcd"+ + "\7a\2\2\u0fcd\u0fce\7U\2\2\u0fce\u0fcf\7C\2\2\u0fcf\u0fd0\7O\2\2\u0fd0"+ + "\u0fd1\7R\2\2\u0fd1\u01ee\3\2\2\2\u0fd2\u0fd3\7U\2\2\u0fd3\u0fd4\7W\2"+ + "\2\u0fd4\u0fd5\7O\2\2\u0fd5\u01f0\3\2\2\2\u0fd6\u0fd7\7X\2\2\u0fd7\u0fd8"+ + "\7C\2\2\u0fd8\u0fd9\7T\2\2\u0fd9\u0fda\7a\2\2\u0fda\u0fdb\7R\2\2\u0fdb"+ + "\u0fdc\7Q\2\2\u0fdc\u0fdd\7R\2\2\u0fdd\u01f2\3\2\2\2\u0fde\u0fdf\7X\2"+ + "\2\u0fdf\u0fe0\7C\2\2\u0fe0\u0fe1\7T\2\2\u0fe1\u0fe2\7a\2\2\u0fe2\u0fe3"+ + "\7U\2\2\u0fe3\u0fe4\7C\2\2\u0fe4\u0fe5\7O\2\2\u0fe5\u0fe6\7R\2\2\u0fe6"+ + "\u01f4\3\2\2\2\u0fe7\u0fe8\7X\2\2\u0fe8\u0fe9\7C\2\2\u0fe9\u0fea\7T\2"+ + "\2\u0fea\u0feb\7K\2\2\u0feb\u0fec\7C\2\2\u0fec\u0fed\7P\2\2\u0fed\u0fee"+ + "\7E\2\2\u0fee\u0fef\7G\2\2\u0fef\u01f6\3\2\2\2\u0ff0\u0ff1\7E\2\2\u0ff1"+ + "\u0ff2\7W\2\2\u0ff2\u0ff3\7T\2\2\u0ff3\u0ff4\7T\2\2\u0ff4\u0ff5\7G\2\2"+ + "\u0ff5\u0ff6\7P\2\2\u0ff6\u0ff7\7V\2\2\u0ff7\u0ff8\7a\2\2\u0ff8\u0ff9"+ + "\7F\2\2\u0ff9\u0ffa\7C\2\2\u0ffa\u0ffb\7V\2\2\u0ffb\u0ffc\7G\2\2\u0ffc"+ + "\u01f8\3\2\2\2\u0ffd\u0ffe\7E\2\2\u0ffe\u0fff\7W\2\2\u0fff\u1000\7T\2"+ + "\2\u1000\u1001\7T\2\2\u1001\u1002\7G\2\2\u1002\u1003\7P\2\2\u1003\u1004"+ + "\7V\2\2\u1004\u1005\7a\2\2\u1005\u1006\7V\2\2\u1006\u1007\7K\2\2\u1007"+ + "\u1008\7O\2\2\u1008\u1009\7G\2\2\u1009\u01fa\3\2\2\2\u100a\u100b\7E\2"+ + "\2\u100b\u100c\7W\2\2\u100c\u100d\7T\2\2\u100d\u100e\7T\2\2\u100e\u100f"+ + "\7G\2\2\u100f\u1010\7P\2\2\u1010\u1011\7V\2\2\u1011\u1012\7a\2\2\u1012"+ + "\u1013\7V\2\2\u1013\u1014\7K\2\2\u1014\u1015\7O\2\2\u1015\u1016\7G\2\2"+ + "\u1016\u1017\7U\2\2\u1017\u1018\7V\2\2\u1018\u1019\7C\2\2\u1019\u101a"+ + "\7O\2\2\u101a\u101b\7R\2\2\u101b\u01fc\3\2\2\2\u101c\u101d\7N\2\2\u101d"+ + "\u101e\7Q\2\2\u101e\u101f\7E\2\2\u101f\u1020\7C\2\2\u1020\u1021\7N\2\2"+ + "\u1021\u1022\7V\2\2\u1022\u1023\7K\2\2\u1023\u1024\7O\2\2\u1024\u1025"+ + "\7G\2\2\u1025\u01fe\3\2\2\2\u1026\u1027\7E\2\2\u1027\u1028\7W\2\2\u1028"+ + "\u1029\7T\2\2\u1029\u102a\7F\2\2\u102a\u102b\7C\2\2\u102b\u102c\7V\2\2"+ + "\u102c\u102d\7G\2\2\u102d\u0200\3\2\2\2\u102e\u102f\7E\2\2\u102f\u1030"+ + "\7W\2\2\u1030\u1031\7T\2\2\u1031\u1032\7V\2\2\u1032\u1033\7K\2\2\u1033"+ + "\u1034\7O\2\2\u1034\u1035\7G\2\2\u1035\u0202\3\2\2\2\u1036\u1037\7F\2"+ + "\2\u1037\u1038\7C\2\2\u1038\u1039\7V\2\2\u1039\u103a\7G\2\2\u103a\u103b"+ + "\7a\2\2\u103b\u103c\7C\2\2\u103c\u103d\7F\2\2\u103d\u103e\7F\2\2\u103e"+ + "\u0204\3\2\2\2\u103f\u1040\7F\2\2\u1040\u1041\7C\2\2\u1041\u1042\7V\2"+ + "\2\u1042\u1043\7G\2\2\u1043\u1044\7a\2\2\u1044\u1045\7U\2\2\u1045\u1046"+ + "\7W\2\2\u1046\u1047\7D\2\2\u1047\u0206\3\2\2\2\u1048\u1049\7G\2\2\u1049"+ + "\u104a\7Z\2\2\u104a\u104b\7V\2\2\u104b\u104c\7T\2\2\u104c\u104d\7C\2\2"+ + "\u104d\u104e\7E\2\2\u104e\u104f\7V\2\2\u104f\u0208\3\2\2\2\u1050\u1051"+ + "\7N\2\2\u1051\u1052\7Q\2\2\u1052\u1053\7E\2\2\u1053\u1054\7C\2\2\u1054"+ + "\u1055\7N\2\2\u1055\u1056\7V\2\2\u1056\u1057\7K\2\2\u1057\u1058\7O\2\2"+ + "\u1058\u1059\7G\2\2\u1059\u105a\7U\2\2\u105a\u105b\7V\2\2\u105b\u105c"+ + "\7C\2\2\u105c\u105d\7O\2\2\u105d\u105e\7R\2\2\u105e\u020a\3\2\2\2\u105f"+ + "\u1060\7P\2\2\u1060\u1061\7Q\2\2\u1061\u1062\7Y\2\2\u1062\u020c\3\2\2"+ + "\2\u1063\u1064\7R\2\2\u1064\u1065\7Q\2\2\u1065\u1066\7U\2\2\u1066\u1067"+ + "\7K\2\2\u1067\u1068\7V\2\2\u1068\u1069\7K\2\2\u1069\u106a\7Q\2\2\u106a"+ + "\u106b\7P\2\2\u106b\u020e\3\2\2\2\u106c\u106d\7U\2\2\u106d\u106e\7W\2"+ + "\2\u106e\u106f\7D\2\2\u106f\u1070\7U\2\2\u1070\u1071\7V\2\2\u1071\u1072"+ + "\7T\2\2\u1072\u0210\3\2\2\2\u1073\u1074\7U\2\2\u1074\u1075\7W\2\2\u1075"+ + "\u1076\7D\2\2\u1076\u1077\7U\2\2\u1077\u1078\7V\2\2\u1078\u1079\7T\2\2"+ + "\u1079\u107a\7K\2\2\u107a\u107b\7P\2\2\u107b\u107c\7I\2\2\u107c\u0212"+ + "\3\2\2\2\u107d\u107e\7U\2\2\u107e\u107f\7[\2\2\u107f\u1080\7U\2\2\u1080"+ + "\u1081\7F\2\2\u1081\u1082\7C\2\2\u1082\u1083\7V\2\2\u1083\u1084\7G\2\2"+ + "\u1084\u0214\3\2\2\2\u1085\u1086\7V\2\2\u1086\u1087\7T\2\2\u1087\u1088"+ + "\7K\2\2\u1088\u1089\7O\2\2\u1089\u0216\3\2\2\2\u108a\u108b\7W\2\2\u108b"+ + "\u108c\7V\2\2\u108c\u108d\7E\2\2\u108d\u108e\7a\2\2\u108e\u108f\7F\2\2"+ + "\u108f\u1090\7C\2\2\u1090\u1091\7V\2\2\u1091\u1092\7G\2\2\u1092\u0218"+ + "\3\2\2\2\u1093\u1094\7W\2\2\u1094\u1095\7V\2\2\u1095\u1096\7E\2\2\u1096"+ + "\u1097\7a\2\2\u1097\u1098\7V\2\2\u1098\u1099\7K\2\2\u1099\u109a\7O\2\2"+ + "\u109a\u109b\7G\2\2\u109b\u021a\3\2\2\2\u109c\u109d\7W\2\2\u109d\u109e"+ + "\7V\2\2\u109e\u109f\7E\2\2\u109f\u10a0\7a\2\2\u10a0\u10a1\7V\2\2\u10a1"+ + "\u10a2\7K\2\2\u10a2\u10a3\7O\2\2\u10a3\u10a4\7G\2\2\u10a4\u10a5\7U\2\2"+ + "\u10a5\u10a6\7V\2\2\u10a6\u10a7\7C\2\2\u10a7\u10a8\7O\2\2\u10a8\u10a9"+ + "\7R\2\2\u10a9\u021c\3\2\2\2\u10aa\u10ab\7C\2\2\u10ab\u10ac\7E\2\2\u10ac"+ + "\u10ad\7E\2\2\u10ad\u10ae\7Q\2\2\u10ae\u10af\7W\2\2\u10af\u10b0\7P\2\2"+ + "\u10b0\u10b1\7V\2\2\u10b1\u021e\3\2\2\2\u10b2\u10b3\7C\2\2\u10b3\u10b4"+ + "\7E\2\2\u10b4\u10b5\7V\2\2\u10b5\u10b6\7K\2\2\u10b6\u10b7\7Q\2\2\u10b7"+ + "\u10b8\7P\2\2\u10b8\u0220\3\2\2\2\u10b9\u10ba\7C\2\2\u10ba\u10bb\7H\2"+ + "\2\u10bb\u10bc\7V\2\2\u10bc\u10bd\7G\2\2\u10bd\u10be\7T\2\2\u10be\u0222"+ + "\3\2\2\2\u10bf\u10c0\7C\2\2\u10c0\u10c1\7I\2\2\u10c1\u10c2\7I\2\2\u10c2"+ + "\u10c3\7T\2\2\u10c3\u10c4\7G\2\2\u10c4\u10c5\7I\2\2\u10c5\u10c6\7C\2\2"+ + "\u10c6\u10c7\7V\2\2\u10c7\u10c8\7G\2\2\u10c8\u0224\3\2\2\2\u10c9\u10ca"+ + "\7C\2\2\u10ca\u10cb\7N\2\2\u10cb\u10cc\7I\2\2\u10cc\u10cd\7Q\2\2\u10cd"+ + "\u10ce\7T\2\2\u10ce\u10cf\7K\2\2\u10cf\u10d0\7V\2\2\u10d0\u10d1\7J\2\2"+ + "\u10d1\u10d2\7O\2\2\u10d2\u0226\3\2\2\2\u10d3\u10d4\7C\2\2\u10d4\u10d5"+ + "\7P\2\2\u10d5\u10d6\7[\2\2\u10d6\u0228\3\2\2\2\u10d7\u10d8\7C\2\2\u10d8"+ + "\u10d9\7V\2\2\u10d9\u022a\3\2\2\2\u10da\u10db\7C\2\2\u10db\u10dc\7W\2"+ + "\2\u10dc\u10dd\7V\2\2\u10dd\u10de\7J\2\2\u10de\u10df\7Q\2\2\u10df\u10e0"+ + "\7T\2\2\u10e0\u10e1\7U\2\2\u10e1\u022c\3\2\2\2\u10e2\u10e3\7C\2\2\u10e3"+ + "\u10e4\7W\2\2\u10e4\u10e5\7V\2\2\u10e5\u10e6\7Q\2\2\u10e6\u10e7\7E\2\2"+ + "\u10e7\u10e8\7Q\2\2\u10e8\u10e9\7O\2\2\u10e9\u10ea\7O\2\2\u10ea\u10eb"+ + "\7K\2\2\u10eb\u10ec\7V\2\2\u10ec\u022e\3\2\2\2\u10ed\u10ee\7C\2\2\u10ee"+ + "\u10ef\7W\2\2\u10ef\u10f0\7V\2\2\u10f0\u10f1\7Q\2\2\u10f1\u10f2\7G\2\2"+ + "\u10f2\u10f3\7Z\2\2\u10f3\u10f4\7V\2\2\u10f4\u10f5\7G\2\2\u10f5\u10f6"+ + "\7P\2\2\u10f6\u10f7\7F\2\2\u10f7\u10f8\7a\2\2\u10f8\u10f9\7U\2\2\u10f9"+ + "\u10fa\7K\2\2\u10fa\u10fb\7\\\2\2\u10fb\u10fc\7G\2\2\u10fc\u0230\3\2\2"+ + "\2\u10fd\u10fe\7C\2\2\u10fe\u10ff\7W\2\2\u10ff\u1100\7V\2\2\u1100\u1101"+ + "\7Q\2\2\u1101\u1102\7a\2\2\u1102\u1103\7K\2\2\u1103\u1104\7P\2\2\u1104"+ + "\u1105\7E\2\2\u1105\u1106\7T\2\2\u1106\u1107\7G\2\2\u1107\u1108\7O\2\2"+ + "\u1108\u1109\7G\2\2\u1109\u110a\7P\2\2\u110a\u110b\7V\2\2\u110b\u0232"+ + "\3\2\2\2\u110c\u110d\7C\2\2\u110d\u110e\7X\2\2\u110e\u110f\7I\2\2\u110f"+ + "\u1110\7a\2\2\u1110\u1111\7T\2\2\u1111\u1112\7Q\2\2\u1112\u1113\7Y\2\2"+ + "\u1113\u1114\7a\2\2\u1114\u1115\7N\2\2\u1115\u1116\7G\2\2\u1116\u1117"+ + "\7P\2\2\u1117\u1118\7I\2\2\u1118\u1119\7V\2\2\u1119\u111a\7J\2\2\u111a"+ + "\u0234\3\2\2\2\u111b\u111c\7D\2\2\u111c\u111d\7G\2\2\u111d\u111e\7I\2"+ + "\2\u111e\u111f\7K\2\2\u111f\u1120\7P\2\2\u1120\u0236\3\2\2\2\u1121\u1122"+ + "\7D\2\2\u1122\u1123\7K\2\2\u1123\u1124\7P\2\2\u1124\u1125\7N\2\2\u1125"+ + "\u1126\7Q\2\2\u1126\u1127\7I\2\2\u1127\u0238\3\2\2\2\u1128\u1129\7D\2"+ + "\2\u1129\u112a\7K\2\2\u112a\u112b\7V\2\2\u112b\u023a\3\2\2\2\u112c\u112d"+ + "\7D\2\2\u112d\u112e\7N\2\2\u112e\u112f\7Q\2\2\u112f\u1130\7E\2\2\u1130"+ + "\u1131\7M\2\2\u1131\u023c\3\2\2\2\u1132\u1133\7D\2\2\u1133\u1134\7Q\2"+ + "\2\u1134\u1135\7Q\2\2\u1135\u1136\7N\2\2\u1136\u023e\3\2\2\2\u1137\u1138"+ + "\7D\2\2\u1138\u1139\7Q\2\2\u1139\u113a\7Q\2\2\u113a\u113b\7N\2\2\u113b"+ + "\u113c\7G\2\2\u113c\u113d\7C\2\2\u113d\u113e\7P\2\2\u113e\u0240\3\2\2"+ + "\2\u113f\u1140\7D\2\2\u1140\u1141\7V\2\2\u1141\u1142\7T\2\2\u1142\u1143"+ + "\7G\2\2\u1143\u1144\7G\2\2\u1144\u0242\3\2\2\2\u1145\u1146\7E\2\2\u1146"+ + "\u1147\7C\2\2\u1147\u1148\7E\2\2\u1148\u1149\7J\2\2\u1149\u114a\7G\2\2"+ + "\u114a\u0244\3\2\2\2\u114b\u114c\7E\2\2\u114c\u114d\7C\2\2\u114d\u114e"+ + "\7U\2\2\u114e\u114f\7E\2\2\u114f\u1150\7C\2\2\u1150\u1151\7F\2\2\u1151"+ + "\u1152\7G\2\2\u1152\u1153\7F\2\2\u1153\u0246\3\2\2\2\u1154\u1155\7E\2"+ + "\2\u1155\u1156\7J\2\2\u1156\u1157\7C\2\2\u1157\u1158\7K\2\2\u1158\u1159"+ + "\7P\2\2\u1159\u0248\3\2\2\2\u115a\u115b\7E\2\2\u115b\u115c\7J\2\2\u115c"+ + "\u115d\7C\2\2\u115d\u115e\7P\2\2\u115e\u115f\7I\2\2\u115f\u1160\7G\2\2"+ + "\u1160\u1161\7F\2\2\u1161\u024a\3\2\2\2\u1162\u1163\7E\2\2\u1163\u1164"+ + "\7J\2\2\u1164\u1165\7C\2\2\u1165\u1166\7P\2\2\u1166\u1167\7P\2\2\u1167"+ + "\u1168\7G\2\2\u1168\u1169\7N\2\2\u1169\u024c\3\2\2\2\u116a\u116b\7E\2"+ + "\2\u116b\u116c\7J\2\2\u116c\u116d\7G\2\2\u116d\u116e\7E\2\2\u116e\u116f"+ + "\7M\2\2\u116f\u1170\7U\2\2\u1170\u1171\7W\2\2\u1171\u1172\7O\2\2\u1172"+ + "\u024e\3\2\2\2\u1173\u1174\7R\2\2\u1174\u1175\7C\2\2\u1175\u1176\7I\2"+ + "\2\u1176\u1177\7G\2\2\u1177\u1178\7a\2\2\u1178\u1179\7E\2\2\u1179\u117a"+ + "\7J\2\2\u117a\u117b\7G\2\2\u117b\u117c\7E\2\2\u117c\u117d\7M\2\2\u117d"+ + "\u117e\7U\2\2\u117e\u117f\7W\2\2\u117f\u1180\7O\2\2\u1180\u0250\3\2\2"+ + "\2\u1181\u1182\7E\2\2\u1182\u1183\7K\2\2\u1183\u1184\7R\2\2\u1184\u1185"+ + "\7J\2\2\u1185\u1186\7G\2\2\u1186\u1187\7T\2\2\u1187\u0252\3\2\2\2\u1188"+ + "\u1189\7E\2\2\u1189\u118a\7N\2\2\u118a\u118b\7C\2\2\u118b\u118c\7U\2\2"+ + "\u118c\u118d\7U\2\2\u118d\u118e\7a\2\2\u118e\u118f\7Q\2\2\u118f\u1190"+ + "\7T\2\2\u1190\u1191\7K\2\2\u1191\u1192\7I\2\2\u1192\u1193\7K\2\2\u1193"+ + "\u1194\7P\2\2\u1194\u0254\3\2\2\2\u1195\u1196\7E\2\2\u1196\u1197\7N\2"+ + "\2\u1197\u1198\7K\2\2\u1198\u1199\7G\2\2\u1199\u119a\7P\2\2\u119a\u119b"+ + "\7V\2\2\u119b\u0256\3\2\2\2\u119c\u119d\7E\2\2\u119d\u119e\7N\2\2\u119e"+ + "\u119f\7Q\2\2\u119f\u11a0\7U\2\2\u11a0\u11a1\7G\2\2\u11a1\u0258\3\2\2"+ + "\2\u11a2\u11a3\7E\2\2\u11a3\u11a4\7Q\2\2\u11a4\u11a5\7C\2\2\u11a5\u11a6"+ + "\7N\2\2\u11a6\u11a7\7G\2\2\u11a7\u11a8\7U\2\2\u11a8\u11a9\7E\2\2\u11a9"+ + "\u11aa\7G\2\2\u11aa\u025a\3\2\2\2\u11ab\u11ac\7E\2\2\u11ac\u11ad\7Q\2"+ + "\2\u11ad\u11ae\7F\2\2\u11ae\u11af\7G\2\2\u11af\u025c\3\2\2\2\u11b0\u11b1"+ + "\7E\2\2\u11b1\u11b2\7Q\2\2\u11b2\u11b3\7N\2\2\u11b3\u11b4\7W\2\2\u11b4"+ + "\u11b5\7O\2\2\u11b5\u11b6\7P\2\2\u11b6\u11b7\7U\2\2\u11b7\u025e\3\2\2"+ + "\2\u11b8\u11b9\7E\2\2\u11b9\u11ba\7Q\2\2\u11ba\u11bb\7N\2\2\u11bb\u11bc"+ + "\7W\2\2\u11bc\u11bd\7O\2\2\u11bd\u11be\7P\2\2\u11be\u11bf\7a\2\2\u11bf"+ + "\u11c0\7H\2\2\u11c0\u11c1\7Q\2\2\u11c1\u11c2\7T\2\2\u11c2\u11c3\7O\2\2"+ + "\u11c3\u11c4\7C\2\2\u11c4\u11c5\7V\2\2\u11c5\u0260\3\2\2\2\u11c6\u11c7"+ + "\7E\2\2\u11c7\u11c8\7Q\2\2\u11c8\u11c9\7N\2\2\u11c9\u11ca\7W\2\2\u11ca"+ + "\u11cb\7O\2\2\u11cb\u11cc\7P\2\2\u11cc\u11cd\7a\2\2\u11cd\u11ce\7P\2\2"+ + "\u11ce\u11cf\7C\2\2\u11cf\u11d0\7O\2\2\u11d0\u11d1\7G\2\2\u11d1\u0262"+ + "\3\2\2\2\u11d2\u11d3\7E\2\2\u11d3\u11d4\7Q\2\2\u11d4\u11d5\7O\2\2\u11d5"+ + "\u11d6\7O\2\2\u11d6\u11d7\7G\2\2\u11d7\u11d8\7P\2\2\u11d8\u11d9\7V\2\2"+ + "\u11d9\u0264\3\2\2\2\u11da\u11db\7E\2\2\u11db\u11dc\7Q\2\2\u11dc\u11dd"+ + "\7O\2\2\u11dd\u11de\7O\2\2\u11de\u11df\7K\2\2\u11df\u11e0\7V\2\2\u11e0"+ + "\u0266\3\2\2\2\u11e1\u11e2\7E\2\2\u11e2\u11e3\7Q\2\2\u11e3\u11e4\7O\2"+ + "\2\u11e4\u11e5\7R\2\2\u11e5\u11e6\7C\2\2\u11e6\u11e7\7E\2\2\u11e7\u11e8"+ + "\7V\2\2\u11e8\u0268\3\2\2\2\u11e9\u11ea\7E\2\2\u11ea\u11eb\7Q\2\2\u11eb"+ + "\u11ec\7O\2\2\u11ec\u11ed\7R\2\2\u11ed\u11ee\7N\2\2\u11ee\u11ef\7G\2\2"+ + "\u11ef\u11f0\7V\2\2\u11f0\u11f1\7K\2\2\u11f1\u11f2\7Q\2\2\u11f2\u11f3"+ + "\7P\2\2\u11f3\u026a\3\2\2\2\u11f4\u11f5\7E\2\2\u11f5\u11f6\7Q\2\2\u11f6"+ + "\u11f7\7O\2\2\u11f7\u11f8\7R\2\2\u11f8\u11f9\7T\2\2\u11f9\u11fa\7G\2\2"+ + "\u11fa\u11fb\7U\2\2\u11fb\u11fc\7U\2\2\u11fc\u11fd\7G\2\2\u11fd\u11fe"+ + "\7F\2\2\u11fe\u026c\3\2\2\2\u11ff\u1200\7E\2\2\u1200\u1201\7Q\2\2\u1201"+ + "\u1202\7O\2\2\u1202\u1203\7R\2\2\u1203\u1204\7T\2\2\u1204\u1205\7G\2\2"+ + "\u1205\u1206\7U\2\2\u1206\u1207\7U\2\2\u1207\u1208\7K\2\2\u1208\u1209"+ + "\7Q\2\2\u1209\u120a\7P\2\2\u120a\u026e\3\2\2\2\u120b\u120c\7E\2\2\u120c"+ + "\u120d\7Q\2\2\u120d\u120e\7P\2\2\u120e\u120f\7E\2\2\u120f\u1210\7W\2\2"+ + "\u1210\u1211\7T\2\2\u1211\u1212\7T\2\2\u1212\u1213\7G\2\2\u1213\u1214"+ + "\7P\2\2\u1214\u1215\7V\2\2\u1215\u0270\3\2\2\2\u1216\u1217\7E\2\2\u1217"+ + "\u1218\7Q\2\2\u1218\u1219\7P\2\2\u1219\u121a\7P\2\2\u121a\u121b\7G\2\2"+ + "\u121b\u121c\7E\2\2\u121c\u121d\7V\2\2\u121d\u121e\7K\2\2\u121e\u121f"+ + "\7Q\2\2\u121f\u1220\7P\2\2\u1220\u0272\3\2\2\2\u1221\u1222\7E\2\2\u1222"+ + "\u1223\7Q\2\2\u1223\u1224\7P\2\2\u1224\u1225\7U\2\2\u1225\u1226\7K\2\2"+ + "\u1226\u1227\7U\2\2\u1227\u1228\7V\2\2\u1228\u1229\7G\2\2\u1229\u122a"+ + "\7P\2\2\u122a\u122b\7V\2\2\u122b\u0274\3\2\2\2\u122c\u122d\7E\2\2\u122d"+ + "\u122e\7Q\2\2\u122e\u122f\7P\2\2\u122f\u1230\7U\2\2\u1230\u1231\7V\2\2"+ + "\u1231\u1232\7T\2\2\u1232\u1233\7C\2\2\u1233\u1234\7K\2\2\u1234\u1235"+ + "\7P\2\2\u1235\u1236\7V\2\2\u1236\u1237\7a\2\2\u1237\u1238\7E\2\2\u1238"+ + "\u1239\7C\2\2\u1239\u123a\7V\2\2\u123a\u123b\7C\2\2\u123b\u123c\7N\2\2"+ + "\u123c\u123d\7Q\2\2\u123d\u123e\7I\2\2\u123e\u0276\3\2\2\2\u123f\u1240"+ + "\7E\2\2\u1240\u1241\7Q\2\2\u1241\u1242\7P\2\2\u1242\u1243\7U\2\2\u1243"+ + "\u1244\7V\2\2\u1244\u1245\7T\2\2\u1245\u1246\7C\2\2\u1246\u1247\7K\2\2"+ + "\u1247\u1248\7P\2\2\u1248\u1249\7V\2\2\u1249\u124a\7a\2\2\u124a\u124b"+ + "\7U\2\2\u124b\u124c\7E\2\2\u124c\u124d\7J\2\2\u124d\u124e\7G\2\2\u124e"+ + "\u124f\7O\2\2\u124f\u1250\7C\2\2\u1250\u0278\3\2\2\2\u1251\u1252\7E\2"+ + "\2\u1252\u1253\7Q\2\2\u1253\u1254\7P\2\2\u1254\u1255\7U\2\2\u1255\u1256"+ + "\7V\2\2\u1256\u1257\7T\2\2\u1257\u1258\7C\2\2\u1258\u1259\7K\2\2\u1259"+ + "\u125a\7P\2\2\u125a\u125b\7V\2\2\u125b\u125c\7a\2\2\u125c\u125d\7P\2\2"+ + "\u125d\u125e\7C\2\2\u125e\u125f\7O\2\2\u125f\u1260\7G\2\2\u1260\u027a"+ + "\3\2\2\2\u1261\u1262\7E\2\2\u1262\u1263\7Q\2\2\u1263\u1264\7P\2\2\u1264"+ + "\u1265\7V\2\2\u1265\u1266\7C\2\2\u1266\u1267\7K\2\2\u1267\u1268\7P\2\2"+ + "\u1268\u1269\7U\2\2\u1269\u027c\3\2\2\2\u126a\u126b\7E\2\2\u126b\u126c"+ + "\7Q\2\2\u126c\u126d\7P\2\2\u126d\u126e\7V\2\2\u126e\u126f\7G\2\2\u126f"+ + "\u1270\7Z\2\2\u1270\u1271\7V\2\2\u1271\u027e\3\2\2\2\u1272\u1273\7E\2"+ + "\2\u1273\u1274\7Q\2\2\u1274\u1275\7P\2\2\u1275\u1276\7V\2\2\u1276\u1277"+ + "\7T\2\2\u1277\u1278\7K\2\2\u1278\u1279\7D\2\2\u1279\u127a\7W\2\2\u127a"+ + "\u127b\7V\2\2\u127b\u127c\7Q\2\2\u127c\u127d\7T\2\2\u127d\u127e\7U\2\2"+ + "\u127e\u0280\3\2\2\2\u127f\u1280\7E\2\2\u1280\u1281\7Q\2\2\u1281\u1282"+ + "\7R\2\2\u1282\u1283\7[\2\2\u1283\u0282\3\2\2\2\u1284\u1285\7E\2\2\u1285"+ + "\u1286\7R\2\2\u1286\u1287\7W\2\2\u1287\u0284\3\2\2\2\u1288\u1289\7E\2"+ + "\2\u1289\u128a\7W\2\2\u128a\u128b\7T\2\2\u128b\u128c\7U\2\2\u128c\u128d"+ + "\7Q\2\2\u128d\u128e\7T\2\2\u128e\u128f\7a\2\2\u128f\u1290\7P\2\2\u1290"+ + "\u1291\7C\2\2\u1291\u1292\7O\2\2\u1292\u1293\7G\2\2\u1293\u0286\3\2\2"+ + "\2\u1294\u1295\7F\2\2\u1295\u1296\7C\2\2\u1296\u1297\7V\2\2\u1297\u1298"+ + "\7C\2\2\u1298\u0288\3\2\2\2\u1299\u129a\7F\2\2\u129a\u129b\7C\2\2\u129b"+ + "\u129c\7V\2\2\u129c\u129d\7C\2\2\u129d\u129e\7H\2\2\u129e\u129f\7K\2\2"+ + "\u129f\u12a0\7N\2\2\u12a0\u12a1\7G\2\2\u12a1\u028a\3\2\2\2\u12a2\u12a3"+ + "\7F\2\2\u12a3\u12a4\7G\2\2\u12a4\u12a5\7C\2\2\u12a5\u12a6\7N\2\2\u12a6"+ + "\u12a7\7N\2\2\u12a7\u12a8\7Q\2\2\u12a8\u12a9\7E\2\2\u12a9\u12aa\7C\2\2"+ + "\u12aa\u12ab\7V\2\2\u12ab\u12ac\7G\2\2\u12ac\u028c\3\2\2\2\u12ad\u12ae"+ + "\7F\2\2\u12ae\u12af\7G\2\2\u12af\u12b0\7H\2\2\u12b0\u12b1\7C\2\2\u12b1"+ + "\u12b2\7W\2\2\u12b2\u12b3\7N\2\2\u12b3\u12b4\7V\2\2\u12b4\u12b5\7a\2\2"+ + "\u12b5\u12b6\7C\2\2\u12b6\u12b7\7W\2\2\u12b7\u12b8\7V\2\2\u12b8\u12b9"+ + "\7J\2\2\u12b9\u028e\3\2\2\2\u12ba\u12bb\7F\2\2\u12bb\u12bc\7G\2\2\u12bc"+ + "\u12bd\7H\2\2\u12bd\u12be\7K\2\2\u12be\u12bf\7P\2\2\u12bf\u12c0\7G\2\2"+ + "\u12c0\u12c1\7T\2\2\u12c1\u0290\3\2\2\2\u12c2\u12c3\7F\2\2\u12c3\u12c4"+ + "\7G\2\2\u12c4\u12c5\7N\2\2\u12c5\u12c6\7C\2\2\u12c6\u12c7\7[\2\2\u12c7"+ + "\u12c8\7a\2\2\u12c8\u12c9\7M\2\2\u12c9\u12ca\7G\2\2\u12ca\u12cb\7[\2\2"+ + "\u12cb\u12cc\7a\2\2\u12cc\u12cd\7Y\2\2\u12cd\u12ce\7T\2\2\u12ce\u12cf"+ + "\7K\2\2\u12cf\u12d0\7V\2\2\u12d0\u12d1\7G\2\2\u12d1\u0292\3\2\2\2\u12d2"+ + "\u12d3\7F\2\2\u12d3\u12d4\7G\2\2\u12d4\u12d5\7U\2\2\u12d5\u12d6\7a\2\2"+ + "\u12d6\u12d7\7M\2\2\u12d7\u12d8\7G\2\2\u12d8\u12d9\7[\2\2\u12d9\u12da"+ + "\7a\2\2\u12da\u12db\7H\2\2\u12db\u12dc\7K\2\2\u12dc\u12dd\7N\2\2\u12dd"+ + "\u12de\7G\2\2\u12de\u0294\3\2\2\2\u12df\u12e0\7F\2\2\u12e0\u12e1\7K\2"+ + "\2\u12e1\u12e2\7T\2\2\u12e2\u12e3\7G\2\2\u12e3\u12e4\7E\2\2\u12e4\u12e5"+ + "\7V\2\2\u12e5\u12e6\7Q\2\2\u12e6\u12e7\7T\2\2\u12e7\u12e8\7[\2\2\u12e8"+ + "\u0296\3\2\2\2\u12e9\u12ea\7F\2\2\u12ea\u12eb\7K\2\2\u12eb\u12ec\7U\2"+ + "\2\u12ec\u12ed\7C\2\2\u12ed\u12ee\7D\2\2\u12ee\u12ef\7N\2\2\u12ef\u12f0"+ + "\7G\2\2\u12f0\u0298\3\2\2\2\u12f1\u12f2\7F\2\2\u12f2\u12f3\7K\2\2\u12f3"+ + "\u12f4\7U\2\2\u12f4\u12f5\7E\2\2\u12f5\u12f6\7C\2\2\u12f6\u12f7\7T\2\2"+ + "\u12f7\u12f8\7F\2\2\u12f8\u029a\3\2\2\2\u12f9\u12fa\7F\2\2\u12fa\u12fb"+ + "\7K\2\2\u12fb\u12fc\7U\2\2\u12fc\u12fd\7M\2\2\u12fd\u029c\3\2\2\2\u12fe"+ + "\u12ff\7F\2\2\u12ff\u1300\7Q\2\2\u1300\u029e\3\2\2\2\u1301\u1302\7F\2"+ + "\2\u1302\u1303\7W\2\2\u1303\u1304\7O\2\2\u1304\u1305\7R\2\2\u1305\u1306"+ + "\7H\2\2\u1306\u1307\7K\2\2\u1307\u1308\7N\2\2\u1308\u1309\7G\2\2\u1309"+ + "\u02a0\3\2\2\2\u130a\u130b\7F\2\2\u130b\u130c\7W\2\2\u130c\u130d\7R\2"+ + "\2\u130d\u130e\7N\2\2\u130e\u130f\7K\2\2\u130f\u1310\7E\2\2\u1310\u1311"+ + "\7C\2\2\u1311\u1312\7V\2\2\u1312\u1313\7G\2\2\u1313\u02a2\3\2\2\2\u1314"+ + "\u1315\7F\2\2\u1315\u1316\7[\2\2\u1316\u1317\7P\2\2\u1317\u1318\7C\2\2"+ + "\u1318\u1319\7O\2\2\u1319\u131a\7K\2\2\u131a\u131b\7E\2\2\u131b\u02a4"+ + "\3\2\2\2\u131c\u131d\7G\2\2\u131d\u131e\7P\2\2\u131e\u131f\7C\2\2\u131f"+ + "\u1320\7D\2\2\u1320\u1321\7N\2\2\u1321\u1322\7G\2\2\u1322\u02a6\3\2\2"+ + "\2\u1323\u1324\7G\2\2\u1324\u1325\7P\2\2\u1325\u1326\7E\2\2\u1326\u1327"+ + "\7T\2\2\u1327\u1328\7[\2\2\u1328\u1329\7R\2\2\u1329\u132a\7V\2\2\u132a"+ + "\u132b\7K\2\2\u132b\u132c\7Q\2\2\u132c\u132d\7P\2\2\u132d\u02a8\3\2\2"+ + "\2\u132e\u132f\7G\2\2\u132f\u1330\7P\2\2\u1330\u1331\7F\2\2\u1331\u02aa"+ + "\3\2\2\2\u1332\u1333\7G\2\2\u1333\u1334\7P\2\2\u1334\u1335\7F\2\2\u1335"+ + "\u1336\7U\2\2\u1336\u02ac\3\2\2\2\u1337\u1338\7G\2\2\u1338\u1339\7P\2"+ + "\2\u1339\u133a\7I\2\2\u133a\u133b\7K\2\2\u133b\u133c\7P\2\2\u133c\u133d"+ + "\7G\2\2\u133d\u02ae\3\2\2\2\u133e\u133f\7G\2\2\u133f\u1340\7P\2\2\u1340"+ + "\u1341\7I\2\2\u1341\u1342\7K\2\2\u1342\u1343\7P\2\2\u1343\u1344\7G\2\2"+ + "\u1344\u1345\7U\2\2\u1345\u02b0\3\2\2\2\u1346\u1347\7G\2\2\u1347\u1348"+ + "\7T\2\2\u1348\u1349\7T\2\2\u1349\u134a\7Q\2\2\u134a\u134b\7T\2\2\u134b"+ + "\u02b2\3\2\2\2\u134c\u134d\7G\2\2\u134d\u134e\7T\2\2\u134e\u134f\7T\2"+ + "\2\u134f\u1350\7Q\2\2\u1350\u1351\7T\2\2\u1351\u1352\7U\2\2\u1352\u02b4"+ + "\3\2\2\2\u1353\u1354\7G\2\2\u1354\u1355\7U\2\2\u1355\u1356\7E\2\2\u1356"+ + "\u1357\7C\2\2\u1357\u1358\7R\2\2\u1358\u1359\7G\2\2\u1359\u02b6\3\2\2"+ + "\2\u135a\u135b\7G\2\2\u135b\u135c\7X\2\2\u135c\u135d\7G\2\2\u135d\u135e"+ + "\7P\2\2\u135e\u02b8\3\2\2\2\u135f\u1360\7G\2\2\u1360\u1361\7X\2\2\u1361"+ + "\u1362\7G\2\2\u1362\u1363\7P\2\2\u1363\u1364\7V\2\2\u1364\u02ba\3\2\2"+ + "\2\u1365\u1366\7G\2\2\u1366\u1367\7X\2\2\u1367\u1368\7G\2\2\u1368\u1369"+ + "\7P\2\2\u1369\u136a\7V\2\2\u136a\u136b\7U\2\2\u136b\u02bc\3\2\2\2\u136c"+ + "\u136d\7G\2\2\u136d\u136e\7X\2\2\u136e\u136f\7G\2\2\u136f\u1370\7T\2\2"+ + "\u1370\u1371\7[\2\2\u1371\u02be\3\2\2\2\u1372\u1373\7G\2\2\u1373\u1374"+ + "\7Z\2\2\u1374\u1375\7E\2\2\u1375\u1376\7J\2\2\u1376\u1377\7C\2\2\u1377"+ + "\u1378\7P\2\2\u1378\u1379\7I\2\2\u1379\u137a\7G\2\2\u137a\u02c0\3\2\2"+ + "\2\u137b\u137c\7G\2\2\u137c\u137d\7Z\2\2\u137d\u137e\7E\2\2\u137e\u137f"+ + "\7N\2\2\u137f\u1380\7W\2\2\u1380\u1381\7U\2\2\u1381\u1382\7K\2\2\u1382"+ + "\u1383\7X\2\2\u1383\u1384\7G\2\2\u1384\u02c2\3\2\2\2\u1385\u1386\7G\2"+ + "\2\u1386\u1387\7Z\2\2\u1387\u1388\7R\2\2\u1388\u1389\7K\2\2\u1389\u138a"+ + "\7T\2\2\u138a\u138b\7G\2\2\u138b\u02c4\3\2\2\2\u138c\u138d\7G\2\2\u138d"+ + "\u138e\7Z\2\2\u138e\u138f\7R\2\2\u138f\u1390\7Q\2\2\u1390\u1391\7T\2\2"+ + "\u1391\u1392\7V\2\2\u1392\u02c6\3\2\2\2\u1393\u1394\7G\2\2\u1394\u1395"+ + "\7Z\2\2\u1395\u1396\7V\2\2\u1396\u1397\7G\2\2\u1397\u1398\7P\2\2\u1398"+ + "\u1399\7F\2\2\u1399\u139a\7G\2\2\u139a\u139b\7F\2\2\u139b\u02c8\3\2\2"+ + "\2\u139c\u139d\7G\2\2\u139d\u139e\7Z\2\2\u139e\u139f\7V\2\2\u139f\u13a0"+ + "\7G\2\2\u13a0\u13a1\7P\2\2\u13a1\u13a2\7V\2\2\u13a2\u13a3\7a\2\2\u13a3"+ + "\u13a4\7U\2\2\u13a4\u13a5\7K\2\2\u13a5\u13a6\7\\\2\2\u13a6\u13a7\7G\2"+ + "\2\u13a7\u02ca\3\2\2\2\u13a8\u13a9\7H\2\2\u13a9\u13aa\7C\2\2\u13aa\u13ab"+ + "\7U\2\2\u13ab\u13ac\7V\2\2\u13ac\u02cc\3\2\2\2\u13ad\u13ae\7H\2\2\u13ae"+ + "\u13af\7C\2\2\u13af\u13b0\7W\2\2\u13b0\u13b1\7N\2\2\u13b1\u13b2\7V\2\2"+ + "\u13b2\u13b3\7U\2\2\u13b3\u02ce\3\2\2\2\u13b4\u13b5\7H\2\2\u13b5\u13b6"+ + "\7K\2\2\u13b6\u13b7\7G\2\2\u13b7\u13b8\7N\2\2\u13b8\u13b9\7F\2\2\u13b9"+ + "\u13ba\7U\2\2\u13ba\u02d0\3\2\2\2\u13bb\u13bc\7H\2\2\u13bc\u13bd\7K\2"+ + "\2\u13bd\u13be\7N\2\2\u13be\u13bf\7G\2\2\u13bf\u13c0\7a\2\2\u13c0\u13c1"+ + "\7D\2\2\u13c1\u13c2\7N\2\2\u13c2\u13c3\7Q\2\2\u13c3\u13c4\7E\2\2\u13c4"+ + "\u13c5\7M\2\2\u13c5\u13c6\7a\2\2\u13c6\u13c7\7U\2\2\u13c7\u13c8\7K\2\2"+ + "\u13c8\u13c9\7\\\2\2\u13c9\u13ca\7G\2\2\u13ca\u02d2\3\2\2\2\u13cb\u13cc"+ + "\7H\2\2\u13cc\u13cd\7K\2\2\u13cd\u13ce\7N\2\2\u13ce\u13cf\7V\2\2\u13cf"+ + "\u13d0\7G\2\2\u13d0\u13d1\7T\2\2\u13d1\u02d4\3\2\2\2\u13d2\u13d3\7H\2"+ + "\2\u13d3\u13d4\7K\2\2\u13d4\u13d5\7T\2\2\u13d5\u13d6\7U\2\2\u13d6\u13d7"+ + "\7V\2\2\u13d7\u02d6\3\2\2\2\u13d8\u13d9\7H\2\2\u13d9\u13da\7K\2\2\u13da"+ + "\u13db\7Z\2\2\u13db\u13dc\7G\2\2\u13dc\u13dd\7F\2\2\u13dd\u02d8\3\2\2"+ + "\2\u13de\u13df\7H\2\2\u13df\u13e0\7N\2\2\u13e0\u13e1\7W\2\2\u13e1\u13e2"+ + "\7U\2\2\u13e2\u13e3\7J\2\2\u13e3\u02da\3\2\2\2\u13e4\u13e5\7H\2\2\u13e5"+ + "\u13e6\7Q\2\2\u13e6\u13e7\7N\2\2\u13e7\u13e8\7N\2\2\u13e8\u13e9\7Q\2\2"+ + "\u13e9\u13ea\7Y\2\2\u13ea\u13eb\7U\2\2\u13eb\u02dc\3\2\2\2\u13ec\u13ed"+ + "\7H\2\2\u13ed\u13ee\7Q\2\2\u13ee\u13ef\7W\2\2\u13ef\u13f0\7P\2\2\u13f0"+ + "\u13f1\7F\2\2\u13f1\u02de\3\2\2\2\u13f2\u13f3\7H\2\2\u13f3\u13f4\7W\2"+ + "\2\u13f4\u13f5\7N\2\2\u13f5\u13f6\7N\2\2\u13f6\u02e0\3\2\2\2\u13f7\u13f8"+ + "\7H\2\2\u13f8\u13f9\7W\2\2\u13f9\u13fa\7P\2\2\u13fa\u13fb\7E\2\2\u13fb"+ + "\u13fc\7V\2\2\u13fc\u13fd\7K\2\2\u13fd\u13fe\7Q\2\2\u13fe\u13ff\7P\2\2"+ + "\u13ff\u02e2\3\2\2\2\u1400\u1401\7I\2\2\u1401\u1402\7G\2\2\u1402\u1403"+ + "\7P\2\2\u1403\u1404\7G\2\2\u1404\u1405\7T\2\2\u1405\u1406\7C\2\2\u1406"+ + "\u1407\7N\2\2\u1407\u02e4\3\2\2\2\u1408\u1409\7I\2\2\u1409\u140a\7N\2"+ + "\2\u140a\u140b\7Q\2\2\u140b\u140c\7D\2\2\u140c\u140d\7C\2\2\u140d\u140e"+ + "\7N\2\2\u140e\u02e6\3\2\2\2\u140f\u1410\7I\2\2\u1410\u1411\7T\2\2\u1411"+ + "\u1412\7C\2\2\u1412\u1413\7P\2\2\u1413\u1414\7V\2\2\u1414\u1415\7U\2\2"+ + "\u1415\u02e8\3\2\2\2\u1416\u1417\7I\2\2\u1417\u1418\7T\2\2\u1418\u1419"+ + "\7Q\2\2\u1419\u141a\7W\2\2\u141a\u141b\7R\2\2\u141b\u141c\7a\2\2\u141c"+ + "\u141d\7T\2\2\u141d\u141e\7G\2\2\u141e\u141f\7R\2\2\u141f\u1420\7N\2\2"+ + "\u1420\u1421\7K\2\2\u1421\u1422\7E\2\2\u1422\u1423\7C\2\2\u1423\u1424"+ + "\7V\2\2\u1424\u1425\7K\2\2\u1425\u1426\7Q\2\2\u1426\u1427\7P\2\2\u1427"+ + "\u02ea\3\2\2\2\u1428\u1429\7J\2\2\u1429\u142a\7C\2\2\u142a\u142b\7P\2"+ + "\2\u142b\u142c\7F\2\2\u142c\u142d\7N\2\2\u142d\u142e\7G\2\2\u142e\u142f"+ + "\7T\2\2\u142f\u02ec\3\2\2\2\u1430\u1431\7J\2\2\u1431\u1432\7C\2\2\u1432"+ + "\u1433\7U\2\2\u1433\u1434\7J\2\2\u1434\u02ee\3\2\2\2\u1435\u1436\7J\2"+ + "\2\u1436\u1437\7G\2\2\u1437\u1438\7N\2\2\u1438\u1439\7R\2\2\u1439\u02f0"+ + "\3\2\2\2\u143a\u143b\7J\2\2\u143b\u143c\7Q\2\2\u143c\u143d\7U\2\2\u143d"+ + "\u143e\7V\2\2\u143e\u02f2\3\2\2\2\u143f\u1440\7J\2\2\u1440\u1441\7Q\2"+ + "\2\u1441\u1442\7U\2\2\u1442\u1443\7V\2\2\u1443\u1444\7U\2\2\u1444\u02f4"+ + "\3\2\2\2\u1445\u1446\7K\2\2\u1446\u1447\7F\2\2\u1447\u1448\7G\2\2\u1448"+ + "\u1449\7P\2\2\u1449\u144a\7V\2\2\u144a\u144b\7K\2\2\u144b\u144c\7H\2\2"+ + "\u144c\u144d\7K\2\2\u144d\u144e\7G\2\2\u144e\u144f\7F\2\2\u144f\u02f6"+ + "\3\2\2\2\u1450\u1451\7K\2\2\u1451\u1452\7I\2\2\u1452\u1453\7P\2\2\u1453"+ + "\u1454\7Q\2\2\u1454\u1455\7T\2\2\u1455\u1456\7G\2\2\u1456\u1457\7a\2\2"+ + "\u1457\u1458\7U\2\2\u1458\u1459\7G\2\2\u1459\u145a\7T\2\2\u145a\u145b"+ + "\7X\2\2\u145b\u145c\7G\2\2\u145c\u145d\7T\2\2\u145d\u145e\7a\2\2\u145e"+ + "\u145f\7K\2\2\u145f\u1460\7F\2\2\u1460\u1461\7U\2\2\u1461\u02f8\3\2\2"+ + "\2\u1462\u1463\7K\2\2\u1463\u1464\7O\2\2\u1464\u1465\7R\2\2\u1465\u1466"+ + "\7Q\2\2\u1466\u1467\7T\2\2\u1467\u1468\7V\2\2\u1468\u02fa\3\2\2\2\u1469"+ + "\u146a\7K\2\2\u146a\u146b\7P\2\2\u146b\u146c\7F\2\2\u146c\u146d\7G\2\2"+ + "\u146d\u146e\7Z\2\2\u146e\u146f\7G\2\2\u146f\u1470\7U\2\2\u1470\u02fc"+ + "\3\2\2\2\u1471\u1472\7K\2\2\u1472\u1473\7P\2\2\u1473\u1474\7K\2\2\u1474"+ + "\u1475\7V\2\2\u1475\u1476\7K\2\2\u1476\u1477\7C\2\2\u1477\u1478\7N\2\2"+ + "\u1478\u1479\7a\2\2\u1479\u147a\7U\2\2\u147a\u147b\7K\2\2\u147b\u147c"+ + "\7\\\2\2\u147c\u147d\7G\2\2\u147d\u02fe\3\2\2\2\u147e\u147f\7K\2\2\u147f"+ + "\u1480\7P\2\2\u1480\u1481\7R\2\2\u1481\u1482\7N\2\2\u1482\u1483\7C\2\2"+ + "\u1483\u1484\7E\2\2\u1484\u1485\7G\2\2\u1485\u0300\3\2\2\2\u1486\u1487"+ + "\7K\2\2\u1487\u1488\7P\2\2\u1488\u1489\7U\2\2\u1489\u148a\7G\2\2\u148a"+ + "\u148b\7T\2\2\u148b\u148c\7V\2\2\u148c\u148d\7a\2\2\u148d\u148e\7O\2\2"+ + "\u148e\u148f\7G\2\2\u148f\u1490\7V\2\2\u1490\u1491\7J\2\2\u1491\u1492"+ + "\7Q\2\2\u1492\u1493\7F\2\2\u1493\u0302\3\2\2\2\u1494\u1495\7K\2\2\u1495"+ + "\u1496\7P\2\2\u1496\u1497\7U\2\2\u1497\u1498\7V\2\2\u1498\u1499\7C\2\2"+ + "\u1499\u149a\7N\2\2\u149a\u149b\7N\2\2\u149b\u0304\3\2\2\2\u149c\u149d"+ + "\7K\2\2\u149d\u149e\7P\2\2\u149e\u149f\7U\2\2\u149f\u14a0\7V\2\2\u14a0"+ + "\u14a1\7C\2\2\u14a1\u14a2\7P\2\2\u14a2\u14a3\7E\2\2\u14a3\u14a4\7G\2\2"+ + "\u14a4\u0306\3\2\2\2\u14a5\u14a6\7K\2\2\u14a6\u14a7\7P\2\2\u14a7\u14a8"+ + "\7X\2\2\u14a8\u14a9\7K\2\2\u14a9\u14aa\7U\2\2\u14aa\u14ab\7K\2\2\u14ab"+ + "\u14ac\7D\2\2\u14ac\u14ad\7N\2\2\u14ad\u14ae\7G\2\2\u14ae\u0308\3\2\2"+ + "\2\u14af\u14b0\7K\2\2\u14b0\u14b1\7P\2\2\u14b1\u14b2\7X\2\2\u14b2\u14b3"+ + "\7Q\2\2\u14b3\u14b4\7M\2\2\u14b4\u14b5\7G\2\2\u14b5\u14b6\7T\2\2\u14b6"+ + "\u030a\3\2\2\2\u14b7\u14b8\7K\2\2\u14b8\u14b9\7Q\2\2\u14b9\u030c\3\2\2"+ + "\2\u14ba\u14bb\7K\2\2\u14bb\u14bc\7Q\2\2\u14bc\u14bd\7a\2\2\u14bd\u14be"+ + "\7V\2\2\u14be\u14bf\7J\2\2\u14bf\u14c0\7T\2\2\u14c0\u14c1\7G\2\2\u14c1"+ + "\u14c2\7C\2\2\u14c2\u14c3\7F\2\2\u14c3\u030e\3\2\2\2\u14c4\u14c5\7K\2"+ + "\2\u14c5\u14c6\7R\2\2\u14c6\u14c7\7E\2\2\u14c7\u0310\3\2\2\2\u14c8\u14c9"+ + "\7K\2\2\u14c9\u14ca\7U\2\2\u14ca\u14cb\7Q\2\2\u14cb\u14cc\7N\2\2\u14cc"+ + "\u14cd\7C\2\2\u14cd\u14ce\7V\2\2\u14ce\u14cf\7K\2\2\u14cf\u14d0\7Q\2\2"+ + "\u14d0\u14d1\7P\2\2\u14d1\u0312\3\2\2\2\u14d2\u14d3\7K\2\2\u14d3\u14d4"+ + "\7U\2\2\u14d4\u14d5\7U\2\2\u14d5\u14d6\7W\2\2\u14d6\u14d7\7G\2\2\u14d7"+ + "\u14d8\7T\2\2\u14d8\u0314\3\2\2\2\u14d9\u14da\7L\2\2\u14da\u14db\7U\2"+ + "\2\u14db\u14dc\7Q\2\2\u14dc\u14dd\7P\2\2\u14dd\u0316\3\2\2\2\u14de\u14df"+ + "\7M\2\2\u14df\u14e0\7G\2\2\u14e0\u14e1\7[\2\2\u14e1\u14e2\7a\2\2\u14e2"+ + "\u14e3\7D\2\2\u14e3\u14e4\7N\2\2\u14e4\u14e5\7Q\2\2\u14e5\u14e6\7E\2\2"+ + "\u14e6\u14e7\7M\2\2\u14e7\u14e8\7a\2\2\u14e8\u14e9\7U\2\2\u14e9\u14ea"+ + "\7K\2\2\u14ea\u14eb\7\\\2\2\u14eb\u14ec\7G\2\2\u14ec\u0318\3\2\2\2\u14ed"+ + "\u14ee\7N\2\2\u14ee\u14ef\7C\2\2\u14ef\u14f0\7P\2\2\u14f0\u14f1\7I\2\2"+ + "\u14f1\u14f2\7W\2\2\u14f2\u14f3\7C\2\2\u14f3\u14f4\7I\2\2\u14f4\u14f5"+ + "\7G\2\2\u14f5\u031a\3\2\2\2\u14f6\u14f7\7N\2\2\u14f7\u14f8\7C\2\2\u14f8"+ + "\u14f9\7U\2\2\u14f9\u14fa\7V\2\2\u14fa\u031c\3\2\2\2\u14fb\u14fc\7N\2"+ + "\2\u14fc\u14fd\7G\2\2\u14fd\u14fe\7C\2\2\u14fe\u14ff\7X\2\2\u14ff\u1500"+ + "\7G\2\2\u1500\u1501\7U\2\2\u1501\u031e\3\2\2\2\u1502\u1503\7N\2\2\u1503"+ + "\u1504\7G\2\2\u1504\u1505\7U\2\2\u1505\u1506\7U\2\2\u1506\u0320\3\2\2"+ + "\2\u1507\u1508\7N\2\2\u1508\u1509\7G\2\2\u1509\u150a\7X\2\2\u150a\u150b"+ + "\7G\2\2\u150b\u150c\7N\2\2\u150c\u0322\3\2\2\2\u150d\u150e\7N\2\2\u150e"+ + "\u150f\7K\2\2\u150f\u1510\7U\2\2\u1510\u1511\7V\2\2\u1511\u0324\3\2\2"+ + "\2\u1512\u1513\7N\2\2\u1513\u1514\7Q\2\2\u1514\u1515\7E\2\2\u1515\u1516"+ + "\7C\2\2\u1516\u1517\7N\2\2\u1517\u0326\3\2\2\2\u1518\u1519\7N\2\2\u1519"+ + "\u151a\7Q\2\2\u151a\u151b\7I\2\2\u151b\u151c\7H\2\2\u151c\u151d\7K\2\2"+ + "\u151d\u151e\7N\2\2\u151e\u151f\7G\2\2\u151f\u0328\3\2\2\2\u1520\u1521"+ + "\7N\2\2\u1521\u1522\7Q\2\2\u1522\u1523\7I\2\2\u1523\u1524\7U\2\2\u1524"+ + "\u032a\3\2\2\2\u1525\u1526\7O\2\2\u1526\u1527\7C\2\2\u1527\u1528\7U\2"+ + "\2\u1528\u1529\7V\2\2\u1529\u152a\7G\2\2\u152a\u152b\7T\2\2\u152b\u032c"+ + "\3\2\2\2\u152c\u152d\7O\2\2\u152d\u152e\7C\2\2\u152e\u152f\7U\2\2\u152f"+ + "\u1530\7V\2\2\u1530\u1531\7G\2\2\u1531\u1532\7T\2\2\u1532\u1533\7a\2\2"+ + "\u1533\u1534\7C\2\2\u1534\u1535\7W\2\2\u1535\u1536\7V\2\2\u1536\u1537"+ + "\7Q\2\2\u1537\u1538\7a\2\2\u1538\u1539\7R\2\2\u1539\u153a\7Q\2\2\u153a"+ + "\u153b\7U\2\2\u153b\u153c\7K\2\2\u153c\u153d\7V\2\2\u153d\u153e\7K\2\2"+ + "\u153e\u153f\7Q\2\2\u153f\u1540\7P\2\2\u1540\u032e\3\2\2\2\u1541\u1542"+ + "\7O\2\2\u1542\u1543\7C\2\2\u1543\u1544\7U\2\2\u1544\u1545\7V\2\2\u1545"+ + "\u1546\7G\2\2\u1546\u1547\7T\2\2\u1547\u1548\7a\2\2\u1548\u1549\7E\2\2"+ + "\u1549\u154a\7Q\2\2\u154a\u154b\7P\2\2\u154b\u154c\7P\2\2\u154c\u154d"+ + "\7G\2\2\u154d\u154e\7E\2\2\u154e\u154f\7V\2\2\u154f\u1550\7a\2\2\u1550"+ + "\u1551\7T\2\2\u1551\u1552\7G\2\2\u1552\u1553\7V\2\2\u1553\u1554\7T\2\2"+ + "\u1554\u1555\7[\2\2\u1555\u0330\3\2\2\2\u1556\u1557\7O\2\2\u1557\u1558"+ + "\7C\2\2\u1558\u1559\7U\2\2\u1559\u155a\7V\2\2\u155a\u155b\7G\2\2\u155b"+ + "\u155c\7T\2\2\u155c\u155d\7a\2\2\u155d\u155e\7F\2\2\u155e\u155f\7G\2\2"+ + "\u155f\u1560\7N\2\2\u1560\u1561\7C\2\2\u1561\u1562\7[\2\2\u1562\u0332"+ + "\3\2\2\2\u1563\u1564\7O\2\2\u1564\u1565\7C\2\2\u1565\u1566\7U\2\2\u1566"+ + "\u1567\7V\2\2\u1567\u1568\7G\2\2\u1568\u1569\7T\2\2\u1569\u156a\7a\2\2"+ + "\u156a\u156b\7J\2\2\u156b\u156c\7G\2\2\u156c\u156d\7C\2\2\u156d\u156e"+ + "\7T\2\2\u156e\u156f\7V\2\2\u156f\u1570\7D\2\2\u1570\u1571\7G\2\2\u1571"+ + "\u1572\7C\2\2\u1572\u1573\7V\2\2\u1573\u1574\7a\2\2\u1574\u1575\7R\2\2"+ + "\u1575\u1576\7G\2\2\u1576\u1577\7T\2\2\u1577\u1578\7K\2\2\u1578\u1579"+ + "\7Q\2\2\u1579\u157a\7F\2\2\u157a\u0334\3\2\2\2\u157b\u157c\7O\2\2\u157c"+ + "\u157d\7C\2\2\u157d\u157e\7U\2\2\u157e\u157f\7V\2\2\u157f\u1580\7G\2\2"+ + "\u1580\u1581\7T\2\2\u1581\u1582\7a\2\2\u1582\u1583\7J\2\2\u1583\u1584"+ + "\7Q\2\2\u1584\u1585\7U\2\2\u1585\u1586\7V\2\2\u1586\u0336\3\2\2\2\u1587"+ + "\u1588\7O\2\2\u1588\u1589\7C\2\2\u1589\u158a\7U\2\2\u158a\u158b\7V\2\2"+ + "\u158b\u158c\7G\2\2\u158c\u158d\7T\2\2\u158d\u158e\7a\2\2\u158e\u158f"+ + "\7N\2\2\u158f\u1590\7Q\2\2\u1590\u1591\7I\2\2\u1591\u1592\7a\2\2\u1592"+ + "\u1593\7H\2\2\u1593\u1594\7K\2\2\u1594\u1595\7N\2\2\u1595\u1596\7G\2\2"+ + "\u1596\u0338\3\2\2\2\u1597\u1598\7O\2\2\u1598\u1599\7C\2\2\u1599\u159a"+ + "\7U\2\2\u159a\u159b\7V\2\2\u159b\u159c\7G\2\2\u159c\u159d\7T\2\2\u159d"+ + "\u159e\7a\2\2\u159e\u159f\7N\2\2\u159f\u15a0\7Q\2\2\u15a0\u15a1\7I\2\2"+ + "\u15a1\u15a2\7a\2\2\u15a2\u15a3\7R\2\2\u15a3\u15a4\7Q\2\2\u15a4\u15a5"+ + "\7U\2\2\u15a5\u033a\3\2\2\2\u15a6\u15a7\7O\2\2\u15a7\u15a8\7C\2\2\u15a8"+ + "\u15a9\7U\2\2\u15a9\u15aa\7V\2\2\u15aa\u15ab\7G\2\2\u15ab\u15ac\7T\2\2"+ + "\u15ac\u15ad\7a\2\2\u15ad\u15ae\7R\2\2\u15ae\u15af\7C\2\2\u15af\u15b0"+ + "\7U\2\2\u15b0\u15b1\7U\2\2\u15b1\u15b2\7Y\2\2\u15b2\u15b3\7Q\2\2\u15b3"+ + "\u15b4\7T\2\2\u15b4\u15b5\7F\2\2\u15b5\u033c\3\2\2\2\u15b6\u15b7\7O\2"+ + "\2\u15b7\u15b8\7C\2\2\u15b8\u15b9\7U\2\2\u15b9\u15ba\7V\2\2\u15ba\u15bb"+ + "\7G\2\2\u15bb\u15bc\7T\2\2\u15bc\u15bd\7a\2\2\u15bd\u15be\7R\2\2\u15be"+ + "\u15bf\7Q\2\2\u15bf\u15c0\7T\2\2\u15c0\u15c1\7V\2\2\u15c1\u033e\3\2\2"+ + "\2\u15c2\u15c3\7O\2\2\u15c3\u15c4\7C\2\2\u15c4\u15c5\7U\2\2\u15c5\u15c6"+ + "\7V\2\2\u15c6\u15c7\7G\2\2\u15c7\u15c8\7T\2\2\u15c8\u15c9\7a\2\2\u15c9"+ + "\u15ca\7T\2\2\u15ca\u15cb\7G\2\2\u15cb\u15cc\7V\2\2\u15cc\u15cd\7T\2\2"+ + "\u15cd\u15ce\7[\2\2\u15ce\u15cf\7a\2\2\u15cf\u15d0\7E\2\2\u15d0\u15d1"+ + "\7Q\2\2\u15d1\u15d2\7W\2\2\u15d2\u15d3\7P\2\2\u15d3\u15d4\7V\2\2\u15d4"+ + "\u0340\3\2\2\2\u15d5\u15d6\7O\2\2\u15d6\u15d7\7C\2\2\u15d7\u15d8\7U\2"+ + "\2\u15d8\u15d9\7V\2\2\u15d9\u15da\7G\2\2\u15da\u15db\7T\2\2\u15db\u15dc"+ + "\7a\2\2\u15dc\u15dd\7U\2\2\u15dd\u15de\7U\2\2\u15de\u15df\7N\2\2\u15df"+ + "\u0342\3\2\2\2\u15e0\u15e1\7O\2\2\u15e1\u15e2\7C\2\2\u15e2\u15e3\7U\2"+ + "\2\u15e3\u15e4\7V\2\2\u15e4\u15e5\7G\2\2\u15e5\u15e6\7T\2\2\u15e6\u15e7"+ + "\7a\2\2\u15e7\u15e8\7U\2\2\u15e8\u15e9\7U\2\2\u15e9\u15ea\7N\2\2\u15ea"+ + "\u15eb\7a\2\2\u15eb\u15ec\7E\2\2\u15ec\u15ed\7C\2\2\u15ed\u0344\3\2\2"+ + "\2\u15ee\u15ef\7O\2\2\u15ef\u15f0\7C\2\2\u15f0\u15f1\7U\2\2\u15f1\u15f2"+ + "\7V\2\2\u15f2\u15f3\7G\2\2\u15f3\u15f4\7T\2\2\u15f4\u15f5\7a\2\2\u15f5"+ + "\u15f6\7U\2\2\u15f6\u15f7\7U\2\2\u15f7\u15f8\7N\2\2\u15f8\u15f9\7a\2\2"+ + "\u15f9\u15fa\7E\2\2\u15fa\u15fb\7C\2\2\u15fb\u15fc\7R\2\2\u15fc\u15fd"+ + "\7C\2\2\u15fd\u15fe\7V\2\2\u15fe\u15ff\7J\2\2\u15ff\u0346\3\2\2\2\u1600"+ + "\u1601\7O\2\2\u1601\u1602\7C\2\2\u1602\u1603\7U\2\2\u1603\u1604\7V\2\2"+ + "\u1604\u1605\7G\2\2\u1605\u1606\7T\2\2\u1606\u1607\7a\2\2\u1607\u1608"+ + "\7U\2\2\u1608\u1609\7U\2\2\u1609\u160a\7N\2\2\u160a\u160b\7a\2\2\u160b"+ + "\u160c\7E\2\2\u160c\u160d\7G\2\2\u160d\u160e\7T\2\2\u160e\u160f\7V\2\2"+ + "\u160f\u0348\3\2\2\2\u1610\u1611\7O\2\2\u1611\u1612\7C\2\2\u1612\u1613"+ + "\7U\2\2\u1613\u1614\7V\2\2\u1614\u1615\7G\2\2\u1615\u1616\7T\2\2\u1616"+ + "\u1617\7a\2\2\u1617\u1618\7U\2\2\u1618\u1619\7U\2\2\u1619\u161a\7N\2\2"+ + "\u161a\u161b\7a\2\2\u161b\u161c\7E\2\2\u161c\u161d\7K\2\2\u161d\u161e"+ + "\7R\2\2\u161e\u161f\7J\2\2\u161f\u1620\7G\2\2\u1620\u1621\7T\2\2\u1621"+ + "\u034a\3\2\2\2\u1622\u1623\7O\2\2\u1623\u1624\7C\2\2\u1624\u1625\7U\2"+ + "\2\u1625\u1626\7V\2\2\u1626\u1627\7G\2\2\u1627\u1628\7T\2\2\u1628\u1629"+ + "\7a\2\2\u1629\u162a\7U\2\2\u162a\u162b\7U\2\2\u162b\u162c\7N\2\2\u162c"+ + "\u162d\7a\2\2\u162d\u162e\7E\2\2\u162e\u162f\7T\2\2\u162f\u1630\7N\2\2"+ + "\u1630\u034c\3\2\2\2\u1631\u1632\7O\2\2\u1632\u1633\7C\2\2\u1633\u1634"+ + "\7U\2\2\u1634\u1635\7V\2\2\u1635\u1636\7G\2\2\u1636\u1637\7T\2\2\u1637"+ + "\u1638\7a\2\2\u1638\u1639\7U\2\2\u1639\u163a\7U\2\2\u163a\u163b\7N\2\2"+ + "\u163b\u163c\7a\2\2\u163c\u163d\7E\2\2\u163d\u163e\7T\2\2\u163e\u163f"+ + "\7N\2\2\u163f\u1640\7R\2\2\u1640\u1641\7C\2\2\u1641\u1642\7V\2\2\u1642"+ + "\u1643\7J\2\2\u1643\u034e\3\2\2\2\u1644\u1645\7O\2\2\u1645\u1646\7C\2"+ + "\2\u1646\u1647\7U\2\2\u1647\u1648\7V\2\2\u1648\u1649\7G\2\2\u1649\u164a"+ + "\7T\2\2\u164a\u164b\7a\2\2\u164b\u164c\7U\2\2\u164c\u164d\7U\2\2\u164d"+ + "\u164e\7N\2\2\u164e\u164f\7a\2\2\u164f\u1650\7M\2\2\u1650\u1651\7G\2\2"+ + "\u1651\u1652\7[\2\2\u1652\u0350\3\2\2\2\u1653\u1654\7O\2\2\u1654\u1655"+ + "\7C\2\2\u1655\u1656\7U\2\2\u1656\u1657\7V\2\2\u1657\u1658\7G\2\2\u1658"+ + "\u1659\7T\2\2\u1659\u165a\7a\2\2\u165a\u165b\7V\2\2\u165b\u165c\7N\2\2"+ + "\u165c\u165d\7U\2\2\u165d\u165e\7a\2\2\u165e\u165f\7X\2\2\u165f\u1660"+ + "\7G\2\2\u1660\u1661\7T\2\2\u1661\u1662\7U\2\2\u1662\u1663\7K\2\2\u1663"+ + "\u1664\7Q\2\2\u1664\u1665\7P\2\2\u1665\u0352\3\2\2\2\u1666\u1667\7O\2"+ + "\2\u1667\u1668\7C\2\2\u1668\u1669\7U\2\2\u1669\u166a\7V\2\2\u166a\u166b"+ + "\7G\2\2\u166b\u166c\7T\2\2\u166c\u166d\7a\2\2\u166d\u166e\7W\2\2\u166e"+ + "\u166f\7U\2\2\u166f\u1670\7G\2\2\u1670\u1671\7T\2\2\u1671\u0354\3\2\2"+ + "\2\u1672\u1673\7O\2\2\u1673\u1674\7C\2\2\u1674\u1675\7Z\2\2\u1675\u1676"+ + "\7a\2\2\u1676\u1677\7E\2\2\u1677\u1678\7Q\2\2\u1678\u1679\7P\2\2\u1679"+ + "\u167a\7P\2\2\u167a\u167b\7G\2\2\u167b\u167c\7E\2\2\u167c\u167d\7V\2\2"+ + "\u167d\u167e\7K\2\2\u167e\u167f\7Q\2\2\u167f\u1680\7P\2\2\u1680\u1681"+ + "\7U\2\2\u1681\u1682\7a\2\2\u1682\u1683\7R\2\2\u1683\u1684\7G\2\2\u1684"+ + "\u1685\7T\2\2\u1685\u1686\7a\2\2\u1686\u1687\7J\2\2\u1687\u1688\7Q\2\2"+ + "\u1688\u1689\7W\2\2\u1689\u168a\7T\2\2\u168a\u0356\3\2\2\2\u168b\u168c"+ + "\7O\2\2\u168c\u168d\7C\2\2\u168d\u168e\7Z\2\2\u168e\u168f\7a\2\2\u168f"+ + "\u1690\7S\2\2\u1690\u1691\7W\2\2\u1691\u1692\7G\2\2\u1692\u1693\7T\2\2"+ + "\u1693\u1694\7K\2\2\u1694\u1695\7G\2\2\u1695\u1696\7U\2\2\u1696\u1697"+ + "\7a\2\2\u1697\u1698\7R\2\2\u1698\u1699\7G\2\2\u1699\u169a\7T\2\2\u169a"+ + "\u169b\7a\2\2\u169b\u169c\7J\2\2\u169c\u169d\7Q\2\2\u169d\u169e\7W\2\2"+ + "\u169e\u169f\7T\2\2\u169f\u0358\3\2\2\2\u16a0\u16a1\7O\2\2\u16a1\u16a2"+ + "\7C\2\2\u16a2\u16a3\7Z\2\2\u16a3\u16a4\7a\2\2\u16a4\u16a5\7T\2\2\u16a5"+ + "\u16a6\7Q\2\2\u16a6\u16a7\7Y\2\2\u16a7\u16a8\7U\2\2\u16a8\u035a\3\2\2"+ + "\2\u16a9\u16aa\7O\2\2\u16aa\u16ab\7C\2\2\u16ab\u16ac\7Z\2\2\u16ac\u16ad"+ + "\7a\2\2\u16ad\u16ae\7U\2\2\u16ae\u16af\7K\2\2\u16af\u16b0\7\\\2\2\u16b0"+ + "\u16b1\7G\2\2\u16b1\u035c\3\2\2\2\u16b2\u16b3\7O\2\2\u16b3\u16b4\7C\2"+ + "\2\u16b4\u16b5\7Z\2\2\u16b5\u16b6\7a\2\2\u16b6\u16b7\7W\2\2\u16b7\u16b8"+ + "\7R\2\2\u16b8\u16b9\7F\2\2\u16b9\u16ba\7C\2\2\u16ba\u16bb\7V\2\2\u16bb"+ + "\u16bc\7G\2\2\u16bc\u16bd\7U\2\2\u16bd\u16be\7a\2\2\u16be\u16bf\7R\2\2"+ + "\u16bf\u16c0\7G\2\2\u16c0\u16c1\7T\2\2\u16c1\u16c2\7a\2\2\u16c2\u16c3"+ + "\7J\2\2\u16c3\u16c4\7Q\2\2\u16c4\u16c5\7W\2\2\u16c5\u16c6\7T\2\2\u16c6"+ + "\u035e\3\2\2\2\u16c7\u16c8\7O\2\2\u16c8\u16c9\7C\2\2\u16c9\u16ca\7Z\2"+ + "\2\u16ca\u16cb\7a\2\2\u16cb\u16cc\7W\2\2\u16cc\u16cd\7U\2\2\u16cd\u16ce"+ + "\7G\2\2\u16ce\u16cf\7T\2\2\u16cf\u16d0\7a\2\2\u16d0\u16d1\7E\2\2\u16d1"+ + "\u16d2\7Q\2\2\u16d2\u16d3\7P\2\2\u16d3\u16d4\7P\2\2\u16d4\u16d5\7G\2\2"+ + "\u16d5\u16d6\7E\2\2\u16d6\u16d7\7V\2\2\u16d7\u16d8\7K\2\2\u16d8\u16d9"+ + "\7Q\2\2\u16d9\u16da\7P\2\2\u16da\u16db\7U\2\2\u16db\u0360\3\2\2\2\u16dc"+ + "\u16dd\7O\2\2\u16dd\u16de\7G\2\2\u16de\u16df\7F\2\2\u16df\u16e0\7K\2\2"+ + "\u16e0\u16e1\7W\2\2\u16e1\u16e2\7O\2\2\u16e2\u0362\3\2\2\2\u16e3\u16e4"+ + "\7O\2\2\u16e4\u16e5\7G\2\2\u16e5\u16e6\7O\2\2\u16e6\u16e7\7D\2\2\u16e7"+ + "\u16e8\7G\2\2\u16e8\u16e9\7T\2\2\u16e9\u0364\3\2\2\2\u16ea\u16eb\7O\2"+ + "\2\u16eb\u16ec\7G\2\2\u16ec\u16ed\7T\2\2\u16ed\u16ee\7I\2\2\u16ee\u16ef"+ + "\7G\2\2\u16ef\u0366\3\2\2\2\u16f0\u16f1\7O\2\2\u16f1\u16f2\7G\2\2\u16f2"+ + "\u16f3\7U\2\2\u16f3\u16f4\7U\2\2\u16f4\u16f5\7C\2\2\u16f5\u16f6\7I\2\2"+ + "\u16f6\u16f7\7G\2\2\u16f7\u16f8\7a\2\2\u16f8\u16f9\7V\2\2\u16f9\u16fa"+ + "\7G\2\2\u16fa\u16fb\7Z\2\2\u16fb\u16fc\7V\2\2\u16fc\u0368\3\2\2\2\u16fd"+ + "\u16fe\7O\2\2\u16fe\u16ff\7K\2\2\u16ff\u1700\7F\2\2\u1700\u036a\3\2\2"+ + "\2\u1701\u1702\7O\2\2\u1702\u1703\7K\2\2\u1703\u1704\7I\2\2\u1704\u1705"+ + "\7T\2\2\u1705\u1706\7C\2\2\u1706\u1707\7V\2\2\u1707\u1708\7G\2\2\u1708"+ + "\u036c\3\2\2\2\u1709\u170a\7O\2\2\u170a\u170b\7K\2\2\u170b\u170c\7P\2"+ + "\2\u170c\u170d\7a\2\2\u170d\u170e\7T\2\2\u170e\u170f\7Q\2\2\u170f\u1710"+ + "\7Y\2\2\u1710\u1711\7U\2\2\u1711\u036e\3\2\2\2\u1712\u1713\7O\2\2\u1713"+ + "\u1714\7Q\2\2\u1714\u1715\7F\2\2\u1715\u1716\7G\2\2\u1716\u0370\3\2\2"+ + "\2\u1717\u1718\7O\2\2\u1718\u1719\7Q\2\2\u1719\u171a\7F\2\2\u171a\u171b"+ + "\7K\2\2\u171b\u171c\7H\2\2\u171c\u171d\7[\2\2\u171d\u0372\3\2\2\2\u171e"+ + "\u171f\7O\2\2\u171f\u1720\7W\2\2\u1720\u1721\7V\2\2\u1721\u1722\7G\2\2"+ + "\u1722\u1723\7Z\2\2\u1723\u0374\3\2\2\2\u1724\u1725\7O\2\2\u1725\u1726"+ + "\7[\2\2\u1726\u1727\7U\2\2\u1727\u1728\7S\2\2\u1728\u1729\7N\2\2\u1729"+ + "\u0376\3\2\2\2\u172a\u172b\7O\2\2\u172b\u172c\7[\2\2\u172c\u172d\7U\2"+ + "\2\u172d\u172e\7S\2\2\u172e\u172f\7N\2\2\u172f\u1730\7a\2\2\u1730\u1731"+ + "\7G\2\2\u1731\u1732\7T\2\2\u1732\u1733\7T\2\2\u1733\u1734\7P\2\2\u1734"+ + "\u1735\7Q\2\2\u1735\u0378\3\2\2\2\u1736\u1737\7P\2\2\u1737\u1738\7C\2"+ + "\2\u1738\u1739\7O\2\2\u1739\u173a\7G\2\2\u173a\u037a\3\2\2\2\u173b\u173c"+ + "\7P\2\2\u173c\u173d\7C\2\2\u173d\u173e\7O\2\2\u173e\u173f\7G\2\2\u173f"+ + "\u1740\7U\2\2\u1740\u037c\3\2\2\2\u1741\u1742\7P\2\2\u1742\u1743\7E\2"+ + "\2\u1743\u1744\7J\2\2\u1744\u1745\7C\2\2\u1745\u1746\7T\2\2\u1746\u037e"+ + "\3\2\2\2\u1747\u1748\7P\2\2\u1748\u1749\7G\2\2\u1749\u174a\7X\2\2\u174a"+ + "\u174b\7G\2\2\u174b\u174c\7T\2\2\u174c\u0380\3\2\2\2\u174d\u174e\7P\2"+ + "\2\u174e\u174f\7G\2\2\u174f\u1750\7Z\2\2\u1750\u1751\7V\2\2\u1751\u0382"+ + "\3\2\2\2\u1752\u1753\7P\2\2\u1753\u1754\7Q\2\2\u1754\u0384\3\2\2\2\u1755"+ + "\u1756\7P\2\2\u1756\u1757\7Q\2\2\u1757\u1758\7F\2\2\u1758\u1759\7G\2\2"+ + "\u1759\u175a\7I\2\2\u175a\u175b\7T\2\2\u175b\u175c\7Q\2\2\u175c\u175d"+ + "\7W\2\2\u175d\u175e\7R\2\2\u175e\u0386\3\2\2\2\u175f\u1760\7P\2\2\u1760"+ + "\u1761\7Q\2\2\u1761\u1762\7P\2\2\u1762\u1763\7G\2\2\u1763\u0388\3\2\2"+ + "\2\u1764\u1765\7Q\2\2\u1765\u1766\7H\2\2\u1766\u1767\7H\2\2\u1767\u1768"+ + "\7N\2\2\u1768\u1769\7K\2\2\u1769\u176a\7P\2\2\u176a\u176b\7G\2\2\u176b"+ + "\u038a\3\2\2\2\u176c\u176d\7Q\2\2\u176d\u176e\7H\2\2\u176e\u176f\7H\2"+ + "\2\u176f\u1770\7U\2\2\u1770\u1771\7G\2\2\u1771\u1772\7V\2\2\u1772\u038c"+ + "\3\2\2\2\u1773\u1774\7Q\2\2\u1774\u1775\7H\2\2\u1775\u038e\3\2\2\2\u1776"+ + "\u1777\7Q\2\2\u1777\u1778\7L\2\2\u1778\u0390\3\2\2\2\u1779\u177a\7Q\2"+ + "\2\u177a\u177b\7N\2\2\u177b\u177c\7F\2\2\u177c\u177d\7a\2\2\u177d\u177e"+ + "\7R\2\2\u177e\u177f\7C\2\2\u177f\u1780\7U\2\2\u1780\u1781\7U\2\2\u1781"+ + "\u1782\7Y\2\2\u1782\u1783\7Q\2\2\u1783\u1784\7T\2\2\u1784\u1785\7F\2\2"+ + "\u1785\u0392\3\2\2\2\u1786\u1787\7Q\2\2\u1787\u1788\7P\2\2\u1788\u1789"+ + "\7G\2\2\u1789\u0394\3\2\2\2\u178a\u178b\7Q\2\2\u178b\u178c\7P\2\2\u178c"+ + "\u178d\7N\2\2\u178d\u178e\7K\2\2\u178e\u178f\7P\2\2\u178f\u1790\7G\2\2"+ + "\u1790\u0396\3\2\2\2\u1791\u1792\7Q\2\2\u1792\u1793\7P\2\2\u1793\u1794"+ + "\7N\2\2\u1794\u1795\7[\2\2\u1795\u0398\3\2\2\2\u1796\u1797\7Q\2\2\u1797"+ + "\u1798\7R\2\2\u1798\u1799\7G\2\2\u1799\u179a\7P\2\2\u179a\u039a\3\2\2"+ + "\2\u179b\u179c\7Q\2\2\u179c\u179d\7R\2\2\u179d\u179e\7V\2\2\u179e\u179f"+ + "\7K\2\2\u179f\u17a0\7O\2\2\u17a0\u17a1\7K\2\2\u17a1\u17a2\7\\\2\2\u17a2"+ + "\u17a3\7G\2\2\u17a3\u17a4\7T\2\2\u17a4\u17a5\7a\2\2\u17a5\u17a6\7E\2\2"+ + "\u17a6\u17a7\7Q\2\2\u17a7\u17a8\7U\2\2\u17a8\u17a9\7V\2\2\u17a9\u17aa"+ + "\7U\2\2\u17aa\u039c\3\2\2\2\u17ab\u17ac\7Q\2\2\u17ac\u17ad\7R\2\2\u17ad"+ + "\u17ae\7V\2\2\u17ae\u17af\7K\2\2\u17af\u17b0\7Q\2\2\u17b0\u17b1\7P\2\2"+ + "\u17b1\u17b2\7U\2\2\u17b2\u039e\3\2\2\2\u17b3\u17b4\7Q\2\2\u17b4\u17b5"+ + "\7Y\2\2\u17b5\u17b6\7P\2\2\u17b6\u17b7\7G\2\2\u17b7\u17b8\7T\2\2\u17b8"+ + "\u03a0\3\2\2\2\u17b9\u17ba\7R\2\2\u17ba\u17bb\7C\2\2\u17bb\u17bc\7E\2"+ + "\2\u17bc\u17bd\7M\2\2\u17bd\u17be\7a\2\2\u17be\u17bf\7M\2\2\u17bf\u17c0"+ + "\7G\2\2\u17c0\u17c1\7[\2\2\u17c1\u17c2\7U\2\2\u17c2\u03a2\3\2\2\2\u17c3"+ + "\u17c4\7R\2\2\u17c4\u17c5\7C\2\2\u17c5\u17c6\7I\2\2\u17c6\u17c7\7G\2\2"+ + "\u17c7\u03a4\3\2\2\2\u17c8\u17c9\7R\2\2\u17c9\u17ca\7C\2\2\u17ca\u17cb"+ + "\7T\2\2\u17cb\u17cc\7U\2\2\u17cc\u17cd\7G\2\2\u17cd\u17ce\7T\2\2\u17ce"+ + "\u03a6\3\2\2\2\u17cf\u17d0\7R\2\2\u17d0\u17d1\7C\2\2\u17d1\u17d2\7T\2"+ + "\2\u17d2\u17d3\7V\2\2\u17d3\u17d4\7K\2\2\u17d4\u17d5\7C\2\2\u17d5\u17d6"+ + "\7N\2\2\u17d6\u03a8\3\2\2\2\u17d7\u17d8\7R\2\2\u17d8\u17d9\7C\2\2\u17d9"+ + "\u17da\7T\2\2\u17da\u17db\7V\2\2\u17db\u17dc\7K\2\2\u17dc\u17dd\7V\2\2"+ + "\u17dd\u17de\7K\2\2\u17de\u17df\7Q\2\2\u17df\u17e0\7P\2\2\u17e0\u17e1"+ + "\7K\2\2\u17e1\u17e2\7P\2\2\u17e2\u17e3\7I\2\2\u17e3\u03aa\3\2\2\2\u17e4"+ + "\u17e5\7R\2\2\u17e5\u17e6\7C\2\2\u17e6\u17e7\7T\2\2\u17e7\u17e8\7V\2\2"+ + "\u17e8\u17e9\7K\2\2\u17e9\u17ea\7V\2\2\u17ea\u17eb\7K\2\2\u17eb\u17ec"+ + "\7Q\2\2\u17ec\u17ed\7P\2\2\u17ed\u17ee\7U\2\2\u17ee\u03ac\3\2\2\2\u17ef"+ + "\u17f0\7R\2\2\u17f0\u17f1\7C\2\2\u17f1\u17f2\7U\2\2\u17f2\u17f3\7U\2\2"+ + "\u17f3\u17f4\7Y\2\2\u17f4\u17f5\7Q\2\2\u17f5\u17f6\7T\2\2\u17f6\u17f7"+ + "\7F\2\2\u17f7\u03ae\3\2\2\2\u17f8\u17f9\7R\2\2\u17f9\u17fa\7J\2\2\u17fa"+ + "\u17fb\7C\2\2\u17fb\u17fc\7U\2\2\u17fc\u17fd\7G\2\2\u17fd\u03b0\3\2\2"+ + "\2\u17fe\u17ff\7R\2\2\u17ff\u1800\7N\2\2\u1800\u1801\7W\2\2\u1801\u1802"+ + "\7I\2\2\u1802\u1803\7K\2\2\u1803\u1804\7P\2\2\u1804\u03b2\3\2\2\2\u1805"+ + "\u1806\7R\2\2\u1806\u1807\7N\2\2\u1807\u1808\7W\2\2\u1808\u1809\7I\2\2"+ + "\u1809\u180a\7K\2\2\u180a\u180b\7P\2\2\u180b\u180c\7a\2\2\u180c\u180d"+ + "\7F\2\2\u180d\u180e\7K\2\2\u180e\u180f\7T\2\2\u180f\u03b4\3\2\2\2\u1810"+ + "\u1811\7R\2\2\u1811\u1812\7N\2\2\u1812\u1813\7W\2\2\u1813\u1814\7I\2\2"+ + "\u1814\u1815\7K\2\2\u1815\u1816\7P\2\2\u1816\u1817\7U\2\2\u1817\u03b6"+ + "\3\2\2\2\u1818\u1819\7R\2\2\u1819\u181a\7Q\2\2\u181a\u181b\7T\2\2\u181b"+ + "\u181c\7V\2\2\u181c\u03b8\3\2\2\2\u181d\u181e\7R\2\2\u181e\u181f\7T\2"+ + "\2\u181f\u1820\7G\2\2\u1820\u1821\7E\2\2\u1821\u1822\7G\2\2\u1822\u1823"+ + "\7F\2\2\u1823\u1824\7G\2\2\u1824\u1825\7U\2\2\u1825\u03ba\3\2\2\2\u1826"+ + "\u1827\7R\2\2\u1827\u1828\7T\2\2\u1828\u1829\7G\2\2\u1829\u182a\7R\2\2"+ + "\u182a\u182b\7C\2\2\u182b\u182c\7T\2\2\u182c\u182d\7G\2\2\u182d\u03bc"+ + "\3\2\2\2\u182e\u182f\7R\2\2\u182f\u1830\7T\2\2\u1830\u1831\7G\2\2\u1831"+ + "\u1832\7U\2\2\u1832\u1833\7G\2\2\u1833\u1834\7T\2\2\u1834\u1835\7X\2\2"+ + "\u1835\u1836\7G\2\2\u1836\u03be\3\2\2\2\u1837\u1838\7R\2\2\u1838\u1839"+ + "\7T\2\2\u1839\u183a\7G\2\2\u183a\u183b\7X\2\2\u183b\u03c0\3\2\2\2\u183c"+ + "\u183d\7R\2\2\u183d\u183e\7T\2\2\u183e\u183f\7Q\2\2\u183f\u1840\7E\2\2"+ + "\u1840\u1841\7G\2\2\u1841\u1842\7U\2\2\u1842\u1843\7U\2\2\u1843\u1844"+ + "\7N\2\2\u1844\u1845\7K\2\2\u1845\u1846\7U\2\2\u1846\u1847\7V\2\2\u1847"+ + "\u03c2\3\2\2\2\u1848\u1849\7R\2\2\u1849\u184a\7T\2\2\u184a\u184b\7Q\2"+ + "\2\u184b\u184c\7H\2\2\u184c\u184d\7K\2\2\u184d\u184e\7N\2\2\u184e\u184f"+ + "\7G\2\2\u184f\u03c4\3\2\2\2\u1850\u1851\7R\2\2\u1851\u1852\7T\2\2\u1852"+ + "\u1853\7Q\2\2\u1853\u1854\7H\2\2\u1854\u1855\7K\2\2\u1855\u1856\7N\2\2"+ + "\u1856\u1857\7G\2\2\u1857\u1858\7U\2\2\u1858\u03c6\3\2\2\2\u1859\u185a"+ + "\7R\2\2\u185a\u185b\7T\2\2\u185b\u185c\7Q\2\2\u185c\u185d\7Z\2\2\u185d"+ + "\u185e\7[\2\2\u185e\u03c8\3\2\2\2\u185f\u1860\7S\2\2\u1860\u1861\7W\2"+ + "\2\u1861\u1862\7G\2\2\u1862\u1863\7T\2\2\u1863\u1864\7[\2\2\u1864\u03ca"+ + "\3\2\2\2\u1865\u1866\7S\2\2\u1866\u1867\7W\2\2\u1867\u1868\7K\2\2\u1868"+ + "\u1869\7E\2\2\u1869\u186a\7M\2\2\u186a\u03cc\3\2\2\2\u186b\u186c\7T\2"+ + "\2\u186c\u186d\7G\2\2\u186d\u186e\7D\2\2\u186e\u186f\7W\2\2\u186f\u1870"+ + "\7K\2\2\u1870\u1871\7N\2\2\u1871\u1872\7F\2\2\u1872\u03ce\3\2\2\2\u1873"+ + "\u1874\7T\2\2\u1874\u1875\7G\2\2\u1875\u1876\7E\2\2\u1876\u1877\7Q\2\2"+ + "\u1877\u1878\7X\2\2\u1878\u1879\7G\2\2\u1879\u187a\7T\2\2\u187a\u03d0"+ + "\3\2\2\2\u187b\u187c\7T\2\2\u187c\u187d\7G\2\2\u187d\u187e\7F\2\2\u187e"+ + "\u187f\7Q\2\2\u187f\u1880\7a\2\2\u1880\u1881\7D\2\2\u1881\u1882\7W\2\2"+ + "\u1882\u1883\7H\2\2\u1883\u1884\7H\2\2\u1884\u1885\7G\2\2\u1885\u1886"+ + "\7T\2\2\u1886\u1887\7a\2\2\u1887\u1888\7U\2\2\u1888\u1889\7K\2\2\u1889"+ + "\u188a\7\\\2\2\u188a\u188b\7G\2\2\u188b\u03d2\3\2\2\2\u188c\u188d\7T\2"+ + "\2\u188d\u188e\7G\2\2\u188e\u188f\7F\2\2\u188f\u1890\7W\2\2\u1890\u1891"+ + "\7P\2\2\u1891\u1892\7F\2\2\u1892\u1893\7C\2\2\u1893\u1894\7P\2\2\u1894"+ + "\u1895\7V\2\2\u1895\u03d4\3\2\2\2\u1896\u1897\7T\2\2\u1897\u1898\7G\2"+ + "\2\u1898\u1899\7N\2\2\u1899\u189a\7C\2\2\u189a\u189b\7[\2\2\u189b\u03d6"+ + "\3\2\2\2\u189c\u189d\7T\2\2\u189d\u189e\7G\2\2\u189e\u189f\7N\2\2\u189f"+ + "\u18a0\7C\2\2\u18a0\u18a1\7[\2\2\u18a1\u18a2\7a\2\2\u18a2\u18a3\7N\2\2"+ + "\u18a3\u18a4\7Q\2\2\u18a4\u18a5\7I\2\2\u18a5\u18a6\7a\2\2\u18a6\u18a7"+ + "\7H\2\2\u18a7\u18a8\7K\2\2\u18a8\u18a9\7N\2\2\u18a9\u18aa\7G\2\2\u18aa"+ + "\u03d8\3\2\2\2\u18ab\u18ac\7T\2\2\u18ac\u18ad\7G\2\2\u18ad\u18ae\7N\2"+ + "\2\u18ae\u18af\7C\2\2\u18af\u18b0\7[\2\2\u18b0\u18b1\7a\2\2\u18b1\u18b2"+ + "\7N\2\2\u18b2\u18b3\7Q\2\2\u18b3\u18b4\7I\2\2\u18b4\u18b5\7a\2\2\u18b5"+ + "\u18b6\7R\2\2\u18b6\u18b7\7Q\2\2\u18b7\u18b8\7U\2\2\u18b8\u03da\3\2\2"+ + "\2\u18b9\u18ba\7T\2\2\u18ba\u18bb\7G\2\2\u18bb\u18bc\7N\2\2\u18bc\u18bd"+ + "\7C\2\2\u18bd\u18be\7[\2\2\u18be\u18bf\7N\2\2\u18bf\u18c0\7Q\2\2\u18c0"+ + "\u18c1\7I\2\2\u18c1\u03dc\3\2\2\2\u18c2\u18c3\7T\2\2\u18c3\u18c4\7G\2"+ + "\2\u18c4\u18c5\7O\2\2\u18c5\u18c6\7Q\2\2\u18c6\u18c7\7X\2\2\u18c7\u18c8"+ + "\7G\2\2\u18c8\u03de\3\2\2\2\u18c9\u18ca\7T\2\2\u18ca\u18cb\7G\2\2\u18cb"+ + "\u18cc\7Q\2\2\u18cc\u18cd\7T\2\2\u18cd\u18ce\7I\2\2\u18ce\u18cf\7C\2\2"+ + "\u18cf\u18d0\7P\2\2\u18d0\u18d1\7K\2\2\u18d1\u18d2\7\\\2\2\u18d2\u18d3"+ + "\7G\2\2\u18d3\u03e0\3\2\2\2\u18d4\u18d5\7T\2\2\u18d5\u18d6\7G\2\2\u18d6"+ + "\u18d7\7R\2\2\u18d7\u18d8\7C\2\2\u18d8\u18d9\7K\2\2\u18d9\u18da\7T\2\2"+ + "\u18da\u03e2\3\2\2\2\u18db\u18dc\7T\2\2\u18dc\u18dd\7G\2\2\u18dd\u18de"+ + "\7R\2\2\u18de\u18df\7N\2\2\u18df\u18e0\7K\2\2\u18e0\u18e1\7E\2\2\u18e1"+ + "\u18e2\7C\2\2\u18e2\u18e3\7V\2\2\u18e3\u18e4\7G\2\2\u18e4\u18e5\7a\2\2"+ + "\u18e5\u18e6\7F\2\2\u18e6\u18e7\7Q\2\2\u18e7\u18e8\7a\2\2\u18e8\u18e9"+ + "\7F\2\2\u18e9\u18ea\7D\2\2\u18ea\u03e4\3\2\2\2\u18eb\u18ec\7T\2\2\u18ec"+ + "\u18ed\7G\2\2\u18ed\u18ee\7R\2\2\u18ee\u18ef\7N\2\2\u18ef\u18f0\7K\2\2"+ + "\u18f0\u18f1\7E\2\2\u18f1\u18f2\7C\2\2\u18f2\u18f3\7V\2\2\u18f3\u18f4"+ + "\7G\2\2\u18f4\u18f5\7a\2\2\u18f5\u18f6\7F\2\2\u18f6\u18f7\7Q\2\2\u18f7"+ + "\u18f8\7a\2\2\u18f8\u18f9\7V\2\2\u18f9\u18fa\7C\2\2\u18fa\u18fb\7D\2\2"+ + "\u18fb\u18fc\7N\2\2\u18fc\u18fd\7G\2\2\u18fd\u03e6\3\2\2\2\u18fe\u18ff"+ + "\7T\2\2\u18ff\u1900\7G\2\2\u1900\u1901\7R\2\2\u1901\u1902\7N\2\2\u1902"+ + "\u1903\7K\2\2\u1903\u1904\7E\2\2\u1904\u1905\7C\2\2\u1905\u1906\7V\2\2"+ + "\u1906\u1907\7G\2\2\u1907\u1908\7a\2\2\u1908\u1909\7K\2\2\u1909\u190a"+ + "\7I\2\2\u190a\u190b\7P\2\2\u190b\u190c\7Q\2\2\u190c\u190d\7T\2\2\u190d"+ + "\u190e\7G\2\2\u190e\u190f\7a\2\2\u190f\u1910\7F\2\2\u1910\u1911\7D\2\2"+ + "\u1911\u03e8\3\2\2\2\u1912\u1913\7T\2\2\u1913\u1914\7G\2\2\u1914\u1915"+ + "\7R\2\2\u1915\u1916\7N\2\2\u1916\u1917\7K\2\2\u1917\u1918\7E\2\2\u1918"+ + "\u1919\7C\2\2\u1919\u191a\7V\2\2\u191a\u191b\7G\2\2\u191b\u191c\7a\2\2"+ + "\u191c\u191d\7K\2\2\u191d\u191e\7I\2\2\u191e\u191f\7P\2\2\u191f\u1920"+ + "\7Q\2\2\u1920\u1921\7T\2\2\u1921\u1922\7G\2\2\u1922\u1923\7a\2\2\u1923"+ + "\u1924\7V\2\2\u1924\u1925\7C\2\2\u1925\u1926\7D\2\2\u1926\u1927\7N\2\2"+ + "\u1927\u1928\7G\2\2\u1928\u03ea\3\2\2\2\u1929\u192a\7T\2\2\u192a\u192b"+ + "\7G\2\2\u192b\u192c\7R\2\2\u192c\u192d\7N\2\2\u192d\u192e\7K\2\2\u192e"+ + "\u192f\7E\2\2\u192f\u1930\7C\2\2\u1930\u1931\7V\2\2\u1931\u1932\7G\2\2"+ + "\u1932\u1933\7a\2\2\u1933\u1934\7T\2\2\u1934\u1935\7G\2\2\u1935\u1936"+ + "\7Y\2\2\u1936\u1937\7T\2\2\u1937\u1938\7K\2\2\u1938\u1939\7V\2\2\u1939"+ + "\u193a\7G\2\2\u193a\u193b\7a\2\2\u193b\u193c\7F\2\2\u193c\u193d\7D\2\2"+ + "\u193d\u03ec\3\2\2\2\u193e\u193f\7T\2\2\u193f\u1940\7G\2\2\u1940\u1941"+ + "\7R\2\2\u1941\u1942\7N\2\2\u1942\u1943\7K\2\2\u1943\u1944\7E\2\2\u1944"+ + "\u1945\7C\2\2\u1945\u1946\7V\2\2\u1946\u1947\7G\2\2\u1947\u1948\7a\2\2"+ + "\u1948\u1949\7Y\2\2\u1949\u194a\7K\2\2\u194a\u194b\7N\2\2\u194b\u194c"+ + "\7F\2\2\u194c\u194d\7a\2\2\u194d\u194e\7F\2\2\u194e\u194f\7Q\2\2\u194f"+ + "\u1950\7a\2\2\u1950\u1951\7V\2\2\u1951\u1952\7C\2\2\u1952\u1953\7D\2\2"+ + "\u1953\u1954\7N\2\2\u1954\u1955\7G\2\2\u1955\u03ee\3\2\2\2\u1956\u1957"+ + "\7T\2\2\u1957\u1958\7G\2\2\u1958\u1959\7R\2\2\u1959\u195a\7N\2\2\u195a"; + private static final String _serializedATNSegment3 = + "\u195b\7K\2\2\u195b\u195c\7E\2\2\u195c\u195d\7C\2\2\u195d\u195e\7V\2\2"+ + "\u195e\u195f\7G\2\2\u195f\u1960\7a\2\2\u1960\u1961\7Y\2\2\u1961\u1962"+ + "\7K\2\2\u1962\u1963\7N\2\2\u1963\u1964\7F\2\2\u1964\u1965\7a\2\2\u1965"+ + "\u1966\7K\2\2\u1966\u1967\7I\2\2\u1967\u1968\7P\2\2\u1968\u1969\7Q\2\2"+ + "\u1969\u196a\7T\2\2\u196a\u196b\7G\2\2\u196b\u196c\7a\2\2\u196c\u196d"+ + "\7V\2\2\u196d\u196e\7C\2\2\u196e\u196f\7D\2\2\u196f\u1970\7N\2\2\u1970"+ + "\u1971\7G\2\2\u1971\u03f0\3\2\2\2\u1972\u1973\7T\2\2\u1973\u1974\7G\2"+ + "\2\u1974\u1975\7R\2\2\u1975\u1976\7N\2\2\u1976\u1977\7K\2\2\u1977\u1978"+ + "\7E\2\2\u1978\u1979\7C\2\2\u1979\u197a\7V\2\2\u197a\u197b\7K\2\2\u197b"+ + "\u197c\7Q\2\2\u197c\u197d\7P\2\2\u197d\u03f2\3\2\2\2\u197e\u197f\7T\2"+ + "\2\u197f\u1980\7G\2\2\u1980\u1981\7U\2\2\u1981\u1982\7G\2\2\u1982\u1983"+ + "\7V\2\2\u1983\u03f4\3\2\2\2\u1984\u1985\7T\2\2\u1985\u1986\7G\2\2\u1986"+ + "\u1987\7U\2\2\u1987\u1988\7W\2\2\u1988\u1989\7O\2\2\u1989\u198a\7G\2\2"+ + "\u198a\u03f6\3\2\2\2\u198b\u198c\7T\2\2\u198c\u198d\7G\2\2\u198d\u198e"+ + "\7V\2\2\u198e\u198f\7W\2\2\u198f\u1990\7T\2\2\u1990\u1991\7P\2\2\u1991"+ + "\u1992\7G\2\2\u1992\u1993\7F\2\2\u1993\u1994\7a\2\2\u1994\u1995\7U\2\2"+ + "\u1995\u1996\7S\2\2\u1996\u1997\7N\2\2\u1997\u1998\7U\2\2\u1998\u1999"+ + "\7V\2\2\u1999\u199a\7C\2\2\u199a\u199b\7V\2\2\u199b\u199c\7G\2\2\u199c"+ + "\u03f8\3\2\2\2\u199d\u199e\7T\2\2\u199e\u199f\7G\2\2\u199f\u19a0\7V\2"+ + "\2\u19a0\u19a1\7W\2\2\u19a1\u19a2\7T\2\2\u19a2\u19a3\7P\2\2\u19a3\u19a4"+ + "\7U\2\2\u19a4\u03fa\3\2\2\2\u19a5\u19a6\7T\2\2\u19a6\u19a7\7Q\2\2\u19a7"+ + "\u19a8\7N\2\2\u19a8\u19a9\7G\2\2\u19a9\u03fc\3\2\2\2\u19aa\u19ab\7T\2"+ + "\2\u19ab\u19ac\7Q\2\2\u19ac\u19ad\7N\2\2\u19ad\u19ae\7N\2\2\u19ae\u19af"+ + "\7D\2\2\u19af\u19b0\7C\2\2\u19b0\u19b1\7E\2\2\u19b1\u19b2\7M\2\2\u19b2"+ + "\u03fe\3\2\2\2\u19b3\u19b4\7T\2\2\u19b4\u19b5\7Q\2\2\u19b5\u19b6\7N\2"+ + "\2\u19b6\u19b7\7N\2\2\u19b7\u19b8\7W\2\2\u19b8\u19b9\7R\2\2\u19b9\u0400"+ + "\3\2\2\2\u19ba\u19bb\7T\2\2\u19bb\u19bc\7Q\2\2\u19bc\u19bd\7V\2\2\u19bd"+ + "\u19be\7C\2\2\u19be\u19bf\7V\2\2\u19bf\u19c0\7G\2\2\u19c0\u0402\3\2\2"+ + "\2\u19c1\u19c2\7T\2\2\u19c2\u19c3\7Q\2\2\u19c3\u19c4\7Y\2\2\u19c4\u0404"+ + "\3\2\2\2\u19c5\u19c6\7T\2\2\u19c6\u19c7\7Q\2\2\u19c7\u19c8\7Y\2\2\u19c8"+ + "\u19c9\7U\2\2\u19c9\u0406\3\2\2\2\u19ca\u19cb\7T\2\2\u19cb\u19cc\7Q\2"+ + "\2\u19cc\u19cd\7Y\2\2\u19cd\u19ce\7a\2\2\u19ce\u19cf\7H\2\2\u19cf\u19d0"+ + "\7Q\2\2\u19d0\u19d1\7T\2\2\u19d1\u19d2\7O\2\2\u19d2\u19d3\7C\2\2\u19d3"+ + "\u19d4\7V\2\2\u19d4\u0408\3\2\2\2\u19d5\u19d6\7U\2\2\u19d6\u19d7\7C\2"+ + "\2\u19d7\u19d8\7X\2\2\u19d8\u19d9\7G\2\2\u19d9\u19da\7R\2\2\u19da\u19db"+ + "\7Q\2\2\u19db\u19dc\7K\2\2\u19dc\u19dd\7P\2\2\u19dd\u19de\7V\2\2\u19de"+ + "\u040a\3\2\2\2\u19df\u19e0\7U\2\2\u19e0\u19e1\7E\2\2\u19e1\u19e2\7J\2"+ + "\2\u19e2\u19e3\7G\2\2\u19e3\u19e4\7F\2\2\u19e4\u19e5\7W\2\2\u19e5\u19e6"+ + "\7N\2\2\u19e6\u19e7\7G\2\2\u19e7\u040c\3\2\2\2\u19e8\u19e9\7U\2\2\u19e9"+ + "\u19ea\7G\2\2\u19ea\u19eb\7E\2\2\u19eb\u19ec\7W\2\2\u19ec\u19ed\7T\2\2"+ + "\u19ed\u19ee\7K\2\2\u19ee\u19ef\7V\2\2\u19ef\u19f0\7[\2\2\u19f0\u040e"+ + "\3\2\2\2\u19f1\u19f2\7U\2\2\u19f2\u19f3\7G\2\2\u19f3\u19f4\7T\2\2\u19f4"+ + "\u19f5\7X\2\2\u19f5\u19f6\7G\2\2\u19f6\u19f7\7T\2\2\u19f7\u0410\3\2\2"+ + "\2\u19f8\u19f9\7U\2\2\u19f9\u19fa\7G\2\2\u19fa\u19fb\7U\2\2\u19fb\u19fc"+ + "\7U\2\2\u19fc\u19fd\7K\2\2\u19fd\u19fe\7Q\2\2\u19fe\u19ff\7P\2\2\u19ff"+ + "\u0412\3\2\2\2\u1a00\u1a01\7U\2\2\u1a01\u1a02\7J\2\2\u1a02\u1a03\7C\2"+ + "\2\u1a03\u1a04\7T\2\2\u1a04\u1a05\7G\2\2\u1a05\u0414\3\2\2\2\u1a06\u1a07"+ + "\7U\2\2\u1a07\u1a08\7J\2\2\u1a08\u1a09\7C\2\2\u1a09\u1a0a\7T\2\2\u1a0a"+ + "\u1a0b\7G\2\2\u1a0b\u1a0c\7F\2\2\u1a0c\u0416\3\2\2\2\u1a0d\u1a0e\7U\2"+ + "\2\u1a0e\u1a0f\7K\2\2\u1a0f\u1a10\7I\2\2\u1a10\u1a11\7P\2\2\u1a11\u1a12"+ + "\7G\2\2\u1a12\u1a13\7F\2\2\u1a13\u0418\3\2\2\2\u1a14\u1a15\7U\2\2\u1a15"+ + "\u1a16\7K\2\2\u1a16\u1a17\7O\2\2\u1a17\u1a18\7R\2\2\u1a18\u1a19\7N\2\2"+ + "\u1a19\u1a1a\7G\2\2\u1a1a\u041a\3\2\2\2\u1a1b\u1a1c\7U\2\2\u1a1c\u1a1d"+ + "\7N\2\2\u1a1d\u1a1e\7C\2\2\u1a1e\u1a1f\7X\2\2\u1a1f\u1a20\7G\2\2\u1a20"+ + "\u041c\3\2\2\2\u1a21\u1a22\7U\2\2\u1a22\u1a23\7N\2\2\u1a23\u1a24\7Q\2"+ + "\2\u1a24\u1a25\7Y\2\2\u1a25\u041e\3\2\2\2\u1a26\u1a27\7U\2\2\u1a27\u1a28"+ + "\7P\2\2\u1a28\u1a29\7C\2\2\u1a29\u1a2a\7R\2\2\u1a2a\u1a2b\7U\2\2\u1a2b"+ + "\u1a2c\7J\2\2\u1a2c\u1a2d\7Q\2\2\u1a2d\u1a2e\7V\2\2\u1a2e\u0420\3\2\2"+ + "\2\u1a2f\u1a30\7U\2\2\u1a30\u1a31\7Q\2\2\u1a31\u1a32\7E\2\2\u1a32\u1a33"+ + "\7M\2\2\u1a33\u1a34\7G\2\2\u1a34\u1a35\7V\2\2\u1a35\u0422\3\2\2\2\u1a36"+ + "\u1a37\7U\2\2\u1a37\u1a38\7Q\2\2\u1a38\u1a39\7O\2\2\u1a39\u1a3a\7G\2\2"+ + "\u1a3a\u0424\3\2\2\2\u1a3b\u1a3c\7U\2\2\u1a3c\u1a3d\7Q\2\2\u1a3d\u1a3e"+ + "\7P\2\2\u1a3e\u1a3f\7C\2\2\u1a3f\u1a40\7O\2\2\u1a40\u1a41\7G\2\2\u1a41"+ + "\u0426\3\2\2\2\u1a42\u1a43\7U\2\2\u1a43\u1a44\7Q\2\2\u1a44\u1a45\7W\2"+ + "\2\u1a45\u1a46\7P\2\2\u1a46\u1a47\7F\2\2\u1a47\u1a48\7U\2\2\u1a48\u0428"+ + "\3\2\2\2\u1a49\u1a4a\7U\2\2\u1a4a\u1a4b\7Q\2\2\u1a4b\u1a4c\7W\2\2\u1a4c"+ + "\u1a4d\7T\2\2\u1a4d\u1a4e\7E\2\2\u1a4e\u1a4f\7G\2\2\u1a4f\u042a\3\2\2"+ + "\2\u1a50\u1a51\7U\2\2\u1a51\u1a52\7S\2\2\u1a52\u1a53\7N\2\2\u1a53\u1a54"+ + "\7a\2\2\u1a54\u1a55\7C\2\2\u1a55\u1a56\7H\2\2\u1a56\u1a57\7V\2\2\u1a57"+ + "\u1a58\7G\2\2\u1a58\u1a59\7T\2\2\u1a59\u1a5a\7a\2\2\u1a5a\u1a5b\7I\2\2"+ + "\u1a5b\u1a5c\7V\2\2\u1a5c\u1a5d\7K\2\2\u1a5d\u1a5e\7F\2\2\u1a5e\u1a5f"+ + "\7U\2\2\u1a5f\u042c\3\2\2\2\u1a60\u1a61\7U\2\2\u1a61\u1a62\7S\2\2\u1a62"+ + "\u1a63\7N\2\2\u1a63\u1a64\7a\2\2\u1a64\u1a65\7C\2\2\u1a65\u1a66\7H\2\2"+ + "\u1a66\u1a67\7V\2\2\u1a67\u1a68\7G\2\2\u1a68\u1a69\7T\2\2\u1a69\u1a6a"+ + "\7a\2\2\u1a6a\u1a6b\7O\2\2\u1a6b\u1a6c\7V\2\2\u1a6c\u1a6d\7U\2\2\u1a6d"+ + "\u1a6e\7a\2\2\u1a6e\u1a6f\7I\2\2\u1a6f\u1a70\7C\2\2\u1a70\u1a71\7R\2\2"+ + "\u1a71\u1a72\7U\2\2\u1a72\u042e\3\2\2\2\u1a73\u1a74\7U\2\2\u1a74\u1a75"+ + "\7S\2\2\u1a75\u1a76\7N\2\2\u1a76\u1a77\7a\2\2\u1a77\u1a78\7D\2\2\u1a78"+ + "\u1a79\7G\2\2\u1a79\u1a7a\7H\2\2\u1a7a\u1a7b\7Q\2\2\u1a7b\u1a7c\7T\2\2"+ + "\u1a7c\u1a7d\7G\2\2\u1a7d\u1a7e\7a\2\2\u1a7e\u1a7f\7I\2\2\u1a7f\u1a80"+ + "\7V\2\2\u1a80\u1a81\7K\2\2\u1a81\u1a82\7F\2\2\u1a82\u1a83\7U\2\2\u1a83"+ + "\u0430\3\2\2\2\u1a84\u1a85\7U\2\2\u1a85\u1a86\7S\2\2\u1a86\u1a87\7N\2"+ + "\2\u1a87\u1a88\7a\2\2\u1a88\u1a89\7D\2\2\u1a89\u1a8a\7W\2\2\u1a8a\u1a8b"+ + "\7H\2\2\u1a8b\u1a8c\7H\2\2\u1a8c\u1a8d\7G\2\2\u1a8d\u1a8e\7T\2\2\u1a8e"+ + "\u1a8f\7a\2\2\u1a8f\u1a90\7T\2\2\u1a90\u1a91\7G\2\2\u1a91\u1a92\7U\2\2"+ + "\u1a92\u1a93\7W\2\2\u1a93\u1a94\7N\2\2\u1a94\u1a95\7V\2\2\u1a95\u0432"+ + "\3\2\2\2\u1a96\u1a97\7U\2\2\u1a97\u1a98\7S\2\2\u1a98\u1a99\7N\2\2\u1a99"+ + "\u1a9a\7a\2\2\u1a9a\u1a9b\7E\2\2\u1a9b\u1a9c\7C\2\2\u1a9c\u1a9d\7E\2\2"+ + "\u1a9d\u1a9e\7J\2\2\u1a9e\u1a9f\7G\2\2\u1a9f\u0434\3\2\2\2\u1aa0\u1aa1"+ + "\7U\2\2\u1aa1\u1aa2\7S\2\2\u1aa2\u1aa3\7N\2\2\u1aa3\u1aa4\7a\2\2\u1aa4"+ + "\u1aa5\7P\2\2\u1aa5\u1aa6\7Q\2\2\u1aa6\u1aa7\7a\2\2\u1aa7\u1aa8\7E\2\2"+ + "\u1aa8\u1aa9\7C\2\2\u1aa9\u1aaa\7E\2\2\u1aaa\u1aab\7J\2\2\u1aab\u1aac"+ + "\7G\2\2\u1aac\u0436\3\2\2\2\u1aad\u1aae\7U\2\2\u1aae\u1aaf\7S\2\2\u1aaf"+ + "\u1ab0\7N\2\2\u1ab0\u1ab1\7a\2\2\u1ab1\u1ab2\7V\2\2\u1ab2\u1ab3\7J\2\2"+ + "\u1ab3\u1ab4\7T\2\2\u1ab4\u1ab5\7G\2\2\u1ab5\u1ab6\7C\2\2\u1ab6\u1ab7"+ + "\7F\2\2\u1ab7\u0438\3\2\2\2\u1ab8\u1ab9\7U\2\2\u1ab9\u1aba\7V\2\2\u1aba"+ + "\u1abb\7C\2\2\u1abb\u1abc\7T\2\2\u1abc\u1abd\7V\2\2\u1abd\u043a\3\2\2"+ + "\2\u1abe\u1abf\7U\2\2\u1abf\u1ac0\7V\2\2\u1ac0\u1ac1\7C\2\2\u1ac1\u1ac2"+ + "\7T\2\2\u1ac2\u1ac3\7V\2\2\u1ac3\u1ac4\7U\2\2\u1ac4\u043c\3\2\2\2\u1ac5"+ + "\u1ac6\7U\2\2\u1ac6\u1ac7\7V\2\2\u1ac7\u1ac8\7C\2\2\u1ac8\u1ac9\7V\2\2"+ + "\u1ac9\u1aca\7U\2\2\u1aca\u1acb\7a\2\2\u1acb\u1acc\7C\2\2\u1acc\u1acd"+ + "\7W\2\2\u1acd\u1ace\7V\2\2\u1ace\u1acf\7Q\2\2\u1acf\u1ad0\7a\2\2\u1ad0"+ + "\u1ad1\7T\2\2\u1ad1\u1ad2\7G\2\2\u1ad2\u1ad3\7E\2\2\u1ad3\u1ad4\7C\2\2"+ + "\u1ad4\u1ad5\7N\2\2\u1ad5\u1ad6\7E\2\2\u1ad6\u043e\3\2\2\2\u1ad7\u1ad8"+ + "\7U\2\2\u1ad8\u1ad9\7V\2\2\u1ad9\u1ada\7C\2\2\u1ada\u1adb\7V\2\2\u1adb"+ + "\u1adc\7U\2\2\u1adc\u1add\7a\2\2\u1add\u1ade\7R\2\2\u1ade\u1adf\7G\2\2"+ + "\u1adf\u1ae0\7T\2\2\u1ae0\u1ae1\7U\2\2\u1ae1\u1ae2\7K\2\2\u1ae2\u1ae3"+ + "\7U\2\2\u1ae3\u1ae4\7V\2\2\u1ae4\u1ae5\7G\2\2\u1ae5\u1ae6\7P\2\2\u1ae6"+ + "\u1ae7\7V\2\2\u1ae7\u0440\3\2\2\2\u1ae8\u1ae9\7U\2\2\u1ae9\u1aea\7V\2"+ + "\2\u1aea\u1aeb\7C\2\2\u1aeb\u1aec\7V\2\2\u1aec\u1aed\7U\2\2\u1aed\u1aee"+ + "\7a\2\2\u1aee\u1aef\7U\2\2\u1aef\u1af0\7C\2\2\u1af0\u1af1\7O\2\2\u1af1"+ + "\u1af2\7R\2\2\u1af2\u1af3\7N\2\2\u1af3\u1af4\7G\2\2\u1af4\u1af5\7a\2\2"+ + "\u1af5\u1af6\7R\2\2\u1af6\u1af7\7C\2\2\u1af7\u1af8\7I\2\2\u1af8\u1af9"+ + "\7G\2\2\u1af9\u1afa\7U\2\2\u1afa\u0442\3\2\2\2\u1afb\u1afc\7U\2\2\u1afc"+ + "\u1afd\7V\2\2\u1afd\u1afe\7C\2\2\u1afe\u1aff\7V\2\2\u1aff\u1b00\7W\2\2"+ + "\u1b00\u1b01\7U\2\2\u1b01\u0444\3\2\2\2\u1b02\u1b03\7U\2\2\u1b03\u1b04"+ + "\7V\2\2\u1b04\u1b05\7Q\2\2\u1b05\u1b06\7R\2\2\u1b06\u0446\3\2\2\2\u1b07"+ + "\u1b08\7U\2\2\u1b08\u1b09\7V\2\2\u1b09\u1b0a\7Q\2\2\u1b0a\u1b0b\7T\2\2"+ + "\u1b0b\u1b0c\7C\2\2\u1b0c\u1b0d\7I\2\2\u1b0d\u1b0e\7G\2\2\u1b0e\u0448"+ + "\3\2\2\2\u1b0f\u1b10\7U\2\2\u1b10\u1b11\7V\2\2\u1b11\u1b12\7Q\2\2\u1b12"+ + "\u1b13\7T\2\2\u1b13\u1b14\7G\2\2\u1b14\u1b15\7F\2\2\u1b15\u044a\3\2\2"+ + "\2\u1b16\u1b17\7U\2\2\u1b17\u1b18\7V\2\2\u1b18\u1b19\7T\2\2\u1b19\u1b1a"+ + "\7K\2\2\u1b1a\u1b1b\7P\2\2\u1b1b\u1b1c\7I\2\2\u1b1c\u044c\3\2\2\2\u1b1d"+ + "\u1b1e\7U\2\2\u1b1e\u1b1f\7W\2\2\u1b1f\u1b20\7D\2\2\u1b20\u1b21\7E\2\2"+ + "\u1b21\u1b22\7N\2\2\u1b22\u1b23\7C\2\2\u1b23\u1b24\7U\2\2\u1b24\u1b25"+ + "\7U\2\2\u1b25\u1b26\7a\2\2\u1b26\u1b27\7Q\2\2\u1b27\u1b28\7T\2\2\u1b28"+ + "\u1b29\7K\2\2\u1b29\u1b2a\7I\2\2\u1b2a\u1b2b\7K\2\2\u1b2b\u1b2c\7P\2\2"+ + "\u1b2c\u044e\3\2\2\2\u1b2d\u1b2e\7U\2\2\u1b2e\u1b2f\7W\2\2\u1b2f\u1b30"+ + "\7D\2\2\u1b30\u1b31\7L\2\2\u1b31\u1b32\7G\2\2\u1b32\u1b33\7E\2\2\u1b33"+ + "\u1b34\7V\2\2\u1b34\u0450\3\2\2\2\u1b35\u1b36\7U\2\2\u1b36\u1b37\7W\2"+ + "\2\u1b37\u1b38\7D\2\2\u1b38\u1b39\7R\2\2\u1b39\u1b3a\7C\2\2\u1b3a\u1b3b"+ + "\7T\2\2\u1b3b\u1b3c\7V\2\2\u1b3c\u1b3d\7K\2\2\u1b3d\u1b3e\7V\2\2\u1b3e"+ + "\u1b3f\7K\2\2\u1b3f\u1b40\7Q\2\2\u1b40\u1b41\7P\2\2\u1b41\u0452\3\2\2"+ + "\2\u1b42\u1b43\7U\2\2\u1b43\u1b44\7W\2\2\u1b44\u1b45\7D\2\2\u1b45\u1b46"+ + "\7R\2\2\u1b46\u1b47\7C\2\2\u1b47\u1b48\7T\2\2\u1b48\u1b49\7V\2\2\u1b49"+ + "\u1b4a\7K\2\2\u1b4a\u1b4b\7V\2\2\u1b4b\u1b4c\7K\2\2\u1b4c\u1b4d\7Q\2\2"+ + "\u1b4d\u1b4e\7P\2\2\u1b4e\u1b4f\7U\2\2\u1b4f\u0454\3\2\2\2\u1b50\u1b51"+ + "\7U\2\2\u1b51\u1b52\7W\2\2\u1b52\u1b53\7U\2\2\u1b53\u1b54\7R\2\2\u1b54"+ + "\u1b55\7G\2\2\u1b55\u1b56\7P\2\2\u1b56\u1b57\7F\2\2\u1b57\u0456\3\2\2"+ + "\2\u1b58\u1b59\7U\2\2\u1b59\u1b5a\7Y\2\2\u1b5a\u1b5b\7C\2\2\u1b5b\u1b5c"+ + "\7R\2\2\u1b5c\u1b5d\7U\2\2\u1b5d\u0458\3\2\2\2\u1b5e\u1b5f\7U\2\2\u1b5f"+ + "\u1b60\7Y\2\2\u1b60\u1b61\7K\2\2\u1b61\u1b62\7V\2\2\u1b62\u1b63\7E\2\2"+ + "\u1b63\u1b64\7J\2\2\u1b64\u1b65\7G\2\2\u1b65\u1b66\7U\2\2\u1b66\u045a"+ + "\3\2\2\2\u1b67\u1b68\7V\2\2\u1b68\u1b69\7C\2\2\u1b69\u1b6a\7D\2\2\u1b6a"+ + "\u1b6b\7N\2\2\u1b6b\u1b6c\7G\2\2\u1b6c\u1b6d\7a\2\2\u1b6d\u1b6e\7P\2\2"+ + "\u1b6e\u1b6f\7C\2\2\u1b6f\u1b70\7O\2\2\u1b70\u1b71\7G\2\2\u1b71\u045c"+ + "\3\2\2\2\u1b72\u1b73\7V\2\2\u1b73\u1b74\7C\2\2\u1b74\u1b75\7D\2\2\u1b75"+ + "\u1b76\7N\2\2\u1b76\u1b77\7G\2\2\u1b77\u1b78\7U\2\2\u1b78\u1b79\7R\2\2"+ + "\u1b79\u1b7a\7C\2\2\u1b7a\u1b7b\7E\2\2\u1b7b\u1b7c\7G\2\2\u1b7c\u045e"+ + "\3\2\2\2\u1b7d\u1b7e\7V\2\2\u1b7e\u1b7f\7G\2\2\u1b7f\u1b80\7O\2\2\u1b80"+ + "\u1b81\7R\2\2\u1b81\u1b82\7Q\2\2\u1b82\u1b83\7T\2\2\u1b83\u1b84\7C\2\2"+ + "\u1b84\u1b85\7T\2\2\u1b85\u1b86\7[\2\2\u1b86\u0460\3\2\2\2\u1b87\u1b88"+ + "\7V\2\2\u1b88\u1b89\7G\2\2\u1b89\u1b8a\7O\2\2\u1b8a\u1b8b\7R\2\2\u1b8b"+ + "\u1b8c\7V\2\2\u1b8c\u1b8d\7C\2\2\u1b8d\u1b8e\7D\2\2\u1b8e\u1b8f\7N\2\2"+ + "\u1b8f\u1b90\7G\2\2\u1b90\u0462\3\2\2\2\u1b91\u1b92\7V\2\2\u1b92\u1b93"+ + "\7J\2\2\u1b93\u1b94\7C\2\2\u1b94\u1b95\7P\2\2\u1b95\u0464\3\2\2\2\u1b96"+ + "\u1b97\7V\2\2\u1b97\u1b98\7T\2\2\u1b98\u1b99\7C\2\2\u1b99\u1b9a\7F\2\2"+ + "\u1b9a\u1b9b\7K\2\2\u1b9b\u1b9c\7V\2\2\u1b9c\u1b9d\7K\2\2\u1b9d\u1b9e"+ + "\7Q\2\2\u1b9e\u1b9f\7P\2\2\u1b9f\u1ba0\7C\2\2\u1ba0\u1ba1\7N\2\2\u1ba1"+ + "\u0466\3\2\2\2\u1ba2\u1ba3\7V\2\2\u1ba3\u1ba4\7T\2\2\u1ba4\u1ba5\7C\2"+ + "\2\u1ba5\u1ba6\7P\2\2\u1ba6\u1ba7\7U\2\2\u1ba7\u1ba8\7C\2\2\u1ba8\u1ba9"+ + "\7E\2\2\u1ba9\u1baa\7V\2\2\u1baa\u1bab\7K\2\2\u1bab\u1bac\7Q\2\2\u1bac"+ + "\u1bad\7P\2\2\u1bad\u0468\3\2\2\2\u1bae\u1baf\7V\2\2\u1baf\u1bb0\7T\2"+ + "\2\u1bb0\u1bb1\7C\2\2\u1bb1\u1bb2\7P\2\2\u1bb2\u1bb3\7U\2\2\u1bb3\u1bb4"+ + "\7C\2\2\u1bb4\u1bb5\7E\2\2\u1bb5\u1bb6\7V\2\2\u1bb6\u1bb7\7K\2\2\u1bb7"+ + "\u1bb8\7Q\2\2\u1bb8\u1bb9\7P\2\2\u1bb9\u1bba\7C\2\2\u1bba\u1bbb\7N\2\2"+ + "\u1bbb\u046a\3\2\2\2\u1bbc\u1bbd\7V\2\2\u1bbd\u1bbe\7T\2\2\u1bbe\u1bbf"+ + "\7K\2\2\u1bbf\u1bc0\7I\2\2\u1bc0\u1bc1\7I\2\2\u1bc1\u1bc2\7G\2\2\u1bc2"+ + "\u1bc3\7T\2\2\u1bc3\u1bc4\7U\2\2\u1bc4\u046c\3\2\2\2\u1bc5\u1bc6\7V\2"+ + "\2\u1bc6\u1bc7\7T\2\2\u1bc7\u1bc8\7W\2\2\u1bc8\u1bc9\7P\2\2\u1bc9\u1bca"+ + "\7E\2\2\u1bca\u1bcb\7C\2\2\u1bcb\u1bcc\7V\2\2\u1bcc\u1bcd\7G\2\2\u1bcd"+ + "\u046e\3\2\2\2\u1bce\u1bcf\7W\2\2\u1bcf\u1bd0\7P\2\2\u1bd0\u1bd1\7F\2"+ + "\2\u1bd1\u1bd2\7G\2\2\u1bd2\u1bd3\7H\2\2\u1bd3\u1bd4\7K\2\2\u1bd4\u1bd5"+ + "\7P\2\2\u1bd5\u1bd6\7G\2\2\u1bd6\u1bd7\7F\2\2\u1bd7\u0470\3\2\2\2\u1bd8"+ + "\u1bd9\7W\2\2\u1bd9\u1bda\7P\2\2\u1bda\u1bdb\7F\2\2\u1bdb\u1bdc\7Q\2\2"+ + "\u1bdc\u1bdd\7H\2\2\u1bdd\u1bde\7K\2\2\u1bde\u1bdf\7N\2\2\u1bdf\u1be0"+ + "\7G\2\2\u1be0\u0472\3\2\2\2\u1be1\u1be2\7W\2\2\u1be2\u1be3\7P\2\2\u1be3"+ + "\u1be4\7F\2\2\u1be4\u1be5\7Q\2\2\u1be5\u1be6\7a\2\2\u1be6\u1be7\7D\2\2"+ + "\u1be7\u1be8\7W\2\2\u1be8\u1be9\7H\2\2\u1be9\u1bea\7H\2\2\u1bea\u1beb"+ + "\7G\2\2\u1beb\u1bec\7T\2\2\u1bec\u1bed\7a\2\2\u1bed\u1bee\7U\2\2\u1bee"+ + "\u1bef\7K\2\2\u1bef\u1bf0\7\\\2\2\u1bf0\u1bf1\7G\2\2\u1bf1\u0474\3\2\2"+ + "\2\u1bf2\u1bf3\7W\2\2\u1bf3\u1bf4\7P\2\2\u1bf4\u1bf5\7K\2\2\u1bf5\u1bf6"+ + "\7P\2\2\u1bf6\u1bf7\7U\2\2\u1bf7\u1bf8\7V\2\2\u1bf8\u1bf9\7C\2\2\u1bf9"+ + "\u1bfa\7N\2\2\u1bfa\u1bfb\7N\2\2\u1bfb\u0476\3\2\2\2\u1bfc\u1bfd\7W\2"+ + "\2\u1bfd\u1bfe\7P\2\2\u1bfe\u1bff\7M\2\2\u1bff\u1c00\7P\2\2\u1c00\u1c01"+ + "\7Q\2\2\u1c01\u1c02\7Y\2\2\u1c02\u1c03\7P\2\2\u1c03\u0478\3\2\2\2\u1c04"+ + "\u1c05\7W\2\2\u1c05\u1c06\7P\2\2\u1c06\u1c07\7V\2\2\u1c07\u1c08\7K\2\2"+ + "\u1c08\u1c09\7N\2\2\u1c09\u047a\3\2\2\2\u1c0a\u1c0b\7W\2\2\u1c0b\u1c0c"+ + "\7R\2\2\u1c0c\u1c0d\7I\2\2\u1c0d\u1c0e\7T\2\2\u1c0e\u1c0f\7C\2\2\u1c0f"+ + "\u1c10\7F\2\2\u1c10\u1c11\7G\2\2\u1c11\u047c\3\2\2\2\u1c12\u1c13\7W\2"+ + "\2\u1c13\u1c14\7U\2\2\u1c14\u1c15\7G\2\2\u1c15\u1c16\7T\2\2\u1c16\u047e"+ + "\3\2\2\2\u1c17\u1c18\7W\2\2\u1c18\u1c19\7U\2\2\u1c19\u1c1a\7G\2\2\u1c1a"+ + "\u1c1b\7a\2\2\u1c1b\u1c1c\7H\2\2\u1c1c\u1c1d\7T\2\2\u1c1d\u1c1e\7O\2\2"+ + "\u1c1e\u0480\3\2\2\2\u1c1f\u1c20\7W\2\2\u1c20\u1c21\7U\2\2\u1c21\u1c22"+ + "\7G\2\2\u1c22\u1c23\7T\2\2\u1c23\u1c24\7a\2\2\u1c24\u1c25\7T\2\2\u1c25"+ + "\u1c26\7G\2\2\u1c26\u1c27\7U\2\2\u1c27\u1c28\7Q\2\2\u1c28\u1c29\7W\2\2"+ + "\u1c29\u1c2a\7T\2\2\u1c2a\u1c2b\7E\2\2\u1c2b\u1c2c\7G\2\2\u1c2c\u1c2d"+ + "\7U\2\2\u1c2d\u0482\3\2\2\2\u1c2e\u1c2f\7X\2\2\u1c2f\u1c30\7C\2\2\u1c30"+ + "\u1c31\7N\2\2\u1c31\u1c32\7K\2\2\u1c32\u1c33\7F\2\2\u1c33\u1c34\7C\2\2"+ + "\u1c34\u1c35\7V\2\2\u1c35\u1c36\7K\2\2\u1c36\u1c37\7Q\2\2\u1c37\u1c38"+ + "\7P\2\2\u1c38\u0484\3\2\2\2\u1c39\u1c3a\7X\2\2\u1c3a\u1c3b\7C\2\2\u1c3b"+ + "\u1c3c\7N\2\2\u1c3c\u1c3d\7W\2\2\u1c3d\u1c3e\7G\2\2\u1c3e\u0486\3\2\2"+ + "\2\u1c3f\u1c40\7X\2\2\u1c40\u1c41\7C\2\2\u1c41\u1c42\7T\2\2\u1c42\u1c43"+ + "\7K\2\2\u1c43\u1c44\7C\2\2\u1c44\u1c45\7D\2\2\u1c45\u1c46\7N\2\2\u1c46"+ + "\u1c47\7G\2\2\u1c47\u1c48\7U\2\2\u1c48\u0488\3\2\2\2\u1c49\u1c4a\7X\2"+ + "\2\u1c4a\u1c4b\7K\2\2\u1c4b\u1c4c\7G\2\2\u1c4c\u1c4d\7Y\2\2\u1c4d\u048a"+ + "\3\2\2\2\u1c4e\u1c4f\7X\2\2\u1c4f\u1c50\7K\2\2\u1c50\u1c51\7T\2\2\u1c51"+ + "\u1c52\7V\2\2\u1c52\u1c53\7W\2\2\u1c53\u1c54\7C\2\2\u1c54\u1c55\7N\2\2"+ + "\u1c55\u048c\3\2\2\2\u1c56\u1c57\7X\2\2\u1c57\u1c58\7K\2\2\u1c58\u1c59"+ + "\7U\2\2\u1c59\u1c5a\7K\2\2\u1c5a\u1c5b\7D\2\2\u1c5b\u1c5c\7N\2\2\u1c5c"+ + "\u1c5d\7G\2\2\u1c5d\u048e\3\2\2\2\u1c5e\u1c5f\7Y\2\2\u1c5f\u1c60\7C\2"+ + "\2\u1c60\u1c61\7K\2\2\u1c61\u1c62\7V\2\2\u1c62\u0490\3\2\2\2\u1c63\u1c64"+ + "\7Y\2\2\u1c64\u1c65\7C\2\2\u1c65\u1c66\7T\2\2\u1c66\u1c67\7P\2\2\u1c67"+ + "\u1c68\7K\2\2\u1c68\u1c69\7P\2\2\u1c69\u1c6a\7I\2\2\u1c6a\u1c6b\7U\2\2"+ + "\u1c6b\u0492\3\2\2\2\u1c6c\u1c6d\7Y\2\2\u1c6d\u1c6e\7K\2\2\u1c6e\u1c6f"+ + "\7V\2\2\u1c6f\u1c70\7J\2\2\u1c70\u1c71\7Q\2\2\u1c71\u1c72\7W\2\2\u1c72"+ + "\u1c73\7V\2\2\u1c73\u0494\3\2\2\2\u1c74\u1c75\7Y\2\2\u1c75\u1c76\7Q\2"+ + "\2\u1c76\u1c77\7T\2\2\u1c77\u1c78\7M\2\2\u1c78\u0496\3\2\2\2\u1c79\u1c7a"+ + "\7Y\2\2\u1c7a\u1c7b\7T\2\2\u1c7b\u1c7c\7C\2\2\u1c7c\u1c7d\7R\2\2\u1c7d"+ + "\u1c7e\7R\2\2\u1c7e\u1c7f\7G\2\2\u1c7f\u1c80\7T\2\2\u1c80\u0498\3\2\2"+ + "\2\u1c81\u1c82\7Z\2\2\u1c82\u1c83\7\67\2\2\u1c83\u1c84\7\62\2\2\u1c84"+ + "\u1c85\7;\2\2\u1c85\u049a\3\2\2\2\u1c86\u1c87\7Z\2\2\u1c87\u1c88\7C\2"+ + "\2\u1c88\u049c\3\2\2\2\u1c89\u1c8a\7Z\2\2\u1c8a\u1c8b\7O\2\2\u1c8b\u1c8c"+ + "\7N\2\2\u1c8c\u049e\3\2\2\2\u1c8d\u1c8e\7G\2\2\u1c8e\u1c8f\7W\2\2\u1c8f"+ + "\u1c90\7T\2\2\u1c90\u04a0\3\2\2\2\u1c91\u1c92\7W\2\2\u1c92\u1c93\7U\2"+ + "\2\u1c93\u1c94\7C\2\2\u1c94\u04a2\3\2\2\2\u1c95\u1c96\7L\2\2\u1c96\u1c97"+ + "\7K\2\2\u1c97\u1c98\7U\2\2\u1c98\u04a4\3\2\2\2\u1c99\u1c9a\7K\2\2\u1c9a"+ + "\u1c9b\7U\2\2\u1c9b\u1c9c\7Q\2\2\u1c9c\u04a6\3\2\2\2\u1c9d\u1c9e\7K\2"+ + "\2\u1c9e\u1c9f\7P\2\2\u1c9f\u1ca0\7V\2\2\u1ca0\u1ca1\7G\2\2\u1ca1\u1ca2"+ + "\7T\2\2\u1ca2\u1ca3\7P\2\2\u1ca3\u1ca4\7C\2\2\u1ca4\u1ca5\7N\2\2\u1ca5"+ + "\u04a8\3\2\2\2\u1ca6\u1ca7\7S\2\2\u1ca7\u1ca8\7W\2\2\u1ca8\u1ca9\7C\2"+ + "\2\u1ca9\u1caa\7T\2\2\u1caa\u1cab\7V\2\2\u1cab\u1cac\7G\2\2\u1cac\u1cad"+ + "\7T\2\2\u1cad\u04aa\3\2\2\2\u1cae\u1caf\7O\2\2\u1caf\u1cb0\7Q\2\2\u1cb0"+ + "\u1cb1\7P\2\2\u1cb1\u1cb2\7V\2\2\u1cb2\u1cb3\7J\2\2\u1cb3\u04ac\3\2\2"+ + "\2\u1cb4\u1cb5\7F\2\2\u1cb5\u1cb6\7C\2\2\u1cb6\u1cb7\7[\2\2\u1cb7\u04ae"+ + "\3\2\2\2\u1cb8\u1cb9\7J\2\2\u1cb9\u1cba\7Q\2\2\u1cba\u1cbb\7W\2\2\u1cbb"+ + "\u1cbc\7T\2\2\u1cbc\u04b0\3\2\2\2\u1cbd\u1cbe\7O\2\2\u1cbe\u1cbf\7K\2"+ + "\2\u1cbf\u1cc0\7P\2\2\u1cc0\u1cc1\7W\2\2\u1cc1\u1cc2\7V\2\2\u1cc2\u1cc3"+ + "\7G\2\2\u1cc3\u04b2\3\2\2\2\u1cc4\u1cc5\7Y\2\2\u1cc5\u1cc6\7G\2\2\u1cc6"+ + "\u1cc7\7G\2\2\u1cc7\u1cc8\7M\2\2\u1cc8\u04b4\3\2\2\2\u1cc9\u1cca\7U\2"+ + "\2\u1cca\u1ccb\7G\2\2\u1ccb\u1ccc\7E\2\2\u1ccc\u1ccd\7Q\2\2\u1ccd\u1cce"+ + "\7P\2\2\u1cce\u1ccf\7F\2\2\u1ccf\u04b6\3\2\2\2\u1cd0\u1cd1\7O\2\2\u1cd1"+ + "\u1cd2\7K\2\2\u1cd2\u1cd3\7E\2\2\u1cd3\u1cd4\7T\2\2\u1cd4\u1cd5\7Q\2\2"+ + "\u1cd5\u1cd6\7U\2\2\u1cd6\u1cd7\7G\2\2\u1cd7\u1cd8\7E\2\2\u1cd8\u1cd9"+ + "\7Q\2\2\u1cd9\u1cda\7P\2\2\u1cda\u1cdb\7F\2\2\u1cdb\u04b8\3\2\2\2\u1cdc"+ + "\u1cdd\7V\2\2\u1cdd\u1cde\7C\2\2\u1cde\u1cdf\7D\2\2\u1cdf\u1ce0\7N\2\2"+ + "\u1ce0\u1ce1\7G\2\2\u1ce1\u1ce2\7U\2\2\u1ce2\u04ba\3\2\2\2\u1ce3\u1ce4"+ + "\7T\2\2\u1ce4\u1ce5\7Q\2\2\u1ce5\u1ce6\7W\2\2\u1ce6\u1ce7\7V\2\2\u1ce7"+ + "\u1ce8\7K\2\2\u1ce8\u1ce9\7P\2\2\u1ce9\u1cea\7G\2\2\u1cea\u04bc\3\2\2"+ + "\2\u1ceb\u1cec\7G\2\2\u1cec\u1ced\7Z\2\2\u1ced\u1cee\7G\2\2\u1cee\u1cef"+ + "\7E\2\2\u1cef\u1cf0\7W\2\2\u1cf0\u1cf1\7V\2\2\u1cf1\u1cf2\7G\2\2\u1cf2"+ + "\u04be\3\2\2\2\u1cf3\u1cf4\7H\2\2\u1cf4\u1cf5\7K\2\2\u1cf5\u1cf6\7N\2"+ + "\2\u1cf6\u1cf7\7G\2\2\u1cf7\u04c0\3\2\2\2\u1cf8\u1cf9\7R\2\2\u1cf9\u1cfa"+ + "\7T\2\2\u1cfa\u1cfb\7Q\2\2\u1cfb\u1cfc\7E\2\2\u1cfc\u1cfd\7G\2\2\u1cfd"+ + "\u1cfe\7U\2\2\u1cfe\u1cff\7U\2\2\u1cff\u04c2\3\2\2\2\u1d00\u1d01\7T\2"+ + "\2\u1d01\u1d02\7G\2\2\u1d02\u1d03\7N\2\2\u1d03\u1d04\7Q\2\2\u1d04\u1d05"+ + "\7C\2\2\u1d05\u1d06\7F\2\2\u1d06\u04c4\3\2\2\2\u1d07\u1d08\7U\2\2\u1d08"+ + "\u1d09\7J\2\2\u1d09\u1d0a\7W\2\2\u1d0a\u1d0b\7V\2\2\u1d0b\u1d0c\7F\2\2"+ + "\u1d0c\u1d0d\7Q\2\2\u1d0d\u1d0e\7Y\2\2\u1d0e\u1d0f\7P\2\2\u1d0f\u04c6"+ + "\3\2\2\2\u1d10\u1d11\7U\2\2\u1d11\u1d12\7W\2\2\u1d12\u1d13\7R\2\2\u1d13"+ + "\u1d14\7G\2\2\u1d14\u1d15\7T\2\2\u1d15\u04c8\3\2\2\2\u1d16\u1d17\7R\2"+ + "\2\u1d17\u1d18\7T\2\2\u1d18\u1d19\7K\2\2\u1d19\u1d1a\7X\2\2\u1d1a\u1d1b"+ + "\7K\2\2\u1d1b\u1d1c\7N\2\2\u1d1c\u1d1d\7G\2\2\u1d1d\u1d1e\7I\2\2\u1d1e"+ + "\u1d1f\7G\2\2\u1d1f\u1d20\7U\2\2\u1d20\u04ca\3\2\2\2\u1d21\u1d22\7C\2"+ + "\2\u1d22\u1d23\7R\2\2\u1d23\u1d24\7R\2\2\u1d24\u1d25\7N\2\2\u1d25\u1d26"+ + "\7K\2\2\u1d26\u1d27\7E\2\2\u1d27\u1d28\7C\2\2\u1d28\u1d29\7V\2\2\u1d29"+ + "\u1d2a\7K\2\2\u1d2a\u1d2b\7Q\2\2\u1d2b\u1d2c\7P\2\2\u1d2c\u1d2d\7a\2\2"+ + "\u1d2d\u1d2e\7R\2\2\u1d2e\u1d2f\7C\2\2\u1d2f\u1d30\7U\2\2\u1d30\u1d31"+ + "\7U\2\2\u1d31\u1d32\7Y\2\2\u1d32\u1d33\7Q\2\2\u1d33\u1d34\7T\2\2\u1d34"+ + "\u1d35\7F\2\2\u1d35\u1d36\7a\2\2\u1d36\u1d37\7C\2\2\u1d37\u1d38\7F\2\2"+ + "\u1d38\u1d39\7O\2\2\u1d39\u1d3a\7K\2\2\u1d3a\u1d3b\7P\2\2\u1d3b\u04cc"+ + "\3\2\2\2\u1d3c\u1d3d\7C\2\2\u1d3d\u1d3e\7W\2\2\u1d3e\u1d3f\7F\2\2\u1d3f"+ + "\u1d40\7K\2\2\u1d40\u1d41\7V\2\2\u1d41\u1d42\7a\2\2\u1d42\u1d43\7C\2\2"+ + "\u1d43\u1d44\7F\2\2\u1d44\u1d45\7O\2\2\u1d45\u1d46\7K\2\2\u1d46\u1d47"+ + "\7P\2\2\u1d47\u04ce\3\2\2\2\u1d48\u1d49\7D\2\2\u1d49\u1d4a\7C\2\2\u1d4a"+ + "\u1d4b\7E\2\2\u1d4b\u1d4c\7M\2\2\u1d4c\u1d4d\7W\2\2\u1d4d\u1d4e\7R\2\2"+ + "\u1d4e\u1d4f\7a\2\2\u1d4f\u1d50\7C\2\2\u1d50\u1d51\7F\2\2\u1d51\u1d52"+ + "\7O\2\2\u1d52\u1d53\7K\2\2\u1d53\u1d54\7P\2\2\u1d54\u04d0\3\2\2\2\u1d55"+ + "\u1d56\7D\2\2\u1d56\u1d57\7K\2\2\u1d57\u1d58\7P\2\2\u1d58\u1d59\7N\2\2"+ + "\u1d59\u1d5a\7Q\2\2\u1d5a\u1d5b\7I\2\2\u1d5b\u1d5c\7a\2\2\u1d5c\u1d5d"+ + "\7C\2\2\u1d5d\u1d5e\7F\2\2\u1d5e\u1d5f\7O\2\2\u1d5f\u1d60\7K\2\2\u1d60"+ + "\u1d61\7P\2\2\u1d61\u04d2\3\2\2\2\u1d62\u1d63\7D\2\2\u1d63\u1d64\7K\2"+ + "\2\u1d64\u1d65\7P\2\2\u1d65\u1d66\7N\2\2\u1d66\u1d67\7Q\2\2\u1d67\u1d68"+ + "\7I\2\2\u1d68\u1d69\7a\2\2\u1d69\u1d6a\7G\2\2\u1d6a\u1d6b\7P\2\2\u1d6b"+ + "\u1d6c\7E\2\2\u1d6c\u1d6d\7T\2\2\u1d6d\u1d6e\7[\2\2\u1d6e\u1d6f\7R\2\2"+ + "\u1d6f\u1d70\7V\2\2\u1d70\u1d71\7K\2\2\u1d71\u1d72\7Q\2\2\u1d72\u1d73"+ + "\7P\2\2\u1d73\u1d74\7a\2\2\u1d74\u1d75\7C\2\2\u1d75\u1d76\7F\2\2\u1d76"+ + "\u1d77\7O\2\2\u1d77\u1d78\7K\2\2\u1d78\u1d79\7P\2\2\u1d79\u04d4\3\2\2"+ + "\2\u1d7a\u1d7b\7E\2\2\u1d7b\u1d7c\7N\2\2\u1d7c\u1d7d\7Q\2\2\u1d7d\u1d7e"+ + "\7P\2\2\u1d7e\u1d7f\7G\2\2\u1d7f\u1d80\7a\2\2\u1d80\u1d81\7C\2\2\u1d81"+ + "\u1d82\7F\2\2\u1d82\u1d83\7O\2\2\u1d83\u1d84\7K\2\2\u1d84\u1d85\7P\2\2"+ + "\u1d85\u04d6\3\2\2\2\u1d86\u1d87\7E\2\2\u1d87\u1d88\7Q\2\2\u1d88\u1d89"+ + "\7P\2\2\u1d89\u1d8a\7P\2\2\u1d8a\u1d8b\7G\2\2\u1d8b\u1d8c\7E\2\2\u1d8c"+ + "\u1d8d\7V\2\2\u1d8d\u1d8e\7K\2\2\u1d8e\u1d8f\7Q\2\2\u1d8f\u1d90\7P\2\2"+ + "\u1d90\u1d91\7a\2\2\u1d91\u1d92\7C\2\2\u1d92\u1d93\7F\2\2\u1d93\u1d94"+ + "\7O\2\2\u1d94\u1d95\7K\2\2\u1d95\u1d96\7P\2\2\u1d96\u04d8\3\2\2\2\u1d97"+ + "\u1d98\7G\2\2\u1d98\u1d99\7P\2\2\u1d99\u1d9a\7E\2\2\u1d9a\u1d9b\7T\2\2"+ + "\u1d9b\u1d9c\7[\2\2\u1d9c\u1d9d\7R\2\2\u1d9d\u1d9e\7V\2\2\u1d9e\u1d9f"+ + "\7K\2\2\u1d9f\u1da0\7Q\2\2\u1da0\u1da1\7P\2\2\u1da1\u1da2\7a\2\2\u1da2"+ + "\u1da3\7M\2\2\u1da3\u1da4\7G\2\2\u1da4\u1da5\7[\2\2\u1da5\u1da6\7a\2\2"+ + "\u1da6\u1da7\7C\2\2\u1da7\u1da8\7F\2\2\u1da8\u1da9\7O\2\2\u1da9\u1daa"+ + "\7K\2\2\u1daa\u1dab\7P\2\2\u1dab\u04da\3\2\2\2\u1dac\u1dad\7H\2\2\u1dad"+ + "\u1dae\7K\2\2\u1dae\u1daf\7T\2\2\u1daf\u1db0\7G\2\2\u1db0\u1db1\7Y\2\2"+ + "\u1db1\u1db2\7C\2\2\u1db2\u1db3\7N\2\2\u1db3\u1db4\7N\2\2\u1db4\u1db5"+ + "\7a\2\2\u1db5\u1db6\7C\2\2\u1db6\u1db7\7F\2\2\u1db7\u1db8\7O\2\2\u1db8"+ + "\u1db9\7K\2\2\u1db9\u1dba\7P\2\2\u1dba\u04dc\3\2\2\2\u1dbb\u1dbc\7H\2"+ + "\2\u1dbc\u1dbd\7K\2\2\u1dbd\u1dbe\7T\2\2\u1dbe\u1dbf\7G\2\2\u1dbf\u1dc0"+ + "\7Y\2\2\u1dc0\u1dc1\7C\2\2\u1dc1\u1dc2\7N\2\2\u1dc2\u1dc3\7N\2\2\u1dc3"+ + "\u1dc4\7a\2\2\u1dc4\u1dc5\7W\2\2\u1dc5\u1dc6\7U\2\2\u1dc6\u1dc7\7G\2\2"+ + "\u1dc7\u1dc8\7T\2\2\u1dc8\u04de\3\2\2\2\u1dc9\u1dca\7I\2\2\u1dca\u1dcb"+ + "\7T\2\2\u1dcb\u1dcc\7Q\2\2\u1dcc\u1dcd\7W\2\2\u1dcd\u1dce\7R\2\2\u1dce"+ + "\u1dcf\7a\2\2\u1dcf\u1dd0\7T\2\2\u1dd0\u1dd1\7G\2\2\u1dd1\u1dd2\7R\2\2"+ + "\u1dd2\u1dd3\7N\2\2\u1dd3\u1dd4\7K\2\2\u1dd4\u1dd5\7E\2\2\u1dd5\u1dd6"+ + "\7C\2\2\u1dd6\u1dd7\7V\2\2\u1dd7\u1dd8\7K\2\2\u1dd8\u1dd9\7Q\2\2\u1dd9"+ + "\u1dda\7P\2\2\u1dda\u1ddb\7a\2\2\u1ddb\u1ddc\7C\2\2\u1ddc\u1ddd\7F\2\2"+ + "\u1ddd\u1dde\7O\2\2\u1dde\u1ddf\7K\2\2\u1ddf\u1de0\7P\2\2\u1de0\u04e0"+ + "\3\2\2\2\u1de1\u1de2\7K\2\2\u1de2\u1de3\7P\2\2\u1de3\u1de4\7P\2\2\u1de4"+ + "\u1de5\7Q\2\2\u1de5\u1de6\7F\2\2\u1de6\u1de7\7D\2\2\u1de7\u1de8\7a\2\2"+ + "\u1de8\u1de9\7T\2\2\u1de9\u1dea\7G\2\2\u1dea\u1deb\7F\2\2\u1deb\u1dec"+ + "\7Q\2\2\u1dec\u1ded\7a\2\2\u1ded\u1dee\7N\2\2\u1dee\u1def\7Q\2\2\u1def"+ + "\u1df0\7I\2\2\u1df0\u1df1\7a\2\2\u1df1\u1df2\7C\2\2\u1df2\u1df3\7T\2\2"+ + "\u1df3\u1df4\7E\2\2\u1df4\u1df5\7J\2\2\u1df5\u1df6\7K\2\2\u1df6\u1df7"+ + "\7X\2\2\u1df7\u1df8\7G\2\2\u1df8\u04e2\3\2\2\2\u1df9\u1dfa\7P\2\2\u1dfa"+ + "\u1dfb\7F\2\2\u1dfb\u1dfc\7D\2\2\u1dfc\u1dfd\7a\2\2\u1dfd\u1dfe\7U\2\2"+ + "\u1dfe\u1dff\7V\2\2\u1dff\u1e00\7Q\2\2\u1e00\u1e01\7T\2\2\u1e01\u1e02"+ + "\7G\2\2\u1e02\u1e03\7F\2\2\u1e03\u1e04\7a\2\2\u1e04\u1e05\7W\2\2\u1e05"+ + "\u1e06\7U\2\2\u1e06\u1e07\7G\2\2\u1e07\u1e08\7T\2\2\u1e08\u04e4\3\2\2"+ + "\2\u1e09\u1e0a\7R\2\2\u1e0a\u1e0b\7G\2\2\u1e0b\u1e0c\7T\2\2\u1e0c\u1e0d"+ + "\7U\2\2\u1e0d\u1e0e\7K\2\2\u1e0e\u1e0f\7U\2\2\u1e0f\u1e10\7V\2\2\u1e10"+ + "\u1e11\7a\2\2\u1e11\u1e12\7T\2\2\u1e12\u1e13\7Q\2\2\u1e13\u1e14\7a\2\2"+ + "\u1e14\u1e15\7X\2\2\u1e15\u1e16\7C\2\2\u1e16\u1e17\7T\2\2\u1e17\u1e18"+ + "\7K\2\2\u1e18\u1e19\7C\2\2\u1e19\u1e1a\7D\2\2\u1e1a\u1e1b\7N\2\2\u1e1b"+ + "\u1e1c\7G\2\2\u1e1c\u1e1d\7U\2\2\u1e1d\u1e1e\7a\2\2\u1e1e\u1e1f\7C\2\2"+ + "\u1e1f\u1e20\7F\2\2\u1e20\u1e21\7O\2\2\u1e21\u1e22\7K\2\2\u1e22\u1e23"+ + "\7P\2\2\u1e23\u04e6\3\2\2\2\u1e24\u1e25\7T\2\2\u1e25\u1e26\7G\2\2\u1e26"+ + "\u1e27\7R\2\2\u1e27\u1e28\7N\2\2\u1e28\u1e29\7K\2\2\u1e29\u1e2a\7E\2\2"+ + "\u1e2a\u1e2b\7C\2\2\u1e2b\u1e2c\7V\2\2\u1e2c\u1e2d\7K\2\2\u1e2d\u1e2e"+ + "\7Q\2\2\u1e2e\u1e2f\7P\2\2\u1e2f\u1e30\7a\2\2\u1e30\u1e31\7C\2\2\u1e31"+ + "\u1e32\7R\2\2\u1e32\u1e33\7R\2\2\u1e33\u1e34\7N\2\2\u1e34\u1e35\7K\2\2"+ + "\u1e35\u1e36\7G\2\2\u1e36\u1e37\7T\2\2\u1e37\u04e8\3\2\2\2\u1e38\u1e39"+ + "\7T\2\2\u1e39\u1e3a\7G\2\2\u1e3a\u1e3b\7R\2\2\u1e3b\u1e3c\7N\2\2\u1e3c"+ + "\u1e3d\7K\2\2\u1e3d\u1e3e\7E\2\2\u1e3e\u1e3f\7C\2\2\u1e3f\u1e40\7V\2\2"+ + "\u1e40\u1e41\7K\2\2\u1e41\u1e42\7Q\2\2\u1e42\u1e43\7P\2\2\u1e43\u1e44"+ + "\7a\2\2\u1e44\u1e45\7U\2\2\u1e45\u1e46\7N\2\2\u1e46\u1e47\7C\2\2\u1e47"+ + "\u1e48\7X\2\2\u1e48\u1e49\7G\2\2\u1e49\u1e4a\7a\2\2\u1e4a\u1e4b\7C\2\2"+ + "\u1e4b\u1e4c\7F\2\2\u1e4c\u1e4d\7O\2\2\u1e4d\u1e4e\7K\2\2\u1e4e\u1e4f"+ + "\7P\2\2\u1e4f\u04ea\3\2\2\2\u1e50\u1e51\7T\2\2\u1e51\u1e52\7G\2\2\u1e52"+ + "\u1e53\7U\2\2\u1e53\u1e54\7Q\2\2\u1e54\u1e55\7W\2\2\u1e55\u1e56\7T\2\2"+ + "\u1e56\u1e57\7E\2\2\u1e57\u1e58\7G\2\2\u1e58\u1e59\7a\2\2\u1e59\u1e5a"+ + "\7I\2\2\u1e5a\u1e5b\7T\2\2\u1e5b\u1e5c\7Q\2\2\u1e5c\u1e5d\7W\2\2\u1e5d"+ + "\u1e5e\7R\2\2\u1e5e\u1e5f\7a\2\2\u1e5f\u1e60\7C\2\2\u1e60\u1e61\7F\2\2"+ + "\u1e61\u1e62\7O\2\2\u1e62\u1e63\7K\2\2\u1e63\u1e64\7P\2\2\u1e64\u04ec"+ + "\3\2\2\2\u1e65\u1e66\7T\2\2\u1e66\u1e67\7G\2\2\u1e67\u1e68\7U\2\2\u1e68"+ + "\u1e69\7Q\2\2\u1e69\u1e6a\7W\2\2\u1e6a\u1e6b\7T\2\2\u1e6b\u1e6c\7E\2\2"+ + "\u1e6c\u1e6d\7G\2\2\u1e6d\u1e6e\7a\2\2\u1e6e\u1e6f\7I\2\2\u1e6f\u1e70"+ + "\7T\2\2\u1e70\u1e71\7Q\2\2\u1e71\u1e72\7W\2\2\u1e72\u1e73\7R\2\2\u1e73"+ + "\u1e74\7a\2\2\u1e74\u1e75\7W\2\2\u1e75\u1e76\7U\2\2\u1e76\u1e77\7G\2\2"+ + "\u1e77\u1e78\7T\2\2\u1e78\u04ee\3\2\2\2\u1e79\u1e7a\7T\2\2\u1e7a\u1e7b"+ + "\7Q\2\2\u1e7b\u1e7c\7N\2\2\u1e7c\u1e7d\7G\2\2\u1e7d\u1e7e\7a\2\2\u1e7e"+ + "\u1e7f\7C\2\2\u1e7f\u1e80\7F\2\2\u1e80\u1e81\7O\2\2\u1e81\u1e82\7K\2\2"+ + "\u1e82\u1e83\7P\2\2\u1e83\u04f0\3\2\2\2\u1e84\u1e86\5\u0815\u040b\2\u1e85"+ + "\u1e84\3\2\2\2\u1e85\u1e86\3\2\2\2\u1e86\u1e87\3\2\2\2\u1e87\u1e88\7U"+ + "\2\2\u1e88\u1e89\7G\2\2\u1e89\u1e8a\7U\2\2\u1e8a\u1e8b\7U\2\2\u1e8b\u1e8c"+ + "\7K\2\2\u1e8c\u1e8d\7Q\2\2\u1e8d\u1e8e\7P\2\2\u1e8e\u1e8f\7a\2\2\u1e8f"+ + "\u1e90\7X\2\2\u1e90\u1e91\7C\2\2\u1e91\u1e92\7T\2\2\u1e92\u1e93\7K\2\2"+ + "\u1e93\u1e94\7C\2\2\u1e94\u1e95\7D\2\2\u1e95\u1e96\7N\2\2\u1e96\u1e97"+ + "\7G\2\2\u1e97\u1e98\7U\2\2\u1e98\u1e99\7a\2\2\u1e99\u1e9a\7C\2\2\u1e9a"+ + "\u1e9b\7F\2\2\u1e9b\u1e9c\7O\2\2\u1e9c\u1e9d\7K\2\2\u1e9d\u1e9e\7P\2\2"+ + "\u1e9e\u1ea0\3\2\2\2\u1e9f\u1ea1\5\u0815\u040b\2\u1ea0\u1e9f\3\2\2\2\u1ea0"+ + "\u1ea1\3\2\2\2\u1ea1\u04f2\3\2\2\2\u1ea2\u1ea3\7U\2\2\u1ea3\u1ea4\7G\2"+ + "\2\u1ea4\u1ea5\7V\2\2\u1ea5\u1ea6\7a\2\2\u1ea6\u1ea7\7W\2\2\u1ea7\u1ea8"+ + "\7U\2\2\u1ea8\u1ea9\7G\2\2\u1ea9\u1eaa\7T\2\2\u1eaa\u1eab\7a\2\2\u1eab"+ + "\u1eac\7K\2\2\u1eac\u1ead\7F\2\2\u1ead\u04f4\3\2\2\2\u1eae\u1eaf\7U\2"+ + "\2\u1eaf\u1eb0\7J\2\2\u1eb0\u1eb1\7Q\2\2\u1eb1\u1eb2\7Y\2\2\u1eb2\u1eb3"+ + "\7a\2\2\u1eb3\u1eb4\7T\2\2\u1eb4\u1eb5\7Q\2\2\u1eb5\u1eb6\7W\2\2\u1eb6"+ + "\u1eb7\7V\2\2\u1eb7\u1eb8\7K\2\2\u1eb8\u1eb9\7P\2\2\u1eb9\u1eba\7G\2\2"+ + "\u1eba\u04f6\3\2\2\2\u1ebb\u1ebc\7U\2\2\u1ebc\u1ebd\7[\2\2\u1ebd\u1ebe"+ + "\7U\2\2\u1ebe\u1ebf\7V\2\2\u1ebf\u1ec0\7G\2\2\u1ec0\u1ec1\7O\2\2\u1ec1"+ + "\u1ec2\7a\2\2\u1ec2\u1ec3\7X\2\2\u1ec3\u1ec4\7C\2\2\u1ec4\u1ec5\7T\2\2"+ + "\u1ec5\u1ec6\7K\2\2\u1ec6\u1ec7\7C\2\2\u1ec7\u1ec8\7D\2\2\u1ec8\u1ec9"+ + "\7N\2\2\u1ec9\u1eca\7G\2\2\u1eca\u1ecb\7U\2\2\u1ecb\u1ecc\7a\2\2\u1ecc"+ + "\u1ecd\7C\2\2\u1ecd\u1ece\7F\2\2\u1ece\u1ecf\7O\2\2\u1ecf\u1ed0\7K\2\2"+ + "\u1ed0\u1ed1\7P\2\2\u1ed1\u04f8\3\2\2\2\u1ed2\u1ed3\7V\2\2\u1ed3\u1ed4"+ + "\7C\2\2\u1ed4\u1ed5\7D\2\2\u1ed5\u1ed6\7N\2\2\u1ed6\u1ed7\7G\2\2\u1ed7"+ + "\u1ed8\7a\2\2\u1ed8\u1ed9\7G\2\2\u1ed9\u1eda\7P\2\2\u1eda\u1edb\7E\2\2"+ + "\u1edb\u1edc\7T\2\2\u1edc\u1edd\7[\2\2\u1edd\u1ede\7R\2\2\u1ede\u1edf"+ + "\7V\2\2\u1edf\u1ee0\7K\2\2\u1ee0\u1ee1\7Q\2\2\u1ee1\u1ee2\7P\2\2\u1ee2"+ + "\u1ee3\7a\2\2\u1ee3\u1ee4\7C\2\2\u1ee4\u1ee5\7F\2\2\u1ee5\u1ee6\7O\2\2"+ + "\u1ee6\u1ee7\7K\2\2\u1ee7\u1ee8\7P\2\2\u1ee8\u04fa\3\2\2\2\u1ee9\u1eea"+ + "\7X\2\2\u1eea\u1eeb\7G\2\2\u1eeb\u1eec\7T\2\2\u1eec\u1eed\7U\2\2\u1eed"+ + "\u1eee\7K\2\2\u1eee\u1eef\7Q\2\2\u1eef\u1ef0\7P\2\2\u1ef0\u1ef1\7a\2\2"+ + "\u1ef1\u1ef2\7V\2\2\u1ef2\u1ef3\7Q\2\2\u1ef3\u1ef4\7M\2\2\u1ef4\u1ef5"+ + "\7G\2\2\u1ef5\u1ef6\7P\2\2\u1ef6\u1ef7\7a\2\2\u1ef7\u1ef8\7C\2\2\u1ef8"+ + "\u1ef9\7F\2\2\u1ef9\u1efa\7O\2\2\u1efa\u1efb\7K\2\2\u1efb\u1efc\7P\2\2"+ + "\u1efc\u04fc\3\2\2\2\u1efd\u1efe\7Z\2\2\u1efe\u1eff\7C\2\2\u1eff\u1f00"+ + "\7a\2\2\u1f00\u1f01\7T\2\2\u1f01\u1f02\7G\2\2\u1f02\u1f03\7E\2\2\u1f03"+ + "\u1f04\7Q\2\2\u1f04\u1f05\7X\2\2\u1f05\u1f06\7G\2\2\u1f06\u1f07\7T\2\2"+ + "\u1f07\u1f08\7a\2\2\u1f08\u1f09\7C\2\2\u1f09\u1f0a\7F\2\2\u1f0a\u1f0b"+ + "\7O\2\2\u1f0b\u1f0c\7K\2\2\u1f0c\u1f0d\7P\2\2\u1f0d\u04fe\3\2\2\2\u1f0e"+ + "\u1f0f\7C\2\2\u1f0f\u1f10\7T\2\2\u1f10\u1f11\7O\2\2\u1f11\u1f12\7U\2\2"+ + "\u1f12\u1f13\7E\2\2\u1f13\u1f14\7K\2\2\u1f14\u1f15\7K\2\2\u1f15\u1f16"+ + "\7:\2\2\u1f16\u0500\3\2\2\2\u1f17\u1f18\7C\2\2\u1f18\u1f19\7U\2\2\u1f19"+ + "\u1f1a\7E\2\2\u1f1a\u1f1b\7K\2\2\u1f1b\u1f1c\7K\2\2\u1f1c\u0502\3\2\2"+ + "\2\u1f1d\u1f1e\7D\2\2\u1f1e\u1f1f\7K\2\2\u1f1f\u1f20\7I\2\2\u1f20\u1f21"+ + "\7\67\2\2\u1f21\u0504\3\2\2\2\u1f22\u1f23\7E\2\2\u1f23\u1f24\7R\2\2\u1f24"+ + "\u1f25\7\63\2\2\u1f25\u1f26\7\64\2\2\u1f26\u1f27\7\67\2\2\u1f27\u1f28"+ + "\7\62\2\2\u1f28\u0506\3\2\2\2\u1f29\u1f2a\7E\2\2\u1f2a\u1f2b\7R\2\2\u1f2b"+ + "\u1f2c\7\63\2\2\u1f2c\u1f2d\7\64\2\2\u1f2d\u1f2e\7\67\2\2\u1f2e\u1f2f"+ + "\7\63\2\2\u1f2f\u0508\3\2\2\2\u1f30\u1f31\7E\2\2\u1f31\u1f32\7R\2\2\u1f32"+ + "\u1f33\7\63\2\2\u1f33\u1f34\7\64\2\2\u1f34\u1f35\7\67\2\2\u1f35\u1f36"+ + "\78\2\2\u1f36\u050a\3\2\2\2\u1f37\u1f38\7E\2\2\u1f38\u1f39\7R\2\2\u1f39"+ + "\u1f3a\7\63\2\2\u1f3a\u1f3b\7\64\2\2\u1f3b\u1f3c\7\67\2\2\u1f3c\u1f3d"+ + "\79\2\2\u1f3d\u050c\3\2\2\2\u1f3e\u1f3f\7E\2\2\u1f3f\u1f40\7R\2\2\u1f40"+ + "\u1f41\7:\2\2\u1f41\u1f42\7\67\2\2\u1f42\u1f43\7\62\2\2\u1f43\u050e\3"+ + "\2\2\2\u1f44\u1f45\7E\2\2\u1f45\u1f46\7R\2\2\u1f46\u1f47\7:\2\2\u1f47"+ + "\u1f48\7\67\2\2\u1f48\u1f49\7\64\2\2\u1f49\u0510\3\2\2\2\u1f4a\u1f4b\7"+ + "E\2\2\u1f4b\u1f4c\7R\2\2\u1f4c\u1f4d\7:\2\2\u1f4d\u1f4e\78\2\2\u1f4e\u1f4f"+ + "\78\2\2\u1f4f\u0512\3\2\2\2\u1f50\u1f51\7E\2\2\u1f51\u1f52\7R\2\2\u1f52"+ + "\u1f53\7;\2\2\u1f53\u1f54\7\65\2\2\u1f54\u1f55\7\64\2\2\u1f55\u0514\3"+ + "\2\2\2\u1f56\u1f57\7F\2\2\u1f57\u1f58\7G\2\2\u1f58\u1f59\7E\2\2\u1f59"+ + "\u1f5a\7:\2\2\u1f5a\u0516\3\2\2\2\u1f5b\u1f5c\7G\2\2\u1f5c\u1f5d\7W\2"+ + "\2\u1f5d\u1f5e\7E\2\2\u1f5e\u1f5f\7L\2\2\u1f5f\u1f60\7R\2\2\u1f60\u1f61"+ + "\7O\2\2\u1f61\u1f62\7U\2\2\u1f62\u0518\3\2\2\2\u1f63\u1f64\7G\2\2\u1f64"+ + "\u1f65\7W\2\2\u1f65\u1f66\7E\2\2\u1f66\u1f67\7M\2\2\u1f67\u1f68\7T\2\2"+ + "\u1f68\u051a\3\2\2\2\u1f69\u1f6a\7I\2\2\u1f6a\u1f6b\7D\2\2\u1f6b\u1f6c"+ + "\7\64\2\2\u1f6c\u1f6d\7\65\2\2\u1f6d\u1f6e\7\63\2\2\u1f6e\u1f6f\7\64\2"+ + "\2\u1f6f\u051c\3\2\2\2\u1f70\u1f71\7I\2\2\u1f71\u1f72\7D\2\2\u1f72\u1f73"+ + "\7M\2\2\u1f73\u051e\3\2\2\2\u1f74\u1f75\7I\2\2\u1f75\u1f76\7G\2\2\u1f76"+ + "\u1f77\7Q\2\2\u1f77\u1f78\7U\2\2\u1f78\u1f79\7V\2\2\u1f79\u1f7a\7F\2\2"+ + "\u1f7a\u1f7b\7:\2\2\u1f7b\u0520\3\2\2\2\u1f7c\u1f7d\7I\2\2\u1f7d\u1f7e"+ + "\7T\2\2\u1f7e\u1f7f\7G\2\2\u1f7f\u1f80\7G\2\2\u1f80\u1f81\7M\2\2\u1f81"+ + "\u0522\3\2\2\2\u1f82\u1f83\7J\2\2\u1f83\u1f84\7G\2\2\u1f84\u1f85\7D\2"+ + "\2\u1f85\u1f86\7T\2\2\u1f86\u1f87\7G\2\2\u1f87\u1f88\7Y\2\2\u1f88\u0524"+ + "\3\2\2\2\u1f89\u1f8a\7J\2\2\u1f8a\u1f8b\7R\2\2\u1f8b\u1f8c\7:\2\2\u1f8c"+ + "\u0526\3\2\2\2\u1f8d\u1f8e\7M\2\2\u1f8e\u1f8f\7G\2\2\u1f8f\u1f90\7[\2"+ + "\2\u1f90\u1f91\7D\2\2\u1f91\u1f92\7E\2\2\u1f92\u1f93\7U\2\2\u1f93\u1f94"+ + "\7\64\2\2\u1f94\u0528\3\2\2\2\u1f95\u1f96\7M\2\2\u1f96\u1f97\7Q\2\2\u1f97"+ + "\u1f98\7K\2\2\u1f98\u1f99\7:\2\2\u1f99\u1f9a\7T\2\2\u1f9a\u052a\3\2\2"+ + "\2\u1f9b\u1f9c\7M\2\2\u1f9c\u1f9d\7Q\2\2\u1f9d\u1f9e\7K\2\2\u1f9e\u1f9f"+ + "\7:\2\2\u1f9f\u1fa0\7W\2\2\u1fa0\u052c\3\2\2\2\u1fa1\u1fa2\7N\2\2\u1fa2"+ + "\u1fa3\7C\2\2\u1fa3\u1fa4\7V\2\2\u1fa4\u1fa5\7K\2\2\u1fa5\u1fa6\7P\2\2"+ + "\u1fa6\u1fa7\7\63\2\2\u1fa7\u052e\3\2\2\2\u1fa8\u1fa9\7N\2\2\u1fa9\u1faa"+ + "\7C\2\2\u1faa\u1fab\7V\2\2\u1fab\u1fac\7K\2\2\u1fac\u1fad\7P\2\2\u1fad"+ + "\u1fae\7\64\2\2\u1fae\u0530\3\2\2\2\u1faf\u1fb0\7N\2\2\u1fb0\u1fb1\7C"+ + "\2\2\u1fb1\u1fb2\7V\2\2\u1fb2\u1fb3\7K\2\2\u1fb3\u1fb4\7P\2\2\u1fb4\u1fb5"+ + "\7\67\2\2\u1fb5\u0532\3\2\2\2\u1fb6\u1fb7\7N\2\2\u1fb7\u1fb8\7C\2\2\u1fb8"+ + "\u1fb9\7V\2\2\u1fb9\u1fba\7K\2\2\u1fba\u1fbb\7P\2\2\u1fbb\u1fbc\79\2\2"+ + "\u1fbc\u0534\3\2\2\2\u1fbd\u1fbe\7O\2\2\u1fbe\u1fbf\7C\2\2\u1fbf\u1fc0"+ + "\7E\2\2\u1fc0\u1fc1\7E\2\2\u1fc1\u1fc2\7G\2\2\u1fc2\u0536\3\2\2\2\u1fc3"+ + "\u1fc4\7O\2\2\u1fc4\u1fc5\7C\2\2\u1fc5\u1fc6\7E\2\2\u1fc6\u1fc7\7T\2\2"+ + "\u1fc7\u1fc8\7Q\2\2\u1fc8\u1fc9\7O\2\2\u1fc9\u1fca\7C\2\2\u1fca\u1fcb"+ + "\7P\2\2\u1fcb\u0538\3\2\2\2\u1fcc\u1fcd\7U\2\2\u1fcd\u1fce\7L\2\2\u1fce"+ + "\u1fcf\7K\2\2\u1fcf\u1fd0\7U\2\2\u1fd0\u053a\3\2\2\2\u1fd1\u1fd2\7U\2"+ + "\2\u1fd2\u1fd3\7Y\2\2\u1fd3\u1fd4\7G\2\2\u1fd4\u1fd5\79\2\2\u1fd5\u053c"+ + "\3\2\2\2\u1fd6\u1fd7\7V\2\2\u1fd7\u1fd8\7K\2\2\u1fd8\u1fd9\7U\2\2\u1fd9"+ + "\u1fda\78\2\2\u1fda\u1fdb\7\64\2\2\u1fdb\u1fdc\7\62\2\2\u1fdc\u053e\3"+ + "\2\2\2\u1fdd\u1fde\7W\2\2\u1fde\u1fdf\7E\2\2\u1fdf\u1fe0\7U\2\2\u1fe0"+ + "\u1fe1\7\64\2\2\u1fe1\u0540\3\2\2\2\u1fe2\u1fe3\7W\2\2\u1fe3\u1fe4\7L"+ + "\2\2\u1fe4\u1fe5\7K\2\2\u1fe5\u1fe6\7U\2\2\u1fe6\u0542\3\2\2\2\u1fe7\u1fe8"+ + "\7W\2\2\u1fe8\u1fe9\7V\2\2\u1fe9\u1fea\7H\2\2\u1fea\u1feb\7\63\2\2\u1feb"+ + "\u1fec\78\2\2\u1fec\u0544\3\2\2\2\u1fed\u1fee\7W\2\2\u1fee\u1fef\7V\2"+ + "\2\u1fef\u1ff0\7H\2\2\u1ff0\u1ff1\7\63\2\2\u1ff1\u1ff2\78\2\2\u1ff2\u1ff3"+ + "\7N\2\2\u1ff3\u1ff4\7G\2\2\u1ff4\u0546\3\2\2\2\u1ff5\u1ff6\7W\2\2\u1ff6"+ + "\u1ff7\7V\2\2\u1ff7\u1ff8\7H\2\2\u1ff8\u1ff9\7\65\2\2\u1ff9\u1ffa\7\64"+ + "\2\2\u1ffa\u0548\3\2\2\2\u1ffb\u1ffc\7W\2\2\u1ffc\u1ffd\7V\2\2\u1ffd\u1ffe"+ + "\7H\2\2\u1ffe\u1fff\7:\2\2\u1fff\u054a\3\2\2\2\u2000\u2001\7W\2\2\u2001"+ + "\u2002\7V\2\2\u2002\u2003\7H\2\2\u2003\u2004\7:\2\2\u2004\u2005\7O\2\2"+ + "\u2005\u2006\7D\2\2\u2006\u2007\7\65\2\2\u2007\u054c\3\2\2\2\u2008\u2009"+ + "\7W\2\2\u2009\u200a\7V\2\2\u200a\u200b\7H\2\2\u200b\u200c\7:\2\2\u200c"+ + "\u200d\7O\2\2\u200d\u200e\7D\2\2\u200e\u200f\7\66\2\2\u200f\u054e\3\2"+ + "\2\2\u2010\u2011\7C\2\2\u2011\u2012\7T\2\2\u2012\u2013\7E\2\2\u2013\u2014"+ + "\7J\2\2\u2014\u2015\7K\2\2\u2015\u2016\7X\2\2\u2016\u2017\7G\2\2\u2017"+ + "\u0550\3\2\2\2\u2018\u2019\7D\2\2\u2019\u201a\7N\2\2\u201a\u201b\7C\2"+ + "\2\u201b\u201c\7E\2\2\u201c\u201d\7M\2\2\u201d\u201e\7J\2\2\u201e\u201f"+ + "\7Q\2\2\u201f\u2020\7N\2\2\u2020\u2021\7G\2\2\u2021\u0552\3\2\2\2\u2022"+ + "\u2023\7E\2\2\u2023\u2024\7U\2\2\u2024\u2025\7X\2\2\u2025\u0554\3\2\2"+ + "\2\u2026\u2027\7H\2\2\u2027\u2028\7G\2\2\u2028\u2029\7F\2\2\u2029\u202a"+ + "\7G\2\2\u202a\u202b\7T\2\2\u202b\u202c\7C\2\2\u202c\u202d\7V\2\2\u202d"+ + "\u202e\7G\2\2\u202e\u202f\7F\2\2\u202f\u0556\3\2\2\2\u2030\u2031\7K\2"+ + "\2\u2031\u2032\7P\2\2\u2032\u2033\7P\2\2\u2033\u2034\7Q\2\2\u2034\u2035"+ + "\7F\2\2\u2035\u2036\7D\2\2\u2036\u0558\3\2\2\2\u2037\u2038\7O\2\2\u2038"+ + "\u2039\7G\2\2\u2039\u203a\7O\2\2\u203a\u203b\7Q\2\2\u203b\u203c\7T\2\2"+ + "\u203c\u203d\7[\2\2\u203d\u055a\3\2\2\2\u203e\u203f\7O\2\2\u203f\u2040"+ + "\7T\2\2\u2040\u2041\7I\2\2\u2041\u2042\7a\2\2\u2042\u2043\7O\2\2\u2043"+ + "\u2044\7[\2\2\u2044\u2045\7K\2\2\u2045\u2046\7U\2\2\u2046\u2047\7C\2\2"+ + "\u2047\u2048\7O\2\2\u2048\u055c\3\2\2\2\u2049\u204a\7O\2\2\u204a\u204b"+ + "\7[\2\2\u204b\u204c\7K\2\2\u204c\u204d\7U\2\2\u204d\u204e\7C\2\2\u204e"+ + "\u204f\7O\2\2\u204f\u055e\3\2\2\2\u2050\u2051\7P\2\2\u2051\u2052\7F\2"+ + "\2\u2052\u2053\7D\2\2\u2053\u0560\3\2\2\2\u2054\u2055\7P\2\2\u2055\u2056"+ + "\7F\2\2\u2056\u2057\7D\2\2\u2057\u2058\7E\2\2\u2058\u2059\7N\2\2\u2059"+ + "\u205a\7W\2\2\u205a\u205b\7U\2\2\u205b\u205c\7V\2\2\u205c\u205d\7G\2\2"+ + "\u205d\u205e\7T\2\2\u205e\u0562\3\2\2\2\u205f\u2060\7R\2\2\u2060\u2061"+ + "\7G\2\2\u2061\u2062\7T\2\2\u2062\u2063\7H\2\2\u2063\u2064\7Q\2\2\u2064"+ + "\u2065\7T\2\2\u2065\u2066\7O\2\2\u2066\u2067\7C\2\2\u2067\u2068\7P\2\2"+ + "\u2068\u2069\7E\2\2\u2069\u206a\7G\2\2\u206a\u206b\7a\2\2\u206b\u206c"+ + "\7U\2\2\u206c\u206d\7E\2\2\u206d\u206e\7J\2\2\u206e\u206f\7G\2\2\u206f"+ + "\u2070\7O\2\2\u2070\u2071\7C\2\2\u2071\u0564\3\2\2\2\u2072\u2073\7V\2"+ + "\2\u2073\u2074\7Q\2\2\u2074\u2075\7M\2\2\u2075\u2076\7W\2\2\u2076\u2077"+ + "\7F\2\2\u2077\u2078\7D\2\2\u2078\u0566\3\2\2\2\u2079\u207a\7T\2\2\u207a"+ + "\u207b\7G\2\2\u207b\u207c\7R\2\2\u207c\u207d\7G\2\2\u207d\u207e\7C\2\2"+ + "\u207e\u207f\7V\2\2\u207f\u2080\7C\2\2\u2080\u2081\7D\2\2\u2081\u2082"+ + "\7N\2\2\u2082\u2083\7G\2\2\u2083\u0568\3\2\2\2\u2084\u2085\7E\2\2\u2085"+ + "\u2086\7Q\2\2\u2086\u2087\7O\2\2\u2087\u2088\7O\2\2\u2088\u2089\7K\2\2"+ + "\u2089\u208a\7V\2\2\u208a\u208b\7V\2\2\u208b\u208c\7G\2\2\u208c\u208d"+ + "\7F\2\2\u208d\u056a\3\2\2\2\u208e\u208f\7W\2\2\u208f\u2090\7P\2\2\u2090"+ + "\u2091\7E\2\2\u2091\u2092\7Q\2\2\u2092\u2093\7O\2\2\u2093\u2094\7O\2\2"+ + "\u2094\u2095\7K\2\2\u2095\u2096\7V\2\2\u2096\u2097\7V\2\2\u2097\u2098"+ + "\7G\2\2\u2098\u2099\7F\2\2\u2099\u056c\3\2\2\2\u209a\u209b\7U\2\2\u209b"+ + "\u209c\7G\2\2\u209c\u209d\7T\2\2\u209d\u209e\7K\2\2\u209e\u209f\7C\2\2"+ + "\u209f\u20a0\7N\2\2\u20a0\u20a1\7K\2\2\u20a1\u20a2\7\\\2\2\u20a2\u20a3"+ + "\7C\2\2\u20a3\u20a4\7D\2\2\u20a4\u20a5\7N\2\2\u20a5\u20a6\7G\2\2\u20a6"+ + "\u056e\3\2\2\2\u20a7\u20a8\7I\2\2\u20a8\u20a9\7G\2\2\u20a9\u20aa\7Q\2"+ + "\2\u20aa\u20ab\7O\2\2\u20ab\u20ac\7G\2\2\u20ac\u20ad\7V\2\2\u20ad\u20ae"+ + "\7T\2\2\u20ae\u20af\7[\2\2\u20af\u20b0\7E\2\2\u20b0\u20b1\7Q\2\2\u20b1"+ + "\u20b2\7N\2\2\u20b2\u20b3\7N\2\2\u20b3\u20b4\7G\2\2\u20b4\u20b5\7E\2\2"+ + "\u20b5\u20b6\7V\2\2\u20b6\u20b7\7K\2\2\u20b7\u20b8\7Q\2\2\u20b8\u20b9"+ + "\7P\2\2\u20b9\u0570\3\2\2\2\u20ba\u20bb\7I\2\2\u20bb\u20bc\7G\2\2\u20bc"+ + "\u20bd\7Q\2\2\u20bd\u20be\7O\2\2\u20be\u20bf\7E\2\2\u20bf\u20c0\7Q\2\2"+ + "\u20c0\u20c1\7N\2\2\u20c1\u20c2\7N\2\2\u20c2\u20c3\7G\2\2\u20c3\u20c4"+ + "\7E\2\2\u20c4\u20c5\7V\2\2\u20c5\u20c6\7K\2\2\u20c6\u20c7\7Q\2\2\u20c7"+ + "\u20c8\7P\2\2\u20c8\u0572\3\2\2\2\u20c9\u20ca\7I\2\2\u20ca\u20cb\7G\2"+ + "\2\u20cb\u20cc\7Q\2\2\u20cc\u20cd\7O\2\2\u20cd\u20ce\7G\2\2\u20ce\u20cf"+ + "\7V\2\2\u20cf\u20d0\7T\2\2\u20d0\u20d1\7[\2\2\u20d1\u0574\3\2\2\2\u20d2"+ + "\u20d3\7N\2\2\u20d3\u20d4\7K\2\2\u20d4\u20d5\7P\2\2\u20d5\u20d6\7G\2\2"+ + "\u20d6\u20d7\7U\2\2\u20d7\u20d8\7V\2\2\u20d8\u20d9\7T\2\2\u20d9\u20da"+ + "\7K\2\2\u20da\u20db\7P\2\2\u20db\u20dc\7I\2\2\u20dc\u0576\3\2\2\2\u20dd"+ + "\u20de\7O\2\2\u20de\u20df\7W\2\2\u20df\u20e0\7N\2\2\u20e0\u20e1\7V\2\2"+ + "\u20e1\u20e2\7K\2\2\u20e2\u20e3\7N\2\2\u20e3\u20e4\7K\2\2\u20e4\u20e5"+ + "\7P\2\2\u20e5\u20e6\7G\2\2\u20e6\u20e7\7U\2\2\u20e7\u20e8\7V\2\2\u20e8"+ + "\u20e9\7T\2\2\u20e9\u20ea\7K\2\2\u20ea\u20eb\7P\2\2\u20eb\u20ec\7I\2\2"+ + "\u20ec\u0578\3\2\2\2\u20ed\u20ee\7O\2\2\u20ee\u20ef\7W\2\2\u20ef\u20f0"+ + "\7N\2\2\u20f0\u20f1\7V\2\2\u20f1\u20f2\7K\2\2\u20f2\u20f3\7R\2\2\u20f3"+ + "\u20f4\7Q\2\2\u20f4\u20f5\7K\2\2\u20f5\u20f6\7P\2\2\u20f6\u20f7\7V\2\2"+ + "\u20f7\u057a\3\2\2\2\u20f8\u20f9\7O\2\2\u20f9\u20fa\7W\2\2\u20fa\u20fb"+ + "\7N\2\2\u20fb\u20fc\7V\2\2\u20fc\u20fd\7K\2\2\u20fd\u20fe\7R\2\2\u20fe"+ + "\u20ff\7Q\2\2\u20ff\u2100\7N\2\2\u2100\u2101\7[\2\2\u2101\u2102\7I\2\2"+ + "\u2102\u2103\7Q\2\2\u2103\u2104\7P\2\2\u2104\u057c\3\2\2\2\u2105\u2106"+ + "\7R\2\2\u2106\u2107\7Q\2\2\u2107\u2108\7K\2\2\u2108\u2109\7P\2\2\u2109"+ + "\u210a\7V\2\2\u210a\u057e\3\2\2\2\u210b\u210c\7R\2\2\u210c\u210d\7Q\2"+ + "\2\u210d\u210e\7N\2\2\u210e\u210f\7[\2\2\u210f\u2110\7I\2\2\u2110\u2111"+ + "\7Q\2\2\u2111\u2112\7P\2\2\u2112\u0580\3\2\2\2\u2113\u2114\7C\2\2\u2114"+ + "\u2115\7D\2\2\u2115\u2116\7U\2\2\u2116\u0582\3\2\2\2\u2117\u2118\7C\2"+ + "\2\u2118\u2119\7E\2\2\u2119\u211a\7Q\2\2\u211a\u211b\7U\2\2\u211b\u0584"+ + "\3\2\2\2\u211c\u211d\7C\2\2\u211d\u211e\7F\2\2\u211e\u211f\7F\2\2\u211f"+ + "\u2120\7F\2\2\u2120\u2121\7C\2\2\u2121\u2122\7V\2\2\u2122\u2123\7G\2\2"+ + "\u2123\u0586\3\2\2\2\u2124\u2125\7C\2\2\u2125\u2126\7F\2\2\u2126\u2127"+ + "\7F\2\2\u2127\u2128\7V\2\2\u2128\u2129\7K\2\2\u2129\u212a\7O\2\2\u212a"+ + "\u212b\7G\2\2\u212b\u0588\3\2\2\2\u212c\u212d\7C\2\2\u212d\u212e\7G\2"+ + "\2\u212e\u212f\7U\2\2\u212f\u2130\7a\2\2\u2130\u2131\7F\2\2\u2131\u2132"+ + "\7G\2\2\u2132\u2133\7E\2\2\u2133\u2134\7T\2\2\u2134\u2135\7[\2\2\u2135"+ + "\u2136\7R\2\2\u2136\u2137\7V\2\2\u2137\u058a\3\2\2\2\u2138\u2139\7C\2"+ + "\2\u2139\u213a\7G\2\2\u213a\u213b\7U\2\2\u213b\u213c\7a\2\2\u213c\u213d"+ + "\7G\2\2\u213d\u213e\7P\2\2\u213e\u213f\7E\2\2\u213f\u2140\7T\2\2\u2140"+ + "\u2141\7[\2\2\u2141\u2142\7R\2\2\u2142\u2143\7V\2\2\u2143\u058c\3\2\2"+ + "\2\u2144\u2145\7C\2\2\u2145\u2146\7T\2\2\u2146\u2147\7G\2\2\u2147\u2148"+ + "\7C\2\2\u2148\u058e\3\2\2\2\u2149\u214a\7C\2\2\u214a\u214b\7U\2\2\u214b"+ + "\u214c\7D\2\2\u214c\u214d\7K\2\2\u214d\u214e\7P\2\2\u214e\u214f\7C\2\2"+ + "\u214f\u2150\7T\2\2\u2150\u2151\7[\2\2\u2151\u0590\3\2\2\2\u2152\u2153"+ + "\7C\2\2\u2153\u2154\7U\2\2\u2154\u2155\7K\2\2\u2155\u2156\7P\2\2\u2156"+ + "\u0592\3\2\2\2\u2157\u2158\7C\2\2\u2158\u2159\7U\2\2\u2159\u215a\7V\2"+ + "\2\u215a\u215b\7G\2\2\u215b\u215c\7Z\2\2\u215c\u215d\7V\2\2\u215d\u0594"+ + "\3\2\2\2\u215e\u215f\7C\2\2\u215f\u2160\7U\2\2\u2160\u2161\7Y\2\2\u2161"+ + "\u2162\7M\2\2\u2162\u2163\7D\2\2\u2163\u0596\3\2\2\2\u2164\u2165\7C\2"+ + "\2\u2165\u2166\7U\2\2\u2166\u2167\7Y\2\2\u2167\u2168\7M\2\2\u2168\u2169"+ + "\7V\2\2\u2169\u0598\3\2\2\2\u216a\u216b\7C\2\2\u216b\u216c\7U\2\2\u216c"+ + "\u216d\7[\2\2\u216d\u216e\7O\2\2\u216e\u216f\7O\2\2\u216f\u2170\7G\2\2"+ + "\u2170\u2171\7V\2\2\u2171\u2172\7T\2\2\u2172\u2173\7K\2\2\u2173\u2174"+ + "\7E\2\2\u2174\u2175\7a\2\2\u2175\u2176\7F\2\2\u2176\u2177\7G\2\2\u2177"+ + "\u2178\7E\2\2\u2178\u2179\7T\2\2\u2179\u217a\7[\2\2\u217a\u217b\7R\2\2"+ + "\u217b\u217c\7V\2\2\u217c\u059a\3\2\2\2\u217d\u217e\7C\2\2\u217e\u217f"+ + "\7U\2\2\u217f\u2180\7[\2\2\u2180\u2181\7O\2\2\u2181\u2182\7O\2\2\u2182"+ + "\u2183\7G\2\2\u2183\u2184\7V\2\2\u2184\u2185\7T\2\2\u2185\u2186\7K\2\2"+ + "\u2186\u2187\7E\2\2\u2187\u2188\7a\2\2\u2188\u2189\7F\2\2\u2189\u218a"+ + "\7G\2\2\u218a\u218b\7T\2\2\u218b\u218c\7K\2\2\u218c\u218d\7X\2\2\u218d"+ + "\u218e\7G\2\2\u218e\u059c\3\2\2\2\u218f\u2190\7C\2\2\u2190\u2191\7U\2"+ + "\2\u2191\u2192\7[\2\2\u2192\u2193\7O\2\2\u2193\u2194\7O\2\2\u2194\u2195"+ + "\7G\2\2\u2195\u2196\7V\2\2\u2196\u2197\7T\2\2\u2197\u2198\7K\2\2\u2198"+ + "\u2199\7E\2\2\u2199\u219a\7a\2\2\u219a\u219b\7G\2\2\u219b\u219c\7P\2\2"+ + "\u219c\u219d\7E\2\2\u219d\u219e\7T\2\2\u219e\u219f\7[\2\2\u219f\u21a0"+ + "\7R\2\2\u21a0\u21a1\7V\2\2\u21a1\u059e\3\2\2\2\u21a2\u21a3\7C\2\2\u21a3"+ + "\u21a4\7U\2\2\u21a4\u21a5\7[\2\2\u21a5\u21a6\7O\2\2\u21a6\u21a7\7O\2\2"+ + "\u21a7\u21a8\7G\2\2\u21a8\u21a9\7V\2\2\u21a9\u21aa\7T\2\2\u21aa\u21ab"+ + "\7K\2\2\u21ab\u21ac\7E\2\2\u21ac\u21ad\7a\2\2\u21ad\u21ae\7U\2\2\u21ae"+ + "\u21af\7K\2\2\u21af\u21b0\7I\2\2\u21b0\u21b1\7P\2\2\u21b1\u05a0\3\2\2"+ + "\2\u21b2\u21b3\7C\2\2\u21b3\u21b4\7U\2\2\u21b4\u21b5\7[\2\2\u21b5\u21b6"+ + "\7O\2\2\u21b6\u21b7\7O\2\2\u21b7\u21b8\7G\2\2\u21b8\u21b9\7V\2\2\u21b9"+ + "\u21ba\7T\2\2\u21ba\u21bb\7K\2\2\u21bb\u21bc\7E\2\2\u21bc\u21bd\7a\2\2"+ + "\u21bd\u21be\7X\2\2\u21be\u21bf\7G\2\2\u21bf\u21c0\7T\2\2\u21c0\u21c1"+ + "\7K\2\2\u21c1\u21c2\7H\2\2\u21c2\u21c3\7[\2\2\u21c3\u05a2\3\2\2\2\u21c4"+ + "\u21c5\7C\2\2\u21c5\u21c6\7V\2\2\u21c6\u21c7\7C\2\2\u21c7\u21c8\7P\2\2"+ + "\u21c8\u05a4\3\2\2\2\u21c9\u21ca\7C\2\2\u21ca\u21cb\7V\2\2\u21cb\u21cc"+ + "\7C\2\2\u21cc\u21cd\7P\2\2\u21cd\u21ce\7\64\2\2\u21ce\u05a6\3\2\2\2\u21cf"+ + "\u21d0\7D\2\2\u21d0\u21d1\7G\2\2\u21d1\u21d2\7P\2\2\u21d2\u21d3\7E\2\2"+ + "\u21d3\u21d4\7J\2\2\u21d4\u21d5\7O\2\2\u21d5\u21d6\7C\2\2\u21d6\u21d7"+ + "\7T\2\2\u21d7\u21d8\7M\2\2\u21d8\u05a8\3\2\2\2\u21d9\u21da\7D\2\2\u21da"+ + "\u21db\7K\2\2\u21db\u21dc\7P\2\2\u21dc\u05aa\3\2\2\2\u21dd\u21de\7D\2"+ + "\2\u21de\u21df\7K\2\2\u21df\u21e0\7V\2\2\u21e0\u21e1\7a\2\2\u21e1\u21e2"+ + "\7E\2\2\u21e2\u21e3\7Q\2\2\u21e3\u21e4\7W\2\2\u21e4\u21e5\7P\2\2\u21e5"+ + "\u21e6\7V\2\2\u21e6\u05ac\3\2\2\2\u21e7\u21e8\7D\2\2\u21e8\u21e9\7K\2"+ + "\2\u21e9\u21ea\7V\2\2\u21ea\u21eb\7a\2\2\u21eb\u21ec\7N\2\2\u21ec\u21ed"+ + "\7G\2\2\u21ed\u21ee\7P\2\2\u21ee\u21ef\7I\2\2\u21ef\u21f0\7V\2\2\u21f0"+ + "\u21f1\7J\2\2\u21f1\u05ae\3\2\2\2\u21f2\u21f3\7D\2\2\u21f3\u21f4\7W\2"+ + "\2\u21f4\u21f5\7H\2\2\u21f5\u21f6\7H\2\2\u21f6\u21f7\7G\2\2\u21f7\u21f8"+ + "\7T\2\2\u21f8\u05b0\3\2\2\2\u21f9\u21fa\7E\2\2\u21fa\u21fb\7C\2\2\u21fb"+ + "\u21fc\7V\2\2\u21fc\u21fd\7C\2\2\u21fd\u21fe\7N\2\2\u21fe\u21ff\7Q\2\2"+ + "\u21ff\u2200\7I\2\2\u2200\u2201\7a\2\2\u2201\u2202\7P\2\2\u2202\u2203"+ + "\7C\2\2\u2203\u2204\7O\2\2\u2204\u2205\7G\2\2\u2205\u05b2\3\2\2\2\u2206"+ + "\u2207\7E\2\2\u2207\u2208\7G\2\2\u2208\u2209\7K\2\2\u2209\u220a\7N\2\2"+ + "\u220a\u05b4\3\2\2\2\u220b\u220c\7E\2\2\u220c\u220d\7G\2\2\u220d\u220e"+ + "\7K\2\2\u220e\u220f\7N\2\2\u220f\u2210\7K\2\2\u2210\u2211\7P\2\2\u2211"+ + "\u2212\7I\2\2\u2212\u05b6\3\2\2\2\u2213\u2214\7E\2\2\u2214\u2215\7G\2"+ + "\2\u2215\u2216\7P\2\2\u2216\u2217\7V\2\2\u2217\u2218\7T\2\2\u2218\u2219"+ + "\7Q\2\2\u2219\u221a\7K\2\2\u221a\u221b\7F\2\2\u221b\u05b8\3\2\2\2\u221c"+ + "\u221d\7E\2\2\u221d\u221e\7J\2\2\u221e\u221f\7C\2\2\u221f\u2220\7T\2\2"+ + "\u2220\u2221\7C\2\2\u2221\u2222\7E\2\2\u2222\u2223\7V\2\2\u2223\u2224"+ + "\7G\2\2\u2224\u2225\7T\2\2\u2225\u2226\7a\2\2\u2226\u2227\7N\2\2\u2227"+ + "\u2228\7G\2\2\u2228\u2229\7P\2\2\u2229\u222a\7I\2\2\u222a\u222b\7V\2\2"+ + "\u222b\u222c\7J\2\2\u222c\u05ba\3\2\2\2\u222d\u222e\7E\2\2\u222e\u222f"+ + "\7J\2\2\u222f\u2230\7C\2\2\u2230\u2231\7T\2\2\u2231\u2232\7U\2\2\u2232"+ + "\u2233\7G\2\2\u2233\u2234\7V\2\2\u2234\u05bc\3\2\2\2\u2235\u2236\7E\2"+ + "\2\u2236\u2237\7J\2\2\u2237\u2238\7C\2\2\u2238\u2239\7T\2\2\u2239\u223a"+ + "\7a\2\2\u223a\u223b\7N\2\2\u223b\u223c\7G\2\2\u223c\u223d\7P\2\2\u223d"+ + "\u223e\7I\2\2\u223e\u223f\7V\2\2\u223f\u2240\7J\2\2\u2240\u05be\3\2\2"+ + "\2\u2241\u2242\7E\2\2\u2242\u2243\7Q\2\2\u2243\u2244\7G\2\2\u2244\u2245"+ + "\7T\2\2\u2245\u2246\7E\2\2\u2246\u2247\7K\2\2\u2247\u2248\7D\2\2\u2248"+ + "\u2249\7K\2\2\u2249\u224a\7N\2\2\u224a\u224b\7K\2\2\u224b\u224c\7V\2\2"+ + "\u224c\u224d\7[\2\2\u224d\u05c0\3\2\2\2\u224e\u224f\7E\2\2\u224f\u2250"+ + "\7Q\2\2\u2250\u2251\7N\2\2\u2251\u2252\7N\2\2\u2252\u2253\7C\2\2\u2253"+ + "\u2254\7V\2\2\u2254\u2255\7K\2\2\u2255\u2256\7Q\2\2\u2256\u2257\7P\2\2"+ + "\u2257\u05c2\3\2\2\2\u2258\u2259\7E\2\2\u2259\u225a\7Q\2\2\u225a\u225b"+ + "\7O\2\2\u225b\u225c\7R\2\2\u225c\u225d\7T\2\2\u225d\u225e\7G\2\2\u225e"+ + "\u225f\7U\2\2\u225f\u2260\7U\2\2\u2260\u05c4\3\2\2\2\u2261\u2262\7E\2"+ + "\2\u2262\u2263\7Q\2\2\u2263\u2264\7P\2\2\u2264\u2265\7E\2\2\u2265\u2266"+ + "\7C\2\2\u2266\u2267\7V\2\2\u2267\u05c6\3\2\2\2\u2268\u2269\7E\2\2\u2269"+ + "\u226a\7Q\2\2\u226a\u226b\7P\2\2\u226b\u226c\7E\2\2\u226c\u226d\7C\2\2"+ + "\u226d\u226e\7V\2\2\u226e\u226f\7a\2\2\u226f\u2270\7Y\2\2\u2270\u2271"+ + "\7U\2\2\u2271\u05c8\3\2\2\2\u2272\u2273\7E\2\2\u2273\u2274\7Q\2\2\u2274"+ + "\u2275\7P\2\2\u2275\u2276\7P\2\2\u2276\u2277\7G\2\2\u2277\u2278\7E\2\2"+ + "\u2278\u2279\7V\2\2\u2279\u227a\7K\2\2\u227a\u227b\7Q\2\2\u227b\u227c"+ + "\7P\2\2\u227c\u227d\7a\2\2\u227d\u227e\7K\2\2\u227e\u227f\7F\2\2\u227f"+ + "\u05ca\3\2\2\2\u2280\u2281\7E\2\2\u2281\u2282\7Q\2\2\u2282\u2283\7P\2"+ + "\2\u2283\u2284\7X\2\2\u2284\u05cc\3\2\2\2\u2285\u2286\7E\2\2\u2286\u2287"+ + "\7Q\2\2\u2287\u2288\7P\2\2\u2288\u2289\7X\2\2\u2289\u228a\7G\2\2\u228a"+ + "\u228b\7T\2\2\u228b\u228c\7V\2\2\u228c\u228d\7a\2\2\u228d\u228e\7V\2\2"+ + "\u228e\u228f\7\\\2\2\u228f\u05ce\3\2\2\2\u2290\u2291\7E\2\2\u2291\u2292"+ + "\7Q\2\2\u2292\u2293\7U\2\2\u2293\u05d0\3\2\2\2\u2294\u2295\7E\2\2\u2295"+ + "\u2296\7Q\2\2\u2296\u2297\7V\2\2\u2297\u05d2\3\2\2\2\u2298\u2299\7E\2"+ + "\2\u2299\u229a\7T\2\2\u229a\u229b\7E\2\2\u229b\u229c\7\65\2\2\u229c\u229d"+ + "\7\64\2\2\u229d\u05d4\3\2\2\2\u229e\u229f\7E\2\2\u229f\u22a0\7T\2\2\u22a0"+ + "\u22a1\7G\2\2\u22a1\u22a2\7C\2\2\u22a2\u22a3\7V\2\2\u22a3\u22a4\7G\2\2"+ + "\u22a4\u22a5\7a\2\2\u22a5\u22a6\7C\2\2\u22a6\u22a7\7U\2\2\u22a7\u22a8"+ + "\7[\2\2\u22a8\u22a9\7O\2\2\u22a9\u22aa\7O\2\2\u22aa\u22ab\7G\2\2\u22ab"+ + "\u22ac\7V\2\2\u22ac\u22ad\7T\2\2\u22ad\u22ae\7K\2\2\u22ae\u22af\7E\2\2"+ + "\u22af\u22b0\7a\2\2\u22b0\u22b1\7R\2\2\u22b1\u22b2\7T\2\2\u22b2\u22b3"+ + "\7K\2\2\u22b3\u22b4\7X\2\2\u22b4\u22b5\7a\2\2\u22b5\u22b6\7M\2\2\u22b6"+ + "\u22b7\7G\2\2\u22b7\u22b8\7[\2\2\u22b8\u05d6\3\2\2\2\u22b9\u22ba\7E\2"+ + "\2\u22ba\u22bb\7T\2\2\u22bb\u22bc\7G\2\2\u22bc\u22bd\7C\2\2\u22bd\u22be"+ + "\7V\2\2\u22be\u22bf\7G\2\2\u22bf\u22c0\7a\2\2\u22c0\u22c1\7C\2\2\u22c1"+ + "\u22c2\7U\2\2\u22c2\u22c3\7[\2\2\u22c3\u22c4\7O\2\2\u22c4\u22c5\7O\2\2"+ + "\u22c5\u22c6\7G\2\2\u22c6\u22c7\7V\2\2\u22c7\u22c8\7T\2\2\u22c8\u22c9"+ + "\7K\2\2\u22c9\u22ca\7E\2\2\u22ca\u22cb\7a\2\2\u22cb\u22cc\7R\2\2\u22cc"+ + "\u22cd\7W\2\2\u22cd\u22ce\7D\2\2\u22ce\u22cf\7a\2\2\u22cf\u22d0\7M\2\2"+ + "\u22d0\u22d1\7G\2\2\u22d1\u22d2\7[\2\2\u22d2\u05d8\3\2\2\2\u22d3\u22d4"+ + "\7E\2\2\u22d4\u22d5\7T\2\2\u22d5\u22d6\7G\2\2\u22d6\u22d7\7C\2\2\u22d7"+ + "\u22d8\7V\2\2\u22d8\u22d9\7G\2\2\u22d9\u22da\7a\2\2\u22da\u22db\7F\2\2"+ + "\u22db\u22dc\7J\2\2\u22dc\u22dd\7a\2\2\u22dd\u22de\7R\2\2\u22de\u22df"+ + "\7C\2\2\u22df\u22e0\7T\2\2\u22e0\u22e1\7C\2\2\u22e1\u22e2\7O\2\2\u22e2"+ + "\u22e3\7G\2\2\u22e3\u22e4\7V\2\2\u22e4\u22e5\7G\2\2\u22e5\u22e6\7T\2\2"+ + "\u22e6\u22e7\7U\2\2\u22e7\u05da\3\2\2\2\u22e8\u22e9\7E\2\2\u22e9\u22ea"+ + "\7T\2\2\u22ea\u22eb\7G\2\2\u22eb\u22ec\7C\2\2\u22ec\u22ed\7V\2\2\u22ed"+ + "\u22ee\7G\2\2\u22ee\u22ef\7a\2\2\u22ef\u22f0\7F\2\2\u22f0\u22f1\7K\2\2"+ + "\u22f1\u22f2\7I\2\2\u22f2\u22f3\7G\2\2\u22f3\u22f4\7U\2\2\u22f4\u22f5"+ + "\7V\2\2\u22f5\u05dc\3\2\2\2\u22f6\u22f7\7E\2\2\u22f7\u22f8\7T\2\2\u22f8"+ + "\u22f9\7Q\2\2\u22f9\u22fa\7U\2\2\u22fa\u22fb\7U\2\2\u22fb\u22fc\7G\2\2"+ + "\u22fc\u22fd\7U\2\2\u22fd\u05de\3\2\2\2\u22fe\u22ff\7F\2\2\u22ff\u2300"+ + "\7C\2\2\u2300\u2301\7V\2\2\u2301\u2302\7G\2\2\u2302\u2303\7F\2\2\u2303"+ + "\u2304\7K\2\2\u2304\u2305\7H\2\2\u2305\u2306\7H\2\2\u2306\u05e0\3\2\2"+ + "\2\u2307\u2308\7F\2\2\u2308\u2309\7C\2\2\u2309\u230a\7V\2\2\u230a\u230b"+ + "\7G\2\2\u230b\u230c\7a\2\2\u230c\u230d\7H\2\2\u230d\u230e\7Q\2\2\u230e"+ + "\u230f\7T\2\2\u230f\u2310\7O\2\2\u2310\u2311\7C\2\2\u2311\u2312\7V\2\2"+ + "\u2312\u05e2\3\2\2\2\u2313\u2314\7F\2\2\u2314\u2315\7C\2\2\u2315\u2316"+ + "\7[\2\2\u2316\u2317\7P\2\2\u2317\u2318\7C\2\2\u2318\u2319\7O\2\2\u2319"+ + "\u231a\7G\2\2\u231a\u05e4\3\2\2\2\u231b\u231c\7F\2\2\u231c\u231d\7C\2"+ + "\2\u231d\u231e\7[\2\2\u231e\u231f\7Q\2\2\u231f\u2320\7H\2\2\u2320\u2321"+ + "\7O\2\2\u2321\u2322\7Q\2\2\u2322\u2323\7P\2\2\u2323\u2324\7V\2\2\u2324"+ + "\u2325\7J\2\2\u2325\u05e6\3\2\2\2\u2326\u2327\7F\2\2\u2327\u2328\7C\2"+ + "\2\u2328\u2329\7[\2\2\u2329\u232a\7Q\2\2\u232a\u232b\7H\2\2\u232b\u232c"+ + "\7Y\2\2\u232c\u232d\7G\2\2\u232d\u232e\7G\2\2\u232e\u232f\7M\2\2\u232f"+ + "\u05e8\3\2\2\2\u2330\u2331\7F\2\2\u2331\u2332\7C\2\2\u2332\u2333\7[\2"+ + "\2\u2333\u2334\7Q\2\2\u2334\u2335\7H\2\2\u2335\u2336\7[\2\2\u2336\u2337"+ + "\7G\2\2\u2337\u2338\7C\2\2\u2338\u2339\7T\2\2\u2339\u05ea\3\2\2\2\u233a"+ + "\u233b\7F\2\2\u233b\u233c\7G\2\2\u233c\u233d\7E\2\2\u233d\u233e\7Q\2\2"+ + "\u233e\u233f\7F\2\2\u233f\u2340\7G\2\2\u2340\u05ec\3\2\2\2\u2341\u2342"+ + "\7F\2\2\u2342\u2343\7G\2\2\u2343\u2344\7I\2\2\u2344\u2345\7T\2\2\u2345"+ + "\u2346\7G\2\2\u2346\u2347\7G\2\2\u2347\u2348\7U\2\2\u2348\u05ee\3\2\2"+ + "\2\u2349\u234a\7F\2\2\u234a\u234b\7G\2\2\u234b\u234c\7U\2\2\u234c\u234d"+ + "\7a\2\2\u234d\u234e\7F\2\2\u234e\u234f\7G\2\2\u234f\u2350\7E\2\2\u2350"+ + "\u2351\7T\2\2\u2351\u2352\7[\2\2\u2352\u2353\7R\2\2\u2353\u2354\7V\2\2"+ + "\u2354\u05f0\3\2\2\2\u2355\u2356\7F\2\2\u2356\u2357\7G\2\2\u2357\u2358"+ + "\7U\2\2\u2358\u2359\7a\2\2\u2359\u235a\7G\2\2\u235a\u235b\7P\2\2\u235b"+ + "\u235c\7E\2\2\u235c\u235d\7T\2\2\u235d\u235e\7[\2\2\u235e\u235f\7R\2\2"+ + "\u235f\u2360\7V\2\2\u2360\u05f2\3\2\2\2\u2361\u2362\7F\2\2\u2362\u2363"+ + "\7K\2\2\u2363\u2364\7O\2\2\u2364\u2365\7G\2\2\u2365\u2366\7P\2\2\u2366"+ + "\u2367\7U\2\2\u2367\u2368\7K\2\2\u2368\u2369\7Q\2\2\u2369\u236a\7P\2\2"+ + "\u236a\u05f4\3\2\2\2\u236b\u236c\7F\2\2\u236c\u236d\7K\2\2\u236d\u236e"+ + "\7U\2\2\u236e\u236f\7L\2\2\u236f\u2370\7Q\2\2\u2370\u2371\7K\2\2\u2371"+ + "\u2372\7P\2\2\u2372\u2373\7V\2\2\u2373\u05f6\3\2\2\2\u2374\u2375\7G\2"+ + "\2\u2375\u2376\7N\2\2\u2376\u2377\7V\2\2\u2377\u05f8\3\2\2\2\u2378\u2379"+ + "\7G\2\2\u2379\u237a\7P\2\2\u237a\u237b\7E\2\2\u237b\u237c\7Q\2\2\u237c"+ + "\u237d\7F\2\2\u237d\u237e\7G\2\2\u237e\u05fa\3\2\2\2\u237f\u2380\7G\2"+ + "\2\u2380\u2381\7P\2\2\u2381\u2382\7E\2\2\u2382\u2383\7T\2\2\u2383\u2384"+ + "\7[\2\2\u2384\u2385\7R\2\2\u2385\u2386\7V\2\2\u2386\u05fc\3\2\2\2\u2387"+ + "\u2388\7G\2\2\u2388\u2389\7P\2\2\u2389\u238a\7F\2\2\u238a\u238b\7R\2\2"+ + "\u238b\u238c\7Q\2\2\u238c\u238d\7K\2\2\u238d\u238e\7P\2\2\u238e\u238f"+ + "\7V\2\2\u238f\u05fe\3\2\2\2\u2390\u2391\7G\2\2\u2391\u2392\7P\2\2\u2392"+ + "\u2393\7X\2\2\u2393\u2394\7G\2\2\u2394\u2395\7N\2\2\u2395\u2396\7Q\2\2"+ + "\u2396\u2397\7R\2\2\u2397\u2398\7G\2\2\u2398\u0600\3\2\2\2\u2399\u239a"+ + "\7G\2\2\u239a\u239b\7S\2\2\u239b\u239c\7W\2\2\u239c\u239d\7C\2\2\u239d"+ + "\u239e\7N\2\2\u239e\u239f\7U\2\2\u239f\u0602\3\2\2\2\u23a0\u23a1\7G\2"+ + "\2\u23a1\u23a2\7Z\2\2\u23a2\u23a3\7R\2\2\u23a3\u0604\3\2\2\2\u23a4\u23a5"+ + "\7G\2\2\u23a5\u23a6\7Z\2\2\u23a6\u23a7\7R\2\2\u23a7\u23a8\7Q\2\2\u23a8"+ + "\u23a9\7T\2\2\u23a9\u23aa\7V\2\2\u23aa\u23ab\7a\2\2\u23ab\u23ac\7U\2\2"+ + "\u23ac\u23ad\7G\2\2\u23ad\u23ae\7V\2\2\u23ae\u0606\3\2\2\2\u23af\u23b0"+ + "\7G\2\2\u23b0\u23b1\7Z\2\2\u23b1\u23b2\7V\2\2\u23b2\u23b3\7G\2\2\u23b3"+ + "\u23b4\7T\2\2\u23b4\u23b5\7K\2\2\u23b5\u23b6\7Q\2\2\u23b6\u23b7\7T\2\2"+ + "\u23b7\u23b8\7T\2\2\u23b8\u23b9\7K\2\2\u23b9\u23ba\7P\2\2\u23ba\u23bb"+ + "\7I\2\2\u23bb\u0608\3\2\2\2\u23bc\u23bd\7G\2\2\u23bd\u23be\7Z\2\2\u23be"+ + "\u23bf\7V\2\2\u23bf\u23c0\7T\2\2\u23c0\u23c1\7C\2\2\u23c1\u23c2\7E\2\2"+ + "\u23c2\u23c3\7V\2\2\u23c3\u23c4\7X\2\2\u23c4\u23c5\7C\2\2\u23c5\u23c6"+ + "\7N\2\2\u23c6\u23c7\7W\2\2\u23c7\u23c8\7G\2\2\u23c8\u060a\3\2\2\2\u23c9"+ + "\u23ca\7H\2\2\u23ca\u23cb\7K\2\2\u23cb\u23cc\7G\2\2\u23cc\u23cd\7N\2\2"+ + "\u23cd\u23ce\7F\2\2\u23ce\u060c\3\2\2\2\u23cf\u23d0\7H\2\2\u23d0\u23d1"+ + "\7K\2\2\u23d1\u23d2\7P\2\2\u23d2\u23d3\7F\2\2\u23d3\u23d4\7a\2\2\u23d4"+ + "\u23d5\7K\2\2\u23d5\u23d6\7P\2\2\u23d6\u23d7\7a\2\2\u23d7\u23d8\7U\2\2"+ + "\u23d8\u23d9\7G\2\2\u23d9\u23da\7V\2\2\u23da\u060e\3\2\2\2\u23db\u23dc"+ + "\7H\2\2\u23dc\u23dd\7N\2\2\u23dd\u23de\7Q\2\2\u23de\u23df\7Q\2\2\u23df"+ + "\u23e0\7T\2\2\u23e0\u0610\3\2\2\2\u23e1\u23e2\7H\2\2\u23e2\u23e3\7Q\2"+ + "\2\u23e3\u23e4\7T\2\2\u23e4\u23e5\7O\2\2\u23e5\u23e6\7C\2\2\u23e6\u23e7"+ + "\7V\2\2\u23e7\u0612\3\2\2\2\u23e8\u23e9\7H\2\2\u23e9\u23ea\7Q\2\2\u23ea"+ + "\u23eb\7W\2\2\u23eb\u23ec\7P\2\2\u23ec\u23ed\7F\2\2\u23ed\u23ee\7a\2\2"+ + "\u23ee\u23ef\7T\2\2\u23ef\u23f0\7Q\2\2\u23f0\u23f1\7Y\2\2\u23f1\u23f2"+ + "\7U\2\2\u23f2\u0614\3\2\2\2\u23f3\u23f4\7H\2\2\u23f4\u23f5\7T\2\2\u23f5"+ + "\u23f6\7Q\2\2\u23f6\u23f7\7O\2\2\u23f7\u23f8\7a\2\2\u23f8\u23f9\7D\2\2"+ + "\u23f9\u23fa\7C\2\2\u23fa\u23fb\7U\2\2\u23fb\u23fc\7G\2\2\u23fc\u23fd"+ + "\78\2\2\u23fd\u23fe\7\66\2\2\u23fe\u0616\3\2\2\2\u23ff\u2400\7H\2\2\u2400"+ + "\u2401\7T\2\2\u2401\u2402\7Q\2\2\u2402\u2403\7O\2\2\u2403\u2404\7a\2\2"+ + "\u2404\u2405\7F\2\2\u2405\u2406\7C\2\2\u2406\u2407\7[\2\2\u2407\u2408"+ + "\7U\2\2\u2408\u0618\3\2\2\2\u2409\u240a\7H\2\2\u240a\u240b\7T\2\2\u240b"+ + "\u240c\7Q\2\2\u240c\u240d\7O\2\2\u240d\u240e\7a\2\2\u240e\u240f\7W\2\2"+ + "\u240f\u2410\7P\2\2\u2410\u2411\7K\2\2\u2411\u2412\7Z\2\2\u2412\u2413"+ + "\7V\2\2\u2413\u2414\7K\2\2\u2414\u2415\7O\2\2\u2415\u2416\7G\2\2\u2416"+ + "\u061a\3\2\2\2\u2417\u2418\7I\2\2\u2418\u2419\7G\2\2\u2419\u241a\7Q\2"+ + "\2\u241a\u241b\7O\2\2\u241b\u241c\7E\2\2\u241c\u241d\7Q\2\2\u241d\u241e"+ + "\7N\2\2\u241e\u241f\7N\2\2\u241f\u2420\7H\2\2\u2420\u2421\7T\2\2\u2421"+ + "\u2422\7Q\2\2\u2422\u2423\7O\2\2\u2423\u2424\7V\2\2\u2424\u2425\7G\2\2"+ + "\u2425\u2426\7Z\2\2\u2426\u2427\7V\2\2\u2427\u061c\3\2\2\2\u2428\u2429"+ + "\7I\2\2\u2429\u242a\7G\2\2\u242a\u242b\7Q\2\2\u242b\u242c\7O\2\2\u242c"+ + "\u242d\7E\2\2\u242d\u242e\7Q\2\2\u242e\u242f\7N\2\2\u242f\u2430\7N\2\2"+ + "\u2430\u2431\7H\2\2\u2431\u2432\7T\2\2\u2432\u2433\7Q\2\2\u2433\u2434"+ + "\7O\2\2\u2434\u2435\7Y\2\2\u2435\u2436\7M\2\2\u2436\u2437\7D\2\2\u2437"+ + "\u061e\3\2\2\2\u2438\u2439\7I\2\2\u2439\u243a\7G\2\2\u243a\u243b\7Q\2"+ + "\2\u243b\u243c\7O\2\2\u243c\u243d\7G\2\2\u243d\u243e\7V\2\2\u243e\u243f"+ + "\7T\2\2\u243f\u2440\7[\2\2\u2440\u2441\7E\2\2\u2441\u2442\7Q\2\2\u2442"+ + "\u2443\7N\2\2\u2443\u2444\7N\2\2\u2444\u2445\7G\2\2\u2445\u2446\7E\2\2"+ + "\u2446\u2447\7V\2\2\u2447\u2448\7K\2\2\u2448\u2449\7Q\2\2\u2449\u244a"+ + "\7P\2\2\u244a\u244b\7H\2\2\u244b\u244c\7T\2\2\u244c\u244d\7Q\2\2\u244d"+ + "\u244e\7O\2\2\u244e\u244f\7V\2\2\u244f\u2450\7G\2\2\u2450\u2451\7Z\2\2"+ + "\u2451\u2452\7V\2\2\u2452\u0620\3\2\2\2\u2453\u2454\7I\2\2\u2454\u2455"+ + "\7G\2\2\u2455\u2456\7Q\2\2\u2456\u2457\7O\2\2\u2457\u2458\7G\2\2\u2458"+ + "\u2459\7V\2\2\u2459\u245a\7T\2\2\u245a\u245b\7[\2\2\u245b\u245c\7E\2\2"+ + "\u245c\u245d\7Q\2\2\u245d\u245e\7N\2\2\u245e\u245f\7N\2\2\u245f\u2460"+ + "\7G\2\2\u2460\u2461\7E\2\2\u2461\u2462\7V\2\2\u2462\u2463\7K\2\2\u2463"+ + "\u2464\7Q\2\2\u2464\u2465\7P\2\2\u2465\u2466\7H\2\2\u2466\u2467\7T\2\2"+ + "\u2467\u2468\7Q\2\2\u2468\u2469\7O\2\2\u2469\u246a\7Y\2\2\u246a\u246b"+ + "\7M\2\2\u246b\u246c\7D\2\2\u246c\u0622\3\2\2\2\u246d\u246e\7I\2\2\u246e"+ + "\u246f\7G\2\2\u246f\u2470\7Q\2\2\u2470\u2471\7O\2\2\u2471\u2472\7G\2\2"+ + "\u2472\u2473\7V\2\2\u2473\u2474\7T\2\2\u2474\u2475\7[\2\2\u2475\u2476"+ + "\7H\2\2\u2476\u2477\7T\2\2\u2477\u2478\7Q\2\2\u2478\u2479\7O\2\2\u2479"+ + "\u247a\7V\2\2\u247a\u247b\7G\2\2\u247b\u247c\7Z\2\2\u247c\u247d\7V\2\2"+ + "\u247d\u0624\3\2\2\2\u247e\u247f\7I\2\2\u247f\u2480\7G\2\2\u2480\u2481"+ + "\7Q\2\2\u2481\u2482\7O\2\2\u2482\u2483\7G\2\2\u2483\u2484\7V\2\2\u2484"+ + "\u2485\7T\2\2\u2485\u2486\7[\2\2\u2486\u2487\7H\2\2\u2487\u2488\7T\2\2"+ + "\u2488\u2489\7Q\2\2\u2489\u248a\7O\2\2\u248a\u248b\7Y\2\2\u248b\u248c"+ + "\7M\2\2\u248c\u248d\7D\2\2\u248d\u0626\3\2\2\2\u248e\u248f\7I\2\2\u248f"+ + "\u2490\7G\2\2\u2490\u2491\7Q\2\2\u2491\u2492\7O\2\2\u2492\u2493\7G\2\2"+ + "\u2493\u2494\7V\2\2\u2494\u2495\7T\2\2\u2495\u2496\7[\2\2\u2496\u2497"+ + "\7P\2\2\u2497\u0628\3\2\2\2\u2498\u2499\7I\2\2\u2499\u249a\7G\2\2\u249a"+ + "\u249b\7Q\2\2\u249b\u249c\7O\2\2\u249c\u249d\7G\2\2\u249d\u249e\7V\2\2"+ + "\u249e\u249f\7T\2\2\u249f\u24a0\7[\2\2\u24a0\u24a1\7V\2\2\u24a1\u24a2"+ + "\7[\2\2\u24a2\u24a3\7R\2\2\u24a3\u24a4\7G\2\2\u24a4\u062a\3\2\2\2\u24a5"+ + "\u24a6\7I\2\2\u24a6\u24a7\7G\2\2\u24a7\u24a8\7Q\2\2\u24a8\u24a9\7O\2\2"+ + "\u24a9\u24aa\7H\2\2\u24aa\u24ab\7T\2\2\u24ab\u24ac\7Q\2\2\u24ac\u24ad"+ + "\7O\2\2\u24ad\u24ae\7V\2\2\u24ae\u24af\7G\2\2\u24af\u24b0\7Z\2\2\u24b0"+ + "\u24b1\7V\2\2\u24b1\u062c\3\2\2\2\u24b2\u24b3\7I\2\2\u24b3\u24b4\7G\2"+ + "\2\u24b4\u24b5\7Q\2\2\u24b5\u24b6\7O\2\2\u24b6\u24b7\7H\2\2\u24b7\u24b8"+ + "\7T\2\2\u24b8\u24b9\7Q\2\2\u24b9\u24ba\7O\2\2\u24ba\u24bb\7Y\2\2\u24bb"+ + "\u24bc\7M\2\2\u24bc\u24bd\7D\2\2\u24bd\u062e\3\2\2\2\u24be\u24bf\7I\2"+ + "\2\u24bf\u24c0\7G\2\2\u24c0\u24c1\7V\2\2\u24c1\u24c2\7a\2\2\u24c2\u24c3"+ + "\7H\2\2\u24c3\u24c4\7Q\2\2\u24c4\u24c5\7T\2\2\u24c5\u24c6\7O\2\2\u24c6"+ + "\u24c7\7C\2\2\u24c7\u24c8\7V\2\2\u24c8\u0630\3\2\2\2\u24c9\u24ca\7I\2"+ + "\2\u24ca\u24cb\7G\2\2\u24cb\u24cc\7V\2\2\u24cc\u24cd\7a\2\2\u24cd\u24ce"+ + "\7N\2\2\u24ce\u24cf\7Q\2\2\u24cf\u24d0\7E\2\2\u24d0\u24d1\7M\2\2\u24d1"+ + "\u0632\3\2\2\2\u24d2\u24d3\7I\2\2\u24d3\u24d4\7N\2\2\u24d4\u24d5\7G\2"+ + "\2\u24d5\u24d6\7P\2\2\u24d6\u24d7\7I\2\2\u24d7\u24d8\7V\2\2\u24d8\u24d9"+ + "\7J\2\2\u24d9\u0634\3\2\2\2\u24da\u24db\7I\2\2\u24db\u24dc\7T\2\2\u24dc"+ + "\u24dd\7G\2\2\u24dd\u24de\7C\2\2\u24de\u24df\7V\2\2\u24df\u24e0\7G\2\2"+ + "\u24e0\u24e1\7U\2\2\u24e1\u24e2\7V\2\2\u24e2\u0636\3\2\2\2\u24e3\u24e4"+ + "\7I\2\2\u24e4\u24e5\7V\2\2\u24e5\u24e6\7K\2\2\u24e6\u24e7\7F\2\2\u24e7"+ + "\u24e8\7a\2\2\u24e8\u24e9\7U\2\2\u24e9\u24ea\7W\2\2\u24ea\u24eb\7D\2\2"+ + "\u24eb\u24ec\7U\2\2\u24ec\u24ed\7G\2\2\u24ed\u24ee\7V\2\2\u24ee\u0638"+ + "\3\2\2\2\u24ef\u24f0\7I\2\2\u24f0\u24f1\7V\2\2\u24f1\u24f2\7K\2\2\u24f2"+ + "\u24f3\7F\2\2\u24f3\u24f4\7a\2\2\u24f4\u24f5\7U\2\2\u24f5\u24f6\7W\2\2"+ + "\u24f6\u24f7\7D\2\2\u24f7\u24f8\7V\2\2\u24f8\u24f9\7T\2\2\u24f9\u24fa"+ + "\7C\2\2\u24fa\u24fb\7E\2\2\u24fb\u24fc\7V\2\2\u24fc\u063a\3\2\2\2\u24fd"+ + "\u24fe\7J\2\2\u24fe\u24ff\7G\2\2\u24ff\u2500\7Z\2\2\u2500\u063c\3\2\2"+ + "\2\u2501\u2502\7K\2\2\u2502\u2503\7H\2\2\u2503\u2504\7P\2\2\u2504\u2505"+ + "\7W\2\2\u2505\u2506\7N\2\2\u2506\u2507\7N\2\2\u2507\u063e\3\2\2\2\u2508"+ + "\u2509\7K\2\2\u2509\u250a\7P\2\2\u250a\u250b\7G\2\2\u250b\u250c\7V\2\2"+ + "\u250c\u250d\78\2\2\u250d\u250e\7a\2\2\u250e\u250f\7C\2\2\u250f\u2510"+ + "\7V\2\2\u2510\u2511\7Q\2\2\u2511\u2512\7P\2\2\u2512\u0640\3\2\2\2\u2513"+ + "\u2514\7K\2\2\u2514\u2515\7P\2\2\u2515\u2516\7G\2\2\u2516\u2517\7V\2\2"+ + "\u2517\u2518\78\2\2\u2518\u2519\7a\2\2\u2519\u251a\7P\2\2\u251a\u251b"+ + "\7V\2\2\u251b\u251c\7Q\2\2\u251c\u251d\7C\2\2\u251d\u0642\3\2\2\2\u251e"+ + "\u251f\7K\2\2\u251f\u2520\7P\2\2\u2520\u2521\7G\2\2\u2521\u2522\7V\2\2"+ + "\u2522\u2523\7a\2\2\u2523\u2524\7C\2\2\u2524\u2525\7V\2\2\u2525\u2526"+ + "\7Q\2\2\u2526\u2527\7P\2\2\u2527\u0644\3\2\2\2\u2528\u2529\7K\2\2\u2529"+ + "\u252a\7P\2\2\u252a\u252b\7G\2\2\u252b\u252c\7V\2\2\u252c\u252d\7a\2\2"+ + "\u252d\u252e\7P\2\2\u252e\u252f\7V\2\2\u252f\u2530\7Q\2\2\u2530\u2531"+ + "\7C\2\2\u2531\u0646\3\2\2\2\u2532\u2533\7K\2\2\u2533\u2534\7P\2\2\u2534"+ + "\u2535\7U\2\2\u2535\u2536\7V\2\2\u2536\u2537\7T\2\2\u2537\u0648\3\2\2"+ + "\2\u2538\u2539\7K\2\2\u2539\u253a\7P\2\2\u253a\u253b\7V\2\2\u253b\u253c"+ + "\7G\2\2\u253c\u253d\7T\2\2\u253d\u253e\7K\2\2\u253e\u253f\7Q\2\2\u253f"+ + "\u2540\7T\2\2\u2540\u2541\7T\2\2\u2541\u2542\7K\2\2\u2542\u2543\7P\2\2"+ + "\u2543\u2544\7I\2\2\u2544\u2545\7P\2\2\u2545\u064a\3\2\2\2\u2546\u2547"+ + "\7K\2\2\u2547\u2548\7P\2\2\u2548\u2549\7V\2\2\u2549\u254a\7G\2\2\u254a"+ + "\u254b\7T\2\2\u254b\u254c\7U\2\2\u254c\u254d\7G\2\2\u254d\u254e\7E\2\2"+ + "\u254e\u254f\7V\2\2\u254f\u2550\7U\2\2\u2550\u064c\3\2\2\2\u2551\u2552"+ + "\7K\2\2\u2552\u2553\7U\2\2\u2553\u2554\7E\2\2\u2554\u2555\7N\2\2\u2555"+ + "\u2556\7Q\2\2\u2556\u2557\7U\2\2\u2557\u2558\7G\2\2\u2558\u2559\7F\2\2"+ + "\u2559\u064e\3\2\2\2\u255a\u255b\7K\2\2\u255b\u255c\7U\2\2\u255c\u255d"+ + "\7G\2\2\u255d\u255e\7O\2\2\u255e\u255f\7R\2\2\u255f\u2560\7V\2\2\u2560"+ + "\u2561\7[\2\2\u2561\u0650\3\2\2\2\u2562\u2563\7K\2\2\u2563\u2564\7U\2"+ + "\2\u2564\u2565\7P\2\2\u2565\u2566\7W\2\2\u2566\u2567\7N\2\2\u2567\u2568"+ + "\7N\2\2\u2568\u0652\3\2\2\2\u2569\u256a\7K\2\2\u256a\u256b\7U\2\2\u256b"+ + "\u256c\7U\2\2\u256c\u256d\7K\2\2\u256d\u256e\7O\2\2\u256e\u256f\7R\2\2"+ + "\u256f\u2570\7N\2\2\u2570\u2571\7G\2\2\u2571\u0654\3\2\2\2\u2572\u2573"+ + "\7K\2\2\u2573\u2574\7U\2\2\u2574\u2575\7a\2\2\u2575\u2576\7H\2\2\u2576"+ + "\u2577\7T\2\2\u2577\u2578\7G\2\2\u2578\u2579\7G\2\2\u2579\u257a\7a\2\2"+ + "\u257a\u257b\7N\2\2\u257b\u257c\7Q\2\2\u257c\u257d\7E\2\2\u257d\u257e"+ + "\7M\2\2\u257e\u0656\3\2\2\2\u257f\u2580\7K\2\2\u2580\u2581\7U\2\2\u2581"+ + "\u2582\7a\2\2\u2582\u2583\7K\2\2\u2583\u2584\7R\2\2\u2584\u2585\7X\2\2"+ + "\u2585\u2586\7\66\2\2\u2586\u0658\3\2\2\2\u2587\u2588\7K\2\2\u2588\u2589"+ + "\7U\2\2\u2589\u258a\7a\2\2\u258a\u258b\7K\2\2\u258b\u258c\7R\2\2\u258c"+ + "\u258d\7X\2\2\u258d\u258e\7\66\2\2\u258e\u258f\7a\2\2\u258f\u2590\7E\2"+ + "\2\u2590\u2591\7Q\2\2\u2591\u2592\7O\2\2\u2592\u2593\7R\2\2\u2593\u2594"+ + "\7C\2\2\u2594\u2595\7V\2\2\u2595\u065a\3\2\2\2\u2596\u2597\7K\2\2\u2597"+ + "\u2598\7U\2\2\u2598\u2599\7a\2\2\u2599\u259a\7K\2\2\u259a\u259b\7R\2\2"+ + "\u259b\u259c\7X\2\2\u259c\u259d\7\66\2\2\u259d\u259e\7a\2\2\u259e\u259f"+ + "\7O\2\2\u259f\u25a0\7C\2\2\u25a0\u25a1\7R\2\2\u25a1\u25a2\7R\2\2\u25a2"+ + "\u25a3\7G\2\2\u25a3\u25a4\7F\2\2\u25a4\u065c\3\2\2\2\u25a5\u25a6\7K\2"+ + "\2\u25a6\u25a7\7U\2\2\u25a7\u25a8\7a\2\2\u25a8\u25a9\7K\2\2\u25a9\u25aa"+ + "\7R\2\2\u25aa\u25ab\7X\2\2\u25ab\u25ac\78\2\2\u25ac\u065e\3\2\2\2\u25ad"+ + "\u25ae\7K\2\2\u25ae\u25af\7U\2\2\u25af\u25b0\7a\2\2\u25b0\u25b1\7W\2\2"+ + "\u25b1\u25b2\7U\2\2\u25b2\u25b3\7G\2\2\u25b3\u25b4\7F\2\2\u25b4\u25b5"+ + "\7a\2\2\u25b5\u25b6\7N\2\2\u25b6\u25b7\7Q\2\2\u25b7\u25b8\7E\2\2\u25b8"+ + "\u25b9\7M\2\2\u25b9\u0660\3\2\2\2\u25ba\u25bb\7N\2\2\u25bb\u25bc\7C\2"+ + "\2\u25bc\u25bd\7U\2\2\u25bd\u25be\7V\2\2\u25be\u25bf\7a\2\2\u25bf\u25c0"+ + "\7K\2\2\u25c0\u25c1\7P\2\2\u25c1\u25c2\7U\2\2\u25c2\u25c3\7G\2\2\u25c3"+ + "\u25c4\7T\2\2\u25c4\u25c5\7V\2\2\u25c5\u25c6\7a\2\2\u25c6\u25c7\7K\2\2"+ + "\u25c7\u25c8\7F\2\2\u25c8\u0662\3\2\2\2\u25c9\u25ca\7N\2\2\u25ca\u25cb"+ + "\7E\2\2\u25cb\u25cc\7C\2\2\u25cc\u25cd\7U\2\2\u25cd\u25ce\7G\2\2\u25ce"+ + "\u0664\3\2\2\2\u25cf\u25d0\7N\2\2\u25d0\u25d1\7G\2\2\u25d1\u25d2\7C\2"+ + "\2\u25d2\u25d3\7U\2\2\u25d3\u25d4\7V\2\2\u25d4\u0666\3\2\2\2\u25d5\u25d6"+ + "\7N\2\2\u25d6\u25d7\7G\2\2\u25d7\u25d8\7P\2\2\u25d8\u25d9\7I\2\2\u25d9"+ + "\u25da\7V\2\2\u25da\u25db\7J\2\2\u25db\u0668\3\2\2\2\u25dc\u25dd\7N\2"+ + "\2\u25dd\u25de\7K\2\2\u25de\u25df\7P\2\2\u25df\u25e0\7G\2\2\u25e0\u25e1"+ + "\7H\2\2\u25e1\u25e2\7T\2\2\u25e2\u25e3\7Q\2\2\u25e3\u25e4\7O\2\2\u25e4"+ + "\u25e5\7V\2\2\u25e5\u25e6\7G\2\2\u25e6\u25e7\7Z\2\2\u25e7\u25e8\7V\2\2"+ + "\u25e8\u066a\3\2\2\2\u25e9\u25ea\7N\2\2\u25ea\u25eb\7K\2\2\u25eb\u25ec"+ + "\7P\2\2\u25ec\u25ed\7G\2\2\u25ed\u25ee\7H\2\2\u25ee\u25ef\7T\2\2\u25ef"+ + "\u25f0\7Q\2\2\u25f0\u25f1\7O\2\2\u25f1\u25f2\7Y\2\2\u25f2\u25f3\7M\2\2"+ + "\u25f3\u25f4\7D\2\2\u25f4\u066c\3\2\2\2\u25f5\u25f6\7N\2\2\u25f6\u25f7"+ + "\7K\2\2\u25f7\u25f8\7P\2\2\u25f8\u25f9\7G\2\2\u25f9\u25fa\7U\2\2\u25fa"+ + "\u25fb\7V\2\2\u25fb\u25fc\7T\2\2\u25fc\u25fd\7K\2\2\u25fd\u25fe\7P\2\2"+ + "\u25fe\u25ff\7I\2\2\u25ff\u2600\7H\2\2\u2600\u2601\7T\2\2\u2601\u2602"+ + "\7Q\2\2\u2602\u2603\7O\2\2\u2603\u2604\7V\2\2\u2604\u2605\7G\2\2\u2605"+ + "\u2606\7Z\2\2\u2606\u2607\7V\2\2\u2607\u066e\3\2\2\2\u2608\u2609\7N\2"+ + "\2\u2609\u260a\7K\2\2\u260a\u260b\7P\2\2\u260b\u260c\7G\2\2\u260c\u260d"+ + "\7U\2\2\u260d\u260e\7V\2\2\u260e\u260f\7T\2\2\u260f\u2610\7K\2\2\u2610"+ + "\u2611\7P\2\2\u2611\u2612\7I\2\2\u2612\u2613\7H\2\2\u2613\u2614\7T\2\2"+ + "\u2614\u2615\7Q\2\2\u2615\u2616\7O\2\2\u2616\u2617\7Y\2\2\u2617\u2618"+ + "\7M\2\2\u2618\u2619\7D\2\2\u2619\u0670\3\2\2\2\u261a\u261b\7N\2\2\u261b"+ + "\u261c\7P\2\2\u261c\u0672\3\2\2\2\u261d\u261e\7N\2\2\u261e\u261f\7Q\2"+ + "\2\u261f\u2620\7C\2\2\u2620\u2621\7F\2\2\u2621\u2622\7a\2\2\u2622\u2623"+ + "\7H\2\2\u2623\u2624\7K\2\2\u2624\u2625\7N\2\2\u2625\u2626\7G\2\2\u2626"+ + "\u0674\3\2\2\2\u2627\u2628\7N\2\2\u2628\u2629\7Q\2\2\u2629\u262a\7E\2"+ + "\2\u262a\u262b\7C\2\2\u262b\u262c\7V\2\2\u262c\u262d\7G\2\2\u262d\u0676"+ + "\3\2\2\2\u262e\u262f\7N\2\2\u262f\u2630\7Q\2\2\u2630\u2631\7I\2\2\u2631"+ + "\u0678\3\2\2\2\u2632\u2633\7N\2\2\u2633\u2634\7Q\2\2\u2634\u2635\7I\2"+ + "\2\u2635\u2636\7\63\2\2\u2636\u2637\7\62\2\2\u2637\u067a\3\2\2\2\u2638"+ + "\u2639\7N\2\2\u2639\u263a\7Q\2\2\u263a\u263b\7I\2\2\u263b\u263c\7\64\2"+ + "\2\u263c\u067c\3\2\2\2\u263d\u263e\7N\2\2\u263e\u263f\7Q\2\2\u263f\u2640"+ + "\7Y\2\2\u2640\u2641\7G\2\2\u2641\u2642\7T\2\2\u2642\u067e\3\2\2\2\u2643"+ + "\u2644\7N\2\2\u2644\u2645\7R\2\2\u2645\u2646\7C\2\2\u2646\u2647\7F\2\2"+ + "\u2647\u0680\3\2\2\2\u2648\u2649\7N\2\2\u2649\u264a\7V\2\2\u264a\u264b"+ + "\7T\2\2\u264b\u264c\7K\2\2\u264c\u264d\7O\2\2\u264d\u0682\3\2\2\2\u264e"+ + "\u264f\7O\2\2\u264f\u2650\7C\2\2\u2650\u2651\7M\2\2\u2651\u2652\7G\2\2"+ + "\u2652\u2653\7F\2\2\u2653\u2654\7C\2\2\u2654\u2655\7V\2\2\u2655\u2656"+ + "\7G\2\2\u2656\u0684\3\2\2\2\u2657\u2658\7O\2\2\u2658\u2659\7C\2\2\u2659"+ + "\u265a\7M\2\2\u265a\u265b\7G\2\2\u265b\u265c\7V\2\2\u265c\u265d\7K\2\2"+ + "\u265d\u265e\7O\2\2\u265e\u265f\7G\2\2\u265f\u0686\3\2\2\2\u2660\u2661"+ + "\7O\2\2\u2661\u2662\7C\2\2\u2662\u2663\7M\2\2\u2663\u2664\7G\2\2\u2664"+ + "\u2665\7a\2\2\u2665\u2666\7U\2\2\u2666\u2667\7G\2\2\u2667\u2668\7V\2\2"+ + "\u2668\u0688\3\2\2\2\u2669\u266a\7O\2\2\u266a\u266b\7C\2\2\u266b\u266c"+ + "\7U\2\2\u266c\u266d\7V\2\2\u266d\u266e\7G\2\2\u266e\u266f\7T\2\2\u266f"+ + "\u2670\7a\2\2\u2670\u2671\7R\2\2\u2671\u2672\7Q\2\2\u2672\u2673\7U\2\2"+ + "\u2673\u2674\7a\2\2\u2674\u2675\7Y\2\2\u2675\u2676\7C\2\2\u2676\u2677"+ + "\7K\2\2\u2677\u2678\7V\2\2\u2678\u068a\3\2\2\2\u2679\u267a\7O\2\2\u267a"+ + "\u267b\7D\2\2\u267b\u267c\7T\2\2\u267c\u267d\7E\2\2\u267d\u267e\7Q\2\2"+ + "\u267e\u267f\7P\2\2\u267f\u2680\7V\2\2\u2680\u2681\7C\2\2\u2681\u2682"+ + "\7K\2\2\u2682\u2683\7P\2\2\u2683\u2684\7U\2\2\u2684\u068c\3\2\2\2\u2685"+ + "\u2686\7O\2\2\u2686\u2687\7D\2\2\u2687\u2688\7T\2\2\u2688\u2689\7F\2\2"+ + "\u2689\u268a\7K\2\2\u268a\u268b\7U\2\2\u268b\u268c\7L\2\2\u268c\u268d"+ + "\7Q\2\2\u268d\u268e\7K\2\2\u268e\u268f\7P\2\2\u268f\u2690\7V\2\2\u2690"+ + "\u068e\3\2\2\2\u2691\u2692\7O\2\2\u2692\u2693\7D\2\2\u2693\u2694\7T\2"+ + "\2\u2694\u2695\7G\2\2\u2695\u2696\7S\2\2\u2696\u2697\7W\2\2\u2697\u2698"+ + "\7C\2\2\u2698\u2699\7N\2\2\u2699\u0690\3\2\2\2\u269a\u269b\7O\2\2\u269b"+ + "\u269c\7D\2\2\u269c\u269d\7T\2\2\u269d\u269e\7K\2\2\u269e\u269f\7P\2\2"+ + "\u269f\u26a0\7V\2\2\u26a0\u26a1\7G\2\2\u26a1\u26a2\7T\2\2\u26a2\u26a3"+ + "\7U\2\2\u26a3\u26a4\7G\2\2\u26a4\u26a5\7E\2\2\u26a5\u26a6\7V\2\2\u26a6"+ + "\u26a7\7U\2\2\u26a7\u0692\3\2\2\2\u26a8\u26a9\7O\2\2\u26a9\u26aa\7D\2"+ + "\2\u26aa\u26ab\7T\2\2\u26ab\u26ac\7Q\2\2\u26ac\u26ad\7X\2\2\u26ad\u26ae"+ + "\7G\2\2\u26ae\u26af\7T\2\2\u26af\u26b0\7N\2\2\u26b0\u26b1\7C\2\2\u26b1"+ + "\u26b2\7R\2\2\u26b2\u26b3\7U\2\2\u26b3\u0694\3\2\2\2\u26b4\u26b5\7O\2"+ + "\2\u26b5\u26b6\7D\2\2\u26b6\u26b7\7T\2\2\u26b7\u26b8\7V\2\2\u26b8\u26b9"+ + "\7Q\2\2\u26b9\u26ba\7W\2\2\u26ba\u26bb\7E\2\2\u26bb\u26bc\7J\2\2\u26bc"+ + "\u26bd\7G\2\2\u26bd\u26be\7U\2\2\u26be\u0696\3\2\2\2\u26bf\u26c0\7O\2"+ + "\2\u26c0\u26c1\7D\2\2\u26c1\u26c2\7T\2\2\u26c2\u26c3\7Y\2\2\u26c3\u26c4"+ + "\7K\2\2\u26c4\u26c5\7V\2\2\u26c5\u26c6\7J\2\2\u26c6\u26c7\7K\2\2\u26c7"+ + "\u26c8\7P\2\2\u26c8\u0698\3\2\2\2\u26c9\u26ca\7O\2\2\u26ca\u26cb\7F\2"+ + "\2\u26cb\u26cc\7\67\2\2\u26cc\u069a\3\2\2\2\u26cd\u26ce\7O\2\2\u26ce\u26cf"+ + "\7N\2\2\u26cf\u26d0\7K\2\2\u26d0\u26d1\7P\2\2\u26d1\u26d2\7G\2\2\u26d2"+ + "\u26d3\7H\2\2\u26d3\u26d4\7T\2\2\u26d4\u26d5\7Q\2\2\u26d5\u26d6\7O\2\2"+ + "\u26d6\u26d7\7V\2\2\u26d7\u26d8\7G\2\2\u26d8\u26d9\7Z\2\2\u26d9\u26da"+ + "\7V\2\2\u26da\u069c\3\2\2\2\u26db\u26dc\7O\2\2\u26dc\u26dd\7N\2\2\u26dd"+ + "\u26de\7K\2\2\u26de\u26df\7P\2\2\u26df\u26e0\7G\2\2\u26e0\u26e1\7H\2\2"+ + "\u26e1\u26e2\7T\2\2\u26e2\u26e3\7Q\2\2\u26e3\u26e4\7O\2\2\u26e4\u26e5"+ + "\7Y\2\2\u26e5\u26e6\7M\2\2\u26e6\u26e7\7D\2\2\u26e7\u069e\3\2\2\2\u26e8"+ + "\u26e9\7O\2\2\u26e9\u26ea\7Q\2\2\u26ea\u26eb\7P\2\2\u26eb\u26ec\7V\2\2"+ + "\u26ec\u26ed\7J\2\2\u26ed\u26ee\7P\2\2\u26ee\u26ef\7C\2\2\u26ef\u26f0"+ + "\7O\2\2\u26f0\u26f1\7G\2\2\u26f1\u06a0\3\2\2\2\u26f2\u26f3\7O\2\2\u26f3"+ + "\u26f4\7R\2\2\u26f4\u26f5\7Q\2\2\u26f5\u26f6\7K\2\2\u26f6\u26f7\7P\2\2"+ + "\u26f7\u26f8\7V\2\2\u26f8\u26f9\7H\2\2\u26f9\u26fa\7T\2\2\u26fa\u26fb"+ + "\7Q\2\2\u26fb\u26fc\7O\2\2\u26fc\u26fd\7V\2\2\u26fd\u26fe\7G\2\2\u26fe"+ + "\u26ff\7Z\2\2\u26ff\u2700\7V\2\2\u2700\u06a2\3\2\2\2\u2701\u2702\7O\2"+ + "\2\u2702\u2703\7R\2\2\u2703\u2704\7Q\2\2\u2704\u2705\7K\2\2\u2705\u2706"+ + "\7P\2\2\u2706\u2707\7V\2\2\u2707\u2708\7H\2\2\u2708\u2709\7T\2\2\u2709"+ + "\u270a\7Q\2\2\u270a\u270b\7O\2\2\u270b\u270c\7Y\2\2\u270c\u270d\7M\2\2"+ + "\u270d\u270e\7D\2\2\u270e\u06a4\3\2\2\2\u270f\u2710\7O\2\2\u2710\u2711"+ + "\7R\2\2\u2711\u2712\7Q\2\2\u2712\u2713\7N\2\2\u2713\u2714\7[\2\2\u2714"+ + "\u2715\7H\2\2\u2715\u2716\7T\2\2\u2716\u2717\7Q\2\2\u2717\u2718\7O\2\2"+ + "\u2718\u2719\7V\2\2\u2719\u271a\7G\2\2\u271a\u271b\7Z\2\2\u271b\u271c"+ + "\7V\2\2\u271c\u06a6\3\2\2\2\u271d\u271e\7O\2\2\u271e\u271f\7R\2\2\u271f"+ + "\u2720\7Q\2\2\u2720\u2721\7N\2\2\u2721\u2722\7[\2\2\u2722\u2723\7H\2\2"+ + "\u2723\u2724\7T\2\2\u2724\u2725\7Q\2\2\u2725\u2726\7O\2\2\u2726\u2727"+ + "\7Y\2\2\u2727\u2728\7M\2\2\u2728\u2729\7D\2\2\u2729\u06a8\3\2\2\2\u272a"+ + "\u272b\7O\2\2\u272b\u272c\7W\2\2\u272c\u272d\7N\2\2\u272d\u272e\7V\2\2"+ + "\u272e\u272f\7K\2\2\u272f\u2730\7N\2\2\u2730\u2731\7K\2\2\u2731\u2732"+ + "\7P\2\2\u2732\u2733\7G\2\2\u2733\u2734\7U\2\2\u2734\u2735\7V\2\2\u2735"+ + "\u2736\7T\2\2\u2736\u2737\7K\2\2\u2737\u2738\7P\2\2\u2738\u2739\7I\2\2"+ + "\u2739\u273a\7H\2\2\u273a\u273b\7T\2\2\u273b\u273c\7Q\2\2\u273c\u273d"+ + "\7O\2\2\u273d\u273e\7V\2\2\u273e\u273f\7G\2\2\u273f\u2740\7Z\2\2\u2740"+ + "\u2741\7V\2\2\u2741\u06aa\3\2\2\2\u2742\u2743\7O\2\2\u2743\u2744\7W\2"+ + "\2\u2744\u2745\7N\2\2\u2745\u2746\7V\2\2\u2746\u2747\7K\2\2\u2747\u2748"+ + "\7N\2\2\u2748\u2749\7K\2\2\u2749\u274a\7P\2\2\u274a\u274b\7G\2\2\u274b"+ + "\u274c\7U\2\2\u274c\u274d\7V\2\2\u274d\u274e\7T\2\2\u274e\u274f\7K\2\2"+ + "\u274f\u2750\7P\2\2\u2750\u2751\7I\2\2\u2751\u2752\7H\2\2\u2752\u2753"+ + "\7T\2\2\u2753\u2754\7Q\2\2\u2754\u2755\7O\2\2\u2755\u2756\7Y\2\2\u2756"+ + "\u2757\7M\2\2\u2757\u2758\7D\2\2\u2758\u06ac\3\2\2\2\u2759\u275a\7O\2"+ + "\2\u275a\u275b\7W\2\2\u275b\u275c\7N\2\2\u275c\u275d\7V\2\2\u275d\u275e"+ + "\7K\2\2\u275e\u275f\7R\2\2\u275f\u2760\7Q\2\2\u2760\u2761\7K\2\2\u2761"+ + "\u2762\7P\2\2\u2762\u2763\7V\2\2\u2763\u2764\7H\2\2\u2764\u2765\7T\2\2"+ + "\u2765\u2766\7Q\2\2\u2766\u2767\7O\2\2\u2767\u2768\7V\2\2\u2768\u2769"+ + "\7G\2\2\u2769\u276a\7Z\2\2\u276a\u276b\7V\2\2\u276b\u06ae\3\2\2\2\u276c"+ + "\u276d\7O\2\2\u276d\u276e\7W\2\2\u276e\u276f\7N\2\2\u276f\u2770\7V\2\2"+ + "\u2770\u2771\7K\2\2\u2771\u2772\7R\2\2\u2772\u2773\7Q\2\2\u2773\u2774"+ + "\7K\2\2\u2774\u2775\7P\2\2\u2775\u2776\7V\2\2\u2776\u2777\7H\2\2\u2777"+ + "\u2778\7T\2\2\u2778\u2779\7Q\2\2\u2779\u277a\7O\2\2\u277a\u277b\7Y\2\2"+ + "\u277b\u277c\7M\2\2\u277c\u277d\7D\2\2\u277d\u06b0\3\2\2\2\u277e\u277f"+ + "\7O\2\2\u277f\u2780\7W\2\2\u2780\u2781\7N\2\2\u2781\u2782\7V\2\2\u2782"+ + "\u2783\7K\2\2\u2783\u2784\7R\2\2\u2784\u2785\7Q\2\2\u2785\u2786\7N\2\2"+ + "\u2786\u2787\7[\2\2\u2787\u2788\7I\2\2\u2788\u2789\7Q\2\2\u2789\u278a"+ + "\7P\2\2\u278a\u278b\7H\2\2\u278b\u278c\7T\2\2\u278c\u278d\7Q\2\2\u278d"+ + "\u278e\7O\2\2\u278e\u278f\7V\2\2\u278f\u2790\7G\2\2\u2790\u2791\7Z\2\2"; + private static final String _serializedATNSegment4 = + "\u2791\u2792\7V\2\2\u2792\u06b2\3\2\2\2\u2793\u2794\7O\2\2\u2794\u2795"+ + "\7W\2\2\u2795\u2796\7N\2\2\u2796\u2797\7V\2\2\u2797\u2798\7K\2\2\u2798"+ + "\u2799\7R\2\2\u2799\u279a\7Q\2\2\u279a\u279b\7N\2\2\u279b\u279c\7[\2\2"+ + "\u279c\u279d\7I\2\2\u279d\u279e\7Q\2\2\u279e\u279f\7P\2\2\u279f\u27a0"+ + "\7H\2\2\u27a0\u27a1\7T\2\2\u27a1\u27a2\7Q\2\2\u27a2\u27a3\7O\2\2\u27a3"+ + "\u27a4\7Y\2\2\u27a4\u27a5\7M\2\2\u27a5\u27a6\7D\2\2\u27a6\u06b4\3\2\2"+ + "\2\u27a7\u27a8\7P\2\2\u27a8\u27a9\7C\2\2\u27a9\u27aa\7O\2\2\u27aa\u27ab"+ + "\7G\2\2\u27ab\u27ac\7a\2\2\u27ac\u27ad\7E\2\2\u27ad\u27ae\7Q\2\2\u27ae"+ + "\u27af\7P\2\2\u27af\u27b0\7U\2\2\u27b0\u27b1\7V\2\2\u27b1\u06b6\3\2\2"+ + "\2\u27b2\u27b3\7P\2\2\u27b3\u27b4\7W\2\2\u27b4\u27b5\7N\2\2\u27b5\u27b6"+ + "\7N\2\2\u27b6\u27b7\7K\2\2\u27b7\u27b8\7H\2\2\u27b8\u06b8\3\2\2\2\u27b9"+ + "\u27ba\7P\2\2\u27ba\u27bb\7W\2\2\u27bb\u27bc\7O\2\2\u27bc\u27bd\7I\2\2"+ + "\u27bd\u27be\7G\2\2\u27be\u27bf\7Q\2\2\u27bf\u27c0\7O\2\2\u27c0\u27c1"+ + "\7G\2\2\u27c1\u27c2\7V\2\2\u27c2\u27c3\7T\2\2\u27c3\u27c4\7K\2\2\u27c4"+ + "\u27c5\7G\2\2\u27c5\u27c6\7U\2\2\u27c6\u06ba\3\2\2\2\u27c7\u27c8\7P\2"+ + "\2\u27c8\u27c9\7W\2\2\u27c9\u27ca\7O\2\2\u27ca\u27cb\7K\2\2\u27cb\u27cc"+ + "\7P\2\2\u27cc\u27cd\7V\2\2\u27cd\u27ce\7G\2\2\u27ce\u27cf\7T\2\2\u27cf"+ + "\u27d0\7K\2\2\u27d0\u27d1\7Q\2\2\u27d1\u27d2\7T\2\2\u27d2\u27d3\7T\2\2"+ + "\u27d3\u27d4\7K\2\2\u27d4\u27d5\7P\2\2\u27d5\u27d6\7I\2\2\u27d6\u27d7"+ + "\7U\2\2\u27d7\u06bc\3\2\2\2\u27d8\u27d9\7P\2\2\u27d9\u27da\7W\2\2\u27da"+ + "\u27db\7O\2\2\u27db\u27dc\7R\2\2\u27dc\u27dd\7Q\2\2\u27dd\u27de\7K\2\2"+ + "\u27de\u27df\7P\2\2\u27df\u27e0\7V\2\2\u27e0\u27e1\7U\2\2\u27e1\u06be"+ + "\3\2\2\2\u27e2\u27e3\7Q\2\2\u27e3\u27e4\7E\2\2\u27e4\u27e5\7V\2\2\u27e5"+ + "\u06c0\3\2\2\2\u27e6\u27e7\7Q\2\2\u27e7\u27e8\7E\2\2\u27e8\u27e9\7V\2"+ + "\2\u27e9\u27ea\7G\2\2\u27ea\u27eb\7V\2\2\u27eb\u27ec\7a\2\2\u27ec\u27ed"+ + "\7N\2\2\u27ed\u27ee\7G\2\2\u27ee\u27ef\7P\2\2\u27ef\u27f0\7I\2\2\u27f0"+ + "\u27f1\7V\2\2\u27f1\u27f2\7J\2\2\u27f2\u06c2\3\2\2\2\u27f3\u27f4\7Q\2"+ + "\2\u27f4\u27f5\7T\2\2\u27f5\u27f6\7F\2\2\u27f6\u06c4\3\2\2\2\u27f7\u27f8"+ + "\7Q\2\2\u27f8\u27f9\7X\2\2\u27f9\u27fa\7G\2\2\u27fa\u27fb\7T\2\2\u27fb"+ + "\u27fc\7N\2\2\u27fc\u27fd\7C\2\2\u27fd\u27fe\7R\2\2\u27fe\u27ff\7U\2\2"+ + "\u27ff\u06c6\3\2\2\2\u2800\u2801\7R\2\2\u2801\u2802\7G\2\2\u2802\u2803"+ + "\7T\2\2\u2803\u2804\7K\2\2\u2804\u2805\7Q\2\2\u2805\u2806\7F\2\2\u2806"+ + "\u2807\7a\2\2\u2807\u2808\7C\2\2\u2808\u2809\7F\2\2\u2809\u280a\7F\2\2"+ + "\u280a\u06c8\3\2\2\2\u280b\u280c\7R\2\2\u280c\u280d\7G\2\2\u280d\u280e"+ + "\7T\2\2\u280e\u280f\7K\2\2\u280f\u2810\7Q\2\2\u2810\u2811\7F\2\2\u2811"+ + "\u2812\7a\2\2\u2812\u2813\7F\2\2\u2813\u2814\7K\2\2\u2814\u2815\7H\2\2"+ + "\u2815\u2816\7H\2\2\u2816\u06ca\3\2\2\2\u2817\u2818\7R\2\2\u2818\u2819"+ + "\7K\2\2\u2819\u06cc\3\2\2\2\u281a\u281b\7R\2\2\u281b\u281c\7Q\2\2\u281c"+ + "\u281d\7K\2\2\u281d\u281e\7P\2\2\u281e\u281f\7V\2\2\u281f\u2820\7H\2\2"+ + "\u2820\u2821\7T\2\2\u2821\u2822\7Q\2\2\u2822\u2823\7O\2\2\u2823\u2824"+ + "\7V\2\2\u2824\u2825\7G\2\2\u2825\u2826\7Z\2\2\u2826\u2827\7V\2\2\u2827"+ + "\u06ce\3\2\2\2\u2828\u2829\7R\2\2\u2829\u282a\7Q\2\2\u282a\u282b\7K\2"+ + "\2\u282b\u282c\7P\2\2\u282c\u282d\7V\2\2\u282d\u282e\7H\2\2\u282e\u282f"+ + "\7T\2\2\u282f\u2830\7Q\2\2\u2830\u2831\7O\2\2\u2831\u2832\7Y\2\2\u2832"+ + "\u2833\7M\2\2\u2833\u2834\7D\2\2\u2834\u06d0\3\2\2\2\u2835\u2836\7R\2"+ + "\2\u2836\u2837\7Q\2\2\u2837\u2838\7K\2\2\u2838\u2839\7P\2\2\u2839\u283a"+ + "\7V\2\2\u283a\u283b\7P\2\2\u283b\u06d2\3\2\2\2\u283c\u283d\7R\2\2\u283d"+ + "\u283e\7Q\2\2\u283e\u283f\7N\2\2\u283f\u2840\7[\2\2\u2840\u2841\7H\2\2"+ + "\u2841\u2842\7T\2\2\u2842\u2843\7Q\2\2\u2843\u2844\7O\2\2\u2844\u2845"+ + "\7V\2\2\u2845\u2846\7G\2\2\u2846\u2847\7Z\2\2\u2847\u2848\7V\2\2\u2848"+ + "\u06d4\3\2\2\2\u2849\u284a\7R\2\2\u284a\u284b\7Q\2\2\u284b\u284c\7N\2"+ + "\2\u284c\u284d\7[\2\2\u284d\u284e\7H\2\2\u284e\u284f\7T\2\2\u284f\u2850"+ + "\7Q\2\2\u2850\u2851\7O\2\2\u2851\u2852\7Y\2\2\u2852\u2853\7M\2\2\u2853"+ + "\u2854\7D\2\2\u2854\u06d6\3\2\2\2\u2855\u2856\7R\2\2\u2856\u2857\7Q\2"+ + "\2\u2857\u2858\7N\2\2\u2858\u2859\7[\2\2\u2859\u285a\7I\2\2\u285a\u285b"+ + "\7Q\2\2\u285b\u285c\7P\2\2\u285c\u285d\7H\2\2\u285d\u285e\7T\2\2\u285e"+ + "\u285f\7Q\2\2\u285f\u2860\7O\2\2\u2860\u2861\7V\2\2\u2861\u2862\7G\2\2"+ + "\u2862\u2863\7Z\2\2\u2863\u2864\7V\2\2\u2864\u06d8\3\2\2\2\u2865\u2866"+ + "\7R\2\2\u2866\u2867\7Q\2\2\u2867\u2868\7N\2\2\u2868\u2869\7[\2\2\u2869"+ + "\u286a\7I\2\2\u286a\u286b\7Q\2\2\u286b\u286c\7P\2\2\u286c\u286d\7H\2\2"+ + "\u286d\u286e\7T\2\2\u286e\u286f\7Q\2\2\u286f\u2870\7O\2\2\u2870\u2871"+ + "\7Y\2\2\u2871\u2872\7M\2\2\u2872\u2873\7D\2\2\u2873\u06da\3\2\2\2\u2874"+ + "\u2875\7R\2\2\u2875\u2876\7Q\2\2\u2876\u2877\7Y\2\2\u2877\u06dc\3\2\2"+ + "\2\u2878\u2879\7R\2\2\u2879\u287a\7Q\2\2\u287a\u287b\7Y\2\2\u287b\u287c"+ + "\7G\2\2\u287c\u287d\7T\2\2\u287d\u06de\3\2\2\2\u287e\u287f\7S\2\2\u287f"+ + "\u2880\7W\2\2\u2880\u2881\7Q\2\2\u2881\u2882\7V\2\2\u2882\u2883\7G\2\2"+ + "\u2883\u06e0\3\2\2\2\u2884\u2885\7T\2\2\u2885\u2886\7C\2\2\u2886\u2887"+ + "\7F\2\2\u2887\u2888\7K\2\2\u2888\u2889\7C\2\2\u2889\u288a\7P\2\2\u288a"+ + "\u288b\7U\2\2\u288b\u06e2\3\2\2\2\u288c\u288d\7T\2\2\u288d\u288e\7C\2"+ + "\2\u288e\u288f\7P\2\2\u288f\u2890\7F\2\2\u2890\u06e4\3\2\2\2\u2891\u2892"+ + "\7T\2\2\u2892\u2893\7C\2\2\u2893\u2894\7P\2\2\u2894\u2895\7F\2\2\u2895"+ + "\u2896\7Q\2\2\u2896\u2897\7O\2\2\u2897\u2898\7a\2\2\u2898\u2899\7D\2\2"+ + "\u2899\u289a\7[\2\2\u289a\u289b\7V\2\2\u289b\u289c\7G\2\2\u289c\u289d"+ + "\7U\2\2\u289d\u06e6\3\2\2\2\u289e\u289f\7T\2\2\u289f\u28a0\7G\2\2\u28a0"+ + "\u28a1\7N\2\2\u28a1\u28a2\7G\2\2\u28a2\u28a3\7C\2\2\u28a3\u28a4\7U\2\2"+ + "\u28a4\u28a5\7G\2\2\u28a5\u28a6\7a\2\2\u28a6\u28a7\7N\2\2\u28a7\u28a8"+ + "\7Q\2\2\u28a8\u28a9\7E\2\2\u28a9\u28aa\7M\2\2\u28aa\u06e8\3\2\2\2\u28ab"+ + "\u28ac\7T\2\2\u28ac\u28ad\7G\2\2\u28ad\u28ae\7X\2\2\u28ae\u28af\7G\2\2"+ + "\u28af\u28b0\7T\2\2\u28b0\u28b1\7U\2\2\u28b1\u28b2\7G\2\2\u28b2\u06ea"+ + "\3\2\2\2\u28b3\u28b4\7T\2\2\u28b4\u28b5\7Q\2\2\u28b5\u28b6\7W\2\2\u28b6"+ + "\u28b7\7P\2\2\u28b7\u28b8\7F\2\2\u28b8\u06ec\3\2\2\2\u28b9\u28ba\7T\2"+ + "\2\u28ba\u28bb\7Q\2\2\u28bb\u28bc\7Y\2\2\u28bc\u28bd\7a\2\2\u28bd\u28be"+ + "\7E\2\2\u28be\u28bf\7Q\2\2\u28bf\u28c0\7W\2\2\u28c0\u28c1\7P\2\2\u28c1"+ + "\u28c2\7V\2\2\u28c2\u06ee\3\2\2\2\u28c3\u28c4\7T\2\2\u28c4\u28c5\7R\2"+ + "\2\u28c5\u28c6\7C\2\2\u28c6\u28c7\7F\2\2\u28c7\u06f0\3\2\2\2\u28c8\u28c9"+ + "\7T\2\2\u28c9\u28ca\7V\2\2\u28ca\u28cb\7T\2\2\u28cb\u28cc\7K\2\2\u28cc"+ + "\u28cd\7O\2\2\u28cd\u06f2\3\2\2\2\u28ce\u28cf\7U\2\2\u28cf\u28d0\7G\2"+ + "\2\u28d0\u28d1\7E\2\2\u28d1\u28d2\7a\2\2\u28d2\u28d3\7V\2\2\u28d3\u28d4"+ + "\7Q\2\2\u28d4\u28d5\7a\2\2\u28d5\u28d6\7V\2\2\u28d6\u28d7\7K\2\2\u28d7"+ + "\u28d8\7O\2\2\u28d8\u28d9\7G\2\2\u28d9\u06f4\3\2\2\2\u28da\u28db\7U\2"+ + "\2\u28db\u28dc\7G\2\2\u28dc\u28dd\7U\2\2\u28dd\u28de\7U\2\2\u28de\u28df"+ + "\7K\2\2\u28df\u28e0\7Q\2\2\u28e0\u28e1\7P\2\2\u28e1\u28e2\7a\2\2\u28e2"+ + "\u28e3\7W\2\2\u28e3\u28e4\7U\2\2\u28e4\u28e5\7G\2\2\u28e5\u28e6\7T\2\2"+ + "\u28e6\u06f6\3\2\2\2\u28e7\u28e8\7U\2\2\u28e8\u28e9\7J\2\2\u28e9\u28ea"+ + "\7C\2\2\u28ea\u06f8\3\2\2\2\u28eb\u28ec\7U\2\2\u28ec\u28ed\7J\2\2\u28ed"+ + "\u28ee\7C\2\2\u28ee\u28ef\7\63\2\2\u28ef\u06fa\3\2\2\2\u28f0\u28f1\7U"+ + "\2\2\u28f1\u28f2\7J\2\2\u28f2\u28f3\7C\2\2\u28f3\u28f4\7\64\2\2\u28f4"+ + "\u06fc\3\2\2\2\u28f5\u28f6\7U\2\2\u28f6\u28f7\7E\2\2\u28f7\u28f8\7J\2"+ + "\2\u28f8\u28f9\7G\2\2\u28f9\u28fa\7O\2\2\u28fa\u28fb\7C\2\2\u28fb\u28fc"+ + "\7a\2\2\u28fc\u28fd\7P\2\2\u28fd\u28fe\7C\2\2\u28fe\u28ff\7O\2\2\u28ff"+ + "\u2900\7G\2\2\u2900\u06fe\3\2\2\2\u2901\u2902\7U\2\2\u2902\u2903\7K\2"+ + "\2\u2903\u2904\7I\2\2\u2904\u2905\7P\2\2\u2905\u0700\3\2\2\2\u2906\u2907"+ + "\7U\2\2\u2907\u2908\7K\2\2\u2908\u2909\7P\2\2\u2909\u0702\3\2\2\2\u290a"+ + "\u290b\7U\2\2\u290b\u290c\7N\2\2\u290c\u290d\7G\2\2\u290d\u290e\7G\2\2"+ + "\u290e\u290f\7R\2\2\u290f\u0704\3\2\2\2\u2910\u2911\7U\2\2\u2911\u2912"+ + "\7Q\2\2\u2912\u2913\7W\2\2\u2913\u2914\7P\2\2\u2914\u2915\7F\2\2\u2915"+ + "\u2916\7G\2\2\u2916\u2917\7Z\2\2\u2917\u0706\3\2\2\2\u2918\u2919\7U\2"+ + "\2\u2919\u291a\7S\2\2\u291a\u291b\7N\2\2\u291b\u291c\7a\2\2\u291c\u291d"+ + "\7V\2\2\u291d\u291e\7J\2\2\u291e\u291f\7T\2\2\u291f\u2920\7G\2\2\u2920"+ + "\u2921\7C\2\2\u2921\u2922\7F\2\2\u2922\u2923\7a\2\2\u2923\u2924\7Y\2\2"+ + "\u2924\u2925\7C\2\2\u2925\u2926\7K\2\2\u2926\u2927\7V\2\2\u2927\u2928"+ + "\7a\2\2\u2928\u2929\7C\2\2\u2929\u292a\7H\2\2\u292a\u292b\7V\2\2\u292b"+ + "\u292c\7G\2\2\u292c\u292d\7T\2\2\u292d\u292e\7a\2\2\u292e\u292f\7I\2\2"+ + "\u292f\u2930\7V\2\2\u2930\u2931\7K\2\2\u2931\u2932\7F\2\2\u2932\u2933"+ + "\7U\2\2\u2933\u0708\3\2\2\2\u2934\u2935\7U\2\2\u2935\u2936\7S\2\2\u2936"+ + "\u2937\7T\2\2\u2937\u2938\7V\2\2\u2938\u070a\3\2\2\2\u2939\u293a\7U\2"+ + "\2\u293a\u293b\7T\2\2\u293b\u293c\7K\2\2\u293c\u293d\7F\2\2\u293d\u070c"+ + "\3\2\2\2\u293e\u293f\7U\2\2\u293f\u2940\7V\2\2\u2940\u2941\7C\2\2\u2941"+ + "\u2942\7T\2\2\u2942\u2943\7V\2\2\u2943\u2944\7R\2\2\u2944\u2945\7Q\2\2"+ + "\u2945\u2946\7K\2\2\u2946\u2947\7P\2\2\u2947\u2948\7V\2\2\u2948\u070e"+ + "\3\2\2\2\u2949\u294a\7U\2\2\u294a\u294b\7V\2\2\u294b\u294c\7T\2\2\u294c"+ + "\u294d\7E\2\2\u294d\u294e\7O\2\2\u294e\u294f\7R\2\2\u294f\u0710\3\2\2"+ + "\2\u2950\u2951\7U\2\2\u2951\u2952\7V\2\2\u2952\u2953\7T\2\2\u2953\u2954"+ + "\7a\2\2\u2954\u2955\7V\2\2\u2955\u2956\7Q\2\2\u2956\u2957\7a\2\2\u2957"+ + "\u2958\7F\2\2\u2958\u2959\7C\2\2\u2959\u295a\7V\2\2\u295a\u295b\7G\2\2"+ + "\u295b\u0712\3\2\2\2\u295c\u295d\7U\2\2\u295d\u295e\7V\2\2\u295e\u295f"+ + "\7a\2\2\u295f\u2960\7C\2\2\u2960\u2961\7T\2\2\u2961\u2962\7G\2\2\u2962"+ + "\u2963\7C\2\2\u2963\u0714\3\2\2\2\u2964\u2965\7U\2\2\u2965\u2966\7V\2"+ + "\2\u2966\u2967\7a\2\2\u2967\u2968\7C\2\2\u2968\u2969\7U\2\2\u2969\u296a"+ + "\7D\2\2\u296a\u296b\7K\2\2\u296b\u296c\7P\2\2\u296c\u296d\7C\2\2\u296d"+ + "\u296e\7T\2\2\u296e\u296f\7[\2\2\u296f\u0716\3\2\2\2\u2970\u2971\7U\2"+ + "\2\u2971\u2972\7V\2\2\u2972\u2973\7a\2\2\u2973\u2974\7C\2\2\u2974\u2975"+ + "\7U\2\2\u2975\u2976\7V\2\2\u2976\u2977\7G\2\2\u2977\u2978\7Z\2\2\u2978"+ + "\u2979\7V\2\2\u2979\u0718\3\2\2\2\u297a\u297b\7U\2\2\u297b\u297c\7V\2"+ + "\2\u297c\u297d\7a\2\2\u297d\u297e\7C\2\2\u297e\u297f\7U\2\2\u297f\u2980"+ + "\7Y\2\2\u2980\u2981\7M\2\2\u2981\u2982\7D\2\2\u2982\u071a\3\2\2\2\u2983"+ + "\u2984\7U\2\2\u2984\u2985\7V\2\2\u2985\u2986\7a\2\2\u2986\u2987\7C\2\2"+ + "\u2987\u2988\7U\2\2\u2988\u2989\7Y\2\2\u2989\u298a\7M\2\2\u298a\u298b"+ + "\7V\2\2\u298b\u071c\3\2\2\2\u298c\u298d\7U\2\2\u298d\u298e\7V\2\2\u298e"+ + "\u298f\7a\2\2\u298f\u2990\7D\2\2\u2990\u2991\7W\2\2\u2991\u2992\7H\2\2"+ + "\u2992\u2993\7H\2\2\u2993\u2994\7G\2\2\u2994\u2995\7T\2\2\u2995\u071e"+ + "\3\2\2\2\u2996\u2997\7U\2\2\u2997\u2998\7V\2\2\u2998\u2999\7a\2\2\u2999"+ + "\u299a\7E\2\2\u299a\u299b\7G\2\2\u299b\u299c\7P\2\2\u299c\u299d\7V\2\2"+ + "\u299d\u299e\7T\2\2\u299e\u299f\7Q\2\2\u299f\u29a0\7K\2\2\u29a0\u29a1"+ + "\7F\2\2\u29a1\u0720\3\2\2\2\u29a2\u29a3\7U\2\2\u29a3\u29a4\7V\2\2\u29a4"+ + "\u29a5\7a\2\2\u29a5\u29a6\7E\2\2\u29a6\u29a7\7Q\2\2\u29a7\u29a8\7P\2\2"+ + "\u29a8\u29a9\7V\2\2\u29a9\u29aa\7C\2\2\u29aa\u29ab\7K\2\2\u29ab\u29ac"+ + "\7P\2\2\u29ac\u29ad\7U\2\2\u29ad\u0722\3\2\2\2\u29ae\u29af\7U\2\2\u29af"+ + "\u29b0\7V\2\2\u29b0\u29b1\7a\2\2\u29b1\u29b2\7E\2\2\u29b2\u29b3\7T\2\2"+ + "\u29b3\u29b4\7Q\2\2\u29b4\u29b5\7U\2\2\u29b5\u29b6\7U\2\2\u29b6\u29b7"+ + "\7G\2\2\u29b7\u29b8\7U\2\2\u29b8\u0724\3\2\2\2\u29b9\u29ba\7U\2\2\u29ba"+ + "\u29bb\7V\2\2\u29bb\u29bc\7a\2\2\u29bc\u29bd\7F\2\2\u29bd\u29be\7K\2\2"+ + "\u29be\u29bf\7H\2\2\u29bf\u29c0\7H\2\2\u29c0\u29c1\7G\2\2\u29c1\u29c2"+ + "\7T\2\2\u29c2\u29c3\7G\2\2\u29c3\u29c4\7P\2\2\u29c4\u29c5\7E\2\2\u29c5"+ + "\u29c6\7G\2\2\u29c6\u0726\3\2\2\2\u29c7\u29c8\7U\2\2\u29c8\u29c9\7V\2"+ + "\2\u29c9\u29ca\7a\2\2\u29ca\u29cb\7F\2\2\u29cb\u29cc\7K\2\2\u29cc\u29cd"+ + "\7O\2\2\u29cd\u29ce\7G\2\2\u29ce\u29cf\7P\2\2\u29cf\u29d0\7U\2\2\u29d0"+ + "\u29d1\7K\2\2\u29d1\u29d2\7Q\2\2\u29d2\u29d3\7P\2\2\u29d3\u0728\3\2\2"+ + "\2\u29d4\u29d5\7U\2\2\u29d5\u29d6\7V\2\2\u29d6\u29d7\7a\2\2\u29d7\u29d8"+ + "\7F\2\2\u29d8\u29d9\7K\2\2\u29d9\u29da\7U\2\2\u29da\u29db\7L\2\2\u29db"+ + "\u29dc\7Q\2\2\u29dc\u29dd\7K\2\2\u29dd\u29de\7P\2\2\u29de\u29df\7V\2\2"+ + "\u29df\u072a\3\2\2\2\u29e0\u29e1\7U\2\2\u29e1\u29e2\7V\2\2\u29e2\u29e3"+ + "\7a\2\2\u29e3\u29e4\7F\2\2\u29e4\u29e5\7K\2\2\u29e5\u29e6\7U\2\2\u29e6"+ + "\u29e7\7V\2\2\u29e7\u29e8\7C\2\2\u29e8\u29e9\7P\2\2\u29e9\u29ea\7E\2\2"+ + "\u29ea\u29eb\7G\2\2\u29eb\u072c\3\2\2\2\u29ec\u29ed\7U\2\2\u29ed\u29ee"+ + "\7V\2\2\u29ee\u29ef\7a\2\2\u29ef\u29f0\7G\2\2\u29f0\u29f1\7P\2\2\u29f1"+ + "\u29f2\7F\2\2\u29f2\u29f3\7R\2\2\u29f3\u29f4\7Q\2\2\u29f4\u29f5\7K\2\2"+ + "\u29f5\u29f6\7P\2\2\u29f6\u29f7\7V\2\2\u29f7\u072e\3\2\2\2\u29f8\u29f9"+ + "\7U\2\2\u29f9\u29fa\7V\2\2\u29fa\u29fb\7a\2\2\u29fb\u29fc\7G\2\2\u29fc"+ + "\u29fd\7P\2\2\u29fd\u29fe\7X\2\2\u29fe\u29ff\7G\2\2\u29ff\u2a00\7N\2\2"+ + "\u2a00\u2a01\7Q\2\2\u2a01\u2a02\7R\2\2\u2a02\u2a03\7G\2\2\u2a03\u0730"+ + "\3\2\2\2\u2a04\u2a05\7U\2\2\u2a05\u2a06\7V\2\2\u2a06\u2a07\7a\2\2\u2a07"+ + "\u2a08\7G\2\2\u2a08\u2a09\7S\2\2\u2a09\u2a0a\7W\2\2\u2a0a\u2a0b\7C\2\2"+ + "\u2a0b\u2a0c\7N\2\2\u2a0c\u2a0d\7U\2\2\u2a0d\u0732\3\2\2\2\u2a0e\u2a0f"+ + "\7U\2\2\u2a0f\u2a10\7V\2\2\u2a10\u2a11\7a\2\2\u2a11\u2a12\7G\2\2\u2a12"+ + "\u2a13\7Z\2\2\u2a13\u2a14\7V\2\2\u2a14\u2a15\7G\2\2\u2a15\u2a16\7T\2\2"+ + "\u2a16\u2a17\7K\2\2\u2a17\u2a18\7Q\2\2\u2a18\u2a19\7T\2\2\u2a19\u2a1a"+ + "\7T\2\2\u2a1a\u2a1b\7K\2\2\u2a1b\u2a1c\7P\2\2\u2a1c\u2a1d\7I\2\2\u2a1d"+ + "\u0734\3\2\2\2\u2a1e\u2a1f\7U\2\2\u2a1f\u2a20\7V\2\2\u2a20\u2a21\7a\2"+ + "\2\u2a21\u2a22\7I\2\2\u2a22\u2a23\7G\2\2\u2a23\u2a24\7Q\2\2\u2a24\u2a25"+ + "\7O\2\2\u2a25\u2a26\7E\2\2\u2a26\u2a27\7Q\2\2\u2a27\u2a28\7N\2\2\u2a28"+ + "\u2a29\7N\2\2\u2a29\u2a2a\7H\2\2\u2a2a\u2a2b\7T\2\2\u2a2b\u2a2c\7Q\2\2"+ + "\u2a2c\u2a2d\7O\2\2\u2a2d\u2a2e\7V\2\2\u2a2e\u2a2f\7G\2\2\u2a2f\u2a30"+ + "\7Z\2\2\u2a30\u2a31\7V\2\2\u2a31\u0736\3\2\2\2\u2a32\u2a33\7U\2\2\u2a33"+ + "\u2a34\7V\2\2\u2a34\u2a35\7a\2\2\u2a35\u2a36\7I\2\2\u2a36\u2a37\7G\2\2"+ + "\u2a37\u2a38\7Q\2\2\u2a38\u2a39\7O\2\2\u2a39\u2a3a\7E\2\2\u2a3a\u2a3b"+ + "\7Q\2\2\u2a3b\u2a3c\7N\2\2\u2a3c\u2a3d\7N\2\2\u2a3d\u2a3e\7H\2\2\u2a3e"+ + "\u2a3f\7T\2\2\u2a3f\u2a40\7Q\2\2\u2a40\u2a41\7O\2\2\u2a41\u2a42\7V\2\2"+ + "\u2a42\u2a43\7Z\2\2\u2a43\u2a44\7V\2\2\u2a44\u0738\3\2\2\2\u2a45\u2a46"+ + "\7U\2\2\u2a46\u2a47\7V\2\2\u2a47\u2a48\7a\2\2\u2a48\u2a49\7I\2\2\u2a49"+ + "\u2a4a\7G\2\2\u2a4a\u2a4b\7Q\2\2\u2a4b\u2a4c\7O\2\2\u2a4c\u2a4d\7E\2\2"+ + "\u2a4d\u2a4e\7Q\2\2\u2a4e\u2a4f\7N\2\2\u2a4f\u2a50\7N\2\2\u2a50\u2a51"+ + "\7H\2\2\u2a51\u2a52\7T\2\2\u2a52\u2a53\7Q\2\2\u2a53\u2a54\7O\2\2\u2a54"+ + "\u2a55\7Y\2\2\u2a55\u2a56\7M\2\2\u2a56\u2a57\7D\2\2\u2a57\u073a\3\2\2"+ + "\2\u2a58\u2a59\7U\2\2\u2a59\u2a5a\7V\2\2\u2a5a\u2a5b\7a\2\2\u2a5b\u2a5c"+ + "\7I\2\2\u2a5c\u2a5d\7G\2\2\u2a5d\u2a5e\7Q\2\2\u2a5e\u2a5f\7O\2\2\u2a5f"+ + "\u2a60\7G\2\2\u2a60\u2a61\7V\2\2\u2a61\u2a62\7T\2\2\u2a62\u2a63\7[\2\2"+ + "\u2a63\u2a64\7E\2\2\u2a64\u2a65\7Q\2\2\u2a65\u2a66\7N\2\2\u2a66\u2a67"+ + "\7N\2\2\u2a67\u2a68\7G\2\2\u2a68\u2a69\7E\2\2\u2a69\u2a6a\7V\2\2\u2a6a"+ + "\u2a6b\7K\2\2\u2a6b\u2a6c\7Q\2\2\u2a6c\u2a6d\7P\2\2\u2a6d\u2a6e\7H\2\2"+ + "\u2a6e\u2a6f\7T\2\2\u2a6f\u2a70\7Q\2\2\u2a70\u2a71\7O\2\2\u2a71\u2a72"+ + "\7V\2\2\u2a72\u2a73\7G\2\2\u2a73\u2a74\7Z\2\2\u2a74\u2a75\7V\2\2\u2a75"+ + "\u073c\3\2\2\2\u2a76\u2a77\7U\2\2\u2a77\u2a78\7V\2\2\u2a78\u2a79\7a\2"+ + "\2\u2a79\u2a7a\7I\2\2\u2a7a\u2a7b\7G\2\2\u2a7b\u2a7c\7Q\2\2\u2a7c\u2a7d"+ + "\7O\2\2\u2a7d\u2a7e\7G\2\2\u2a7e\u2a7f\7V\2\2\u2a7f\u2a80\7T\2\2\u2a80"+ + "\u2a81\7[\2\2\u2a81\u2a82\7E\2\2\u2a82\u2a83\7Q\2\2\u2a83\u2a84\7N\2\2"+ + "\u2a84\u2a85\7N\2\2\u2a85\u2a86\7G\2\2\u2a86\u2a87\7E\2\2\u2a87\u2a88"+ + "\7V\2\2\u2a88\u2a89\7K\2\2\u2a89\u2a8a\7Q\2\2\u2a8a\u2a8b\7P\2\2\u2a8b"+ + "\u2a8c\7H\2\2\u2a8c\u2a8d\7T\2\2\u2a8d\u2a8e\7Q\2\2\u2a8e\u2a8f\7O\2\2"+ + "\u2a8f\u2a90\7Y\2\2\u2a90\u2a91\7M\2\2\u2a91\u2a92\7D\2\2\u2a92\u073e"+ + "\3\2\2\2\u2a93\u2a94\7U\2\2\u2a94\u2a95\7V\2\2\u2a95\u2a96\7a\2\2\u2a96"+ + "\u2a97\7I\2\2\u2a97\u2a98\7G\2\2\u2a98\u2a99\7Q\2\2\u2a99\u2a9a\7O\2\2"+ + "\u2a9a\u2a9b\7G\2\2\u2a9b\u2a9c\7V\2\2\u2a9c\u2a9d\7T\2\2\u2a9d\u2a9e"+ + "\7[\2\2\u2a9e\u2a9f\7H\2\2\u2a9f\u2aa0\7T\2\2\u2aa0\u2aa1\7Q\2\2\u2aa1"+ + "\u2aa2\7O\2\2\u2aa2\u2aa3\7V\2\2\u2aa3\u2aa4\7G\2\2\u2aa4\u2aa5\7Z\2\2"+ + "\u2aa5\u2aa6\7V\2\2\u2aa6\u0740\3\2\2\2\u2aa7\u2aa8\7U\2\2\u2aa8\u2aa9"+ + "\7V\2\2\u2aa9\u2aaa\7a\2\2\u2aaa\u2aab\7I\2\2\u2aab\u2aac\7G\2\2\u2aac"+ + "\u2aad\7Q\2\2\u2aad\u2aae\7O\2\2\u2aae\u2aaf\7G\2\2\u2aaf\u2ab0\7V\2\2"+ + "\u2ab0\u2ab1\7T\2\2\u2ab1\u2ab2\7[\2\2\u2ab2\u2ab3\7H\2\2\u2ab3\u2ab4"+ + "\7T\2\2\u2ab4\u2ab5\7Q\2\2\u2ab5\u2ab6\7O\2\2\u2ab6\u2ab7\7Y\2\2\u2ab7"+ + "\u2ab8\7M\2\2\u2ab8\u2ab9\7D\2\2\u2ab9\u0742\3\2\2\2\u2aba\u2abb\7U\2"+ + "\2\u2abb\u2abc\7V\2\2\u2abc\u2abd\7a\2\2\u2abd\u2abe\7I\2\2\u2abe\u2abf"+ + "\7G\2\2\u2abf\u2ac0\7Q\2\2\u2ac0\u2ac1\7O\2\2\u2ac1\u2ac2\7G\2\2\u2ac2"+ + "\u2ac3\7V\2\2\u2ac3\u2ac4\7T\2\2\u2ac4\u2ac5\7[\2\2\u2ac5\u2ac6\7P\2\2"+ + "\u2ac6\u0744\3\2\2\2\u2ac7\u2ac8\7U\2\2\u2ac8\u2ac9\7V\2\2\u2ac9\u2aca"+ + "\7a\2\2\u2aca\u2acb\7I\2\2\u2acb\u2acc\7G\2\2\u2acc\u2acd\7Q\2\2\u2acd"+ + "\u2ace\7O\2\2\u2ace\u2acf\7G\2\2\u2acf\u2ad0\7V\2\2\u2ad0\u2ad1\7T\2\2"+ + "\u2ad1\u2ad2\7[\2\2\u2ad2\u2ad3\7V\2\2\u2ad3\u2ad4\7[\2\2\u2ad4\u2ad5"+ + "\7R\2\2\u2ad5\u2ad6\7G\2\2\u2ad6\u0746\3\2\2\2\u2ad7\u2ad8\7U\2\2\u2ad8"+ + "\u2ad9\7V\2\2\u2ad9\u2ada\7a\2\2\u2ada\u2adb\7I\2\2\u2adb\u2adc\7G\2\2"+ + "\u2adc\u2add\7Q\2\2\u2add\u2ade\7O\2\2\u2ade\u2adf\7H\2\2\u2adf\u2ae0"+ + "\7T\2\2\u2ae0\u2ae1\7Q\2\2\u2ae1\u2ae2\7O\2\2\u2ae2\u2ae3\7V\2\2\u2ae3"+ + "\u2ae4\7G\2\2\u2ae4\u2ae5\7Z\2\2\u2ae5\u2ae6\7V\2\2\u2ae6\u0748\3\2\2"+ + "\2\u2ae7\u2ae8\7U\2\2\u2ae8\u2ae9\7V\2\2\u2ae9\u2aea\7a\2\2\u2aea\u2aeb"+ + "\7I\2\2\u2aeb\u2aec\7G\2\2\u2aec\u2aed\7Q\2\2\u2aed\u2aee\7O\2\2\u2aee"+ + "\u2aef\7H\2\2\u2aef\u2af0\7T\2\2\u2af0\u2af1\7Q\2\2\u2af1\u2af2\7O\2\2"+ + "\u2af2\u2af3\7Y\2\2\u2af3\u2af4\7M\2\2\u2af4\u2af5\7D\2\2\u2af5\u074a"+ + "\3\2\2\2\u2af6\u2af7\7U\2\2\u2af7\u2af8\7V\2\2\u2af8\u2af9\7a\2\2\u2af9"+ + "\u2afa\7K\2\2\u2afa\u2afb\7P\2\2\u2afb\u2afc\7V\2\2\u2afc\u2afd\7G\2\2"+ + "\u2afd\u2afe\7T\2\2\u2afe\u2aff\7K\2\2\u2aff\u2b00\7Q\2\2\u2b00\u2b01"+ + "\7T\2\2\u2b01\u2b02\7T\2\2\u2b02\u2b03\7K\2\2\u2b03\u2b04\7P\2\2\u2b04"+ + "\u2b05\7I\2\2\u2b05\u2b06\7P\2\2\u2b06\u074c\3\2\2\2\u2b07\u2b08\7U\2"+ + "\2\u2b08\u2b09\7V\2\2\u2b09\u2b0a\7a\2\2\u2b0a\u2b0b\7K\2\2\u2b0b\u2b0c"+ + "\7P\2\2\u2b0c\u2b0d\7V\2\2\u2b0d\u2b0e\7G\2\2\u2b0e\u2b0f\7T\2\2\u2b0f"+ + "\u2b10\7U\2\2\u2b10\u2b11\7G\2\2\u2b11\u2b12\7E\2\2\u2b12\u2b13\7V\2\2"+ + "\u2b13\u2b14\7K\2\2\u2b14\u2b15\7Q\2\2\u2b15\u2b16\7P\2\2\u2b16\u074e"+ + "\3\2\2\2\u2b17\u2b18\7U\2\2\u2b18\u2b19\7V\2\2\u2b19\u2b1a\7a\2\2\u2b1a"+ + "\u2b1b\7K\2\2\u2b1b\u2b1c\7P\2\2\u2b1c\u2b1d\7V\2\2\u2b1d\u2b1e\7G\2\2"+ + "\u2b1e\u2b1f\7T\2\2\u2b1f\u2b20\7U\2\2\u2b20\u2b21\7G\2\2\u2b21\u2b22"+ + "\7E\2\2\u2b22\u2b23\7V\2\2\u2b23\u2b24\7U\2\2\u2b24\u0750\3\2\2\2\u2b25"+ + "\u2b26\7U\2\2\u2b26\u2b27\7V\2\2\u2b27\u2b28\7a\2\2\u2b28\u2b29\7K\2\2"+ + "\u2b29\u2b2a\7U\2\2\u2b2a\u2b2b\7E\2\2\u2b2b\u2b2c\7N\2\2\u2b2c\u2b2d"+ + "\7Q\2\2\u2b2d\u2b2e\7U\2\2\u2b2e\u2b2f\7G\2\2\u2b2f\u2b30\7F\2\2\u2b30"+ + "\u0752\3\2\2\2\u2b31\u2b32\7U\2\2\u2b32\u2b33\7V\2\2\u2b33\u2b34\7a\2"+ + "\2\u2b34\u2b35\7K\2\2\u2b35\u2b36\7U\2\2\u2b36\u2b37\7G\2\2\u2b37\u2b38"+ + "\7O\2\2\u2b38\u2b39\7R\2\2\u2b39\u2b3a\7V\2\2\u2b3a\u2b3b\7[\2\2\u2b3b"+ + "\u0754\3\2\2\2\u2b3c\u2b3d\7U\2\2\u2b3d\u2b3e\7V\2\2\u2b3e\u2b3f\7a\2"+ + "\2\u2b3f\u2b40\7K\2\2\u2b40\u2b41\7U\2\2\u2b41\u2b42\7U\2\2\u2b42\u2b43"+ + "\7K\2\2\u2b43\u2b44\7O\2\2\u2b44\u2b45\7R\2\2\u2b45\u2b46\7N\2\2\u2b46"+ + "\u2b47\7G\2\2\u2b47\u0756\3\2\2\2\u2b48\u2b49\7U\2\2\u2b49\u2b4a\7V\2"+ + "\2\u2b4a\u2b4b\7a\2\2\u2b4b\u2b4c\7N\2\2\u2b4c\u2b4d\7K\2\2\u2b4d\u2b4e"+ + "\7P\2\2\u2b4e\u2b4f\7G\2\2\u2b4f\u2b50\7H\2\2\u2b50\u2b51\7T\2\2\u2b51"+ + "\u2b52\7Q\2\2\u2b52\u2b53\7O\2\2\u2b53\u2b54\7V\2\2\u2b54\u2b55\7G\2\2"+ + "\u2b55\u2b56\7Z\2\2\u2b56\u2b57\7V\2\2\u2b57\u0758\3\2\2\2\u2b58\u2b59"+ + "\7U\2\2\u2b59\u2b5a\7V\2\2\u2b5a\u2b5b\7a\2\2\u2b5b\u2b5c\7N\2\2\u2b5c"+ + "\u2b5d\7K\2\2\u2b5d\u2b5e\7P\2\2\u2b5e\u2b5f\7G\2\2\u2b5f\u2b60\7H\2\2"+ + "\u2b60\u2b61\7T\2\2\u2b61\u2b62\7Q\2\2\u2b62\u2b63\7O\2\2\u2b63\u2b64"+ + "\7Y\2\2\u2b64\u2b65\7M\2\2\u2b65\u2b66\7D\2\2\u2b66\u075a\3\2\2\2\u2b67"+ + "\u2b68\7U\2\2\u2b68\u2b69\7V\2\2\u2b69\u2b6a\7a\2\2\u2b6a\u2b6b\7N\2\2"+ + "\u2b6b\u2b6c\7K\2\2\u2b6c\u2b6d\7P\2\2\u2b6d\u2b6e\7G\2\2\u2b6e\u2b6f"+ + "\7U\2\2\u2b6f\u2b70\7V\2\2\u2b70\u2b71\7T\2\2\u2b71\u2b72\7K\2\2\u2b72"+ + "\u2b73\7P\2\2\u2b73\u2b74\7I\2\2\u2b74\u2b75\7H\2\2\u2b75\u2b76\7T\2\2"+ + "\u2b76\u2b77\7Q\2\2\u2b77\u2b78\7O\2\2\u2b78\u2b79\7V\2\2\u2b79\u2b7a"+ + "\7G\2\2\u2b7a\u2b7b\7Z\2\2\u2b7b\u2b7c\7V\2\2\u2b7c\u075c\3\2\2\2\u2b7d"+ + "\u2b7e\7U\2\2\u2b7e\u2b7f\7V\2\2\u2b7f\u2b80\7a\2\2\u2b80\u2b81\7N\2\2"+ + "\u2b81\u2b82\7K\2\2\u2b82\u2b83\7P\2\2\u2b83\u2b84\7G\2\2\u2b84\u2b85"+ + "\7U\2\2\u2b85\u2b86\7V\2\2\u2b86\u2b87\7T\2\2\u2b87\u2b88\7K\2\2\u2b88"+ + "\u2b89\7P\2\2\u2b89\u2b8a\7I\2\2\u2b8a\u2b8b\7H\2\2\u2b8b\u2b8c\7T\2\2"+ + "\u2b8c\u2b8d\7Q\2\2\u2b8d\u2b8e\7O\2\2\u2b8e\u2b8f\7Y\2\2\u2b8f\u2b90"+ + "\7M\2\2\u2b90\u2b91\7D\2\2\u2b91\u075e\3\2\2\2\u2b92\u2b93\7U\2\2\u2b93"+ + "\u2b94\7V\2\2\u2b94\u2b95\7a\2\2\u2b95\u2b96\7P\2\2\u2b96\u2b97\7W\2\2"+ + "\u2b97\u2b98\7O\2\2\u2b98\u2b99\7I\2\2\u2b99\u2b9a\7G\2\2\u2b9a\u2b9b"+ + "\7Q\2\2\u2b9b\u2b9c\7O\2\2\u2b9c\u2b9d\7G\2\2\u2b9d\u2b9e\7V\2\2\u2b9e"+ + "\u2b9f\7T\2\2\u2b9f\u2ba0\7K\2\2\u2ba0\u2ba1\7G\2\2\u2ba1\u2ba2\7U\2\2"+ + "\u2ba2\u0760\3\2\2\2\u2ba3\u2ba4\7U\2\2\u2ba4\u2ba5\7V\2\2\u2ba5\u2ba6"+ + "\7a\2\2\u2ba6\u2ba7\7P\2\2\u2ba7\u2ba8\7W\2\2\u2ba8\u2ba9\7O\2\2\u2ba9"+ + "\u2baa\7K\2\2\u2baa\u2bab\7P\2\2\u2bab\u2bac\7V\2\2\u2bac\u2bad\7G\2\2"+ + "\u2bad\u2bae\7T\2\2\u2bae\u2baf\7K\2\2\u2baf\u2bb0\7Q\2\2\u2bb0\u2bb1"+ + "\7T\2\2\u2bb1\u2bb2\7T\2\2\u2bb2\u2bb3\7K\2\2\u2bb3\u2bb4\7P\2\2\u2bb4"+ + "\u2bb5\7I\2\2\u2bb5\u0762\3\2\2\2\u2bb6\u2bb7\7U\2\2\u2bb7\u2bb8\7V\2"+ + "\2\u2bb8\u2bb9\7a\2\2\u2bb9\u2bba\7P\2\2\u2bba\u2bbb\7W\2\2\u2bbb\u2bbc"+ + "\7O\2\2\u2bbc\u2bbd\7K\2\2\u2bbd\u2bbe\7P\2\2\u2bbe\u2bbf\7V\2\2\u2bbf"+ + "\u2bc0\7G\2\2\u2bc0\u2bc1\7T\2\2\u2bc1\u2bc2\7K\2\2\u2bc2\u2bc3\7Q\2\2"+ + "\u2bc3\u2bc4\7T\2\2\u2bc4\u2bc5\7T\2\2\u2bc5\u2bc6\7K\2\2\u2bc6\u2bc7"+ + "\7P\2\2\u2bc7\u2bc8\7I\2\2\u2bc8\u2bc9\7U\2\2\u2bc9\u0764\3\2\2\2\u2bca"+ + "\u2bcb\7U\2\2\u2bcb\u2bcc\7V\2\2\u2bcc\u2bcd\7a\2\2\u2bcd\u2bce\7P\2\2"+ + "\u2bce\u2bcf\7W\2\2\u2bcf\u2bd0\7O\2\2\u2bd0\u2bd1\7R\2\2\u2bd1\u2bd2"+ + "\7Q\2\2\u2bd2\u2bd3\7K\2\2\u2bd3\u2bd4\7P\2\2\u2bd4\u2bd5\7V\2\2\u2bd5"+ + "\u2bd6\7U\2\2\u2bd6\u0766\3\2\2\2\u2bd7\u2bd8\7U\2\2\u2bd8\u2bd9\7V\2"+ + "\2\u2bd9\u2bda\7a\2\2\u2bda\u2bdb\7Q\2\2\u2bdb\u2bdc\7X\2\2\u2bdc\u2bdd"+ + "\7G\2\2\u2bdd\u2bde\7T\2\2\u2bde\u2bdf\7N\2\2\u2bdf\u2be0\7C\2\2\u2be0"+ + "\u2be1\7R\2\2\u2be1\u2be2\7U\2\2\u2be2\u0768\3\2\2\2\u2be3\u2be4\7U\2"+ + "\2\u2be4\u2be5\7V\2\2\u2be5\u2be6\7a\2\2\u2be6\u2be7\7R\2\2\u2be7\u2be8"+ + "\7Q\2\2\u2be8\u2be9\7K\2\2\u2be9\u2bea\7P\2\2\u2bea\u2beb\7V\2\2\u2beb"+ + "\u2bec\7H\2\2\u2bec\u2bed\7T\2\2\u2bed\u2bee\7Q\2\2\u2bee\u2bef\7O\2\2"+ + "\u2bef\u2bf0\7V\2\2\u2bf0\u2bf1\7G\2\2\u2bf1\u2bf2\7Z\2\2\u2bf2\u2bf3"+ + "\7V\2\2\u2bf3\u076a\3\2\2\2\u2bf4\u2bf5\7U\2\2\u2bf5\u2bf6\7V\2\2\u2bf6"+ + "\u2bf7\7a\2\2\u2bf7\u2bf8\7R\2\2\u2bf8\u2bf9\7Q\2\2\u2bf9\u2bfa\7K\2\2"+ + "\u2bfa\u2bfb\7P\2\2\u2bfb\u2bfc\7V\2\2\u2bfc\u2bfd\7H\2\2\u2bfd\u2bfe"+ + "\7T\2\2\u2bfe\u2bff\7Q\2\2\u2bff\u2c00\7O\2\2\u2c00\u2c01\7Y\2\2\u2c01"+ + "\u2c02\7M\2\2\u2c02\u2c03\7D\2\2\u2c03\u076c\3\2\2\2\u2c04\u2c05\7U\2"+ + "\2\u2c05\u2c06\7V\2\2\u2c06\u2c07\7a\2\2\u2c07\u2c08\7R\2\2\u2c08\u2c09"+ + "\7Q\2\2\u2c09\u2c0a\7K\2\2\u2c0a\u2c0b\7P\2\2\u2c0b\u2c0c\7V\2\2\u2c0c"+ + "\u2c0d\7P\2\2\u2c0d\u076e\3\2\2\2\u2c0e\u2c0f\7U\2\2\u2c0f\u2c10\7V\2"+ + "\2\u2c10\u2c11\7a\2\2\u2c11\u2c12\7R\2\2\u2c12\u2c13\7Q\2\2\u2c13\u2c14"+ + "\7N\2\2\u2c14\u2c15\7[\2\2\u2c15\u2c16\7H\2\2\u2c16\u2c17\7T\2\2\u2c17"+ + "\u2c18\7Q\2\2\u2c18\u2c19\7O\2\2\u2c19\u2c1a\7V\2\2\u2c1a\u2c1b\7G\2\2"+ + "\u2c1b\u2c1c\7Z\2\2\u2c1c\u2c1d\7V\2\2\u2c1d\u0770\3\2\2\2\u2c1e\u2c1f"+ + "\7U\2\2\u2c1f\u2c20\7V\2\2\u2c20\u2c21\7a\2\2\u2c21\u2c22\7R\2\2\u2c22"+ + "\u2c23\7Q\2\2\u2c23\u2c24\7N\2\2\u2c24\u2c25\7[\2\2\u2c25\u2c26\7H\2\2"+ + "\u2c26\u2c27\7T\2\2\u2c27\u2c28\7Q\2\2\u2c28\u2c29\7O\2\2\u2c29\u2c2a"+ + "\7Y\2\2\u2c2a\u2c2b\7M\2\2\u2c2b\u2c2c\7D\2\2\u2c2c\u0772\3\2\2\2\u2c2d"+ + "\u2c2e\7U\2\2\u2c2e\u2c2f\7V\2\2\u2c2f\u2c30\7a\2\2\u2c30\u2c31\7R\2\2"+ + "\u2c31\u2c32\7Q\2\2\u2c32\u2c33\7N\2\2\u2c33\u2c34\7[\2\2\u2c34\u2c35"+ + "\7I\2\2\u2c35\u2c36\7Q\2\2\u2c36\u2c37\7P\2\2\u2c37\u2c38\7H\2\2\u2c38"+ + "\u2c39\7T\2\2\u2c39\u2c3a\7Q\2\2\u2c3a\u2c3b\7O\2\2\u2c3b\u2c3c\7V\2\2"+ + "\u2c3c\u2c3d\7G\2\2\u2c3d\u2c3e\7Z\2\2\u2c3e\u2c3f\7V\2\2\u2c3f\u0774"+ + "\3\2\2\2\u2c40\u2c41\7U\2\2\u2c41\u2c42\7V\2\2\u2c42\u2c43\7a\2\2\u2c43"+ + "\u2c44\7R\2\2\u2c44\u2c45\7Q\2\2\u2c45\u2c46\7N\2\2\u2c46\u2c47\7[\2\2"+ + "\u2c47\u2c48\7I\2\2\u2c48\u2c49\7Q\2\2\u2c49\u2c4a\7P\2\2\u2c4a\u2c4b"+ + "\7H\2\2\u2c4b\u2c4c\7T\2\2\u2c4c\u2c4d\7Q\2\2\u2c4d\u2c4e\7O\2\2\u2c4e"+ + "\u2c4f\7Y\2\2\u2c4f\u2c50\7M\2\2\u2c50\u2c51\7D\2\2\u2c51\u0776\3\2\2"+ + "\2\u2c52\u2c53\7U\2\2\u2c53\u2c54\7V\2\2\u2c54\u2c55\7a\2\2\u2c55\u2c56"+ + "\7U\2\2\u2c56\u2c57\7T\2\2\u2c57\u2c58\7K\2\2\u2c58\u2c59\7F\2\2\u2c59"+ + "\u0778\3\2\2\2\u2c5a\u2c5b\7U\2\2\u2c5b\u2c5c\7V\2\2\u2c5c\u2c5d\7a\2"+ + "\2\u2c5d\u2c5e\7U\2\2\u2c5e\u2c5f\7V\2\2\u2c5f\u2c60\7C\2\2\u2c60\u2c61"+ + "\7T\2\2\u2c61\u2c62\7V\2\2\u2c62\u2c63\7R\2\2\u2c63\u2c64\7Q\2\2\u2c64"+ + "\u2c65\7K\2\2\u2c65\u2c66\7P\2\2\u2c66\u2c67\7V\2\2\u2c67\u077a\3\2\2"+ + "\2\u2c68\u2c69\7U\2\2\u2c69\u2c6a\7V\2\2\u2c6a\u2c6b\7a\2\2\u2c6b\u2c6c"+ + "\7U\2\2\u2c6c\u2c6d\7[\2\2\u2c6d\u2c6e\7O\2\2\u2c6e\u2c6f\7F\2\2\u2c6f"+ + "\u2c70\7K\2\2\u2c70\u2c71\7H\2\2\u2c71\u2c72\7H\2\2\u2c72\u2c73\7G\2\2"+ + "\u2c73\u2c74\7T\2\2\u2c74\u2c75\7G\2\2\u2c75\u2c76\7P\2\2\u2c76\u2c77"+ + "\7E\2\2\u2c77\u2c78\7G\2\2\u2c78\u077c\3\2\2\2\u2c79\u2c7a\7U\2\2\u2c7a"+ + "\u2c7b\7V\2\2\u2c7b\u2c7c\7a\2\2\u2c7c\u2c7d\7V\2\2\u2c7d\u2c7e\7Q\2\2"+ + "\u2c7e\u2c7f\7W\2\2\u2c7f\u2c80\7E\2\2\u2c80\u2c81\7J\2\2\u2c81\u2c82"+ + "\7G\2\2\u2c82\u2c83\7U\2\2\u2c83\u077e\3\2\2\2\u2c84\u2c85\7U\2\2\u2c85"+ + "\u2c86\7V\2\2\u2c86\u2c87\7a\2\2\u2c87\u2c88\7W\2\2\u2c88\u2c89\7P\2\2"+ + "\u2c89\u2c8a\7K\2\2\u2c8a\u2c8b\7Q\2\2\u2c8b\u2c8c\7P\2\2\u2c8c\u0780"+ + "\3\2\2\2\u2c8d\u2c8e\7U\2\2\u2c8e\u2c8f\7V\2\2\u2c8f\u2c90\7a\2\2\u2c90"+ + "\u2c91\7Y\2\2\u2c91\u2c92\7K\2\2\u2c92\u2c93\7V\2\2\u2c93\u2c94\7J\2\2"+ + "\u2c94\u2c95\7K\2\2\u2c95\u2c96\7P\2\2\u2c96\u0782\3\2\2\2\u2c97\u2c98"+ + "\7U\2\2\u2c98\u2c99\7V\2\2\u2c99\u2c9a\7a\2\2\u2c9a\u2c9b\7Z\2\2\u2c9b"+ + "\u0784\3\2\2\2\u2c9c\u2c9d\7U\2\2\u2c9d\u2c9e\7V\2\2\u2c9e\u2c9f\7a\2"+ + "\2\u2c9f\u2ca0\7[\2\2\u2ca0\u0786\3\2\2\2\u2ca1\u2ca2\7U\2\2\u2ca2\u2ca3"+ + "\7W\2\2\u2ca3\u2ca4\7D\2\2\u2ca4\u2ca5\7F\2\2\u2ca5\u2ca6\7C\2\2\u2ca6"+ + "\u2ca7\7V\2\2\u2ca7\u2ca8\7G\2\2\u2ca8\u0788\3\2\2\2\u2ca9\u2caa\7U\2"+ + "\2\u2caa\u2cab\7W\2\2\u2cab\u2cac\7D\2\2\u2cac\u2cad\7U\2\2\u2cad\u2cae"+ + "\7V\2\2\u2cae\u2caf\7T\2\2\u2caf\u2cb0\7K\2\2\u2cb0\u2cb1\7P\2\2\u2cb1"+ + "\u2cb2\7I\2\2\u2cb2\u2cb3\7a\2\2\u2cb3\u2cb4\7K\2\2\u2cb4\u2cb5\7P\2\2"+ + "\u2cb5\u2cb6\7F\2\2\u2cb6\u2cb7\7G\2\2\u2cb7\u2cb8\7Z\2\2\u2cb8\u078a"+ + "\3\2\2\2\u2cb9\u2cba\7U\2\2\u2cba\u2cbb\7W\2\2\u2cbb\u2cbc\7D\2\2\u2cbc"+ + "\u2cbd\7V\2\2\u2cbd\u2cbe\7K\2\2\u2cbe\u2cbf\7O\2\2\u2cbf\u2cc0\7G\2\2"+ + "\u2cc0\u078c\3\2\2\2\u2cc1\u2cc2\7U\2\2\u2cc2\u2cc3\7[\2\2\u2cc3\u2cc4"+ + "\7U\2\2\u2cc4\u2cc5\7V\2\2\u2cc5\u2cc6\7G\2\2\u2cc6\u2cc7\7O\2\2\u2cc7"+ + "\u2cc8\7a\2\2\u2cc8\u2cc9\7W\2\2\u2cc9\u2cca\7U\2\2\u2cca\u2ccb\7G\2\2"+ + "\u2ccb\u2ccc\7T\2\2\u2ccc\u078e\3\2\2\2\u2ccd\u2cce\7V\2\2\u2cce\u2ccf"+ + "\7C\2\2\u2ccf\u2cd0\7P\2\2\u2cd0\u0790\3\2\2\2\u2cd1\u2cd2\7V\2\2\u2cd2"+ + "\u2cd3\7K\2\2\u2cd3\u2cd4\7O\2\2\u2cd4\u2cd5\7G\2\2\u2cd5\u2cd6\7F\2\2"+ + "\u2cd6\u2cd7\7K\2\2\u2cd7\u2cd8\7H\2\2\u2cd8\u2cd9\7H\2\2\u2cd9\u0792"+ + "\3\2\2\2\u2cda\u2cdb\7V\2\2\u2cdb\u2cdc\7K\2\2\u2cdc\u2cdd\7O\2\2\u2cdd"+ + "\u2cde\7G\2\2\u2cde\u2cdf\7U\2\2\u2cdf\u2ce0\7V\2\2\u2ce0\u2ce1\7C\2\2"+ + "\u2ce1\u2ce2\7O\2\2\u2ce2\u2ce3\7R\2\2\u2ce3\u2ce4\7C\2\2\u2ce4\u2ce5"+ + "\7F\2\2\u2ce5\u2ce6\7F\2\2\u2ce6\u0794\3\2\2\2\u2ce7\u2ce8\7V\2\2\u2ce8"+ + "\u2ce9\7K\2\2\u2ce9\u2cea\7O\2\2\u2cea\u2ceb\7G\2\2\u2ceb\u2cec\7U\2\2"+ + "\u2cec\u2ced\7V\2\2\u2ced\u2cee\7C\2\2\u2cee\u2cef\7O\2\2\u2cef\u2cf0"+ + "\7R\2\2\u2cf0\u2cf1\7F\2\2\u2cf1\u2cf2\7K\2\2\u2cf2\u2cf3\7H\2\2\u2cf3"+ + "\u2cf4\7H\2\2\u2cf4\u0796\3\2\2\2\u2cf5\u2cf6\7V\2\2\u2cf6\u2cf7\7K\2"+ + "\2\u2cf7\u2cf8\7O\2\2\u2cf8\u2cf9\7G\2\2\u2cf9\u2cfa\7a\2\2\u2cfa\u2cfb"+ + "\7H\2\2\u2cfb\u2cfc\7Q\2\2\u2cfc\u2cfd\7T\2\2\u2cfd\u2cfe\7O\2\2\u2cfe"+ + "\u2cff\7C\2\2\u2cff\u2d00\7V\2\2\u2d00\u0798\3\2\2\2\u2d01\u2d02\7V\2"+ + "\2\u2d02\u2d03\7K\2\2\u2d03\u2d04\7O\2\2\u2d04\u2d05\7G\2\2\u2d05\u2d06"+ + "\7a\2\2\u2d06\u2d07\7V\2\2\u2d07\u2d08\7Q\2\2\u2d08\u2d09\7a\2\2\u2d09"+ + "\u2d0a\7U\2\2\u2d0a\u2d0b\7G\2\2\u2d0b\u2d0c\7E\2\2\u2d0c\u079a\3\2\2"+ + "\2\u2d0d\u2d0e\7V\2\2\u2d0e\u2d0f\7Q\2\2\u2d0f\u2d10\7W\2\2\u2d10\u2d11"+ + "\7E\2\2\u2d11\u2d12\7J\2\2\u2d12\u2d13\7G\2\2\u2d13\u2d14\7U\2\2\u2d14"+ + "\u079c\3\2\2\2\u2d15\u2d16\7V\2\2\u2d16\u2d17\7Q\2\2\u2d17\u2d18\7a\2"+ + "\2\u2d18\u2d19\7D\2\2\u2d19\u2d1a\7C\2\2\u2d1a\u2d1b\7U\2\2\u2d1b\u2d1c"+ + "\7G\2\2\u2d1c\u2d1d\78\2\2\u2d1d\u2d1e\7\66\2\2\u2d1e\u079e\3\2\2\2\u2d1f"+ + "\u2d20\7V\2\2\u2d20\u2d21\7Q\2\2\u2d21\u2d22\7a\2\2\u2d22\u2d23\7F\2\2"+ + "\u2d23\u2d24\7C\2\2\u2d24\u2d25\7[\2\2\u2d25\u2d26\7U\2\2\u2d26\u07a0"+ + "\3\2\2\2\u2d27\u2d28\7V\2\2\u2d28\u2d29\7Q\2\2\u2d29\u2d2a\7a\2\2\u2d2a"+ + "\u2d2b\7U\2\2\u2d2b\u2d2c\7G\2\2\u2d2c\u2d2d\7E\2\2\u2d2d\u2d2e\7Q\2\2"+ + "\u2d2e\u2d2f\7P\2\2\u2d2f\u2d30\7F\2\2\u2d30\u2d31\7U\2\2\u2d31\u07a2"+ + "\3\2\2\2\u2d32\u2d33\7W\2\2\u2d33\u2d34\7E\2\2\u2d34\u2d35\7C\2\2\u2d35"+ + "\u2d36\7U\2\2\u2d36\u2d37\7G\2\2\u2d37\u07a4\3\2\2\2\u2d38\u2d39\7W\2"+ + "\2\u2d39\u2d3a\7P\2\2\u2d3a\u2d3b\7E\2\2\u2d3b\u2d3c\7Q\2\2\u2d3c\u2d3d"+ + "\7O\2\2\u2d3d\u2d3e\7R\2\2\u2d3e\u2d3f\7T\2\2\u2d3f\u2d40\7G\2\2\u2d40"+ + "\u2d41\7U\2\2\u2d41\u2d42\7U\2\2\u2d42\u07a6\3\2\2\2\u2d43\u2d44\7W\2"+ + "\2\u2d44\u2d45\7P\2\2\u2d45\u2d46\7E\2\2\u2d46\u2d47\7Q\2\2\u2d47\u2d48"+ + "\7O\2\2\u2d48\u2d49\7R\2\2\u2d49\u2d4a\7T\2\2\u2d4a\u2d4b\7G\2\2\u2d4b"+ + "\u2d4c\7U\2\2\u2d4c\u2d4d\7U\2\2\u2d4d\u2d4e\7G\2\2\u2d4e\u2d4f\7F\2\2"+ + "\u2d4f\u2d50\7a\2\2\u2d50\u2d51\7N\2\2\u2d51\u2d52\7G\2\2\u2d52\u2d53"+ + "\7P\2\2\u2d53\u2d54\7I\2\2\u2d54\u2d55\7V\2\2\u2d55\u2d56\7J\2\2\u2d56"+ + "\u07a8\3\2\2\2\u2d57\u2d58\7W\2\2\u2d58\u2d59\7P\2\2\u2d59\u2d5a\7J\2"+ + "\2\u2d5a\u2d5b\7G\2\2\u2d5b\u2d5c\7Z\2\2\u2d5c\u07aa\3\2\2\2\u2d5d\u2d5e"+ + "\7W\2\2\u2d5e\u2d5f\7P\2\2\u2d5f\u2d60\7K\2\2\u2d60\u2d61\7Z\2\2\u2d61"+ + "\u2d62\7a\2\2\u2d62\u2d63\7V\2\2\u2d63\u2d64\7K\2\2\u2d64\u2d65\7O\2\2"+ + "\u2d65\u2d66\7G\2\2\u2d66\u2d67\7U\2\2\u2d67\u2d68\7V\2\2\u2d68\u2d69"+ + "\7C\2\2\u2d69\u2d6a\7O\2\2\u2d6a\u2d6b\7R\2\2\u2d6b\u07ac\3\2\2\2\u2d6c"+ + "\u2d6d\7W\2\2\u2d6d\u2d6e\7R\2\2\u2d6e\u2d6f\7F\2\2\u2d6f\u2d70\7C\2\2"+ + "\u2d70\u2d71\7V\2\2\u2d71\u2d72\7G\2\2\u2d72\u2d73\7Z\2\2\u2d73\u2d74"+ + "\7O\2\2\u2d74\u2d75\7N\2\2\u2d75\u07ae\3\2\2\2\u2d76\u2d77\7W\2\2\u2d77"+ + "\u2d78\7R\2\2\u2d78\u2d79\7R\2\2\u2d79\u2d7a\7G\2\2\u2d7a\u2d7b\7T\2\2"+ + "\u2d7b\u07b0\3\2\2\2\u2d7c\u2d7d\7W\2\2\u2d7d\u2d7e\7W\2\2\u2d7e\u2d7f"+ + "\7K\2\2\u2d7f\u2d80\7F\2\2\u2d80\u07b2\3\2\2\2\u2d81\u2d82\7W\2\2\u2d82"+ + "\u2d83\7W\2\2\u2d83\u2d84\7K\2\2\u2d84\u2d85\7F\2\2\u2d85\u2d86\7a\2\2"+ + "\u2d86\u2d87\7U\2\2\u2d87\u2d88\7J\2\2\u2d88\u2d89\7Q\2\2\u2d89\u2d8a"+ + "\7T\2\2\u2d8a\u2d8b\7V\2\2\u2d8b\u07b4\3\2\2\2\u2d8c\u2d8d\7X\2\2\u2d8d"+ + "\u2d8e\7C\2\2\u2d8e\u2d8f\7N\2\2\u2d8f\u2d90\7K\2\2\u2d90\u2d91\7F\2\2"+ + "\u2d91\u2d92\7C\2\2\u2d92\u2d93\7V\2\2\u2d93\u2d94\7G\2\2\u2d94\u2d95"+ + "\7a\2\2\u2d95\u2d96\7R\2\2\u2d96\u2d97\7C\2\2\u2d97\u2d98\7U\2\2\u2d98"+ + "\u2d99\7U\2\2\u2d99\u2d9a\7Y\2\2\u2d9a\u2d9b\7Q\2\2\u2d9b\u2d9c\7T\2\2"+ + "\u2d9c\u2d9d\7F\2\2\u2d9d\u2d9e\7a\2\2\u2d9e\u2d9f\7U\2\2\u2d9f\u2da0"+ + "\7V\2\2\u2da0\u2da1\7T\2\2\u2da1\u2da2\7G\2\2\u2da2\u2da3\7P\2\2\u2da3"+ + "\u2da4\7I\2\2\u2da4\u2da5\7V\2\2\u2da5\u2da6\7J\2\2\u2da6\u07b6\3\2\2"+ + "\2\u2da7\u2da8\7X\2\2\u2da8\u2da9\7G\2\2\u2da9\u2daa\7T\2\2\u2daa\u2dab"+ + "\7U\2\2\u2dab\u2dac\7K\2\2\u2dac\u2dad\7Q\2\2\u2dad\u2dae\7P\2\2\u2dae"+ + "\u07b8\3\2\2\2\u2daf\u2db0\7Y\2\2\u2db0\u2db1\7C\2\2\u2db1\u2db2\7K\2"+ + "\2\u2db2\u2db3\7V\2\2\u2db3\u2db4\7a\2\2\u2db4\u2db5\7W\2\2\u2db5\u2db6"+ + "\7P\2\2\u2db6\u2db7\7V\2\2\u2db7\u2db8\7K\2\2\u2db8\u2db9\7N\2\2\u2db9"+ + "\u2dba\7a\2\2\u2dba\u2dbb\7U\2\2\u2dbb\u2dbc\7S\2\2\u2dbc\u2dbd\7N\2\2"+ + "\u2dbd\u2dbe\7a\2\2\u2dbe\u2dbf\7V\2\2\u2dbf\u2dc0\7J\2\2\u2dc0\u2dc1"+ + "\7T\2\2\u2dc1\u2dc2\7G\2\2\u2dc2\u2dc3\7C\2\2\u2dc3\u2dc4\7F\2\2\u2dc4"+ + "\u2dc5\7a\2\2\u2dc5\u2dc6\7C\2\2\u2dc6\u2dc7\7H\2\2\u2dc7\u2dc8\7V\2\2"+ + "\u2dc8\u2dc9\7G\2\2\u2dc9\u2dca\7T\2\2\u2dca\u2dcb\7a\2\2\u2dcb\u2dcc"+ + "\7I\2\2\u2dcc\u2dcd\7V\2\2\u2dcd\u2dce\7K\2\2\u2dce\u2dcf\7F\2\2\u2dcf"+ + "\u2dd0\7U\2\2\u2dd0\u07ba\3\2\2\2\u2dd1\u2dd2\7Y\2\2\u2dd2\u2dd3\7G\2"+ + "\2\u2dd3\u2dd4\7G\2\2\u2dd4\u2dd5\7M\2\2\u2dd5\u2dd6\7F\2\2\u2dd6\u2dd7"+ + "\7C\2\2\u2dd7\u2dd8\7[\2\2\u2dd8\u07bc\3\2\2\2\u2dd9\u2dda\7Y\2\2\u2dda"+ + "\u2ddb\7G\2\2\u2ddb\u2ddc\7G\2\2\u2ddc\u2ddd\7M\2\2\u2ddd\u2dde\7Q\2\2"+ + "\u2dde\u2ddf\7H\2\2\u2ddf\u2de0\7[\2\2\u2de0\u2de1\7G\2\2\u2de1\u2de2"+ + "\7C\2\2\u2de2\u2de3\7T\2\2\u2de3\u07be\3\2\2\2\u2de4\u2de5\7Y\2\2\u2de5"+ + "\u2de6\7G\2\2\u2de6\u2de7\7K\2\2\u2de7\u2de8\7I\2\2\u2de8\u2de9\7J\2\2"+ + "\u2de9\u2dea\7V\2\2\u2dea\u2deb\7a\2\2\u2deb\u2dec\7U\2\2\u2dec\u2ded"+ + "\7V\2\2\u2ded\u2dee\7T\2\2\u2dee\u2def\7K\2\2\u2def\u2df0\7P\2\2\u2df0"+ + "\u2df1\7I\2\2\u2df1\u07c0\3\2\2\2\u2df2\u2df3\7Y\2\2\u2df3\u2df4\7K\2"+ + "\2\u2df4\u2df5\7V\2\2\u2df5\u2df6\7J\2\2\u2df6\u2df7\7K\2\2\u2df7\u2df8"+ + "\7P\2\2\u2df8\u07c2\3\2\2\2\u2df9\u2dfa\7[\2\2\u2dfa\u2dfb\7G\2\2\u2dfb"+ + "\u2dfc\7C\2\2\u2dfc\u2dfd\7T\2\2\u2dfd\u2dfe\7Y\2\2\u2dfe\u2dff\7G\2\2"+ + "\u2dff\u2e00\7G\2\2\u2e00\u2e01\7M\2\2\u2e01\u07c4\3\2\2\2\u2e02\u2e03"+ + "\7[\2\2\u2e03\u07c6\3\2\2\2\u2e04\u2e05\7Z\2\2\u2e05\u07c8\3\2\2\2\u2e06"+ + "\u2e07\7<\2\2\u2e07\u2e08\7?\2\2\u2e08\u07ca\3\2\2\2\u2e09\u2e0a\7-\2"+ + "\2\u2e0a\u2e0b\7?\2\2\u2e0b\u07cc\3\2\2\2\u2e0c\u2e0d\7/\2\2\u2e0d\u2e0e"+ + "\7?\2\2\u2e0e\u07ce\3\2\2\2\u2e0f\u2e10\7,\2\2\u2e10\u2e11\7?\2\2\u2e11"+ + "\u07d0\3\2\2\2\u2e12\u2e13\7\61\2\2\u2e13\u2e14\7?\2\2\u2e14\u07d2\3\2"+ + "\2\2\u2e15\u2e16\7\'\2\2\u2e16\u2e17\7?\2\2\u2e17\u07d4\3\2\2\2\u2e18"+ + "\u2e19\7(\2\2\u2e19\u2e1a\7?\2\2\u2e1a\u07d6\3\2\2\2\u2e1b\u2e1c\7`\2"+ + "\2\u2e1c\u2e1d\7?\2\2\u2e1d\u07d8\3\2\2\2\u2e1e\u2e1f\7~\2\2\u2e1f\u2e20"+ + "\7?\2\2\u2e20\u07da\3\2\2\2\u2e21\u2e22\7,\2\2\u2e22\u07dc\3\2\2\2\u2e23"+ + "\u2e24\7\61\2\2\u2e24\u07de\3\2\2\2\u2e25\u2e26\7\'\2\2\u2e26\u07e0\3"+ + "\2\2\2\u2e27\u2e28\7-\2\2\u2e28\u07e2\3\2\2\2\u2e29\u2e2a\7/\2\2\u2e2a"+ + "\u2e2b\7/\2\2\u2e2b\u07e4\3\2\2\2\u2e2c\u2e2d\7/\2\2\u2e2d\u07e6\3\2\2"+ + "\2\u2e2e\u2e2f\7F\2\2\u2e2f\u2e30\7K\2\2\u2e30\u2e31\7X\2\2\u2e31\u07e8"+ + "\3\2\2\2\u2e32\u2e33\7O\2\2\u2e33\u2e34\7Q\2\2\u2e34\u2e35\7F\2\2\u2e35"+ + "\u07ea\3\2\2\2\u2e36\u2e37\7?\2\2\u2e37\u07ec\3\2\2\2\u2e38\u2e39\7@\2"+ + "\2\u2e39\u07ee\3\2\2\2\u2e3a\u2e3b\7>\2\2\u2e3b\u07f0\3\2\2\2\u2e3c\u2e3d"+ + "\7#\2\2\u2e3d\u07f2\3\2\2\2\u2e3e\u2e3f\7\u0080\2\2\u2e3f\u07f4\3\2\2"+ + "\2\u2e40\u2e41\7~\2\2\u2e41\u07f6\3\2\2\2\u2e42\u2e43\7(\2\2\u2e43\u07f8"+ + "\3\2\2\2\u2e44\u2e45\7`\2\2\u2e45\u07fa\3\2\2\2\u2e46\u2e47\7\60\2\2\u2e47"+ + "\u07fc\3\2\2\2\u2e48\u2e49\7*\2\2\u2e49\u07fe\3\2\2\2\u2e4a\u2e4b\7+\2"+ + "\2\u2e4b\u0800\3\2\2\2\u2e4c\u2e4d\7.\2\2\u2e4d\u0802\3\2\2\2\u2e4e\u2e4f"+ + "\7=\2\2\u2e4f\u0804\3\2\2\2\u2e50\u2e51\7B\2\2\u2e51\u0806\3\2\2\2\u2e52"+ + "\u2e53\7\62\2\2\u2e53\u0808\3\2\2\2\u2e54\u2e55\7\63\2\2\u2e55\u080a\3"+ + "\2\2\2\u2e56\u2e57\7\64\2\2\u2e57\u080c\3\2\2\2\u2e58\u2e59\7)\2\2\u2e59"+ + "\u080e\3\2\2\2\u2e5a\u2e5b\7$\2\2\u2e5b\u0810\3\2\2\2\u2e5c\u2e5d\7b\2"+ + "\2\u2e5d\u0812\3\2\2\2\u2e5e\u2e5f\7<\2\2\u2e5f\u0814\3\2\2\2\u2e60\u2e64"+ + "\5\u080d\u0407\2\u2e61\u2e64\5\u080f\u0408\2\u2e62\u2e64\5\u0811\u0409"+ + "\2\u2e63\u2e60\3\2\2\2\u2e63\u2e61\3\2\2\2\u2e63\u2e62\3\2\2\2\u2e64\u0816"+ + "\3\2\2\2\u2e65\u2e66\7b\2\2\u2e66\u2e67\5\u0837\u041c\2\u2e67\u2e68\7"+ + "b\2\2\u2e68\u0818\3\2\2\2\u2e69\u2e6b\5\u0845\u0423\2\u2e6a\u2e69\3\2"+ + "\2\2\u2e6b\u2e6c\3\2\2\2\u2e6c\u2e6a\3\2\2\2\u2e6c\u2e6d\3\2\2\2\u2e6d"+ + "\u2e6e\3\2\2\2\u2e6e\u2e6f\t\4\2\2\u2e6f\u081a\3\2\2\2\u2e70\u2e71\7P"+ + "\2\2\u2e71\u2e72\5\u083f\u0420\2\u2e72\u081c\3\2\2\2\u2e73\u2e77\5\u083d"+ + "\u041f\2\u2e74\u2e77\5\u083f\u0420\2\u2e75\u2e77\5\u0841\u0421\2\u2e76"+ + "\u2e73\3\2\2\2\u2e76\u2e74\3\2\2\2\u2e76\u2e75\3\2\2\2\u2e77\u081e\3\2"+ + "\2\2\u2e78\u2e7a\5\u0845\u0423\2\u2e79\u2e78\3\2\2\2\u2e7a\u2e7b\3\2\2"+ + "\2\u2e7b\u2e79\3\2\2\2\u2e7b\u2e7c\3\2\2\2\u2e7c\u0820\3\2\2\2\u2e7d\u2e7e"+ + "\7Z\2\2\u2e7e\u2e82\7)\2\2\u2e7f\u2e80\5\u0843\u0422\2\u2e80\u2e81\5\u0843"+ + "\u0422\2\u2e81\u2e83\3\2\2\2\u2e82\u2e7f\3\2\2\2\u2e83\u2e84\3\2\2\2\u2e84"+ + "\u2e82\3\2\2\2\u2e84\u2e85\3\2\2\2\u2e85\u2e86\3\2\2\2\u2e86\u2e87\7)"+ + "\2\2\u2e87\u2e91\3\2\2\2\u2e88\u2e89\7\62\2\2\u2e89\u2e8a\7Z\2\2\u2e8a"+ + "\u2e8c\3\2\2\2\u2e8b\u2e8d\5\u0843\u0422\2\u2e8c\u2e8b\3\2\2\2\u2e8d\u2e8e"+ + "\3\2\2\2\u2e8e\u2e8c\3\2\2\2\u2e8e\u2e8f\3\2\2\2\u2e8f\u2e91\3\2\2\2\u2e90"+ + "\u2e7d\3\2\2\2\u2e90\u2e88\3\2\2\2\u2e91\u0822\3\2\2\2\u2e92\u2e94\5\u0845"+ + "\u0423\2\u2e93\u2e92\3\2\2\2\u2e94\u2e95\3\2\2\2\u2e95\u2e93\3\2\2\2\u2e95"+ + "\u2e96\3\2\2\2\u2e96\u2e98\3\2\2\2\u2e97\u2e93\3\2\2\2\u2e97\u2e98\3\2"+ + "\2\2\u2e98\u2e99\3\2\2\2\u2e99\u2e9b\7\60\2\2\u2e9a\u2e9c\5\u0845\u0423"+ + "\2\u2e9b\u2e9a\3\2\2\2\u2e9c\u2e9d\3\2\2\2\u2e9d\u2e9b\3\2\2\2\u2e9d\u2e9e"+ + "\3\2\2\2\u2e9e\u2ebe\3\2\2\2\u2e9f\u2ea1\5\u0845\u0423\2\u2ea0\u2e9f\3"+ + "\2\2\2\u2ea1\u2ea2\3\2\2\2\u2ea2\u2ea0\3\2\2\2\u2ea2\u2ea3\3\2\2\2\u2ea3"+ + "\u2ea4\3\2\2\2\u2ea4\u2ea5\7\60\2\2\u2ea5\u2ea6\5\u0839\u041d\2\u2ea6"+ + "\u2ebe\3\2\2\2\u2ea7\u2ea9\5\u0845\u0423\2\u2ea8\u2ea7\3\2\2\2\u2ea9\u2eaa"+ + "\3\2\2\2\u2eaa\u2ea8\3\2\2\2\u2eaa\u2eab\3\2\2\2\u2eab\u2ead\3\2\2\2\u2eac"+ + "\u2ea8\3\2\2\2\u2eac\u2ead\3\2\2\2\u2ead\u2eae\3\2\2\2\u2eae\u2eb0\7\60"+ + "\2\2\u2eaf\u2eb1\5\u0845\u0423\2\u2eb0\u2eaf\3\2\2\2\u2eb1\u2eb2\3\2\2"+ + "\2\u2eb2\u2eb0\3\2\2\2\u2eb2\u2eb3\3\2\2\2\u2eb3\u2eb4\3\2\2\2\u2eb4\u2eb5"+ + "\5\u0839\u041d\2\u2eb5\u2ebe\3\2\2\2\u2eb6\u2eb8\5\u0845\u0423\2\u2eb7"+ + "\u2eb6\3\2\2\2\u2eb8\u2eb9\3\2\2\2\u2eb9\u2eb7\3\2\2\2\u2eb9\u2eba\3\2"+ + "\2\2\u2eba\u2ebb\3\2\2\2\u2ebb\u2ebc\5\u0839\u041d\2\u2ebc\u2ebe\3\2\2"+ + "\2\u2ebd\u2e97\3\2\2\2\u2ebd\u2ea0\3\2\2\2\u2ebd\u2eac\3\2\2\2\u2ebd\u2eb7"+ + "\3\2\2\2\u2ebe\u0824\3\2\2\2\u2ebf\u2ec0\7^\2\2\u2ec0\u2ec1\7P\2\2\u2ec1"+ + "\u0826\3\2\2\2\u2ec2\u2ec3\5\u0847\u0424\2\u2ec3\u0828\3\2\2\2\u2ec4\u2ec5"+ + "\7a\2\2\u2ec5\u2ec6\5\u0837\u041c\2\u2ec6\u082a\3\2\2\2\u2ec7\u2ec8\7"+ + "\60\2\2\u2ec8\u2ec9\5\u083b\u041e\2\u2ec9\u082c\3\2\2\2\u2eca\u2ecb\5"+ + "\u083b\u041e\2\u2ecb\u082e\3\2\2\2\u2ecc\u2ece\7b\2\2\u2ecd\u2ecf\n\5"+ + "\2\2\u2ece\u2ecd\3\2\2\2\u2ecf\u2ed0\3\2\2\2\u2ed0\u2ece\3\2\2\2\u2ed0"+ + "\u2ed1\3\2\2\2\u2ed1\u2ed2\3\2\2\2\u2ed2\u2ed3\7b\2\2\u2ed3\u0830\3\2"+ + "\2\2\u2ed4\u2ed9\5\u083f\u0420\2\u2ed5\u2ed9\5\u083d\u041f\2\u2ed6\u2ed9"+ + "\5\u0841\u0421\2\u2ed7\u2ed9\5\u083b\u041e\2\u2ed8\u2ed4\3\2\2\2\u2ed8"+ + "\u2ed5\3\2\2\2\u2ed8\u2ed6\3\2\2\2\u2ed8\u2ed7\3\2\2\2\u2ed9\u2eda\3\2"+ + "\2\2\u2eda\u2edf\7B\2\2\u2edb\u2ee0\5\u083f\u0420\2\u2edc\u2ee0\5\u083d"+ + "\u041f\2\u2edd\u2ee0\5\u0841\u0421\2\u2ede\u2ee0\5\u083b\u041e\2\u2edf"+ + "\u2edb\3\2\2\2\u2edf\u2edc\3\2\2\2\u2edf\u2edd\3\2\2\2\u2edf\u2ede\3\2"+ + "\2\2\u2ee0\u0832\3\2\2\2\u2ee1\u2eea\7B\2\2\u2ee2\u2ee4\t\6\2\2\u2ee3"+ + "\u2ee2\3\2\2\2\u2ee4\u2ee5\3\2\2\2\u2ee5\u2ee3\3\2\2\2\u2ee5\u2ee6\3\2"+ + "\2\2\u2ee6\u2eeb\3\2\2\2\u2ee7\u2eeb\5\u083f\u0420\2\u2ee8\u2eeb\5\u083d"+ + "\u041f\2\u2ee9\u2eeb\5\u0841\u0421\2\u2eea\u2ee3\3\2\2\2\u2eea\u2ee7\3"+ + "\2\2\2\u2eea\u2ee8\3\2\2\2\u2eea\u2ee9\3\2\2\2\u2eeb\u0834\3\2\2\2\u2eec"+ + "\u2eed\7B\2\2\u2eed\u2ef4\7B\2\2\u2eee\u2ef0\t\6\2\2\u2eef\u2eee\3\2\2"+ + "\2\u2ef0\u2ef1\3\2\2\2\u2ef1\u2eef\3\2\2\2\u2ef1\u2ef2\3\2\2\2\u2ef2\u2ef5"+ + "\3\2\2\2\u2ef3\u2ef5\5\u0841\u0421\2\u2ef4\u2eef\3\2\2\2\u2ef4\u2ef3\3"+ + "\2\2\2\u2ef5\u0836\3\2\2\2\u2ef6\u2f20\5\u04ff\u0280\2\u2ef7\u2f20\5\u0501"+ + "\u0281\2\u2ef8\u2f20\5\u0503\u0282\2\u2ef9\u2f20\5\u01a1\u00d1\2\u2efa"+ + "\u2f20\5\u0505\u0283\2\u2efb\u2f20\5\u0507\u0284\2\u2efc\u2f20\5\u0509"+ + "\u0285\2\u2efd\u2f20\5\u050b\u0286\2\u2efe\u2f20\5\u050d\u0287\2\u2eff"+ + "\u2f20\5\u050f\u0288\2\u2f00\u2f20\5\u0511\u0289\2\u2f01\u2f20\5\u0513"+ + "\u028a\2\u2f02\u2f20\5\u0515\u028b\2\u2f03\u2f20\5\u0517\u028c\2\u2f04"+ + "\u2f20\5\u0519\u028d\2\u2f05\u2f20\5\u051b\u028e\2\u2f06\u2f20\5\u051d"+ + "\u028f\2\u2f07\u2f20\5\u051f\u0290\2\u2f08\u2f20\5\u0521\u0291\2\u2f09"+ + "\u2f20\5\u0523\u0292\2\u2f0a\u2f20\5\u0525\u0293\2\u2f0b\u2f20\5\u0527"+ + "\u0294\2\u2f0c\u2f20\5\u0529\u0295\2\u2f0d\u2f20\5\u052b\u0296\2\u2f0e"+ + "\u2f20\5\u052d\u0297\2\u2f0f\u2f20\5\u052f\u0298\2\u2f10\u2f20\5\u0531"+ + "\u0299\2\u2f11\u2f20\5\u0533\u029a\2\u2f12\u2f20\5\u0535\u029b\2\u2f13"+ + "\u2f20\5\u0537\u029c\2\u2f14\u2f20\5\u0539\u029d\2\u2f15\u2f20\5\u053b"+ + "\u029e\2\u2f16\u2f20\5\u053d\u029f\2\u2f17\u2f20\5\u053f\u02a0\2\u2f18"+ + "\u2f20\5\u0541\u02a1\2\u2f19\u2f20\5\u0543\u02a2\2\u2f1a\u2f20\5\u0545"+ + "\u02a3\2\u2f1b\u2f20\5\u0547\u02a4\2\u2f1c\u2f20\5\u0549\u02a5\2\u2f1d"+ + "\u2f20\5\u054b\u02a6\2\u2f1e\u2f20\5\u054d\u02a7\2\u2f1f\u2ef6\3\2\2\2"+ + "\u2f1f\u2ef7\3\2\2\2\u2f1f\u2ef8\3\2\2\2\u2f1f\u2ef9\3\2\2\2\u2f1f\u2efa"+ + "\3\2\2\2\u2f1f\u2efb\3\2\2\2\u2f1f\u2efc\3\2\2\2\u2f1f\u2efd\3\2\2\2\u2f1f"+ + "\u2efe\3\2\2\2\u2f1f\u2eff\3\2\2\2\u2f1f\u2f00\3\2\2\2\u2f1f\u2f01\3\2"+ + "\2\2\u2f1f\u2f02\3\2\2\2\u2f1f\u2f03\3\2\2\2\u2f1f\u2f04\3\2\2\2\u2f1f"+ + "\u2f05\3\2\2\2\u2f1f\u2f06\3\2\2\2\u2f1f\u2f07\3\2\2\2\u2f1f\u2f08\3\2"+ + "\2\2\u2f1f\u2f09\3\2\2\2\u2f1f\u2f0a\3\2\2\2\u2f1f\u2f0b\3\2\2\2\u2f1f"+ + "\u2f0c\3\2\2\2\u2f1f\u2f0d\3\2\2\2\u2f1f\u2f0e\3\2\2\2\u2f1f\u2f0f\3\2"+ + "\2\2\u2f1f\u2f10\3\2\2\2\u2f1f\u2f11\3\2\2\2\u2f1f\u2f12\3\2\2\2\u2f1f"+ + "\u2f13\3\2\2\2\u2f1f\u2f14\3\2\2\2\u2f1f\u2f15\3\2\2\2\u2f1f\u2f16\3\2"+ + "\2\2\u2f1f\u2f17\3\2\2\2\u2f1f\u2f18\3\2\2\2\u2f1f\u2f19\3\2\2\2\u2f1f"+ + "\u2f1a\3\2\2\2\u2f1f\u2f1b\3\2\2\2\u2f1f\u2f1c\3\2\2\2\u2f1f\u2f1d\3\2"+ + "\2\2\u2f1f\u2f1e\3\2\2\2\u2f20\u0838\3\2\2\2\u2f21\u2f23\7G\2\2\u2f22"+ + "\u2f24\t\7\2\2\u2f23\u2f22\3\2\2\2\u2f23\u2f24\3\2\2\2\u2f24\u2f26\3\2"+ + "\2\2\u2f25\u2f27\5\u0845\u0423\2\u2f26\u2f25\3\2\2\2\u2f27\u2f28\3\2\2"+ + "\2\u2f28\u2f26\3\2\2\2\u2f28\u2f29\3\2\2\2\u2f29\u083a\3\2\2\2\u2f2a\u2f2c"+ + "\t\b\2\2\u2f2b\u2f2a\3\2\2\2\u2f2c\u2f2f\3\2\2\2\u2f2d\u2f2e\3\2\2\2\u2f2d"+ + "\u2f2b\3\2\2\2\u2f2e\u2f31\3\2\2\2\u2f2f\u2f2d\3\2\2\2\u2f30\u2f32\t\t"+ + "\2\2\u2f31\u2f30\3\2\2\2\u2f32\u2f33\3\2\2\2\u2f33\u2f34\3\2\2\2\u2f33"+ + "\u2f31\3\2\2\2\u2f34\u2f38\3\2\2\2\u2f35\u2f37\t\b\2\2\u2f36\u2f35\3\2"+ + "\2\2\u2f37\u2f3a\3\2\2\2\u2f38\u2f36\3\2\2\2\u2f38\u2f39\3\2\2\2\u2f39"+ + "\u2f3d\3\2\2\2\u2f3a\u2f38\3\2\2\2\u2f3b\u2f3d\7A\2\2\u2f3c\u2f2d\3\2"+ + "\2\2\u2f3c\u2f3b\3\2\2\2\u2f3d\u083c\3\2\2\2\u2f3e\u2f46\7$\2\2\u2f3f"+ + "\u2f40\7^\2\2\u2f40\u2f45\13\2\2\2\u2f41\u2f42\7$\2\2\u2f42\u2f45\7$\2"+ + "\2\u2f43\u2f45\n\n\2\2\u2f44\u2f3f\3\2\2\2\u2f44\u2f41\3\2\2\2\u2f44\u2f43"+ + "\3\2\2\2\u2f45\u2f48\3\2\2\2\u2f46\u2f44\3\2\2\2\u2f46\u2f47\3\2\2\2\u2f47"+ + "\u2f49\3\2\2\2\u2f48\u2f46\3\2\2\2\u2f49\u2f4c\7$\2\2\u2f4a\u2f4c\7A\2"+ + "\2\u2f4b\u2f3e\3\2\2\2\u2f4b\u2f4a\3\2\2\2\u2f4c\u083e\3\2\2\2\u2f4d\u2f55"+ + "\7)\2\2\u2f4e\u2f4f\7^\2\2\u2f4f\u2f54\13\2\2\2\u2f50\u2f51\7)\2\2\u2f51"+ + "\u2f54\7)\2\2\u2f52\u2f54\n\13\2\2\u2f53\u2f4e\3\2\2\2\u2f53\u2f50\3\2"+ + "\2\2\u2f53\u2f52\3\2\2\2\u2f54\u2f57\3\2\2\2\u2f55\u2f53\3\2\2\2\u2f55"+ + "\u2f56\3\2\2\2\u2f56\u2f58\3\2\2\2\u2f57\u2f55\3\2\2\2\u2f58\u2f59\7)"+ + "\2\2\u2f59\u0840\3\2\2\2\u2f5a\u2f62\7b\2\2\u2f5b\u2f5c\7^\2\2\u2f5c\u2f61"+ + "\13\2\2\2\u2f5d\u2f5e\7b\2\2\u2f5e\u2f61\7b\2\2\u2f5f\u2f61\n\f\2\2\u2f60"+ + "\u2f5b\3\2\2\2\u2f60\u2f5d\3\2\2\2\u2f60\u2f5f\3\2\2\2\u2f61\u2f64\3\2"+ + "\2\2\u2f62\u2f60\3\2\2\2\u2f62\u2f63\3\2\2\2\u2f63\u2f65\3\2\2\2\u2f64"+ + "\u2f62\3\2\2\2\u2f65\u2f66\7b\2\2\u2f66\u0842\3\2\2\2\u2f67\u2f68\t\r"+ + "\2\2\u2f68\u0844\3\2\2\2\u2f69\u2f6a\t\16\2\2\u2f6a\u0846\3\2\2\2\u2f6b"+ + "\u2f6c\7D\2\2\u2f6c\u2f6e\7)\2\2\u2f6d\u2f6f\t\17\2\2\u2f6e\u2f6d\3\2"+ + "\2\2\u2f6f\u2f70\3\2\2\2\u2f70\u2f6e\3\2\2\2\u2f70\u2f71\3\2\2\2\u2f71"+ + "\u2f72\3\2\2\2\u2f72\u2f73\7)\2\2\u2f73\u0848\3\2\2\2\u2f74\u2f75\13\2"+ + "\2\2\u2f75\u2f76\3\2\2\2\u2f76\u2f77\b\u0425\4\2\u2f77\u084a\3\2\2\2\65"+ + "\2\u084e\u0859\u0866\u0872\u0877\u087b\u087f\u0885\u0889\u088b\u1e85\u1ea0"+ + "\u2e63\u2e6c\u2e76\u2e7b\u2e84\u2e8e\u2e90\u2e95\u2e97\u2e9d\u2ea2\u2eaa"+ + "\u2eac\u2eb2\u2eb9\u2ebd\u2ed0\u2ed8\u2edf\u2ee5\u2eea\u2ef1\u2ef4\u2f1f"+ + "\u2f23\u2f28\u2f2d\u2f33\u2f38\u2f3c\u2f44\u2f46\u2f4b\u2f53\u2f55\u2f60"+ + "\u2f62\u2f70\5\2\3\2\2\4\2\2\5\2"; + public static final String _serializedATN = Utils.join( + new String[] { + _serializedATNSegment0, + _serializedATNSegment1, + _serializedATNSegment2, + _serializedATNSegment3, + _serializedATNSegment4 + }, + "" + ); + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlLexer.tokens b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlLexer.tokens new file mode 100644 index 00000000000..a3ce055f4fa --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlLexer.tokens @@ -0,0 +1,2078 @@ +SPACE=1 +SPEC_MYSQL_COMMENT=2 +COMMENT_INPUT=3 +LINE_COMMENT=4 +ADD=5 +ALL=6 +ALTER=7 +ALWAYS=8 +ANALYZE=9 +AND=10 +AS=11 +ASC=12 +BEFORE=13 +BETWEEN=14 +BOTH=15 +BY=16 +CALL=17 +CASCADE=18 +CASE=19 +CAST=20 +CHANGE=21 +CHARACTER=22 +CHECK=23 +COLLATE=24 +COLUMN=25 +CONDITION=26 +CONSTRAINT=27 +CONTINUE=28 +CONVERT=29 +CREATE=30 +CROSS=31 +CURRENT=32 +CURRENT_USER=33 +CURSOR=34 +DATABASE=35 +DATABASES=36 +DECLARE=37 +DEFAULT=38 +DELAYED=39 +DELETE=40 +DESC=41 +DESCRIBE=42 +DETERMINISTIC=43 +DIAGNOSTICS=44 +DISTINCT=45 +DISTINCTROW=46 +DROP=47 +EACH=48 +ELSE=49 +ELSEIF=50 +ENCLOSED=51 +ESCAPED=52 +EXISTS=53 +EXIT=54 +EXPLAIN=55 +FALSE=56 +FETCH=57 +FOR=58 +FORCE=59 +FOREIGN=60 +FROM=61 +FULLTEXT=62 +GENERATED=63 +GET=64 +GRANT=65 +GROUP=66 +HAVING=67 +HIGH_PRIORITY=68 +IF=69 +IGNORE=70 +IN=71 +INDEX=72 +INFILE=73 +INNER=74 +INOUT=75 +INSERT=76 +INTERVAL=77 +INTO=78 +IS=79 +ITERATE=80 +JOIN=81 +KEY=82 +KEYS=83 +KILL=84 +LEADING=85 +LEAVE=86 +LEFT=87 +LIKE=88 +LIMIT=89 +LINEAR=90 +LINES=91 +LOAD=92 +LOCK=93 +LOOP=94 +LOW_PRIORITY=95 +MASTER_BIND=96 +MASTER_SSL_VERIFY_SERVER_CERT=97 +MATCH=98 +MAXVALUE=99 +MODIFIES=100 +NATURAL=101 +NOT=102 +NO_WRITE_TO_BINLOG=103 +NULL_LITERAL=104 +NUMBER=105 +ON=106 +OPTIMIZE=107 +OPTION=108 +OPTIONALLY=109 +OR=110 +ORDER=111 +OUT=112 +OUTER=113 +OUTFILE=114 +PARTITION=115 +PRIMARY=116 +PROCEDURE=117 +PURGE=118 +RANGE=119 +READ=120 +READS=121 +REFERENCES=122 +REGEXP=123 +RELEASE=124 +RENAME=125 +REPEAT=126 +REPLACE=127 +REQUIRE=128 +RESIGNAL=129 +RESTRICT=130 +RETURN=131 +REVOKE=132 +RIGHT=133 +RLIKE=134 +SCHEMA=135 +SCHEMAS=136 +SELECT=137 +SET=138 +SEPARATOR=139 +SHOW=140 +SIGNAL=141 +SPATIAL=142 +SQL=143 +SQLEXCEPTION=144 +SQLSTATE=145 +SQLWARNING=146 +SQL_BIG_RESULT=147 +SQL_CALC_FOUND_ROWS=148 +SQL_SMALL_RESULT=149 +SSL=150 +STACKED=151 +STARTING=152 +STRAIGHT_JOIN=153 +TABLE=154 +TERMINATED=155 +THEN=156 +TO=157 +TRAILING=158 +TRIGGER=159 +TRUE=160 +UNDO=161 +UNION=162 +UNIQUE=163 +UNLOCK=164 +UNSIGNED=165 +UPDATE=166 +USAGE=167 +USE=168 +USING=169 +VALUES=170 +WHEN=171 +WHERE=172 +WHILE=173 +WITH=174 +WRITE=175 +XOR=176 +ZEROFILL=177 +TINYINT=178 +SMALLINT=179 +MEDIUMINT=180 +MIDDLEINT=181 +INT=182 +INT1=183 +INT2=184 +INT3=185 +INT4=186 +INT8=187 +INTEGER=188 +BIGINT=189 +REAL=190 +DOUBLE=191 +PRECISION=192 +FLOAT=193 +FLOAT4=194 +FLOAT8=195 +DECIMAL=196 +DEC=197 +NUMERIC=198 +DATE=199 +TIME=200 +TIMESTAMP=201 +DATETIME=202 +YEAR=203 +CHAR=204 +VARCHAR=205 +NVARCHAR=206 +NATIONAL=207 +BINARY=208 +VARBINARY=209 +TINYBLOB=210 +BLOB=211 +MEDIUMBLOB=212 +LONG=213 +LONGBLOB=214 +TINYTEXT=215 +TEXT=216 +MEDIUMTEXT=217 +LONGTEXT=218 +ENUM=219 +VARYING=220 +SERIAL=221 +YEAR_MONTH=222 +DAY_HOUR=223 +DAY_MINUTE=224 +DAY_SECOND=225 +HOUR_MINUTE=226 +HOUR_SECOND=227 +MINUTE_SECOND=228 +SECOND_MICROSECOND=229 +MINUTE_MICROSECOND=230 +HOUR_MICROSECOND=231 +DAY_MICROSECOND=232 +JSON_VALID=233 +JSON_SCHEMA_VALID=234 +AVG=235 +BIT_AND=236 +BIT_OR=237 +BIT_XOR=238 +COUNT=239 +GROUP_CONCAT=240 +MAX=241 +MIN=242 +STD=243 +STDDEV=244 +STDDEV_POP=245 +STDDEV_SAMP=246 +SUM=247 +VAR_POP=248 +VAR_SAMP=249 +VARIANCE=250 +CURRENT_DATE=251 +CURRENT_TIME=252 +CURRENT_TIMESTAMP=253 +LOCALTIME=254 +CURDATE=255 +CURTIME=256 +DATE_ADD=257 +DATE_SUB=258 +EXTRACT=259 +LOCALTIMESTAMP=260 +NOW=261 +POSITION=262 +SUBSTR=263 +SUBSTRING=264 +SYSDATE=265 +TRIM=266 +UTC_DATE=267 +UTC_TIME=268 +UTC_TIMESTAMP=269 +ACCOUNT=270 +ACTION=271 +AFTER=272 +AGGREGATE=273 +ALGORITHM=274 +ANY=275 +AT=276 +AUTHORS=277 +AUTOCOMMIT=278 +AUTOEXTEND_SIZE=279 +AUTO_INCREMENT=280 +AVG_ROW_LENGTH=281 +BEGIN=282 +BINLOG=283 +BIT=284 +BLOCK=285 +BOOL=286 +BOOLEAN=287 +BTREE=288 +CACHE=289 +CASCADED=290 +CHAIN=291 +CHANGED=292 +CHANNEL=293 +CHECKSUM=294 +PAGE_CHECKSUM=295 +CIPHER=296 +CLASS_ORIGIN=297 +CLIENT=298 +CLOSE=299 +COALESCE=300 +CODE=301 +COLUMNS=302 +COLUMN_FORMAT=303 +COLUMN_NAME=304 +COMMENT=305 +COMMIT=306 +COMPACT=307 +COMPLETION=308 +COMPRESSED=309 +COMPRESSION=310 +CONCURRENT=311 +CONNECTION=312 +CONSISTENT=313 +CONSTRAINT_CATALOG=314 +CONSTRAINT_SCHEMA=315 +CONSTRAINT_NAME=316 +CONTAINS=317 +CONTEXT=318 +CONTRIBUTORS=319 +COPY=320 +CPU=321 +CURSOR_NAME=322 +DATA=323 +DATAFILE=324 +DEALLOCATE=325 +DEFAULT_AUTH=326 +DEFINER=327 +DELAY_KEY_WRITE=328 +DES_KEY_FILE=329 +DIRECTORY=330 +DISABLE=331 +DISCARD=332 +DISK=333 +DO=334 +DUMPFILE=335 +DUPLICATE=336 +DYNAMIC=337 +ENABLE=338 +ENCRYPTION=339 +END=340 +ENDS=341 +ENGINE=342 +ENGINES=343 +ERROR=344 +ERRORS=345 +ESCAPE=346 +EVEN=347 +EVENT=348 +EVENTS=349 +EVERY=350 +EXCHANGE=351 +EXCLUSIVE=352 +EXPIRE=353 +EXPORT=354 +EXTENDED=355 +EXTENT_SIZE=356 +FAST=357 +FAULTS=358 +FIELDS=359 +FILE_BLOCK_SIZE=360 +FILTER=361 +FIRST=362 +FIXED=363 +FLUSH=364 +FOLLOWS=365 +FOUND=366 +FULL=367 +FUNCTION=368 +GENERAL=369 +GLOBAL=370 +GRANTS=371 +GROUP_REPLICATION=372 +HANDLER=373 +HASH=374 +HELP=375 +HOST=376 +HOSTS=377 +IDENTIFIED=378 +IGNORE_SERVER_IDS=379 +IMPORT=380 +INDEXES=381 +INITIAL_SIZE=382 +INPLACE=383 +INSERT_METHOD=384 +INSTALL=385 +INSTANCE=386 +INVISIBLE=387 +INVOKER=388 +IO=389 +IO_THREAD=390 +IPC=391 +ISOLATION=392 +ISSUER=393 +JSON=394 +KEY_BLOCK_SIZE=395 +LANGUAGE=396 +LAST=397 +LEAVES=398 +LESS=399 +LEVEL=400 +LIST=401 +LOCAL=402 +LOGFILE=403 +LOGS=404 +MASTER=405 +MASTER_AUTO_POSITION=406 +MASTER_CONNECT_RETRY=407 +MASTER_DELAY=408 +MASTER_HEARTBEAT_PERIOD=409 +MASTER_HOST=410 +MASTER_LOG_FILE=411 +MASTER_LOG_POS=412 +MASTER_PASSWORD=413 +MASTER_PORT=414 +MASTER_RETRY_COUNT=415 +MASTER_SSL=416 +MASTER_SSL_CA=417 +MASTER_SSL_CAPATH=418 +MASTER_SSL_CERT=419 +MASTER_SSL_CIPHER=420 +MASTER_SSL_CRL=421 +MASTER_SSL_CRLPATH=422 +MASTER_SSL_KEY=423 +MASTER_TLS_VERSION=424 +MASTER_USER=425 +MAX_CONNECTIONS_PER_HOUR=426 +MAX_QUERIES_PER_HOUR=427 +MAX_ROWS=428 +MAX_SIZE=429 +MAX_UPDATES_PER_HOUR=430 +MAX_USER_CONNECTIONS=431 +MEDIUM=432 +MEMBER=433 +MERGE=434 +MESSAGE_TEXT=435 +MID=436 +MIGRATE=437 +MIN_ROWS=438 +MODE=439 +MODIFY=440 +MUTEX=441 +MYSQL=442 +MYSQL_ERRNO=443 +NAME=444 +NAMES=445 +NCHAR=446 +NEVER=447 +NEXT=448 +NO=449 +NODEGROUP=450 +NONE=451 +OFFLINE=452 +OFFSET=453 +OF=454 +OJ=455 +OLD_PASSWORD=456 +ONE=457 +ONLINE=458 +ONLY=459 +OPEN=460 +OPTIMIZER_COSTS=461 +OPTIONS=462 +OWNER=463 +PACK_KEYS=464 +PAGE=465 +PARSER=466 +PARTIAL=467 +PARTITIONING=468 +PARTITIONS=469 +PASSWORD=470 +PHASE=471 +PLUGIN=472 +PLUGIN_DIR=473 +PLUGINS=474 +PORT=475 +PRECEDES=476 +PREPARE=477 +PRESERVE=478 +PREV=479 +PROCESSLIST=480 +PROFILE=481 +PROFILES=482 +PROXY=483 +QUERY=484 +QUICK=485 +REBUILD=486 +RECOVER=487 +REDO_BUFFER_SIZE=488 +REDUNDANT=489 +RELAY=490 +RELAY_LOG_FILE=491 +RELAY_LOG_POS=492 +RELAYLOG=493 +REMOVE=494 +REORGANIZE=495 +REPAIR=496 +REPLICATE_DO_DB=497 +REPLICATE_DO_TABLE=498 +REPLICATE_IGNORE_DB=499 +REPLICATE_IGNORE_TABLE=500 +REPLICATE_REWRITE_DB=501 +REPLICATE_WILD_DO_TABLE=502 +REPLICATE_WILD_IGNORE_TABLE=503 +REPLICATION=504 +RESET=505 +RESUME=506 +RETURNED_SQLSTATE=507 +RETURNS=508 +ROLE=509 +ROLLBACK=510 +ROLLUP=511 +ROTATE=512 +ROW=513 +ROWS=514 +ROW_FORMAT=515 +SAVEPOINT=516 +SCHEDULE=517 +SECURITY=518 +SERVER=519 +SESSION=520 +SHARE=521 +SHARED=522 +SIGNED=523 +SIMPLE=524 +SLAVE=525 +SLOW=526 +SNAPSHOT=527 +SOCKET=528 +SOME=529 +SONAME=530 +SOUNDS=531 +SOURCE=532 +SQL_AFTER_GTIDS=533 +SQL_AFTER_MTS_GAPS=534 +SQL_BEFORE_GTIDS=535 +SQL_BUFFER_RESULT=536 +SQL_CACHE=537 +SQL_NO_CACHE=538 +SQL_THREAD=539 +START=540 +STARTS=541 +STATS_AUTO_RECALC=542 +STATS_PERSISTENT=543 +STATS_SAMPLE_PAGES=544 +STATUS=545 +STOP=546 +STORAGE=547 +STORED=548 +STRING=549 +SUBCLASS_ORIGIN=550 +SUBJECT=551 +SUBPARTITION=552 +SUBPARTITIONS=553 +SUSPEND=554 +SWAPS=555 +SWITCHES=556 +TABLE_NAME=557 +TABLESPACE=558 +TEMPORARY=559 +TEMPTABLE=560 +THAN=561 +TRADITIONAL=562 +TRANSACTION=563 +TRANSACTIONAL=564 +TRIGGERS=565 +TRUNCATE=566 +UNDEFINED=567 +UNDOFILE=568 +UNDO_BUFFER_SIZE=569 +UNINSTALL=570 +UNKNOWN=571 +UNTIL=572 +UPGRADE=573 +USER=574 +USE_FRM=575 +USER_RESOURCES=576 +VALIDATION=577 +VALUE=578 +VARIABLES=579 +VIEW=580 +VIRTUAL=581 +VISIBLE=582 +WAIT=583 +WARNINGS=584 +WITHOUT=585 +WORK=586 +WRAPPER=587 +X509=588 +XA=589 +XML=590 +EUR=591 +USA=592 +JIS=593 +ISO=594 +INTERNAL=595 +QUARTER=596 +MONTH=597 +DAY=598 +HOUR=599 +MINUTE=600 +WEEK=601 +SECOND=602 +MICROSECOND=603 +TABLES=604 +ROUTINE=605 +EXECUTE=606 +FILE=607 +PROCESS=608 +RELOAD=609 +SHUTDOWN=610 +SUPER=611 +PRIVILEGES=612 +APPLICATION_PASSWORD_ADMIN=613 +AUDIT_ADMIN=614 +BACKUP_ADMIN=615 +BINLOG_ADMIN=616 +BINLOG_ENCRYPTION_ADMIN=617 +CLONE_ADMIN=618 +CONNECTION_ADMIN=619 +ENCRYPTION_KEY_ADMIN=620 +FIREWALL_ADMIN=621 +FIREWALL_USER=622 +GROUP_REPLICATION_ADMIN=623 +INNODB_REDO_LOG_ARCHIVE=624 +NDB_STORED_USER=625 +PERSIST_RO_VARIABLES_ADMIN=626 +REPLICATION_APPLIER=627 +REPLICATION_SLAVE_ADMIN=628 +RESOURCE_GROUP_ADMIN=629 +RESOURCE_GROUP_USER=630 +ROLE_ADMIN=631 +SESSION_VARIABLES_ADMIN=632 +SET_USER_ID=633 +SHOW_ROUTINE=634 +SYSTEM_VARIABLES_ADMIN=635 +TABLE_ENCRYPTION_ADMIN=636 +VERSION_TOKEN_ADMIN=637 +XA_RECOVER_ADMIN=638 +ARMSCII8=639 +ASCII=640 +BIG5=641 +CP1250=642 +CP1251=643 +CP1256=644 +CP1257=645 +CP850=646 +CP852=647 +CP866=648 +CP932=649 +DEC8=650 +EUCJPMS=651 +EUCKR=652 +GB2312=653 +GBK=654 +GEOSTD8=655 +GREEK=656 +HEBREW=657 +HP8=658 +KEYBCS2=659 +KOI8R=660 +KOI8U=661 +LATIN1=662 +LATIN2=663 +LATIN5=664 +LATIN7=665 +MACCE=666 +MACROMAN=667 +SJIS=668 +SWE7=669 +TIS620=670 +UCS2=671 +UJIS=672 +UTF16=673 +UTF16LE=674 +UTF32=675 +UTF8=676 +UTF8MB3=677 +UTF8MB4=678 +ARCHIVE=679 +BLACKHOLE=680 +CSV=681 +FEDERATED=682 +INNODB=683 +MEMORY=684 +MRG_MYISAM=685 +MYISAM=686 +NDB=687 +NDBCLUSTER=688 +PERFORMANCE_SCHEMA=689 +TOKUDB=690 +REPEATABLE=691 +COMMITTED=692 +UNCOMMITTED=693 +SERIALIZABLE=694 +GEOMETRYCOLLECTION=695 +GEOMCOLLECTION=696 +GEOMETRY=697 +LINESTRING=698 +MULTILINESTRING=699 +MULTIPOINT=700 +MULTIPOLYGON=701 +POINT=702 +POLYGON=703 +ABS=704 +ACOS=705 +ADDDATE=706 +ADDTIME=707 +AES_DECRYPT=708 +AES_ENCRYPT=709 +AREA=710 +ASBINARY=711 +ASIN=712 +ASTEXT=713 +ASWKB=714 +ASWKT=715 +ASYMMETRIC_DECRYPT=716 +ASYMMETRIC_DERIVE=717 +ASYMMETRIC_ENCRYPT=718 +ASYMMETRIC_SIGN=719 +ASYMMETRIC_VERIFY=720 +ATAN=721 +ATAN2=722 +BENCHMARK=723 +BIN=724 +BIT_COUNT=725 +BIT_LENGTH=726 +BUFFER=727 +CATALOG_NAME=728 +CEIL=729 +CEILING=730 +CENTROID=731 +CHARACTER_LENGTH=732 +CHARSET=733 +CHAR_LENGTH=734 +COERCIBILITY=735 +COLLATION=736 +COMPRESS=737 +CONCAT=738 +CONCAT_WS=739 +CONNECTION_ID=740 +CONV=741 +CONVERT_TZ=742 +COS=743 +COT=744 +CRC32=745 +CREATE_ASYMMETRIC_PRIV_KEY=746 +CREATE_ASYMMETRIC_PUB_KEY=747 +CREATE_DH_PARAMETERS=748 +CREATE_DIGEST=749 +CROSSES=750 +DATEDIFF=751 +DATE_FORMAT=752 +DAYNAME=753 +DAYOFMONTH=754 +DAYOFWEEK=755 +DAYOFYEAR=756 +DECODE=757 +DEGREES=758 +DES_DECRYPT=759 +DES_ENCRYPT=760 +DIMENSION=761 +DISJOINT=762 +ELT=763 +ENCODE=764 +ENCRYPT=765 +ENDPOINT=766 +ENVELOPE=767 +EQUALS=768 +EXP=769 +EXPORT_SET=770 +EXTERIORRING=771 +EXTRACTVALUE=772 +FIELD=773 +FIND_IN_SET=774 +FLOOR=775 +FORMAT=776 +FOUND_ROWS=777 +FROM_BASE64=778 +FROM_DAYS=779 +FROM_UNIXTIME=780 +GEOMCOLLFROMTEXT=781 +GEOMCOLLFROMWKB=782 +GEOMETRYCOLLECTIONFROMTEXT=783 +GEOMETRYCOLLECTIONFROMWKB=784 +GEOMETRYFROMTEXT=785 +GEOMETRYFROMWKB=786 +GEOMETRYN=787 +GEOMETRYTYPE=788 +GEOMFROMTEXT=789 +GEOMFROMWKB=790 +GET_FORMAT=791 +GET_LOCK=792 +GLENGTH=793 +GREATEST=794 +GTID_SUBSET=795 +GTID_SUBTRACT=796 +HEX=797 +IFNULL=798 +INET6_ATON=799 +INET6_NTOA=800 +INET_ATON=801 +INET_NTOA=802 +INSTR=803 +INTERIORRINGN=804 +INTERSECTS=805 +ISCLOSED=806 +ISEMPTY=807 +ISNULL=808 +ISSIMPLE=809 +IS_FREE_LOCK=810 +IS_IPV4=811 +IS_IPV4_COMPAT=812 +IS_IPV4_MAPPED=813 +IS_IPV6=814 +IS_USED_LOCK=815 +LAST_INSERT_ID=816 +LCASE=817 +LEAST=818 +LENGTH=819 +LINEFROMTEXT=820 +LINEFROMWKB=821 +LINESTRINGFROMTEXT=822 +LINESTRINGFROMWKB=823 +LN=824 +LOAD_FILE=825 +LOCATE=826 +LOG=827 +LOG10=828 +LOG2=829 +LOWER=830 +LPAD=831 +LTRIM=832 +MAKEDATE=833 +MAKETIME=834 +MAKE_SET=835 +MASTER_POS_WAIT=836 +MBRCONTAINS=837 +MBRDISJOINT=838 +MBREQUAL=839 +MBRINTERSECTS=840 +MBROVERLAPS=841 +MBRTOUCHES=842 +MBRWITHIN=843 +MD5=844 +MLINEFROMTEXT=845 +MLINEFROMWKB=846 +MONTHNAME=847 +MPOINTFROMTEXT=848 +MPOINTFROMWKB=849 +MPOLYFROMTEXT=850 +MPOLYFROMWKB=851 +MULTILINESTRINGFROMTEXT=852 +MULTILINESTRINGFROMWKB=853 +MULTIPOINTFROMTEXT=854 +MULTIPOINTFROMWKB=855 +MULTIPOLYGONFROMTEXT=856 +MULTIPOLYGONFROMWKB=857 +NAME_CONST=858 +NULLIF=859 +NUMGEOMETRIES=860 +NUMINTERIORRINGS=861 +NUMPOINTS=862 +OCT=863 +OCTET_LENGTH=864 +ORD=865 +OVERLAPS=866 +PERIOD_ADD=867 +PERIOD_DIFF=868 +PI=869 +POINTFROMTEXT=870 +POINTFROMWKB=871 +POINTN=872 +POLYFROMTEXT=873 +POLYFROMWKB=874 +POLYGONFROMTEXT=875 +POLYGONFROMWKB=876 +POW=877 +POWER=878 +QUOTE=879 +RADIANS=880 +RAND=881 +RANDOM_BYTES=882 +RELEASE_LOCK=883 +REVERSE=884 +ROUND=885 +ROW_COUNT=886 +RPAD=887 +RTRIM=888 +SEC_TO_TIME=889 +SESSION_USER=890 +SHA=891 +SHA1=892 +SHA2=893 +SCHEMA_NAME=894 +SIGN=895 +SIN=896 +SLEEP=897 +SOUNDEX=898 +SQL_THREAD_WAIT_AFTER_GTIDS=899 +SQRT=900 +SRID=901 +STARTPOINT=902 +STRCMP=903 +STR_TO_DATE=904 +ST_AREA=905 +ST_ASBINARY=906 +ST_ASTEXT=907 +ST_ASWKB=908 +ST_ASWKT=909 +ST_BUFFER=910 +ST_CENTROID=911 +ST_CONTAINS=912 +ST_CROSSES=913 +ST_DIFFERENCE=914 +ST_DIMENSION=915 +ST_DISJOINT=916 +ST_DISTANCE=917 +ST_ENDPOINT=918 +ST_ENVELOPE=919 +ST_EQUALS=920 +ST_EXTERIORRING=921 +ST_GEOMCOLLFROMTEXT=922 +ST_GEOMCOLLFROMTXT=923 +ST_GEOMCOLLFROMWKB=924 +ST_GEOMETRYCOLLECTIONFROMTEXT=925 +ST_GEOMETRYCOLLECTIONFROMWKB=926 +ST_GEOMETRYFROMTEXT=927 +ST_GEOMETRYFROMWKB=928 +ST_GEOMETRYN=929 +ST_GEOMETRYTYPE=930 +ST_GEOMFROMTEXT=931 +ST_GEOMFROMWKB=932 +ST_INTERIORRINGN=933 +ST_INTERSECTION=934 +ST_INTERSECTS=935 +ST_ISCLOSED=936 +ST_ISEMPTY=937 +ST_ISSIMPLE=938 +ST_LINEFROMTEXT=939 +ST_LINEFROMWKB=940 +ST_LINESTRINGFROMTEXT=941 +ST_LINESTRINGFROMWKB=942 +ST_NUMGEOMETRIES=943 +ST_NUMINTERIORRING=944 +ST_NUMINTERIORRINGS=945 +ST_NUMPOINTS=946 +ST_OVERLAPS=947 +ST_POINTFROMTEXT=948 +ST_POINTFROMWKB=949 +ST_POINTN=950 +ST_POLYFROMTEXT=951 +ST_POLYFROMWKB=952 +ST_POLYGONFROMTEXT=953 +ST_POLYGONFROMWKB=954 +ST_SRID=955 +ST_STARTPOINT=956 +ST_SYMDIFFERENCE=957 +ST_TOUCHES=958 +ST_UNION=959 +ST_WITHIN=960 +ST_X=961 +ST_Y=962 +SUBDATE=963 +SUBSTRING_INDEX=964 +SUBTIME=965 +SYSTEM_USER=966 +TAN=967 +TIMEDIFF=968 +TIMESTAMPADD=969 +TIMESTAMPDIFF=970 +TIME_FORMAT=971 +TIME_TO_SEC=972 +TOUCHES=973 +TO_BASE64=974 +TO_DAYS=975 +TO_SECONDS=976 +UCASE=977 +UNCOMPRESS=978 +UNCOMPRESSED_LENGTH=979 +UNHEX=980 +UNIX_TIMESTAMP=981 +UPDATEXML=982 +UPPER=983 +UUID=984 +UUID_SHORT=985 +VALIDATE_PASSWORD_STRENGTH=986 +VERSION=987 +WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS=988 +WEEKDAY=989 +WEEKOFYEAR=990 +WEIGHT_STRING=991 +WITHIN=992 +YEARWEEK=993 +Y_FUNCTION=994 +X_FUNCTION=995 +VAR_ASSIGN=996 +PLUS_ASSIGN=997 +MINUS_ASSIGN=998 +MULT_ASSIGN=999 +DIV_ASSIGN=1000 +MOD_ASSIGN=1001 +AND_ASSIGN=1002 +XOR_ASSIGN=1003 +OR_ASSIGN=1004 +STAR=1005 +DIVIDE=1006 +MODULE=1007 +PLUS=1008 +MINUSMINUS=1009 +MINUS=1010 +DIV=1011 +MOD=1012 +EQUAL_SYMBOL=1013 +GREATER_SYMBOL=1014 +LESS_SYMBOL=1015 +EXCLAMATION_SYMBOL=1016 +BIT_NOT_OP=1017 +BIT_OR_OP=1018 +BIT_AND_OP=1019 +BIT_XOR_OP=1020 +DOT=1021 +LR_BRACKET=1022 +RR_BRACKET=1023 +COMMA=1024 +SEMI=1025 +AT_SIGN=1026 +ZERO_DECIMAL=1027 +ONE_DECIMAL=1028 +TWO_DECIMAL=1029 +SINGLE_QUOTE_SYMB=1030 +DOUBLE_QUOTE_SYMB=1031 +REVERSE_QUOTE_SYMB=1032 +COLON_SYMB=1033 +CHARSET_REVERSE_QOUTE_STRING=1034 +FILESIZE_LITERAL=1035 +START_NATIONAL_STRING_LITERAL=1036 +STRING_LITERAL=1037 +DECIMAL_LITERAL=1038 +HEXADECIMAL_LITERAL=1039 +REAL_LITERAL=1040 +NULL_SPEC_LITERAL=1041 +BIT_STRING=1042 +STRING_CHARSET_NAME=1043 +DOT_ID=1044 +ID=1045 +REVERSE_QUOTE_ID=1046 +STRING_USER_NAME=1047 +LOCAL_ID=1048 +GLOBAL_ID=1049 +ERROR_RECONGNIGION=1050 +'ADD'=5 +'ALL'=6 +'ALTER'=7 +'ALWAYS'=8 +'ANALYZE'=9 +'AND'=10 +'AS'=11 +'ASC'=12 +'BEFORE'=13 +'BETWEEN'=14 +'BOTH'=15 +'BY'=16 +'CALL'=17 +'CASCADE'=18 +'CASE'=19 +'CAST'=20 +'CHANGE'=21 +'CHARACTER'=22 +'CHECK'=23 +'COLLATE'=24 +'COLUMN'=25 +'CONDITION'=26 +'CONSTRAINT'=27 +'CONTINUE'=28 +'CONVERT'=29 +'CREATE'=30 +'CROSS'=31 +'CURRENT'=32 +'CURRENT_USER'=33 +'CURSOR'=34 +'DATABASE'=35 +'DATABASES'=36 +'DECLARE'=37 +'DEFAULT'=38 +'DELAYED'=39 +'DELETE'=40 +'DESC'=41 +'DESCRIBE'=42 +'DETERMINISTIC'=43 +'DIAGNOSTICS'=44 +'DISTINCT'=45 +'DISTINCTROW'=46 +'DROP'=47 +'EACH'=48 +'ELSE'=49 +'ELSEIF'=50 +'ENCLOSED'=51 +'ESCAPED'=52 +'EXISTS'=53 +'EXIT'=54 +'EXPLAIN'=55 +'FALSE'=56 +'FETCH'=57 +'FOR'=58 +'FORCE'=59 +'FOREIGN'=60 +'FROM'=61 +'FULLTEXT'=62 +'GENERATED'=63 +'GET'=64 +'GRANT'=65 +'GROUP'=66 +'HAVING'=67 +'HIGH_PRIORITY'=68 +'IF'=69 +'IGNORE'=70 +'IN'=71 +'INDEX'=72 +'INFILE'=73 +'INNER'=74 +'INOUT'=75 +'INSERT'=76 +'INTERVAL'=77 +'INTO'=78 +'IS'=79 +'ITERATE'=80 +'JOIN'=81 +'KEY'=82 +'KEYS'=83 +'KILL'=84 +'LEADING'=85 +'LEAVE'=86 +'LEFT'=87 +'LIKE'=88 +'LIMIT'=89 +'LINEAR'=90 +'LINES'=91 +'LOAD'=92 +'LOCK'=93 +'LOOP'=94 +'LOW_PRIORITY'=95 +'MASTER_BIND'=96 +'MASTER_SSL_VERIFY_SERVER_CERT'=97 +'MATCH'=98 +'MAXVALUE'=99 +'MODIFIES'=100 +'NATURAL'=101 +'NOT'=102 +'NO_WRITE_TO_BINLOG'=103 +'NULL'=104 +'NUMBER'=105 +'ON'=106 +'OPTIMIZE'=107 +'OPTION'=108 +'OPTIONALLY'=109 +'OR'=110 +'ORDER'=111 +'OUT'=112 +'OUTER'=113 +'OUTFILE'=114 +'PARTITION'=115 +'PRIMARY'=116 +'PROCEDURE'=117 +'PURGE'=118 +'RANGE'=119 +'READ'=120 +'READS'=121 +'REFERENCES'=122 +'REGEXP'=123 +'RELEASE'=124 +'RENAME'=125 +'REPEAT'=126 +'REPLACE'=127 +'REQUIRE'=128 +'RESIGNAL'=129 +'RESTRICT'=130 +'RETURN'=131 +'REVOKE'=132 +'RIGHT'=133 +'RLIKE'=134 +'SCHEMA'=135 +'SCHEMAS'=136 +'SELECT'=137 +'SET'=138 +'SEPARATOR'=139 +'SHOW'=140 +'SIGNAL'=141 +'SPATIAL'=142 +'SQL'=143 +'SQLEXCEPTION'=144 +'SQLSTATE'=145 +'SQLWARNING'=146 +'SQL_BIG_RESULT'=147 +'SQL_CALC_FOUND_ROWS'=148 +'SQL_SMALL_RESULT'=149 +'SSL'=150 +'STACKED'=151 +'STARTING'=152 +'STRAIGHT_JOIN'=153 +'TABLE'=154 +'TERMINATED'=155 +'THEN'=156 +'TO'=157 +'TRAILING'=158 +'TRIGGER'=159 +'TRUE'=160 +'UNDO'=161 +'UNION'=162 +'UNIQUE'=163 +'UNLOCK'=164 +'UNSIGNED'=165 +'UPDATE'=166 +'USAGE'=167 +'USE'=168 +'USING'=169 +'VALUES'=170 +'WHEN'=171 +'WHERE'=172 +'WHILE'=173 +'WITH'=174 +'WRITE'=175 +'XOR'=176 +'ZEROFILL'=177 +'TINYINT'=178 +'SMALLINT'=179 +'MEDIUMINT'=180 +'MIDDLEINT'=181 +'INT'=182 +'INT1'=183 +'INT2'=184 +'INT3'=185 +'INT4'=186 +'INT8'=187 +'INTEGER'=188 +'BIGINT'=189 +'REAL'=190 +'DOUBLE'=191 +'PRECISION'=192 +'FLOAT'=193 +'FLOAT4'=194 +'FLOAT8'=195 +'DECIMAL'=196 +'DEC'=197 +'NUMERIC'=198 +'DATE'=199 +'TIME'=200 +'TIMESTAMP'=201 +'DATETIME'=202 +'YEAR'=203 +'CHAR'=204 +'VARCHAR'=205 +'NVARCHAR'=206 +'NATIONAL'=207 +'BINARY'=208 +'VARBINARY'=209 +'TINYBLOB'=210 +'BLOB'=211 +'MEDIUMBLOB'=212 +'LONG'=213 +'LONGBLOB'=214 +'TINYTEXT'=215 +'TEXT'=216 +'MEDIUMTEXT'=217 +'LONGTEXT'=218 +'ENUM'=219 +'VARYING'=220 +'SERIAL'=221 +'YEAR_MONTH'=222 +'DAY_HOUR'=223 +'DAY_MINUTE'=224 +'DAY_SECOND'=225 +'HOUR_MINUTE'=226 +'HOUR_SECOND'=227 +'MINUTE_SECOND'=228 +'SECOND_MICROSECOND'=229 +'MINUTE_MICROSECOND'=230 +'HOUR_MICROSECOND'=231 +'DAY_MICROSECOND'=232 +'JSON_VALID'=233 +'JSON_SCHEMA_VALID'=234 +'AVG'=235 +'BIT_AND'=236 +'BIT_OR'=237 +'BIT_XOR'=238 +'COUNT'=239 +'GROUP_CONCAT'=240 +'MAX'=241 +'MIN'=242 +'STD'=243 +'STDDEV'=244 +'STDDEV_POP'=245 +'STDDEV_SAMP'=246 +'SUM'=247 +'VAR_POP'=248 +'VAR_SAMP'=249 +'VARIANCE'=250 +'CURRENT_DATE'=251 +'CURRENT_TIME'=252 +'CURRENT_TIMESTAMP'=253 +'LOCALTIME'=254 +'CURDATE'=255 +'CURTIME'=256 +'DATE_ADD'=257 +'DATE_SUB'=258 +'EXTRACT'=259 +'LOCALTIMESTAMP'=260 +'NOW'=261 +'POSITION'=262 +'SUBSTR'=263 +'SUBSTRING'=264 +'SYSDATE'=265 +'TRIM'=266 +'UTC_DATE'=267 +'UTC_TIME'=268 +'UTC_TIMESTAMP'=269 +'ACCOUNT'=270 +'ACTION'=271 +'AFTER'=272 +'AGGREGATE'=273 +'ALGORITHM'=274 +'ANY'=275 +'AT'=276 +'AUTHORS'=277 +'AUTOCOMMIT'=278 +'AUTOEXTEND_SIZE'=279 +'AUTO_INCREMENT'=280 +'AVG_ROW_LENGTH'=281 +'BEGIN'=282 +'BINLOG'=283 +'BIT'=284 +'BLOCK'=285 +'BOOL'=286 +'BOOLEAN'=287 +'BTREE'=288 +'CACHE'=289 +'CASCADED'=290 +'CHAIN'=291 +'CHANGED'=292 +'CHANNEL'=293 +'CHECKSUM'=294 +'PAGE_CHECKSUM'=295 +'CIPHER'=296 +'CLASS_ORIGIN'=297 +'CLIENT'=298 +'CLOSE'=299 +'COALESCE'=300 +'CODE'=301 +'COLUMNS'=302 +'COLUMN_FORMAT'=303 +'COLUMN_NAME'=304 +'COMMENT'=305 +'COMMIT'=306 +'COMPACT'=307 +'COMPLETION'=308 +'COMPRESSED'=309 +'COMPRESSION'=310 +'CONCURRENT'=311 +'CONNECTION'=312 +'CONSISTENT'=313 +'CONSTRAINT_CATALOG'=314 +'CONSTRAINT_SCHEMA'=315 +'CONSTRAINT_NAME'=316 +'CONTAINS'=317 +'CONTEXT'=318 +'CONTRIBUTORS'=319 +'COPY'=320 +'CPU'=321 +'CURSOR_NAME'=322 +'DATA'=323 +'DATAFILE'=324 +'DEALLOCATE'=325 +'DEFAULT_AUTH'=326 +'DEFINER'=327 +'DELAY_KEY_WRITE'=328 +'DES_KEY_FILE'=329 +'DIRECTORY'=330 +'DISABLE'=331 +'DISCARD'=332 +'DISK'=333 +'DO'=334 +'DUMPFILE'=335 +'DUPLICATE'=336 +'DYNAMIC'=337 +'ENABLE'=338 +'ENCRYPTION'=339 +'END'=340 +'ENDS'=341 +'ENGINE'=342 +'ENGINES'=343 +'ERROR'=344 +'ERRORS'=345 +'ESCAPE'=346 +'EVEN'=347 +'EVENT'=348 +'EVENTS'=349 +'EVERY'=350 +'EXCHANGE'=351 +'EXCLUSIVE'=352 +'EXPIRE'=353 +'EXPORT'=354 +'EXTENDED'=355 +'EXTENT_SIZE'=356 +'FAST'=357 +'FAULTS'=358 +'FIELDS'=359 +'FILE_BLOCK_SIZE'=360 +'FILTER'=361 +'FIRST'=362 +'FIXED'=363 +'FLUSH'=364 +'FOLLOWS'=365 +'FOUND'=366 +'FULL'=367 +'FUNCTION'=368 +'GENERAL'=369 +'GLOBAL'=370 +'GRANTS'=371 +'GROUP_REPLICATION'=372 +'HANDLER'=373 +'HASH'=374 +'HELP'=375 +'HOST'=376 +'HOSTS'=377 +'IDENTIFIED'=378 +'IGNORE_SERVER_IDS'=379 +'IMPORT'=380 +'INDEXES'=381 +'INITIAL_SIZE'=382 +'INPLACE'=383 +'INSERT_METHOD'=384 +'INSTALL'=385 +'INSTANCE'=386 +'INVISIBLE'=387 +'INVOKER'=388 +'IO'=389 +'IO_THREAD'=390 +'IPC'=391 +'ISOLATION'=392 +'ISSUER'=393 +'JSON'=394 +'KEY_BLOCK_SIZE'=395 +'LANGUAGE'=396 +'LAST'=397 +'LEAVES'=398 +'LESS'=399 +'LEVEL'=400 +'LIST'=401 +'LOCAL'=402 +'LOGFILE'=403 +'LOGS'=404 +'MASTER'=405 +'MASTER_AUTO_POSITION'=406 +'MASTER_CONNECT_RETRY'=407 +'MASTER_DELAY'=408 +'MASTER_HEARTBEAT_PERIOD'=409 +'MASTER_HOST'=410 +'MASTER_LOG_FILE'=411 +'MASTER_LOG_POS'=412 +'MASTER_PASSWORD'=413 +'MASTER_PORT'=414 +'MASTER_RETRY_COUNT'=415 +'MASTER_SSL'=416 +'MASTER_SSL_CA'=417 +'MASTER_SSL_CAPATH'=418 +'MASTER_SSL_CERT'=419 +'MASTER_SSL_CIPHER'=420 +'MASTER_SSL_CRL'=421 +'MASTER_SSL_CRLPATH'=422 +'MASTER_SSL_KEY'=423 +'MASTER_TLS_VERSION'=424 +'MASTER_USER'=425 +'MAX_CONNECTIONS_PER_HOUR'=426 +'MAX_QUERIES_PER_HOUR'=427 +'MAX_ROWS'=428 +'MAX_SIZE'=429 +'MAX_UPDATES_PER_HOUR'=430 +'MAX_USER_CONNECTIONS'=431 +'MEDIUM'=432 +'MEMBER'=433 +'MERGE'=434 +'MESSAGE_TEXT'=435 +'MID'=436 +'MIGRATE'=437 +'MIN_ROWS'=438 +'MODE'=439 +'MODIFY'=440 +'MUTEX'=441 +'MYSQL'=442 +'MYSQL_ERRNO'=443 +'NAME'=444 +'NAMES'=445 +'NCHAR'=446 +'NEVER'=447 +'NEXT'=448 +'NO'=449 +'NODEGROUP'=450 +'NONE'=451 +'OFFLINE'=452 +'OFFSET'=453 +'OF'=454 +'OJ'=455 +'OLD_PASSWORD'=456 +'ONE'=457 +'ONLINE'=458 +'ONLY'=459 +'OPEN'=460 +'OPTIMIZER_COSTS'=461 +'OPTIONS'=462 +'OWNER'=463 +'PACK_KEYS'=464 +'PAGE'=465 +'PARSER'=466 +'PARTIAL'=467 +'PARTITIONING'=468 +'PARTITIONS'=469 +'PASSWORD'=470 +'PHASE'=471 +'PLUGIN'=472 +'PLUGIN_DIR'=473 +'PLUGINS'=474 +'PORT'=475 +'PRECEDES'=476 +'PREPARE'=477 +'PRESERVE'=478 +'PREV'=479 +'PROCESSLIST'=480 +'PROFILE'=481 +'PROFILES'=482 +'PROXY'=483 +'QUERY'=484 +'QUICK'=485 +'REBUILD'=486 +'RECOVER'=487 +'REDO_BUFFER_SIZE'=488 +'REDUNDANT'=489 +'RELAY'=490 +'RELAY_LOG_FILE'=491 +'RELAY_LOG_POS'=492 +'RELAYLOG'=493 +'REMOVE'=494 +'REORGANIZE'=495 +'REPAIR'=496 +'REPLICATE_DO_DB'=497 +'REPLICATE_DO_TABLE'=498 +'REPLICATE_IGNORE_DB'=499 +'REPLICATE_IGNORE_TABLE'=500 +'REPLICATE_REWRITE_DB'=501 +'REPLICATE_WILD_DO_TABLE'=502 +'REPLICATE_WILD_IGNORE_TABLE'=503 +'REPLICATION'=504 +'RESET'=505 +'RESUME'=506 +'RETURNED_SQLSTATE'=507 +'RETURNS'=508 +'ROLE'=509 +'ROLLBACK'=510 +'ROLLUP'=511 +'ROTATE'=512 +'ROW'=513 +'ROWS'=514 +'ROW_FORMAT'=515 +'SAVEPOINT'=516 +'SCHEDULE'=517 +'SECURITY'=518 +'SERVER'=519 +'SESSION'=520 +'SHARE'=521 +'SHARED'=522 +'SIGNED'=523 +'SIMPLE'=524 +'SLAVE'=525 +'SLOW'=526 +'SNAPSHOT'=527 +'SOCKET'=528 +'SOME'=529 +'SONAME'=530 +'SOUNDS'=531 +'SOURCE'=532 +'SQL_AFTER_GTIDS'=533 +'SQL_AFTER_MTS_GAPS'=534 +'SQL_BEFORE_GTIDS'=535 +'SQL_BUFFER_RESULT'=536 +'SQL_CACHE'=537 +'SQL_NO_CACHE'=538 +'SQL_THREAD'=539 +'START'=540 +'STARTS'=541 +'STATS_AUTO_RECALC'=542 +'STATS_PERSISTENT'=543 +'STATS_SAMPLE_PAGES'=544 +'STATUS'=545 +'STOP'=546 +'STORAGE'=547 +'STORED'=548 +'STRING'=549 +'SUBCLASS_ORIGIN'=550 +'SUBJECT'=551 +'SUBPARTITION'=552 +'SUBPARTITIONS'=553 +'SUSPEND'=554 +'SWAPS'=555 +'SWITCHES'=556 +'TABLE_NAME'=557 +'TABLESPACE'=558 +'TEMPORARY'=559 +'TEMPTABLE'=560 +'THAN'=561 +'TRADITIONAL'=562 +'TRANSACTION'=563 +'TRANSACTIONAL'=564 +'TRIGGERS'=565 +'TRUNCATE'=566 +'UNDEFINED'=567 +'UNDOFILE'=568 +'UNDO_BUFFER_SIZE'=569 +'UNINSTALL'=570 +'UNKNOWN'=571 +'UNTIL'=572 +'UPGRADE'=573 +'USER'=574 +'USE_FRM'=575 +'USER_RESOURCES'=576 +'VALIDATION'=577 +'VALUE'=578 +'VARIABLES'=579 +'VIEW'=580 +'VIRTUAL'=581 +'VISIBLE'=582 +'WAIT'=583 +'WARNINGS'=584 +'WITHOUT'=585 +'WORK'=586 +'WRAPPER'=587 +'X509'=588 +'XA'=589 +'XML'=590 +'EUR'=591 +'USA'=592 +'JIS'=593 +'ISO'=594 +'INTERNAL'=595 +'QUARTER'=596 +'MONTH'=597 +'DAY'=598 +'HOUR'=599 +'MINUTE'=600 +'WEEK'=601 +'SECOND'=602 +'MICROSECOND'=603 +'TABLES'=604 +'ROUTINE'=605 +'EXECUTE'=606 +'FILE'=607 +'PROCESS'=608 +'RELOAD'=609 +'SHUTDOWN'=610 +'SUPER'=611 +'PRIVILEGES'=612 +'APPLICATION_PASSWORD_ADMIN'=613 +'AUDIT_ADMIN'=614 +'BACKUP_ADMIN'=615 +'BINLOG_ADMIN'=616 +'BINLOG_ENCRYPTION_ADMIN'=617 +'CLONE_ADMIN'=618 +'CONNECTION_ADMIN'=619 +'ENCRYPTION_KEY_ADMIN'=620 +'FIREWALL_ADMIN'=621 +'FIREWALL_USER'=622 +'GROUP_REPLICATION_ADMIN'=623 +'INNODB_REDO_LOG_ARCHIVE'=624 +'NDB_STORED_USER'=625 +'PERSIST_RO_VARIABLES_ADMIN'=626 +'REPLICATION_APPLIER'=627 +'REPLICATION_SLAVE_ADMIN'=628 +'RESOURCE_GROUP_ADMIN'=629 +'RESOURCE_GROUP_USER'=630 +'ROLE_ADMIN'=631 +'SET_USER_ID'=633 +'SHOW_ROUTINE'=634 +'SYSTEM_VARIABLES_ADMIN'=635 +'TABLE_ENCRYPTION_ADMIN'=636 +'VERSION_TOKEN_ADMIN'=637 +'XA_RECOVER_ADMIN'=638 +'ARMSCII8'=639 +'ASCII'=640 +'BIG5'=641 +'CP1250'=642 +'CP1251'=643 +'CP1256'=644 +'CP1257'=645 +'CP850'=646 +'CP852'=647 +'CP866'=648 +'CP932'=649 +'DEC8'=650 +'EUCJPMS'=651 +'EUCKR'=652 +'GB2312'=653 +'GBK'=654 +'GEOSTD8'=655 +'GREEK'=656 +'HEBREW'=657 +'HP8'=658 +'KEYBCS2'=659 +'KOI8R'=660 +'KOI8U'=661 +'LATIN1'=662 +'LATIN2'=663 +'LATIN5'=664 +'LATIN7'=665 +'MACCE'=666 +'MACROMAN'=667 +'SJIS'=668 +'SWE7'=669 +'TIS620'=670 +'UCS2'=671 +'UJIS'=672 +'UTF16'=673 +'UTF16LE'=674 +'UTF32'=675 +'UTF8'=676 +'UTF8MB3'=677 +'UTF8MB4'=678 +'ARCHIVE'=679 +'BLACKHOLE'=680 +'CSV'=681 +'FEDERATED'=682 +'INNODB'=683 +'MEMORY'=684 +'MRG_MYISAM'=685 +'MYISAM'=686 +'NDB'=687 +'NDBCLUSTER'=688 +'PERFORMANCE_SCHEMA'=689 +'TOKUDB'=690 +'REPEATABLE'=691 +'COMMITTED'=692 +'UNCOMMITTED'=693 +'SERIALIZABLE'=694 +'GEOMETRYCOLLECTION'=695 +'GEOMCOLLECTION'=696 +'GEOMETRY'=697 +'LINESTRING'=698 +'MULTILINESTRING'=699 +'MULTIPOINT'=700 +'MULTIPOLYGON'=701 +'POINT'=702 +'POLYGON'=703 +'ABS'=704 +'ACOS'=705 +'ADDDATE'=706 +'ADDTIME'=707 +'AES_DECRYPT'=708 +'AES_ENCRYPT'=709 +'AREA'=710 +'ASBINARY'=711 +'ASIN'=712 +'ASTEXT'=713 +'ASWKB'=714 +'ASWKT'=715 +'ASYMMETRIC_DECRYPT'=716 +'ASYMMETRIC_DERIVE'=717 +'ASYMMETRIC_ENCRYPT'=718 +'ASYMMETRIC_SIGN'=719 +'ASYMMETRIC_VERIFY'=720 +'ATAN'=721 +'ATAN2'=722 +'BENCHMARK'=723 +'BIN'=724 +'BIT_COUNT'=725 +'BIT_LENGTH'=726 +'BUFFER'=727 +'CATALOG_NAME'=728 +'CEIL'=729 +'CEILING'=730 +'CENTROID'=731 +'CHARACTER_LENGTH'=732 +'CHARSET'=733 +'CHAR_LENGTH'=734 +'COERCIBILITY'=735 +'COLLATION'=736 +'COMPRESS'=737 +'CONCAT'=738 +'CONCAT_WS'=739 +'CONNECTION_ID'=740 +'CONV'=741 +'CONVERT_TZ'=742 +'COS'=743 +'COT'=744 +'CRC32'=745 +'CREATE_ASYMMETRIC_PRIV_KEY'=746 +'CREATE_ASYMMETRIC_PUB_KEY'=747 +'CREATE_DH_PARAMETERS'=748 +'CREATE_DIGEST'=749 +'CROSSES'=750 +'DATEDIFF'=751 +'DATE_FORMAT'=752 +'DAYNAME'=753 +'DAYOFMONTH'=754 +'DAYOFWEEK'=755 +'DAYOFYEAR'=756 +'DECODE'=757 +'DEGREES'=758 +'DES_DECRYPT'=759 +'DES_ENCRYPT'=760 +'DIMENSION'=761 +'DISJOINT'=762 +'ELT'=763 +'ENCODE'=764 +'ENCRYPT'=765 +'ENDPOINT'=766 +'ENVELOPE'=767 +'EQUALS'=768 +'EXP'=769 +'EXPORT_SET'=770 +'EXTERIORRING'=771 +'EXTRACTVALUE'=772 +'FIELD'=773 +'FIND_IN_SET'=774 +'FLOOR'=775 +'FORMAT'=776 +'FOUND_ROWS'=777 +'FROM_BASE64'=778 +'FROM_DAYS'=779 +'FROM_UNIXTIME'=780 +'GEOMCOLLFROMTEXT'=781 +'GEOMCOLLFROMWKB'=782 +'GEOMETRYCOLLECTIONFROMTEXT'=783 +'GEOMETRYCOLLECTIONFROMWKB'=784 +'GEOMETRYFROMTEXT'=785 +'GEOMETRYFROMWKB'=786 +'GEOMETRYN'=787 +'GEOMETRYTYPE'=788 +'GEOMFROMTEXT'=789 +'GEOMFROMWKB'=790 +'GET_FORMAT'=791 +'GET_LOCK'=792 +'GLENGTH'=793 +'GREATEST'=794 +'GTID_SUBSET'=795 +'GTID_SUBTRACT'=796 +'HEX'=797 +'IFNULL'=798 +'INET6_ATON'=799 +'INET6_NTOA'=800 +'INET_ATON'=801 +'INET_NTOA'=802 +'INSTR'=803 +'INTERIORRINGN'=804 +'INTERSECTS'=805 +'ISCLOSED'=806 +'ISEMPTY'=807 +'ISNULL'=808 +'ISSIMPLE'=809 +'IS_FREE_LOCK'=810 +'IS_IPV4'=811 +'IS_IPV4_COMPAT'=812 +'IS_IPV4_MAPPED'=813 +'IS_IPV6'=814 +'IS_USED_LOCK'=815 +'LAST_INSERT_ID'=816 +'LCASE'=817 +'LEAST'=818 +'LENGTH'=819 +'LINEFROMTEXT'=820 +'LINEFROMWKB'=821 +'LINESTRINGFROMTEXT'=822 +'LINESTRINGFROMWKB'=823 +'LN'=824 +'LOAD_FILE'=825 +'LOCATE'=826 +'LOG'=827 +'LOG10'=828 +'LOG2'=829 +'LOWER'=830 +'LPAD'=831 +'LTRIM'=832 +'MAKEDATE'=833 +'MAKETIME'=834 +'MAKE_SET'=835 +'MASTER_POS_WAIT'=836 +'MBRCONTAINS'=837 +'MBRDISJOINT'=838 +'MBREQUAL'=839 +'MBRINTERSECTS'=840 +'MBROVERLAPS'=841 +'MBRTOUCHES'=842 +'MBRWITHIN'=843 +'MD5'=844 +'MLINEFROMTEXT'=845 +'MLINEFROMWKB'=846 +'MONTHNAME'=847 +'MPOINTFROMTEXT'=848 +'MPOINTFROMWKB'=849 +'MPOLYFROMTEXT'=850 +'MPOLYFROMWKB'=851 +'MULTILINESTRINGFROMTEXT'=852 +'MULTILINESTRINGFROMWKB'=853 +'MULTIPOINTFROMTEXT'=854 +'MULTIPOINTFROMWKB'=855 +'MULTIPOLYGONFROMTEXT'=856 +'MULTIPOLYGONFROMWKB'=857 +'NAME_CONST'=858 +'NULLIF'=859 +'NUMGEOMETRIES'=860 +'NUMINTERIORRINGS'=861 +'NUMPOINTS'=862 +'OCT'=863 +'OCTET_LENGTH'=864 +'ORD'=865 +'OVERLAPS'=866 +'PERIOD_ADD'=867 +'PERIOD_DIFF'=868 +'PI'=869 +'POINTFROMTEXT'=870 +'POINTFROMWKB'=871 +'POINTN'=872 +'POLYFROMTEXT'=873 +'POLYFROMWKB'=874 +'POLYGONFROMTEXT'=875 +'POLYGONFROMWKB'=876 +'POW'=877 +'POWER'=878 +'QUOTE'=879 +'RADIANS'=880 +'RAND'=881 +'RANDOM_BYTES'=882 +'RELEASE_LOCK'=883 +'REVERSE'=884 +'ROUND'=885 +'ROW_COUNT'=886 +'RPAD'=887 +'RTRIM'=888 +'SEC_TO_TIME'=889 +'SESSION_USER'=890 +'SHA'=891 +'SHA1'=892 +'SHA2'=893 +'SCHEMA_NAME'=894 +'SIGN'=895 +'SIN'=896 +'SLEEP'=897 +'SOUNDEX'=898 +'SQL_THREAD_WAIT_AFTER_GTIDS'=899 +'SQRT'=900 +'SRID'=901 +'STARTPOINT'=902 +'STRCMP'=903 +'STR_TO_DATE'=904 +'ST_AREA'=905 +'ST_ASBINARY'=906 +'ST_ASTEXT'=907 +'ST_ASWKB'=908 +'ST_ASWKT'=909 +'ST_BUFFER'=910 +'ST_CENTROID'=911 +'ST_CONTAINS'=912 +'ST_CROSSES'=913 +'ST_DIFFERENCE'=914 +'ST_DIMENSION'=915 +'ST_DISJOINT'=916 +'ST_DISTANCE'=917 +'ST_ENDPOINT'=918 +'ST_ENVELOPE'=919 +'ST_EQUALS'=920 +'ST_EXTERIORRING'=921 +'ST_GEOMCOLLFROMTEXT'=922 +'ST_GEOMCOLLFROMTXT'=923 +'ST_GEOMCOLLFROMWKB'=924 +'ST_GEOMETRYCOLLECTIONFROMTEXT'=925 +'ST_GEOMETRYCOLLECTIONFROMWKB'=926 +'ST_GEOMETRYFROMTEXT'=927 +'ST_GEOMETRYFROMWKB'=928 +'ST_GEOMETRYN'=929 +'ST_GEOMETRYTYPE'=930 +'ST_GEOMFROMTEXT'=931 +'ST_GEOMFROMWKB'=932 +'ST_INTERIORRINGN'=933 +'ST_INTERSECTION'=934 +'ST_INTERSECTS'=935 +'ST_ISCLOSED'=936 +'ST_ISEMPTY'=937 +'ST_ISSIMPLE'=938 +'ST_LINEFROMTEXT'=939 +'ST_LINEFROMWKB'=940 +'ST_LINESTRINGFROMTEXT'=941 +'ST_LINESTRINGFROMWKB'=942 +'ST_NUMGEOMETRIES'=943 +'ST_NUMINTERIORRING'=944 +'ST_NUMINTERIORRINGS'=945 +'ST_NUMPOINTS'=946 +'ST_OVERLAPS'=947 +'ST_POINTFROMTEXT'=948 +'ST_POINTFROMWKB'=949 +'ST_POINTN'=950 +'ST_POLYFROMTEXT'=951 +'ST_POLYFROMWKB'=952 +'ST_POLYGONFROMTEXT'=953 +'ST_POLYGONFROMWKB'=954 +'ST_SRID'=955 +'ST_STARTPOINT'=956 +'ST_SYMDIFFERENCE'=957 +'ST_TOUCHES'=958 +'ST_UNION'=959 +'ST_WITHIN'=960 +'ST_X'=961 +'ST_Y'=962 +'SUBDATE'=963 +'SUBSTRING_INDEX'=964 +'SUBTIME'=965 +'SYSTEM_USER'=966 +'TAN'=967 +'TIMEDIFF'=968 +'TIMESTAMPADD'=969 +'TIMESTAMPDIFF'=970 +'TIME_FORMAT'=971 +'TIME_TO_SEC'=972 +'TOUCHES'=973 +'TO_BASE64'=974 +'TO_DAYS'=975 +'TO_SECONDS'=976 +'UCASE'=977 +'UNCOMPRESS'=978 +'UNCOMPRESSED_LENGTH'=979 +'UNHEX'=980 +'UNIX_TIMESTAMP'=981 +'UPDATEXML'=982 +'UPPER'=983 +'UUID'=984 +'UUID_SHORT'=985 +'VALIDATE_PASSWORD_STRENGTH'=986 +'VERSION'=987 +'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS'=988 +'WEEKDAY'=989 +'WEEKOFYEAR'=990 +'WEIGHT_STRING'=991 +'WITHIN'=992 +'YEARWEEK'=993 +'Y'=994 +'X'=995 +':='=996 +'+='=997 +'-='=998 +'*='=999 +'/='=1000 +'%='=1001 +'&='=1002 +'^='=1003 +'|='=1004 +'*'=1005 +'/'=1006 +'%'=1007 +'+'=1008 +'--'=1009 +'-'=1010 +'DIV'=1011 +'MOD'=1012 +'='=1013 +'>'=1014 +'<'=1015 +'!'=1016 +'~'=1017 +'|'=1018 +'&'=1019 +'^'=1020 +'.'=1021 +'('=1022 +')'=1023 +','=1024 +';'=1025 +'@'=1026 +'0'=1027 +'1'=1028 +'2'=1029 +'\''=1030 +'"'=1031 +'`'=1032 +':'=1033 diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParser.interp b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParser.interp new file mode 100644 index 00000000000..268b6ae00b8 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParser.interp @@ -0,0 +1,2430 @@ +token literal names: +null +null +null +null +null +'ADD' +'ALL' +'ALTER' +'ALWAYS' +'ANALYZE' +'AND' +'AS' +'ASC' +'BEFORE' +'BETWEEN' +'BOTH' +'BY' +'CALL' +'CASCADE' +'CASE' +'CAST' +'CHANGE' +'CHARACTER' +'CHECK' +'COLLATE' +'COLUMN' +'CONDITION' +'CONSTRAINT' +'CONTINUE' +'CONVERT' +'CREATE' +'CROSS' +'CURRENT' +'CURRENT_USER' +'CURSOR' +'DATABASE' +'DATABASES' +'DECLARE' +'DEFAULT' +'DELAYED' +'DELETE' +'DESC' +'DESCRIBE' +'DETERMINISTIC' +'DIAGNOSTICS' +'DISTINCT' +'DISTINCTROW' +'DROP' +'EACH' +'ELSE' +'ELSEIF' +'ENCLOSED' +'ESCAPED' +'EXISTS' +'EXIT' +'EXPLAIN' +'FALSE' +'FETCH' +'FOR' +'FORCE' +'FOREIGN' +'FROM' +'FULLTEXT' +'GENERATED' +'GET' +'GRANT' +'GROUP' +'HAVING' +'HIGH_PRIORITY' +'IF' +'IGNORE' +'IN' +'INDEX' +'INFILE' +'INNER' +'INOUT' +'INSERT' +'INTERVAL' +'INTO' +'IS' +'ITERATE' +'JOIN' +'KEY' +'KEYS' +'KILL' +'LEADING' +'LEAVE' +'LEFT' +'LIKE' +'LIMIT' +'LINEAR' +'LINES' +'LOAD' +'LOCK' +'LOOP' +'LOW_PRIORITY' +'MASTER_BIND' +'MASTER_SSL_VERIFY_SERVER_CERT' +'MATCH' +'MAXVALUE' +'MODIFIES' +'NATURAL' +'NOT' +'NO_WRITE_TO_BINLOG' +'NULL' +'NUMBER' +'ON' +'OPTIMIZE' +'OPTION' +'OPTIONALLY' +'OR' +'ORDER' +'OUT' +'OUTER' +'OUTFILE' +'PARTITION' +'PRIMARY' +'PROCEDURE' +'PURGE' +'RANGE' +'READ' +'READS' +'REFERENCES' +'REGEXP' +'RELEASE' +'RENAME' +'REPEAT' +'REPLACE' +'REQUIRE' +'RESIGNAL' +'RESTRICT' +'RETURN' +'REVOKE' +'RIGHT' +'RLIKE' +'SCHEMA' +'SCHEMAS' +'SELECT' +'SET' +'SEPARATOR' +'SHOW' +'SIGNAL' +'SPATIAL' +'SQL' +'SQLEXCEPTION' +'SQLSTATE' +'SQLWARNING' +'SQL_BIG_RESULT' +'SQL_CALC_FOUND_ROWS' +'SQL_SMALL_RESULT' +'SSL' +'STACKED' +'STARTING' +'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_VALID' +'JSON_SCHEMA_VALID' +'AVG' +'BIT_AND' +'BIT_OR' +'BIT_XOR' +'COUNT' +'GROUP_CONCAT' +'MAX' +'MIN' +'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' +'COALESCE' +'CODE' +'COLUMNS' +'COLUMN_FORMAT' +'COLUMN_NAME' +'COMMENT' +'COMMIT' +'COMPACT' +'COMPLETION' +'COMPRESSED' +'COMPRESSION' +'CONCURRENT' +'CONNECTION' +'CONSISTENT' +'CONSTRAINT_CATALOG' +'CONSTRAINT_SCHEMA' +'CONSTRAINT_NAME' +'CONTAINS' +'CONTEXT' +'CONTRIBUTORS' +'COPY' +'CPU' +'CURSOR_NAME' +'DATA' +'DATAFILE' +'DEALLOCATE' +'DEFAULT_AUTH' +'DEFINER' +'DELAY_KEY_WRITE' +'DES_KEY_FILE' +'DIRECTORY' +'DISABLE' +'DISCARD' +'DISK' +'DO' +'DUMPFILE' +'DUPLICATE' +'DYNAMIC' +'ENABLE' +'ENCRYPTION' +'END' +'ENDS' +'ENGINE' +'ENGINES' +'ERROR' +'ERRORS' +'ESCAPE' +'EVEN' +'EVENT' +'EVENTS' +'EVERY' +'EXCHANGE' +'EXCLUSIVE' +'EXPIRE' +'EXPORT' +'EXTENDED' +'EXTENT_SIZE' +'FAST' +'FAULTS' +'FIELDS' +'FILE_BLOCK_SIZE' +'FILTER' +'FIRST' +'FIXED' +'FLUSH' +'FOLLOWS' +'FOUND' +'FULL' +'FUNCTION' +'GENERAL' +'GLOBAL' +'GRANTS' +'GROUP_REPLICATION' +'HANDLER' +'HASH' +'HELP' +'HOST' +'HOSTS' +'IDENTIFIED' +'IGNORE_SERVER_IDS' +'IMPORT' +'INDEXES' +'INITIAL_SIZE' +'INPLACE' +'INSERT_METHOD' +'INSTALL' +'INSTANCE' +'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' +'NODEGROUP' +'NONE' +'OFFLINE' +'OFFSET' +'OF' +'OJ' +'OLD_PASSWORD' +'ONE' +'ONLINE' +'ONLY' +'OPEN' +'OPTIMIZER_COSTS' +'OPTIONS' +'OWNER' +'PACK_KEYS' +'PAGE' +'PARSER' +'PARTIAL' +'PARTITIONING' +'PARTITIONS' +'PASSWORD' +'PHASE' +'PLUGIN' +'PLUGIN_DIR' +'PLUGINS' +'PORT' +'PRECEDES' +'PREPARE' +'PRESERVE' +'PREV' +'PROCESSLIST' +'PROFILE' +'PROFILES' +'PROXY' +'QUERY' +'QUICK' +'REBUILD' +'RECOVER' +'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' +'RESUME' +'RETURNED_SQLSTATE' +'RETURNS' +'ROLE' +'ROLLBACK' +'ROLLUP' +'ROTATE' +'ROW' +'ROWS' +'ROW_FORMAT' +'SAVEPOINT' +'SCHEDULE' +'SECURITY' +'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' +'TEMPORARY' +'TEMPTABLE' +'THAN' +'TRADITIONAL' +'TRANSACTION' +'TRANSACTIONAL' +'TRIGGERS' +'TRUNCATE' +'UNDEFINED' +'UNDOFILE' +'UNDO_BUFFER_SIZE' +'UNINSTALL' +'UNKNOWN' +'UNTIL' +'UPGRADE' +'USER' +'USE_FRM' +'USER_RESOURCES' +'VALIDATION' +'VALUE' +'VARIABLES' +'VIEW' +'VIRTUAL' +'VISIBLE' +'WAIT' +'WARNINGS' +'WITHOUT' +'WORK' +'WRAPPER' +'X509' +'XA' +'XML' +'EUR' +'USA' +'JIS' +'ISO' +'INTERNAL' +'QUARTER' +'MONTH' +'DAY' +'HOUR' +'MINUTE' +'WEEK' +'SECOND' +'MICROSECOND' +'TABLES' +'ROUTINE' +'EXECUTE' +'FILE' +'PROCESS' +'RELOAD' +'SHUTDOWN' +'SUPER' +'PRIVILEGES' +'APPLICATION_PASSWORD_ADMIN' +'AUDIT_ADMIN' +'BACKUP_ADMIN' +'BINLOG_ADMIN' +'BINLOG_ENCRYPTION_ADMIN' +'CLONE_ADMIN' +'CONNECTION_ADMIN' +'ENCRYPTION_KEY_ADMIN' +'FIREWALL_ADMIN' +'FIREWALL_USER' +'GROUP_REPLICATION_ADMIN' +'INNODB_REDO_LOG_ARCHIVE' +'NDB_STORED_USER' +'PERSIST_RO_VARIABLES_ADMIN' +'REPLICATION_APPLIER' +'REPLICATION_SLAVE_ADMIN' +'RESOURCE_GROUP_ADMIN' +'RESOURCE_GROUP_USER' +'ROLE_ADMIN' +null +'SET_USER_ID' +'SHOW_ROUTINE' +'SYSTEM_VARIABLES_ADMIN' +'TABLE_ENCRYPTION_ADMIN' +'VERSION_TOKEN_ADMIN' +'XA_RECOVER_ADMIN' +'ARMSCII8' +'ASCII' +'BIG5' +'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' +'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' +'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' +'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 + +token symbolic names: +null +SPACE +SPEC_MYSQL_COMMENT +COMMENT_INPUT +LINE_COMMENT +ADD +ALL +ALTER +ALWAYS +ANALYZE +AND +AS +ASC +BEFORE +BETWEEN +BOTH +BY +CALL +CASCADE +CASE +CAST +CHANGE +CHARACTER +CHECK +COLLATE +COLUMN +CONDITION +CONSTRAINT +CONTINUE +CONVERT +CREATE +CROSS +CURRENT +CURRENT_USER +CURSOR +DATABASE +DATABASES +DECLARE +DEFAULT +DELAYED +DELETE +DESC +DESCRIBE +DETERMINISTIC +DIAGNOSTICS +DISTINCT +DISTINCTROW +DROP +EACH +ELSE +ELSEIF +ENCLOSED +ESCAPED +EXISTS +EXIT +EXPLAIN +FALSE +FETCH +FOR +FORCE +FOREIGN +FROM +FULLTEXT +GENERATED +GET +GRANT +GROUP +HAVING +HIGH_PRIORITY +IF +IGNORE +IN +INDEX +INFILE +INNER +INOUT +INSERT +INTERVAL +INTO +IS +ITERATE +JOIN +KEY +KEYS +KILL +LEADING +LEAVE +LEFT +LIKE +LIMIT +LINEAR +LINES +LOAD +LOCK +LOOP +LOW_PRIORITY +MASTER_BIND +MASTER_SSL_VERIFY_SERVER_CERT +MATCH +MAXVALUE +MODIFIES +NATURAL +NOT +NO_WRITE_TO_BINLOG +NULL_LITERAL +NUMBER +ON +OPTIMIZE +OPTION +OPTIONALLY +OR +ORDER +OUT +OUTER +OUTFILE +PARTITION +PRIMARY +PROCEDURE +PURGE +RANGE +READ +READS +REFERENCES +REGEXP +RELEASE +RENAME +REPEAT +REPLACE +REQUIRE +RESIGNAL +RESTRICT +RETURN +REVOKE +RIGHT +RLIKE +SCHEMA +SCHEMAS +SELECT +SET +SEPARATOR +SHOW +SIGNAL +SPATIAL +SQL +SQLEXCEPTION +SQLSTATE +SQLWARNING +SQL_BIG_RESULT +SQL_CALC_FOUND_ROWS +SQL_SMALL_RESULT +SSL +STACKED +STARTING +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_VALID +JSON_SCHEMA_VALID +AVG +BIT_AND +BIT_OR +BIT_XOR +COUNT +GROUP_CONCAT +MAX +MIN +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 +COALESCE +CODE +COLUMNS +COLUMN_FORMAT +COLUMN_NAME +COMMENT +COMMIT +COMPACT +COMPLETION +COMPRESSED +COMPRESSION +CONCURRENT +CONNECTION +CONSISTENT +CONSTRAINT_CATALOG +CONSTRAINT_SCHEMA +CONSTRAINT_NAME +CONTAINS +CONTEXT +CONTRIBUTORS +COPY +CPU +CURSOR_NAME +DATA +DATAFILE +DEALLOCATE +DEFAULT_AUTH +DEFINER +DELAY_KEY_WRITE +DES_KEY_FILE +DIRECTORY +DISABLE +DISCARD +DISK +DO +DUMPFILE +DUPLICATE +DYNAMIC +ENABLE +ENCRYPTION +END +ENDS +ENGINE +ENGINES +ERROR +ERRORS +ESCAPE +EVEN +EVENT +EVENTS +EVERY +EXCHANGE +EXCLUSIVE +EXPIRE +EXPORT +EXTENDED +EXTENT_SIZE +FAST +FAULTS +FIELDS +FILE_BLOCK_SIZE +FILTER +FIRST +FIXED +FLUSH +FOLLOWS +FOUND +FULL +FUNCTION +GENERAL +GLOBAL +GRANTS +GROUP_REPLICATION +HANDLER +HASH +HELP +HOST +HOSTS +IDENTIFIED +IGNORE_SERVER_IDS +IMPORT +INDEXES +INITIAL_SIZE +INPLACE +INSERT_METHOD +INSTALL +INSTANCE +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 +NODEGROUP +NONE +OFFLINE +OFFSET +OF +OJ +OLD_PASSWORD +ONE +ONLINE +ONLY +OPEN +OPTIMIZER_COSTS +OPTIONS +OWNER +PACK_KEYS +PAGE +PARSER +PARTIAL +PARTITIONING +PARTITIONS +PASSWORD +PHASE +PLUGIN +PLUGIN_DIR +PLUGINS +PORT +PRECEDES +PREPARE +PRESERVE +PREV +PROCESSLIST +PROFILE +PROFILES +PROXY +QUERY +QUICK +REBUILD +RECOVER +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 +RESUME +RETURNED_SQLSTATE +RETURNS +ROLE +ROLLBACK +ROLLUP +ROTATE +ROW +ROWS +ROW_FORMAT +SAVEPOINT +SCHEDULE +SECURITY +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 +TEMPORARY +TEMPTABLE +THAN +TRADITIONAL +TRANSACTION +TRANSACTIONAL +TRIGGERS +TRUNCATE +UNDEFINED +UNDOFILE +UNDO_BUFFER_SIZE +UNINSTALL +UNKNOWN +UNTIL +UPGRADE +USER +USE_FRM +USER_RESOURCES +VALIDATION +VALUE +VARIABLES +VIEW +VIRTUAL +VISIBLE +WAIT +WARNINGS +WITHOUT +WORK +WRAPPER +X509 +XA +XML +EUR +USA +JIS +ISO +INTERNAL +QUARTER +MONTH +DAY +HOUR +MINUTE +WEEK +SECOND +MICROSECOND +TABLES +ROUTINE +EXECUTE +FILE +PROCESS +RELOAD +SHUTDOWN +SUPER +PRIVILEGES +APPLICATION_PASSWORD_ADMIN +AUDIT_ADMIN +BACKUP_ADMIN +BINLOG_ADMIN +BINLOG_ENCRYPTION_ADMIN +CLONE_ADMIN +CONNECTION_ADMIN +ENCRYPTION_KEY_ADMIN +FIREWALL_ADMIN +FIREWALL_USER +GROUP_REPLICATION_ADMIN +INNODB_REDO_LOG_ARCHIVE +NDB_STORED_USER +PERSIST_RO_VARIABLES_ADMIN +REPLICATION_APPLIER +REPLICATION_SLAVE_ADMIN +RESOURCE_GROUP_ADMIN +RESOURCE_GROUP_USER +ROLE_ADMIN +SESSION_VARIABLES_ADMIN +SET_USER_ID +SHOW_ROUTINE +SYSTEM_VARIABLES_ADMIN +TABLE_ENCRYPTION_ADMIN +VERSION_TOKEN_ADMIN +XA_RECOVER_ADMIN +ARMSCII8 +ASCII +BIG5 +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 +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 +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 +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 +MINUSMINUS +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 +LOCAL_ID +GLOBAL_ID +ERROR_RECONGNIGION + +rule names: +root +sqlStatements +sqlStatement +emptyStatement +ddlStatement +dmlStatement +transactionStatement +replicationStatement +preparedStatement +compoundStatement +administrationStatement +utilityStatement +createDatabase +createEvent +createIndex +createLogfileGroup +createProcedure +createFunction +createServer +createTable +createTablespaceInnodb +createTablespaceNdb +createTrigger +createView +createDatabaseOption +ownerStatement +scheduleExpression +timestampValue +intervalExpr +intervalType +enableType +indexType +indexOption +procedureParameter +functionParameter +routineOption +serverOption +createDefinitions +createDefinition +columnDefinition +columnConstraint +tableConstraint +referenceDefinition +referenceAction +referenceControlType +indexColumnDefinition +tableOption +tablespaceStorage +partitionDefinitions +partitionFunctionDefinition +subpartitionFunctionDefinition +partitionDefinition +partitionDefinerAtom +partitionDefinerVector +subpartitionDefinition +partitionOption +alterDatabase +alterEvent +alterFunction +alterInstance +alterLogfileGroup +alterProcedure +alterServer +alterTable +alterTablespace +alterView +alterSpecification +dropDatabase +dropEvent +dropIndex +dropLogfileGroup +dropProcedure +dropFunction +dropServer +dropTable +dropTablespace +dropTrigger +dropView +renameTable +renameTableClause +truncateTable +callStatement +deleteStatement +doStatement +handlerStatement +insertStatement +loadDataStatement +loadXmlStatement +replaceStatement +selectStatement +updateStatement +insertStatementValue +updatedElement +assignmentField +lockClause +singleDeleteStatement +multipleDeleteStatement +handlerOpenStatement +handlerReadIndexStatement +handlerReadStatement +handlerCloseStatement +singleUpdateStatement +multipleUpdateStatement +orderByClause +orderByExpression +tableSources +tableSource +tableSourceItem +indexHint +indexHintType +joinPart +queryExpression +queryExpressionNointo +querySpecification +querySpecificationNointo +unionParenthesis +unionStatement +selectSpec +selectElements +selectElement +selectIntoExpression +selectFieldsInto +selectLinesInto +fromClause +groupByItem +limitClause +limitClauseAtom +startTransaction +beginWork +commitWork +rollbackWork +savepointStatement +rollbackStatement +releaseStatement +lockTables +unlockTables +setAutocommitStatement +setTransactionStatement +transactionMode +lockTableElement +lockAction +transactionOption +transactionLevel +changeMaster +changeReplicationFilter +purgeBinaryLogs +resetMaster +resetSlave +startSlave +stopSlave +startGroupReplication +stopGroupReplication +masterOption +stringMasterOption +decimalMasterOption +boolMasterOption +channelOption +replicationFilter +tablePair +threadType +untilOption +connectionOption +gtuidSet +xaStartTransaction +xaEndTransaction +xaPrepareStatement +xaCommitWork +xaRollbackWork +xaRecoverWork +prepareStatement +executeStatement +deallocatePrepare +routineBody +blockStatement +caseStatement +ifStatement +iterateStatement +leaveStatement +loopStatement +repeatStatement +returnStatement +whileStatement +cursorStatement +declareVariable +declareCondition +declareCursor +declareHandler +handlerConditionValue +procedureSqlStatement +caseAlternative +elifAlternative +alterUser +createUser +dropUser +grantStatement +grantProxy +renameUser +revokeStatement +revokeProxy +setPasswordStatement +userSpecification +userAuthOption +tlsOption +userResourceOption +userPasswordOption +userLockOption +privelegeClause +privilege +privilegeLevel +renameUserClause +analyzeTable +checkTable +checksumTable +optimizeTable +repairTable +checkTableOption +createUdfunction +installPlugin +uninstallPlugin +setStatement +showStatement +variableClause +showCommonEntity +showFilter +showGlobalInfoClause +showSchemaEntity +showProfileType +binlogStatement +cacheIndexStatement +flushStatement +killStatement +loadIndexIntoCache +resetStatement +shutdownStatement +tableIndexes +flushOption +flushTableOption +loadedTableIndexes +simpleDescribeStatement +fullDescribeStatement +helpStatement +useStatement +signalStatement +resignalStatement +signalConditionInformation +diagnosticsStatement +diagnosticsConditionInformationName +describeObjectClause +fullId +tableName +fullColumnName +indexColumnName +userName +mysqlVariable +charsetName +collationName +engineName +uuidSet +xid +xuidStringId +authPlugin +uid +simpleId +dottedId +decimalLiteral +fileSizeLiteral +stringLiteral +booleanLiteral +hexadecimalLiteral +nullNotnull +constant +dataType +collectionOptions +convertedDataType +lengthOneDimension +lengthTwoDimension +lengthTwoOptionalDimension +uidList +tables +indexColumnNames +expressions +expressionsForUpdate +expressionsWithDefaults +constants +simpleStrings +userVariables +defaultValue +currentTimestamp +expressionOrDefault +ifExists +ifNotExists +functionCall +specificFunction +caseFuncAlternative +levelsInWeightString +levelInWeightListElement +aggregateWindowedFunction +scalarFunctionName +passwordFunctionClause +functionArgs +functionArg +expression +predicate +expressionForUpdate +predicateForUpdate +expressionAtomForUpdate +expressionAtom +unaryOperator +comparisonOperator +logicalOperator +bitOperator +mathOperator +charsetNameBase +transactionLevelBase +privilegesBase +intervalTypeBase +dataTypeBase +keywordsCanBeId +functionNameBase + + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 1052, 6481, 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, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, 9, 187, 4, 188, 9, 188, 4, 189, 9, 189, 4, 190, 9, 190, 4, 191, 9, 191, 4, 192, 9, 192, 4, 193, 9, 193, 4, 194, 9, 194, 4, 195, 9, 195, 4, 196, 9, 196, 4, 197, 9, 197, 4, 198, 9, 198, 4, 199, 9, 199, 4, 200, 9, 200, 4, 201, 9, 201, 4, 202, 9, 202, 4, 203, 9, 203, 4, 204, 9, 204, 4, 205, 9, 205, 4, 206, 9, 206, 4, 207, 9, 207, 4, 208, 9, 208, 4, 209, 9, 209, 4, 210, 9, 210, 4, 211, 9, 211, 4, 212, 9, 212, 4, 213, 9, 213, 4, 214, 9, 214, 4, 215, 9, 215, 4, 216, 9, 216, 4, 217, 9, 217, 4, 218, 9, 218, 4, 219, 9, 219, 4, 220, 9, 220, 4, 221, 9, 221, 4, 222, 9, 222, 4, 223, 9, 223, 4, 224, 9, 224, 4, 225, 9, 225, 4, 226, 9, 226, 4, 227, 9, 227, 4, 228, 9, 228, 4, 229, 9, 229, 4, 230, 9, 230, 4, 231, 9, 231, 4, 232, 9, 232, 4, 233, 9, 233, 4, 234, 9, 234, 4, 235, 9, 235, 4, 236, 9, 236, 4, 237, 9, 237, 4, 238, 9, 238, 4, 239, 9, 239, 4, 240, 9, 240, 4, 241, 9, 241, 4, 242, 9, 242, 4, 243, 9, 243, 4, 244, 9, 244, 4, 245, 9, 245, 4, 246, 9, 246, 4, 247, 9, 247, 4, 248, 9, 248, 4, 249, 9, 249, 4, 250, 9, 250, 4, 251, 9, 251, 4, 252, 9, 252, 4, 253, 9, 253, 4, 254, 9, 254, 4, 255, 9, 255, 4, 256, 9, 256, 4, 257, 9, 257, 4, 258, 9, 258, 4, 259, 9, 259, 4, 260, 9, 260, 4, 261, 9, 261, 4, 262, 9, 262, 4, 263, 9, 263, 4, 264, 9, 264, 4, 265, 9, 265, 4, 266, 9, 266, 4, 267, 9, 267, 4, 268, 9, 268, 4, 269, 9, 269, 4, 270, 9, 270, 4, 271, 9, 271, 4, 272, 9, 272, 4, 273, 9, 273, 4, 274, 9, 274, 4, 275, 9, 275, 4, 276, 9, 276, 4, 277, 9, 277, 4, 278, 9, 278, 4, 279, 9, 279, 4, 280, 9, 280, 4, 281, 9, 281, 4, 282, 9, 282, 4, 283, 9, 283, 4, 284, 9, 284, 4, 285, 9, 285, 4, 286, 9, 286, 4, 287, 9, 287, 4, 288, 9, 288, 4, 289, 9, 289, 4, 290, 9, 290, 4, 291, 9, 291, 4, 292, 9, 292, 4, 293, 9, 293, 4, 294, 9, 294, 4, 295, 9, 295, 4, 296, 9, 296, 4, 297, 9, 297, 4, 298, 9, 298, 4, 299, 9, 299, 4, 300, 9, 300, 4, 301, 9, 301, 4, 302, 9, 302, 4, 303, 9, 303, 4, 304, 9, 304, 4, 305, 9, 305, 4, 306, 9, 306, 4, 307, 9, 307, 4, 308, 9, 308, 4, 309, 9, 309, 4, 310, 9, 310, 4, 311, 9, 311, 4, 312, 9, 312, 4, 313, 9, 313, 4, 314, 9, 314, 4, 315, 9, 315, 4, 316, 9, 316, 4, 317, 9, 317, 4, 318, 9, 318, 4, 319, 9, 319, 4, 320, 9, 320, 3, 2, 5, 2, 642, 10, 2, 3, 2, 5, 2, 645, 10, 2, 3, 2, 3, 2, 3, 3, 3, 3, 5, 3, 651, 10, 3, 3, 3, 5, 3, 654, 10, 3, 3, 3, 7, 3, 657, 10, 3, 12, 3, 14, 3, 660, 11, 3, 3, 3, 3, 3, 5, 3, 664, 10, 3, 3, 3, 5, 3, 667, 10, 3, 3, 3, 5, 3, 670, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 679, 10, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 718, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 730, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 741, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 758, 10, 9, 3, 10, 3, 10, 3, 10, 5, 10, 763, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 775, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 802, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 811, 10, 13, 3, 14, 3, 14, 3, 14, 5, 14, 816, 10, 14, 3, 14, 3, 14, 7, 14, 820, 10, 14, 12, 14, 14, 14, 823, 11, 14, 3, 15, 3, 15, 5, 15, 827, 10, 15, 3, 15, 3, 15, 5, 15, 831, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 840, 10, 15, 3, 15, 5, 15, 843, 10, 15, 3, 15, 5, 15, 846, 10, 15, 3, 15, 3, 15, 5, 15, 850, 10, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 5, 16, 857, 10, 16, 3, 16, 5, 16, 860, 10, 16, 3, 16, 3, 16, 3, 16, 5, 16, 865, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 871, 10, 16, 12, 16, 14, 16, 874, 11, 16, 3, 16, 3, 16, 5, 16, 878, 10, 16, 3, 16, 3, 16, 3, 16, 5, 16, 883, 10, 16, 3, 16, 7, 16, 886, 10, 16, 12, 16, 14, 16, 889, 11, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 900, 10, 17, 3, 17, 5, 17, 903, 10, 17, 3, 17, 3, 17, 5, 17, 907, 10, 17, 3, 17, 5, 17, 910, 10, 17, 3, 17, 3, 17, 5, 17, 914, 10, 17, 3, 17, 5, 17, 917, 10, 17, 3, 17, 3, 17, 5, 17, 921, 10, 17, 3, 17, 5, 17, 924, 10, 17, 3, 17, 5, 17, 927, 10, 17, 3, 17, 3, 17, 5, 17, 931, 10, 17, 3, 17, 5, 17, 934, 10, 17, 3, 17, 3, 17, 5, 17, 938, 10, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 944, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 950, 10, 18, 3, 18, 3, 18, 7, 18, 954, 10, 18, 12, 18, 14, 18, 957, 11, 18, 3, 18, 3, 18, 7, 18, 961, 10, 18, 12, 18, 14, 18, 964, 11, 18, 3, 18, 3, 18, 3, 19, 3, 19, 5, 19, 970, 10, 19, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 976, 10, 19, 3, 19, 3, 19, 7, 19, 980, 10, 19, 12, 19, 14, 19, 983, 11, 19, 3, 19, 3, 19, 3, 19, 3, 19, 7, 19, 989, 10, 19, 12, 19, 14, 19, 992, 11, 19, 3, 19, 3, 19, 5, 19, 996, 10, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 1010, 10, 20, 12, 20, 14, 20, 1013, 11, 20, 3, 20, 3, 20, 3, 21, 3, 21, 5, 21, 1019, 10, 21, 3, 21, 3, 21, 5, 21, 1023, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 1033, 10, 21, 3, 21, 3, 21, 5, 21, 1037, 10, 21, 3, 21, 3, 21, 5, 21, 1041, 10, 21, 3, 21, 3, 21, 5, 21, 1045, 10, 21, 3, 21, 3, 21, 5, 21, 1049, 10, 21, 3, 21, 7, 21, 1052, 10, 21, 12, 21, 14, 21, 1055, 11, 21, 5, 21, 1057, 10, 21, 3, 21, 5, 21, 1060, 10, 21, 3, 21, 5, 21, 1063, 10, 21, 3, 21, 5, 21, 1066, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 1072, 10, 21, 3, 21, 3, 21, 5, 21, 1076, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 1082, 10, 21, 3, 21, 7, 21, 1085, 10, 21, 12, 21, 14, 21, 1088, 11, 21, 5, 21, 1090, 10, 21, 3, 21, 5, 21, 1093, 10, 21, 5, 21, 1095, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 1106, 10, 22, 3, 22, 3, 22, 5, 22, 1110, 10, 22, 3, 22, 5, 22, 1113, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 1127, 10, 23, 3, 23, 5, 23, 1130, 10, 23, 3, 23, 3, 23, 5, 23, 1134, 10, 23, 3, 23, 5, 23, 1137, 10, 23, 3, 23, 3, 23, 5, 23, 1141, 10, 23, 3, 23, 5, 23, 1144, 10, 23, 3, 23, 3, 23, 5, 23, 1148, 10, 23, 3, 23, 5, 23, 1151, 10, 23, 3, 23, 3, 23, 5, 23, 1155, 10, 23, 3, 23, 5, 23, 1158, 10, 23, 3, 23, 5, 23, 1161, 10, 23, 3, 23, 3, 23, 5, 23, 1165, 10, 23, 3, 23, 5, 23, 1168, 10, 23, 3, 23, 3, 23, 5, 23, 1172, 10, 23, 3, 23, 3, 23, 3, 24, 3, 24, 5, 24, 1178, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 1191, 10, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 5, 25, 1198, 10, 25, 3, 25, 3, 25, 3, 25, 5, 25, 1203, 10, 25, 3, 25, 5, 25, 1206, 10, 25, 3, 25, 3, 25, 3, 25, 5, 25, 1211, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 1219, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 1225, 10, 25, 3, 25, 3, 25, 5, 25, 1229, 10, 25, 3, 26, 5, 26, 1232, 10, 26, 3, 26, 3, 26, 3, 26, 5, 26, 1237, 10, 26, 3, 26, 5, 26, 1240, 10, 26, 3, 26, 3, 26, 5, 26, 1244, 10, 26, 3, 26, 5, 26, 1247, 10, 26, 3, 26, 3, 26, 5, 26, 1251, 10, 26, 3, 26, 5, 26, 1254, 10, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 1262, 10, 27, 5, 27, 1264, 10, 27, 3, 28, 3, 28, 3, 28, 7, 28, 1269, 10, 28, 12, 28, 14, 28, 1272, 11, 28, 3, 28, 3, 28, 3, 28, 5, 28, 1277, 10, 28, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 1283, 10, 28, 12, 28, 14, 28, 1286, 11, 28, 5, 28, 1288, 10, 28, 3, 28, 3, 28, 3, 28, 7, 28, 1293, 10, 28, 12, 28, 14, 28, 1296, 11, 28, 5, 28, 1298, 10, 28, 5, 28, 1300, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 1306, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 1312, 10, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 1329, 10, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 1336, 10, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 5, 34, 1343, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 1354, 10, 34, 3, 35, 5, 35, 1357, 10, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 1370, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 1383, 10, 37, 3, 37, 3, 37, 3, 37, 5, 37, 1388, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 1404, 10, 38, 3, 39, 3, 39, 3, 39, 3, 39, 7, 39, 1410, 10, 39, 12, 39, 14, 39, 1413, 11, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1422, 10, 40, 3, 41, 3, 41, 7, 41, 1426, 10, 41, 12, 41, 14, 41, 1429, 11, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 1438, 10, 42, 3, 42, 5, 42, 1441, 10, 42, 3, 42, 3, 42, 3, 42, 5, 42, 1446, 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 1459, 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 1466, 10, 42, 3, 42, 3, 42, 3, 42, 5, 42, 1471, 10, 42, 3, 43, 3, 43, 5, 43, 1475, 10, 43, 5, 43, 1477, 10, 43, 3, 43, 3, 43, 3, 43, 5, 43, 1482, 10, 43, 3, 43, 5, 43, 1485, 10, 43, 3, 43, 3, 43, 7, 43, 1489, 10, 43, 12, 43, 14, 43, 1492, 11, 43, 3, 43, 3, 43, 5, 43, 1496, 10, 43, 5, 43, 1498, 10, 43, 3, 43, 3, 43, 5, 43, 1502, 10, 43, 3, 43, 5, 43, 1505, 10, 43, 3, 43, 5, 43, 1508, 10, 43, 3, 43, 3, 43, 7, 43, 1512, 10, 43, 12, 43, 14, 43, 1515, 11, 43, 3, 43, 3, 43, 5, 43, 1519, 10, 43, 5, 43, 1521, 10, 43, 3, 43, 3, 43, 3, 43, 5, 43, 1526, 10, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 1533, 10, 43, 5, 43, 1535, 10, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 1542, 10, 43, 3, 44, 3, 44, 3, 44, 5, 44, 1547, 10, 44, 3, 44, 3, 44, 5, 44, 1551, 10, 44, 3, 44, 5, 44, 1554, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 1562, 10, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 1570, 10, 45, 5, 45, 1572, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 1580, 10, 46, 3, 47, 3, 47, 5, 47, 1584, 10, 47, 3, 47, 5, 47, 1587, 10, 47, 3, 47, 3, 47, 7, 47, 1591, 10, 47, 12, 47, 14, 47, 1594, 11, 47, 3, 47, 3, 47, 5, 47, 1598, 10, 47, 3, 47, 5, 47, 1601, 10, 47, 3, 47, 3, 47, 7, 47, 1605, 10, 47, 12, 47, 14, 47, 1608, 11, 47, 5, 47, 1610, 10, 47, 3, 48, 3, 48, 5, 48, 1614, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1619, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1624, 10, 48, 3, 48, 3, 48, 5, 48, 1628, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1633, 10, 48, 3, 48, 5, 48, 1636, 10, 48, 3, 48, 3, 48, 5, 48, 1640, 10, 48, 3, 48, 3, 48, 5, 48, 1644, 10, 48, 3, 48, 3, 48, 5, 48, 1648, 10, 48, 3, 48, 3, 48, 5, 48, 1652, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1657, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1662, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1667, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1673, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1678, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1683, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1689, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1694, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1699, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1704, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1709, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1714, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1719, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1724, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1729, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1734, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1739, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1745, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1750, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1756, 10, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 1766, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 1773, 10, 50, 5, 50, 1775, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 7, 50, 1781, 10, 50, 12, 50, 14, 50, 1784, 11, 50, 3, 50, 3, 50, 5, 50, 1788, 10, 50, 3, 51, 5, 51, 1791, 10, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 1799, 10, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 1805, 10, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 1821, 10, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 1833, 10, 51, 5, 51, 1835, 10, 51, 3, 52, 5, 52, 1838, 10, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 5, 52, 1846, 10, 52, 3, 52, 3, 52, 3, 52, 3, 52, 5, 52, 1852, 10, 52, 3, 52, 3, 52, 3, 52, 3, 52, 5, 52, 1858, 10, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1869, 10, 53, 12, 53, 14, 53, 1872, 11, 53, 3, 53, 3, 53, 7, 53, 1876, 10, 53, 12, 53, 14, 53, 1879, 11, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1884, 10, 53, 12, 53, 14, 53, 1887, 11, 53, 5, 53, 1889, 10, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1898, 10, 53, 12, 53, 14, 53, 1901, 11, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1906, 10, 53, 12, 53, 14, 53, 1909, 11, 53, 5, 53, 1911, 10, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1921, 10, 53, 12, 53, 14, 53, 1924, 11, 53, 3, 53, 3, 53, 7, 53, 1928, 10, 53, 12, 53, 14, 53, 1931, 11, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1936, 10, 53, 12, 53, 14, 53, 1939, 11, 53, 5, 53, 1941, 10, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1951, 10, 53, 12, 53, 14, 53, 1954, 11, 53, 3, 53, 3, 53, 7, 53, 1958, 10, 53, 12, 53, 14, 53, 1961, 11, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1966, 10, 53, 12, 53, 14, 53, 1969, 11, 53, 5, 53, 1971, 10, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1976, 10, 53, 12, 53, 14, 53, 1979, 11, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1984, 10, 53, 12, 53, 14, 53, 1987, 11, 53, 5, 53, 1989, 10, 53, 5, 53, 1991, 10, 53, 3, 54, 3, 54, 3, 54, 5, 54, 1996, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 6, 55, 2002, 10, 55, 13, 55, 14, 55, 2003, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 7, 56, 2011, 10, 56, 12, 56, 14, 56, 2014, 11, 56, 3, 57, 5, 57, 2017, 10, 57, 3, 57, 3, 57, 5, 57, 2021, 10, 57, 3, 57, 3, 57, 3, 57, 5, 57, 2026, 10, 57, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 2032, 10, 57, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 2038, 10, 57, 3, 57, 3, 57, 3, 57, 5, 57, 2043, 10, 57, 3, 57, 3, 57, 3, 57, 5, 57, 2048, 10, 57, 3, 57, 3, 57, 3, 57, 5, 57, 2053, 10, 57, 3, 57, 3, 57, 3, 57, 5, 57, 2058, 10, 57, 3, 57, 5, 57, 2061, 10, 57, 3, 58, 3, 58, 3, 58, 5, 58, 2066, 10, 58, 3, 58, 6, 58, 2069, 10, 58, 13, 58, 14, 58, 2070, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 5, 58, 2081, 10, 58, 3, 59, 3, 59, 5, 59, 2085, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 2092, 10, 59, 3, 59, 3, 59, 3, 59, 5, 59, 2097, 10, 59, 3, 59, 5, 59, 2100, 10, 59, 3, 59, 3, 59, 3, 59, 5, 59, 2105, 10, 59, 3, 59, 5, 59, 2108, 10, 59, 3, 59, 3, 59, 5, 59, 2112, 10, 59, 3, 59, 3, 59, 5, 59, 2116, 10, 59, 3, 60, 3, 60, 3, 60, 3, 60, 7, 60, 2122, 10, 60, 12, 60, 14, 60, 2125, 11, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2143, 10, 62, 3, 62, 5, 62, 2146, 10, 62, 3, 62, 5, 62, 2149, 10, 62, 3, 62, 3, 62, 5, 62, 2153, 10, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 7, 63, 2161, 10, 63, 12, 63, 14, 63, 2164, 11, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 2174, 10, 64, 12, 64, 14, 64, 2177, 11, 64, 3, 64, 3, 64, 3, 65, 3, 65, 5, 65, 2183, 10, 65, 3, 65, 5, 65, 2186, 10, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 2193, 10, 65, 12, 65, 14, 65, 2196, 11, 65, 5, 65, 2198, 10, 65, 3, 65, 5, 65, 2201, 10, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 2212, 10, 66, 3, 66, 5, 66, 2215, 10, 66, 3, 66, 3, 66, 5, 66, 2219, 10, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 2227, 10, 67, 3, 67, 5, 67, 2230, 10, 67, 3, 67, 3, 67, 3, 67, 5, 67, 2235, 10, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 2243, 10, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 2249, 10, 67, 3, 67, 3, 67, 5, 67, 2253, 10, 67, 3, 68, 3, 68, 5, 68, 2257, 10, 68, 3, 68, 7, 68, 2260, 10, 68, 12, 68, 14, 68, 2263, 11, 68, 3, 68, 3, 68, 5, 68, 2267, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2274, 10, 68, 3, 68, 3, 68, 5, 68, 2278, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 7, 68, 2287, 10, 68, 12, 68, 14, 68, 2290, 11, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2297, 10, 68, 3, 68, 5, 68, 2300, 10, 68, 3, 68, 3, 68, 7, 68, 2304, 10, 68, 12, 68, 14, 68, 2307, 11, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2312, 10, 68, 5, 68, 2314, 10, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2319, 10, 68, 3, 68, 5, 68, 2322, 10, 68, 3, 68, 3, 68, 7, 68, 2326, 10, 68, 12, 68, 14, 68, 2329, 11, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2334, 10, 68, 5, 68, 2336, 10, 68, 3, 68, 3, 68, 5, 68, 2340, 10, 68, 3, 68, 5, 68, 2343, 10, 68, 3, 68, 5, 68, 2346, 10, 68, 3, 68, 3, 68, 7, 68, 2350, 10, 68, 12, 68, 14, 68, 2353, 11, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2358, 10, 68, 3, 68, 5, 68, 2361, 10, 68, 3, 68, 3, 68, 7, 68, 2365, 10, 68, 12, 68, 14, 68, 2368, 11, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2373, 10, 68, 5, 68, 2375, 10, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2380, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2388, 10, 68, 5, 68, 2390, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2399, 10, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2404, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2412, 10, 68, 3, 68, 3, 68, 5, 68, 2416, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2424, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2434, 10, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2439, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2446, 10, 68, 3, 68, 3, 68, 5, 68, 2450, 10, 68, 3, 68, 3, 68, 5, 68, 2454, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2478, 10, 68, 3, 68, 3, 68, 5, 68, 2482, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2494, 10, 68, 3, 68, 5, 68, 2497, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2506, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 7, 68, 2521, 10, 68, 12, 68, 14, 68, 2524, 11, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2535, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2542, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2549, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 7, 68, 2562, 10, 68, 12, 68, 14, 68, 2565, 11, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2577, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2583, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2589, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2595, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2601, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2607, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2613, 10, 68, 3, 69, 3, 69, 3, 69, 5, 69, 2618, 10, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 5, 70, 2625, 10, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 5, 71, 2632, 10, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 5, 71, 2639, 10, 71, 3, 71, 3, 71, 3, 71, 5, 71, 2644, 10, 71, 3, 71, 7, 71, 2647, 10, 71, 12, 71, 14, 71, 2650, 11, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 5, 73, 2663, 10, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 5, 74, 2670, 10, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 5, 75, 2677, 10, 75, 3, 75, 3, 75, 3, 76, 3, 76, 5, 76, 2683, 10, 76, 3, 76, 3, 76, 5, 76, 2687, 10, 76, 3, 76, 3, 76, 5, 76, 2691, 10, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 5, 77, 2698, 10, 77, 3, 77, 5, 77, 2701, 10, 77, 3, 78, 3, 78, 3, 78, 5, 78, 2706, 10, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 5, 79, 2713, 10, 79, 3, 79, 3, 79, 3, 79, 7, 79, 2718, 10, 79, 12, 79, 14, 79, 2721, 11, 79, 3, 79, 5, 79, 2724, 10, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 7, 80, 2731, 10, 80, 12, 80, 14, 80, 2734, 11, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 5, 82, 2742, 10, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 2751, 10, 83, 3, 83, 5, 83, 2754, 10, 83, 3, 84, 3, 84, 5, 84, 2758, 10, 84, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 5, 86, 2767, 10, 86, 3, 87, 3, 87, 5, 87, 2771, 10, 87, 3, 87, 5, 87, 2774, 10, 87, 3, 87, 5, 87, 2777, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 2783, 10, 87, 3, 87, 5, 87, 2786, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 2792, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 7, 87, 2799, 10, 87, 12, 87, 14, 87, 2802, 11, 87, 5, 87, 2804, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 7, 87, 2813, 10, 87, 12, 87, 14, 87, 2816, 11, 87, 5, 87, 2818, 10, 87, 3, 88, 3, 88, 3, 88, 5, 88, 2823, 10, 88, 3, 88, 5, 88, 2826, 10, 88, 3, 88, 3, 88, 3, 88, 5, 88, 2831, 10, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 5, 88, 2841, 10, 88, 3, 88, 3, 88, 3, 88, 5, 88, 2846, 10, 88, 3, 88, 3, 88, 6, 88, 2850, 10, 88, 13, 88, 14, 88, 2851, 5, 88, 2854, 10, 88, 3, 88, 3, 88, 6, 88, 2858, 10, 88, 13, 88, 14, 88, 2859, 5, 88, 2862, 10, 88, 3, 88, 3, 88, 3, 88, 3, 88, 5, 88, 2868, 10, 88, 3, 88, 3, 88, 3, 88, 3, 88, 7, 88, 2874, 10, 88, 12, 88, 14, 88, 2877, 11, 88, 3, 88, 3, 88, 5, 88, 2881, 10, 88, 3, 88, 3, 88, 3, 88, 3, 88, 7, 88, 2887, 10, 88, 12, 88, 14, 88, 2890, 11, 88, 5, 88, 2892, 10, 88, 3, 89, 3, 89, 3, 89, 5, 89, 2897, 10, 89, 3, 89, 5, 89, 2900, 10, 89, 3, 89, 3, 89, 3, 89, 5, 89, 2905, 10, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 5, 89, 2913, 10, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 5, 89, 2921, 10, 89, 3, 89, 3, 89, 3, 89, 3, 89, 5, 89, 2927, 10, 89, 3, 89, 3, 89, 3, 89, 3, 89, 7, 89, 2933, 10, 89, 12, 89, 14, 89, 2936, 11, 89, 3, 89, 3, 89, 5, 89, 2940, 10, 89, 3, 89, 3, 89, 3, 89, 3, 89, 7, 89, 2946, 10, 89, 12, 89, 14, 89, 2949, 11, 89, 5, 89, 2951, 10, 89, 3, 90, 3, 90, 5, 90, 2955, 10, 90, 3, 90, 5, 90, 2958, 10, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 5, 90, 2966, 10, 90, 3, 90, 3, 90, 3, 90, 3, 90, 5, 90, 2972, 10, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 7, 90, 2979, 10, 90, 12, 90, 14, 90, 2982, 11, 90, 5, 90, 2984, 10, 90, 3, 91, 3, 91, 5, 91, 2988, 10, 91, 3, 91, 3, 91, 5, 91, 2992, 10, 91, 3, 91, 3, 91, 6, 91, 2996, 10, 91, 13, 91, 14, 91, 2997, 3, 91, 3, 91, 5, 91, 3002, 10, 91, 3, 91, 3, 91, 5, 91, 3006, 10, 91, 5, 91, 3008, 10, 91, 3, 91, 5, 91, 3011, 10, 91, 3, 91, 5, 91, 3014, 10, 91, 3, 91, 5, 91, 3017, 10, 91, 3, 91, 3, 91, 6, 91, 3021, 10, 91, 13, 91, 14, 91, 3022, 3, 91, 3, 91, 5, 91, 3027, 10, 91, 3, 91, 5, 91, 3030, 10, 91, 3, 91, 5, 91, 3033, 10, 91, 3, 91, 5, 91, 3036, 10, 91, 3, 91, 5, 91, 3039, 10, 91, 5, 91, 3041, 10, 91, 3, 92, 3, 92, 5, 92, 3045, 10, 92, 3, 93, 3, 93, 3, 93, 3, 93, 5, 93, 3051, 10, 93, 3, 93, 3, 93, 3, 93, 3, 93, 5, 93, 3057, 10, 93, 3, 93, 7, 93, 3060, 10, 93, 12, 93, 14, 93, 3063, 11, 93, 5, 93, 3065, 10, 93, 3, 94, 3, 94, 3, 94, 3, 94, 5, 94, 3071, 10, 94, 3, 95, 3, 95, 5, 95, 3075, 10, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 3083, 10, 96, 3, 97, 3, 97, 5, 97, 3087, 10, 97, 3, 97, 5, 97, 3090, 10, 97, 3, 97, 5, 97, 3093, 10, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 5, 97, 3102, 10, 97, 3, 97, 3, 97, 5, 97, 3106, 10, 97, 3, 97, 5, 97, 3109, 10, 97, 3, 97, 3, 97, 5, 97, 3113, 10, 97, 3, 98, 3, 98, 5, 98, 3117, 10, 98, 3, 98, 5, 98, 3120, 10, 98, 3, 98, 5, 98, 3123, 10, 98, 3, 98, 3, 98, 3, 98, 5, 98, 3128, 10, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 3134, 10, 98, 7, 98, 3136, 10, 98, 12, 98, 14, 98, 3139, 11, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 3148, 10, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 3154, 10, 98, 7, 98, 3156, 10, 98, 12, 98, 14, 98, 3159, 11, 98, 3, 98, 3, 98, 3, 98, 5, 98, 3164, 10, 98, 3, 98, 3, 98, 5, 98, 3168, 10, 98, 3, 99, 3, 99, 3, 99, 3, 99, 5, 99, 3174, 10, 99, 3, 99, 5, 99, 3177, 10, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 3189, 10, 100, 3, 100, 3, 100, 5, 100, 3193, 10, 100, 3, 100, 3, 100, 5, 100, 3197, 10, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 5, 101, 3205, 10, 101, 3, 101, 3, 101, 5, 101, 3209, 10, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 103, 3, 103, 5, 103, 3217, 10, 103, 3, 103, 5, 103, 3220, 10, 103, 3, 103, 3, 103, 5, 103, 3224, 10, 103, 3, 103, 5, 103, 3227, 10, 103, 3, 103, 3, 103, 3, 103, 3, 103, 7, 103, 3233, 10, 103, 12, 103, 14, 103, 3236, 11, 103, 3, 103, 3, 103, 5, 103, 3240, 10, 103, 3, 103, 5, 103, 3243, 10, 103, 3, 103, 5, 103, 3246, 10, 103, 3, 104, 3, 104, 5, 104, 3250, 10, 104, 3, 104, 5, 104, 3253, 10, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 7, 104, 3260, 10, 104, 12, 104, 14, 104, 3263, 11, 104, 3, 104, 3, 104, 5, 104, 3267, 10, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 7, 105, 3274, 10, 105, 12, 105, 14, 105, 3277, 11, 105, 3, 106, 3, 106, 5, 106, 3281, 10, 106, 3, 107, 3, 107, 3, 107, 7, 107, 3286, 10, 107, 12, 107, 14, 107, 3289, 11, 107, 3, 108, 3, 108, 7, 108, 3293, 10, 108, 12, 108, 14, 108, 3296, 11, 108, 3, 108, 3, 108, 3, 108, 7, 108, 3301, 10, 108, 12, 108, 14, 108, 3304, 11, 108, 3, 108, 3, 108, 5, 108, 3308, 10, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 5, 109, 3316, 10, 109, 3, 109, 5, 109, 3319, 10, 109, 3, 109, 5, 109, 3322, 10, 109, 3, 109, 3, 109, 3, 109, 7, 109, 3327, 10, 109, 12, 109, 14, 109, 3330, 11, 109, 5, 109, 3332, 10, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 5, 109, 3339, 10, 109, 3, 109, 5, 109, 3342, 10, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 5, 109, 3350, 10, 109, 3, 110, 3, 110, 3, 110, 3, 110, 5, 110, 3356, 10, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 5, 111, 3367, 10, 111, 3, 112, 5, 112, 3370, 10, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 3381, 10, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 3387, 10, 112, 3, 112, 3, 112, 5, 112, 3391, 10, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 3402, 10, 112, 3, 112, 3, 112, 3, 112, 5, 112, 3407, 10, 112, 5, 112, 3409, 10, 112, 3, 112, 3, 112, 5, 112, 3413, 10, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 5, 113, 3423, 10, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 5, 114, 3433, 10, 114, 3, 115, 3, 115, 7, 115, 3437, 10, 115, 12, 115, 14, 115, 3440, 11, 115, 3, 115, 3, 115, 5, 115, 3444, 10, 115, 3, 115, 5, 115, 3447, 10, 115, 3, 115, 5, 115, 3450, 10, 115, 3, 115, 5, 115, 3453, 10, 115, 3, 115, 3, 115, 7, 115, 3457, 10, 115, 12, 115, 14, 115, 3460, 11, 115, 3, 115, 3, 115, 5, 115, 3464, 10, 115, 3, 115, 5, 115, 3467, 10, 115, 3, 115, 5, 115, 3470, 10, 115, 3, 115, 5, 115, 3473, 10, 115, 5, 115, 3475, 10, 115, 3, 116, 3, 116, 7, 116, 3479, 10, 116, 12, 116, 14, 116, 3482, 11, 116, 3, 116, 3, 116, 5, 116, 3486, 10, 116, 3, 116, 5, 116, 3489, 10, 116, 3, 116, 5, 116, 3492, 10, 116, 3, 117, 3, 117, 5, 117, 3496, 10, 117, 3, 117, 3, 117, 3, 118, 3, 118, 5, 118, 3502, 10, 118, 3, 118, 3, 118, 5, 118, 3506, 10, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 5, 119, 3516, 10, 119, 3, 120, 3, 120, 5, 120, 3520, 10, 120, 3, 120, 3, 120, 7, 120, 3524, 10, 120, 12, 120, 14, 120, 3527, 11, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 5, 121, 3535, 10, 121, 3, 121, 5, 121, 3538, 10, 121, 3, 121, 3, 121, 5, 121, 3542, 10, 121, 3, 121, 5, 121, 3545, 10, 121, 3, 121, 3, 121, 5, 121, 3549, 10, 121, 3, 121, 3, 121, 5, 121, 3553, 10, 121, 3, 121, 5, 121, 3556, 10, 121, 5, 121, 3558, 10, 121, 3, 122, 3, 122, 3, 122, 3, 122, 7, 122, 3564, 10, 122, 12, 122, 14, 122, 3567, 11, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 5, 122, 3578, 10, 122, 3, 122, 3, 122, 6, 122, 3582, 10, 122, 13, 122, 14, 122, 3583, 5, 122, 3586, 10, 122, 3, 122, 3, 122, 6, 122, 3590, 10, 122, 13, 122, 14, 122, 3591, 5, 122, 3594, 10, 122, 5, 122, 3596, 10, 122, 3, 123, 3, 123, 3, 123, 3, 123, 5, 123, 3602, 10, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 5, 123, 3610, 10, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 5, 124, 3618, 10, 124, 3, 125, 3, 125, 3, 125, 3, 125, 5, 125, 3624, 10, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 7, 125, 3631, 10, 125, 12, 125, 14, 125, 3634, 11, 125, 3, 125, 3, 125, 5, 125, 3638, 10, 125, 5, 125, 3640, 10, 125, 3, 125, 3, 125, 5, 125, 3644, 10, 125, 3, 126, 3, 126, 5, 126, 3648, 10, 126, 3, 127, 3, 127, 3, 127, 3, 127, 5, 127, 3654, 10, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 5, 127, 3661, 10, 127, 3, 128, 3, 128, 5, 128, 3665, 10, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 7, 129, 3672, 10, 129, 12, 129, 14, 129, 3675, 11, 129, 5, 129, 3677, 10, 129, 3, 130, 3, 130, 5, 130, 3681, 10, 130, 3, 131, 3, 131, 5, 131, 3685, 10, 131, 3, 131, 3, 131, 5, 131, 3689, 10, 131, 3, 131, 5, 131, 3692, 10, 131, 3, 131, 5, 131, 3695, 10, 131, 3, 131, 5, 131, 3698, 10, 131, 3, 132, 3, 132, 5, 132, 3702, 10, 132, 3, 132, 3, 132, 5, 132, 3706, 10, 132, 3, 132, 5, 132, 3709, 10, 132, 3, 132, 5, 132, 3712, 10, 132, 3, 132, 5, 132, 3715, 10, 132, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 5, 134, 3722, 10, 134, 3, 134, 3, 134, 5, 134, 3726, 10, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 7, 136, 3739, 10, 136, 12, 136, 14, 136, 3742, 11, 136, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 5, 139, 3754, 10, 139, 3, 139, 3, 139, 3, 139, 3, 139, 7, 139, 3760, 10, 139, 12, 139, 14, 139, 3763, 11, 139, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 5, 140, 3772, 10, 140, 3, 141, 3, 141, 5, 141, 3776, 10, 141, 3, 141, 5, 141, 3779, 10, 141, 3, 141, 3, 141, 3, 142, 3, 142, 5, 142, 3785, 10, 142, 3, 142, 5, 142, 3788, 10, 142, 3, 142, 5, 142, 3791, 10, 142, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 5, 143, 3800, 10, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 5, 144, 3809, 10, 144, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 7, 145, 3817, 10, 145, 12, 145, 14, 145, 3820, 11, 145, 3, 145, 5, 145, 3823, 10, 145, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 7, 146, 3831, 10, 146, 12, 146, 14, 146, 3834, 11, 146, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 5, 147, 3843, 10, 147, 3, 148, 3, 148, 3, 148, 3, 149, 3, 149, 3, 149, 5, 149, 3851, 10, 149, 3, 149, 5, 149, 3854, 10, 149, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 7, 150, 3861, 10, 150, 12, 150, 14, 150, 3864, 11, 150, 5, 150, 3866, 10, 150, 3, 150, 3, 150, 5, 150, 3870, 10, 150, 3, 150, 7, 150, 3873, 10, 150, 12, 150, 14, 150, 3876, 11, 150, 3, 150, 5, 150, 3879, 10, 150, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 7, 151, 3886, 10, 151, 12, 151, 14, 151, 3889, 11, 151, 5, 151, 3891, 10, 151, 3, 152, 3, 152, 3, 152, 3, 153, 3, 153, 3, 153, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 7, 154, 3920, 10, 154, 12, 154, 14, 154, 3923, 11, 154, 5, 154, 3925, 10, 154, 3, 154, 5, 154, 3928, 10, 154, 3, 155, 3, 155, 3, 156, 3, 156, 3, 157, 3, 157, 3, 158, 3, 158, 3, 158, 3, 158, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 7, 159, 3982, 10, 159, 12, 159, 14, 159, 3985, 11, 159, 3, 159, 3, 159, 5, 159, 3989, 10, 159, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 5, 162, 4017, 10, 162, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 5, 163, 4031, 10, 163, 3, 164, 3, 164, 3, 164, 7, 164, 4036, 10, 164, 12, 164, 14, 164, 4039, 11, 164, 3, 164, 5, 164, 4042, 10, 164, 3, 165, 3, 165, 3, 165, 3, 165, 5, 165, 4048, 10, 165, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 5, 166, 4056, 10, 166, 5, 166, 4058, 10, 166, 3, 167, 3, 167, 3, 167, 3, 167, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 5, 168, 4069, 10, 168, 3, 169, 3, 169, 3, 169, 3, 169, 3, 170, 3, 170, 3, 170, 3, 170, 5, 170, 4079, 10, 170, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 5, 171, 4086, 10, 171, 3, 172, 3, 172, 3, 172, 3, 172, 5, 172, 4092, 10, 172, 3, 173, 3, 173, 3, 173, 3, 173, 3, 174, 3, 174, 5, 174, 4100, 10, 174, 3, 175, 3, 175, 3, 175, 5, 175, 4105, 10, 175, 3, 175, 3, 175, 3, 175, 3, 175, 7, 175, 4111, 10, 175, 12, 175, 14, 175, 4114, 11, 175, 3, 175, 3, 175, 3, 175, 7, 175, 4119, 10, 175, 12, 175, 14, 175, 4122, 11, 175, 3, 175, 3, 175, 3, 175, 7, 175, 4127, 10, 175, 12, 175, 14, 175, 4130, 11, 175, 3, 175, 3, 175, 3, 175, 7, 175, 4135, 10, 175, 12, 175, 14, 175, 4138, 11, 175, 3, 175, 7, 175, 4141, 10, 175, 12, 175, 14, 175, 4144, 11, 175, 5, 175, 4146, 10, 175, 3, 175, 3, 175, 5, 175, 4150, 10, 175, 3, 176, 3, 176, 3, 176, 5, 176, 4155, 10, 176, 3, 176, 6, 176, 4158, 10, 176, 13, 176, 14, 176, 4159, 3, 176, 3, 176, 6, 176, 4164, 10, 176, 13, 176, 14, 176, 4165, 5, 176, 4168, 10, 176, 3, 176, 3, 176, 3, 176, 3, 177, 3, 177, 3, 177, 3, 177, 6, 177, 4177, 10, 177, 13, 177, 14, 177, 4178, 3, 177, 7, 177, 4182, 10, 177, 12, 177, 14, 177, 4185, 11, 177, 3, 177, 3, 177, 6, 177, 4189, 10, 177, 13, 177, 14, 177, 4190, 5, 177, 4193, 10, 177, 3, 177, 3, 177, 3, 177, 3, 178, 3, 178, 3, 178, 3, 179, 3, 179, 3, 179, 3, 180, 3, 180, 3, 180, 5, 180, 4207, 10, 180, 3, 180, 3, 180, 6, 180, 4211, 10, 180, 13, 180, 14, 180, 4212, 3, 180, 3, 180, 3, 180, 5, 180, 4218, 10, 180, 3, 181, 3, 181, 3, 181, 5, 181, 4223, 10, 181, 3, 181, 3, 181, 6, 181, 4227, 10, 181, 13, 181, 14, 181, 4228, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 5, 181, 4236, 10, 181, 3, 182, 3, 182, 3, 182, 3, 183, 3, 183, 3, 183, 5, 183, 4244, 10, 183, 3, 183, 3, 183, 3, 183, 3, 183, 6, 183, 4250, 10, 183, 13, 183, 14, 183, 4251, 3, 183, 3, 183, 3, 183, 5, 183, 4257, 10, 183, 3, 184, 3, 184, 3, 184, 3, 184, 5, 184, 4263, 10, 184, 3, 184, 5, 184, 4266, 10, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 5, 184, 4274, 10, 184, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 5, 185, 4281, 10, 185, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 5, 186, 4290, 10, 186, 3, 186, 5, 186, 4293, 10, 186, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 7, 188, 4308, 10, 188, 12, 188, 14, 188, 4311, 11, 188, 3, 188, 3, 188, 3, 189, 3, 189, 3, 189, 5, 189, 4318, 10, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 5, 189, 4326, 10, 189, 3, 190, 3, 190, 5, 190, 4330, 10, 190, 3, 190, 3, 190, 3, 191, 3, 191, 3, 191, 5, 191, 4337, 10, 191, 3, 191, 3, 191, 6, 191, 4341, 10, 191, 13, 191, 14, 191, 4342, 3, 192, 3, 192, 3, 192, 3, 192, 6, 192, 4349, 10, 192, 13, 192, 14, 192, 4350, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 7, 193, 4358, 10, 193, 12, 193, 14, 193, 4361, 11, 193, 3, 193, 3, 193, 3, 193, 5, 193, 4366, 10, 193, 3, 193, 3, 193, 3, 193, 7, 193, 4371, 10, 193, 12, 193, 14, 193, 4374, 11, 193, 3, 193, 3, 193, 3, 193, 3, 193, 5, 193, 4380, 10, 193, 3, 193, 7, 193, 4383, 10, 193, 12, 193, 14, 193, 4386, 11, 193, 5, 193, 4388, 10, 193, 5, 193, 4390, 10, 193, 3, 193, 3, 193, 6, 193, 4394, 10, 193, 13, 193, 14, 193, 4395, 5, 193, 4398, 10, 193, 3, 193, 3, 193, 7, 193, 4402, 10, 193, 12, 193, 14, 193, 4405, 11, 193, 5, 193, 4407, 10, 193, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 7, 194, 4414, 10, 194, 12, 194, 14, 194, 4417, 11, 194, 3, 194, 3, 194, 3, 194, 5, 194, 4422, 10, 194, 3, 194, 3, 194, 3, 194, 7, 194, 4427, 10, 194, 12, 194, 14, 194, 4430, 11, 194, 3, 194, 3, 194, 3, 194, 3, 194, 5, 194, 4436, 10, 194, 3, 194, 7, 194, 4439, 10, 194, 12, 194, 14, 194, 4442, 11, 194, 5, 194, 4444, 10, 194, 5, 194, 4446, 10, 194, 3, 194, 3, 194, 6, 194, 4450, 10, 194, 13, 194, 14, 194, 4451, 5, 194, 4454, 10, 194, 3, 194, 3, 194, 7, 194, 4458, 10, 194, 12, 194, 14, 194, 4461, 11, 194, 5, 194, 4463, 10, 194, 3, 195, 3, 195, 3, 195, 5, 195, 4468, 10, 195, 3, 195, 3, 195, 3, 195, 7, 195, 4473, 10, 195, 12, 195, 14, 195, 4476, 11, 195, 3, 196, 3, 196, 3, 196, 3, 196, 7, 196, 4482, 10, 196, 12, 196, 14, 196, 4485, 11, 196, 3, 196, 3, 196, 5, 196, 4489, 10, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 7, 196, 4496, 10, 196, 12, 196, 14, 196, 4499, 11, 196, 3, 196, 3, 196, 3, 196, 3, 196, 5, 196, 4505, 10, 196, 3, 196, 7, 196, 4508, 10, 196, 12, 196, 14, 196, 4511, 11, 196, 5, 196, 4513, 10, 196, 5, 196, 4515, 10, 196, 3, 196, 3, 196, 3, 196, 3, 196, 7, 196, 4521, 10, 196, 12, 196, 14, 196, 4524, 11, 196, 5, 196, 4526, 10, 196, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 7, 197, 4536, 10, 197, 12, 197, 14, 197, 4539, 11, 197, 3, 197, 3, 197, 3, 197, 5, 197, 4544, 10, 197, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 7, 198, 4551, 10, 198, 12, 198, 14, 198, 4554, 11, 198, 3, 199, 3, 199, 3, 199, 3, 199, 7, 199, 4560, 10, 199, 12, 199, 14, 199, 4563, 11, 199, 3, 199, 3, 199, 5, 199, 4567, 10, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 7, 199, 4574, 10, 199, 12, 199, 14, 199, 4577, 11, 199, 3, 199, 3, 199, 3, 199, 5, 199, 4582, 10, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 7, 199, 4591, 10, 199, 12, 199, 14, 199, 4594, 11, 199, 5, 199, 4596, 10, 199, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 7, 200, 4606, 10, 200, 12, 200, 14, 200, 4609, 11, 200, 3, 201, 3, 201, 3, 201, 3, 201, 5, 201, 4615, 10, 201, 3, 201, 3, 201, 3, 201, 5, 201, 4620, 10, 201, 3, 202, 3, 202, 3, 202, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 5, 203, 4635, 10, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 5, 203, 4646, 10, 203, 3, 203, 5, 203, 4649, 10, 203, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 5, 204, 4659, 10, 204, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 5, 205, 4669, 10, 205, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 5, 206, 4679, 10, 206, 3, 207, 3, 207, 3, 207, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 5, 208, 4689, 10, 208, 3, 209, 3, 209, 5, 209, 4693, 10, 209, 3, 209, 3, 209, 5, 209, 4697, 10, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 5, 209, 4706, 10, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 5, 209, 4734, 10, 209, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 5, 210, 4752, 10, 210, 3, 211, 3, 211, 3, 211, 3, 211, 3, 212, 3, 212, 5, 212, 4760, 10, 212, 3, 212, 3, 212, 3, 212, 3, 213, 3, 213, 3, 213, 3, 213, 7, 213, 4769, 10, 213, 12, 213, 14, 213, 4772, 11, 213, 3, 214, 3, 214, 3, 214, 3, 214, 5, 214, 4778, 10, 214, 3, 215, 3, 215, 5, 215, 4782, 10, 215, 3, 215, 3, 215, 3, 215, 3, 216, 3, 216, 5, 216, 4789, 10, 216, 3, 216, 3, 216, 3, 216, 5, 216, 4794, 10, 216, 3, 216, 5, 216, 4797, 10, 216, 3, 216, 5, 216, 4800, 10, 216, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 5, 217, 4809, 10, 217, 3, 218, 3, 218, 5, 218, 4813, 10, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 220, 3, 220, 3, 220, 3, 220, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 7, 221, 4841, 10, 221, 12, 221, 14, 221, 4844, 11, 221, 3, 221, 3, 221, 3, 221, 3, 221, 5, 221, 4850, 10, 221, 3, 221, 3, 221, 5, 221, 4854, 10, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 5, 221, 4861, 10, 221, 3, 221, 5, 221, 4864, 10, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 7, 221, 4878, 10, 221, 12, 221, 14, 221, 4881, 11, 221, 5, 221, 4883, 10, 221, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 5, 222, 4893, 10, 222, 3, 222, 3, 222, 5, 222, 4897, 10, 222, 3, 222, 3, 222, 3, 222, 3, 222, 5, 222, 4903, 10, 222, 3, 222, 5, 222, 4906, 10, 222, 3, 222, 3, 222, 3, 222, 5, 222, 4911, 10, 222, 3, 222, 3, 222, 5, 222, 4915, 10, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 5, 222, 4922, 10, 222, 3, 222, 5, 222, 4925, 10, 222, 3, 222, 3, 222, 3, 222, 3, 222, 5, 222, 4931, 10, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 5, 222, 4955, 10, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 5, 222, 4968, 10, 222, 3, 222, 5, 222, 4971, 10, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 5, 222, 4981, 10, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 5, 222, 4989, 10, 222, 3, 222, 3, 222, 5, 222, 4993, 10, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 5, 222, 5000, 10, 222, 3, 222, 5, 222, 5003, 10, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 7, 222, 5010, 10, 222, 12, 222, 14, 222, 5013, 11, 222, 3, 222, 3, 222, 3, 222, 5, 222, 5018, 10, 222, 3, 222, 3, 222, 3, 222, 3, 222, 5, 222, 5024, 10, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 5, 222, 5034, 10, 222, 5, 222, 5036, 10, 222, 3, 223, 3, 223, 3, 223, 3, 223, 5, 223, 5042, 10, 223, 3, 223, 5, 223, 5045, 10, 223, 3, 223, 5, 223, 5048, 10, 223, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 5, 224, 5060, 10, 224, 3, 224, 5, 224, 5063, 10, 224, 3, 225, 3, 225, 3, 225, 3, 225, 5, 225, 5069, 10, 225, 3, 226, 5, 226, 5072, 10, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 5, 226, 5080, 10, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 5, 226, 5088, 10, 226, 3, 227, 3, 227, 3, 227, 3, 227, 5, 227, 5094, 10, 227, 3, 227, 3, 227, 5, 227, 5098, 10, 227, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 5, 228, 5112, 10, 228, 3, 229, 3, 229, 3, 229, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 7, 230, 5122, 10, 230, 12, 230, 14, 230, 5125, 11, 230, 3, 230, 3, 230, 3, 230, 3, 230, 5, 230, 5131, 10, 230, 3, 230, 5, 230, 5134, 10, 230, 3, 230, 3, 230, 3, 230, 3, 231, 3, 231, 5, 231, 5141, 10, 231, 3, 231, 3, 231, 3, 231, 7, 231, 5146, 10, 231, 12, 231, 14, 231, 5149, 11, 231, 3, 232, 3, 232, 5, 232, 5153, 10, 232, 3, 232, 6, 232, 5156, 10, 232, 13, 232, 14, 232, 5157, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 7, 233, 5167, 10, 233, 12, 233, 14, 233, 5170, 11, 233, 3, 234, 3, 234, 3, 234, 3, 234, 3, 235, 3, 235, 3, 236, 3, 236, 5, 236, 5180, 10, 236, 3, 236, 3, 236, 3, 236, 3, 236, 5, 236, 5186, 10, 236, 3, 237, 3, 237, 3, 237, 5, 237, 5191, 10, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 5, 237, 5204, 10, 237, 5, 237, 5206, 10, 237, 3, 237, 3, 237, 3, 237, 5, 237, 5211, 10, 237, 3, 237, 3, 237, 3, 237, 5, 237, 5216, 10, 237, 5, 237, 5218, 10, 237, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 5, 238, 5225, 10, 238, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 5, 239, 5232, 10, 239, 3, 239, 5, 239, 5235, 10, 239, 3, 239, 5, 239, 5238, 10, 239, 3, 239, 3, 239, 3, 239, 3, 239, 5, 239, 5244, 10, 239, 3, 239, 3, 239, 5, 239, 5248, 10, 239, 3, 240, 3, 240, 3, 240, 3, 240, 5, 240, 5254, 10, 240, 3, 241, 3, 241, 3, 241, 3, 241, 5, 241, 5260, 10, 241, 3, 241, 3, 241, 3, 242, 3, 242, 3, 242, 3, 243, 3, 243, 3, 243, 3, 244, 3, 244, 3, 244, 5, 244, 5273, 10, 244, 3, 244, 3, 244, 3, 244, 5, 244, 5278, 10, 244, 3, 244, 3, 244, 3, 244, 3, 244, 7, 244, 5284, 10, 244, 12, 244, 14, 244, 5287, 11, 244, 5, 244, 5289, 10, 244, 3, 245, 3, 245, 3, 245, 5, 245, 5294, 10, 245, 3, 245, 3, 245, 3, 245, 5, 245, 5299, 10, 245, 3, 245, 3, 245, 3, 245, 3, 245, 7, 245, 5305, 10, 245, 12, 245, 14, 245, 5308, 11, 245, 5, 245, 5310, 10, 245, 3, 246, 3, 246, 3, 246, 3, 246, 5, 246, 5316, 10, 246, 3, 247, 3, 247, 5, 247, 5320, 10, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 7, 247, 5331, 10, 247, 12, 247, 14, 247, 5334, 11, 247, 3, 247, 3, 247, 3, 247, 5, 247, 5339, 10, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 7, 247, 5349, 10, 247, 12, 247, 14, 247, 5352, 11, 247, 5, 247, 5354, 10, 247, 3, 248, 3, 248, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 5, 249, 5363, 10, 249, 3, 249, 3, 249, 3, 249, 5, 249, 5368, 10, 249, 3, 250, 3, 250, 3, 250, 3, 250, 5, 250, 5374, 10, 250, 3, 251, 3, 251, 3, 252, 3, 252, 3, 252, 5, 252, 5381, 10, 252, 5, 252, 5383, 10, 252, 3, 253, 3, 253, 5, 253, 5387, 10, 253, 3, 253, 3, 253, 3, 253, 3, 253, 5, 253, 5393, 10, 253, 3, 253, 5, 253, 5396, 10, 253, 3, 254, 3, 254, 3, 255, 3, 255, 3, 256, 3, 256, 3, 256, 3, 256, 5, 256, 5406, 10, 256, 3, 257, 3, 257, 5, 257, 5410, 10, 257, 3, 258, 3, 258, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 6, 259, 5428, 10, 259, 13, 259, 14, 259, 5429, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 5, 260, 5437, 10, 260, 5, 260, 5439, 10, 260, 3, 261, 3, 261, 3, 261, 6, 261, 5444, 10, 261, 13, 261, 14, 261, 5445, 5, 261, 5448, 10, 261, 3, 262, 3, 262, 5, 262, 5452, 10, 262, 3, 263, 3, 263, 3, 263, 5, 263, 5457, 10, 263, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 5, 264, 5468, 10, 264, 3, 265, 3, 265, 3, 265, 5, 265, 5473, 10, 265, 3, 266, 3, 266, 3, 267, 3, 267, 5, 267, 5479, 10, 267, 3, 268, 5, 268, 5482, 10, 268, 3, 268, 3, 268, 5, 268, 5486, 10, 268, 3, 268, 6, 268, 5489, 10, 268, 13, 268, 14, 268, 5490, 3, 268, 5, 268, 5494, 10, 268, 3, 268, 3, 268, 5, 268, 5498, 10, 268, 3, 268, 3, 268, 5, 268, 5502, 10, 268, 5, 268, 5504, 10, 268, 3, 269, 3, 269, 3, 270, 5, 270, 5509, 10, 270, 3, 270, 3, 270, 3, 271, 5, 271, 5514, 10, 271, 3, 271, 3, 271, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 5, 272, 5527, 10, 272, 3, 272, 5, 272, 5530, 10, 272, 3, 273, 3, 273, 5, 273, 5534, 10, 273, 3, 273, 5, 273, 5537, 10, 273, 3, 273, 3, 273, 3, 273, 5, 273, 5542, 10, 273, 3, 273, 5, 273, 5545, 10, 273, 3, 273, 3, 273, 5, 273, 5549, 10, 273, 3, 273, 3, 273, 3, 273, 5, 273, 5554, 10, 273, 3, 273, 5, 273, 5557, 10, 273, 3, 273, 3, 273, 3, 273, 5, 273, 5562, 10, 273, 3, 273, 5, 273, 5565, 10, 273, 3, 273, 3, 273, 3, 273, 3, 273, 5, 273, 5571, 10, 273, 3, 273, 5, 273, 5574, 10, 273, 3, 273, 3, 273, 5, 273, 5578, 10, 273, 3, 273, 5, 273, 5581, 10, 273, 3, 273, 5, 273, 5584, 10, 273, 3, 273, 3, 273, 5, 273, 5588, 10, 273, 3, 273, 5, 273, 5591, 10, 273, 3, 273, 5, 273, 5594, 10, 273, 3, 273, 3, 273, 5, 273, 5598, 10, 273, 3, 273, 5, 273, 5601, 10, 273, 3, 273, 5, 273, 5604, 10, 273, 3, 273, 5, 273, 5607, 10, 273, 3, 273, 3, 273, 5, 273, 5611, 10, 273, 3, 273, 5, 273, 5614, 10, 273, 3, 273, 5, 273, 5617, 10, 273, 3, 273, 3, 273, 3, 273, 5, 273, 5622, 10, 273, 3, 273, 3, 273, 3, 273, 5, 273, 5627, 10, 273, 3, 273, 3, 273, 3, 273, 5, 273, 5632, 10, 273, 3, 273, 5, 273, 5635, 10, 273, 3, 273, 5, 273, 5638, 10, 273, 3, 274, 3, 274, 3, 274, 3, 274, 7, 274, 5644, 10, 274, 12, 274, 14, 274, 5647, 11, 274, 3, 274, 3, 274, 3, 275, 3, 275, 5, 275, 5653, 10, 275, 3, 275, 3, 275, 5, 275, 5657, 10, 275, 3, 275, 3, 275, 3, 275, 5, 275, 5662, 10, 275, 3, 275, 5, 275, 5665, 10, 275, 3, 275, 3, 275, 3, 275, 5, 275, 5670, 10, 275, 3, 275, 3, 275, 5, 275, 5674, 10, 275, 5, 275, 5676, 10, 275, 3, 276, 3, 276, 3, 276, 3, 276, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 278, 3, 278, 3, 278, 3, 278, 5, 278, 5692, 10, 278, 3, 278, 3, 278, 3, 279, 3, 279, 3, 279, 7, 279, 5699, 10, 279, 12, 279, 14, 279, 5702, 11, 279, 3, 280, 3, 280, 3, 280, 7, 280, 5707, 10, 280, 12, 280, 14, 280, 5710, 11, 280, 3, 281, 3, 281, 3, 281, 3, 281, 7, 281, 5716, 10, 281, 12, 281, 14, 281, 5719, 11, 281, 3, 281, 3, 281, 3, 282, 3, 282, 3, 282, 7, 282, 5726, 10, 282, 12, 282, 14, 282, 5729, 11, 282, 3, 283, 3, 283, 3, 283, 7, 283, 5734, 10, 283, 12, 283, 14, 283, 5737, 11, 283, 3, 284, 3, 284, 3, 284, 7, 284, 5742, 10, 284, 12, 284, 14, 284, 5745, 11, 284, 3, 285, 3, 285, 3, 285, 7, 285, 5750, 10, 285, 12, 285, 14, 285, 5753, 11, 285, 3, 286, 3, 286, 3, 286, 7, 286, 5758, 10, 286, 12, 286, 14, 286, 5761, 11, 286, 3, 287, 3, 287, 3, 287, 7, 287, 5766, 10, 287, 12, 287, 14, 287, 5769, 11, 287, 3, 288, 3, 288, 5, 288, 5773, 10, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 5, 288, 5780, 10, 288, 5, 288, 5782, 10, 288, 3, 289, 3, 289, 3, 289, 5, 289, 5787, 10, 289, 3, 289, 5, 289, 5790, 10, 289, 3, 289, 3, 289, 3, 289, 5, 289, 5795, 10, 289, 3, 289, 5, 289, 5798, 10, 289, 3, 290, 3, 290, 5, 290, 5802, 10, 290, 3, 291, 3, 291, 3, 291, 3, 292, 3, 292, 3, 292, 3, 292, 3, 293, 3, 293, 3, 293, 3, 293, 3, 293, 5, 293, 5816, 10, 293, 3, 293, 3, 293, 3, 293, 3, 293, 3, 293, 5, 293, 5823, 10, 293, 3, 293, 3, 293, 3, 293, 5, 293, 5828, 10, 293, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 6, 294, 5860, 10, 294, 13, 294, 14, 294, 5861, 3, 294, 3, 294, 5, 294, 5866, 10, 294, 3, 294, 3, 294, 3, 294, 3, 294, 6, 294, 5872, 10, 294, 13, 294, 14, 294, 5873, 3, 294, 3, 294, 5, 294, 5878, 10, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5887, 10, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5895, 10, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5900, 10, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5908, 10, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5913, 10, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5918, 10, 294, 5, 294, 5920, 10, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5929, 10, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5934, 10, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5942, 10, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5947, 10, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5955, 10, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5963, 10, 294, 3, 294, 5, 294, 5966, 10, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5976, 10, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 5, 294, 5987, 10, 294, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 296, 3, 296, 3, 296, 3, 296, 7, 296, 5998, 10, 296, 12, 296, 14, 296, 6001, 11, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 5, 296, 6008, 10, 296, 3, 297, 3, 297, 5, 297, 6012, 10, 297, 3, 298, 3, 298, 3, 298, 5, 298, 6017, 10, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 5, 298, 6026, 10, 298, 3, 298, 5, 298, 6029, 10, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 5, 298, 6041, 10, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 5, 298, 6049, 10, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 7, 298, 6057, 10, 298, 12, 298, 14, 298, 6060, 11, 298, 5, 298, 6062, 10, 298, 3, 298, 3, 298, 5, 298, 6066, 10, 298, 3, 298, 3, 298, 5, 298, 6070, 10, 298, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 5, 299, 6095, 10, 299, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 301, 3, 301, 3, 301, 3, 301, 5, 301, 6106, 10, 301, 3, 301, 3, 301, 3, 301, 3, 301, 3, 301, 5, 301, 6113, 10, 301, 7, 301, 6115, 10, 301, 12, 301, 14, 301, 6118, 11, 301, 3, 302, 3, 302, 3, 302, 3, 302, 5, 302, 6124, 10, 302, 3, 303, 3, 303, 3, 303, 3, 303, 3, 303, 3, 303, 5, 303, 6132, 10, 303, 3, 303, 3, 303, 3, 303, 5, 303, 6137, 10, 303, 3, 303, 3, 303, 3, 303, 3, 303, 7, 303, 6143, 10, 303, 12, 303, 14, 303, 6146, 11, 303, 3, 304, 3, 304, 3, 304, 5, 304, 6151, 10, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 5, 304, 6161, 10, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 5, 304, 6174, 10, 304, 3, 304, 3, 304, 3, 304, 3, 304, 5, 304, 6180, 10, 304, 3, 304, 3, 304, 3, 304, 3, 304, 5, 304, 6186, 10, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 5, 304, 6202, 10, 304, 3, 304, 3, 304, 3, 304, 3, 304, 5, 304, 6208, 10, 304, 7, 304, 6210, 10, 304, 12, 304, 14, 304, 6213, 11, 304, 3, 305, 3, 305, 3, 305, 3, 305, 5, 305, 6219, 10, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 5, 305, 6228, 10, 305, 3, 305, 7, 305, 6231, 10, 305, 12, 305, 14, 305, 6234, 11, 305, 3, 306, 3, 306, 3, 306, 5, 306, 6239, 10, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 5, 306, 6249, 10, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 5, 306, 6262, 10, 306, 3, 306, 3, 306, 3, 306, 3, 306, 5, 306, 6268, 10, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 5, 306, 6284, 10, 306, 3, 306, 3, 306, 3, 306, 3, 306, 5, 306, 6290, 10, 306, 3, 306, 3, 306, 5, 306, 6294, 10, 306, 3, 306, 3, 306, 7, 306, 6298, 10, 306, 12, 306, 14, 306, 6301, 11, 306, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 7, 307, 6317, 10, 307, 12, 307, 14, 307, 6320, 11, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 6, 307, 6329, 10, 307, 13, 307, 14, 307, 6330, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 5, 307, 6348, 10, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 7, 307, 6361, 10, 307, 12, 307, 14, 307, 6364, 11, 307, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 7, 308, 6380, 10, 308, 12, 308, 14, 308, 6383, 11, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 6, 308, 6392, 10, 308, 13, 308, 14, 308, 6393, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 5, 308, 6411, 10, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 7, 308, 6424, 10, 308, 12, 308, 14, 308, 6427, 11, 308, 3, 309, 3, 309, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 5, 310, 6445, 10, 310, 3, 311, 3, 311, 3, 311, 3, 311, 3, 311, 3, 311, 3, 311, 5, 311, 6454, 10, 311, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 5, 312, 6463, 10, 312, 3, 313, 3, 313, 3, 314, 3, 314, 3, 315, 3, 315, 3, 316, 3, 316, 3, 317, 3, 317, 3, 318, 3, 318, 3, 319, 3, 319, 3, 320, 3, 320, 3, 320, 2, 8, 604, 606, 608, 610, 612, 614, 321, 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, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 2, 127, 4, 2, 37, 37, 137, 137, 4, 2, 454, 454, 460, 460, 5, 2, 64, 64, 144, 144, 165, 165, 5, 2, 40, 40, 322, 322, 385, 385, 6, 2, 40, 40, 354, 354, 453, 453, 524, 524, 4, 2, 444, 444, 1039, 1039, 4, 2, 72, 72, 129, 129, 4, 2, 15, 15, 274, 274, 5, 2, 42, 42, 78, 78, 168, 168, 4, 2, 367, 367, 478, 478, 5, 2, 436, 436, 562, 562, 569, 569, 4, 2, 329, 329, 390, 390, 4, 2, 292, 292, 404, 404, 4, 2, 290, 290, 376, 376, 5, 2, 73, 73, 77, 77, 114, 114, 5, 2, 40, 40, 339, 339, 365, 365, 5, 2, 40, 40, 335, 335, 686, 686, 4, 2, 550, 550, 583, 583, 4, 2, 74, 74, 84, 84, 5, 2, 369, 369, 469, 469, 526, 526, 4, 2, 64, 64, 144, 144, 3, 2, 296, 297, 3, 2, 1029, 1030, 4, 2, 1039, 1039, 1047, 1047, 5, 2, 364, 364, 399, 399, 451, 451, 4, 2, 40, 40, 1029, 1030, 8, 2, 40, 40, 309, 309, 311, 311, 339, 339, 365, 365, 491, 491, 3, 2, 1030, 1031, 4, 2, 7, 7, 49, 49, 4, 2, 13, 13, 159, 159, 4, 2, 176, 176, 587, 587, 4, 2, 20, 20, 132, 132, 5, 2, 41, 41, 70, 70, 97, 97, 4, 2, 97, 97, 313, 313, 4, 2, 304, 304, 361, 361, 4, 2, 93, 93, 516, 516, 4, 2, 41, 41, 97, 97, 4, 2, 8, 8, 47, 47, 4, 2, 172, 172, 580, 580, 6, 2, 364, 364, 399, 399, 450, 450, 481, 481, 4, 2, 364, 364, 450, 450, 4, 2, 14, 14, 43, 43, 5, 2, 61, 61, 72, 72, 170, 170, 4, 2, 33, 33, 76, 76, 4, 2, 89, 89, 135, 135, 4, 2, 8, 8, 47, 48, 3, 2, 539, 540, 4, 2, 372, 372, 522, 522, 4, 2, 210, 210, 407, 407, 7, 2, 98, 98, 412, 413, 415, 415, 419, 427, 493, 493, 6, 2, 409, 410, 414, 414, 416, 417, 494, 494, 5, 2, 99, 99, 408, 408, 418, 418, 4, 2, 392, 392, 541, 541, 4, 2, 535, 535, 537, 537, 4, 2, 284, 284, 542, 542, 4, 2, 83, 83, 508, 508, 4, 2, 49, 49, 327, 327, 5, 2, 30, 30, 56, 56, 163, 163, 5, 2, 119, 119, 156, 156, 370, 370, 4, 2, 95, 95, 166, 166, 4, 2, 300, 300, 527, 527, 4, 2, 38, 38, 582, 582, 4, 2, 105, 105, 404, 404, 4, 2, 357, 357, 487, 487, 6, 2, 190, 190, 192, 192, 198, 198, 551, 551, 4, 2, 998, 998, 1015, 1015, 4, 2, 285, 285, 495, 495, 4, 2, 63, 63, 73, 73, 8, 2, 119, 119, 156, 156, 161, 161, 350, 350, 370, 370, 582, 582, 4, 2, 443, 443, 547, 547, 4, 2, 347, 347, 586, 586, 4, 2, 119, 119, 370, 370, 5, 2, 74, 74, 85, 85, 383, 383, 5, 2, 372, 372, 404, 404, 522, 522, 4, 2, 547, 547, 581, 581, 4, 2, 314, 314, 486, 486, 8, 2, 210, 210, 344, 344, 346, 346, 371, 371, 492, 492, 528, 528, 4, 2, 43, 44, 57, 57, 5, 2, 357, 357, 471, 471, 778, 778, 4, 2, 396, 396, 564, 564, 12, 2, 299, 299, 306, 306, 316, 318, 324, 324, 437, 437, 445, 445, 552, 552, 559, 559, 730, 730, 896, 896, 4, 2, 34, 34, 153, 153, 4, 2, 107, 107, 888, 888, 13, 2, 299, 299, 306, 306, 316, 318, 324, 324, 437, 437, 445, 445, 509, 509, 552, 552, 559, 559, 730, 730, 896, 896, 5, 2, 1039, 1039, 1047, 1047, 1049, 1049, 3, 2, 1050, 1051, 5, 2, 681, 692, 1039, 1039, 1047, 1048, 4, 2, 1029, 1031, 1040, 1040, 4, 2, 58, 58, 162, 162, 4, 2, 106, 106, 1043, 1043, 6, 2, 24, 24, 206, 208, 217, 220, 448, 448, 4, 2, 24, 24, 207, 207, 4, 2, 24, 24, 206, 206, 5, 2, 180, 182, 184, 184, 190, 191, 4, 2, 167, 167, 525, 525, 5, 2, 195, 195, 198, 200, 365, 365, 7, 2, 201, 201, 212, 214, 216, 216, 223, 223, 288, 289, 5, 2, 202, 205, 210, 211, 286, 286, 4, 2, 140, 140, 221, 221, 4, 2, 396, 396, 697, 705, 4, 2, 210, 210, 448, 448, 5, 2, 201, 202, 204, 204, 396, 396, 4, 2, 255, 256, 262, 262, 4, 2, 35, 35, 253, 256, 3, 2, 265, 266, 5, 2, 17, 17, 87, 87, 160, 160, 4, 2, 206, 206, 210, 210, 4, 2, 201, 202, 204, 204, 5, 2, 14, 14, 43, 43, 886, 886, 5, 2, 237, 237, 243, 244, 249, 249, 5, 2, 238, 240, 245, 248, 250, 252, 4, 2, 458, 458, 472, 472, 4, 2, 104, 104, 1018, 1018, 5, 2, 58, 58, 162, 162, 573, 573, 4, 2, 125, 125, 136, 136, 5, 2, 8, 8, 277, 277, 531, 531, 6, 2, 104, 104, 1010, 1010, 1012, 1012, 1018, 1019, 3, 2, 1007, 1014, 3, 2, 641, 680, 3, 2, 693, 696, 3, 2, 606, 614, 3, 2, 598, 605, 5, 2, 201, 205, 218, 218, 221, 221, 19, 2, 34, 34, 46, 46, 107, 107, 153, 153, 223, 223, 272, 388, 390, 434, 436, 455, 457, 510, 512, 549, 551, 565, 567, 582, 585, 592, 597, 597, 686, 686, 730, 730, 896, 896, 17, 2, 37, 37, 89, 89, 135, 135, 201, 203, 205, 205, 241, 241, 264, 264, 389, 389, 584, 584, 598, 605, 634, 634, 697, 697, 700, 729, 731, 895, 897, 997, 2, 7597, 2, 641, 3, 2, 2, 2, 4, 658, 3, 2, 2, 2, 6, 678, 3, 2, 2, 2, 8, 680, 3, 2, 2, 2, 10, 717, 3, 2, 2, 2, 12, 729, 3, 2, 2, 2, 14, 740, 3, 2, 2, 2, 16, 757, 3, 2, 2, 2, 18, 762, 3, 2, 2, 2, 20, 774, 3, 2, 2, 2, 22, 801, 3, 2, 2, 2, 24, 810, 3, 2, 2, 2, 26, 812, 3, 2, 2, 2, 28, 824, 3, 2, 2, 2, 30, 854, 3, 2, 2, 2, 32, 890, 3, 2, 2, 2, 34, 941, 3, 2, 2, 2, 36, 967, 3, 2, 2, 2, 38, 997, 3, 2, 2, 2, 40, 1094, 3, 2, 2, 2, 42, 1096, 3, 2, 2, 2, 44, 1114, 3, 2, 2, 2, 46, 1175, 3, 2, 2, 2, 48, 1194, 3, 2, 2, 2, 50, 1253, 3, 2, 2, 2, 52, 1255, 3, 2, 2, 2, 54, 1299, 3, 2, 2, 2, 56, 1305, 3, 2, 2, 2, 58, 1307, 3, 2, 2, 2, 60, 1328, 3, 2, 2, 2, 62, 1335, 3, 2, 2, 2, 64, 1337, 3, 2, 2, 2, 66, 1353, 3, 2, 2, 2, 68, 1356, 3, 2, 2, 2, 70, 1361, 3, 2, 2, 2, 72, 1387, 3, 2, 2, 2, 74, 1403, 3, 2, 2, 2, 76, 1405, 3, 2, 2, 2, 78, 1421, 3, 2, 2, 2, 80, 1423, 3, 2, 2, 2, 82, 1470, 3, 2, 2, 2, 84, 1541, 3, 2, 2, 2, 86, 1543, 3, 2, 2, 2, 88, 1571, 3, 2, 2, 2, 90, 1579, 3, 2, 2, 2, 92, 1609, 3, 2, 2, 2, 94, 1755, 3, 2, 2, 2, 96, 1757, 3, 2, 2, 2, 98, 1760, 3, 2, 2, 2, 100, 1834, 3, 2, 2, 2, 102, 1857, 3, 2, 2, 2, 104, 1990, 3, 2, 2, 2, 106, 1995, 3, 2, 2, 2, 108, 1997, 3, 2, 2, 2, 110, 2007, 3, 2, 2, 2, 112, 2060, 3, 2, 2, 2, 114, 2080, 3, 2, 2, 2, 116, 2082, 3, 2, 2, 2, 118, 2117, 3, 2, 2, 2, 120, 2126, 3, 2, 2, 2, 122, 2133, 3, 2, 2, 2, 124, 2156, 3, 2, 2, 2, 126, 2165, 3, 2, 2, 2, 128, 2180, 3, 2, 2, 2, 130, 2202, 3, 2, 2, 2, 132, 2222, 3, 2, 2, 2, 134, 2612, 3, 2, 2, 2, 136, 2614, 3, 2, 2, 2, 138, 2621, 3, 2, 2, 2, 140, 2628, 3, 2, 2, 2, 142, 2651, 3, 2, 2, 2, 144, 2659, 3, 2, 2, 2, 146, 2666, 3, 2, 2, 2, 148, 2673, 3, 2, 2, 2, 150, 2680, 3, 2, 2, 2, 152, 2692, 3, 2, 2, 2, 154, 2702, 3, 2, 2, 2, 156, 2709, 3, 2, 2, 2, 158, 2725, 3, 2, 2, 2, 160, 2735, 3, 2, 2, 2, 162, 2739, 3, 2, 2, 2, 164, 2745, 3, 2, 2, 2, 166, 2757, 3, 2, 2, 2, 168, 2759, 3, 2, 2, 2, 170, 2766, 3, 2, 2, 2, 172, 2768, 3, 2, 2, 2, 174, 2819, 3, 2, 2, 2, 176, 2893, 3, 2, 2, 2, 178, 2952, 3, 2, 2, 2, 180, 3040, 3, 2, 2, 2, 182, 3044, 3, 2, 2, 2, 184, 3064, 3, 2, 2, 2, 186, 3066, 3, 2, 2, 2, 188, 3074, 3, 2, 2, 2, 190, 3082, 3, 2, 2, 2, 192, 3084, 3, 2, 2, 2, 194, 3114, 3, 2, 2, 2, 196, 3169, 3, 2, 2, 2, 198, 3178, 3, 2, 2, 2, 200, 3198, 3, 2, 2, 2, 202, 3210, 3, 2, 2, 2, 204, 3214, 3, 2, 2, 2, 206, 3247, 3, 2, 2, 2, 208, 3268, 3, 2, 2, 2, 210, 3278, 3, 2, 2, 2, 212, 3282, 3, 2, 2, 2, 214, 3307, 3, 2, 2, 2, 216, 3349, 3, 2, 2, 2, 218, 3351, 3, 2, 2, 2, 220, 3366, 3, 2, 2, 2, 222, 3412, 3, 2, 2, 2, 224, 3422, 3, 2, 2, 2, 226, 3432, 3, 2, 2, 2, 228, 3474, 3, 2, 2, 2, 230, 3476, 3, 2, 2, 2, 232, 3493, 3, 2, 2, 2, 234, 3499, 3, 2, 2, 2, 236, 3515, 3, 2, 2, 2, 238, 3519, 3, 2, 2, 2, 240, 3557, 3, 2, 2, 2, 242, 3595, 3, 2, 2, 2, 244, 3609, 3, 2, 2, 2, 246, 3617, 3, 2, 2, 2, 248, 3619, 3, 2, 2, 2, 250, 3645, 3, 2, 2, 2, 252, 3649, 3, 2, 2, 2, 254, 3664, 3, 2, 2, 2, 256, 3666, 3, 2, 2, 2, 258, 3678, 3, 2, 2, 2, 260, 3682, 3, 2, 2, 2, 262, 3699, 3, 2, 2, 2, 264, 3716, 3, 2, 2, 2, 266, 3719, 3, 2, 2, 2, 268, 3729, 3, 2, 2, 2, 270, 3733, 3, 2, 2, 2, 272, 3743, 3, 2, 2, 2, 274, 3746, 3, 2, 2, 2, 276, 3751, 3, 2, 2, 2, 278, 3771, 3, 2, 2, 2, 280, 3773, 3, 2, 2, 2, 282, 3790, 3, 2, 2, 2, 284, 3799, 3, 2, 2, 2, 286, 3808, 3, 2, 2, 2, 288, 3810, 3, 2, 2, 2, 290, 3824, 3, 2, 2, 2, 292, 3835, 3, 2, 2, 2, 294, 3844, 3, 2, 2, 2, 296, 3847, 3, 2, 2, 2, 298, 3855, 3, 2, 2, 2, 300, 3880, 3, 2, 2, 2, 302, 3892, 3, 2, 2, 2, 304, 3895, 3, 2, 2, 2, 306, 3927, 3, 2, 2, 2, 308, 3929, 3, 2, 2, 2, 310, 3931, 3, 2, 2, 2, 312, 3933, 3, 2, 2, 2, 314, 3935, 3, 2, 2, 2, 316, 3988, 3, 2, 2, 2, 318, 3990, 3, 2, 2, 2, 320, 3996, 3, 2, 2, 2, 322, 4016, 3, 2, 2, 2, 324, 4030, 3, 2, 2, 2, 326, 4041, 3, 2, 2, 2, 328, 4043, 3, 2, 2, 2, 330, 4049, 3, 2, 2, 2, 332, 4059, 3, 2, 2, 2, 334, 4063, 3, 2, 2, 2, 336, 4070, 3, 2, 2, 2, 338, 4074, 3, 2, 2, 2, 340, 4080, 3, 2, 2, 2, 342, 4087, 3, 2, 2, 2, 344, 4093, 3, 2, 2, 2, 346, 4099, 3, 2, 2, 2, 348, 4104, 3, 2, 2, 2, 350, 4151, 3, 2, 2, 2, 352, 4172, 3, 2, 2, 2, 354, 4197, 3, 2, 2, 2, 356, 4200, 3, 2, 2, 2, 358, 4206, 3, 2, 2, 2, 360, 4222, 3, 2, 2, 2, 362, 4237, 3, 2, 2, 2, 364, 4243, 3, 2, 2, 2, 366, 4273, 3, 2, 2, 2, 368, 4275, 3, 2, 2, 2, 370, 4282, 3, 2, 2, 2, 372, 4294, 3, 2, 2, 2, 374, 4300, 3, 2, 2, 2, 376, 4325, 3, 2, 2, 2, 378, 4329, 3, 2, 2, 2, 380, 4333, 3, 2, 2, 2, 382, 4344, 3, 2, 2, 2, 384, 4406, 3, 2, 2, 2, 386, 4462, 3, 2, 2, 2, 388, 4464, 3, 2, 2, 2, 390, 4477, 3, 2, 2, 2, 392, 4527, 3, 2, 2, 2, 394, 4545, 3, 2, 2, 2, 396, 4595, 3, 2, 2, 2, 398, 4597, 3, 2, 2, 2, 400, 4610, 3, 2, 2, 2, 402, 4621, 3, 2, 2, 2, 404, 4648, 3, 2, 2, 2, 406, 4658, 3, 2, 2, 2, 408, 4668, 3, 2, 2, 2, 410, 4670, 3, 2, 2, 2, 412, 4680, 3, 2, 2, 2, 414, 4683, 3, 2, 2, 2, 416, 4733, 3, 2, 2, 2, 418, 4751, 3, 2, 2, 2, 420, 4753, 3, 2, 2, 2, 422, 4757, 3, 2, 2, 2, 424, 4764, 3, 2, 2, 2, 426, 4773, 3, 2, 2, 2, 428, 4779, 3, 2, 2, 2, 430, 4786, 3, 2, 2, 2, 432, 4808, 3, 2, 2, 2, 434, 4810, 3, 2, 2, 2, 436, 4821, 3, 2, 2, 2, 438, 4827, 3, 2, 2, 2, 440, 4882, 3, 2, 2, 2, 442, 5035, 3, 2, 2, 2, 444, 5047, 3, 2, 2, 2, 446, 5062, 3, 2, 2, 2, 448, 5068, 3, 2, 2, 2, 450, 5087, 3, 2, 2, 2, 452, 5097, 3, 2, 2, 2, 454, 5111, 3, 2, 2, 2, 456, 5113, 3, 2, 2, 2, 458, 5116, 3, 2, 2, 2, 460, 5138, 3, 2, 2, 2, 462, 5150, 3, 2, 2, 2, 464, 5159, 3, 2, 2, 2, 466, 5171, 3, 2, 2, 2, 468, 5175, 3, 2, 2, 2, 470, 5177, 3, 2, 2, 2, 472, 5217, 3, 2, 2, 2, 474, 5224, 3, 2, 2, 2, 476, 5226, 3, 2, 2, 2, 478, 5249, 3, 2, 2, 2, 480, 5255, 3, 2, 2, 2, 482, 5263, 3, 2, 2, 2, 484, 5266, 3, 2, 2, 2, 486, 5269, 3, 2, 2, 2, 488, 5290, 3, 2, 2, 2, 490, 5311, 3, 2, 2, 2, 492, 5317, 3, 2, 2, 2, 494, 5355, 3, 2, 2, 2, 496, 5367, 3, 2, 2, 2, 498, 5369, 3, 2, 2, 2, 500, 5375, 3, 2, 2, 2, 502, 5377, 3, 2, 2, 2, 504, 5386, 3, 2, 2, 2, 506, 5397, 3, 2, 2, 2, 508, 5399, 3, 2, 2, 2, 510, 5405, 3, 2, 2, 2, 512, 5409, 3, 2, 2, 2, 514, 5411, 3, 2, 2, 2, 516, 5413, 3, 2, 2, 2, 518, 5431, 3, 2, 2, 2, 520, 5447, 3, 2, 2, 2, 522, 5451, 3, 2, 2, 2, 524, 5456, 3, 2, 2, 2, 526, 5467, 3, 2, 2, 2, 528, 5472, 3, 2, 2, 2, 530, 5474, 3, 2, 2, 2, 532, 5478, 3, 2, 2, 2, 534, 5503, 3, 2, 2, 2, 536, 5505, 3, 2, 2, 2, 538, 5508, 3, 2, 2, 2, 540, 5513, 3, 2, 2, 2, 542, 5529, 3, 2, 2, 2, 544, 5637, 3, 2, 2, 2, 546, 5639, 3, 2, 2, 2, 548, 5675, 3, 2, 2, 2, 550, 5677, 3, 2, 2, 2, 552, 5681, 3, 2, 2, 2, 554, 5687, 3, 2, 2, 2, 556, 5695, 3, 2, 2, 2, 558, 5703, 3, 2, 2, 2, 560, 5711, 3, 2, 2, 2, 562, 5722, 3, 2, 2, 2, 564, 5730, 3, 2, 2, 2, 566, 5738, 3, 2, 2, 2, 568, 5746, 3, 2, 2, 2, 570, 5754, 3, 2, 2, 2, 572, 5762, 3, 2, 2, 2, 574, 5781, 3, 2, 2, 2, 576, 5797, 3, 2, 2, 2, 578, 5801, 3, 2, 2, 2, 580, 5803, 3, 2, 2, 2, 582, 5806, 3, 2, 2, 2, 584, 5827, 3, 2, 2, 2, 586, 5986, 3, 2, 2, 2, 588, 5988, 3, 2, 2, 2, 590, 6007, 3, 2, 2, 2, 592, 6009, 3, 2, 2, 2, 594, 6069, 3, 2, 2, 2, 596, 6094, 3, 2, 2, 2, 598, 6096, 3, 2, 2, 2, 600, 6105, 3, 2, 2, 2, 602, 6123, 3, 2, 2, 2, 604, 6136, 3, 2, 2, 2, 606, 6147, 3, 2, 2, 2, 608, 6218, 3, 2, 2, 2, 610, 6235, 3, 2, 2, 2, 612, 6347, 3, 2, 2, 2, 614, 6410, 3, 2, 2, 2, 616, 6428, 3, 2, 2, 2, 618, 6444, 3, 2, 2, 2, 620, 6453, 3, 2, 2, 2, 622, 6462, 3, 2, 2, 2, 624, 6464, 3, 2, 2, 2, 626, 6466, 3, 2, 2, 2, 628, 6468, 3, 2, 2, 2, 630, 6470, 3, 2, 2, 2, 632, 6472, 3, 2, 2, 2, 634, 6474, 3, 2, 2, 2, 636, 6476, 3, 2, 2, 2, 638, 6478, 3, 2, 2, 2, 640, 642, 5, 4, 3, 2, 641, 640, 3, 2, 2, 2, 641, 642, 3, 2, 2, 2, 642, 644, 3, 2, 2, 2, 643, 645, 7, 1011, 2, 2, 644, 643, 3, 2, 2, 2, 644, 645, 3, 2, 2, 2, 645, 646, 3, 2, 2, 2, 646, 647, 7, 2, 2, 3, 647, 3, 3, 2, 2, 2, 648, 650, 5, 6, 4, 2, 649, 651, 7, 1011, 2, 2, 650, 649, 3, 2, 2, 2, 650, 651, 3, 2, 2, 2, 651, 653, 3, 2, 2, 2, 652, 654, 7, 1027, 2, 2, 653, 652, 3, 2, 2, 2, 653, 654, 3, 2, 2, 2, 654, 657, 3, 2, 2, 2, 655, 657, 5, 8, 5, 2, 656, 648, 3, 2, 2, 2, 656, 655, 3, 2, 2, 2, 657, 660, 3, 2, 2, 2, 658, 656, 3, 2, 2, 2, 658, 659, 3, 2, 2, 2, 659, 669, 3, 2, 2, 2, 660, 658, 3, 2, 2, 2, 661, 666, 5, 6, 4, 2, 662, 664, 7, 1011, 2, 2, 663, 662, 3, 2, 2, 2, 663, 664, 3, 2, 2, 2, 664, 665, 3, 2, 2, 2, 665, 667, 7, 1027, 2, 2, 666, 663, 3, 2, 2, 2, 666, 667, 3, 2, 2, 2, 667, 670, 3, 2, 2, 2, 668, 670, 5, 8, 5, 2, 669, 661, 3, 2, 2, 2, 669, 668, 3, 2, 2, 2, 670, 5, 3, 2, 2, 2, 671, 679, 5, 10, 6, 2, 672, 679, 5, 12, 7, 2, 673, 679, 5, 14, 8, 2, 674, 679, 5, 16, 9, 2, 675, 679, 5, 18, 10, 2, 676, 679, 5, 22, 12, 2, 677, 679, 5, 24, 13, 2, 678, 671, 3, 2, 2, 2, 678, 672, 3, 2, 2, 2, 678, 673, 3, 2, 2, 2, 678, 674, 3, 2, 2, 2, 678, 675, 3, 2, 2, 2, 678, 676, 3, 2, 2, 2, 678, 677, 3, 2, 2, 2, 679, 7, 3, 2, 2, 2, 680, 681, 7, 1027, 2, 2, 681, 9, 3, 2, 2, 2, 682, 718, 5, 26, 14, 2, 683, 718, 5, 28, 15, 2, 684, 718, 5, 30, 16, 2, 685, 718, 5, 32, 17, 2, 686, 718, 5, 34, 18, 2, 687, 718, 5, 36, 19, 2, 688, 718, 5, 38, 20, 2, 689, 718, 5, 40, 21, 2, 690, 718, 5, 42, 22, 2, 691, 718, 5, 44, 23, 2, 692, 718, 5, 46, 24, 2, 693, 718, 5, 48, 25, 2, 694, 718, 5, 114, 58, 2, 695, 718, 5, 116, 59, 2, 696, 718, 5, 118, 60, 2, 697, 718, 5, 120, 61, 2, 698, 718, 5, 122, 62, 2, 699, 718, 5, 124, 63, 2, 700, 718, 5, 126, 64, 2, 701, 718, 5, 128, 65, 2, 702, 718, 5, 130, 66, 2, 703, 718, 5, 132, 67, 2, 704, 718, 5, 136, 69, 2, 705, 718, 5, 138, 70, 2, 706, 718, 5, 140, 71, 2, 707, 718, 5, 142, 72, 2, 708, 718, 5, 144, 73, 2, 709, 718, 5, 146, 74, 2, 710, 718, 5, 148, 75, 2, 711, 718, 5, 150, 76, 2, 712, 718, 5, 152, 77, 2, 713, 718, 5, 154, 78, 2, 714, 718, 5, 156, 79, 2, 715, 718, 5, 158, 80, 2, 716, 718, 5, 162, 82, 2, 717, 682, 3, 2, 2, 2, 717, 683, 3, 2, 2, 2, 717, 684, 3, 2, 2, 2, 717, 685, 3, 2, 2, 2, 717, 686, 3, 2, 2, 2, 717, 687, 3, 2, 2, 2, 717, 688, 3, 2, 2, 2, 717, 689, 3, 2, 2, 2, 717, 690, 3, 2, 2, 2, 717, 691, 3, 2, 2, 2, 717, 692, 3, 2, 2, 2, 717, 693, 3, 2, 2, 2, 717, 694, 3, 2, 2, 2, 717, 695, 3, 2, 2, 2, 717, 696, 3, 2, 2, 2, 717, 697, 3, 2, 2, 2, 717, 698, 3, 2, 2, 2, 717, 699, 3, 2, 2, 2, 717, 700, 3, 2, 2, 2, 717, 701, 3, 2, 2, 2, 717, 702, 3, 2, 2, 2, 717, 703, 3, 2, 2, 2, 717, 704, 3, 2, 2, 2, 717, 705, 3, 2, 2, 2, 717, 706, 3, 2, 2, 2, 717, 707, 3, 2, 2, 2, 717, 708, 3, 2, 2, 2, 717, 709, 3, 2, 2, 2, 717, 710, 3, 2, 2, 2, 717, 711, 3, 2, 2, 2, 717, 712, 3, 2, 2, 2, 717, 713, 3, 2, 2, 2, 717, 714, 3, 2, 2, 2, 717, 715, 3, 2, 2, 2, 717, 716, 3, 2, 2, 2, 718, 11, 3, 2, 2, 2, 719, 730, 5, 180, 91, 2, 720, 730, 5, 172, 87, 2, 721, 730, 5, 182, 92, 2, 722, 730, 5, 166, 84, 2, 723, 730, 5, 178, 90, 2, 724, 730, 5, 164, 83, 2, 725, 730, 5, 174, 88, 2, 726, 730, 5, 176, 89, 2, 727, 730, 5, 168, 85, 2, 728, 730, 5, 170, 86, 2, 729, 719, 3, 2, 2, 2, 729, 720, 3, 2, 2, 2, 729, 721, 3, 2, 2, 2, 729, 722, 3, 2, 2, 2, 729, 723, 3, 2, 2, 2, 729, 724, 3, 2, 2, 2, 729, 725, 3, 2, 2, 2, 729, 726, 3, 2, 2, 2, 729, 727, 3, 2, 2, 2, 729, 728, 3, 2, 2, 2, 730, 13, 3, 2, 2, 2, 731, 741, 5, 256, 129, 2, 732, 741, 5, 258, 130, 2, 733, 741, 5, 260, 131, 2, 734, 741, 5, 262, 132, 2, 735, 741, 5, 264, 133, 2, 736, 741, 5, 266, 134, 2, 737, 741, 5, 268, 135, 2, 738, 741, 5, 270, 136, 2, 739, 741, 5, 272, 137, 2, 740, 731, 3, 2, 2, 2, 740, 732, 3, 2, 2, 2, 740, 733, 3, 2, 2, 2, 740, 734, 3, 2, 2, 2, 740, 735, 3, 2, 2, 2, 740, 736, 3, 2, 2, 2, 740, 737, 3, 2, 2, 2, 740, 738, 3, 2, 2, 2, 740, 739, 3, 2, 2, 2, 741, 15, 3, 2, 2, 2, 742, 758, 5, 288, 145, 2, 743, 758, 5, 290, 146, 2, 744, 758, 5, 292, 147, 2, 745, 758, 5, 294, 148, 2, 746, 758, 5, 296, 149, 2, 747, 758, 5, 298, 150, 2, 748, 758, 5, 300, 151, 2, 749, 758, 5, 302, 152, 2, 750, 758, 5, 304, 153, 2, 751, 758, 5, 328, 165, 2, 752, 758, 5, 330, 166, 2, 753, 758, 5, 332, 167, 2, 754, 758, 5, 334, 168, 2, 755, 758, 5, 336, 169, 2, 756, 758, 5, 338, 170, 2, 757, 742, 3, 2, 2, 2, 757, 743, 3, 2, 2, 2, 757, 744, 3, 2, 2, 2, 757, 745, 3, 2, 2, 2, 757, 746, 3, 2, 2, 2, 757, 747, 3, 2, 2, 2, 757, 748, 3, 2, 2, 2, 757, 749, 3, 2, 2, 2, 757, 750, 3, 2, 2, 2, 757, 751, 3, 2, 2, 2, 757, 752, 3, 2, 2, 2, 757, 753, 3, 2, 2, 2, 757, 754, 3, 2, 2, 2, 757, 755, 3, 2, 2, 2, 757, 756, 3, 2, 2, 2, 758, 17, 3, 2, 2, 2, 759, 763, 5, 340, 171, 2, 760, 763, 5, 342, 172, 2, 761, 763, 5, 344, 173, 2, 762, 759, 3, 2, 2, 2, 762, 760, 3, 2, 2, 2, 762, 761, 3, 2, 2, 2, 763, 19, 3, 2, 2, 2, 764, 775, 5, 348, 175, 2, 765, 775, 5, 350, 176, 2, 766, 775, 5, 352, 177, 2, 767, 775, 5, 356, 179, 2, 768, 775, 5, 358, 180, 2, 769, 775, 5, 360, 181, 2, 770, 775, 5, 364, 183, 2, 771, 775, 5, 354, 178, 2, 772, 775, 5, 362, 182, 2, 773, 775, 5, 366, 184, 2, 774, 764, 3, 2, 2, 2, 774, 765, 3, 2, 2, 2, 774, 766, 3, 2, 2, 2, 774, 767, 3, 2, 2, 2, 774, 768, 3, 2, 2, 2, 774, 769, 3, 2, 2, 2, 774, 770, 3, 2, 2, 2, 774, 771, 3, 2, 2, 2, 774, 772, 3, 2, 2, 2, 774, 773, 3, 2, 2, 2, 775, 21, 3, 2, 2, 2, 776, 802, 5, 384, 193, 2, 777, 802, 5, 386, 194, 2, 778, 802, 5, 388, 195, 2, 779, 802, 5, 390, 196, 2, 780, 802, 5, 392, 197, 2, 781, 802, 5, 394, 198, 2, 782, 802, 5, 396, 199, 2, 783, 802, 5, 398, 200, 2, 784, 802, 5, 422, 212, 2, 785, 802, 5, 424, 213, 2, 786, 802, 5, 426, 214, 2, 787, 802, 5, 428, 215, 2, 788, 802, 5, 430, 216, 2, 789, 802, 5, 434, 218, 2, 790, 802, 5, 436, 219, 2, 791, 802, 5, 438, 220, 2, 792, 802, 5, 440, 221, 2, 793, 802, 5, 442, 222, 2, 794, 802, 5, 456, 229, 2, 795, 802, 5, 458, 230, 2, 796, 802, 5, 460, 231, 2, 797, 802, 5, 462, 232, 2, 798, 802, 5, 464, 233, 2, 799, 802, 5, 466, 234, 2, 800, 802, 5, 468, 235, 2, 801, 776, 3, 2, 2, 2, 801, 777, 3, 2, 2, 2, 801, 778, 3, 2, 2, 2, 801, 779, 3, 2, 2, 2, 801, 780, 3, 2, 2, 2, 801, 781, 3, 2, 2, 2, 801, 782, 3, 2, 2, 2, 801, 783, 3, 2, 2, 2, 801, 784, 3, 2, 2, 2, 801, 785, 3, 2, 2, 2, 801, 786, 3, 2, 2, 2, 801, 787, 3, 2, 2, 2, 801, 788, 3, 2, 2, 2, 801, 789, 3, 2, 2, 2, 801, 790, 3, 2, 2, 2, 801, 791, 3, 2, 2, 2, 801, 792, 3, 2, 2, 2, 801, 793, 3, 2, 2, 2, 801, 794, 3, 2, 2, 2, 801, 795, 3, 2, 2, 2, 801, 796, 3, 2, 2, 2, 801, 797, 3, 2, 2, 2, 801, 798, 3, 2, 2, 2, 801, 799, 3, 2, 2, 2, 801, 800, 3, 2, 2, 2, 802, 23, 3, 2, 2, 2, 803, 811, 5, 478, 240, 2, 804, 811, 5, 480, 241, 2, 805, 811, 5, 482, 242, 2, 806, 811, 5, 484, 243, 2, 807, 811, 5, 486, 244, 2, 808, 811, 5, 488, 245, 2, 809, 811, 5, 492, 247, 2, 810, 803, 3, 2, 2, 2, 810, 804, 3, 2, 2, 2, 810, 805, 3, 2, 2, 2, 810, 806, 3, 2, 2, 2, 810, 807, 3, 2, 2, 2, 810, 808, 3, 2, 2, 2, 810, 809, 3, 2, 2, 2, 811, 25, 3, 2, 2, 2, 812, 813, 7, 32, 2, 2, 813, 815, 9, 2, 2, 2, 814, 816, 5, 582, 292, 2, 815, 814, 3, 2, 2, 2, 815, 816, 3, 2, 2, 2, 816, 817, 3, 2, 2, 2, 817, 821, 5, 524, 263, 2, 818, 820, 5, 50, 26, 2, 819, 818, 3, 2, 2, 2, 820, 823, 3, 2, 2, 2, 821, 819, 3, 2, 2, 2, 821, 822, 3, 2, 2, 2, 822, 27, 3, 2, 2, 2, 823, 821, 3, 2, 2, 2, 824, 826, 7, 32, 2, 2, 825, 827, 5, 52, 27, 2, 826, 825, 3, 2, 2, 2, 826, 827, 3, 2, 2, 2, 827, 828, 3, 2, 2, 2, 828, 830, 7, 350, 2, 2, 829, 831, 5, 582, 292, 2, 830, 829, 3, 2, 2, 2, 830, 831, 3, 2, 2, 2, 831, 832, 3, 2, 2, 2, 832, 833, 5, 498, 250, 2, 833, 834, 7, 108, 2, 2, 834, 835, 7, 519, 2, 2, 835, 842, 5, 54, 28, 2, 836, 837, 7, 108, 2, 2, 837, 839, 7, 310, 2, 2, 838, 840, 7, 104, 2, 2, 839, 838, 3, 2, 2, 2, 839, 840, 3, 2, 2, 2, 840, 841, 3, 2, 2, 2, 841, 843, 7, 480, 2, 2, 842, 836, 3, 2, 2, 2, 842, 843, 3, 2, 2, 2, 843, 845, 3, 2, 2, 2, 844, 846, 5, 62, 32, 2, 845, 844, 3, 2, 2, 2, 845, 846, 3, 2, 2, 2, 846, 849, 3, 2, 2, 2, 847, 848, 7, 307, 2, 2, 848, 850, 7, 1039, 2, 2, 849, 847, 3, 2, 2, 2, 849, 850, 3, 2, 2, 2, 850, 851, 3, 2, 2, 2, 851, 852, 7, 336, 2, 2, 852, 853, 5, 346, 174, 2, 853, 29, 3, 2, 2, 2, 854, 856, 7, 32, 2, 2, 855, 857, 9, 3, 2, 2, 856, 855, 3, 2, 2, 2, 856, 857, 3, 2, 2, 2, 857, 859, 3, 2, 2, 2, 858, 860, 9, 4, 2, 2, 859, 858, 3, 2, 2, 2, 859, 860, 3, 2, 2, 2, 860, 861, 3, 2, 2, 2, 861, 862, 7, 74, 2, 2, 862, 864, 5, 524, 263, 2, 863, 865, 5, 64, 33, 2, 864, 863, 3, 2, 2, 2, 864, 865, 3, 2, 2, 2, 865, 866, 3, 2, 2, 2, 866, 867, 7, 108, 2, 2, 867, 868, 5, 500, 251, 2, 868, 872, 5, 560, 281, 2, 869, 871, 5, 66, 34, 2, 870, 869, 3, 2, 2, 2, 871, 874, 3, 2, 2, 2, 872, 870, 3, 2, 2, 2, 872, 873, 3, 2, 2, 2, 873, 887, 3, 2, 2, 2, 874, 872, 3, 2, 2, 2, 875, 877, 7, 276, 2, 2, 876, 878, 7, 1015, 2, 2, 877, 876, 3, 2, 2, 2, 877, 878, 3, 2, 2, 2, 878, 879, 3, 2, 2, 2, 879, 886, 9, 5, 2, 2, 880, 882, 7, 95, 2, 2, 881, 883, 7, 1015, 2, 2, 882, 881, 3, 2, 2, 2, 882, 883, 3, 2, 2, 2, 883, 884, 3, 2, 2, 2, 884, 886, 9, 6, 2, 2, 885, 875, 3, 2, 2, 2, 885, 880, 3, 2, 2, 2, 886, 889, 3, 2, 2, 2, 887, 885, 3, 2, 2, 2, 887, 888, 3, 2, 2, 2, 888, 31, 3, 2, 2, 2, 889, 887, 3, 2, 2, 2, 890, 891, 7, 32, 2, 2, 891, 892, 7, 405, 2, 2, 892, 893, 7, 68, 2, 2, 893, 894, 5, 524, 263, 2, 894, 895, 7, 7, 2, 2, 895, 896, 7, 570, 2, 2, 896, 902, 7, 1039, 2, 2, 897, 899, 7, 384, 2, 2, 898, 900, 7, 1015, 2, 2, 899, 898, 3, 2, 2, 2, 899, 900, 3, 2, 2, 2, 900, 901, 3, 2, 2, 2, 901, 903, 5, 532, 267, 2, 902, 897, 3, 2, 2, 2, 902, 903, 3, 2, 2, 2, 903, 909, 3, 2, 2, 2, 904, 906, 7, 571, 2, 2, 905, 907, 7, 1015, 2, 2, 906, 905, 3, 2, 2, 2, 906, 907, 3, 2, 2, 2, 907, 908, 3, 2, 2, 2, 908, 910, 5, 532, 267, 2, 909, 904, 3, 2, 2, 2, 909, 910, 3, 2, 2, 2, 910, 916, 3, 2, 2, 2, 911, 913, 7, 490, 2, 2, 912, 914, 7, 1015, 2, 2, 913, 912, 3, 2, 2, 2, 913, 914, 3, 2, 2, 2, 914, 915, 3, 2, 2, 2, 915, 917, 5, 532, 267, 2, 916, 911, 3, 2, 2, 2, 916, 917, 3, 2, 2, 2, 917, 923, 3, 2, 2, 2, 918, 920, 7, 452, 2, 2, 919, 921, 7, 1015, 2, 2, 920, 919, 3, 2, 2, 2, 920, 921, 3, 2, 2, 2, 921, 922, 3, 2, 2, 2, 922, 924, 5, 524, 263, 2, 923, 918, 3, 2, 2, 2, 923, 924, 3, 2, 2, 2, 924, 926, 3, 2, 2, 2, 925, 927, 7, 585, 2, 2, 926, 925, 3, 2, 2, 2, 926, 927, 3, 2, 2, 2, 927, 933, 3, 2, 2, 2, 928, 930, 7, 307, 2, 2, 929, 931, 7, 1015, 2, 2, 930, 929, 3, 2, 2, 2, 930, 931, 3, 2, 2, 2, 931, 932, 3, 2, 2, 2, 932, 934, 7, 1039, 2, 2, 933, 928, 3, 2, 2, 2, 933, 934, 3, 2, 2, 2, 934, 935, 3, 2, 2, 2, 935, 937, 7, 344, 2, 2, 936, 938, 7, 1015, 2, 2, 937, 936, 3, 2, 2, 2, 937, 938, 3, 2, 2, 2, 938, 939, 3, 2, 2, 2, 939, 940, 5, 514, 258, 2, 940, 33, 3, 2, 2, 2, 941, 943, 7, 32, 2, 2, 942, 944, 5, 52, 27, 2, 943, 942, 3, 2, 2, 2, 943, 944, 3, 2, 2, 2, 944, 945, 3, 2, 2, 2, 945, 946, 7, 119, 2, 2, 946, 947, 5, 498, 250, 2, 947, 949, 7, 1024, 2, 2, 948, 950, 5, 68, 35, 2, 949, 948, 3, 2, 2, 2, 949, 950, 3, 2, 2, 2, 950, 955, 3, 2, 2, 2, 951, 952, 7, 1026, 2, 2, 952, 954, 5, 68, 35, 2, 953, 951, 3, 2, 2, 2, 954, 957, 3, 2, 2, 2, 955, 953, 3, 2, 2, 2, 955, 956, 3, 2, 2, 2, 956, 958, 3, 2, 2, 2, 957, 955, 3, 2, 2, 2, 958, 962, 7, 1025, 2, 2, 959, 961, 5, 72, 37, 2, 960, 959, 3, 2, 2, 2, 961, 964, 3, 2, 2, 2, 962, 960, 3, 2, 2, 2, 962, 963, 3, 2, 2, 2, 963, 965, 3, 2, 2, 2, 964, 962, 3, 2, 2, 2, 965, 966, 5, 346, 174, 2, 966, 35, 3, 2, 2, 2, 967, 969, 7, 32, 2, 2, 968, 970, 5, 52, 27, 2, 969, 968, 3, 2, 2, 2, 969, 970, 3, 2, 2, 2, 970, 971, 3, 2, 2, 2, 971, 972, 7, 370, 2, 2, 972, 973, 5, 498, 250, 2, 973, 975, 7, 1024, 2, 2, 974, 976, 5, 70, 36, 2, 975, 974, 3, 2, 2, 2, 975, 976, 3, 2, 2, 2, 976, 981, 3, 2, 2, 2, 977, 978, 7, 1026, 2, 2, 978, 980, 5, 70, 36, 2, 979, 977, 3, 2, 2, 2, 980, 983, 3, 2, 2, 2, 981, 979, 3, 2, 2, 2, 981, 982, 3, 2, 2, 2, 982, 984, 3, 2, 2, 2, 983, 981, 3, 2, 2, 2, 984, 985, 7, 1025, 2, 2, 985, 986, 7, 510, 2, 2, 986, 990, 5, 544, 273, 2, 987, 989, 5, 72, 37, 2, 988, 987, 3, 2, 2, 2, 989, 992, 3, 2, 2, 2, 990, 988, 3, 2, 2, 2, 990, 991, 3, 2, 2, 2, 991, 995, 3, 2, 2, 2, 992, 990, 3, 2, 2, 2, 993, 996, 5, 346, 174, 2, 994, 996, 5, 362, 182, 2, 995, 993, 3, 2, 2, 2, 995, 994, 3, 2, 2, 2, 996, 37, 3, 2, 2, 2, 997, 998, 7, 32, 2, 2, 998, 999, 7, 521, 2, 2, 999, 1000, 5, 524, 263, 2, 1000, 1001, 7, 62, 2, 2, 1001, 1002, 7, 325, 2, 2, 1002, 1003, 7, 589, 2, 2, 1003, 1004, 9, 7, 2, 2, 1004, 1005, 7, 464, 2, 2, 1005, 1006, 7, 1024, 2, 2, 1006, 1011, 5, 74, 38, 2, 1007, 1008, 7, 1026, 2, 2, 1008, 1010, 5, 74, 38, 2, 1009, 1007, 3, 2, 2, 2, 1010, 1013, 3, 2, 2, 2, 1011, 1009, 3, 2, 2, 2, 1011, 1012, 3, 2, 2, 2, 1012, 1014, 3, 2, 2, 2, 1013, 1011, 3, 2, 2, 2, 1014, 1015, 7, 1025, 2, 2, 1015, 39, 3, 2, 2, 2, 1016, 1018, 7, 32, 2, 2, 1017, 1019, 7, 561, 2, 2, 1018, 1017, 3, 2, 2, 2, 1018, 1019, 3, 2, 2, 2, 1019, 1020, 3, 2, 2, 2, 1020, 1022, 7, 156, 2, 2, 1021, 1023, 5, 582, 292, 2, 1022, 1021, 3, 2, 2, 2, 1022, 1023, 3, 2, 2, 2, 1023, 1024, 3, 2, 2, 2, 1024, 1032, 5, 500, 251, 2, 1025, 1026, 7, 90, 2, 2, 1026, 1033, 5, 500, 251, 2, 1027, 1028, 7, 1024, 2, 2, 1028, 1029, 7, 90, 2, 2, 1029, 1030, 5, 500, 251, 2, 1030, 1031, 7, 1025, 2, 2, 1031, 1033, 3, 2, 2, 2, 1032, 1025, 3, 2, 2, 2, 1032, 1027, 3, 2, 2, 2, 1033, 1095, 3, 2, 2, 2, 1034, 1036, 7, 32, 2, 2, 1035, 1037, 7, 561, 2, 2, 1036, 1035, 3, 2, 2, 2, 1036, 1037, 3, 2, 2, 2, 1037, 1038, 3, 2, 2, 2, 1038, 1040, 7, 156, 2, 2, 1039, 1041, 5, 582, 292, 2, 1040, 1039, 3, 2, 2, 2, 1040, 1041, 3, 2, 2, 2, 1041, 1042, 3, 2, 2, 2, 1042, 1044, 5, 500, 251, 2, 1043, 1045, 5, 76, 39, 2, 1044, 1043, 3, 2, 2, 2, 1044, 1045, 3, 2, 2, 2, 1045, 1056, 3, 2, 2, 2, 1046, 1053, 5, 94, 48, 2, 1047, 1049, 7, 1026, 2, 2, 1048, 1047, 3, 2, 2, 2, 1048, 1049, 3, 2, 2, 2, 1049, 1050, 3, 2, 2, 2, 1050, 1052, 5, 94, 48, 2, 1051, 1048, 3, 2, 2, 2, 1052, 1055, 3, 2, 2, 2, 1053, 1051, 3, 2, 2, 2, 1053, 1054, 3, 2, 2, 2, 1054, 1057, 3, 2, 2, 2, 1055, 1053, 3, 2, 2, 2, 1056, 1046, 3, 2, 2, 2, 1056, 1057, 3, 2, 2, 2, 1057, 1059, 3, 2, 2, 2, 1058, 1060, 5, 98, 50, 2, 1059, 1058, 3, 2, 2, 2, 1059, 1060, 3, 2, 2, 2, 1060, 1062, 3, 2, 2, 2, 1061, 1063, 9, 8, 2, 2, 1062, 1061, 3, 2, 2, 2, 1062, 1063, 3, 2, 2, 2, 1063, 1065, 3, 2, 2, 2, 1064, 1066, 7, 13, 2, 2, 1065, 1064, 3, 2, 2, 2, 1065, 1066, 3, 2, 2, 2, 1066, 1067, 3, 2, 2, 2, 1067, 1068, 5, 180, 91, 2, 1068, 1095, 3, 2, 2, 2, 1069, 1071, 7, 32, 2, 2, 1070, 1072, 7, 561, 2, 2, 1071, 1070, 3, 2, 2, 2, 1071, 1072, 3, 2, 2, 2, 1072, 1073, 3, 2, 2, 2, 1073, 1075, 7, 156, 2, 2, 1074, 1076, 5, 582, 292, 2, 1075, 1074, 3, 2, 2, 2, 1075, 1076, 3, 2, 2, 2, 1076, 1077, 3, 2, 2, 2, 1077, 1078, 5, 500, 251, 2, 1078, 1089, 5, 76, 39, 2, 1079, 1086, 5, 94, 48, 2, 1080, 1082, 7, 1026, 2, 2, 1081, 1080, 3, 2, 2, 2, 1081, 1082, 3, 2, 2, 2, 1082, 1083, 3, 2, 2, 2, 1083, 1085, 5, 94, 48, 2, 1084, 1081, 3, 2, 2, 2, 1085, 1088, 3, 2, 2, 2, 1086, 1084, 3, 2, 2, 2, 1086, 1087, 3, 2, 2, 2, 1087, 1090, 3, 2, 2, 2, 1088, 1086, 3, 2, 2, 2, 1089, 1079, 3, 2, 2, 2, 1089, 1090, 3, 2, 2, 2, 1090, 1092, 3, 2, 2, 2, 1091, 1093, 5, 98, 50, 2, 1092, 1091, 3, 2, 2, 2, 1092, 1093, 3, 2, 2, 2, 1093, 1095, 3, 2, 2, 2, 1094, 1016, 3, 2, 2, 2, 1094, 1034, 3, 2, 2, 2, 1094, 1069, 3, 2, 2, 2, 1095, 41, 3, 2, 2, 2, 1096, 1097, 7, 32, 2, 2, 1097, 1098, 7, 560, 2, 2, 1098, 1099, 5, 524, 263, 2, 1099, 1100, 7, 7, 2, 2, 1100, 1101, 7, 326, 2, 2, 1101, 1105, 7, 1039, 2, 2, 1102, 1103, 7, 362, 2, 2, 1103, 1104, 7, 1015, 2, 2, 1104, 1106, 5, 532, 267, 2, 1105, 1102, 3, 2, 2, 2, 1105, 1106, 3, 2, 2, 2, 1106, 1112, 3, 2, 2, 2, 1107, 1109, 7, 344, 2, 2, 1108, 1110, 7, 1015, 2, 2, 1109, 1108, 3, 2, 2, 2, 1109, 1110, 3, 2, 2, 2, 1110, 1111, 3, 2, 2, 2, 1111, 1113, 5, 514, 258, 2, 1112, 1107, 3, 2, 2, 2, 1112, 1113, 3, 2, 2, 2, 1113, 43, 3, 2, 2, 2, 1114, 1115, 7, 32, 2, 2, 1115, 1116, 7, 560, 2, 2, 1116, 1117, 5, 524, 263, 2, 1117, 1118, 7, 7, 2, 2, 1118, 1119, 7, 326, 2, 2, 1119, 1120, 7, 1039, 2, 2, 1120, 1121, 7, 170, 2, 2, 1121, 1122, 7, 405, 2, 2, 1122, 1123, 7, 68, 2, 2, 1123, 1129, 5, 524, 263, 2, 1124, 1126, 7, 358, 2, 2, 1125, 1127, 7, 1015, 2, 2, 1126, 1125, 3, 2, 2, 2, 1126, 1127, 3, 2, 2, 2, 1127, 1128, 3, 2, 2, 2, 1128, 1130, 5, 532, 267, 2, 1129, 1124, 3, 2, 2, 2, 1129, 1130, 3, 2, 2, 2, 1130, 1136, 3, 2, 2, 2, 1131, 1133, 7, 384, 2, 2, 1132, 1134, 7, 1015, 2, 2, 1133, 1132, 3, 2, 2, 2, 1133, 1134, 3, 2, 2, 2, 1134, 1135, 3, 2, 2, 2, 1135, 1137, 5, 532, 267, 2, 1136, 1131, 3, 2, 2, 2, 1136, 1137, 3, 2, 2, 2, 1137, 1143, 3, 2, 2, 2, 1138, 1140, 7, 281, 2, 2, 1139, 1141, 7, 1015, 2, 2, 1140, 1139, 3, 2, 2, 2, 1140, 1141, 3, 2, 2, 2, 1141, 1142, 3, 2, 2, 2, 1142, 1144, 5, 532, 267, 2, 1143, 1138, 3, 2, 2, 2, 1143, 1144, 3, 2, 2, 2, 1144, 1150, 3, 2, 2, 2, 1145, 1147, 7, 431, 2, 2, 1146, 1148, 7, 1015, 2, 2, 1147, 1146, 3, 2, 2, 2, 1147, 1148, 3, 2, 2, 2, 1148, 1149, 3, 2, 2, 2, 1149, 1151, 5, 532, 267, 2, 1150, 1145, 3, 2, 2, 2, 1150, 1151, 3, 2, 2, 2, 1151, 1157, 3, 2, 2, 2, 1152, 1154, 7, 452, 2, 2, 1153, 1155, 7, 1015, 2, 2, 1154, 1153, 3, 2, 2, 2, 1154, 1155, 3, 2, 2, 2, 1155, 1156, 3, 2, 2, 2, 1156, 1158, 5, 524, 263, 2, 1157, 1152, 3, 2, 2, 2, 1157, 1158, 3, 2, 2, 2, 1158, 1160, 3, 2, 2, 2, 1159, 1161, 7, 585, 2, 2, 1160, 1159, 3, 2, 2, 2, 1160, 1161, 3, 2, 2, 2, 1161, 1167, 3, 2, 2, 2, 1162, 1164, 7, 307, 2, 2, 1163, 1165, 7, 1015, 2, 2, 1164, 1163, 3, 2, 2, 2, 1164, 1165, 3, 2, 2, 2, 1165, 1166, 3, 2, 2, 2, 1166, 1168, 7, 1039, 2, 2, 1167, 1162, 3, 2, 2, 2, 1167, 1168, 3, 2, 2, 2, 1168, 1169, 3, 2, 2, 2, 1169, 1171, 7, 344, 2, 2, 1170, 1172, 7, 1015, 2, 2, 1171, 1170, 3, 2, 2, 2, 1171, 1172, 3, 2, 2, 2, 1172, 1173, 3, 2, 2, 2, 1173, 1174, 5, 514, 258, 2, 1174, 45, 3, 2, 2, 2, 1175, 1177, 7, 32, 2, 2, 1176, 1178, 5, 52, 27, 2, 1177, 1176, 3, 2, 2, 2, 1177, 1178, 3, 2, 2, 2, 1178, 1179, 3, 2, 2, 2, 1179, 1180, 7, 161, 2, 2, 1180, 1181, 5, 498, 250, 2, 1181, 1182, 9, 9, 2, 2, 1182, 1183, 9, 10, 2, 2, 1183, 1184, 7, 108, 2, 2, 1184, 1185, 5, 500, 251, 2, 1185, 1186, 7, 60, 2, 2, 1186, 1187, 7, 50, 2, 2, 1187, 1190, 7, 515, 2, 2, 1188, 1189, 9, 11, 2, 2, 1189, 1191, 5, 498, 250, 2, 1190, 1188, 3, 2, 2, 2, 1190, 1191, 3, 2, 2, 2, 1191, 1192, 3, 2, 2, 2, 1192, 1193, 5, 346, 174, 2, 1193, 47, 3, 2, 2, 2, 1194, 1197, 7, 32, 2, 2, 1195, 1196, 7, 112, 2, 2, 1196, 1198, 7, 129, 2, 2, 1197, 1195, 3, 2, 2, 2, 1197, 1198, 3, 2, 2, 2, 1198, 1202, 3, 2, 2, 2, 1199, 1200, 7, 276, 2, 2, 1200, 1201, 7, 1015, 2, 2, 1201, 1203, 9, 12, 2, 2, 1202, 1199, 3, 2, 2, 2, 1202, 1203, 3, 2, 2, 2, 1203, 1205, 3, 2, 2, 2, 1204, 1206, 5, 52, 27, 2, 1205, 1204, 3, 2, 2, 2, 1205, 1206, 3, 2, 2, 2, 1206, 1210, 3, 2, 2, 2, 1207, 1208, 7, 145, 2, 2, 1208, 1209, 7, 520, 2, 2, 1209, 1211, 9, 13, 2, 2, 1210, 1207, 3, 2, 2, 2, 1210, 1211, 3, 2, 2, 2, 1211, 1212, 3, 2, 2, 2, 1212, 1213, 7, 582, 2, 2, 1213, 1218, 5, 498, 250, 2, 1214, 1215, 7, 1024, 2, 2, 1215, 1216, 5, 556, 279, 2, 1216, 1217, 7, 1025, 2, 2, 1217, 1219, 3, 2, 2, 2, 1218, 1214, 3, 2, 2, 2, 1218, 1219, 3, 2, 2, 2, 1219, 1220, 3, 2, 2, 2, 1220, 1221, 7, 13, 2, 2, 1221, 1228, 5, 180, 91, 2, 1222, 1224, 7, 176, 2, 2, 1223, 1225, 9, 14, 2, 2, 1224, 1223, 3, 2, 2, 2, 1224, 1225, 3, 2, 2, 2, 1225, 1226, 3, 2, 2, 2, 1226, 1227, 7, 25, 2, 2, 1227, 1229, 7, 110, 2, 2, 1228, 1222, 3, 2, 2, 2, 1228, 1229, 3, 2, 2, 2, 1229, 49, 3, 2, 2, 2, 1230, 1232, 7, 40, 2, 2, 1231, 1230, 3, 2, 2, 2, 1231, 1232, 3, 2, 2, 2, 1232, 1236, 3, 2, 2, 2, 1233, 1234, 7, 24, 2, 2, 1234, 1237, 7, 140, 2, 2, 1235, 1237, 7, 735, 2, 2, 1236, 1233, 3, 2, 2, 2, 1236, 1235, 3, 2, 2, 2, 1237, 1239, 3, 2, 2, 2, 1238, 1240, 7, 1015, 2, 2, 1239, 1238, 3, 2, 2, 2, 1239, 1240, 3, 2, 2, 2, 1240, 1243, 3, 2, 2, 2, 1241, 1244, 5, 510, 256, 2, 1242, 1244, 7, 40, 2, 2, 1243, 1241, 3, 2, 2, 2, 1243, 1242, 3, 2, 2, 2, 1244, 1254, 3, 2, 2, 2, 1245, 1247, 7, 40, 2, 2, 1246, 1245, 3, 2, 2, 2, 1246, 1247, 3, 2, 2, 2, 1247, 1248, 3, 2, 2, 2, 1248, 1250, 7, 26, 2, 2, 1249, 1251, 7, 1015, 2, 2, 1250, 1249, 3, 2, 2, 2, 1250, 1251, 3, 2, 2, 2, 1251, 1252, 3, 2, 2, 2, 1252, 1254, 5, 512, 257, 2, 1253, 1231, 3, 2, 2, 2, 1253, 1246, 3, 2, 2, 2, 1254, 51, 3, 2, 2, 2, 1255, 1256, 7, 329, 2, 2, 1256, 1263, 7, 1015, 2, 2, 1257, 1264, 5, 506, 254, 2, 1258, 1261, 7, 35, 2, 2, 1259, 1260, 7, 1024, 2, 2, 1260, 1262, 7, 1025, 2, 2, 1261, 1259, 3, 2, 2, 2, 1261, 1262, 3, 2, 2, 2, 1262, 1264, 3, 2, 2, 2, 1263, 1257, 3, 2, 2, 2, 1263, 1258, 3, 2, 2, 2, 1264, 53, 3, 2, 2, 2, 1265, 1266, 7, 278, 2, 2, 1266, 1270, 5, 56, 29, 2, 1267, 1269, 5, 58, 30, 2, 1268, 1267, 3, 2, 2, 2, 1269, 1272, 3, 2, 2, 2, 1270, 1268, 3, 2, 2, 2, 1270, 1271, 3, 2, 2, 2, 1271, 1300, 3, 2, 2, 2, 1272, 1270, 3, 2, 2, 2, 1273, 1276, 7, 352, 2, 2, 1274, 1277, 5, 530, 266, 2, 1275, 1277, 5, 604, 303, 2, 1276, 1274, 3, 2, 2, 2, 1276, 1275, 3, 2, 2, 2, 1277, 1278, 3, 2, 2, 2, 1278, 1287, 5, 60, 31, 2, 1279, 1280, 7, 543, 2, 2, 1280, 1284, 5, 56, 29, 2, 1281, 1283, 5, 58, 30, 2, 1282, 1281, 3, 2, 2, 2, 1283, 1286, 3, 2, 2, 2, 1284, 1282, 3, 2, 2, 2, 1284, 1285, 3, 2, 2, 2, 1285, 1288, 3, 2, 2, 2, 1286, 1284, 3, 2, 2, 2, 1287, 1279, 3, 2, 2, 2, 1287, 1288, 3, 2, 2, 2, 1288, 1297, 3, 2, 2, 2, 1289, 1290, 7, 343, 2, 2, 1290, 1294, 5, 56, 29, 2, 1291, 1293, 5, 58, 30, 2, 1292, 1291, 3, 2, 2, 2, 1293, 1296, 3, 2, 2, 2, 1294, 1292, 3, 2, 2, 2, 1294, 1295, 3, 2, 2, 2, 1295, 1298, 3, 2, 2, 2, 1296, 1294, 3, 2, 2, 2, 1297, 1289, 3, 2, 2, 2, 1297, 1298, 3, 2, 2, 2, 1298, 1300, 3, 2, 2, 2, 1299, 1265, 3, 2, 2, 2, 1299, 1273, 3, 2, 2, 2, 1300, 55, 3, 2, 2, 2, 1301, 1306, 7, 255, 2, 2, 1302, 1306, 5, 534, 268, 2, 1303, 1306, 5, 530, 266, 2, 1304, 1306, 5, 604, 303, 2, 1305, 1301, 3, 2, 2, 2, 1305, 1302, 3, 2, 2, 2, 1305, 1303, 3, 2, 2, 2, 1305, 1304, 3, 2, 2, 2, 1306, 57, 3, 2, 2, 2, 1307, 1308, 7, 1010, 2, 2, 1308, 1311, 7, 79, 2, 2, 1309, 1312, 5, 530, 266, 2, 1310, 1312, 5, 604, 303, 2, 1311, 1309, 3, 2, 2, 2, 1311, 1310, 3, 2, 2, 2, 1312, 1313, 3, 2, 2, 2, 1313, 1314, 5, 60, 31, 2, 1314, 59, 3, 2, 2, 2, 1315, 1329, 5, 632, 317, 2, 1316, 1329, 7, 205, 2, 2, 1317, 1329, 7, 224, 2, 2, 1318, 1329, 7, 225, 2, 2, 1319, 1329, 7, 226, 2, 2, 1320, 1329, 7, 227, 2, 2, 1321, 1329, 7, 228, 2, 2, 1322, 1329, 7, 229, 2, 2, 1323, 1329, 7, 230, 2, 2, 1324, 1329, 7, 231, 2, 2, 1325, 1329, 7, 232, 2, 2, 1326, 1329, 7, 233, 2, 2, 1327, 1329, 7, 234, 2, 2, 1328, 1315, 3, 2, 2, 2, 1328, 1316, 3, 2, 2, 2, 1328, 1317, 3, 2, 2, 2, 1328, 1318, 3, 2, 2, 2, 1328, 1319, 3, 2, 2, 2, 1328, 1320, 3, 2, 2, 2, 1328, 1321, 3, 2, 2, 2, 1328, 1322, 3, 2, 2, 2, 1328, 1323, 3, 2, 2, 2, 1328, 1324, 3, 2, 2, 2, 1328, 1325, 3, 2, 2, 2, 1328, 1326, 3, 2, 2, 2, 1328, 1327, 3, 2, 2, 2, 1329, 61, 3, 2, 2, 2, 1330, 1336, 7, 340, 2, 2, 1331, 1336, 7, 333, 2, 2, 1332, 1333, 7, 333, 2, 2, 1333, 1334, 7, 108, 2, 2, 1334, 1336, 7, 527, 2, 2, 1335, 1330, 3, 2, 2, 2, 1335, 1331, 3, 2, 2, 2, 1335, 1332, 3, 2, 2, 2, 1336, 63, 3, 2, 2, 2, 1337, 1338, 7, 171, 2, 2, 1338, 1339, 9, 15, 2, 2, 1339, 65, 3, 2, 2, 2, 1340, 1342, 7, 397, 2, 2, 1341, 1343, 7, 1015, 2, 2, 1342, 1341, 3, 2, 2, 2, 1342, 1343, 3, 2, 2, 2, 1343, 1344, 3, 2, 2, 2, 1344, 1354, 5, 532, 267, 2, 1345, 1354, 5, 64, 33, 2, 1346, 1347, 7, 176, 2, 2, 1347, 1348, 7, 468, 2, 2, 1348, 1354, 5, 524, 263, 2, 1349, 1350, 7, 307, 2, 2, 1350, 1354, 7, 1039, 2, 2, 1351, 1354, 7, 389, 2, 2, 1352, 1354, 7, 584, 2, 2, 1353, 1340, 3, 2, 2, 2, 1353, 1345, 3, 2, 2, 2, 1353, 1346, 3, 2, 2, 2, 1353, 1349, 3, 2, 2, 2, 1353, 1351, 3, 2, 2, 2, 1353, 1352, 3, 2, 2, 2, 1354, 67, 3, 2, 2, 2, 1355, 1357, 9, 16, 2, 2, 1356, 1355, 3, 2, 2, 2, 1356, 1357, 3, 2, 2, 2, 1357, 1358, 3, 2, 2, 2, 1358, 1359, 5, 524, 263, 2, 1359, 1360, 5, 544, 273, 2, 1360, 69, 3, 2, 2, 2, 1361, 1362, 5, 524, 263, 2, 1362, 1363, 5, 544, 273, 2, 1363, 71, 3, 2, 2, 2, 1364, 1365, 7, 307, 2, 2, 1365, 1388, 7, 1039, 2, 2, 1366, 1367, 7, 398, 2, 2, 1367, 1388, 7, 145, 2, 2, 1368, 1370, 7, 104, 2, 2, 1369, 1368, 3, 2, 2, 2, 1369, 1370, 3, 2, 2, 2, 1370, 1371, 3, 2, 2, 2, 1371, 1388, 7, 45, 2, 2, 1372, 1373, 7, 319, 2, 2, 1373, 1383, 7, 145, 2, 2, 1374, 1375, 7, 451, 2, 2, 1375, 1383, 7, 145, 2, 2, 1376, 1377, 7, 123, 2, 2, 1377, 1378, 7, 145, 2, 2, 1378, 1383, 7, 325, 2, 2, 1379, 1380, 7, 102, 2, 2, 1380, 1381, 7, 145, 2, 2, 1381, 1383, 7, 325, 2, 2, 1382, 1372, 3, 2, 2, 2, 1382, 1374, 3, 2, 2, 2, 1382, 1376, 3, 2, 2, 2, 1382, 1379, 3, 2, 2, 2, 1383, 1388, 3, 2, 2, 2, 1384, 1385, 7, 145, 2, 2, 1385, 1386, 7, 520, 2, 2, 1386, 1388, 9, 13, 2, 2, 1387, 1364, 3, 2, 2, 2, 1387, 1366, 3, 2, 2, 2, 1387, 1369, 3, 2, 2, 2, 1387, 1382, 3, 2, 2, 2, 1387, 1384, 3, 2, 2, 2, 1388, 73, 3, 2, 2, 2, 1389, 1390, 7, 378, 2, 2, 1390, 1404, 7, 1039, 2, 2, 1391, 1392, 7, 37, 2, 2, 1392, 1404, 7, 1039, 2, 2, 1393, 1394, 7, 576, 2, 2, 1394, 1404, 7, 1039, 2, 2, 1395, 1396, 7, 472, 2, 2, 1396, 1404, 7, 1039, 2, 2, 1397, 1398, 7, 530, 2, 2, 1398, 1404, 7, 1039, 2, 2, 1399, 1400, 7, 465, 2, 2, 1400, 1404, 7, 1039, 2, 2, 1401, 1402, 7, 477, 2, 2, 1402, 1404, 5, 530, 266, 2, 1403, 1389, 3, 2, 2, 2, 1403, 1391, 3, 2, 2, 2, 1403, 1393, 3, 2, 2, 2, 1403, 1395, 3, 2, 2, 2, 1403, 1397, 3, 2, 2, 2, 1403, 1399, 3, 2, 2, 2, 1403, 1401, 3, 2, 2, 2, 1404, 75, 3, 2, 2, 2, 1405, 1406, 7, 1024, 2, 2, 1406, 1411, 5, 78, 40, 2, 1407, 1408, 7, 1026, 2, 2, 1408, 1410, 5, 78, 40, 2, 1409, 1407, 3, 2, 2, 2, 1410, 1413, 3, 2, 2, 2, 1411, 1409, 3, 2, 2, 2, 1411, 1412, 3, 2, 2, 2, 1412, 1414, 3, 2, 2, 2, 1413, 1411, 3, 2, 2, 2, 1414, 1415, 7, 1025, 2, 2, 1415, 77, 3, 2, 2, 2, 1416, 1417, 5, 524, 263, 2, 1417, 1418, 5, 80, 41, 2, 1418, 1422, 3, 2, 2, 2, 1419, 1422, 5, 84, 43, 2, 1420, 1422, 5, 92, 47, 2, 1421, 1416, 3, 2, 2, 2, 1421, 1419, 3, 2, 2, 2, 1421, 1420, 3, 2, 2, 2, 1422, 79, 3, 2, 2, 2, 1423, 1427, 5, 544, 273, 2, 1424, 1426, 5, 82, 42, 2, 1425, 1424, 3, 2, 2, 2, 1426, 1429, 3, 2, 2, 2, 1427, 1425, 3, 2, 2, 2, 1427, 1428, 3, 2, 2, 2, 1428, 81, 3, 2, 2, 2, 1429, 1427, 3, 2, 2, 2, 1430, 1471, 5, 540, 271, 2, 1431, 1432, 7, 40, 2, 2, 1432, 1471, 5, 574, 288, 2, 1433, 1438, 7, 282, 2, 2, 1434, 1435, 7, 108, 2, 2, 1435, 1436, 7, 168, 2, 2, 1436, 1438, 5, 576, 289, 2, 1437, 1433, 3, 2, 2, 2, 1437, 1434, 3, 2, 2, 2, 1438, 1471, 3, 2, 2, 2, 1439, 1441, 7, 118, 2, 2, 1440, 1439, 3, 2, 2, 2, 1440, 1441, 3, 2, 2, 2, 1441, 1442, 3, 2, 2, 2, 1442, 1471, 7, 84, 2, 2, 1443, 1445, 7, 165, 2, 2, 1444, 1446, 7, 84, 2, 2, 1445, 1444, 3, 2, 2, 2, 1445, 1446, 3, 2, 2, 2, 1446, 1471, 3, 2, 2, 2, 1447, 1448, 7, 307, 2, 2, 1448, 1471, 7, 1039, 2, 2, 1449, 1450, 7, 305, 2, 2, 1450, 1471, 9, 17, 2, 2, 1451, 1452, 7, 549, 2, 2, 1452, 1471, 9, 18, 2, 2, 1453, 1471, 5, 86, 44, 2, 1454, 1455, 7, 26, 2, 2, 1455, 1471, 5, 512, 257, 2, 1456, 1457, 7, 65, 2, 2, 1457, 1459, 7, 10, 2, 2, 1458, 1456, 3, 2, 2, 2, 1458, 1459, 3, 2, 2, 2, 1459, 1460, 3, 2, 2, 2, 1460, 1461, 7, 13, 2, 2, 1461, 1462, 7, 1024, 2, 2, 1462, 1463, 5, 604, 303, 2, 1463, 1465, 7, 1025, 2, 2, 1464, 1466, 9, 19, 2, 2, 1465, 1464, 3, 2, 2, 2, 1465, 1466, 3, 2, 2, 2, 1466, 1471, 3, 2, 2, 2, 1467, 1468, 7, 223, 2, 2, 1468, 1469, 7, 40, 2, 2, 1469, 1471, 7, 580, 2, 2, 1470, 1430, 3, 2, 2, 2, 1470, 1431, 3, 2, 2, 2, 1470, 1437, 3, 2, 2, 2, 1470, 1440, 3, 2, 2, 2, 1470, 1443, 3, 2, 2, 2, 1470, 1447, 3, 2, 2, 2, 1470, 1449, 3, 2, 2, 2, 1470, 1451, 3, 2, 2, 2, 1470, 1453, 3, 2, 2, 2, 1470, 1454, 3, 2, 2, 2, 1470, 1458, 3, 2, 2, 2, 1470, 1467, 3, 2, 2, 2, 1471, 83, 3, 2, 2, 2, 1472, 1474, 7, 29, 2, 2, 1473, 1475, 5, 524, 263, 2, 1474, 1473, 3, 2, 2, 2, 1474, 1475, 3, 2, 2, 2, 1475, 1477, 3, 2, 2, 2, 1476, 1472, 3, 2, 2, 2, 1476, 1477, 3, 2, 2, 2, 1477, 1478, 3, 2, 2, 2, 1478, 1479, 7, 118, 2, 2, 1479, 1481, 7, 84, 2, 2, 1480, 1482, 5, 524, 263, 2, 1481, 1480, 3, 2, 2, 2, 1481, 1482, 3, 2, 2, 2, 1482, 1484, 3, 2, 2, 2, 1483, 1485, 5, 64, 33, 2, 1484, 1483, 3, 2, 2, 2, 1484, 1485, 3, 2, 2, 2, 1485, 1486, 3, 2, 2, 2, 1486, 1490, 5, 560, 281, 2, 1487, 1489, 5, 66, 34, 2, 1488, 1487, 3, 2, 2, 2, 1489, 1492, 3, 2, 2, 2, 1490, 1488, 3, 2, 2, 2, 1490, 1491, 3, 2, 2, 2, 1491, 1542, 3, 2, 2, 2, 1492, 1490, 3, 2, 2, 2, 1493, 1495, 7, 29, 2, 2, 1494, 1496, 5, 524, 263, 2, 1495, 1494, 3, 2, 2, 2, 1495, 1496, 3, 2, 2, 2, 1496, 1498, 3, 2, 2, 2, 1497, 1493, 3, 2, 2, 2, 1497, 1498, 3, 2, 2, 2, 1498, 1499, 3, 2, 2, 2, 1499, 1501, 7, 165, 2, 2, 1500, 1502, 9, 20, 2, 2, 1501, 1500, 3, 2, 2, 2, 1501, 1502, 3, 2, 2, 2, 1502, 1504, 3, 2, 2, 2, 1503, 1505, 5, 524, 263, 2, 1504, 1503, 3, 2, 2, 2, 1504, 1505, 3, 2, 2, 2, 1505, 1507, 3, 2, 2, 2, 1506, 1508, 5, 64, 33, 2, 1507, 1506, 3, 2, 2, 2, 1507, 1508, 3, 2, 2, 2, 1508, 1509, 3, 2, 2, 2, 1509, 1513, 5, 560, 281, 2, 1510, 1512, 5, 66, 34, 2, 1511, 1510, 3, 2, 2, 2, 1512, 1515, 3, 2, 2, 2, 1513, 1511, 3, 2, 2, 2, 1513, 1514, 3, 2, 2, 2, 1514, 1542, 3, 2, 2, 2, 1515, 1513, 3, 2, 2, 2, 1516, 1518, 7, 29, 2, 2, 1517, 1519, 5, 524, 263, 2, 1518, 1517, 3, 2, 2, 2, 1518, 1519, 3, 2, 2, 2, 1519, 1521, 3, 2, 2, 2, 1520, 1516, 3, 2, 2, 2, 1520, 1521, 3, 2, 2, 2, 1521, 1522, 3, 2, 2, 2, 1522, 1523, 7, 62, 2, 2, 1523, 1525, 7, 84, 2, 2, 1524, 1526, 5, 524, 263, 2, 1525, 1524, 3, 2, 2, 2, 1525, 1526, 3, 2, 2, 2, 1526, 1527, 3, 2, 2, 2, 1527, 1528, 5, 560, 281, 2, 1528, 1529, 5, 86, 44, 2, 1529, 1542, 3, 2, 2, 2, 1530, 1532, 7, 29, 2, 2, 1531, 1533, 5, 524, 263, 2, 1532, 1531, 3, 2, 2, 2, 1532, 1533, 3, 2, 2, 2, 1533, 1535, 3, 2, 2, 2, 1534, 1530, 3, 2, 2, 2, 1534, 1535, 3, 2, 2, 2, 1535, 1536, 3, 2, 2, 2, 1536, 1537, 7, 25, 2, 2, 1537, 1538, 7, 1024, 2, 2, 1538, 1539, 5, 604, 303, 2, 1539, 1540, 7, 1025, 2, 2, 1540, 1542, 3, 2, 2, 2, 1541, 1476, 3, 2, 2, 2, 1541, 1497, 3, 2, 2, 2, 1541, 1520, 3, 2, 2, 2, 1541, 1534, 3, 2, 2, 2, 1542, 85, 3, 2, 2, 2, 1543, 1544, 7, 124, 2, 2, 1544, 1546, 5, 500, 251, 2, 1545, 1547, 5, 560, 281, 2, 1546, 1545, 3, 2, 2, 2, 1546, 1547, 3, 2, 2, 2, 1547, 1550, 3, 2, 2, 2, 1548, 1549, 7, 100, 2, 2, 1549, 1551, 9, 21, 2, 2, 1550, 1548, 3, 2, 2, 2, 1550, 1551, 3, 2, 2, 2, 1551, 1553, 3, 2, 2, 2, 1552, 1554, 5, 88, 45, 2, 1553, 1552, 3, 2, 2, 2, 1553, 1554, 3, 2, 2, 2, 1554, 87, 3, 2, 2, 2, 1555, 1556, 7, 108, 2, 2, 1556, 1557, 7, 42, 2, 2, 1557, 1561, 5, 90, 46, 2, 1558, 1559, 7, 108, 2, 2, 1559, 1560, 7, 168, 2, 2, 1560, 1562, 5, 90, 46, 2, 1561, 1558, 3, 2, 2, 2, 1561, 1562, 3, 2, 2, 2, 1562, 1572, 3, 2, 2, 2, 1563, 1564, 7, 108, 2, 2, 1564, 1565, 7, 168, 2, 2, 1565, 1569, 5, 90, 46, 2, 1566, 1567, 7, 108, 2, 2, 1567, 1568, 7, 42, 2, 2, 1568, 1570, 5, 90, 46, 2, 1569, 1566, 3, 2, 2, 2, 1569, 1570, 3, 2, 2, 2, 1570, 1572, 3, 2, 2, 2, 1571, 1555, 3, 2, 2, 2, 1571, 1563, 3, 2, 2, 2, 1572, 89, 3, 2, 2, 2, 1573, 1580, 7, 132, 2, 2, 1574, 1580, 7, 20, 2, 2, 1575, 1576, 7, 140, 2, 2, 1576, 1580, 7, 106, 2, 2, 1577, 1578, 7, 451, 2, 2, 1578, 1580, 7, 273, 2, 2, 1579, 1573, 3, 2, 2, 2, 1579, 1574, 3, 2, 2, 2, 1579, 1575, 3, 2, 2, 2, 1579, 1577, 3, 2, 2, 2, 1580, 91, 3, 2, 2, 2, 1581, 1583, 9, 20, 2, 2, 1582, 1584, 5, 524, 263, 2, 1583, 1582, 3, 2, 2, 2, 1583, 1584, 3, 2, 2, 2, 1584, 1586, 3, 2, 2, 2, 1585, 1587, 5, 64, 33, 2, 1586, 1585, 3, 2, 2, 2, 1586, 1587, 3, 2, 2, 2, 1587, 1588, 3, 2, 2, 2, 1588, 1592, 5, 560, 281, 2, 1589, 1591, 5, 66, 34, 2, 1590, 1589, 3, 2, 2, 2, 1591, 1594, 3, 2, 2, 2, 1592, 1590, 3, 2, 2, 2, 1592, 1593, 3, 2, 2, 2, 1593, 1610, 3, 2, 2, 2, 1594, 1592, 3, 2, 2, 2, 1595, 1597, 9, 22, 2, 2, 1596, 1598, 9, 20, 2, 2, 1597, 1596, 3, 2, 2, 2, 1597, 1598, 3, 2, 2, 2, 1598, 1600, 3, 2, 2, 2, 1599, 1601, 5, 524, 263, 2, 1600, 1599, 3, 2, 2, 2, 1600, 1601, 3, 2, 2, 2, 1601, 1602, 3, 2, 2, 2, 1602, 1606, 5, 560, 281, 2, 1603, 1605, 5, 66, 34, 2, 1604, 1603, 3, 2, 2, 2, 1605, 1608, 3, 2, 2, 2, 1606, 1604, 3, 2, 2, 2, 1606, 1607, 3, 2, 2, 2, 1607, 1610, 3, 2, 2, 2, 1608, 1606, 3, 2, 2, 2, 1609, 1581, 3, 2, 2, 2, 1609, 1595, 3, 2, 2, 2, 1610, 93, 3, 2, 2, 2, 1611, 1613, 7, 344, 2, 2, 1612, 1614, 7, 1015, 2, 2, 1613, 1612, 3, 2, 2, 2, 1613, 1614, 3, 2, 2, 2, 1614, 1615, 3, 2, 2, 2, 1615, 1756, 5, 514, 258, 2, 1616, 1618, 7, 282, 2, 2, 1617, 1619, 7, 1015, 2, 2, 1618, 1617, 3, 2, 2, 2, 1618, 1619, 3, 2, 2, 2, 1619, 1620, 3, 2, 2, 2, 1620, 1756, 5, 530, 266, 2, 1621, 1623, 7, 283, 2, 2, 1622, 1624, 7, 1015, 2, 2, 1623, 1622, 3, 2, 2, 2, 1623, 1624, 3, 2, 2, 2, 1624, 1625, 3, 2, 2, 2, 1625, 1756, 5, 530, 266, 2, 1626, 1628, 7, 40, 2, 2, 1627, 1626, 3, 2, 2, 2, 1627, 1628, 3, 2, 2, 2, 1628, 1632, 3, 2, 2, 2, 1629, 1630, 7, 24, 2, 2, 1630, 1633, 7, 140, 2, 2, 1631, 1633, 7, 735, 2, 2, 1632, 1629, 3, 2, 2, 2, 1632, 1631, 3, 2, 2, 2, 1633, 1635, 3, 2, 2, 2, 1634, 1636, 7, 1015, 2, 2, 1635, 1634, 3, 2, 2, 2, 1635, 1636, 3, 2, 2, 2, 1636, 1639, 3, 2, 2, 2, 1637, 1640, 5, 510, 256, 2, 1638, 1640, 7, 40, 2, 2, 1639, 1637, 3, 2, 2, 2, 1639, 1638, 3, 2, 2, 2, 1640, 1756, 3, 2, 2, 2, 1641, 1643, 9, 23, 2, 2, 1642, 1644, 7, 1015, 2, 2, 1643, 1642, 3, 2, 2, 2, 1643, 1644, 3, 2, 2, 2, 1644, 1645, 3, 2, 2, 2, 1645, 1756, 9, 24, 2, 2, 1646, 1648, 7, 40, 2, 2, 1647, 1646, 3, 2, 2, 2, 1647, 1648, 3, 2, 2, 2, 1648, 1649, 3, 2, 2, 2, 1649, 1651, 7, 26, 2, 2, 1650, 1652, 7, 1015, 2, 2, 1651, 1650, 3, 2, 2, 2, 1651, 1652, 3, 2, 2, 2, 1652, 1653, 3, 2, 2, 2, 1653, 1756, 5, 512, 257, 2, 1654, 1656, 7, 307, 2, 2, 1655, 1657, 7, 1015, 2, 2, 1656, 1655, 3, 2, 2, 2, 1656, 1657, 3, 2, 2, 2, 1657, 1658, 3, 2, 2, 2, 1658, 1756, 7, 1039, 2, 2, 1659, 1661, 7, 312, 2, 2, 1660, 1662, 7, 1015, 2, 2, 1661, 1660, 3, 2, 2, 2, 1661, 1662, 3, 2, 2, 2, 1662, 1663, 3, 2, 2, 2, 1663, 1756, 9, 25, 2, 2, 1664, 1666, 7, 314, 2, 2, 1665, 1667, 7, 1015, 2, 2, 1666, 1665, 3, 2, 2, 2, 1666, 1667, 3, 2, 2, 2, 1667, 1668, 3, 2, 2, 2, 1668, 1756, 7, 1039, 2, 2, 1669, 1670, 7, 325, 2, 2, 1670, 1672, 7, 332, 2, 2, 1671, 1673, 7, 1015, 2, 2, 1672, 1671, 3, 2, 2, 2, 1672, 1673, 3, 2, 2, 2, 1673, 1674, 3, 2, 2, 2, 1674, 1756, 7, 1039, 2, 2, 1675, 1677, 7, 330, 2, 2, 1676, 1678, 7, 1015, 2, 2, 1677, 1676, 3, 2, 2, 2, 1677, 1678, 3, 2, 2, 2, 1678, 1679, 3, 2, 2, 2, 1679, 1756, 9, 24, 2, 2, 1680, 1682, 7, 341, 2, 2, 1681, 1683, 7, 1015, 2, 2, 1682, 1681, 3, 2, 2, 2, 1682, 1683, 3, 2, 2, 2, 1683, 1684, 3, 2, 2, 2, 1684, 1756, 7, 1039, 2, 2, 1685, 1686, 7, 74, 2, 2, 1686, 1688, 7, 332, 2, 2, 1687, 1689, 7, 1015, 2, 2, 1688, 1687, 3, 2, 2, 2, 1688, 1689, 3, 2, 2, 2, 1689, 1690, 3, 2, 2, 2, 1690, 1756, 7, 1039, 2, 2, 1691, 1693, 7, 386, 2, 2, 1692, 1694, 7, 1015, 2, 2, 1693, 1692, 3, 2, 2, 2, 1693, 1694, 3, 2, 2, 2, 1694, 1695, 3, 2, 2, 2, 1695, 1756, 9, 26, 2, 2, 1696, 1698, 7, 397, 2, 2, 1697, 1699, 7, 1015, 2, 2, 1698, 1697, 3, 2, 2, 2, 1698, 1699, 3, 2, 2, 2, 1699, 1700, 3, 2, 2, 2, 1700, 1756, 5, 532, 267, 2, 1701, 1703, 7, 430, 2, 2, 1702, 1704, 7, 1015, 2, 2, 1703, 1702, 3, 2, 2, 2, 1703, 1704, 3, 2, 2, 2, 1704, 1705, 3, 2, 2, 2, 1705, 1756, 5, 530, 266, 2, 1706, 1708, 7, 440, 2, 2, 1707, 1709, 7, 1015, 2, 2, 1708, 1707, 3, 2, 2, 2, 1708, 1709, 3, 2, 2, 2, 1709, 1710, 3, 2, 2, 2, 1710, 1756, 5, 530, 266, 2, 1711, 1713, 7, 466, 2, 2, 1712, 1714, 7, 1015, 2, 2, 1713, 1712, 3, 2, 2, 2, 1713, 1714, 3, 2, 2, 2, 1714, 1715, 3, 2, 2, 2, 1715, 1756, 9, 27, 2, 2, 1716, 1718, 7, 472, 2, 2, 1717, 1719, 7, 1015, 2, 2, 1718, 1717, 3, 2, 2, 2, 1718, 1719, 3, 2, 2, 2, 1719, 1720, 3, 2, 2, 2, 1720, 1756, 7, 1039, 2, 2, 1721, 1723, 7, 517, 2, 2, 1722, 1724, 7, 1015, 2, 2, 1723, 1722, 3, 2, 2, 2, 1723, 1724, 3, 2, 2, 2, 1724, 1725, 3, 2, 2, 2, 1725, 1756, 9, 28, 2, 2, 1726, 1728, 7, 544, 2, 2, 1727, 1729, 7, 1015, 2, 2, 1728, 1727, 3, 2, 2, 2, 1728, 1729, 3, 2, 2, 2, 1729, 1730, 3, 2, 2, 2, 1730, 1756, 9, 27, 2, 2, 1731, 1733, 7, 545, 2, 2, 1732, 1734, 7, 1015, 2, 2, 1733, 1732, 3, 2, 2, 2, 1733, 1734, 3, 2, 2, 2, 1734, 1735, 3, 2, 2, 2, 1735, 1756, 9, 27, 2, 2, 1736, 1738, 7, 546, 2, 2, 1737, 1739, 7, 1015, 2, 2, 1738, 1737, 3, 2, 2, 2, 1738, 1739, 3, 2, 2, 2, 1739, 1740, 3, 2, 2, 2, 1740, 1756, 5, 530, 266, 2, 1741, 1742, 7, 560, 2, 2, 1742, 1744, 5, 524, 263, 2, 1743, 1745, 5, 96, 49, 2, 1744, 1743, 3, 2, 2, 2, 1744, 1745, 3, 2, 2, 2, 1745, 1756, 3, 2, 2, 2, 1746, 1756, 5, 96, 49, 2, 1747, 1749, 7, 164, 2, 2, 1748, 1750, 7, 1015, 2, 2, 1749, 1748, 3, 2, 2, 2, 1749, 1750, 3, 2, 2, 2, 1750, 1751, 3, 2, 2, 2, 1751, 1752, 7, 1024, 2, 2, 1752, 1753, 5, 558, 280, 2, 1753, 1754, 7, 1025, 2, 2, 1754, 1756, 3, 2, 2, 2, 1755, 1611, 3, 2, 2, 2, 1755, 1616, 3, 2, 2, 2, 1755, 1621, 3, 2, 2, 2, 1755, 1627, 3, 2, 2, 2, 1755, 1641, 3, 2, 2, 2, 1755, 1647, 3, 2, 2, 2, 1755, 1654, 3, 2, 2, 2, 1755, 1659, 3, 2, 2, 2, 1755, 1664, 3, 2, 2, 2, 1755, 1669, 3, 2, 2, 2, 1755, 1675, 3, 2, 2, 2, 1755, 1680, 3, 2, 2, 2, 1755, 1685, 3, 2, 2, 2, 1755, 1691, 3, 2, 2, 2, 1755, 1696, 3, 2, 2, 2, 1755, 1701, 3, 2, 2, 2, 1755, 1706, 3, 2, 2, 2, 1755, 1711, 3, 2, 2, 2, 1755, 1716, 3, 2, 2, 2, 1755, 1721, 3, 2, 2, 2, 1755, 1726, 3, 2, 2, 2, 1755, 1731, 3, 2, 2, 2, 1755, 1736, 3, 2, 2, 2, 1755, 1741, 3, 2, 2, 2, 1755, 1746, 3, 2, 2, 2, 1755, 1747, 3, 2, 2, 2, 1756, 95, 3, 2, 2, 2, 1757, 1758, 7, 549, 2, 2, 1758, 1759, 9, 18, 2, 2, 1759, 97, 3, 2, 2, 2, 1760, 1761, 7, 117, 2, 2, 1761, 1762, 7, 18, 2, 2, 1762, 1765, 5, 100, 51, 2, 1763, 1764, 7, 471, 2, 2, 1764, 1766, 5, 530, 266, 2, 1765, 1763, 3, 2, 2, 2, 1765, 1766, 3, 2, 2, 2, 1766, 1774, 3, 2, 2, 2, 1767, 1768, 7, 554, 2, 2, 1768, 1769, 7, 18, 2, 2, 1769, 1772, 5, 102, 52, 2, 1770, 1771, 7, 555, 2, 2, 1771, 1773, 5, 530, 266, 2, 1772, 1770, 3, 2, 2, 2, 1772, 1773, 3, 2, 2, 2, 1773, 1775, 3, 2, 2, 2, 1774, 1767, 3, 2, 2, 2, 1774, 1775, 3, 2, 2, 2, 1775, 1787, 3, 2, 2, 2, 1776, 1777, 7, 1024, 2, 2, 1777, 1782, 5, 104, 53, 2, 1778, 1779, 7, 1026, 2, 2, 1779, 1781, 5, 104, 53, 2, 1780, 1778, 3, 2, 2, 2, 1781, 1784, 3, 2, 2, 2, 1782, 1780, 3, 2, 2, 2, 1782, 1783, 3, 2, 2, 2, 1783, 1785, 3, 2, 2, 2, 1784, 1782, 3, 2, 2, 2, 1785, 1786, 7, 1025, 2, 2, 1786, 1788, 3, 2, 2, 2, 1787, 1776, 3, 2, 2, 2, 1787, 1788, 3, 2, 2, 2, 1788, 99, 3, 2, 2, 2, 1789, 1791, 7, 92, 2, 2, 1790, 1789, 3, 2, 2, 2, 1790, 1791, 3, 2, 2, 2, 1791, 1792, 3, 2, 2, 2, 1792, 1793, 7, 376, 2, 2, 1793, 1794, 7, 1024, 2, 2, 1794, 1795, 5, 604, 303, 2, 1795, 1796, 7, 1025, 2, 2, 1796, 1835, 3, 2, 2, 2, 1797, 1799, 7, 92, 2, 2, 1798, 1797, 3, 2, 2, 2, 1798, 1799, 3, 2, 2, 2, 1799, 1800, 3, 2, 2, 2, 1800, 1804, 7, 84, 2, 2, 1801, 1802, 7, 276, 2, 2, 1802, 1803, 7, 1015, 2, 2, 1803, 1805, 9, 29, 2, 2, 1804, 1801, 3, 2, 2, 2, 1804, 1805, 3, 2, 2, 2, 1805, 1806, 3, 2, 2, 2, 1806, 1807, 7, 1024, 2, 2, 1807, 1808, 5, 556, 279, 2, 1808, 1809, 7, 1025, 2, 2, 1809, 1835, 3, 2, 2, 2, 1810, 1820, 7, 121, 2, 2, 1811, 1812, 7, 1024, 2, 2, 1812, 1813, 5, 604, 303, 2, 1813, 1814, 7, 1025, 2, 2, 1814, 1821, 3, 2, 2, 2, 1815, 1816, 7, 304, 2, 2, 1816, 1817, 7, 1024, 2, 2, 1817, 1818, 5, 556, 279, 2, 1818, 1819, 7, 1025, 2, 2, 1819, 1821, 3, 2, 2, 2, 1820, 1811, 3, 2, 2, 2, 1820, 1815, 3, 2, 2, 2, 1821, 1835, 3, 2, 2, 2, 1822, 1832, 7, 403, 2, 2, 1823, 1824, 7, 1024, 2, 2, 1824, 1825, 5, 604, 303, 2, 1825, 1826, 7, 1025, 2, 2, 1826, 1833, 3, 2, 2, 2, 1827, 1828, 7, 304, 2, 2, 1828, 1829, 7, 1024, 2, 2, 1829, 1830, 5, 556, 279, 2, 1830, 1831, 7, 1025, 2, 2, 1831, 1833, 3, 2, 2, 2, 1832, 1823, 3, 2, 2, 2, 1832, 1827, 3, 2, 2, 2, 1833, 1835, 3, 2, 2, 2, 1834, 1790, 3, 2, 2, 2, 1834, 1798, 3, 2, 2, 2, 1834, 1810, 3, 2, 2, 2, 1834, 1822, 3, 2, 2, 2, 1835, 101, 3, 2, 2, 2, 1836, 1838, 7, 92, 2, 2, 1837, 1836, 3, 2, 2, 2, 1837, 1838, 3, 2, 2, 2, 1838, 1839, 3, 2, 2, 2, 1839, 1840, 7, 376, 2, 2, 1840, 1841, 7, 1024, 2, 2, 1841, 1842, 5, 604, 303, 2, 1842, 1843, 7, 1025, 2, 2, 1843, 1858, 3, 2, 2, 2, 1844, 1846, 7, 92, 2, 2, 1845, 1844, 3, 2, 2, 2, 1845, 1846, 3, 2, 2, 2, 1846, 1847, 3, 2, 2, 2, 1847, 1851, 7, 84, 2, 2, 1848, 1849, 7, 276, 2, 2, 1849, 1850, 7, 1015, 2, 2, 1850, 1852, 9, 29, 2, 2, 1851, 1848, 3, 2, 2, 2, 1851, 1852, 3, 2, 2, 2, 1852, 1853, 3, 2, 2, 2, 1853, 1854, 7, 1024, 2, 2, 1854, 1855, 5, 556, 279, 2, 1855, 1856, 7, 1025, 2, 2, 1856, 1858, 3, 2, 2, 2, 1857, 1837, 3, 2, 2, 2, 1857, 1845, 3, 2, 2, 2, 1858, 103, 3, 2, 2, 2, 1859, 1860, 7, 117, 2, 2, 1860, 1861, 5, 524, 263, 2, 1861, 1862, 7, 172, 2, 2, 1862, 1863, 7, 401, 2, 2, 1863, 1864, 7, 563, 2, 2, 1864, 1865, 7, 1024, 2, 2, 1865, 1870, 5, 106, 54, 2, 1866, 1867, 7, 1026, 2, 2, 1867, 1869, 5, 106, 54, 2, 1868, 1866, 3, 2, 2, 2, 1869, 1872, 3, 2, 2, 2, 1870, 1868, 3, 2, 2, 2, 1870, 1871, 3, 2, 2, 2, 1871, 1873, 3, 2, 2, 2, 1872, 1870, 3, 2, 2, 2, 1873, 1877, 7, 1025, 2, 2, 1874, 1876, 5, 112, 57, 2, 1875, 1874, 3, 2, 2, 2, 1876, 1879, 3, 2, 2, 2, 1877, 1875, 3, 2, 2, 2, 1877, 1878, 3, 2, 2, 2, 1878, 1888, 3, 2, 2, 2, 1879, 1877, 3, 2, 2, 2, 1880, 1885, 5, 110, 56, 2, 1881, 1882, 7, 1026, 2, 2, 1882, 1884, 5, 110, 56, 2, 1883, 1881, 3, 2, 2, 2, 1884, 1887, 3, 2, 2, 2, 1885, 1883, 3, 2, 2, 2, 1885, 1886, 3, 2, 2, 2, 1886, 1889, 3, 2, 2, 2, 1887, 1885, 3, 2, 2, 2, 1888, 1880, 3, 2, 2, 2, 1888, 1889, 3, 2, 2, 2, 1889, 1991, 3, 2, 2, 2, 1890, 1891, 7, 117, 2, 2, 1891, 1892, 5, 524, 263, 2, 1892, 1893, 7, 172, 2, 2, 1893, 1894, 7, 401, 2, 2, 1894, 1895, 7, 563, 2, 2, 1895, 1899, 5, 106, 54, 2, 1896, 1898, 5, 112, 57, 2, 1897, 1896, 3, 2, 2, 2, 1898, 1901, 3, 2, 2, 2, 1899, 1897, 3, 2, 2, 2, 1899, 1900, 3, 2, 2, 2, 1900, 1910, 3, 2, 2, 2, 1901, 1899, 3, 2, 2, 2, 1902, 1907, 5, 110, 56, 2, 1903, 1904, 7, 1026, 2, 2, 1904, 1906, 5, 110, 56, 2, 1905, 1903, 3, 2, 2, 2, 1906, 1909, 3, 2, 2, 2, 1907, 1905, 3, 2, 2, 2, 1907, 1908, 3, 2, 2, 2, 1908, 1911, 3, 2, 2, 2, 1909, 1907, 3, 2, 2, 2, 1910, 1902, 3, 2, 2, 2, 1910, 1911, 3, 2, 2, 2, 1911, 1991, 3, 2, 2, 2, 1912, 1913, 7, 117, 2, 2, 1913, 1914, 5, 524, 263, 2, 1914, 1915, 7, 172, 2, 2, 1915, 1916, 7, 73, 2, 2, 1916, 1917, 7, 1024, 2, 2, 1917, 1922, 5, 106, 54, 2, 1918, 1919, 7, 1026, 2, 2, 1919, 1921, 5, 106, 54, 2, 1920, 1918, 3, 2, 2, 2, 1921, 1924, 3, 2, 2, 2, 1922, 1920, 3, 2, 2, 2, 1922, 1923, 3, 2, 2, 2, 1923, 1925, 3, 2, 2, 2, 1924, 1922, 3, 2, 2, 2, 1925, 1929, 7, 1025, 2, 2, 1926, 1928, 5, 112, 57, 2, 1927, 1926, 3, 2, 2, 2, 1928, 1931, 3, 2, 2, 2, 1929, 1927, 3, 2, 2, 2, 1929, 1930, 3, 2, 2, 2, 1930, 1940, 3, 2, 2, 2, 1931, 1929, 3, 2, 2, 2, 1932, 1937, 5, 110, 56, 2, 1933, 1934, 7, 1026, 2, 2, 1934, 1936, 5, 110, 56, 2, 1935, 1933, 3, 2, 2, 2, 1936, 1939, 3, 2, 2, 2, 1937, 1935, 3, 2, 2, 2, 1937, 1938, 3, 2, 2, 2, 1938, 1941, 3, 2, 2, 2, 1939, 1937, 3, 2, 2, 2, 1940, 1932, 3, 2, 2, 2, 1940, 1941, 3, 2, 2, 2, 1941, 1991, 3, 2, 2, 2, 1942, 1943, 7, 117, 2, 2, 1943, 1944, 5, 524, 263, 2, 1944, 1945, 7, 172, 2, 2, 1945, 1946, 7, 73, 2, 2, 1946, 1947, 7, 1024, 2, 2, 1947, 1952, 5, 108, 55, 2, 1948, 1949, 7, 1026, 2, 2, 1949, 1951, 5, 108, 55, 2, 1950, 1948, 3, 2, 2, 2, 1951, 1954, 3, 2, 2, 2, 1952, 1950, 3, 2, 2, 2, 1952, 1953, 3, 2, 2, 2, 1953, 1955, 3, 2, 2, 2, 1954, 1952, 3, 2, 2, 2, 1955, 1959, 7, 1025, 2, 2, 1956, 1958, 5, 112, 57, 2, 1957, 1956, 3, 2, 2, 2, 1958, 1961, 3, 2, 2, 2, 1959, 1957, 3, 2, 2, 2, 1959, 1960, 3, 2, 2, 2, 1960, 1970, 3, 2, 2, 2, 1961, 1959, 3, 2, 2, 2, 1962, 1967, 5, 110, 56, 2, 1963, 1964, 7, 1026, 2, 2, 1964, 1966, 5, 110, 56, 2, 1965, 1963, 3, 2, 2, 2, 1966, 1969, 3, 2, 2, 2, 1967, 1965, 3, 2, 2, 2, 1967, 1968, 3, 2, 2, 2, 1968, 1971, 3, 2, 2, 2, 1969, 1967, 3, 2, 2, 2, 1970, 1962, 3, 2, 2, 2, 1970, 1971, 3, 2, 2, 2, 1971, 1991, 3, 2, 2, 2, 1972, 1973, 7, 117, 2, 2, 1973, 1977, 5, 524, 263, 2, 1974, 1976, 5, 112, 57, 2, 1975, 1974, 3, 2, 2, 2, 1976, 1979, 3, 2, 2, 2, 1977, 1975, 3, 2, 2, 2, 1977, 1978, 3, 2, 2, 2, 1978, 1988, 3, 2, 2, 2, 1979, 1977, 3, 2, 2, 2, 1980, 1985, 5, 110, 56, 2, 1981, 1982, 7, 1026, 2, 2, 1982, 1984, 5, 110, 56, 2, 1983, 1981, 3, 2, 2, 2, 1984, 1987, 3, 2, 2, 2, 1985, 1983, 3, 2, 2, 2, 1985, 1986, 3, 2, 2, 2, 1986, 1989, 3, 2, 2, 2, 1987, 1985, 3, 2, 2, 2, 1988, 1980, 3, 2, 2, 2, 1988, 1989, 3, 2, 2, 2, 1989, 1991, 3, 2, 2, 2, 1990, 1859, 3, 2, 2, 2, 1990, 1890, 3, 2, 2, 2, 1990, 1912, 3, 2, 2, 2, 1990, 1942, 3, 2, 2, 2, 1990, 1972, 3, 2, 2, 2, 1991, 105, 3, 2, 2, 2, 1992, 1996, 5, 542, 272, 2, 1993, 1996, 5, 604, 303, 2, 1994, 1996, 7, 101, 2, 2, 1995, 1992, 3, 2, 2, 2, 1995, 1993, 3, 2, 2, 2, 1995, 1994, 3, 2, 2, 2, 1996, 107, 3, 2, 2, 2, 1997, 1998, 7, 1024, 2, 2, 1998, 2001, 5, 106, 54, 2, 1999, 2000, 7, 1026, 2, 2, 2000, 2002, 5, 106, 54, 2, 2001, 1999, 3, 2, 2, 2, 2002, 2003, 3, 2, 2, 2, 2003, 2001, 3, 2, 2, 2, 2003, 2004, 3, 2, 2, 2, 2004, 2005, 3, 2, 2, 2, 2005, 2006, 7, 1025, 2, 2, 2006, 109, 3, 2, 2, 2, 2007, 2008, 7, 554, 2, 2, 2008, 2012, 5, 524, 263, 2, 2009, 2011, 5, 112, 57, 2, 2010, 2009, 3, 2, 2, 2, 2011, 2014, 3, 2, 2, 2, 2012, 2010, 3, 2, 2, 2, 2012, 2013, 3, 2, 2, 2, 2013, 111, 3, 2, 2, 2, 2014, 2012, 3, 2, 2, 2, 2015, 2017, 7, 549, 2, 2, 2016, 2015, 3, 2, 2, 2, 2016, 2017, 3, 2, 2, 2, 2017, 2018, 3, 2, 2, 2, 2018, 2020, 7, 344, 2, 2, 2019, 2021, 7, 1015, 2, 2, 2020, 2019, 3, 2, 2, 2, 2020, 2021, 3, 2, 2, 2, 2021, 2022, 3, 2, 2, 2, 2022, 2061, 5, 514, 258, 2, 2023, 2025, 7, 307, 2, 2, 2024, 2026, 7, 1015, 2, 2, 2025, 2024, 3, 2, 2, 2, 2025, 2026, 3, 2, 2, 2, 2026, 2027, 3, 2, 2, 2, 2027, 2061, 7, 1039, 2, 2, 2028, 2029, 7, 325, 2, 2, 2029, 2031, 7, 332, 2, 2, 2030, 2032, 7, 1015, 2, 2, 2031, 2030, 3, 2, 2, 2, 2031, 2032, 3, 2, 2, 2, 2032, 2033, 3, 2, 2, 2, 2033, 2061, 7, 1039, 2, 2, 2034, 2035, 7, 74, 2, 2, 2035, 2037, 7, 332, 2, 2, 2036, 2038, 7, 1015, 2, 2, 2037, 2036, 3, 2, 2, 2, 2037, 2038, 3, 2, 2, 2, 2038, 2039, 3, 2, 2, 2, 2039, 2061, 7, 1039, 2, 2, 2040, 2042, 7, 430, 2, 2, 2041, 2043, 7, 1015, 2, 2, 2042, 2041, 3, 2, 2, 2, 2042, 2043, 3, 2, 2, 2, 2043, 2044, 3, 2, 2, 2, 2044, 2061, 5, 530, 266, 2, 2045, 2047, 7, 440, 2, 2, 2046, 2048, 7, 1015, 2, 2, 2047, 2046, 3, 2, 2, 2, 2047, 2048, 3, 2, 2, 2, 2048, 2049, 3, 2, 2, 2, 2049, 2061, 5, 530, 266, 2, 2050, 2052, 7, 560, 2, 2, 2051, 2053, 7, 1015, 2, 2, 2052, 2051, 3, 2, 2, 2, 2052, 2053, 3, 2, 2, 2, 2053, 2054, 3, 2, 2, 2, 2054, 2061, 5, 524, 263, 2, 2055, 2057, 7, 452, 2, 2, 2056, 2058, 7, 1015, 2, 2, 2057, 2056, 3, 2, 2, 2, 2057, 2058, 3, 2, 2, 2, 2058, 2059, 3, 2, 2, 2, 2059, 2061, 5, 524, 263, 2, 2060, 2016, 3, 2, 2, 2, 2060, 2023, 3, 2, 2, 2, 2060, 2028, 3, 2, 2, 2, 2060, 2034, 3, 2, 2, 2, 2060, 2040, 3, 2, 2, 2, 2060, 2045, 3, 2, 2, 2, 2060, 2050, 3, 2, 2, 2, 2060, 2055, 3, 2, 2, 2, 2061, 113, 3, 2, 2, 2, 2062, 2063, 7, 9, 2, 2, 2063, 2065, 9, 2, 2, 2, 2064, 2066, 5, 524, 263, 2, 2065, 2064, 3, 2, 2, 2, 2065, 2066, 3, 2, 2, 2, 2066, 2068, 3, 2, 2, 2, 2067, 2069, 5, 50, 26, 2, 2068, 2067, 3, 2, 2, 2, 2069, 2070, 3, 2, 2, 2, 2070, 2068, 3, 2, 2, 2, 2070, 2071, 3, 2, 2, 2, 2071, 2081, 3, 2, 2, 2, 2072, 2073, 7, 9, 2, 2, 2073, 2074, 9, 2, 2, 2, 2074, 2075, 5, 524, 263, 2, 2075, 2076, 7, 575, 2, 2, 2076, 2077, 7, 325, 2, 2, 2077, 2078, 7, 332, 2, 2, 2078, 2079, 7, 446, 2, 2, 2079, 2081, 3, 2, 2, 2, 2080, 2062, 3, 2, 2, 2, 2080, 2072, 3, 2, 2, 2, 2081, 115, 3, 2, 2, 2, 2082, 2084, 7, 9, 2, 2, 2083, 2085, 5, 52, 27, 2, 2084, 2083, 3, 2, 2, 2, 2084, 2085, 3, 2, 2, 2, 2085, 2086, 3, 2, 2, 2, 2086, 2087, 7, 350, 2, 2, 2087, 2091, 5, 498, 250, 2, 2088, 2089, 7, 108, 2, 2, 2089, 2090, 7, 519, 2, 2, 2090, 2092, 5, 54, 28, 2, 2091, 2088, 3, 2, 2, 2, 2091, 2092, 3, 2, 2, 2, 2092, 2099, 3, 2, 2, 2, 2093, 2094, 7, 108, 2, 2, 2094, 2096, 7, 310, 2, 2, 2095, 2097, 7, 104, 2, 2, 2096, 2095, 3, 2, 2, 2, 2096, 2097, 3, 2, 2, 2, 2097, 2098, 3, 2, 2, 2, 2098, 2100, 7, 480, 2, 2, 2099, 2093, 3, 2, 2, 2, 2099, 2100, 3, 2, 2, 2, 2100, 2104, 3, 2, 2, 2, 2101, 2102, 7, 127, 2, 2, 2102, 2103, 7, 159, 2, 2, 2103, 2105, 5, 498, 250, 2, 2104, 2101, 3, 2, 2, 2, 2104, 2105, 3, 2, 2, 2, 2105, 2107, 3, 2, 2, 2, 2106, 2108, 5, 62, 32, 2, 2107, 2106, 3, 2, 2, 2, 2107, 2108, 3, 2, 2, 2, 2108, 2111, 3, 2, 2, 2, 2109, 2110, 7, 307, 2, 2, 2110, 2112, 7, 1039, 2, 2, 2111, 2109, 3, 2, 2, 2, 2111, 2112, 3, 2, 2, 2, 2112, 2115, 3, 2, 2, 2, 2113, 2114, 7, 336, 2, 2, 2114, 2116, 5, 346, 174, 2, 2115, 2113, 3, 2, 2, 2, 2115, 2116, 3, 2, 2, 2, 2116, 117, 3, 2, 2, 2, 2117, 2118, 7, 9, 2, 2, 2118, 2119, 7, 370, 2, 2, 2119, 2123, 5, 498, 250, 2, 2120, 2122, 5, 72, 37, 2, 2121, 2120, 3, 2, 2, 2, 2122, 2125, 3, 2, 2, 2, 2123, 2121, 3, 2, 2, 2, 2123, 2124, 3, 2, 2, 2, 2124, 119, 3, 2, 2, 2, 2125, 2123, 3, 2, 2, 2, 2126, 2127, 7, 9, 2, 2, 2127, 2128, 7, 388, 2, 2, 2128, 2129, 7, 514, 2, 2, 2129, 2130, 7, 685, 2, 2, 2130, 2131, 7, 407, 2, 2, 2131, 2132, 7, 84, 2, 2, 2132, 121, 3, 2, 2, 2, 2133, 2134, 7, 9, 2, 2, 2134, 2135, 7, 405, 2, 2, 2135, 2136, 7, 68, 2, 2, 2136, 2137, 5, 524, 263, 2, 2137, 2138, 7, 7, 2, 2, 2138, 2139, 7, 570, 2, 2, 2139, 2145, 7, 1039, 2, 2, 2140, 2142, 7, 384, 2, 2, 2141, 2143, 7, 1015, 2, 2, 2142, 2141, 3, 2, 2, 2, 2142, 2143, 3, 2, 2, 2, 2143, 2144, 3, 2, 2, 2, 2144, 2146, 5, 532, 267, 2, 2145, 2140, 3, 2, 2, 2, 2145, 2146, 3, 2, 2, 2, 2146, 2148, 3, 2, 2, 2, 2147, 2149, 7, 585, 2, 2, 2148, 2147, 3, 2, 2, 2, 2148, 2149, 3, 2, 2, 2, 2149, 2150, 3, 2, 2, 2, 2150, 2152, 7, 344, 2, 2, 2151, 2153, 7, 1015, 2, 2, 2152, 2151, 3, 2, 2, 2, 2152, 2153, 3, 2, 2, 2, 2153, 2154, 3, 2, 2, 2, 2154, 2155, 5, 514, 258, 2, 2155, 123, 3, 2, 2, 2, 2156, 2157, 7, 9, 2, 2, 2157, 2158, 7, 119, 2, 2, 2158, 2162, 5, 498, 250, 2, 2159, 2161, 5, 72, 37, 2, 2160, 2159, 3, 2, 2, 2, 2161, 2164, 3, 2, 2, 2, 2162, 2160, 3, 2, 2, 2, 2162, 2163, 3, 2, 2, 2, 2163, 125, 3, 2, 2, 2, 2164, 2162, 3, 2, 2, 2, 2165, 2166, 7, 9, 2, 2, 2166, 2167, 7, 521, 2, 2, 2167, 2168, 5, 524, 263, 2, 2168, 2169, 7, 464, 2, 2, 2169, 2170, 7, 1024, 2, 2, 2170, 2175, 5, 74, 38, 2, 2171, 2172, 7, 1026, 2, 2, 2172, 2174, 5, 74, 38, 2, 2173, 2171, 3, 2, 2, 2, 2174, 2177, 3, 2, 2, 2, 2175, 2173, 3, 2, 2, 2, 2175, 2176, 3, 2, 2, 2, 2176, 2178, 3, 2, 2, 2, 2177, 2175, 3, 2, 2, 2, 2178, 2179, 7, 1025, 2, 2, 2179, 127, 3, 2, 2, 2, 2180, 2182, 7, 9, 2, 2, 2181, 2183, 9, 3, 2, 2, 2182, 2181, 3, 2, 2, 2, 2182, 2183, 3, 2, 2, 2, 2183, 2185, 3, 2, 2, 2, 2184, 2186, 7, 72, 2, 2, 2185, 2184, 3, 2, 2, 2, 2185, 2186, 3, 2, 2, 2, 2186, 2187, 3, 2, 2, 2, 2187, 2188, 7, 156, 2, 2, 2188, 2197, 5, 500, 251, 2, 2189, 2194, 5, 134, 68, 2, 2190, 2191, 7, 1026, 2, 2, 2191, 2193, 5, 134, 68, 2, 2192, 2190, 3, 2, 2, 2, 2193, 2196, 3, 2, 2, 2, 2194, 2192, 3, 2, 2, 2, 2194, 2195, 3, 2, 2, 2, 2195, 2198, 3, 2, 2, 2, 2196, 2194, 3, 2, 2, 2, 2197, 2189, 3, 2, 2, 2, 2197, 2198, 3, 2, 2, 2, 2198, 2200, 3, 2, 2, 2, 2199, 2201, 5, 98, 50, 2, 2200, 2199, 3, 2, 2, 2, 2200, 2201, 3, 2, 2, 2, 2201, 129, 3, 2, 2, 2, 2202, 2203, 7, 9, 2, 2, 2203, 2204, 7, 560, 2, 2, 2204, 2205, 5, 524, 263, 2, 2205, 2206, 9, 30, 2, 2, 2206, 2207, 7, 326, 2, 2, 2207, 2211, 7, 1039, 2, 2, 2208, 2209, 7, 384, 2, 2, 2209, 2210, 7, 1015, 2, 2, 2210, 2212, 5, 532, 267, 2, 2211, 2208, 3, 2, 2, 2, 2211, 2212, 3, 2, 2, 2, 2212, 2214, 3, 2, 2, 2, 2213, 2215, 7, 585, 2, 2, 2214, 2213, 3, 2, 2, 2, 2214, 2215, 3, 2, 2, 2, 2215, 2216, 3, 2, 2, 2, 2216, 2218, 7, 344, 2, 2, 2217, 2219, 7, 1015, 2, 2, 2218, 2217, 3, 2, 2, 2, 2218, 2219, 3, 2, 2, 2, 2219, 2220, 3, 2, 2, 2, 2220, 2221, 5, 514, 258, 2, 2221, 131, 3, 2, 2, 2, 2222, 2226, 7, 9, 2, 2, 2223, 2224, 7, 276, 2, 2, 2224, 2225, 7, 1015, 2, 2, 2225, 2227, 9, 12, 2, 2, 2226, 2223, 3, 2, 2, 2, 2226, 2227, 3, 2, 2, 2, 2227, 2229, 3, 2, 2, 2, 2228, 2230, 5, 52, 27, 2, 2229, 2228, 3, 2, 2, 2, 2229, 2230, 3, 2, 2, 2, 2230, 2234, 3, 2, 2, 2, 2231, 2232, 7, 145, 2, 2, 2232, 2233, 7, 520, 2, 2, 2233, 2235, 9, 13, 2, 2, 2234, 2231, 3, 2, 2, 2, 2234, 2235, 3, 2, 2, 2, 2235, 2236, 3, 2, 2, 2, 2236, 2237, 7, 582, 2, 2, 2237, 2242, 5, 498, 250, 2, 2238, 2239, 7, 1024, 2, 2, 2239, 2240, 5, 556, 279, 2, 2240, 2241, 7, 1025, 2, 2, 2241, 2243, 3, 2, 2, 2, 2242, 2238, 3, 2, 2, 2, 2242, 2243, 3, 2, 2, 2, 2243, 2244, 3, 2, 2, 2, 2244, 2245, 7, 13, 2, 2, 2245, 2252, 5, 180, 91, 2, 2246, 2248, 7, 176, 2, 2, 2247, 2249, 9, 14, 2, 2, 2248, 2247, 3, 2, 2, 2, 2248, 2249, 3, 2, 2, 2, 2249, 2250, 3, 2, 2, 2, 2250, 2251, 7, 25, 2, 2, 2251, 2253, 7, 110, 2, 2, 2252, 2246, 3, 2, 2, 2, 2252, 2253, 3, 2, 2, 2, 2253, 133, 3, 2, 2, 2, 2254, 2261, 5, 94, 48, 2, 2255, 2257, 7, 1026, 2, 2, 2256, 2255, 3, 2, 2, 2, 2256, 2257, 3, 2, 2, 2, 2257, 2258, 3, 2, 2, 2, 2258, 2260, 5, 94, 48, 2, 2259, 2256, 3, 2, 2, 2, 2260, 2263, 3, 2, 2, 2, 2261, 2259, 3, 2, 2, 2, 2261, 2262, 3, 2, 2, 2, 2262, 2613, 3, 2, 2, 2, 2263, 2261, 3, 2, 2, 2, 2264, 2266, 7, 7, 2, 2, 2265, 2267, 7, 27, 2, 2, 2266, 2265, 3, 2, 2, 2, 2266, 2267, 3, 2, 2, 2, 2267, 2268, 3, 2, 2, 2, 2268, 2269, 5, 524, 263, 2, 2269, 2273, 5, 80, 41, 2, 2270, 2274, 7, 364, 2, 2, 2271, 2272, 7, 274, 2, 2, 2272, 2274, 5, 524, 263, 2, 2273, 2270, 3, 2, 2, 2, 2273, 2271, 3, 2, 2, 2, 2273, 2274, 3, 2, 2, 2, 2274, 2613, 3, 2, 2, 2, 2275, 2277, 7, 7, 2, 2, 2276, 2278, 7, 27, 2, 2, 2277, 2276, 3, 2, 2, 2, 2277, 2278, 3, 2, 2, 2, 2278, 2279, 3, 2, 2, 2, 2279, 2280, 7, 1024, 2, 2, 2280, 2281, 5, 524, 263, 2, 2281, 2288, 5, 80, 41, 2, 2282, 2283, 7, 1026, 2, 2, 2283, 2284, 5, 524, 263, 2, 2284, 2285, 5, 80, 41, 2, 2285, 2287, 3, 2, 2, 2, 2286, 2282, 3, 2, 2, 2, 2287, 2290, 3, 2, 2, 2, 2288, 2286, 3, 2, 2, 2, 2288, 2289, 3, 2, 2, 2, 2289, 2291, 3, 2, 2, 2, 2290, 2288, 3, 2, 2, 2, 2291, 2292, 7, 1025, 2, 2, 2292, 2613, 3, 2, 2, 2, 2293, 2294, 7, 7, 2, 2, 2294, 2296, 9, 20, 2, 2, 2295, 2297, 5, 524, 263, 2, 2296, 2295, 3, 2, 2, 2, 2296, 2297, 3, 2, 2, 2, 2297, 2299, 3, 2, 2, 2, 2298, 2300, 5, 64, 33, 2, 2299, 2298, 3, 2, 2, 2, 2299, 2300, 3, 2, 2, 2, 2300, 2301, 3, 2, 2, 2, 2301, 2305, 5, 560, 281, 2, 2302, 2304, 5, 66, 34, 2, 2303, 2302, 3, 2, 2, 2, 2304, 2307, 3, 2, 2, 2, 2305, 2303, 3, 2, 2, 2, 2305, 2306, 3, 2, 2, 2, 2306, 2613, 3, 2, 2, 2, 2307, 2305, 3, 2, 2, 2, 2308, 2313, 7, 7, 2, 2, 2309, 2311, 7, 29, 2, 2, 2310, 2312, 5, 524, 263, 2, 2311, 2310, 3, 2, 2, 2, 2311, 2312, 3, 2, 2, 2, 2312, 2314, 3, 2, 2, 2, 2313, 2309, 3, 2, 2, 2, 2313, 2314, 3, 2, 2, 2, 2314, 2315, 3, 2, 2, 2, 2315, 2316, 7, 118, 2, 2, 2316, 2318, 7, 84, 2, 2, 2317, 2319, 5, 524, 263, 2, 2318, 2317, 3, 2, 2, 2, 2318, 2319, 3, 2, 2, 2, 2319, 2321, 3, 2, 2, 2, 2320, 2322, 5, 64, 33, 2, 2321, 2320, 3, 2, 2, 2, 2321, 2322, 3, 2, 2, 2, 2322, 2323, 3, 2, 2, 2, 2323, 2327, 5, 560, 281, 2, 2324, 2326, 5, 66, 34, 2, 2325, 2324, 3, 2, 2, 2, 2326, 2329, 3, 2, 2, 2, 2327, 2325, 3, 2, 2, 2, 2327, 2328, 3, 2, 2, 2, 2328, 2613, 3, 2, 2, 2, 2329, 2327, 3, 2, 2, 2, 2330, 2335, 7, 7, 2, 2, 2331, 2333, 7, 29, 2, 2, 2332, 2334, 5, 524, 263, 2, 2333, 2332, 3, 2, 2, 2, 2333, 2334, 3, 2, 2, 2, 2334, 2336, 3, 2, 2, 2, 2335, 2331, 3, 2, 2, 2, 2335, 2336, 3, 2, 2, 2, 2336, 2337, 3, 2, 2, 2, 2337, 2339, 7, 165, 2, 2, 2338, 2340, 9, 20, 2, 2, 2339, 2338, 3, 2, 2, 2, 2339, 2340, 3, 2, 2, 2, 2340, 2342, 3, 2, 2, 2, 2341, 2343, 5, 524, 263, 2, 2342, 2341, 3, 2, 2, 2, 2342, 2343, 3, 2, 2, 2, 2343, 2345, 3, 2, 2, 2, 2344, 2346, 5, 64, 33, 2, 2345, 2344, 3, 2, 2, 2, 2345, 2346, 3, 2, 2, 2, 2346, 2347, 3, 2, 2, 2, 2347, 2351, 5, 560, 281, 2, 2348, 2350, 5, 66, 34, 2, 2349, 2348, 3, 2, 2, 2, 2350, 2353, 3, 2, 2, 2, 2351, 2349, 3, 2, 2, 2, 2351, 2352, 3, 2, 2, 2, 2352, 2613, 3, 2, 2, 2, 2353, 2351, 3, 2, 2, 2, 2354, 2355, 7, 7, 2, 2, 2355, 2357, 9, 22, 2, 2, 2356, 2358, 9, 20, 2, 2, 2357, 2356, 3, 2, 2, 2, 2357, 2358, 3, 2, 2, 2, 2358, 2360, 3, 2, 2, 2, 2359, 2361, 5, 524, 263, 2, 2360, 2359, 3, 2, 2, 2, 2360, 2361, 3, 2, 2, 2, 2361, 2362, 3, 2, 2, 2, 2362, 2366, 5, 560, 281, 2, 2363, 2365, 5, 66, 34, 2, 2364, 2363, 3, 2, 2, 2, 2365, 2368, 3, 2, 2, 2, 2366, 2364, 3, 2, 2, 2, 2366, 2367, 3, 2, 2, 2, 2367, 2613, 3, 2, 2, 2, 2368, 2366, 3, 2, 2, 2, 2369, 2374, 7, 7, 2, 2, 2370, 2372, 7, 29, 2, 2, 2371, 2373, 5, 524, 263, 2, 2372, 2371, 3, 2, 2, 2, 2372, 2373, 3, 2, 2, 2, 2373, 2375, 3, 2, 2, 2, 2374, 2370, 3, 2, 2, 2, 2374, 2375, 3, 2, 2, 2, 2375, 2376, 3, 2, 2, 2, 2376, 2377, 7, 62, 2, 2, 2377, 2379, 7, 84, 2, 2, 2378, 2380, 5, 524, 263, 2, 2379, 2378, 3, 2, 2, 2, 2379, 2380, 3, 2, 2, 2, 2380, 2381, 3, 2, 2, 2, 2381, 2382, 5, 560, 281, 2, 2382, 2383, 5, 86, 44, 2, 2383, 2613, 3, 2, 2, 2, 2384, 2389, 7, 7, 2, 2, 2385, 2387, 7, 29, 2, 2, 2386, 2388, 5, 524, 263, 2, 2387, 2386, 3, 2, 2, 2, 2387, 2388, 3, 2, 2, 2, 2388, 2390, 3, 2, 2, 2, 2389, 2385, 3, 2, 2, 2, 2389, 2390, 3, 2, 2, 2, 2390, 2391, 3, 2, 2, 2, 2391, 2392, 7, 25, 2, 2, 2392, 2393, 7, 1024, 2, 2, 2393, 2394, 5, 604, 303, 2, 2394, 2395, 7, 1025, 2, 2, 2395, 2613, 3, 2, 2, 2, 2396, 2398, 7, 276, 2, 2, 2397, 2399, 7, 1015, 2, 2, 2398, 2397, 3, 2, 2, 2, 2398, 2399, 3, 2, 2, 2, 2399, 2400, 3, 2, 2, 2, 2400, 2613, 9, 5, 2, 2, 2401, 2403, 7, 9, 2, 2, 2402, 2404, 7, 27, 2, 2, 2403, 2402, 3, 2, 2, 2, 2403, 2404, 3, 2, 2, 2, 2404, 2405, 3, 2, 2, 2, 2405, 2411, 5, 524, 263, 2, 2406, 2407, 7, 140, 2, 2, 2407, 2408, 7, 40, 2, 2, 2408, 2412, 5, 574, 288, 2, 2409, 2410, 7, 49, 2, 2, 2410, 2412, 7, 40, 2, 2, 2411, 2406, 3, 2, 2, 2, 2411, 2409, 3, 2, 2, 2, 2412, 2613, 3, 2, 2, 2, 2413, 2415, 7, 23, 2, 2, 2414, 2416, 7, 27, 2, 2, 2415, 2414, 3, 2, 2, 2, 2415, 2416, 3, 2, 2, 2, 2416, 2417, 3, 2, 2, 2, 2417, 2418, 5, 524, 263, 2, 2418, 2419, 5, 524, 263, 2, 2419, 2423, 5, 80, 41, 2, 2420, 2424, 7, 364, 2, 2, 2421, 2422, 7, 274, 2, 2, 2422, 2424, 5, 524, 263, 2, 2423, 2420, 3, 2, 2, 2, 2423, 2421, 3, 2, 2, 2, 2423, 2424, 3, 2, 2, 2, 2424, 2613, 3, 2, 2, 2, 2425, 2426, 7, 127, 2, 2, 2426, 2427, 7, 27, 2, 2, 2427, 2428, 5, 524, 263, 2, 2428, 2429, 7, 159, 2, 2, 2429, 2430, 5, 524, 263, 2, 2430, 2613, 3, 2, 2, 2, 2431, 2433, 7, 95, 2, 2, 2432, 2434, 7, 1015, 2, 2, 2433, 2432, 3, 2, 2, 2, 2433, 2434, 3, 2, 2, 2, 2434, 2435, 3, 2, 2, 2, 2435, 2613, 9, 6, 2, 2, 2436, 2438, 7, 442, 2, 2, 2437, 2439, 7, 27, 2, 2, 2438, 2437, 3, 2, 2, 2, 2438, 2439, 3, 2, 2, 2, 2439, 2440, 3, 2, 2, 2, 2440, 2441, 5, 524, 263, 2, 2441, 2445, 5, 80, 41, 2, 2442, 2446, 7, 364, 2, 2, 2443, 2444, 7, 274, 2, 2, 2444, 2446, 5, 524, 263, 2, 2445, 2442, 3, 2, 2, 2, 2445, 2443, 3, 2, 2, 2, 2445, 2446, 3, 2, 2, 2, 2446, 2613, 3, 2, 2, 2, 2447, 2449, 7, 49, 2, 2, 2448, 2450, 7, 27, 2, 2, 2449, 2448, 3, 2, 2, 2, 2449, 2450, 3, 2, 2, 2, 2450, 2451, 3, 2, 2, 2, 2451, 2453, 5, 524, 263, 2, 2452, 2454, 7, 132, 2, 2, 2453, 2452, 3, 2, 2, 2, 2453, 2454, 3, 2, 2, 2, 2454, 2613, 3, 2, 2, 2, 2455, 2456, 7, 49, 2, 2, 2456, 2457, 7, 118, 2, 2, 2457, 2613, 7, 84, 2, 2, 2458, 2459, 7, 127, 2, 2, 2459, 2460, 9, 20, 2, 2, 2460, 2461, 5, 524, 263, 2, 2461, 2462, 7, 159, 2, 2, 2462, 2463, 5, 524, 263, 2, 2463, 2613, 3, 2, 2, 2, 2464, 2465, 7, 49, 2, 2, 2465, 2466, 9, 20, 2, 2, 2466, 2613, 5, 524, 263, 2, 2467, 2468, 7, 49, 2, 2, 2468, 2469, 7, 62, 2, 2, 2469, 2470, 7, 84, 2, 2, 2470, 2613, 5, 524, 263, 2, 2471, 2472, 7, 333, 2, 2, 2472, 2613, 7, 85, 2, 2, 2473, 2474, 7, 340, 2, 2, 2474, 2613, 7, 85, 2, 2, 2475, 2477, 7, 127, 2, 2, 2476, 2478, 9, 31, 2, 2, 2477, 2476, 3, 2, 2, 2, 2477, 2478, 3, 2, 2, 2, 2478, 2481, 3, 2, 2, 2, 2479, 2482, 5, 524, 263, 2, 2480, 2482, 5, 498, 250, 2, 2481, 2479, 3, 2, 2, 2, 2481, 2480, 3, 2, 2, 2, 2482, 2613, 3, 2, 2, 2, 2483, 2484, 7, 113, 2, 2, 2484, 2485, 7, 18, 2, 2, 2485, 2613, 5, 556, 279, 2, 2486, 2487, 7, 31, 2, 2, 2487, 2488, 7, 159, 2, 2, 2488, 2489, 7, 24, 2, 2, 2489, 2490, 7, 140, 2, 2, 2490, 2493, 5, 510, 256, 2, 2491, 2492, 7, 26, 2, 2, 2492, 2494, 5, 512, 257, 2, 2493, 2491, 3, 2, 2, 2, 2493, 2494, 3, 2, 2, 2, 2494, 2613, 3, 2, 2, 2, 2495, 2497, 7, 40, 2, 2, 2496, 2495, 3, 2, 2, 2, 2496, 2497, 3, 2, 2, 2, 2497, 2498, 3, 2, 2, 2, 2498, 2499, 7, 24, 2, 2, 2499, 2500, 7, 140, 2, 2, 2500, 2501, 7, 1015, 2, 2, 2501, 2505, 5, 510, 256, 2, 2502, 2503, 7, 26, 2, 2, 2503, 2504, 7, 1015, 2, 2, 2504, 2506, 5, 512, 257, 2, 2505, 2502, 3, 2, 2, 2, 2505, 2506, 3, 2, 2, 2, 2506, 2613, 3, 2, 2, 2, 2507, 2508, 7, 334, 2, 2, 2508, 2613, 7, 560, 2, 2, 2509, 2510, 7, 382, 2, 2, 2510, 2613, 7, 560, 2, 2, 2511, 2613, 7, 61, 2, 2, 2512, 2513, 9, 32, 2, 2, 2513, 2613, 7, 579, 2, 2, 2514, 2515, 7, 7, 2, 2, 2515, 2516, 7, 117, 2, 2, 2516, 2517, 7, 1024, 2, 2, 2517, 2522, 5, 104, 53, 2, 2518, 2519, 7, 1026, 2, 2, 2519, 2521, 5, 104, 53, 2, 2520, 2518, 3, 2, 2, 2, 2521, 2524, 3, 2, 2, 2, 2522, 2520, 3, 2, 2, 2, 2522, 2523, 3, 2, 2, 2, 2523, 2525, 3, 2, 2, 2, 2524, 2522, 3, 2, 2, 2, 2525, 2526, 7, 1025, 2, 2, 2526, 2613, 3, 2, 2, 2, 2527, 2528, 7, 49, 2, 2, 2528, 2529, 7, 117, 2, 2, 2529, 2613, 5, 556, 279, 2, 2530, 2531, 7, 334, 2, 2, 2531, 2534, 7, 117, 2, 2, 2532, 2535, 5, 556, 279, 2, 2533, 2535, 7, 8, 2, 2, 2534, 2532, 3, 2, 2, 2, 2534, 2533, 3, 2, 2, 2, 2535, 2536, 3, 2, 2, 2, 2536, 2613, 7, 560, 2, 2, 2537, 2538, 7, 382, 2, 2, 2538, 2541, 7, 117, 2, 2, 2539, 2542, 5, 556, 279, 2, 2540, 2542, 7, 8, 2, 2, 2541, 2539, 3, 2, 2, 2, 2541, 2540, 3, 2, 2, 2, 2542, 2543, 3, 2, 2, 2, 2543, 2613, 7, 560, 2, 2, 2544, 2545, 7, 568, 2, 2, 2545, 2548, 7, 117, 2, 2, 2546, 2549, 5, 556, 279, 2, 2547, 2549, 7, 8, 2, 2, 2548, 2546, 3, 2, 2, 2, 2548, 2547, 3, 2, 2, 2, 2549, 2613, 3, 2, 2, 2, 2550, 2551, 7, 302, 2, 2, 2551, 2552, 7, 117, 2, 2, 2552, 2613, 5, 530, 266, 2, 2553, 2554, 7, 497, 2, 2, 2554, 2555, 7, 117, 2, 2, 2555, 2556, 5, 556, 279, 2, 2556, 2557, 7, 80, 2, 2, 2557, 2558, 7, 1024, 2, 2, 2558, 2563, 5, 104, 53, 2, 2559, 2560, 7, 1026, 2, 2, 2560, 2562, 5, 104, 53, 2, 2561, 2559, 3, 2, 2, 2, 2562, 2565, 3, 2, 2, 2, 2563, 2561, 3, 2, 2, 2, 2563, 2564, 3, 2, 2, 2, 2564, 2566, 3, 2, 2, 2, 2565, 2563, 3, 2, 2, 2, 2566, 2567, 7, 1025, 2, 2, 2567, 2613, 3, 2, 2, 2, 2568, 2569, 7, 353, 2, 2, 2569, 2570, 7, 117, 2, 2, 2570, 2571, 5, 524, 263, 2, 2571, 2572, 7, 176, 2, 2, 2572, 2573, 7, 156, 2, 2, 2573, 2576, 5, 500, 251, 2, 2574, 2575, 9, 32, 2, 2, 2575, 2577, 7, 579, 2, 2, 2576, 2574, 3, 2, 2, 2, 2576, 2577, 3, 2, 2, 2, 2577, 2613, 3, 2, 2, 2, 2578, 2579, 7, 11, 2, 2, 2579, 2582, 7, 117, 2, 2, 2580, 2583, 5, 556, 279, 2, 2581, 2583, 7, 8, 2, 2, 2582, 2580, 3, 2, 2, 2, 2582, 2581, 3, 2, 2, 2, 2583, 2613, 3, 2, 2, 2, 2584, 2585, 7, 25, 2, 2, 2585, 2588, 7, 117, 2, 2, 2586, 2589, 5, 556, 279, 2, 2587, 2589, 7, 8, 2, 2, 2588, 2586, 3, 2, 2, 2, 2588, 2587, 3, 2, 2, 2, 2589, 2613, 3, 2, 2, 2, 2590, 2591, 7, 109, 2, 2, 2591, 2594, 7, 117, 2, 2, 2592, 2595, 5, 556, 279, 2, 2593, 2595, 7, 8, 2, 2, 2594, 2592, 3, 2, 2, 2, 2594, 2593, 3, 2, 2, 2, 2595, 2613, 3, 2, 2, 2, 2596, 2597, 7, 488, 2, 2, 2597, 2600, 7, 117, 2, 2, 2598, 2601, 5, 556, 279, 2, 2599, 2601, 7, 8, 2, 2, 2600, 2598, 3, 2, 2, 2, 2600, 2599, 3, 2, 2, 2, 2601, 2613, 3, 2, 2, 2, 2602, 2603, 7, 498, 2, 2, 2603, 2606, 7, 117, 2, 2, 2604, 2607, 5, 556, 279, 2, 2605, 2607, 7, 8, 2, 2, 2606, 2604, 3, 2, 2, 2, 2606, 2605, 3, 2, 2, 2, 2607, 2613, 3, 2, 2, 2, 2608, 2609, 7, 496, 2, 2, 2609, 2613, 7, 470, 2, 2, 2610, 2611, 7, 575, 2, 2, 2611, 2613, 7, 470, 2, 2, 2612, 2254, 3, 2, 2, 2, 2612, 2264, 3, 2, 2, 2, 2612, 2275, 3, 2, 2, 2, 2612, 2293, 3, 2, 2, 2, 2612, 2308, 3, 2, 2, 2, 2612, 2330, 3, 2, 2, 2, 2612, 2354, 3, 2, 2, 2, 2612, 2369, 3, 2, 2, 2, 2612, 2384, 3, 2, 2, 2, 2612, 2396, 3, 2, 2, 2, 2612, 2401, 3, 2, 2, 2, 2612, 2413, 3, 2, 2, 2, 2612, 2425, 3, 2, 2, 2, 2612, 2431, 3, 2, 2, 2, 2612, 2436, 3, 2, 2, 2, 2612, 2447, 3, 2, 2, 2, 2612, 2455, 3, 2, 2, 2, 2612, 2458, 3, 2, 2, 2, 2612, 2464, 3, 2, 2, 2, 2612, 2467, 3, 2, 2, 2, 2612, 2471, 3, 2, 2, 2, 2612, 2473, 3, 2, 2, 2, 2612, 2475, 3, 2, 2, 2, 2612, 2483, 3, 2, 2, 2, 2612, 2486, 3, 2, 2, 2, 2612, 2496, 3, 2, 2, 2, 2612, 2507, 3, 2, 2, 2, 2612, 2509, 3, 2, 2, 2, 2612, 2511, 3, 2, 2, 2, 2612, 2512, 3, 2, 2, 2, 2612, 2514, 3, 2, 2, 2, 2612, 2527, 3, 2, 2, 2, 2612, 2530, 3, 2, 2, 2, 2612, 2537, 3, 2, 2, 2, 2612, 2544, 3, 2, 2, 2, 2612, 2550, 3, 2, 2, 2, 2612, 2553, 3, 2, 2, 2, 2612, 2568, 3, 2, 2, 2, 2612, 2578, 3, 2, 2, 2, 2612, 2584, 3, 2, 2, 2, 2612, 2590, 3, 2, 2, 2, 2612, 2596, 3, 2, 2, 2, 2612, 2602, 3, 2, 2, 2, 2612, 2608, 3, 2, 2, 2, 2612, 2610, 3, 2, 2, 2, 2613, 135, 3, 2, 2, 2, 2614, 2615, 7, 49, 2, 2, 2615, 2617, 9, 2, 2, 2, 2616, 2618, 5, 580, 291, 2, 2617, 2616, 3, 2, 2, 2, 2617, 2618, 3, 2, 2, 2, 2618, 2619, 3, 2, 2, 2, 2619, 2620, 5, 524, 263, 2, 2620, 137, 3, 2, 2, 2, 2621, 2622, 7, 49, 2, 2, 2622, 2624, 7, 350, 2, 2, 2623, 2625, 5, 580, 291, 2, 2624, 2623, 3, 2, 2, 2, 2624, 2625, 3, 2, 2, 2, 2625, 2626, 3, 2, 2, 2, 2626, 2627, 5, 498, 250, 2, 2627, 139, 3, 2, 2, 2, 2628, 2629, 7, 49, 2, 2, 2629, 2631, 7, 74, 2, 2, 2630, 2632, 9, 3, 2, 2, 2631, 2630, 3, 2, 2, 2, 2631, 2632, 3, 2, 2, 2, 2632, 2633, 3, 2, 2, 2, 2633, 2634, 5, 524, 263, 2, 2634, 2635, 7, 108, 2, 2, 2635, 2648, 5, 500, 251, 2, 2636, 2638, 7, 276, 2, 2, 2637, 2639, 7, 1015, 2, 2, 2638, 2637, 3, 2, 2, 2, 2638, 2639, 3, 2, 2, 2, 2639, 2640, 3, 2, 2, 2, 2640, 2647, 9, 5, 2, 2, 2641, 2643, 7, 95, 2, 2, 2642, 2644, 7, 1015, 2, 2, 2643, 2642, 3, 2, 2, 2, 2643, 2644, 3, 2, 2, 2, 2644, 2645, 3, 2, 2, 2, 2645, 2647, 9, 6, 2, 2, 2646, 2636, 3, 2, 2, 2, 2646, 2641, 3, 2, 2, 2, 2647, 2650, 3, 2, 2, 2, 2648, 2646, 3, 2, 2, 2, 2648, 2649, 3, 2, 2, 2, 2649, 141, 3, 2, 2, 2, 2650, 2648, 3, 2, 2, 2, 2651, 2652, 7, 49, 2, 2, 2652, 2653, 7, 405, 2, 2, 2653, 2654, 7, 68, 2, 2, 2654, 2655, 5, 524, 263, 2, 2655, 2656, 7, 344, 2, 2, 2656, 2657, 7, 1015, 2, 2, 2657, 2658, 5, 514, 258, 2, 2658, 143, 3, 2, 2, 2, 2659, 2660, 7, 49, 2, 2, 2660, 2662, 7, 119, 2, 2, 2661, 2663, 5, 580, 291, 2, 2662, 2661, 3, 2, 2, 2, 2662, 2663, 3, 2, 2, 2, 2663, 2664, 3, 2, 2, 2, 2664, 2665, 5, 498, 250, 2, 2665, 145, 3, 2, 2, 2, 2666, 2667, 7, 49, 2, 2, 2667, 2669, 7, 370, 2, 2, 2668, 2670, 5, 580, 291, 2, 2669, 2668, 3, 2, 2, 2, 2669, 2670, 3, 2, 2, 2, 2670, 2671, 3, 2, 2, 2, 2671, 2672, 5, 498, 250, 2, 2672, 147, 3, 2, 2, 2, 2673, 2674, 7, 49, 2, 2, 2674, 2676, 7, 521, 2, 2, 2675, 2677, 5, 580, 291, 2, 2676, 2675, 3, 2, 2, 2, 2676, 2677, 3, 2, 2, 2, 2677, 2678, 3, 2, 2, 2, 2678, 2679, 5, 524, 263, 2, 2679, 149, 3, 2, 2, 2, 2680, 2682, 7, 49, 2, 2, 2681, 2683, 7, 561, 2, 2, 2682, 2681, 3, 2, 2, 2, 2682, 2683, 3, 2, 2, 2, 2683, 2684, 3, 2, 2, 2, 2684, 2686, 7, 156, 2, 2, 2685, 2687, 5, 580, 291, 2, 2686, 2685, 3, 2, 2, 2, 2686, 2687, 3, 2, 2, 2, 2687, 2688, 3, 2, 2, 2, 2688, 2690, 5, 558, 280, 2, 2689, 2691, 9, 33, 2, 2, 2690, 2689, 3, 2, 2, 2, 2690, 2691, 3, 2, 2, 2, 2691, 151, 3, 2, 2, 2, 2692, 2693, 7, 49, 2, 2, 2693, 2694, 7, 560, 2, 2, 2694, 2700, 5, 524, 263, 2, 2695, 2697, 7, 344, 2, 2, 2696, 2698, 7, 1015, 2, 2, 2697, 2696, 3, 2, 2, 2, 2697, 2698, 3, 2, 2, 2, 2698, 2699, 3, 2, 2, 2, 2699, 2701, 5, 514, 258, 2, 2700, 2695, 3, 2, 2, 2, 2700, 2701, 3, 2, 2, 2, 2701, 153, 3, 2, 2, 2, 2702, 2703, 7, 49, 2, 2, 2703, 2705, 7, 161, 2, 2, 2704, 2706, 5, 580, 291, 2, 2705, 2704, 3, 2, 2, 2, 2705, 2706, 3, 2, 2, 2, 2706, 2707, 3, 2, 2, 2, 2707, 2708, 5, 498, 250, 2, 2708, 155, 3, 2, 2, 2, 2709, 2710, 7, 49, 2, 2, 2710, 2712, 7, 582, 2, 2, 2711, 2713, 5, 580, 291, 2, 2712, 2711, 3, 2, 2, 2, 2712, 2713, 3, 2, 2, 2, 2713, 2714, 3, 2, 2, 2, 2714, 2719, 5, 498, 250, 2, 2715, 2716, 7, 1026, 2, 2, 2716, 2718, 5, 498, 250, 2, 2717, 2715, 3, 2, 2, 2, 2718, 2721, 3, 2, 2, 2, 2719, 2717, 3, 2, 2, 2, 2719, 2720, 3, 2, 2, 2, 2720, 2723, 3, 2, 2, 2, 2721, 2719, 3, 2, 2, 2, 2722, 2724, 9, 33, 2, 2, 2723, 2722, 3, 2, 2, 2, 2723, 2724, 3, 2, 2, 2, 2724, 157, 3, 2, 2, 2, 2725, 2726, 7, 127, 2, 2, 2726, 2727, 7, 156, 2, 2, 2727, 2732, 5, 160, 81, 2, 2728, 2729, 7, 1026, 2, 2, 2729, 2731, 5, 160, 81, 2, 2730, 2728, 3, 2, 2, 2, 2731, 2734, 3, 2, 2, 2, 2732, 2730, 3, 2, 2, 2, 2732, 2733, 3, 2, 2, 2, 2733, 159, 3, 2, 2, 2, 2734, 2732, 3, 2, 2, 2, 2735, 2736, 5, 500, 251, 2, 2736, 2737, 7, 159, 2, 2, 2737, 2738, 5, 500, 251, 2, 2738, 161, 3, 2, 2, 2, 2739, 2741, 7, 568, 2, 2, 2740, 2742, 7, 156, 2, 2, 2741, 2740, 3, 2, 2, 2, 2741, 2742, 3, 2, 2, 2, 2742, 2743, 3, 2, 2, 2, 2743, 2744, 5, 500, 251, 2, 2744, 163, 3, 2, 2, 2, 2745, 2746, 7, 19, 2, 2, 2746, 2753, 5, 498, 250, 2, 2747, 2750, 7, 1024, 2, 2, 2748, 2751, 5, 568, 285, 2, 2749, 2751, 5, 562, 282, 2, 2750, 2748, 3, 2, 2, 2, 2750, 2749, 3, 2, 2, 2, 2750, 2751, 3, 2, 2, 2, 2751, 2752, 3, 2, 2, 2, 2752, 2754, 7, 1025, 2, 2, 2753, 2747, 3, 2, 2, 2, 2753, 2754, 3, 2, 2, 2, 2754, 165, 3, 2, 2, 2, 2755, 2758, 5, 192, 97, 2, 2756, 2758, 5, 194, 98, 2, 2757, 2755, 3, 2, 2, 2, 2757, 2756, 3, 2, 2, 2, 2758, 167, 3, 2, 2, 2, 2759, 2760, 7, 336, 2, 2, 2760, 2761, 5, 562, 282, 2, 2761, 169, 3, 2, 2, 2, 2762, 2767, 5, 196, 99, 2, 2763, 2767, 5, 198, 100, 2, 2764, 2767, 5, 200, 101, 2, 2765, 2767, 5, 202, 102, 2, 2766, 2762, 3, 2, 2, 2, 2766, 2763, 3, 2, 2, 2, 2766, 2764, 3, 2, 2, 2, 2766, 2765, 3, 2, 2, 2, 2767, 171, 3, 2, 2, 2, 2768, 2770, 7, 78, 2, 2, 2769, 2771, 9, 34, 2, 2, 2770, 2769, 3, 2, 2, 2, 2770, 2771, 3, 2, 2, 2, 2771, 2773, 3, 2, 2, 2, 2772, 2774, 7, 72, 2, 2, 2773, 2772, 3, 2, 2, 2, 2773, 2774, 3, 2, 2, 2, 2774, 2776, 3, 2, 2, 2, 2775, 2777, 7, 80, 2, 2, 2776, 2775, 3, 2, 2, 2, 2776, 2777, 3, 2, 2, 2, 2777, 2778, 3, 2, 2, 2, 2778, 2785, 5, 500, 251, 2, 2779, 2780, 7, 117, 2, 2, 2780, 2782, 7, 1024, 2, 2, 2781, 2783, 5, 556, 279, 2, 2782, 2781, 3, 2, 2, 2, 2782, 2783, 3, 2, 2, 2, 2783, 2784, 3, 2, 2, 2, 2784, 2786, 7, 1025, 2, 2, 2785, 2779, 3, 2, 2, 2, 2785, 2786, 3, 2, 2, 2, 2786, 2803, 3, 2, 2, 2, 2787, 2788, 7, 1024, 2, 2, 2788, 2789, 5, 556, 279, 2, 2789, 2790, 7, 1025, 2, 2, 2790, 2792, 3, 2, 2, 2, 2791, 2787, 3, 2, 2, 2, 2791, 2792, 3, 2, 2, 2, 2792, 2793, 3, 2, 2, 2, 2793, 2804, 5, 184, 93, 2, 2794, 2795, 7, 140, 2, 2, 2795, 2800, 5, 186, 94, 2, 2796, 2797, 7, 1026, 2, 2, 2797, 2799, 5, 186, 94, 2, 2798, 2796, 3, 2, 2, 2, 2799, 2802, 3, 2, 2, 2, 2800, 2798, 3, 2, 2, 2, 2800, 2801, 3, 2, 2, 2, 2801, 2804, 3, 2, 2, 2, 2802, 2800, 3, 2, 2, 2, 2803, 2791, 3, 2, 2, 2, 2803, 2794, 3, 2, 2, 2, 2804, 2817, 3, 2, 2, 2, 2805, 2806, 7, 108, 2, 2, 2806, 2807, 7, 338, 2, 2, 2807, 2808, 7, 84, 2, 2, 2808, 2809, 7, 168, 2, 2, 2809, 2814, 5, 186, 94, 2, 2810, 2811, 7, 1026, 2, 2, 2811, 2813, 5, 186, 94, 2, 2812, 2810, 3, 2, 2, 2, 2813, 2816, 3, 2, 2, 2, 2814, 2812, 3, 2, 2, 2, 2814, 2815, 3, 2, 2, 2, 2815, 2818, 3, 2, 2, 2, 2816, 2814, 3, 2, 2, 2, 2817, 2805, 3, 2, 2, 2, 2817, 2818, 3, 2, 2, 2, 2818, 173, 3, 2, 2, 2, 2819, 2820, 7, 94, 2, 2, 2820, 2822, 7, 325, 2, 2, 2821, 2823, 9, 35, 2, 2, 2822, 2821, 3, 2, 2, 2, 2822, 2823, 3, 2, 2, 2, 2823, 2825, 3, 2, 2, 2, 2824, 2826, 7, 404, 2, 2, 2825, 2824, 3, 2, 2, 2, 2825, 2826, 3, 2, 2, 2, 2826, 2827, 3, 2, 2, 2, 2827, 2828, 7, 75, 2, 2, 2828, 2830, 7, 1039, 2, 2, 2829, 2831, 9, 8, 2, 2, 2830, 2829, 3, 2, 2, 2, 2830, 2831, 3, 2, 2, 2, 2831, 2832, 3, 2, 2, 2, 2832, 2833, 7, 80, 2, 2, 2833, 2834, 7, 156, 2, 2, 2834, 2840, 5, 500, 251, 2, 2835, 2836, 7, 117, 2, 2, 2836, 2837, 7, 1024, 2, 2, 2837, 2838, 5, 556, 279, 2, 2838, 2839, 7, 1025, 2, 2, 2839, 2841, 3, 2, 2, 2, 2840, 2835, 3, 2, 2, 2, 2840, 2841, 3, 2, 2, 2, 2841, 2845, 3, 2, 2, 2, 2842, 2843, 7, 24, 2, 2, 2843, 2844, 7, 140, 2, 2, 2844, 2846, 5, 510, 256, 2, 2845, 2842, 3, 2, 2, 2, 2845, 2846, 3, 2, 2, 2, 2846, 2853, 3, 2, 2, 2, 2847, 2849, 9, 36, 2, 2, 2848, 2850, 5, 244, 123, 2, 2849, 2848, 3, 2, 2, 2, 2850, 2851, 3, 2, 2, 2, 2851, 2849, 3, 2, 2, 2, 2851, 2852, 3, 2, 2, 2, 2852, 2854, 3, 2, 2, 2, 2853, 2847, 3, 2, 2, 2, 2853, 2854, 3, 2, 2, 2, 2854, 2861, 3, 2, 2, 2, 2855, 2857, 7, 93, 2, 2, 2856, 2858, 5, 246, 124, 2, 2857, 2856, 3, 2, 2, 2, 2858, 2859, 3, 2, 2, 2, 2859, 2857, 3, 2, 2, 2, 2859, 2860, 3, 2, 2, 2, 2860, 2862, 3, 2, 2, 2, 2861, 2855, 3, 2, 2, 2, 2861, 2862, 3, 2, 2, 2, 2862, 2867, 3, 2, 2, 2, 2863, 2864, 7, 72, 2, 2, 2864, 2865, 5, 530, 266, 2, 2865, 2866, 9, 37, 2, 2, 2866, 2868, 3, 2, 2, 2, 2867, 2863, 3, 2, 2, 2, 2867, 2868, 3, 2, 2, 2, 2868, 2880, 3, 2, 2, 2, 2869, 2870, 7, 1024, 2, 2, 2870, 2875, 5, 188, 95, 2, 2871, 2872, 7, 1026, 2, 2, 2872, 2874, 5, 188, 95, 2, 2873, 2871, 3, 2, 2, 2, 2874, 2877, 3, 2, 2, 2, 2875, 2873, 3, 2, 2, 2, 2875, 2876, 3, 2, 2, 2, 2876, 2878, 3, 2, 2, 2, 2877, 2875, 3, 2, 2, 2, 2878, 2879, 7, 1025, 2, 2, 2879, 2881, 3, 2, 2, 2, 2880, 2869, 3, 2, 2, 2, 2880, 2881, 3, 2, 2, 2, 2881, 2891, 3, 2, 2, 2, 2882, 2883, 7, 140, 2, 2, 2883, 2888, 5, 186, 94, 2, 2884, 2885, 7, 1026, 2, 2, 2885, 2887, 5, 186, 94, 2, 2886, 2884, 3, 2, 2, 2, 2887, 2890, 3, 2, 2, 2, 2888, 2886, 3, 2, 2, 2, 2888, 2889, 3, 2, 2, 2, 2889, 2892, 3, 2, 2, 2, 2890, 2888, 3, 2, 2, 2, 2891, 2882, 3, 2, 2, 2, 2891, 2892, 3, 2, 2, 2, 2892, 175, 3, 2, 2, 2, 2893, 2894, 7, 94, 2, 2, 2894, 2896, 7, 592, 2, 2, 2895, 2897, 9, 35, 2, 2, 2896, 2895, 3, 2, 2, 2, 2896, 2897, 3, 2, 2, 2, 2897, 2899, 3, 2, 2, 2, 2898, 2900, 7, 404, 2, 2, 2899, 2898, 3, 2, 2, 2, 2899, 2900, 3, 2, 2, 2, 2900, 2901, 3, 2, 2, 2, 2901, 2902, 7, 75, 2, 2, 2902, 2904, 7, 1039, 2, 2, 2903, 2905, 9, 8, 2, 2, 2904, 2903, 3, 2, 2, 2, 2904, 2905, 3, 2, 2, 2, 2905, 2906, 3, 2, 2, 2, 2906, 2907, 7, 80, 2, 2, 2907, 2908, 7, 156, 2, 2, 2908, 2912, 5, 500, 251, 2, 2909, 2910, 7, 24, 2, 2, 2910, 2911, 7, 140, 2, 2, 2911, 2913, 5, 510, 256, 2, 2912, 2909, 3, 2, 2, 2, 2912, 2913, 3, 2, 2, 2, 2913, 2920, 3, 2, 2, 2, 2914, 2915, 7, 516, 2, 2, 2915, 2916, 7, 380, 2, 2, 2916, 2917, 7, 18, 2, 2, 2917, 2918, 7, 1017, 2, 2, 2918, 2919, 7, 1039, 2, 2, 2919, 2921, 7, 1016, 2, 2, 2920, 2914, 3, 2, 2, 2, 2920, 2921, 3, 2, 2, 2, 2921, 2926, 3, 2, 2, 2, 2922, 2923, 7, 72, 2, 2, 2923, 2924, 5, 530, 266, 2, 2924, 2925, 9, 37, 2, 2, 2925, 2927, 3, 2, 2, 2, 2926, 2922, 3, 2, 2, 2, 2926, 2927, 3, 2, 2, 2, 2927, 2939, 3, 2, 2, 2, 2928, 2929, 7, 1024, 2, 2, 2929, 2934, 5, 188, 95, 2, 2930, 2931, 7, 1026, 2, 2, 2931, 2933, 5, 188, 95, 2, 2932, 2930, 3, 2, 2, 2, 2933, 2936, 3, 2, 2, 2, 2934, 2932, 3, 2, 2, 2, 2934, 2935, 3, 2, 2, 2, 2935, 2937, 3, 2, 2, 2, 2936, 2934, 3, 2, 2, 2, 2937, 2938, 7, 1025, 2, 2, 2938, 2940, 3, 2, 2, 2, 2939, 2928, 3, 2, 2, 2, 2939, 2940, 3, 2, 2, 2, 2940, 2950, 3, 2, 2, 2, 2941, 2942, 7, 140, 2, 2, 2942, 2947, 5, 186, 94, 2, 2943, 2944, 7, 1026, 2, 2, 2944, 2946, 5, 186, 94, 2, 2945, 2943, 3, 2, 2, 2, 2946, 2949, 3, 2, 2, 2, 2947, 2945, 3, 2, 2, 2, 2947, 2948, 3, 2, 2, 2, 2948, 2951, 3, 2, 2, 2, 2949, 2947, 3, 2, 2, 2, 2950, 2941, 3, 2, 2, 2, 2950, 2951, 3, 2, 2, 2, 2951, 177, 3, 2, 2, 2, 2952, 2954, 7, 129, 2, 2, 2953, 2955, 9, 38, 2, 2, 2954, 2953, 3, 2, 2, 2, 2954, 2955, 3, 2, 2, 2, 2955, 2957, 3, 2, 2, 2, 2956, 2958, 7, 80, 2, 2, 2957, 2956, 3, 2, 2, 2, 2957, 2958, 3, 2, 2, 2, 2958, 2959, 3, 2, 2, 2, 2959, 2965, 5, 500, 251, 2, 2960, 2961, 7, 117, 2, 2, 2961, 2962, 7, 1024, 2, 2, 2962, 2963, 5, 556, 279, 2, 2963, 2964, 7, 1025, 2, 2, 2964, 2966, 3, 2, 2, 2, 2965, 2960, 3, 2, 2, 2, 2965, 2966, 3, 2, 2, 2, 2966, 2983, 3, 2, 2, 2, 2967, 2968, 7, 1024, 2, 2, 2968, 2969, 5, 556, 279, 2, 2969, 2970, 7, 1025, 2, 2, 2970, 2972, 3, 2, 2, 2, 2971, 2967, 3, 2, 2, 2, 2971, 2972, 3, 2, 2, 2, 2972, 2973, 3, 2, 2, 2, 2973, 2984, 5, 184, 93, 2, 2974, 2975, 7, 140, 2, 2, 2975, 2980, 5, 186, 94, 2, 2976, 2977, 7, 1026, 2, 2, 2977, 2979, 5, 186, 94, 2, 2978, 2976, 3, 2, 2, 2, 2979, 2982, 3, 2, 2, 2, 2980, 2978, 3, 2, 2, 2, 2980, 2981, 3, 2, 2, 2, 2981, 2984, 3, 2, 2, 2, 2982, 2980, 3, 2, 2, 2, 2983, 2971, 3, 2, 2, 2, 2983, 2974, 3, 2, 2, 2, 2984, 179, 3, 2, 2, 2, 2985, 2987, 5, 228, 115, 2, 2986, 2988, 5, 190, 96, 2, 2987, 2986, 3, 2, 2, 2, 2987, 2988, 3, 2, 2, 2, 2988, 3041, 3, 2, 2, 2, 2989, 2991, 5, 224, 113, 2, 2990, 2992, 5, 190, 96, 2, 2991, 2990, 3, 2, 2, 2, 2991, 2992, 3, 2, 2, 2, 2992, 3041, 3, 2, 2, 2, 2993, 2995, 5, 230, 116, 2, 2994, 2996, 5, 234, 118, 2, 2995, 2994, 3, 2, 2, 2, 2996, 2997, 3, 2, 2, 2, 2997, 2995, 3, 2, 2, 2, 2997, 2998, 3, 2, 2, 2, 2998, 3007, 3, 2, 2, 2, 2999, 3001, 7, 164, 2, 2, 3000, 3002, 9, 39, 2, 2, 3001, 3000, 3, 2, 2, 2, 3001, 3002, 3, 2, 2, 2, 3002, 3005, 3, 2, 2, 2, 3003, 3006, 5, 228, 115, 2, 3004, 3006, 5, 224, 113, 2, 3005, 3003, 3, 2, 2, 2, 3005, 3004, 3, 2, 2, 2, 3006, 3008, 3, 2, 2, 2, 3007, 2999, 3, 2, 2, 2, 3007, 3008, 3, 2, 2, 2, 3008, 3010, 3, 2, 2, 2, 3009, 3011, 5, 208, 105, 2, 3010, 3009, 3, 2, 2, 2, 3010, 3011, 3, 2, 2, 2, 3011, 3013, 3, 2, 2, 2, 3012, 3014, 5, 252, 127, 2, 3013, 3012, 3, 2, 2, 2, 3013, 3014, 3, 2, 2, 2, 3014, 3016, 3, 2, 2, 2, 3015, 3017, 5, 190, 96, 2, 3016, 3015, 3, 2, 2, 2, 3016, 3017, 3, 2, 2, 2, 3017, 3041, 3, 2, 2, 2, 3018, 3020, 5, 226, 114, 2, 3019, 3021, 5, 232, 117, 2, 3020, 3019, 3, 2, 2, 2, 3021, 3022, 3, 2, 2, 2, 3022, 3020, 3, 2, 2, 2, 3022, 3023, 3, 2, 2, 2, 3023, 3029, 3, 2, 2, 2, 3024, 3026, 7, 164, 2, 2, 3025, 3027, 9, 39, 2, 2, 3026, 3025, 3, 2, 2, 2, 3026, 3027, 3, 2, 2, 2, 3027, 3028, 3, 2, 2, 2, 3028, 3030, 5, 224, 113, 2, 3029, 3024, 3, 2, 2, 2, 3029, 3030, 3, 2, 2, 2, 3030, 3032, 3, 2, 2, 2, 3031, 3033, 5, 208, 105, 2, 3032, 3031, 3, 2, 2, 2, 3032, 3033, 3, 2, 2, 2, 3033, 3035, 3, 2, 2, 2, 3034, 3036, 5, 252, 127, 2, 3035, 3034, 3, 2, 2, 2, 3035, 3036, 3, 2, 2, 2, 3036, 3038, 3, 2, 2, 2, 3037, 3039, 5, 190, 96, 2, 3038, 3037, 3, 2, 2, 2, 3038, 3039, 3, 2, 2, 2, 3039, 3041, 3, 2, 2, 2, 3040, 2985, 3, 2, 2, 2, 3040, 2989, 3, 2, 2, 2, 3040, 2993, 3, 2, 2, 2, 3040, 3018, 3, 2, 2, 2, 3041, 181, 3, 2, 2, 2, 3042, 3045, 5, 204, 103, 2, 3043, 3045, 5, 206, 104, 2, 3044, 3042, 3, 2, 2, 2, 3044, 3043, 3, 2, 2, 2, 3045, 183, 3, 2, 2, 2, 3046, 3065, 5, 180, 91, 2, 3047, 3048, 9, 40, 2, 2, 3048, 3050, 7, 1024, 2, 2, 3049, 3051, 5, 566, 284, 2, 3050, 3049, 3, 2, 2, 2, 3050, 3051, 3, 2, 2, 2, 3051, 3052, 3, 2, 2, 2, 3052, 3061, 7, 1025, 2, 2, 3053, 3054, 7, 1026, 2, 2, 3054, 3056, 7, 1024, 2, 2, 3055, 3057, 5, 566, 284, 2, 3056, 3055, 3, 2, 2, 2, 3056, 3057, 3, 2, 2, 2, 3057, 3058, 3, 2, 2, 2, 3058, 3060, 7, 1025, 2, 2, 3059, 3053, 3, 2, 2, 2, 3060, 3063, 3, 2, 2, 2, 3061, 3059, 3, 2, 2, 2, 3061, 3062, 3, 2, 2, 2, 3062, 3065, 3, 2, 2, 2, 3063, 3061, 3, 2, 2, 2, 3064, 3046, 3, 2, 2, 2, 3064, 3047, 3, 2, 2, 2, 3065, 185, 3, 2, 2, 2, 3066, 3067, 5, 502, 252, 2, 3067, 3070, 7, 1015, 2, 2, 3068, 3071, 5, 604, 303, 2, 3069, 3071, 7, 40, 2, 2, 3070, 3068, 3, 2, 2, 2, 3070, 3069, 3, 2, 2, 2, 3071, 187, 3, 2, 2, 2, 3072, 3075, 5, 524, 263, 2, 3073, 3075, 7, 1050, 2, 2, 3074, 3072, 3, 2, 2, 2, 3074, 3073, 3, 2, 2, 2, 3075, 189, 3, 2, 2, 2, 3076, 3077, 7, 60, 2, 2, 3077, 3083, 7, 168, 2, 2, 3078, 3079, 7, 95, 2, 2, 3079, 3080, 7, 73, 2, 2, 3080, 3081, 7, 523, 2, 2, 3081, 3083, 7, 441, 2, 2, 3082, 3076, 3, 2, 2, 2, 3082, 3078, 3, 2, 2, 2, 3083, 191, 3, 2, 2, 2, 3084, 3086, 7, 42, 2, 2, 3085, 3087, 7, 97, 2, 2, 3086, 3085, 3, 2, 2, 2, 3086, 3087, 3, 2, 2, 2, 3087, 3089, 3, 2, 2, 2, 3088, 3090, 7, 487, 2, 2, 3089, 3088, 3, 2, 2, 2, 3089, 3090, 3, 2, 2, 2, 3090, 3092, 3, 2, 2, 2, 3091, 3093, 7, 72, 2, 2, 3092, 3091, 3, 2, 2, 2, 3092, 3093, 3, 2, 2, 2, 3093, 3094, 3, 2, 2, 2, 3094, 3095, 7, 63, 2, 2, 3095, 3101, 5, 500, 251, 2, 3096, 3097, 7, 117, 2, 2, 3097, 3098, 7, 1024, 2, 2, 3098, 3099, 5, 556, 279, 2, 3099, 3100, 7, 1025, 2, 2, 3100, 3102, 3, 2, 2, 2, 3101, 3096, 3, 2, 2, 2, 3101, 3102, 3, 2, 2, 2, 3102, 3105, 3, 2, 2, 2, 3103, 3104, 7, 174, 2, 2, 3104, 3106, 5, 604, 303, 2, 3105, 3103, 3, 2, 2, 2, 3105, 3106, 3, 2, 2, 2, 3106, 3108, 3, 2, 2, 2, 3107, 3109, 5, 208, 105, 2, 3108, 3107, 3, 2, 2, 2, 3108, 3109, 3, 2, 2, 2, 3109, 3112, 3, 2, 2, 2, 3110, 3111, 7, 91, 2, 2, 3111, 3113, 5, 254, 128, 2, 3112, 3110, 3, 2, 2, 2, 3112, 3113, 3, 2, 2, 2, 3113, 193, 3, 2, 2, 2, 3114, 3116, 7, 42, 2, 2, 3115, 3117, 7, 97, 2, 2, 3116, 3115, 3, 2, 2, 2, 3116, 3117, 3, 2, 2, 2, 3117, 3119, 3, 2, 2, 2, 3118, 3120, 7, 487, 2, 2, 3119, 3118, 3, 2, 2, 2, 3119, 3120, 3, 2, 2, 2, 3120, 3122, 3, 2, 2, 2, 3121, 3123, 7, 72, 2, 2, 3122, 3121, 3, 2, 2, 2, 3122, 3123, 3, 2, 2, 2, 3123, 3163, 3, 2, 2, 2, 3124, 3127, 5, 500, 251, 2, 3125, 3126, 7, 1023, 2, 2, 3126, 3128, 7, 1007, 2, 2, 3127, 3125, 3, 2, 2, 2, 3127, 3128, 3, 2, 2, 2, 3128, 3137, 3, 2, 2, 2, 3129, 3130, 7, 1026, 2, 2, 3130, 3133, 5, 500, 251, 2, 3131, 3132, 7, 1023, 2, 2, 3132, 3134, 7, 1007, 2, 2, 3133, 3131, 3, 2, 2, 2, 3133, 3134, 3, 2, 2, 2, 3134, 3136, 3, 2, 2, 2, 3135, 3129, 3, 2, 2, 2, 3136, 3139, 3, 2, 2, 2, 3137, 3135, 3, 2, 2, 2, 3137, 3138, 3, 2, 2, 2, 3138, 3140, 3, 2, 2, 2, 3139, 3137, 3, 2, 2, 2, 3140, 3141, 7, 63, 2, 2, 3141, 3142, 5, 212, 107, 2, 3142, 3164, 3, 2, 2, 2, 3143, 3144, 7, 63, 2, 2, 3144, 3147, 5, 500, 251, 2, 3145, 3146, 7, 1023, 2, 2, 3146, 3148, 7, 1007, 2, 2, 3147, 3145, 3, 2, 2, 2, 3147, 3148, 3, 2, 2, 2, 3148, 3157, 3, 2, 2, 2, 3149, 3150, 7, 1026, 2, 2, 3150, 3153, 5, 500, 251, 2, 3151, 3152, 7, 1023, 2, 2, 3152, 3154, 7, 1007, 2, 2, 3153, 3151, 3, 2, 2, 2, 3153, 3154, 3, 2, 2, 2, 3154, 3156, 3, 2, 2, 2, 3155, 3149, 3, 2, 2, 2, 3156, 3159, 3, 2, 2, 2, 3157, 3155, 3, 2, 2, 2, 3157, 3158, 3, 2, 2, 2, 3158, 3160, 3, 2, 2, 2, 3159, 3157, 3, 2, 2, 2, 3160, 3161, 7, 171, 2, 2, 3161, 3162, 5, 212, 107, 2, 3162, 3164, 3, 2, 2, 2, 3163, 3124, 3, 2, 2, 2, 3163, 3143, 3, 2, 2, 2, 3164, 3167, 3, 2, 2, 2, 3165, 3166, 7, 174, 2, 2, 3166, 3168, 5, 604, 303, 2, 3167, 3165, 3, 2, 2, 2, 3167, 3168, 3, 2, 2, 2, 3168, 195, 3, 2, 2, 2, 3169, 3170, 7, 375, 2, 2, 3170, 3171, 5, 500, 251, 2, 3171, 3176, 7, 462, 2, 2, 3172, 3174, 7, 13, 2, 2, 3173, 3172, 3, 2, 2, 2, 3173, 3174, 3, 2, 2, 2, 3174, 3175, 3, 2, 2, 2, 3175, 3177, 5, 524, 263, 2, 3176, 3173, 3, 2, 2, 2, 3176, 3177, 3, 2, 2, 2, 3177, 197, 3, 2, 2, 2, 3178, 3179, 7, 375, 2, 2, 3179, 3180, 5, 500, 251, 2, 3180, 3181, 7, 122, 2, 2, 3181, 3188, 5, 524, 263, 2, 3182, 3183, 5, 618, 310, 2, 3183, 3184, 7, 1024, 2, 2, 3184, 3185, 5, 568, 285, 2, 3185, 3186, 7, 1025, 2, 2, 3186, 3189, 3, 2, 2, 2, 3187, 3189, 9, 41, 2, 2, 3188, 3182, 3, 2, 2, 2, 3188, 3187, 3, 2, 2, 2, 3189, 3192, 3, 2, 2, 2, 3190, 3191, 7, 174, 2, 2, 3191, 3193, 5, 604, 303, 2, 3192, 3190, 3, 2, 2, 2, 3192, 3193, 3, 2, 2, 2, 3193, 3196, 3, 2, 2, 2, 3194, 3195, 7, 91, 2, 2, 3195, 3197, 5, 254, 128, 2, 3196, 3194, 3, 2, 2, 2, 3196, 3197, 3, 2, 2, 2, 3197, 199, 3, 2, 2, 2, 3198, 3199, 7, 375, 2, 2, 3199, 3200, 5, 500, 251, 2, 3200, 3201, 7, 122, 2, 2, 3201, 3204, 9, 42, 2, 2, 3202, 3203, 7, 174, 2, 2, 3203, 3205, 5, 604, 303, 2, 3204, 3202, 3, 2, 2, 2, 3204, 3205, 3, 2, 2, 2, 3205, 3208, 3, 2, 2, 2, 3206, 3207, 7, 91, 2, 2, 3207, 3209, 5, 254, 128, 2, 3208, 3206, 3, 2, 2, 2, 3208, 3209, 3, 2, 2, 2, 3209, 201, 3, 2, 2, 2, 3210, 3211, 7, 375, 2, 2, 3211, 3212, 5, 500, 251, 2, 3212, 3213, 7, 301, 2, 2, 3213, 203, 3, 2, 2, 2, 3214, 3216, 7, 168, 2, 2, 3215, 3217, 7, 97, 2, 2, 3216, 3215, 3, 2, 2, 2, 3216, 3217, 3, 2, 2, 2, 3217, 3219, 3, 2, 2, 2, 3218, 3220, 7, 72, 2, 2, 3219, 3218, 3, 2, 2, 2, 3219, 3220, 3, 2, 2, 2, 3220, 3221, 3, 2, 2, 2, 3221, 3226, 5, 500, 251, 2, 3222, 3224, 7, 13, 2, 2, 3223, 3222, 3, 2, 2, 2, 3223, 3224, 3, 2, 2, 2, 3224, 3225, 3, 2, 2, 2, 3225, 3227, 5, 524, 263, 2, 3226, 3223, 3, 2, 2, 2, 3226, 3227, 3, 2, 2, 2, 3227, 3228, 3, 2, 2, 2, 3228, 3229, 7, 140, 2, 2, 3229, 3234, 5, 186, 94, 2, 3230, 3231, 7, 1026, 2, 2, 3231, 3233, 5, 186, 94, 2, 3232, 3230, 3, 2, 2, 2, 3233, 3236, 3, 2, 2, 2, 3234, 3232, 3, 2, 2, 2, 3234, 3235, 3, 2, 2, 2, 3235, 3239, 3, 2, 2, 2, 3236, 3234, 3, 2, 2, 2, 3237, 3238, 7, 174, 2, 2, 3238, 3240, 5, 608, 305, 2, 3239, 3237, 3, 2, 2, 2, 3239, 3240, 3, 2, 2, 2, 3240, 3242, 3, 2, 2, 2, 3241, 3243, 5, 208, 105, 2, 3242, 3241, 3, 2, 2, 2, 3242, 3243, 3, 2, 2, 2, 3243, 3245, 3, 2, 2, 2, 3244, 3246, 5, 252, 127, 2, 3245, 3244, 3, 2, 2, 2, 3245, 3246, 3, 2, 2, 2, 3246, 205, 3, 2, 2, 2, 3247, 3249, 7, 168, 2, 2, 3248, 3250, 7, 97, 2, 2, 3249, 3248, 3, 2, 2, 2, 3249, 3250, 3, 2, 2, 2, 3250, 3252, 3, 2, 2, 2, 3251, 3253, 7, 72, 2, 2, 3252, 3251, 3, 2, 2, 2, 3252, 3253, 3, 2, 2, 2, 3253, 3254, 3, 2, 2, 2, 3254, 3255, 5, 212, 107, 2, 3255, 3256, 7, 140, 2, 2, 3256, 3261, 5, 186, 94, 2, 3257, 3258, 7, 1026, 2, 2, 3258, 3260, 5, 186, 94, 2, 3259, 3257, 3, 2, 2, 2, 3260, 3263, 3, 2, 2, 2, 3261, 3259, 3, 2, 2, 2, 3261, 3262, 3, 2, 2, 2, 3262, 3266, 3, 2, 2, 2, 3263, 3261, 3, 2, 2, 2, 3264, 3265, 7, 174, 2, 2, 3265, 3267, 5, 604, 303, 2, 3266, 3264, 3, 2, 2, 2, 3266, 3267, 3, 2, 2, 2, 3267, 207, 3, 2, 2, 2, 3268, 3269, 7, 113, 2, 2, 3269, 3270, 7, 18, 2, 2, 3270, 3275, 5, 210, 106, 2, 3271, 3272, 7, 1026, 2, 2, 3272, 3274, 5, 210, 106, 2, 3273, 3271, 3, 2, 2, 2, 3274, 3277, 3, 2, 2, 2, 3275, 3273, 3, 2, 2, 2, 3275, 3276, 3, 2, 2, 2, 3276, 209, 3, 2, 2, 2, 3277, 3275, 3, 2, 2, 2, 3278, 3280, 5, 604, 303, 2, 3279, 3281, 9, 43, 2, 2, 3280, 3279, 3, 2, 2, 2, 3280, 3281, 3, 2, 2, 2, 3281, 211, 3, 2, 2, 2, 3282, 3287, 5, 214, 108, 2, 3283, 3284, 7, 1026, 2, 2, 3284, 3286, 5, 214, 108, 2, 3285, 3283, 3, 2, 2, 2, 3286, 3289, 3, 2, 2, 2, 3287, 3285, 3, 2, 2, 2, 3287, 3288, 3, 2, 2, 2, 3288, 213, 3, 2, 2, 2, 3289, 3287, 3, 2, 2, 2, 3290, 3294, 5, 216, 109, 2, 3291, 3293, 5, 222, 112, 2, 3292, 3291, 3, 2, 2, 2, 3293, 3296, 3, 2, 2, 2, 3294, 3292, 3, 2, 2, 2, 3294, 3295, 3, 2, 2, 2, 3295, 3308, 3, 2, 2, 2, 3296, 3294, 3, 2, 2, 2, 3297, 3298, 7, 1024, 2, 2, 3298, 3302, 5, 216, 109, 2, 3299, 3301, 5, 222, 112, 2, 3300, 3299, 3, 2, 2, 2, 3301, 3304, 3, 2, 2, 2, 3302, 3300, 3, 2, 2, 2, 3302, 3303, 3, 2, 2, 2, 3303, 3305, 3, 2, 2, 2, 3304, 3302, 3, 2, 2, 2, 3305, 3306, 7, 1025, 2, 2, 3306, 3308, 3, 2, 2, 2, 3307, 3290, 3, 2, 2, 2, 3307, 3297, 3, 2, 2, 2, 3308, 215, 3, 2, 2, 2, 3309, 3315, 5, 500, 251, 2, 3310, 3311, 7, 117, 2, 2, 3311, 3312, 7, 1024, 2, 2, 3312, 3313, 5, 556, 279, 2, 3313, 3314, 7, 1025, 2, 2, 3314, 3316, 3, 2, 2, 2, 3315, 3310, 3, 2, 2, 2, 3315, 3316, 3, 2, 2, 2, 3316, 3321, 3, 2, 2, 2, 3317, 3319, 7, 13, 2, 2, 3318, 3317, 3, 2, 2, 2, 3318, 3319, 3, 2, 2, 2, 3319, 3320, 3, 2, 2, 2, 3320, 3322, 5, 524, 263, 2, 3321, 3318, 3, 2, 2, 2, 3321, 3322, 3, 2, 2, 2, 3322, 3331, 3, 2, 2, 2, 3323, 3328, 5, 218, 110, 2, 3324, 3325, 7, 1026, 2, 2, 3325, 3327, 5, 218, 110, 2, 3326, 3324, 3, 2, 2, 2, 3327, 3330, 3, 2, 2, 2, 3328, 3326, 3, 2, 2, 2, 3328, 3329, 3, 2, 2, 2, 3329, 3332, 3, 2, 2, 2, 3330, 3328, 3, 2, 2, 2, 3331, 3323, 3, 2, 2, 2, 3331, 3332, 3, 2, 2, 2, 3332, 3350, 3, 2, 2, 2, 3333, 3339, 5, 180, 91, 2, 3334, 3335, 7, 1024, 2, 2, 3335, 3336, 5, 180, 91, 2, 3336, 3337, 7, 1025, 2, 2, 3337, 3339, 3, 2, 2, 2, 3338, 3333, 3, 2, 2, 2, 3338, 3334, 3, 2, 2, 2, 3339, 3341, 3, 2, 2, 2, 3340, 3342, 7, 13, 2, 2, 3341, 3340, 3, 2, 2, 2, 3341, 3342, 3, 2, 2, 2, 3342, 3343, 3, 2, 2, 2, 3343, 3344, 5, 524, 263, 2, 3344, 3350, 3, 2, 2, 2, 3345, 3346, 7, 1024, 2, 2, 3346, 3347, 5, 212, 107, 2, 3347, 3348, 7, 1025, 2, 2, 3348, 3350, 3, 2, 2, 2, 3349, 3309, 3, 2, 2, 2, 3349, 3338, 3, 2, 2, 2, 3349, 3345, 3, 2, 2, 2, 3350, 217, 3, 2, 2, 2, 3351, 3352, 9, 44, 2, 2, 3352, 3355, 9, 20, 2, 2, 3353, 3354, 7, 60, 2, 2, 3354, 3356, 5, 220, 111, 2, 3355, 3353, 3, 2, 2, 2, 3355, 3356, 3, 2, 2, 2, 3356, 3357, 3, 2, 2, 2, 3357, 3358, 7, 1024, 2, 2, 3358, 3359, 5, 556, 279, 2, 3359, 3360, 7, 1025, 2, 2, 3360, 219, 3, 2, 2, 2, 3361, 3367, 7, 83, 2, 2, 3362, 3363, 7, 113, 2, 2, 3363, 3367, 7, 18, 2, 2, 3364, 3365, 7, 68, 2, 2, 3365, 3367, 7, 18, 2, 2, 3366, 3361, 3, 2, 2, 2, 3366, 3362, 3, 2, 2, 2, 3366, 3364, 3, 2, 2, 2, 3367, 221, 3, 2, 2, 2, 3368, 3370, 9, 45, 2, 2, 3369, 3368, 3, 2, 2, 2, 3369, 3370, 3, 2, 2, 2, 3370, 3371, 3, 2, 2, 2, 3371, 3372, 7, 83, 2, 2, 3372, 3380, 5, 216, 109, 2, 3373, 3374, 7, 108, 2, 2, 3374, 3381, 5, 604, 303, 2, 3375, 3376, 7, 171, 2, 2, 3376, 3377, 7, 1024, 2, 2, 3377, 3378, 5, 556, 279, 2, 3378, 3379, 7, 1025, 2, 2, 3379, 3381, 3, 2, 2, 2, 3380, 3373, 3, 2, 2, 2, 3380, 3375, 3, 2, 2, 2, 3380, 3381, 3, 2, 2, 2, 3381, 3413, 3, 2, 2, 2, 3382, 3383, 7, 155, 2, 2, 3383, 3386, 5, 216, 109, 2, 3384, 3385, 7, 108, 2, 2, 3385, 3387, 5, 604, 303, 2, 3386, 3384, 3, 2, 2, 2, 3386, 3387, 3, 2, 2, 2, 3387, 3413, 3, 2, 2, 2, 3388, 3390, 9, 46, 2, 2, 3389, 3391, 7, 115, 2, 2, 3390, 3389, 3, 2, 2, 2, 3390, 3391, 3, 2, 2, 2, 3391, 3392, 3, 2, 2, 2, 3392, 3393, 7, 83, 2, 2, 3393, 3401, 5, 216, 109, 2, 3394, 3395, 7, 108, 2, 2, 3395, 3402, 5, 604, 303, 2, 3396, 3397, 7, 171, 2, 2, 3397, 3398, 7, 1024, 2, 2, 3398, 3399, 5, 556, 279, 2, 3399, 3400, 7, 1025, 2, 2, 3400, 3402, 3, 2, 2, 2, 3401, 3394, 3, 2, 2, 2, 3401, 3396, 3, 2, 2, 2, 3402, 3413, 3, 2, 2, 2, 3403, 3408, 7, 103, 2, 2, 3404, 3406, 9, 46, 2, 2, 3405, 3407, 7, 115, 2, 2, 3406, 3405, 3, 2, 2, 2, 3406, 3407, 3, 2, 2, 2, 3407, 3409, 3, 2, 2, 2, 3408, 3404, 3, 2, 2, 2, 3408, 3409, 3, 2, 2, 2, 3409, 3410, 3, 2, 2, 2, 3410, 3411, 7, 83, 2, 2, 3411, 3413, 5, 216, 109, 2, 3412, 3369, 3, 2, 2, 2, 3412, 3382, 3, 2, 2, 2, 3412, 3388, 3, 2, 2, 2, 3412, 3403, 3, 2, 2, 2, 3413, 223, 3, 2, 2, 2, 3414, 3415, 7, 1024, 2, 2, 3415, 3416, 5, 228, 115, 2, 3416, 3417, 7, 1025, 2, 2, 3417, 3423, 3, 2, 2, 2, 3418, 3419, 7, 1024, 2, 2, 3419, 3420, 5, 224, 113, 2, 3420, 3421, 7, 1025, 2, 2, 3421, 3423, 3, 2, 2, 2, 3422, 3414, 3, 2, 2, 2, 3422, 3418, 3, 2, 2, 2, 3423, 225, 3, 2, 2, 2, 3424, 3425, 7, 1024, 2, 2, 3425, 3426, 5, 230, 116, 2, 3426, 3427, 7, 1025, 2, 2, 3427, 3433, 3, 2, 2, 2, 3428, 3429, 7, 1024, 2, 2, 3429, 3430, 5, 226, 114, 2, 3430, 3431, 7, 1025, 2, 2, 3431, 3433, 3, 2, 2, 2, 3432, 3424, 3, 2, 2, 2, 3432, 3428, 3, 2, 2, 2, 3433, 227, 3, 2, 2, 2, 3434, 3438, 7, 139, 2, 2, 3435, 3437, 5, 236, 119, 2, 3436, 3435, 3, 2, 2, 2, 3437, 3440, 3, 2, 2, 2, 3438, 3436, 3, 2, 2, 2, 3438, 3439, 3, 2, 2, 2, 3439, 3441, 3, 2, 2, 2, 3440, 3438, 3, 2, 2, 2, 3441, 3443, 5, 238, 120, 2, 3442, 3444, 5, 242, 122, 2, 3443, 3442, 3, 2, 2, 2, 3443, 3444, 3, 2, 2, 2, 3444, 3446, 3, 2, 2, 2, 3445, 3447, 5, 248, 125, 2, 3446, 3445, 3, 2, 2, 2, 3446, 3447, 3, 2, 2, 2, 3447, 3449, 3, 2, 2, 2, 3448, 3450, 5, 208, 105, 2, 3449, 3448, 3, 2, 2, 2, 3449, 3450, 3, 2, 2, 2, 3450, 3452, 3, 2, 2, 2, 3451, 3453, 5, 252, 127, 2, 3452, 3451, 3, 2, 2, 2, 3452, 3453, 3, 2, 2, 2, 3453, 3475, 3, 2, 2, 2, 3454, 3458, 7, 139, 2, 2, 3455, 3457, 5, 236, 119, 2, 3456, 3455, 3, 2, 2, 2, 3457, 3460, 3, 2, 2, 2, 3458, 3456, 3, 2, 2, 2, 3458, 3459, 3, 2, 2, 2, 3459, 3461, 3, 2, 2, 2, 3460, 3458, 3, 2, 2, 2, 3461, 3463, 5, 238, 120, 2, 3462, 3464, 5, 248, 125, 2, 3463, 3462, 3, 2, 2, 2, 3463, 3464, 3, 2, 2, 2, 3464, 3466, 3, 2, 2, 2, 3465, 3467, 5, 208, 105, 2, 3466, 3465, 3, 2, 2, 2, 3466, 3467, 3, 2, 2, 2, 3467, 3469, 3, 2, 2, 2, 3468, 3470, 5, 252, 127, 2, 3469, 3468, 3, 2, 2, 2, 3469, 3470, 3, 2, 2, 2, 3470, 3472, 3, 2, 2, 2, 3471, 3473, 5, 242, 122, 2, 3472, 3471, 3, 2, 2, 2, 3472, 3473, 3, 2, 2, 2, 3473, 3475, 3, 2, 2, 2, 3474, 3434, 3, 2, 2, 2, 3474, 3454, 3, 2, 2, 2, 3475, 229, 3, 2, 2, 2, 3476, 3480, 7, 139, 2, 2, 3477, 3479, 5, 236, 119, 2, 3478, 3477, 3, 2, 2, 2, 3479, 3482, 3, 2, 2, 2, 3480, 3478, 3, 2, 2, 2, 3480, 3481, 3, 2, 2, 2, 3481, 3483, 3, 2, 2, 2, 3482, 3480, 3, 2, 2, 2, 3483, 3485, 5, 238, 120, 2, 3484, 3486, 5, 248, 125, 2, 3485, 3484, 3, 2, 2, 2, 3485, 3486, 3, 2, 2, 2, 3486, 3488, 3, 2, 2, 2, 3487, 3489, 5, 208, 105, 2, 3488, 3487, 3, 2, 2, 2, 3488, 3489, 3, 2, 2, 2, 3489, 3491, 3, 2, 2, 2, 3490, 3492, 5, 252, 127, 2, 3491, 3490, 3, 2, 2, 2, 3491, 3492, 3, 2, 2, 2, 3492, 231, 3, 2, 2, 2, 3493, 3495, 7, 164, 2, 2, 3494, 3496, 9, 39, 2, 2, 3495, 3494, 3, 2, 2, 2, 3495, 3496, 3, 2, 2, 2, 3496, 3497, 3, 2, 2, 2, 3497, 3498, 5, 226, 114, 2, 3498, 233, 3, 2, 2, 2, 3499, 3501, 7, 164, 2, 2, 3500, 3502, 9, 39, 2, 2, 3501, 3500, 3, 2, 2, 2, 3501, 3502, 3, 2, 2, 2, 3502, 3505, 3, 2, 2, 2, 3503, 3506, 5, 230, 116, 2, 3504, 3506, 5, 226, 114, 2, 3505, 3503, 3, 2, 2, 2, 3505, 3504, 3, 2, 2, 2, 3506, 235, 3, 2, 2, 2, 3507, 3516, 9, 47, 2, 2, 3508, 3516, 7, 70, 2, 2, 3509, 3516, 7, 155, 2, 2, 3510, 3516, 7, 151, 2, 2, 3511, 3516, 7, 149, 2, 2, 3512, 3516, 7, 538, 2, 2, 3513, 3516, 9, 48, 2, 2, 3514, 3516, 7, 150, 2, 2, 3515, 3507, 3, 2, 2, 2, 3515, 3508, 3, 2, 2, 2, 3515, 3509, 3, 2, 2, 2, 3515, 3510, 3, 2, 2, 2, 3515, 3511, 3, 2, 2, 2, 3515, 3512, 3, 2, 2, 2, 3515, 3513, 3, 2, 2, 2, 3515, 3514, 3, 2, 2, 2, 3516, 237, 3, 2, 2, 2, 3517, 3520, 7, 1007, 2, 2, 3518, 3520, 5, 240, 121, 2, 3519, 3517, 3, 2, 2, 2, 3519, 3518, 3, 2, 2, 2, 3520, 3525, 3, 2, 2, 2, 3521, 3522, 7, 1026, 2, 2, 3522, 3524, 5, 240, 121, 2, 3523, 3521, 3, 2, 2, 2, 3524, 3527, 3, 2, 2, 2, 3525, 3523, 3, 2, 2, 2, 3525, 3526, 3, 2, 2, 2, 3526, 239, 3, 2, 2, 2, 3527, 3525, 3, 2, 2, 2, 3528, 3529, 5, 498, 250, 2, 3529, 3530, 7, 1023, 2, 2, 3530, 3531, 7, 1007, 2, 2, 3531, 3558, 3, 2, 2, 2, 3532, 3537, 5, 502, 252, 2, 3533, 3535, 7, 13, 2, 2, 3534, 3533, 3, 2, 2, 2, 3534, 3535, 3, 2, 2, 2, 3535, 3536, 3, 2, 2, 2, 3536, 3538, 5, 524, 263, 2, 3537, 3534, 3, 2, 2, 2, 3537, 3538, 3, 2, 2, 2, 3538, 3558, 3, 2, 2, 2, 3539, 3544, 5, 584, 293, 2, 3540, 3542, 7, 13, 2, 2, 3541, 3540, 3, 2, 2, 2, 3541, 3542, 3, 2, 2, 2, 3542, 3543, 3, 2, 2, 2, 3543, 3545, 5, 524, 263, 2, 3544, 3541, 3, 2, 2, 2, 3544, 3545, 3, 2, 2, 2, 3545, 3558, 3, 2, 2, 2, 3546, 3547, 7, 1050, 2, 2, 3547, 3549, 7, 998, 2, 2, 3548, 3546, 3, 2, 2, 2, 3548, 3549, 3, 2, 2, 2, 3549, 3550, 3, 2, 2, 2, 3550, 3555, 5, 604, 303, 2, 3551, 3553, 7, 13, 2, 2, 3552, 3551, 3, 2, 2, 2, 3552, 3553, 3, 2, 2, 2, 3553, 3554, 3, 2, 2, 2, 3554, 3556, 5, 524, 263, 2, 3555, 3552, 3, 2, 2, 2, 3555, 3556, 3, 2, 2, 2, 3556, 3558, 3, 2, 2, 2, 3557, 3528, 3, 2, 2, 2, 3557, 3532, 3, 2, 2, 2, 3557, 3539, 3, 2, 2, 2, 3557, 3548, 3, 2, 2, 2, 3558, 241, 3, 2, 2, 2, 3559, 3560, 7, 80, 2, 2, 3560, 3565, 5, 188, 95, 2, 3561, 3562, 7, 1026, 2, 2, 3562, 3564, 5, 188, 95, 2, 3563, 3561, 3, 2, 2, 2, 3564, 3567, 3, 2, 2, 2, 3565, 3563, 3, 2, 2, 2, 3565, 3566, 3, 2, 2, 2, 3566, 3596, 3, 2, 2, 2, 3567, 3565, 3, 2, 2, 2, 3568, 3569, 7, 80, 2, 2, 3569, 3570, 7, 337, 2, 2, 3570, 3596, 7, 1039, 2, 2, 3571, 3572, 7, 80, 2, 2, 3572, 3573, 7, 116, 2, 2, 3573, 3577, 7, 1039, 2, 2, 3574, 3575, 7, 24, 2, 2, 3575, 3576, 7, 140, 2, 2, 3576, 3578, 5, 510, 256, 2, 3577, 3574, 3, 2, 2, 2, 3577, 3578, 3, 2, 2, 2, 3578, 3585, 3, 2, 2, 2, 3579, 3581, 9, 36, 2, 2, 3580, 3582, 5, 244, 123, 2, 3581, 3580, 3, 2, 2, 2, 3582, 3583, 3, 2, 2, 2, 3583, 3581, 3, 2, 2, 2, 3583, 3584, 3, 2, 2, 2, 3584, 3586, 3, 2, 2, 2, 3585, 3579, 3, 2, 2, 2, 3585, 3586, 3, 2, 2, 2, 3586, 3593, 3, 2, 2, 2, 3587, 3589, 7, 93, 2, 2, 3588, 3590, 5, 246, 124, 2, 3589, 3588, 3, 2, 2, 2, 3590, 3591, 3, 2, 2, 2, 3591, 3589, 3, 2, 2, 2, 3591, 3592, 3, 2, 2, 2, 3592, 3594, 3, 2, 2, 2, 3593, 3587, 3, 2, 2, 2, 3593, 3594, 3, 2, 2, 2, 3594, 3596, 3, 2, 2, 2, 3595, 3559, 3, 2, 2, 2, 3595, 3568, 3, 2, 2, 2, 3595, 3571, 3, 2, 2, 2, 3596, 243, 3, 2, 2, 2, 3597, 3598, 7, 157, 2, 2, 3598, 3599, 7, 18, 2, 2, 3599, 3610, 7, 1039, 2, 2, 3600, 3602, 7, 111, 2, 2, 3601, 3600, 3, 2, 2, 2, 3601, 3602, 3, 2, 2, 2, 3602, 3603, 3, 2, 2, 2, 3603, 3604, 7, 53, 2, 2, 3604, 3605, 7, 18, 2, 2, 3605, 3610, 7, 1039, 2, 2, 3606, 3607, 7, 54, 2, 2, 3607, 3608, 7, 18, 2, 2, 3608, 3610, 7, 1039, 2, 2, 3609, 3597, 3, 2, 2, 2, 3609, 3601, 3, 2, 2, 2, 3609, 3606, 3, 2, 2, 2, 3610, 245, 3, 2, 2, 2, 3611, 3612, 7, 154, 2, 2, 3612, 3613, 7, 18, 2, 2, 3613, 3618, 7, 1039, 2, 2, 3614, 3615, 7, 157, 2, 2, 3615, 3616, 7, 18, 2, 2, 3616, 3618, 7, 1039, 2, 2, 3617, 3611, 3, 2, 2, 2, 3617, 3614, 3, 2, 2, 2, 3618, 247, 3, 2, 2, 2, 3619, 3620, 7, 63, 2, 2, 3620, 3623, 5, 212, 107, 2, 3621, 3622, 7, 174, 2, 2, 3622, 3624, 5, 604, 303, 2, 3623, 3621, 3, 2, 2, 2, 3623, 3624, 3, 2, 2, 2, 3624, 3639, 3, 2, 2, 2, 3625, 3626, 7, 68, 2, 2, 3626, 3627, 7, 18, 2, 2, 3627, 3632, 5, 250, 126, 2, 3628, 3629, 7, 1026, 2, 2, 3629, 3631, 5, 250, 126, 2, 3630, 3628, 3, 2, 2, 2, 3631, 3634, 3, 2, 2, 2, 3632, 3630, 3, 2, 2, 2, 3632, 3633, 3, 2, 2, 2, 3633, 3637, 3, 2, 2, 2, 3634, 3632, 3, 2, 2, 2, 3635, 3636, 7, 176, 2, 2, 3636, 3638, 7, 513, 2, 2, 3637, 3635, 3, 2, 2, 2, 3637, 3638, 3, 2, 2, 2, 3638, 3640, 3, 2, 2, 2, 3639, 3625, 3, 2, 2, 2, 3639, 3640, 3, 2, 2, 2, 3640, 3643, 3, 2, 2, 2, 3641, 3642, 7, 69, 2, 2, 3642, 3644, 5, 604, 303, 2, 3643, 3641, 3, 2, 2, 2, 3643, 3644, 3, 2, 2, 2, 3644, 249, 3, 2, 2, 2, 3645, 3647, 5, 604, 303, 2, 3646, 3648, 9, 43, 2, 2, 3647, 3646, 3, 2, 2, 2, 3647, 3648, 3, 2, 2, 2, 3648, 251, 3, 2, 2, 2, 3649, 3660, 7, 91, 2, 2, 3650, 3651, 5, 254, 128, 2, 3651, 3652, 7, 1026, 2, 2, 3652, 3654, 3, 2, 2, 2, 3653, 3650, 3, 2, 2, 2, 3653, 3654, 3, 2, 2, 2, 3654, 3655, 3, 2, 2, 2, 3655, 3661, 5, 254, 128, 2, 3656, 3657, 5, 254, 128, 2, 3657, 3658, 7, 455, 2, 2, 3658, 3659, 5, 254, 128, 2, 3659, 3661, 3, 2, 2, 2, 3660, 3653, 3, 2, 2, 2, 3660, 3656, 3, 2, 2, 2, 3661, 253, 3, 2, 2, 2, 3662, 3665, 5, 530, 266, 2, 3663, 3665, 5, 508, 255, 2, 3664, 3662, 3, 2, 2, 2, 3664, 3663, 3, 2, 2, 2, 3665, 255, 3, 2, 2, 2, 3666, 3667, 7, 542, 2, 2, 3667, 3676, 7, 565, 2, 2, 3668, 3673, 5, 278, 140, 2, 3669, 3670, 7, 1026, 2, 2, 3670, 3672, 5, 278, 140, 2, 3671, 3669, 3, 2, 2, 2, 3672, 3675, 3, 2, 2, 2, 3673, 3671, 3, 2, 2, 2, 3673, 3674, 3, 2, 2, 2, 3674, 3677, 3, 2, 2, 2, 3675, 3673, 3, 2, 2, 2, 3676, 3668, 3, 2, 2, 2, 3676, 3677, 3, 2, 2, 2, 3677, 257, 3, 2, 2, 2, 3678, 3680, 7, 284, 2, 2, 3679, 3681, 7, 588, 2, 2, 3680, 3679, 3, 2, 2, 2, 3680, 3681, 3, 2, 2, 2, 3681, 259, 3, 2, 2, 2, 3682, 3684, 7, 308, 2, 2, 3683, 3685, 7, 588, 2, 2, 3684, 3683, 3, 2, 2, 2, 3684, 3685, 3, 2, 2, 2, 3685, 3691, 3, 2, 2, 2, 3686, 3688, 7, 12, 2, 2, 3687, 3689, 7, 451, 2, 2, 3688, 3687, 3, 2, 2, 2, 3688, 3689, 3, 2, 2, 2, 3689, 3690, 3, 2, 2, 2, 3690, 3692, 7, 293, 2, 2, 3691, 3686, 3, 2, 2, 2, 3691, 3692, 3, 2, 2, 2, 3692, 3697, 3, 2, 2, 2, 3693, 3695, 7, 451, 2, 2, 3694, 3693, 3, 2, 2, 2, 3694, 3695, 3, 2, 2, 2, 3695, 3696, 3, 2, 2, 2, 3696, 3698, 7, 126, 2, 2, 3697, 3694, 3, 2, 2, 2, 3697, 3698, 3, 2, 2, 2, 3698, 261, 3, 2, 2, 2, 3699, 3701, 7, 512, 2, 2, 3700, 3702, 7, 588, 2, 2, 3701, 3700, 3, 2, 2, 2, 3701, 3702, 3, 2, 2, 2, 3702, 3708, 3, 2, 2, 2, 3703, 3705, 7, 12, 2, 2, 3704, 3706, 7, 451, 2, 2, 3705, 3704, 3, 2, 2, 2, 3705, 3706, 3, 2, 2, 2, 3706, 3707, 3, 2, 2, 2, 3707, 3709, 7, 293, 2, 2, 3708, 3703, 3, 2, 2, 2, 3708, 3709, 3, 2, 2, 2, 3709, 3714, 3, 2, 2, 2, 3710, 3712, 7, 451, 2, 2, 3711, 3710, 3, 2, 2, 2, 3711, 3712, 3, 2, 2, 2, 3712, 3713, 3, 2, 2, 2, 3713, 3715, 7, 126, 2, 2, 3714, 3711, 3, 2, 2, 2, 3714, 3715, 3, 2, 2, 2, 3715, 263, 3, 2, 2, 2, 3716, 3717, 7, 518, 2, 2, 3717, 3718, 5, 524, 263, 2, 3718, 265, 3, 2, 2, 2, 3719, 3721, 7, 512, 2, 2, 3720, 3722, 7, 588, 2, 2, 3721, 3720, 3, 2, 2, 2, 3721, 3722, 3, 2, 2, 2, 3722, 3723, 3, 2, 2, 2, 3723, 3725, 7, 159, 2, 2, 3724, 3726, 7, 518, 2, 2, 3725, 3724, 3, 2, 2, 2, 3725, 3726, 3, 2, 2, 2, 3726, 3727, 3, 2, 2, 2, 3727, 3728, 5, 524, 263, 2, 3728, 267, 3, 2, 2, 2, 3729, 3730, 7, 126, 2, 2, 3730, 3731, 7, 518, 2, 2, 3731, 3732, 5, 524, 263, 2, 3732, 269, 3, 2, 2, 2, 3733, 3734, 7, 95, 2, 2, 3734, 3735, 7, 606, 2, 2, 3735, 3740, 5, 280, 141, 2, 3736, 3737, 7, 1026, 2, 2, 3737, 3739, 5, 280, 141, 2, 3738, 3736, 3, 2, 2, 2, 3739, 3742, 3, 2, 2, 2, 3740, 3738, 3, 2, 2, 2, 3740, 3741, 3, 2, 2, 2, 3741, 271, 3, 2, 2, 2, 3742, 3740, 3, 2, 2, 2, 3743, 3744, 7, 166, 2, 2, 3744, 3745, 7, 606, 2, 2, 3745, 273, 3, 2, 2, 2, 3746, 3747, 7, 140, 2, 2, 3747, 3748, 7, 280, 2, 2, 3748, 3749, 7, 1015, 2, 2, 3749, 3750, 9, 24, 2, 2, 3750, 275, 3, 2, 2, 2, 3751, 3753, 7, 140, 2, 2, 3752, 3754, 9, 49, 2, 2, 3753, 3752, 3, 2, 2, 2, 3753, 3754, 3, 2, 2, 2, 3754, 3755, 3, 2, 2, 2, 3755, 3756, 7, 565, 2, 2, 3756, 3761, 5, 284, 143, 2, 3757, 3758, 7, 1026, 2, 2, 3758, 3760, 5, 284, 143, 2, 3759, 3757, 3, 2, 2, 2, 3760, 3763, 3, 2, 2, 2, 3761, 3759, 3, 2, 2, 2, 3761, 3762, 3, 2, 2, 2, 3762, 277, 3, 2, 2, 2, 3763, 3761, 3, 2, 2, 2, 3764, 3765, 7, 176, 2, 2, 3765, 3766, 7, 315, 2, 2, 3766, 3772, 7, 529, 2, 2, 3767, 3768, 7, 122, 2, 2, 3768, 3772, 7, 177, 2, 2, 3769, 3770, 7, 122, 2, 2, 3770, 3772, 7, 461, 2, 2, 3771, 3764, 3, 2, 2, 2, 3771, 3767, 3, 2, 2, 2, 3771, 3769, 3, 2, 2, 2, 3772, 279, 3, 2, 2, 2, 3773, 3778, 5, 500, 251, 2, 3774, 3776, 7, 13, 2, 2, 3775, 3774, 3, 2, 2, 2, 3775, 3776, 3, 2, 2, 2, 3776, 3777, 3, 2, 2, 2, 3777, 3779, 5, 524, 263, 2, 3778, 3775, 3, 2, 2, 2, 3778, 3779, 3, 2, 2, 2, 3779, 3780, 3, 2, 2, 2, 3780, 3781, 5, 282, 142, 2, 3781, 281, 3, 2, 2, 2, 3782, 3784, 7, 122, 2, 2, 3783, 3785, 7, 404, 2, 2, 3784, 3783, 3, 2, 2, 2, 3784, 3785, 3, 2, 2, 2, 3785, 3791, 3, 2, 2, 2, 3786, 3788, 7, 97, 2, 2, 3787, 3786, 3, 2, 2, 2, 3787, 3788, 3, 2, 2, 2, 3788, 3789, 3, 2, 2, 2, 3789, 3791, 7, 177, 2, 2, 3790, 3782, 3, 2, 2, 2, 3790, 3787, 3, 2, 2, 2, 3791, 283, 3, 2, 2, 2, 3792, 3793, 7, 394, 2, 2, 3793, 3794, 7, 402, 2, 2, 3794, 3800, 5, 286, 144, 2, 3795, 3796, 7, 122, 2, 2, 3796, 3800, 7, 177, 2, 2, 3797, 3798, 7, 122, 2, 2, 3798, 3800, 7, 461, 2, 2, 3799, 3792, 3, 2, 2, 2, 3799, 3795, 3, 2, 2, 2, 3799, 3797, 3, 2, 2, 2, 3800, 285, 3, 2, 2, 2, 3801, 3802, 7, 693, 2, 2, 3802, 3809, 7, 122, 2, 2, 3803, 3804, 7, 122, 2, 2, 3804, 3809, 7, 694, 2, 2, 3805, 3806, 7, 122, 2, 2, 3806, 3809, 7, 695, 2, 2, 3807, 3809, 7, 696, 2, 2, 3808, 3801, 3, 2, 2, 2, 3808, 3803, 3, 2, 2, 2, 3808, 3805, 3, 2, 2, 2, 3808, 3807, 3, 2, 2, 2, 3809, 287, 3, 2, 2, 2, 3810, 3811, 7, 23, 2, 2, 3811, 3812, 7, 407, 2, 2, 3812, 3813, 7, 159, 2, 2, 3813, 3818, 5, 306, 154, 2, 3814, 3815, 7, 1026, 2, 2, 3815, 3817, 5, 306, 154, 2, 3816, 3814, 3, 2, 2, 2, 3817, 3820, 3, 2, 2, 2, 3818, 3816, 3, 2, 2, 2, 3818, 3819, 3, 2, 2, 2, 3819, 3822, 3, 2, 2, 2, 3820, 3818, 3, 2, 2, 2, 3821, 3823, 5, 314, 158, 2, 3822, 3821, 3, 2, 2, 2, 3822, 3823, 3, 2, 2, 2, 3823, 289, 3, 2, 2, 2, 3824, 3825, 7, 23, 2, 2, 3825, 3826, 7, 506, 2, 2, 3826, 3827, 7, 363, 2, 2, 3827, 3832, 5, 316, 159, 2, 3828, 3829, 7, 1026, 2, 2, 3829, 3831, 5, 316, 159, 2, 3830, 3828, 3, 2, 2, 2, 3831, 3834, 3, 2, 2, 2, 3832, 3830, 3, 2, 2, 2, 3832, 3833, 3, 2, 2, 2, 3833, 291, 3, 2, 2, 2, 3834, 3832, 3, 2, 2, 2, 3835, 3836, 7, 120, 2, 2, 3836, 3837, 9, 50, 2, 2, 3837, 3842, 7, 406, 2, 2, 3838, 3839, 7, 159, 2, 2, 3839, 3843, 7, 1039, 2, 2, 3840, 3841, 7, 15, 2, 2, 3841, 3843, 7, 1039, 2, 2, 3842, 3838, 3, 2, 2, 2, 3842, 3840, 3, 2, 2, 2, 3843, 293, 3, 2, 2, 2, 3844, 3845, 7, 507, 2, 2, 3845, 3846, 7, 407, 2, 2, 3846, 295, 3, 2, 2, 2, 3847, 3848, 7, 507, 2, 2, 3848, 3850, 7, 527, 2, 2, 3849, 3851, 7, 8, 2, 2, 3850, 3849, 3, 2, 2, 2, 3850, 3851, 3, 2, 2, 2, 3851, 3853, 3, 2, 2, 2, 3852, 3854, 5, 314, 158, 2, 3853, 3852, 3, 2, 2, 2, 3853, 3854, 3, 2, 2, 2, 3854, 297, 3, 2, 2, 2, 3855, 3856, 7, 542, 2, 2, 3856, 3865, 7, 527, 2, 2, 3857, 3862, 5, 320, 161, 2, 3858, 3859, 7, 1026, 2, 2, 3859, 3861, 5, 320, 161, 2, 3860, 3858, 3, 2, 2, 2, 3861, 3864, 3, 2, 2, 2, 3862, 3860, 3, 2, 2, 2, 3862, 3863, 3, 2, 2, 2, 3863, 3866, 3, 2, 2, 2, 3864, 3862, 3, 2, 2, 2, 3865, 3857, 3, 2, 2, 2, 3865, 3866, 3, 2, 2, 2, 3866, 3869, 3, 2, 2, 2, 3867, 3868, 7, 574, 2, 2, 3868, 3870, 5, 322, 162, 2, 3869, 3867, 3, 2, 2, 2, 3869, 3870, 3, 2, 2, 2, 3870, 3874, 3, 2, 2, 2, 3871, 3873, 5, 324, 163, 2, 3872, 3871, 3, 2, 2, 2, 3873, 3876, 3, 2, 2, 2, 3874, 3872, 3, 2, 2, 2, 3874, 3875, 3, 2, 2, 2, 3875, 3878, 3, 2, 2, 2, 3876, 3874, 3, 2, 2, 2, 3877, 3879, 5, 314, 158, 2, 3878, 3877, 3, 2, 2, 2, 3878, 3879, 3, 2, 2, 2, 3879, 299, 3, 2, 2, 2, 3880, 3881, 7, 548, 2, 2, 3881, 3890, 7, 527, 2, 2, 3882, 3887, 5, 320, 161, 2, 3883, 3884, 7, 1026, 2, 2, 3884, 3886, 5, 320, 161, 2, 3885, 3883, 3, 2, 2, 2, 3886, 3889, 3, 2, 2, 2, 3887, 3885, 3, 2, 2, 2, 3887, 3888, 3, 2, 2, 2, 3888, 3891, 3, 2, 2, 2, 3889, 3887, 3, 2, 2, 2, 3890, 3882, 3, 2, 2, 2, 3890, 3891, 3, 2, 2, 2, 3891, 301, 3, 2, 2, 2, 3892, 3893, 7, 542, 2, 2, 3893, 3894, 7, 374, 2, 2, 3894, 303, 3, 2, 2, 2, 3895, 3896, 7, 548, 2, 2, 3896, 3897, 7, 374, 2, 2, 3897, 305, 3, 2, 2, 2, 3898, 3899, 5, 308, 155, 2, 3899, 3900, 7, 1015, 2, 2, 3900, 3901, 7, 1039, 2, 2, 3901, 3928, 3, 2, 2, 2, 3902, 3903, 5, 310, 156, 2, 3903, 3904, 7, 1015, 2, 2, 3904, 3905, 5, 530, 266, 2, 3905, 3928, 3, 2, 2, 2, 3906, 3907, 5, 312, 157, 2, 3907, 3908, 7, 1015, 2, 2, 3908, 3909, 9, 24, 2, 2, 3909, 3928, 3, 2, 2, 2, 3910, 3911, 7, 411, 2, 2, 3911, 3912, 7, 1015, 2, 2, 3912, 3928, 7, 1042, 2, 2, 3913, 3914, 7, 381, 2, 2, 3914, 3915, 7, 1015, 2, 2, 3915, 3924, 7, 1024, 2, 2, 3916, 3921, 5, 524, 263, 2, 3917, 3918, 7, 1026, 2, 2, 3918, 3920, 5, 524, 263, 2, 3919, 3917, 3, 2, 2, 2, 3920, 3923, 3, 2, 2, 2, 3921, 3919, 3, 2, 2, 2, 3921, 3922, 3, 2, 2, 2, 3922, 3925, 3, 2, 2, 2, 3923, 3921, 3, 2, 2, 2, 3924, 3916, 3, 2, 2, 2, 3924, 3925, 3, 2, 2, 2, 3925, 3926, 3, 2, 2, 2, 3926, 3928, 7, 1025, 2, 2, 3927, 3898, 3, 2, 2, 2, 3927, 3902, 3, 2, 2, 2, 3927, 3906, 3, 2, 2, 2, 3927, 3910, 3, 2, 2, 2, 3927, 3913, 3, 2, 2, 2, 3928, 307, 3, 2, 2, 2, 3929, 3930, 9, 51, 2, 2, 3930, 309, 3, 2, 2, 2, 3931, 3932, 9, 52, 2, 2, 3932, 311, 3, 2, 2, 2, 3933, 3934, 9, 53, 2, 2, 3934, 313, 3, 2, 2, 2, 3935, 3936, 7, 60, 2, 2, 3936, 3937, 7, 295, 2, 2, 3937, 3938, 7, 1039, 2, 2, 3938, 315, 3, 2, 2, 2, 3939, 3940, 7, 499, 2, 2, 3940, 3941, 7, 1015, 2, 2, 3941, 3942, 7, 1024, 2, 2, 3942, 3943, 5, 556, 279, 2, 3943, 3944, 7, 1025, 2, 2, 3944, 3989, 3, 2, 2, 2, 3945, 3946, 7, 501, 2, 2, 3946, 3947, 7, 1015, 2, 2, 3947, 3948, 7, 1024, 2, 2, 3948, 3949, 5, 556, 279, 2, 3949, 3950, 7, 1025, 2, 2, 3950, 3989, 3, 2, 2, 2, 3951, 3952, 7, 500, 2, 2, 3952, 3953, 7, 1015, 2, 2, 3953, 3954, 7, 1024, 2, 2, 3954, 3955, 5, 558, 280, 2, 3955, 3956, 7, 1025, 2, 2, 3956, 3989, 3, 2, 2, 2, 3957, 3958, 7, 502, 2, 2, 3958, 3959, 7, 1015, 2, 2, 3959, 3960, 7, 1024, 2, 2, 3960, 3961, 5, 558, 280, 2, 3961, 3962, 7, 1025, 2, 2, 3962, 3989, 3, 2, 2, 2, 3963, 3964, 7, 504, 2, 2, 3964, 3965, 7, 1015, 2, 2, 3965, 3966, 7, 1024, 2, 2, 3966, 3967, 5, 570, 286, 2, 3967, 3968, 7, 1025, 2, 2, 3968, 3989, 3, 2, 2, 2, 3969, 3970, 7, 505, 2, 2, 3970, 3971, 7, 1015, 2, 2, 3971, 3972, 7, 1024, 2, 2, 3972, 3973, 5, 570, 286, 2, 3973, 3974, 7, 1025, 2, 2, 3974, 3989, 3, 2, 2, 2, 3975, 3976, 7, 503, 2, 2, 3976, 3977, 7, 1015, 2, 2, 3977, 3978, 7, 1024, 2, 2, 3978, 3983, 5, 318, 160, 2, 3979, 3980, 7, 1026, 2, 2, 3980, 3982, 5, 318, 160, 2, 3981, 3979, 3, 2, 2, 2, 3982, 3985, 3, 2, 2, 2, 3983, 3981, 3, 2, 2, 2, 3983, 3984, 3, 2, 2, 2, 3984, 3986, 3, 2, 2, 2, 3985, 3983, 3, 2, 2, 2, 3986, 3987, 7, 1025, 2, 2, 3987, 3989, 3, 2, 2, 2, 3988, 3939, 3, 2, 2, 2, 3988, 3945, 3, 2, 2, 2, 3988, 3951, 3, 2, 2, 2, 3988, 3957, 3, 2, 2, 2, 3988, 3963, 3, 2, 2, 2, 3988, 3969, 3, 2, 2, 2, 3988, 3975, 3, 2, 2, 2, 3989, 317, 3, 2, 2, 2, 3990, 3991, 7, 1024, 2, 2, 3991, 3992, 5, 500, 251, 2, 3992, 3993, 7, 1026, 2, 2, 3993, 3994, 5, 500, 251, 2, 3994, 3995, 7, 1025, 2, 2, 3995, 319, 3, 2, 2, 2, 3996, 3997, 9, 54, 2, 2, 3997, 321, 3, 2, 2, 2, 3998, 3999, 9, 55, 2, 2, 3999, 4000, 7, 1015, 2, 2, 4000, 4017, 5, 326, 164, 2, 4001, 4002, 7, 413, 2, 2, 4002, 4003, 7, 1015, 2, 2, 4003, 4004, 7, 1039, 2, 2, 4004, 4005, 7, 1026, 2, 2, 4005, 4006, 7, 414, 2, 2, 4006, 4007, 7, 1015, 2, 2, 4007, 4017, 5, 530, 266, 2, 4008, 4009, 7, 493, 2, 2, 4009, 4010, 7, 1015, 2, 2, 4010, 4011, 7, 1039, 2, 2, 4011, 4012, 7, 1026, 2, 2, 4012, 4013, 7, 494, 2, 2, 4013, 4014, 7, 1015, 2, 2, 4014, 4017, 5, 530, 266, 2, 4015, 4017, 7, 536, 2, 2, 4016, 3998, 3, 2, 2, 2, 4016, 4001, 3, 2, 2, 2, 4016, 4008, 3, 2, 2, 2, 4016, 4015, 3, 2, 2, 2, 4017, 323, 3, 2, 2, 2, 4018, 4019, 7, 576, 2, 2, 4019, 4020, 7, 1015, 2, 2, 4020, 4031, 7, 1039, 2, 2, 4021, 4022, 7, 472, 2, 2, 4022, 4023, 7, 1015, 2, 2, 4023, 4031, 7, 1039, 2, 2, 4024, 4025, 7, 328, 2, 2, 4025, 4026, 7, 1015, 2, 2, 4026, 4031, 7, 1039, 2, 2, 4027, 4028, 7, 475, 2, 2, 4028, 4029, 7, 1015, 2, 2, 4029, 4031, 7, 1039, 2, 2, 4030, 4018, 3, 2, 2, 2, 4030, 4021, 3, 2, 2, 2, 4030, 4024, 3, 2, 2, 2, 4030, 4027, 3, 2, 2, 2, 4031, 325, 3, 2, 2, 2, 4032, 4037, 5, 516, 259, 2, 4033, 4034, 7, 1026, 2, 2, 4034, 4036, 5, 516, 259, 2, 4035, 4033, 3, 2, 2, 2, 4036, 4039, 3, 2, 2, 2, 4037, 4035, 3, 2, 2, 2, 4037, 4038, 3, 2, 2, 2, 4038, 4042, 3, 2, 2, 2, 4039, 4037, 3, 2, 2, 2, 4040, 4042, 7, 1039, 2, 2, 4041, 4032, 3, 2, 2, 2, 4041, 4040, 3, 2, 2, 2, 4042, 327, 3, 2, 2, 2, 4043, 4044, 7, 591, 2, 2, 4044, 4045, 9, 56, 2, 2, 4045, 4047, 5, 518, 260, 2, 4046, 4048, 9, 57, 2, 2, 4047, 4046, 3, 2, 2, 2, 4047, 4048, 3, 2, 2, 2, 4048, 329, 3, 2, 2, 2, 4049, 4050, 7, 591, 2, 2, 4050, 4051, 7, 342, 2, 2, 4051, 4057, 5, 518, 260, 2, 4052, 4055, 7, 556, 2, 2, 4053, 4054, 7, 60, 2, 2, 4054, 4056, 7, 439, 2, 2, 4055, 4053, 3, 2, 2, 2, 4055, 4056, 3, 2, 2, 2, 4056, 4058, 3, 2, 2, 2, 4057, 4052, 3, 2, 2, 2, 4057, 4058, 3, 2, 2, 2, 4058, 331, 3, 2, 2, 2, 4059, 4060, 7, 591, 2, 2, 4060, 4061, 7, 479, 2, 2, 4061, 4062, 5, 518, 260, 2, 4062, 333, 3, 2, 2, 2, 4063, 4064, 7, 591, 2, 2, 4064, 4065, 7, 308, 2, 2, 4065, 4068, 5, 518, 260, 2, 4066, 4067, 7, 459, 2, 2, 4067, 4069, 7, 473, 2, 2, 4068, 4066, 3, 2, 2, 2, 4068, 4069, 3, 2, 2, 2, 4069, 335, 3, 2, 2, 2, 4070, 4071, 7, 591, 2, 2, 4071, 4072, 7, 512, 2, 2, 4072, 4073, 5, 518, 260, 2, 4073, 337, 3, 2, 2, 2, 4074, 4075, 7, 591, 2, 2, 4075, 4078, 7, 489, 2, 2, 4076, 4077, 7, 31, 2, 2, 4077, 4079, 5, 518, 260, 2, 4078, 4076, 3, 2, 2, 2, 4078, 4079, 3, 2, 2, 2, 4079, 339, 3, 2, 2, 2, 4080, 4081, 7, 479, 2, 2, 4081, 4082, 5, 524, 263, 2, 4082, 4085, 7, 63, 2, 2, 4083, 4086, 7, 1039, 2, 2, 4084, 4086, 7, 1050, 2, 2, 4085, 4083, 3, 2, 2, 2, 4085, 4084, 3, 2, 2, 2, 4086, 341, 3, 2, 2, 2, 4087, 4088, 7, 608, 2, 2, 4088, 4091, 5, 524, 263, 2, 4089, 4090, 7, 171, 2, 2, 4090, 4092, 5, 572, 287, 2, 4091, 4089, 3, 2, 2, 2, 4091, 4092, 3, 2, 2, 2, 4092, 343, 3, 2, 2, 2, 4093, 4094, 9, 58, 2, 2, 4094, 4095, 7, 479, 2, 2, 4095, 4096, 5, 524, 263, 2, 4096, 345, 3, 2, 2, 2, 4097, 4100, 5, 348, 175, 2, 4098, 4100, 5, 6, 4, 2, 4099, 4097, 3, 2, 2, 2, 4099, 4098, 3, 2, 2, 2, 4100, 347, 3, 2, 2, 2, 4101, 4102, 5, 524, 263, 2, 4102, 4103, 7, 1035, 2, 2, 4103, 4105, 3, 2, 2, 2, 4104, 4101, 3, 2, 2, 2, 4104, 4105, 3, 2, 2, 2, 4105, 4106, 3, 2, 2, 2, 4106, 4145, 7, 284, 2, 2, 4107, 4108, 5, 368, 185, 2, 4108, 4109, 7, 1027, 2, 2, 4109, 4111, 3, 2, 2, 2, 4110, 4107, 3, 2, 2, 2, 4111, 4114, 3, 2, 2, 2, 4112, 4110, 3, 2, 2, 2, 4112, 4113, 3, 2, 2, 2, 4113, 4120, 3, 2, 2, 2, 4114, 4112, 3, 2, 2, 2, 4115, 4116, 5, 370, 186, 2, 4116, 4117, 7, 1027, 2, 2, 4117, 4119, 3, 2, 2, 2, 4118, 4115, 3, 2, 2, 2, 4119, 4122, 3, 2, 2, 2, 4120, 4118, 3, 2, 2, 2, 4120, 4121, 3, 2, 2, 2, 4121, 4128, 3, 2, 2, 2, 4122, 4120, 3, 2, 2, 2, 4123, 4124, 5, 372, 187, 2, 4124, 4125, 7, 1027, 2, 2, 4125, 4127, 3, 2, 2, 2, 4126, 4123, 3, 2, 2, 2, 4127, 4130, 3, 2, 2, 2, 4128, 4126, 3, 2, 2, 2, 4128, 4129, 3, 2, 2, 2, 4129, 4136, 3, 2, 2, 2, 4130, 4128, 3, 2, 2, 2, 4131, 4132, 5, 374, 188, 2, 4132, 4133, 7, 1027, 2, 2, 4133, 4135, 3, 2, 2, 2, 4134, 4131, 3, 2, 2, 2, 4135, 4138, 3, 2, 2, 2, 4136, 4134, 3, 2, 2, 2, 4136, 4137, 3, 2, 2, 2, 4137, 4142, 3, 2, 2, 2, 4138, 4136, 3, 2, 2, 2, 4139, 4141, 5, 378, 190, 2, 4140, 4139, 3, 2, 2, 2, 4141, 4144, 3, 2, 2, 2, 4142, 4140, 3, 2, 2, 2, 4142, 4143, 3, 2, 2, 2, 4143, 4146, 3, 2, 2, 2, 4144, 4142, 3, 2, 2, 2, 4145, 4112, 3, 2, 2, 2, 4145, 4146, 3, 2, 2, 2, 4146, 4147, 3, 2, 2, 2, 4147, 4149, 7, 342, 2, 2, 4148, 4150, 5, 524, 263, 2, 4149, 4148, 3, 2, 2, 2, 4149, 4150, 3, 2, 2, 2, 4150, 349, 3, 2, 2, 2, 4151, 4154, 7, 21, 2, 2, 4152, 4155, 5, 524, 263, 2, 4153, 4155, 5, 604, 303, 2, 4154, 4152, 3, 2, 2, 2, 4154, 4153, 3, 2, 2, 2, 4154, 4155, 3, 2, 2, 2, 4155, 4157, 3, 2, 2, 2, 4156, 4158, 5, 380, 191, 2, 4157, 4156, 3, 2, 2, 2, 4158, 4159, 3, 2, 2, 2, 4159, 4157, 3, 2, 2, 2, 4159, 4160, 3, 2, 2, 2, 4160, 4167, 3, 2, 2, 2, 4161, 4163, 7, 51, 2, 2, 4162, 4164, 5, 378, 190, 2, 4163, 4162, 3, 2, 2, 2, 4164, 4165, 3, 2, 2, 2, 4165, 4163, 3, 2, 2, 2, 4165, 4166, 3, 2, 2, 2, 4166, 4168, 3, 2, 2, 2, 4167, 4161, 3, 2, 2, 2, 4167, 4168, 3, 2, 2, 2, 4168, 4169, 3, 2, 2, 2, 4169, 4170, 7, 342, 2, 2, 4170, 4171, 7, 21, 2, 2, 4171, 351, 3, 2, 2, 2, 4172, 4173, 7, 71, 2, 2, 4173, 4174, 5, 604, 303, 2, 4174, 4176, 7, 158, 2, 2, 4175, 4177, 5, 378, 190, 2, 4176, 4175, 3, 2, 2, 2, 4177, 4178, 3, 2, 2, 2, 4178, 4176, 3, 2, 2, 2, 4178, 4179, 3, 2, 2, 2, 4179, 4183, 3, 2, 2, 2, 4180, 4182, 5, 382, 192, 2, 4181, 4180, 3, 2, 2, 2, 4182, 4185, 3, 2, 2, 2, 4183, 4181, 3, 2, 2, 2, 4183, 4184, 3, 2, 2, 2, 4184, 4192, 3, 2, 2, 2, 4185, 4183, 3, 2, 2, 2, 4186, 4188, 7, 51, 2, 2, 4187, 4189, 5, 378, 190, 2, 4188, 4187, 3, 2, 2, 2, 4189, 4190, 3, 2, 2, 2, 4190, 4188, 3, 2, 2, 2, 4190, 4191, 3, 2, 2, 2, 4191, 4193, 3, 2, 2, 2, 4192, 4186, 3, 2, 2, 2, 4192, 4193, 3, 2, 2, 2, 4193, 4194, 3, 2, 2, 2, 4194, 4195, 7, 342, 2, 2, 4195, 4196, 7, 71, 2, 2, 4196, 353, 3, 2, 2, 2, 4197, 4198, 7, 82, 2, 2, 4198, 4199, 5, 524, 263, 2, 4199, 355, 3, 2, 2, 2, 4200, 4201, 7, 88, 2, 2, 4201, 4202, 5, 524, 263, 2, 4202, 357, 3, 2, 2, 2, 4203, 4204, 5, 524, 263, 2, 4204, 4205, 7, 1035, 2, 2, 4205, 4207, 3, 2, 2, 2, 4206, 4203, 3, 2, 2, 2, 4206, 4207, 3, 2, 2, 2, 4207, 4208, 3, 2, 2, 2, 4208, 4210, 7, 96, 2, 2, 4209, 4211, 5, 378, 190, 2, 4210, 4209, 3, 2, 2, 2, 4211, 4212, 3, 2, 2, 2, 4212, 4210, 3, 2, 2, 2, 4212, 4213, 3, 2, 2, 2, 4213, 4214, 3, 2, 2, 2, 4214, 4215, 7, 342, 2, 2, 4215, 4217, 7, 96, 2, 2, 4216, 4218, 5, 524, 263, 2, 4217, 4216, 3, 2, 2, 2, 4217, 4218, 3, 2, 2, 2, 4218, 359, 3, 2, 2, 2, 4219, 4220, 5, 524, 263, 2, 4220, 4221, 7, 1035, 2, 2, 4221, 4223, 3, 2, 2, 2, 4222, 4219, 3, 2, 2, 2, 4222, 4223, 3, 2, 2, 2, 4223, 4224, 3, 2, 2, 2, 4224, 4226, 7, 128, 2, 2, 4225, 4227, 5, 378, 190, 2, 4226, 4225, 3, 2, 2, 2, 4227, 4228, 3, 2, 2, 2, 4228, 4226, 3, 2, 2, 2, 4228, 4229, 3, 2, 2, 2, 4229, 4230, 3, 2, 2, 2, 4230, 4231, 7, 574, 2, 2, 4231, 4232, 5, 604, 303, 2, 4232, 4233, 7, 342, 2, 2, 4233, 4235, 7, 128, 2, 2, 4234, 4236, 5, 524, 263, 2, 4235, 4234, 3, 2, 2, 2, 4235, 4236, 3, 2, 2, 2, 4236, 361, 3, 2, 2, 2, 4237, 4238, 7, 133, 2, 2, 4238, 4239, 5, 604, 303, 2, 4239, 363, 3, 2, 2, 2, 4240, 4241, 5, 524, 263, 2, 4241, 4242, 7, 1035, 2, 2, 4242, 4244, 3, 2, 2, 2, 4243, 4240, 3, 2, 2, 2, 4243, 4244, 3, 2, 2, 2, 4244, 4245, 3, 2, 2, 2, 4245, 4246, 7, 175, 2, 2, 4246, 4247, 5, 604, 303, 2, 4247, 4249, 7, 336, 2, 2, 4248, 4250, 5, 378, 190, 2, 4249, 4248, 3, 2, 2, 2, 4250, 4251, 3, 2, 2, 2, 4251, 4249, 3, 2, 2, 2, 4251, 4252, 3, 2, 2, 2, 4252, 4253, 3, 2, 2, 2, 4253, 4254, 7, 342, 2, 2, 4254, 4256, 7, 175, 2, 2, 4255, 4257, 5, 524, 263, 2, 4256, 4255, 3, 2, 2, 2, 4256, 4257, 3, 2, 2, 2, 4257, 365, 3, 2, 2, 2, 4258, 4259, 7, 301, 2, 2, 4259, 4274, 5, 524, 263, 2, 4260, 4265, 7, 59, 2, 2, 4261, 4263, 7, 450, 2, 2, 4262, 4261, 3, 2, 2, 2, 4262, 4263, 3, 2, 2, 2, 4263, 4264, 3, 2, 2, 2, 4264, 4266, 7, 63, 2, 2, 4265, 4262, 3, 2, 2, 2, 4265, 4266, 3, 2, 2, 2, 4266, 4267, 3, 2, 2, 2, 4267, 4268, 5, 524, 263, 2, 4268, 4269, 7, 80, 2, 2, 4269, 4270, 5, 556, 279, 2, 4270, 4274, 3, 2, 2, 2, 4271, 4272, 7, 462, 2, 2, 4272, 4274, 5, 524, 263, 2, 4273, 4258, 3, 2, 2, 2, 4273, 4260, 3, 2, 2, 2, 4273, 4271, 3, 2, 2, 2, 4274, 367, 3, 2, 2, 2, 4275, 4276, 7, 39, 2, 2, 4276, 4277, 5, 556, 279, 2, 4277, 4280, 5, 544, 273, 2, 4278, 4279, 7, 40, 2, 2, 4279, 4281, 5, 574, 288, 2, 4280, 4278, 3, 2, 2, 2, 4280, 4281, 3, 2, 2, 2, 4281, 369, 3, 2, 2, 2, 4282, 4283, 7, 39, 2, 2, 4283, 4284, 5, 524, 263, 2, 4284, 4285, 7, 28, 2, 2, 4285, 4292, 7, 60, 2, 2, 4286, 4293, 5, 530, 266, 2, 4287, 4289, 7, 147, 2, 2, 4288, 4290, 7, 580, 2, 2, 4289, 4288, 3, 2, 2, 2, 4289, 4290, 3, 2, 2, 2, 4290, 4291, 3, 2, 2, 2, 4291, 4293, 7, 1039, 2, 2, 4292, 4286, 3, 2, 2, 2, 4292, 4287, 3, 2, 2, 2, 4293, 371, 3, 2, 2, 2, 4294, 4295, 7, 39, 2, 2, 4295, 4296, 5, 524, 263, 2, 4296, 4297, 7, 36, 2, 2, 4297, 4298, 7, 60, 2, 2, 4298, 4299, 5, 180, 91, 2, 4299, 373, 3, 2, 2, 2, 4300, 4301, 7, 39, 2, 2, 4301, 4302, 9, 59, 2, 2, 4302, 4303, 7, 375, 2, 2, 4303, 4304, 7, 60, 2, 2, 4304, 4309, 5, 376, 189, 2, 4305, 4306, 7, 1026, 2, 2, 4306, 4308, 5, 376, 189, 2, 4307, 4305, 3, 2, 2, 2, 4308, 4311, 3, 2, 2, 2, 4309, 4307, 3, 2, 2, 2, 4309, 4310, 3, 2, 2, 2, 4310, 4312, 3, 2, 2, 2, 4311, 4309, 3, 2, 2, 2, 4312, 4313, 5, 346, 174, 2, 4313, 375, 3, 2, 2, 2, 4314, 4326, 5, 530, 266, 2, 4315, 4317, 7, 147, 2, 2, 4316, 4318, 7, 580, 2, 2, 4317, 4316, 3, 2, 2, 2, 4317, 4318, 3, 2, 2, 2, 4318, 4319, 3, 2, 2, 2, 4319, 4326, 7, 1039, 2, 2, 4320, 4326, 5, 524, 263, 2, 4321, 4326, 7, 148, 2, 2, 4322, 4323, 7, 104, 2, 2, 4323, 4326, 7, 368, 2, 2, 4324, 4326, 7, 146, 2, 2, 4325, 4314, 3, 2, 2, 2, 4325, 4315, 3, 2, 2, 2, 4325, 4320, 3, 2, 2, 2, 4325, 4321, 3, 2, 2, 2, 4325, 4322, 3, 2, 2, 2, 4325, 4324, 3, 2, 2, 2, 4326, 377, 3, 2, 2, 2, 4327, 4330, 5, 20, 11, 2, 4328, 4330, 5, 6, 4, 2, 4329, 4327, 3, 2, 2, 2, 4329, 4328, 3, 2, 2, 2, 4330, 4331, 3, 2, 2, 2, 4331, 4332, 7, 1027, 2, 2, 4332, 379, 3, 2, 2, 2, 4333, 4336, 7, 173, 2, 2, 4334, 4337, 5, 542, 272, 2, 4335, 4337, 5, 604, 303, 2, 4336, 4334, 3, 2, 2, 2, 4336, 4335, 3, 2, 2, 2, 4337, 4338, 3, 2, 2, 2, 4338, 4340, 7, 158, 2, 2, 4339, 4341, 5, 378, 190, 2, 4340, 4339, 3, 2, 2, 2, 4341, 4342, 3, 2, 2, 2, 4342, 4340, 3, 2, 2, 2, 4342, 4343, 3, 2, 2, 2, 4343, 381, 3, 2, 2, 2, 4344, 4345, 7, 52, 2, 2, 4345, 4346, 5, 604, 303, 2, 4346, 4348, 7, 158, 2, 2, 4347, 4349, 5, 378, 190, 2, 4348, 4347, 3, 2, 2, 2, 4349, 4350, 3, 2, 2, 2, 4350, 4348, 3, 2, 2, 2, 4350, 4351, 3, 2, 2, 2, 4351, 383, 3, 2, 2, 2, 4352, 4353, 7, 9, 2, 2, 4353, 4354, 7, 576, 2, 2, 4354, 4359, 5, 402, 202, 2, 4355, 4356, 7, 1026, 2, 2, 4356, 4358, 5, 402, 202, 2, 4357, 4355, 3, 2, 2, 2, 4358, 4361, 3, 2, 2, 2, 4359, 4357, 3, 2, 2, 2, 4359, 4360, 3, 2, 2, 2, 4360, 4407, 3, 2, 2, 2, 4361, 4359, 3, 2, 2, 2, 4362, 4363, 7, 9, 2, 2, 4363, 4365, 7, 576, 2, 2, 4364, 4366, 5, 580, 291, 2, 4365, 4364, 3, 2, 2, 2, 4365, 4366, 3, 2, 2, 2, 4366, 4367, 3, 2, 2, 2, 4367, 4372, 5, 404, 203, 2, 4368, 4369, 7, 1026, 2, 2, 4369, 4371, 5, 404, 203, 2, 4370, 4368, 3, 2, 2, 2, 4371, 4374, 3, 2, 2, 2, 4372, 4370, 3, 2, 2, 2, 4372, 4373, 3, 2, 2, 2, 4373, 4389, 3, 2, 2, 2, 4374, 4372, 3, 2, 2, 2, 4375, 4387, 7, 130, 2, 2, 4376, 4388, 7, 453, 2, 2, 4377, 4384, 5, 406, 204, 2, 4378, 4380, 7, 12, 2, 2, 4379, 4378, 3, 2, 2, 2, 4379, 4380, 3, 2, 2, 2, 4380, 4381, 3, 2, 2, 2, 4381, 4383, 5, 406, 204, 2, 4382, 4379, 3, 2, 2, 2, 4383, 4386, 3, 2, 2, 2, 4384, 4382, 3, 2, 2, 2, 4384, 4385, 3, 2, 2, 2, 4385, 4388, 3, 2, 2, 2, 4386, 4384, 3, 2, 2, 2, 4387, 4376, 3, 2, 2, 2, 4387, 4377, 3, 2, 2, 2, 4388, 4390, 3, 2, 2, 2, 4389, 4375, 3, 2, 2, 2, 4389, 4390, 3, 2, 2, 2, 4390, 4397, 3, 2, 2, 2, 4391, 4393, 7, 176, 2, 2, 4392, 4394, 5, 408, 205, 2, 4393, 4392, 3, 2, 2, 2, 4394, 4395, 3, 2, 2, 2, 4395, 4393, 3, 2, 2, 2, 4395, 4396, 3, 2, 2, 2, 4396, 4398, 3, 2, 2, 2, 4397, 4391, 3, 2, 2, 2, 4397, 4398, 3, 2, 2, 2, 4398, 4403, 3, 2, 2, 2, 4399, 4402, 5, 410, 206, 2, 4400, 4402, 5, 412, 207, 2, 4401, 4399, 3, 2, 2, 2, 4401, 4400, 3, 2, 2, 2, 4402, 4405, 3, 2, 2, 2, 4403, 4401, 3, 2, 2, 2, 4403, 4404, 3, 2, 2, 2, 4404, 4407, 3, 2, 2, 2, 4405, 4403, 3, 2, 2, 2, 4406, 4352, 3, 2, 2, 2, 4406, 4362, 3, 2, 2, 2, 4407, 385, 3, 2, 2, 2, 4408, 4409, 7, 32, 2, 2, 4409, 4410, 7, 576, 2, 2, 4410, 4415, 5, 404, 203, 2, 4411, 4412, 7, 1026, 2, 2, 4412, 4414, 5, 404, 203, 2, 4413, 4411, 3, 2, 2, 2, 4414, 4417, 3, 2, 2, 2, 4415, 4413, 3, 2, 2, 2, 4415, 4416, 3, 2, 2, 2, 4416, 4463, 3, 2, 2, 2, 4417, 4415, 3, 2, 2, 2, 4418, 4419, 7, 32, 2, 2, 4419, 4421, 7, 576, 2, 2, 4420, 4422, 5, 582, 292, 2, 4421, 4420, 3, 2, 2, 2, 4421, 4422, 3, 2, 2, 2, 4422, 4423, 3, 2, 2, 2, 4423, 4428, 5, 404, 203, 2, 4424, 4425, 7, 1026, 2, 2, 4425, 4427, 5, 404, 203, 2, 4426, 4424, 3, 2, 2, 2, 4427, 4430, 3, 2, 2, 2, 4428, 4426, 3, 2, 2, 2, 4428, 4429, 3, 2, 2, 2, 4429, 4445, 3, 2, 2, 2, 4430, 4428, 3, 2, 2, 2, 4431, 4443, 7, 130, 2, 2, 4432, 4444, 7, 453, 2, 2, 4433, 4440, 5, 406, 204, 2, 4434, 4436, 7, 12, 2, 2, 4435, 4434, 3, 2, 2, 2, 4435, 4436, 3, 2, 2, 2, 4436, 4437, 3, 2, 2, 2, 4437, 4439, 5, 406, 204, 2, 4438, 4435, 3, 2, 2, 2, 4439, 4442, 3, 2, 2, 2, 4440, 4438, 3, 2, 2, 2, 4440, 4441, 3, 2, 2, 2, 4441, 4444, 3, 2, 2, 2, 4442, 4440, 3, 2, 2, 2, 4443, 4432, 3, 2, 2, 2, 4443, 4433, 3, 2, 2, 2, 4444, 4446, 3, 2, 2, 2, 4445, 4431, 3, 2, 2, 2, 4445, 4446, 3, 2, 2, 2, 4446, 4453, 3, 2, 2, 2, 4447, 4449, 7, 176, 2, 2, 4448, 4450, 5, 408, 205, 2, 4449, 4448, 3, 2, 2, 2, 4450, 4451, 3, 2, 2, 2, 4451, 4449, 3, 2, 2, 2, 4451, 4452, 3, 2, 2, 2, 4452, 4454, 3, 2, 2, 2, 4453, 4447, 3, 2, 2, 2, 4453, 4454, 3, 2, 2, 2, 4454, 4459, 3, 2, 2, 2, 4455, 4458, 5, 410, 206, 2, 4456, 4458, 5, 412, 207, 2, 4457, 4455, 3, 2, 2, 2, 4457, 4456, 3, 2, 2, 2, 4458, 4461, 3, 2, 2, 2, 4459, 4457, 3, 2, 2, 2, 4459, 4460, 3, 2, 2, 2, 4460, 4463, 3, 2, 2, 2, 4461, 4459, 3, 2, 2, 2, 4462, 4408, 3, 2, 2, 2, 4462, 4418, 3, 2, 2, 2, 4463, 387, 3, 2, 2, 2, 4464, 4465, 7, 49, 2, 2, 4465, 4467, 7, 576, 2, 2, 4466, 4468, 5, 580, 291, 2, 4467, 4466, 3, 2, 2, 2, 4467, 4468, 3, 2, 2, 2, 4468, 4469, 3, 2, 2, 2, 4469, 4474, 5, 506, 254, 2, 4470, 4471, 7, 1026, 2, 2, 4471, 4473, 5, 506, 254, 2, 4472, 4470, 3, 2, 2, 2, 4473, 4476, 3, 2, 2, 2, 4474, 4472, 3, 2, 2, 2, 4474, 4475, 3, 2, 2, 2, 4475, 389, 3, 2, 2, 2, 4476, 4474, 3, 2, 2, 2, 4477, 4478, 7, 67, 2, 2, 4478, 4483, 5, 414, 208, 2, 4479, 4480, 7, 1026, 2, 2, 4480, 4482, 5, 414, 208, 2, 4481, 4479, 3, 2, 2, 2, 4482, 4485, 3, 2, 2, 2, 4483, 4481, 3, 2, 2, 2, 4483, 4484, 3, 2, 2, 2, 4484, 4486, 3, 2, 2, 2, 4485, 4483, 3, 2, 2, 2, 4486, 4488, 7, 108, 2, 2, 4487, 4489, 9, 60, 2, 2, 4488, 4487, 3, 2, 2, 2, 4488, 4489, 3, 2, 2, 2, 4489, 4490, 3, 2, 2, 2, 4490, 4491, 5, 418, 210, 2, 4491, 4492, 7, 159, 2, 2, 4492, 4497, 5, 404, 203, 2, 4493, 4494, 7, 1026, 2, 2, 4494, 4496, 5, 404, 203, 2, 4495, 4493, 3, 2, 2, 2, 4496, 4499, 3, 2, 2, 2, 4497, 4495, 3, 2, 2, 2, 4497, 4498, 3, 2, 2, 2, 4498, 4514, 3, 2, 2, 2, 4499, 4497, 3, 2, 2, 2, 4500, 4512, 7, 130, 2, 2, 4501, 4513, 7, 453, 2, 2, 4502, 4509, 5, 406, 204, 2, 4503, 4505, 7, 12, 2, 2, 4504, 4503, 3, 2, 2, 2, 4504, 4505, 3, 2, 2, 2, 4505, 4506, 3, 2, 2, 2, 4506, 4508, 5, 406, 204, 2, 4507, 4504, 3, 2, 2, 2, 4508, 4511, 3, 2, 2, 2, 4509, 4507, 3, 2, 2, 2, 4509, 4510, 3, 2, 2, 2, 4510, 4513, 3, 2, 2, 2, 4511, 4509, 3, 2, 2, 2, 4512, 4501, 3, 2, 2, 2, 4512, 4502, 3, 2, 2, 2, 4513, 4515, 3, 2, 2, 2, 4514, 4500, 3, 2, 2, 2, 4514, 4515, 3, 2, 2, 2, 4515, 4525, 3, 2, 2, 2, 4516, 4522, 7, 176, 2, 2, 4517, 4518, 7, 67, 2, 2, 4518, 4521, 7, 110, 2, 2, 4519, 4521, 5, 408, 205, 2, 4520, 4517, 3, 2, 2, 2, 4520, 4519, 3, 2, 2, 2, 4521, 4524, 3, 2, 2, 2, 4522, 4520, 3, 2, 2, 2, 4522, 4523, 3, 2, 2, 2, 4523, 4526, 3, 2, 2, 2, 4524, 4522, 3, 2, 2, 2, 4525, 4516, 3, 2, 2, 2, 4525, 4526, 3, 2, 2, 2, 4526, 391, 3, 2, 2, 2, 4527, 4528, 7, 67, 2, 2, 4528, 4529, 7, 485, 2, 2, 4529, 4530, 7, 108, 2, 2, 4530, 4531, 5, 506, 254, 2, 4531, 4532, 7, 159, 2, 2, 4532, 4537, 5, 506, 254, 2, 4533, 4534, 7, 1026, 2, 2, 4534, 4536, 5, 506, 254, 2, 4535, 4533, 3, 2, 2, 2, 4536, 4539, 3, 2, 2, 2, 4537, 4535, 3, 2, 2, 2, 4537, 4538, 3, 2, 2, 2, 4538, 4543, 3, 2, 2, 2, 4539, 4537, 3, 2, 2, 2, 4540, 4541, 7, 176, 2, 2, 4541, 4542, 7, 67, 2, 2, 4542, 4544, 7, 110, 2, 2, 4543, 4540, 3, 2, 2, 2, 4543, 4544, 3, 2, 2, 2, 4544, 393, 3, 2, 2, 2, 4545, 4546, 7, 127, 2, 2, 4546, 4547, 7, 576, 2, 2, 4547, 4552, 5, 420, 211, 2, 4548, 4549, 7, 1026, 2, 2, 4549, 4551, 5, 420, 211, 2, 4550, 4548, 3, 2, 2, 2, 4551, 4554, 3, 2, 2, 2, 4552, 4550, 3, 2, 2, 2, 4552, 4553, 3, 2, 2, 2, 4553, 395, 3, 2, 2, 2, 4554, 4552, 3, 2, 2, 2, 4555, 4556, 7, 134, 2, 2, 4556, 4561, 5, 414, 208, 2, 4557, 4558, 7, 1026, 2, 2, 4558, 4560, 5, 414, 208, 2, 4559, 4557, 3, 2, 2, 2, 4560, 4563, 3, 2, 2, 2, 4561, 4559, 3, 2, 2, 2, 4561, 4562, 3, 2, 2, 2, 4562, 4564, 3, 2, 2, 2, 4563, 4561, 3, 2, 2, 2, 4564, 4566, 7, 108, 2, 2, 4565, 4567, 9, 60, 2, 2, 4566, 4565, 3, 2, 2, 2, 4566, 4567, 3, 2, 2, 2, 4567, 4568, 3, 2, 2, 2, 4568, 4569, 5, 418, 210, 2, 4569, 4570, 7, 63, 2, 2, 4570, 4575, 5, 506, 254, 2, 4571, 4572, 7, 1026, 2, 2, 4572, 4574, 5, 506, 254, 2, 4573, 4571, 3, 2, 2, 2, 4574, 4577, 3, 2, 2, 2, 4575, 4573, 3, 2, 2, 2, 4575, 4576, 3, 2, 2, 2, 4576, 4596, 3, 2, 2, 2, 4577, 4575, 3, 2, 2, 2, 4578, 4579, 7, 134, 2, 2, 4579, 4581, 7, 8, 2, 2, 4580, 4582, 7, 614, 2, 2, 4581, 4580, 3, 2, 2, 2, 4581, 4582, 3, 2, 2, 2, 4582, 4583, 3, 2, 2, 2, 4583, 4584, 7, 1026, 2, 2, 4584, 4585, 7, 67, 2, 2, 4585, 4586, 7, 110, 2, 2, 4586, 4587, 7, 63, 2, 2, 4587, 4592, 5, 506, 254, 2, 4588, 4589, 7, 1026, 2, 2, 4589, 4591, 5, 506, 254, 2, 4590, 4588, 3, 2, 2, 2, 4591, 4594, 3, 2, 2, 2, 4592, 4590, 3, 2, 2, 2, 4592, 4593, 3, 2, 2, 2, 4593, 4596, 3, 2, 2, 2, 4594, 4592, 3, 2, 2, 2, 4595, 4555, 3, 2, 2, 2, 4595, 4578, 3, 2, 2, 2, 4596, 397, 3, 2, 2, 2, 4597, 4598, 7, 134, 2, 2, 4598, 4599, 7, 485, 2, 2, 4599, 4600, 7, 108, 2, 2, 4600, 4601, 5, 506, 254, 2, 4601, 4602, 7, 63, 2, 2, 4602, 4607, 5, 506, 254, 2, 4603, 4604, 7, 1026, 2, 2, 4604, 4606, 5, 506, 254, 2, 4605, 4603, 3, 2, 2, 2, 4606, 4609, 3, 2, 2, 2, 4607, 4605, 3, 2, 2, 2, 4607, 4608, 3, 2, 2, 2, 4608, 399, 3, 2, 2, 2, 4609, 4607, 3, 2, 2, 2, 4610, 4611, 7, 140, 2, 2, 4611, 4614, 7, 472, 2, 2, 4612, 4613, 7, 60, 2, 2, 4613, 4615, 5, 506, 254, 2, 4614, 4612, 3, 2, 2, 2, 4614, 4615, 3, 2, 2, 2, 4615, 4616, 3, 2, 2, 2, 4616, 4619, 7, 1015, 2, 2, 4617, 4620, 5, 598, 300, 2, 4618, 4620, 7, 1039, 2, 2, 4619, 4617, 3, 2, 2, 2, 4619, 4618, 3, 2, 2, 2, 4620, 401, 3, 2, 2, 2, 4621, 4622, 5, 506, 254, 2, 4622, 4623, 5, 410, 206, 2, 4623, 403, 3, 2, 2, 2, 4624, 4625, 5, 506, 254, 2, 4625, 4626, 7, 380, 2, 2, 4626, 4627, 7, 18, 2, 2, 4627, 4628, 7, 472, 2, 2, 4628, 4629, 7, 1039, 2, 2, 4629, 4649, 3, 2, 2, 2, 4630, 4631, 5, 506, 254, 2, 4631, 4634, 7, 380, 2, 2, 4632, 4633, 7, 176, 2, 2, 4633, 4635, 5, 522, 262, 2, 4634, 4632, 3, 2, 2, 2, 4634, 4635, 3, 2, 2, 2, 4635, 4636, 3, 2, 2, 2, 4636, 4637, 7, 18, 2, 2, 4637, 4638, 7, 1039, 2, 2, 4638, 4649, 3, 2, 2, 2, 4639, 4640, 5, 506, 254, 2, 4640, 4641, 7, 380, 2, 2, 4641, 4642, 7, 176, 2, 2, 4642, 4645, 5, 522, 262, 2, 4643, 4644, 7, 13, 2, 2, 4644, 4646, 7, 1039, 2, 2, 4645, 4643, 3, 2, 2, 2, 4645, 4646, 3, 2, 2, 2, 4646, 4649, 3, 2, 2, 2, 4647, 4649, 5, 506, 254, 2, 4648, 4624, 3, 2, 2, 2, 4648, 4630, 3, 2, 2, 2, 4648, 4639, 3, 2, 2, 2, 4648, 4647, 3, 2, 2, 2, 4649, 405, 3, 2, 2, 2, 4650, 4659, 7, 152, 2, 2, 4651, 4659, 7, 590, 2, 2, 4652, 4653, 7, 298, 2, 2, 4653, 4659, 7, 1039, 2, 2, 4654, 4655, 7, 395, 2, 2, 4655, 4659, 7, 1039, 2, 2, 4656, 4657, 7, 553, 2, 2, 4657, 4659, 7, 1039, 2, 2, 4658, 4650, 3, 2, 2, 2, 4658, 4651, 3, 2, 2, 2, 4658, 4652, 3, 2, 2, 2, 4658, 4654, 3, 2, 2, 2, 4658, 4656, 3, 2, 2, 2, 4659, 407, 3, 2, 2, 2, 4660, 4661, 7, 429, 2, 2, 4661, 4669, 5, 530, 266, 2, 4662, 4663, 7, 432, 2, 2, 4663, 4669, 5, 530, 266, 2, 4664, 4665, 7, 428, 2, 2, 4665, 4669, 5, 530, 266, 2, 4666, 4667, 7, 433, 2, 2, 4667, 4669, 5, 530, 266, 2, 4668, 4660, 3, 2, 2, 2, 4668, 4662, 3, 2, 2, 2, 4668, 4664, 3, 2, 2, 2, 4668, 4666, 3, 2, 2, 2, 4669, 409, 3, 2, 2, 2, 4670, 4671, 7, 472, 2, 2, 4671, 4678, 7, 355, 2, 2, 4672, 4679, 7, 40, 2, 2, 4673, 4679, 7, 449, 2, 2, 4674, 4675, 7, 79, 2, 2, 4675, 4676, 5, 530, 266, 2, 4676, 4677, 7, 600, 2, 2, 4677, 4679, 3, 2, 2, 2, 4678, 4672, 3, 2, 2, 2, 4678, 4673, 3, 2, 2, 2, 4678, 4674, 3, 2, 2, 2, 4678, 4679, 3, 2, 2, 2, 4679, 411, 3, 2, 2, 2, 4680, 4681, 7, 272, 2, 2, 4681, 4682, 9, 61, 2, 2, 4682, 413, 3, 2, 2, 2, 4683, 4688, 5, 416, 209, 2, 4684, 4685, 7, 1024, 2, 2, 4685, 4686, 5, 556, 279, 2, 4686, 4687, 7, 1025, 2, 2, 4687, 4689, 3, 2, 2, 2, 4688, 4684, 3, 2, 2, 2, 4688, 4689, 3, 2, 2, 2, 4689, 415, 3, 2, 2, 2, 4690, 4692, 7, 8, 2, 2, 4691, 4693, 7, 614, 2, 2, 4692, 4691, 3, 2, 2, 2, 4692, 4693, 3, 2, 2, 2, 4693, 4734, 3, 2, 2, 2, 4694, 4696, 7, 9, 2, 2, 4695, 4697, 7, 607, 2, 2, 4696, 4695, 3, 2, 2, 2, 4696, 4697, 3, 2, 2, 2, 4697, 4734, 3, 2, 2, 2, 4698, 4705, 7, 32, 2, 2, 4699, 4700, 7, 561, 2, 2, 4700, 4706, 7, 606, 2, 2, 4701, 4706, 7, 607, 2, 2, 4702, 4706, 7, 582, 2, 2, 4703, 4706, 7, 576, 2, 2, 4704, 4706, 7, 560, 2, 2, 4705, 4699, 3, 2, 2, 2, 4705, 4701, 3, 2, 2, 2, 4705, 4702, 3, 2, 2, 2, 4705, 4703, 3, 2, 2, 2, 4705, 4704, 3, 2, 2, 2, 4705, 4706, 3, 2, 2, 2, 4706, 4734, 3, 2, 2, 2, 4707, 4734, 7, 42, 2, 2, 4708, 4734, 7, 49, 2, 2, 4709, 4734, 7, 350, 2, 2, 4710, 4734, 7, 608, 2, 2, 4711, 4734, 7, 609, 2, 2, 4712, 4713, 7, 67, 2, 2, 4713, 4734, 7, 110, 2, 2, 4714, 4734, 7, 74, 2, 2, 4715, 4734, 7, 78, 2, 2, 4716, 4717, 7, 95, 2, 2, 4717, 4734, 7, 606, 2, 2, 4718, 4734, 7, 610, 2, 2, 4719, 4734, 7, 485, 2, 2, 4720, 4734, 7, 124, 2, 2, 4721, 4734, 7, 611, 2, 2, 4722, 4723, 7, 506, 2, 2, 4723, 4734, 9, 62, 2, 2, 4724, 4734, 7, 139, 2, 2, 4725, 4726, 7, 142, 2, 2, 4726, 4734, 9, 63, 2, 2, 4727, 4734, 7, 612, 2, 2, 4728, 4734, 7, 613, 2, 2, 4729, 4734, 7, 161, 2, 2, 4730, 4734, 7, 168, 2, 2, 4731, 4734, 7, 169, 2, 2, 4732, 4734, 7, 634, 2, 2, 4733, 4690, 3, 2, 2, 2, 4733, 4694, 3, 2, 2, 2, 4733, 4698, 3, 2, 2, 2, 4733, 4707, 3, 2, 2, 2, 4733, 4708, 3, 2, 2, 2, 4733, 4709, 3, 2, 2, 2, 4733, 4710, 3, 2, 2, 2, 4733, 4711, 3, 2, 2, 2, 4733, 4712, 3, 2, 2, 2, 4733, 4714, 3, 2, 2, 2, 4733, 4715, 3, 2, 2, 2, 4733, 4716, 3, 2, 2, 2, 4733, 4718, 3, 2, 2, 2, 4733, 4719, 3, 2, 2, 2, 4733, 4720, 3, 2, 2, 2, 4733, 4721, 3, 2, 2, 2, 4733, 4722, 3, 2, 2, 2, 4733, 4724, 3, 2, 2, 2, 4733, 4725, 3, 2, 2, 2, 4733, 4727, 3, 2, 2, 2, 4733, 4728, 3, 2, 2, 2, 4733, 4729, 3, 2, 2, 2, 4733, 4730, 3, 2, 2, 2, 4733, 4731, 3, 2, 2, 2, 4733, 4732, 3, 2, 2, 2, 4734, 417, 3, 2, 2, 2, 4735, 4752, 7, 1007, 2, 2, 4736, 4737, 7, 1007, 2, 2, 4737, 4738, 7, 1023, 2, 2, 4738, 4752, 7, 1007, 2, 2, 4739, 4740, 5, 524, 263, 2, 4740, 4741, 7, 1023, 2, 2, 4741, 4742, 7, 1007, 2, 2, 4742, 4752, 3, 2, 2, 2, 4743, 4744, 5, 524, 263, 2, 4744, 4745, 7, 1023, 2, 2, 4745, 4746, 5, 524, 263, 2, 4746, 4752, 3, 2, 2, 2, 4747, 4748, 5, 524, 263, 2, 4748, 4749, 5, 528, 265, 2, 4749, 4752, 3, 2, 2, 2, 4750, 4752, 5, 524, 263, 2, 4751, 4735, 3, 2, 2, 2, 4751, 4736, 3, 2, 2, 2, 4751, 4739, 3, 2, 2, 2, 4751, 4743, 3, 2, 2, 2, 4751, 4747, 3, 2, 2, 2, 4751, 4750, 3, 2, 2, 2, 4752, 419, 3, 2, 2, 2, 4753, 4754, 5, 506, 254, 2, 4754, 4755, 7, 159, 2, 2, 4755, 4756, 5, 506, 254, 2, 4756, 421, 3, 2, 2, 2, 4757, 4759, 7, 11, 2, 2, 4758, 4760, 9, 64, 2, 2, 4759, 4758, 3, 2, 2, 2, 4759, 4760, 3, 2, 2, 2, 4760, 4761, 3, 2, 2, 2, 4761, 4762, 7, 156, 2, 2, 4762, 4763, 5, 558, 280, 2, 4763, 423, 3, 2, 2, 2, 4764, 4765, 7, 25, 2, 2, 4765, 4766, 7, 156, 2, 2, 4766, 4770, 5, 558, 280, 2, 4767, 4769, 5, 432, 217, 2, 4768, 4767, 3, 2, 2, 2, 4769, 4772, 3, 2, 2, 2, 4770, 4768, 3, 2, 2, 2, 4770, 4771, 3, 2, 2, 2, 4771, 425, 3, 2, 2, 2, 4772, 4770, 3, 2, 2, 2, 4773, 4774, 7, 296, 2, 2, 4774, 4775, 7, 156, 2, 2, 4775, 4777, 5, 558, 280, 2, 4776, 4778, 9, 65, 2, 2, 4777, 4776, 3, 2, 2, 2, 4777, 4778, 3, 2, 2, 2, 4778, 427, 3, 2, 2, 2, 4779, 4781, 7, 109, 2, 2, 4780, 4782, 9, 64, 2, 2, 4781, 4780, 3, 2, 2, 2, 4781, 4782, 3, 2, 2, 2, 4782, 4783, 3, 2, 2, 2, 4783, 4784, 7, 156, 2, 2, 4784, 4785, 5, 558, 280, 2, 4785, 429, 3, 2, 2, 2, 4786, 4788, 7, 498, 2, 2, 4787, 4789, 9, 64, 2, 2, 4788, 4787, 3, 2, 2, 2, 4788, 4789, 3, 2, 2, 2, 4789, 4790, 3, 2, 2, 2, 4790, 4791, 7, 156, 2, 2, 4791, 4793, 5, 558, 280, 2, 4792, 4794, 7, 487, 2, 2, 4793, 4792, 3, 2, 2, 2, 4793, 4794, 3, 2, 2, 2, 4794, 4796, 3, 2, 2, 2, 4795, 4797, 7, 357, 2, 2, 4796, 4795, 3, 2, 2, 2, 4796, 4797, 3, 2, 2, 2, 4797, 4799, 3, 2, 2, 2, 4798, 4800, 7, 577, 2, 2, 4799, 4798, 3, 2, 2, 2, 4799, 4800, 3, 2, 2, 2, 4800, 431, 3, 2, 2, 2, 4801, 4802, 7, 60, 2, 2, 4802, 4809, 7, 575, 2, 2, 4803, 4809, 7, 487, 2, 2, 4804, 4809, 7, 359, 2, 2, 4805, 4809, 7, 434, 2, 2, 4806, 4809, 7, 357, 2, 2, 4807, 4809, 7, 294, 2, 2, 4808, 4801, 3, 2, 2, 2, 4808, 4803, 3, 2, 2, 2, 4808, 4804, 3, 2, 2, 2, 4808, 4805, 3, 2, 2, 2, 4808, 4806, 3, 2, 2, 2, 4808, 4807, 3, 2, 2, 2, 4809, 433, 3, 2, 2, 2, 4810, 4812, 7, 32, 2, 2, 4811, 4813, 7, 275, 2, 2, 4812, 4811, 3, 2, 2, 2, 4812, 4813, 3, 2, 2, 2, 4813, 4814, 3, 2, 2, 2, 4814, 4815, 7, 370, 2, 2, 4815, 4816, 5, 524, 263, 2, 4816, 4817, 7, 510, 2, 2, 4817, 4818, 9, 66, 2, 2, 4818, 4819, 7, 532, 2, 2, 4819, 4820, 7, 1039, 2, 2, 4820, 435, 3, 2, 2, 2, 4821, 4822, 7, 387, 2, 2, 4822, 4823, 7, 474, 2, 2, 4823, 4824, 5, 524, 263, 2, 4824, 4825, 7, 532, 2, 2, 4825, 4826, 7, 1039, 2, 2, 4826, 437, 3, 2, 2, 2, 4827, 4828, 7, 572, 2, 2, 4828, 4829, 7, 474, 2, 2, 4829, 4830, 5, 524, 263, 2, 4830, 439, 3, 2, 2, 2, 4831, 4832, 7, 140, 2, 2, 4832, 4833, 5, 444, 223, 2, 4833, 4834, 9, 67, 2, 2, 4834, 4842, 5, 604, 303, 2, 4835, 4836, 7, 1026, 2, 2, 4836, 4837, 5, 444, 223, 2, 4837, 4838, 9, 67, 2, 2, 4838, 4839, 5, 604, 303, 2, 4839, 4841, 3, 2, 2, 2, 4840, 4835, 3, 2, 2, 2, 4841, 4844, 3, 2, 2, 2, 4842, 4840, 3, 2, 2, 2, 4842, 4843, 3, 2, 2, 2, 4843, 4883, 3, 2, 2, 2, 4844, 4842, 3, 2, 2, 2, 4845, 4849, 7, 140, 2, 2, 4846, 4847, 7, 24, 2, 2, 4847, 4850, 7, 140, 2, 2, 4848, 4850, 7, 735, 2, 2, 4849, 4846, 3, 2, 2, 2, 4849, 4848, 3, 2, 2, 2, 4850, 4853, 3, 2, 2, 2, 4851, 4854, 5, 510, 256, 2, 4852, 4854, 7, 40, 2, 2, 4853, 4851, 3, 2, 2, 2, 4853, 4852, 3, 2, 2, 2, 4854, 4883, 3, 2, 2, 2, 4855, 4856, 7, 140, 2, 2, 4856, 4863, 7, 447, 2, 2, 4857, 4860, 5, 510, 256, 2, 4858, 4859, 7, 26, 2, 2, 4859, 4861, 5, 512, 257, 2, 4860, 4858, 3, 2, 2, 2, 4860, 4861, 3, 2, 2, 2, 4861, 4864, 3, 2, 2, 2, 4862, 4864, 7, 40, 2, 2, 4863, 4857, 3, 2, 2, 2, 4863, 4862, 3, 2, 2, 2, 4864, 4883, 3, 2, 2, 2, 4865, 4883, 5, 400, 201, 2, 4866, 4883, 5, 276, 139, 2, 4867, 4883, 5, 274, 138, 2, 4868, 4869, 7, 140, 2, 2, 4869, 4870, 5, 498, 250, 2, 4870, 4871, 9, 67, 2, 2, 4871, 4879, 5, 604, 303, 2, 4872, 4873, 7, 1026, 2, 2, 4873, 4874, 5, 498, 250, 2, 4874, 4875, 9, 67, 2, 2, 4875, 4876, 5, 604, 303, 2, 4876, 4878, 3, 2, 2, 2, 4877, 4872, 3, 2, 2, 2, 4878, 4881, 3, 2, 2, 2, 4879, 4877, 3, 2, 2, 2, 4879, 4880, 3, 2, 2, 2, 4880, 4883, 3, 2, 2, 2, 4881, 4879, 3, 2, 2, 2, 4882, 4831, 3, 2, 2, 2, 4882, 4845, 3, 2, 2, 2, 4882, 4855, 3, 2, 2, 2, 4882, 4865, 3, 2, 2, 2, 4882, 4866, 3, 2, 2, 2, 4882, 4867, 3, 2, 2, 2, 4882, 4868, 3, 2, 2, 2, 4883, 441, 3, 2, 2, 2, 4884, 4885, 7, 142, 2, 2, 4885, 4886, 9, 50, 2, 2, 4886, 5036, 7, 406, 2, 2, 4887, 4888, 7, 142, 2, 2, 4888, 4889, 9, 68, 2, 2, 4889, 4892, 7, 351, 2, 2, 4890, 4891, 7, 73, 2, 2, 4891, 4893, 7, 1039, 2, 2, 4892, 4890, 3, 2, 2, 2, 4892, 4893, 3, 2, 2, 2, 4893, 4896, 3, 2, 2, 2, 4894, 4895, 7, 63, 2, 2, 4895, 4897, 5, 530, 266, 2, 4896, 4894, 3, 2, 2, 2, 4896, 4897, 3, 2, 2, 2, 4897, 4905, 3, 2, 2, 2, 4898, 4902, 7, 91, 2, 2, 4899, 4900, 5, 530, 266, 2, 4900, 4901, 7, 1026, 2, 2, 4901, 4903, 3, 2, 2, 2, 4902, 4899, 3, 2, 2, 2, 4902, 4903, 3, 2, 2, 2, 4903, 4904, 3, 2, 2, 2, 4904, 4906, 5, 530, 266, 2, 4905, 4898, 3, 2, 2, 2, 4905, 4906, 3, 2, 2, 2, 4906, 5036, 3, 2, 2, 2, 4907, 4908, 7, 142, 2, 2, 4908, 4910, 5, 446, 224, 2, 4909, 4911, 5, 448, 225, 2, 4910, 4909, 3, 2, 2, 2, 4910, 4911, 3, 2, 2, 2, 4911, 5036, 3, 2, 2, 2, 4912, 4914, 7, 142, 2, 2, 4913, 4915, 7, 369, 2, 2, 4914, 4913, 3, 2, 2, 2, 4914, 4915, 3, 2, 2, 2, 4915, 4916, 3, 2, 2, 2, 4916, 4917, 9, 36, 2, 2, 4917, 4918, 9, 69, 2, 2, 4918, 4921, 5, 500, 251, 2, 4919, 4920, 9, 69, 2, 2, 4920, 4922, 5, 524, 263, 2, 4921, 4919, 3, 2, 2, 2, 4921, 4922, 3, 2, 2, 2, 4922, 4924, 3, 2, 2, 2, 4923, 4925, 5, 448, 225, 2, 4924, 4923, 3, 2, 2, 2, 4924, 4925, 3, 2, 2, 2, 4925, 5036, 3, 2, 2, 2, 4926, 4927, 7, 142, 2, 2, 4927, 4928, 7, 32, 2, 2, 4928, 4930, 9, 2, 2, 2, 4929, 4931, 5, 582, 292, 2, 4930, 4929, 3, 2, 2, 2, 4930, 4931, 3, 2, 2, 2, 4931, 4932, 3, 2, 2, 2, 4932, 5036, 5, 524, 263, 2, 4933, 4934, 7, 142, 2, 2, 4934, 4935, 7, 32, 2, 2, 4935, 4936, 9, 70, 2, 2, 4936, 5036, 5, 498, 250, 2, 4937, 4938, 7, 142, 2, 2, 4938, 4939, 7, 32, 2, 2, 4939, 4940, 7, 576, 2, 2, 4940, 5036, 5, 506, 254, 2, 4941, 4942, 7, 142, 2, 2, 4942, 4943, 7, 344, 2, 2, 4943, 4944, 5, 514, 258, 2, 4944, 4945, 9, 71, 2, 2, 4945, 5036, 3, 2, 2, 2, 4946, 4947, 7, 142, 2, 2, 4947, 5036, 5, 450, 226, 2, 4948, 4949, 7, 142, 2, 2, 4949, 4950, 9, 72, 2, 2, 4950, 4954, 7, 91, 2, 2, 4951, 4952, 5, 530, 266, 2, 4952, 4953, 7, 1026, 2, 2, 4953, 4955, 3, 2, 2, 2, 4954, 4951, 3, 2, 2, 2, 4954, 4955, 3, 2, 2, 2, 4955, 4956, 3, 2, 2, 2, 4956, 5036, 5, 530, 266, 2, 4957, 4958, 7, 142, 2, 2, 4958, 4959, 7, 241, 2, 2, 4959, 4960, 7, 1024, 2, 2, 4960, 4961, 7, 1007, 2, 2, 4961, 4962, 7, 1025, 2, 2, 4962, 5036, 9, 72, 2, 2, 4963, 4964, 7, 142, 2, 2, 4964, 4967, 5, 452, 227, 2, 4965, 4966, 9, 69, 2, 2, 4966, 4968, 5, 524, 263, 2, 4967, 4965, 3, 2, 2, 2, 4967, 4968, 3, 2, 2, 2, 4968, 4970, 3, 2, 2, 2, 4969, 4971, 5, 448, 225, 2, 4970, 4969, 3, 2, 2, 2, 4970, 4971, 3, 2, 2, 2, 4971, 5036, 3, 2, 2, 2, 4972, 4973, 7, 142, 2, 2, 4973, 4974, 9, 73, 2, 2, 4974, 4975, 7, 303, 2, 2, 4975, 5036, 5, 498, 250, 2, 4976, 4977, 7, 142, 2, 2, 4977, 4980, 7, 373, 2, 2, 4978, 4979, 7, 60, 2, 2, 4979, 4981, 5, 506, 254, 2, 4980, 4978, 3, 2, 2, 2, 4980, 4981, 3, 2, 2, 2, 4981, 5036, 3, 2, 2, 2, 4982, 4983, 7, 142, 2, 2, 4983, 4984, 9, 74, 2, 2, 4984, 4985, 9, 69, 2, 2, 4985, 4988, 5, 500, 251, 2, 4986, 4987, 9, 69, 2, 2, 4987, 4989, 5, 524, 263, 2, 4988, 4986, 3, 2, 2, 2, 4988, 4989, 3, 2, 2, 2, 4989, 4992, 3, 2, 2, 2, 4990, 4991, 7, 174, 2, 2, 4991, 4993, 5, 604, 303, 2, 4992, 4990, 3, 2, 2, 2, 4992, 4993, 3, 2, 2, 2, 4993, 5036, 3, 2, 2, 2, 4994, 4995, 7, 142, 2, 2, 4995, 4996, 7, 462, 2, 2, 4996, 4999, 7, 606, 2, 2, 4997, 4998, 9, 69, 2, 2, 4998, 5000, 5, 524, 263, 2, 4999, 4997, 3, 2, 2, 2, 4999, 5000, 3, 2, 2, 2, 5000, 5002, 3, 2, 2, 2, 5001, 5003, 5, 448, 225, 2, 5002, 5001, 3, 2, 2, 2, 5002, 5003, 3, 2, 2, 2, 5003, 5036, 3, 2, 2, 2, 5004, 5005, 7, 142, 2, 2, 5005, 5006, 7, 483, 2, 2, 5006, 5011, 5, 454, 228, 2, 5007, 5008, 7, 1026, 2, 2, 5008, 5010, 5, 454, 228, 2, 5009, 5007, 3, 2, 2, 2, 5010, 5013, 3, 2, 2, 2, 5011, 5009, 3, 2, 2, 2, 5011, 5012, 3, 2, 2, 2, 5012, 5017, 3, 2, 2, 2, 5013, 5011, 3, 2, 2, 2, 5014, 5015, 7, 60, 2, 2, 5015, 5016, 7, 486, 2, 2, 5016, 5018, 5, 530, 266, 2, 5017, 5014, 3, 2, 2, 2, 5017, 5018, 3, 2, 2, 2, 5018, 5019, 3, 2, 2, 2, 5019, 5023, 7, 91, 2, 2, 5020, 5021, 5, 530, 266, 2, 5021, 5022, 7, 1026, 2, 2, 5022, 5024, 3, 2, 2, 2, 5023, 5020, 3, 2, 2, 2, 5023, 5024, 3, 2, 2, 2, 5024, 5025, 3, 2, 2, 2, 5025, 5026, 5, 530, 266, 2, 5026, 5036, 3, 2, 2, 2, 5027, 5028, 7, 142, 2, 2, 5028, 5029, 7, 527, 2, 2, 5029, 5033, 7, 547, 2, 2, 5030, 5031, 7, 60, 2, 2, 5031, 5032, 7, 295, 2, 2, 5032, 5034, 7, 1039, 2, 2, 5033, 5030, 3, 2, 2, 2, 5033, 5034, 3, 2, 2, 2, 5034, 5036, 3, 2, 2, 2, 5035, 4884, 3, 2, 2, 2, 5035, 4887, 3, 2, 2, 2, 5035, 4907, 3, 2, 2, 2, 5035, 4912, 3, 2, 2, 2, 5035, 4926, 3, 2, 2, 2, 5035, 4933, 3, 2, 2, 2, 5035, 4937, 3, 2, 2, 2, 5035, 4941, 3, 2, 2, 2, 5035, 4946, 3, 2, 2, 2, 5035, 4948, 3, 2, 2, 2, 5035, 4957, 3, 2, 2, 2, 5035, 4963, 3, 2, 2, 2, 5035, 4972, 3, 2, 2, 2, 5035, 4976, 3, 2, 2, 2, 5035, 4982, 3, 2, 2, 2, 5035, 4994, 3, 2, 2, 2, 5035, 5004, 3, 2, 2, 2, 5035, 5027, 3, 2, 2, 2, 5036, 443, 3, 2, 2, 2, 5037, 5048, 7, 1050, 2, 2, 5038, 5048, 7, 1051, 2, 2, 5039, 5040, 7, 1028, 2, 2, 5040, 5042, 7, 1028, 2, 2, 5041, 5039, 3, 2, 2, 2, 5041, 5042, 3, 2, 2, 2, 5042, 5043, 3, 2, 2, 2, 5043, 5045, 9, 75, 2, 2, 5044, 5041, 3, 2, 2, 2, 5044, 5045, 3, 2, 2, 2, 5045, 5046, 3, 2, 2, 2, 5046, 5048, 5, 524, 263, 2, 5047, 5037, 3, 2, 2, 2, 5047, 5038, 3, 2, 2, 2, 5047, 5044, 3, 2, 2, 2, 5048, 445, 3, 2, 2, 2, 5049, 5050, 7, 24, 2, 2, 5050, 5063, 7, 140, 2, 2, 5051, 5063, 7, 738, 2, 2, 5052, 5063, 7, 38, 2, 2, 5053, 5063, 7, 138, 2, 2, 5054, 5055, 7, 370, 2, 2, 5055, 5063, 7, 547, 2, 2, 5056, 5057, 7, 119, 2, 2, 5057, 5063, 7, 547, 2, 2, 5058, 5060, 9, 49, 2, 2, 5059, 5058, 3, 2, 2, 2, 5059, 5060, 3, 2, 2, 2, 5060, 5061, 3, 2, 2, 2, 5061, 5063, 9, 76, 2, 2, 5062, 5049, 3, 2, 2, 2, 5062, 5051, 3, 2, 2, 2, 5062, 5052, 3, 2, 2, 2, 5062, 5053, 3, 2, 2, 2, 5062, 5054, 3, 2, 2, 2, 5062, 5056, 3, 2, 2, 2, 5062, 5059, 3, 2, 2, 2, 5063, 447, 3, 2, 2, 2, 5064, 5065, 7, 90, 2, 2, 5065, 5069, 7, 1039, 2, 2, 5066, 5067, 7, 174, 2, 2, 5067, 5069, 5, 604, 303, 2, 5068, 5064, 3, 2, 2, 2, 5068, 5066, 3, 2, 2, 2, 5069, 449, 3, 2, 2, 2, 5070, 5072, 7, 549, 2, 2, 5071, 5070, 3, 2, 2, 2, 5071, 5072, 3, 2, 2, 2, 5072, 5073, 3, 2, 2, 2, 5073, 5088, 7, 345, 2, 2, 5074, 5075, 7, 407, 2, 2, 5075, 5088, 7, 547, 2, 2, 5076, 5088, 7, 476, 2, 2, 5077, 5088, 7, 614, 2, 2, 5078, 5080, 7, 369, 2, 2, 5079, 5078, 3, 2, 2, 2, 5079, 5080, 3, 2, 2, 2, 5080, 5081, 3, 2, 2, 2, 5081, 5088, 7, 482, 2, 2, 5082, 5088, 7, 484, 2, 2, 5083, 5084, 7, 527, 2, 2, 5084, 5088, 7, 379, 2, 2, 5085, 5088, 7, 279, 2, 2, 5086, 5088, 7, 321, 2, 2, 5087, 5071, 3, 2, 2, 2, 5087, 5074, 3, 2, 2, 2, 5087, 5076, 3, 2, 2, 2, 5087, 5077, 3, 2, 2, 2, 5087, 5079, 3, 2, 2, 2, 5087, 5082, 3, 2, 2, 2, 5087, 5083, 3, 2, 2, 2, 5087, 5085, 3, 2, 2, 2, 5087, 5086, 3, 2, 2, 2, 5088, 451, 3, 2, 2, 2, 5089, 5098, 7, 351, 2, 2, 5090, 5091, 7, 156, 2, 2, 5091, 5098, 7, 547, 2, 2, 5092, 5094, 7, 369, 2, 2, 5093, 5092, 3, 2, 2, 2, 5093, 5094, 3, 2, 2, 2, 5094, 5095, 3, 2, 2, 2, 5095, 5098, 7, 606, 2, 2, 5096, 5098, 7, 567, 2, 2, 5097, 5089, 3, 2, 2, 2, 5097, 5090, 3, 2, 2, 2, 5097, 5093, 3, 2, 2, 2, 5097, 5096, 3, 2, 2, 2, 5098, 453, 3, 2, 2, 2, 5099, 5112, 7, 8, 2, 2, 5100, 5101, 7, 287, 2, 2, 5101, 5112, 7, 391, 2, 2, 5102, 5103, 7, 320, 2, 2, 5103, 5112, 7, 558, 2, 2, 5104, 5112, 7, 323, 2, 2, 5105, 5112, 7, 393, 2, 2, 5106, 5112, 7, 686, 2, 2, 5107, 5108, 7, 467, 2, 2, 5108, 5112, 7, 360, 2, 2, 5109, 5112, 7, 534, 2, 2, 5110, 5112, 7, 557, 2, 2, 5111, 5099, 3, 2, 2, 2, 5111, 5100, 3, 2, 2, 2, 5111, 5102, 3, 2, 2, 2, 5111, 5104, 3, 2, 2, 2, 5111, 5105, 3, 2, 2, 2, 5111, 5106, 3, 2, 2, 2, 5111, 5107, 3, 2, 2, 2, 5111, 5109, 3, 2, 2, 2, 5111, 5110, 3, 2, 2, 2, 5112, 455, 3, 2, 2, 2, 5113, 5114, 7, 285, 2, 2, 5114, 5115, 7, 1039, 2, 2, 5115, 457, 3, 2, 2, 2, 5116, 5117, 7, 291, 2, 2, 5117, 5118, 7, 74, 2, 2, 5118, 5123, 5, 470, 236, 2, 5119, 5120, 7, 1026, 2, 2, 5120, 5122, 5, 470, 236, 2, 5121, 5119, 3, 2, 2, 2, 5122, 5125, 3, 2, 2, 2, 5123, 5121, 3, 2, 2, 2, 5123, 5124, 3, 2, 2, 2, 5124, 5133, 3, 2, 2, 2, 5125, 5123, 3, 2, 2, 2, 5126, 5127, 7, 117, 2, 2, 5127, 5130, 7, 1024, 2, 2, 5128, 5131, 5, 556, 279, 2, 5129, 5131, 7, 8, 2, 2, 5130, 5128, 3, 2, 2, 2, 5130, 5129, 3, 2, 2, 2, 5131, 5132, 3, 2, 2, 2, 5132, 5134, 7, 1025, 2, 2, 5133, 5126, 3, 2, 2, 2, 5133, 5134, 3, 2, 2, 2, 5134, 5135, 3, 2, 2, 2, 5135, 5136, 7, 73, 2, 2, 5136, 5137, 5, 524, 263, 2, 5137, 459, 3, 2, 2, 2, 5138, 5140, 7, 366, 2, 2, 5139, 5141, 9, 64, 2, 2, 5140, 5139, 3, 2, 2, 2, 5140, 5141, 3, 2, 2, 2, 5141, 5142, 3, 2, 2, 2, 5142, 5147, 5, 472, 237, 2, 5143, 5144, 7, 1026, 2, 2, 5144, 5146, 5, 472, 237, 2, 5145, 5143, 3, 2, 2, 2, 5146, 5149, 3, 2, 2, 2, 5147, 5145, 3, 2, 2, 2, 5147, 5148, 3, 2, 2, 2, 5148, 461, 3, 2, 2, 2, 5149, 5147, 3, 2, 2, 2, 5150, 5152, 7, 86, 2, 2, 5151, 5153, 9, 77, 2, 2, 5152, 5151, 3, 2, 2, 2, 5152, 5153, 3, 2, 2, 2, 5153, 5155, 3, 2, 2, 2, 5154, 5156, 5, 530, 266, 2, 5155, 5154, 3, 2, 2, 2, 5156, 5157, 3, 2, 2, 2, 5157, 5155, 3, 2, 2, 2, 5157, 5158, 3, 2, 2, 2, 5158, 463, 3, 2, 2, 2, 5159, 5160, 7, 94, 2, 2, 5160, 5161, 7, 74, 2, 2, 5161, 5162, 7, 80, 2, 2, 5162, 5163, 7, 291, 2, 2, 5163, 5168, 5, 476, 239, 2, 5164, 5165, 7, 1026, 2, 2, 5165, 5167, 5, 476, 239, 2, 5166, 5164, 3, 2, 2, 2, 5167, 5170, 3, 2, 2, 2, 5168, 5166, 3, 2, 2, 2, 5168, 5169, 3, 2, 2, 2, 5169, 465, 3, 2, 2, 2, 5170, 5168, 3, 2, 2, 2, 5171, 5172, 7, 507, 2, 2, 5172, 5173, 7, 486, 2, 2, 5173, 5174, 7, 291, 2, 2, 5174, 467, 3, 2, 2, 2, 5175, 5176, 7, 612, 2, 2, 5176, 469, 3, 2, 2, 2, 5177, 5185, 5, 500, 251, 2, 5178, 5180, 9, 20, 2, 2, 5179, 5178, 3, 2, 2, 2, 5179, 5180, 3, 2, 2, 2, 5180, 5181, 3, 2, 2, 2, 5181, 5182, 7, 1024, 2, 2, 5182, 5183, 5, 556, 279, 2, 5183, 5184, 7, 1025, 2, 2, 5184, 5186, 3, 2, 2, 2, 5185, 5179, 3, 2, 2, 2, 5185, 5186, 3, 2, 2, 2, 5186, 471, 3, 2, 2, 2, 5187, 5206, 7, 331, 2, 2, 5188, 5206, 7, 379, 2, 2, 5189, 5191, 9, 78, 2, 2, 5190, 5189, 3, 2, 2, 2, 5190, 5191, 3, 2, 2, 2, 5191, 5192, 3, 2, 2, 2, 5192, 5206, 7, 406, 2, 2, 5193, 5206, 7, 463, 2, 2, 5194, 5206, 7, 614, 2, 2, 5195, 5196, 7, 486, 2, 2, 5196, 5206, 7, 291, 2, 2, 5197, 5206, 7, 547, 2, 2, 5198, 5206, 7, 578, 2, 2, 5199, 5203, 7, 606, 2, 2, 5200, 5201, 7, 176, 2, 2, 5201, 5202, 7, 122, 2, 2, 5202, 5204, 7, 95, 2, 2, 5203, 5200, 3, 2, 2, 2, 5203, 5204, 3, 2, 2, 2, 5204, 5206, 3, 2, 2, 2, 5205, 5187, 3, 2, 2, 2, 5205, 5188, 3, 2, 2, 2, 5205, 5190, 3, 2, 2, 2, 5205, 5193, 3, 2, 2, 2, 5205, 5194, 3, 2, 2, 2, 5205, 5195, 3, 2, 2, 2, 5205, 5197, 3, 2, 2, 2, 5205, 5198, 3, 2, 2, 2, 5205, 5199, 3, 2, 2, 2, 5206, 5218, 3, 2, 2, 2, 5207, 5208, 7, 492, 2, 2, 5208, 5210, 7, 406, 2, 2, 5209, 5211, 5, 314, 158, 2, 5210, 5209, 3, 2, 2, 2, 5210, 5211, 3, 2, 2, 2, 5211, 5218, 3, 2, 2, 2, 5212, 5213, 7, 606, 2, 2, 5213, 5215, 5, 558, 280, 2, 5214, 5216, 5, 474, 238, 2, 5215, 5214, 3, 2, 2, 2, 5215, 5216, 3, 2, 2, 2, 5216, 5218, 3, 2, 2, 2, 5217, 5205, 3, 2, 2, 2, 5217, 5207, 3, 2, 2, 2, 5217, 5212, 3, 2, 2, 2, 5218, 473, 3, 2, 2, 2, 5219, 5220, 7, 176, 2, 2, 5220, 5221, 7, 122, 2, 2, 5221, 5225, 7, 95, 2, 2, 5222, 5223, 7, 60, 2, 2, 5223, 5225, 7, 356, 2, 2, 5224, 5219, 3, 2, 2, 2, 5224, 5222, 3, 2, 2, 2, 5225, 475, 3, 2, 2, 2, 5226, 5234, 5, 500, 251, 2, 5227, 5228, 7, 117, 2, 2, 5228, 5231, 7, 1024, 2, 2, 5229, 5232, 5, 556, 279, 2, 5230, 5232, 7, 8, 2, 2, 5231, 5229, 3, 2, 2, 2, 5231, 5230, 3, 2, 2, 2, 5232, 5233, 3, 2, 2, 2, 5233, 5235, 7, 1025, 2, 2, 5234, 5227, 3, 2, 2, 2, 5234, 5235, 3, 2, 2, 2, 5235, 5243, 3, 2, 2, 2, 5236, 5238, 9, 20, 2, 2, 5237, 5236, 3, 2, 2, 2, 5237, 5238, 3, 2, 2, 2, 5238, 5239, 3, 2, 2, 2, 5239, 5240, 7, 1024, 2, 2, 5240, 5241, 5, 556, 279, 2, 5241, 5242, 7, 1025, 2, 2, 5242, 5244, 3, 2, 2, 2, 5243, 5237, 3, 2, 2, 2, 5243, 5244, 3, 2, 2, 2, 5244, 5247, 3, 2, 2, 2, 5245, 5246, 7, 72, 2, 2, 5246, 5248, 7, 400, 2, 2, 5247, 5245, 3, 2, 2, 2, 5247, 5248, 3, 2, 2, 2, 5248, 477, 3, 2, 2, 2, 5249, 5250, 9, 79, 2, 2, 5250, 5253, 5, 500, 251, 2, 5251, 5254, 5, 524, 263, 2, 5252, 5254, 7, 1039, 2, 2, 5253, 5251, 3, 2, 2, 2, 5253, 5252, 3, 2, 2, 2, 5253, 5254, 3, 2, 2, 2, 5254, 479, 3, 2, 2, 2, 5255, 5259, 9, 79, 2, 2, 5256, 5257, 9, 80, 2, 2, 5257, 5258, 7, 1015, 2, 2, 5258, 5260, 9, 81, 2, 2, 5259, 5256, 3, 2, 2, 2, 5259, 5260, 3, 2, 2, 2, 5260, 5261, 3, 2, 2, 2, 5261, 5262, 5, 496, 249, 2, 5262, 481, 3, 2, 2, 2, 5263, 5264, 7, 377, 2, 2, 5264, 5265, 7, 1039, 2, 2, 5265, 483, 3, 2, 2, 2, 5266, 5267, 7, 170, 2, 2, 5267, 5268, 5, 524, 263, 2, 5268, 485, 3, 2, 2, 2, 5269, 5277, 7, 143, 2, 2, 5270, 5272, 7, 147, 2, 2, 5271, 5273, 7, 580, 2, 2, 5272, 5271, 3, 2, 2, 2, 5272, 5273, 3, 2, 2, 2, 5273, 5274, 3, 2, 2, 2, 5274, 5278, 5, 534, 268, 2, 5275, 5278, 7, 1047, 2, 2, 5276, 5278, 7, 1048, 2, 2, 5277, 5270, 3, 2, 2, 2, 5277, 5275, 3, 2, 2, 2, 5277, 5276, 3, 2, 2, 2, 5278, 5288, 3, 2, 2, 2, 5279, 5280, 7, 140, 2, 2, 5280, 5285, 5, 490, 246, 2, 5281, 5282, 7, 1026, 2, 2, 5282, 5284, 5, 490, 246, 2, 5283, 5281, 3, 2, 2, 2, 5284, 5287, 3, 2, 2, 2, 5285, 5283, 3, 2, 2, 2, 5285, 5286, 3, 2, 2, 2, 5286, 5289, 3, 2, 2, 2, 5287, 5285, 3, 2, 2, 2, 5288, 5279, 3, 2, 2, 2, 5288, 5289, 3, 2, 2, 2, 5289, 487, 3, 2, 2, 2, 5290, 5298, 7, 131, 2, 2, 5291, 5293, 7, 147, 2, 2, 5292, 5294, 7, 580, 2, 2, 5293, 5292, 3, 2, 2, 2, 5293, 5294, 3, 2, 2, 2, 5294, 5295, 3, 2, 2, 2, 5295, 5299, 5, 534, 268, 2, 5296, 5299, 7, 1047, 2, 2, 5297, 5299, 7, 1048, 2, 2, 5298, 5291, 3, 2, 2, 2, 5298, 5296, 3, 2, 2, 2, 5298, 5297, 3, 2, 2, 2, 5298, 5299, 3, 2, 2, 2, 5299, 5309, 3, 2, 2, 2, 5300, 5301, 7, 140, 2, 2, 5301, 5306, 5, 490, 246, 2, 5302, 5303, 7, 1026, 2, 2, 5303, 5305, 5, 490, 246, 2, 5304, 5302, 3, 2, 2, 2, 5305, 5308, 3, 2, 2, 2, 5306, 5304, 3, 2, 2, 2, 5306, 5307, 3, 2, 2, 2, 5307, 5310, 3, 2, 2, 2, 5308, 5306, 3, 2, 2, 2, 5309, 5300, 3, 2, 2, 2, 5309, 5310, 3, 2, 2, 2, 5310, 489, 3, 2, 2, 2, 5311, 5312, 9, 82, 2, 2, 5312, 5315, 7, 1015, 2, 2, 5313, 5316, 5, 534, 268, 2, 5314, 5316, 7, 1040, 2, 2, 5315, 5313, 3, 2, 2, 2, 5315, 5314, 3, 2, 2, 2, 5316, 491, 3, 2, 2, 2, 5317, 5319, 7, 66, 2, 2, 5318, 5320, 9, 83, 2, 2, 5319, 5318, 3, 2, 2, 2, 5319, 5320, 3, 2, 2, 2, 5320, 5321, 3, 2, 2, 2, 5321, 5353, 7, 46, 2, 2, 5322, 5323, 5, 444, 223, 2, 5323, 5324, 7, 1015, 2, 2, 5324, 5332, 9, 84, 2, 2, 5325, 5326, 7, 1026, 2, 2, 5326, 5327, 5, 444, 223, 2, 5327, 5328, 7, 1015, 2, 2, 5328, 5329, 9, 84, 2, 2, 5329, 5331, 3, 2, 2, 2, 5330, 5325, 3, 2, 2, 2, 5331, 5334, 3, 2, 2, 2, 5332, 5330, 3, 2, 2, 2, 5332, 5333, 3, 2, 2, 2, 5333, 5354, 3, 2, 2, 2, 5334, 5332, 3, 2, 2, 2, 5335, 5338, 7, 28, 2, 2, 5336, 5339, 5, 530, 266, 2, 5337, 5339, 5, 444, 223, 2, 5338, 5336, 3, 2, 2, 2, 5338, 5337, 3, 2, 2, 2, 5339, 5340, 3, 2, 2, 2, 5340, 5341, 5, 444, 223, 2, 5341, 5342, 7, 1015, 2, 2, 5342, 5350, 5, 494, 248, 2, 5343, 5344, 7, 1026, 2, 2, 5344, 5345, 5, 444, 223, 2, 5345, 5346, 7, 1015, 2, 2, 5346, 5347, 5, 494, 248, 2, 5347, 5349, 3, 2, 2, 2, 5348, 5343, 3, 2, 2, 2, 5349, 5352, 3, 2, 2, 2, 5350, 5348, 3, 2, 2, 2, 5350, 5351, 3, 2, 2, 2, 5351, 5354, 3, 2, 2, 2, 5352, 5350, 3, 2, 2, 2, 5353, 5322, 3, 2, 2, 2, 5353, 5335, 3, 2, 2, 2, 5354, 493, 3, 2, 2, 2, 5355, 5356, 9, 85, 2, 2, 5356, 495, 3, 2, 2, 2, 5357, 5363, 5, 180, 91, 2, 5358, 5363, 5, 166, 84, 2, 5359, 5363, 5, 172, 87, 2, 5360, 5363, 5, 178, 90, 2, 5361, 5363, 5, 182, 92, 2, 5362, 5357, 3, 2, 2, 2, 5362, 5358, 3, 2, 2, 2, 5362, 5359, 3, 2, 2, 2, 5362, 5360, 3, 2, 2, 2, 5362, 5361, 3, 2, 2, 2, 5363, 5368, 3, 2, 2, 2, 5364, 5365, 7, 60, 2, 2, 5365, 5366, 7, 314, 2, 2, 5366, 5368, 5, 524, 263, 2, 5367, 5362, 3, 2, 2, 2, 5367, 5364, 3, 2, 2, 2, 5368, 497, 3, 2, 2, 2, 5369, 5373, 5, 524, 263, 2, 5370, 5374, 7, 1046, 2, 2, 5371, 5372, 7, 1023, 2, 2, 5372, 5374, 5, 524, 263, 2, 5373, 5370, 3, 2, 2, 2, 5373, 5371, 3, 2, 2, 2, 5373, 5374, 3, 2, 2, 2, 5374, 499, 3, 2, 2, 2, 5375, 5376, 5, 498, 250, 2, 5376, 501, 3, 2, 2, 2, 5377, 5382, 5, 524, 263, 2, 5378, 5380, 5, 528, 265, 2, 5379, 5381, 5, 528, 265, 2, 5380, 5379, 3, 2, 2, 2, 5380, 5381, 3, 2, 2, 2, 5381, 5383, 3, 2, 2, 2, 5382, 5378, 3, 2, 2, 2, 5382, 5383, 3, 2, 2, 2, 5383, 503, 3, 2, 2, 2, 5384, 5387, 5, 524, 263, 2, 5385, 5387, 7, 1039, 2, 2, 5386, 5384, 3, 2, 2, 2, 5386, 5385, 3, 2, 2, 2, 5387, 5392, 3, 2, 2, 2, 5388, 5389, 7, 1024, 2, 2, 5389, 5390, 5, 530, 266, 2, 5390, 5391, 7, 1025, 2, 2, 5391, 5393, 3, 2, 2, 2, 5392, 5388, 3, 2, 2, 2, 5392, 5393, 3, 2, 2, 2, 5393, 5395, 3, 2, 2, 2, 5394, 5396, 9, 43, 2, 2, 5395, 5394, 3, 2, 2, 2, 5395, 5396, 3, 2, 2, 2, 5396, 505, 3, 2, 2, 2, 5397, 5398, 9, 86, 2, 2, 5398, 507, 3, 2, 2, 2, 5399, 5400, 9, 87, 2, 2, 5400, 509, 3, 2, 2, 2, 5401, 5406, 7, 210, 2, 2, 5402, 5406, 5, 626, 314, 2, 5403, 5406, 7, 1039, 2, 2, 5404, 5406, 7, 1036, 2, 2, 5405, 5401, 3, 2, 2, 2, 5405, 5402, 3, 2, 2, 2, 5405, 5403, 3, 2, 2, 2, 5405, 5404, 3, 2, 2, 2, 5406, 511, 3, 2, 2, 2, 5407, 5410, 5, 524, 263, 2, 5408, 5410, 7, 1039, 2, 2, 5409, 5407, 3, 2, 2, 2, 5409, 5408, 3, 2, 2, 2, 5410, 513, 3, 2, 2, 2, 5411, 5412, 9, 88, 2, 2, 5412, 515, 3, 2, 2, 2, 5413, 5414, 5, 530, 266, 2, 5414, 5415, 7, 1012, 2, 2, 5415, 5416, 5, 530, 266, 2, 5416, 5417, 7, 1012, 2, 2, 5417, 5418, 5, 530, 266, 2, 5418, 5419, 7, 1012, 2, 2, 5419, 5420, 5, 530, 266, 2, 5420, 5421, 7, 1012, 2, 2, 5421, 5427, 5, 530, 266, 2, 5422, 5423, 7, 1035, 2, 2, 5423, 5424, 5, 530, 266, 2, 5424, 5425, 7, 1012, 2, 2, 5425, 5426, 5, 530, 266, 2, 5426, 5428, 3, 2, 2, 2, 5427, 5422, 3, 2, 2, 2, 5428, 5429, 3, 2, 2, 2, 5429, 5427, 3, 2, 2, 2, 5429, 5430, 3, 2, 2, 2, 5430, 517, 3, 2, 2, 2, 5431, 5438, 5, 520, 261, 2, 5432, 5433, 7, 1026, 2, 2, 5433, 5436, 5, 520, 261, 2, 5434, 5435, 7, 1026, 2, 2, 5435, 5437, 5, 530, 266, 2, 5436, 5434, 3, 2, 2, 2, 5436, 5437, 3, 2, 2, 2, 5437, 5439, 3, 2, 2, 2, 5438, 5432, 3, 2, 2, 2, 5438, 5439, 3, 2, 2, 2, 5439, 519, 3, 2, 2, 2, 5440, 5448, 7, 1039, 2, 2, 5441, 5448, 7, 1044, 2, 2, 5442, 5444, 7, 1041, 2, 2, 5443, 5442, 3, 2, 2, 2, 5444, 5445, 3, 2, 2, 2, 5445, 5443, 3, 2, 2, 2, 5445, 5446, 3, 2, 2, 2, 5446, 5448, 3, 2, 2, 2, 5447, 5440, 3, 2, 2, 2, 5447, 5441, 3, 2, 2, 2, 5447, 5443, 3, 2, 2, 2, 5448, 521, 3, 2, 2, 2, 5449, 5452, 5, 524, 263, 2, 5450, 5452, 7, 1039, 2, 2, 5451, 5449, 3, 2, 2, 2, 5451, 5450, 3, 2, 2, 2, 5452, 523, 3, 2, 2, 2, 5453, 5457, 5, 526, 264, 2, 5454, 5457, 7, 1048, 2, 2, 5455, 5457, 7, 1036, 2, 2, 5456, 5453, 3, 2, 2, 2, 5456, 5454, 3, 2, 2, 2, 5456, 5455, 3, 2, 2, 2, 5457, 525, 3, 2, 2, 2, 5458, 5468, 7, 1047, 2, 2, 5459, 5468, 5, 626, 314, 2, 5460, 5468, 5, 628, 315, 2, 5461, 5468, 5, 514, 258, 2, 5462, 5468, 5, 630, 316, 2, 5463, 5468, 5, 632, 317, 2, 5464, 5468, 5, 634, 318, 2, 5465, 5468, 5, 636, 319, 2, 5466, 5468, 5, 638, 320, 2, 5467, 5458, 3, 2, 2, 2, 5467, 5459, 3, 2, 2, 2, 5467, 5460, 3, 2, 2, 2, 5467, 5461, 3, 2, 2, 2, 5467, 5462, 3, 2, 2, 2, 5467, 5463, 3, 2, 2, 2, 5467, 5464, 3, 2, 2, 2, 5467, 5465, 3, 2, 2, 2, 5467, 5466, 3, 2, 2, 2, 5468, 527, 3, 2, 2, 2, 5469, 5473, 7, 1046, 2, 2, 5470, 5471, 7, 1023, 2, 2, 5471, 5473, 5, 524, 263, 2, 5472, 5469, 3, 2, 2, 2, 5472, 5470, 3, 2, 2, 2, 5473, 529, 3, 2, 2, 2, 5474, 5475, 9, 89, 2, 2, 5475, 531, 3, 2, 2, 2, 5476, 5479, 7, 1037, 2, 2, 5477, 5479, 5, 530, 266, 2, 5478, 5476, 3, 2, 2, 2, 5478, 5477, 3, 2, 2, 2, 5479, 533, 3, 2, 2, 2, 5480, 5482, 7, 1045, 2, 2, 5481, 5480, 3, 2, 2, 2, 5481, 5482, 3, 2, 2, 2, 5482, 5483, 3, 2, 2, 2, 5483, 5486, 7, 1039, 2, 2, 5484, 5486, 7, 1038, 2, 2, 5485, 5481, 3, 2, 2, 2, 5485, 5484, 3, 2, 2, 2, 5486, 5488, 3, 2, 2, 2, 5487, 5489, 7, 1039, 2, 2, 5488, 5487, 3, 2, 2, 2, 5489, 5490, 3, 2, 2, 2, 5490, 5488, 3, 2, 2, 2, 5490, 5491, 3, 2, 2, 2, 5491, 5504, 3, 2, 2, 2, 5492, 5494, 7, 1045, 2, 2, 5493, 5492, 3, 2, 2, 2, 5493, 5494, 3, 2, 2, 2, 5494, 5495, 3, 2, 2, 2, 5495, 5498, 7, 1039, 2, 2, 5496, 5498, 7, 1038, 2, 2, 5497, 5493, 3, 2, 2, 2, 5497, 5496, 3, 2, 2, 2, 5498, 5501, 3, 2, 2, 2, 5499, 5500, 7, 26, 2, 2, 5500, 5502, 5, 512, 257, 2, 5501, 5499, 3, 2, 2, 2, 5501, 5502, 3, 2, 2, 2, 5502, 5504, 3, 2, 2, 2, 5503, 5485, 3, 2, 2, 2, 5503, 5497, 3, 2, 2, 2, 5504, 535, 3, 2, 2, 2, 5505, 5506, 9, 90, 2, 2, 5506, 537, 3, 2, 2, 2, 5507, 5509, 7, 1045, 2, 2, 5508, 5507, 3, 2, 2, 2, 5508, 5509, 3, 2, 2, 2, 5509, 5510, 3, 2, 2, 2, 5510, 5511, 7, 1041, 2, 2, 5511, 539, 3, 2, 2, 2, 5512, 5514, 7, 104, 2, 2, 5513, 5512, 3, 2, 2, 2, 5513, 5514, 3, 2, 2, 2, 5514, 5515, 3, 2, 2, 2, 5515, 5516, 9, 91, 2, 2, 5516, 541, 3, 2, 2, 2, 5517, 5530, 5, 534, 268, 2, 5518, 5530, 5, 530, 266, 2, 5519, 5520, 7, 1012, 2, 2, 5520, 5530, 5, 530, 266, 2, 5521, 5530, 5, 538, 270, 2, 5522, 5530, 5, 536, 269, 2, 5523, 5530, 7, 1042, 2, 2, 5524, 5530, 7, 1044, 2, 2, 5525, 5527, 7, 104, 2, 2, 5526, 5525, 3, 2, 2, 2, 5526, 5527, 3, 2, 2, 2, 5527, 5528, 3, 2, 2, 2, 5528, 5530, 9, 91, 2, 2, 5529, 5517, 3, 2, 2, 2, 5529, 5518, 3, 2, 2, 2, 5529, 5519, 3, 2, 2, 2, 5529, 5521, 3, 2, 2, 2, 5529, 5522, 3, 2, 2, 2, 5529, 5523, 3, 2, 2, 2, 5529, 5524, 3, 2, 2, 2, 5529, 5526, 3, 2, 2, 2, 5530, 543, 3, 2, 2, 2, 5531, 5533, 9, 92, 2, 2, 5532, 5534, 5, 550, 276, 2, 5533, 5532, 3, 2, 2, 2, 5533, 5534, 3, 2, 2, 2, 5534, 5536, 3, 2, 2, 2, 5535, 5537, 7, 210, 2, 2, 5536, 5535, 3, 2, 2, 2, 5536, 5537, 3, 2, 2, 2, 5537, 5544, 3, 2, 2, 2, 5538, 5539, 7, 24, 2, 2, 5539, 5542, 7, 140, 2, 2, 5540, 5542, 7, 735, 2, 2, 5541, 5538, 3, 2, 2, 2, 5541, 5540, 3, 2, 2, 2, 5542, 5543, 3, 2, 2, 2, 5543, 5545, 5, 510, 256, 2, 5544, 5541, 3, 2, 2, 2, 5544, 5545, 3, 2, 2, 2, 5545, 5548, 3, 2, 2, 2, 5546, 5547, 7, 26, 2, 2, 5547, 5549, 5, 512, 257, 2, 5548, 5546, 3, 2, 2, 2, 5548, 5549, 3, 2, 2, 2, 5549, 5638, 3, 2, 2, 2, 5550, 5551, 7, 209, 2, 2, 5551, 5553, 9, 93, 2, 2, 5552, 5554, 5, 550, 276, 2, 5553, 5552, 3, 2, 2, 2, 5553, 5554, 3, 2, 2, 2, 5554, 5556, 3, 2, 2, 2, 5555, 5557, 7, 210, 2, 2, 5556, 5555, 3, 2, 2, 2, 5556, 5557, 3, 2, 2, 2, 5557, 5638, 3, 2, 2, 2, 5558, 5559, 7, 448, 2, 2, 5559, 5561, 7, 207, 2, 2, 5560, 5562, 5, 550, 276, 2, 5561, 5560, 3, 2, 2, 2, 5561, 5562, 3, 2, 2, 2, 5562, 5564, 3, 2, 2, 2, 5563, 5565, 7, 210, 2, 2, 5564, 5563, 3, 2, 2, 2, 5564, 5565, 3, 2, 2, 2, 5565, 5638, 3, 2, 2, 2, 5566, 5567, 7, 209, 2, 2, 5567, 5568, 9, 94, 2, 2, 5568, 5570, 7, 222, 2, 2, 5569, 5571, 5, 550, 276, 2, 5570, 5569, 3, 2, 2, 2, 5570, 5571, 3, 2, 2, 2, 5571, 5573, 3, 2, 2, 2, 5572, 5574, 7, 210, 2, 2, 5573, 5572, 3, 2, 2, 2, 5573, 5574, 3, 2, 2, 2, 5574, 5638, 3, 2, 2, 2, 5575, 5577, 9, 95, 2, 2, 5576, 5578, 5, 550, 276, 2, 5577, 5576, 3, 2, 2, 2, 5577, 5578, 3, 2, 2, 2, 5578, 5580, 3, 2, 2, 2, 5579, 5581, 9, 96, 2, 2, 5580, 5579, 3, 2, 2, 2, 5580, 5581, 3, 2, 2, 2, 5581, 5583, 3, 2, 2, 2, 5582, 5584, 7, 179, 2, 2, 5583, 5582, 3, 2, 2, 2, 5583, 5584, 3, 2, 2, 2, 5584, 5638, 3, 2, 2, 2, 5585, 5587, 7, 192, 2, 2, 5586, 5588, 5, 552, 277, 2, 5587, 5586, 3, 2, 2, 2, 5587, 5588, 3, 2, 2, 2, 5588, 5590, 3, 2, 2, 2, 5589, 5591, 9, 96, 2, 2, 5590, 5589, 3, 2, 2, 2, 5590, 5591, 3, 2, 2, 2, 5591, 5593, 3, 2, 2, 2, 5592, 5594, 7, 179, 2, 2, 5593, 5592, 3, 2, 2, 2, 5593, 5594, 3, 2, 2, 2, 5594, 5638, 3, 2, 2, 2, 5595, 5597, 7, 193, 2, 2, 5596, 5598, 7, 194, 2, 2, 5597, 5596, 3, 2, 2, 2, 5597, 5598, 3, 2, 2, 2, 5598, 5600, 3, 2, 2, 2, 5599, 5601, 5, 552, 277, 2, 5600, 5599, 3, 2, 2, 2, 5600, 5601, 3, 2, 2, 2, 5601, 5603, 3, 2, 2, 2, 5602, 5604, 9, 96, 2, 2, 5603, 5602, 3, 2, 2, 2, 5603, 5604, 3, 2, 2, 2, 5604, 5606, 3, 2, 2, 2, 5605, 5607, 7, 179, 2, 2, 5606, 5605, 3, 2, 2, 2, 5606, 5607, 3, 2, 2, 2, 5607, 5638, 3, 2, 2, 2, 5608, 5610, 9, 97, 2, 2, 5609, 5611, 5, 554, 278, 2, 5610, 5609, 3, 2, 2, 2, 5610, 5611, 3, 2, 2, 2, 5611, 5613, 3, 2, 2, 2, 5612, 5614, 9, 96, 2, 2, 5613, 5612, 3, 2, 2, 2, 5613, 5614, 3, 2, 2, 2, 5614, 5616, 3, 2, 2, 2, 5615, 5617, 7, 179, 2, 2, 5616, 5615, 3, 2, 2, 2, 5616, 5617, 3, 2, 2, 2, 5617, 5638, 3, 2, 2, 2, 5618, 5638, 9, 98, 2, 2, 5619, 5621, 9, 99, 2, 2, 5620, 5622, 5, 550, 276, 2, 5621, 5620, 3, 2, 2, 2, 5621, 5622, 3, 2, 2, 2, 5622, 5638, 3, 2, 2, 2, 5623, 5624, 9, 100, 2, 2, 5624, 5626, 5, 546, 274, 2, 5625, 5627, 7, 210, 2, 2, 5626, 5625, 3, 2, 2, 2, 5626, 5627, 3, 2, 2, 2, 5627, 5634, 3, 2, 2, 2, 5628, 5629, 7, 24, 2, 2, 5629, 5632, 7, 140, 2, 2, 5630, 5632, 7, 735, 2, 2, 5631, 5628, 3, 2, 2, 2, 5631, 5630, 3, 2, 2, 2, 5632, 5633, 3, 2, 2, 2, 5633, 5635, 5, 510, 256, 2, 5634, 5631, 3, 2, 2, 2, 5634, 5635, 3, 2, 2, 2, 5635, 5638, 3, 2, 2, 2, 5636, 5638, 9, 101, 2, 2, 5637, 5531, 3, 2, 2, 2, 5637, 5550, 3, 2, 2, 2, 5637, 5558, 3, 2, 2, 2, 5637, 5566, 3, 2, 2, 2, 5637, 5575, 3, 2, 2, 2, 5637, 5585, 3, 2, 2, 2, 5637, 5595, 3, 2, 2, 2, 5637, 5608, 3, 2, 2, 2, 5637, 5618, 3, 2, 2, 2, 5637, 5619, 3, 2, 2, 2, 5637, 5623, 3, 2, 2, 2, 5637, 5636, 3, 2, 2, 2, 5638, 545, 3, 2, 2, 2, 5639, 5640, 7, 1024, 2, 2, 5640, 5645, 7, 1039, 2, 2, 5641, 5642, 7, 1026, 2, 2, 5642, 5644, 7, 1039, 2, 2, 5643, 5641, 3, 2, 2, 2, 5644, 5647, 3, 2, 2, 2, 5645, 5643, 3, 2, 2, 2, 5645, 5646, 3, 2, 2, 2, 5646, 5648, 3, 2, 2, 2, 5647, 5645, 3, 2, 2, 2, 5648, 5649, 7, 1025, 2, 2, 5649, 547, 3, 2, 2, 2, 5650, 5652, 9, 102, 2, 2, 5651, 5653, 5, 550, 276, 2, 5652, 5651, 3, 2, 2, 2, 5652, 5653, 3, 2, 2, 2, 5653, 5676, 3, 2, 2, 2, 5654, 5656, 7, 206, 2, 2, 5655, 5657, 5, 550, 276, 2, 5656, 5655, 3, 2, 2, 2, 5656, 5657, 3, 2, 2, 2, 5657, 5664, 3, 2, 2, 2, 5658, 5659, 7, 24, 2, 2, 5659, 5662, 7, 140, 2, 2, 5660, 5662, 7, 735, 2, 2, 5661, 5658, 3, 2, 2, 2, 5661, 5660, 3, 2, 2, 2, 5662, 5663, 3, 2, 2, 2, 5663, 5665, 5, 510, 256, 2, 5664, 5661, 3, 2, 2, 2, 5664, 5665, 3, 2, 2, 2, 5665, 5676, 3, 2, 2, 2, 5666, 5676, 9, 103, 2, 2, 5667, 5669, 7, 198, 2, 2, 5668, 5670, 5, 552, 277, 2, 5669, 5668, 3, 2, 2, 2, 5669, 5670, 3, 2, 2, 2, 5670, 5676, 3, 2, 2, 2, 5671, 5673, 9, 96, 2, 2, 5672, 5674, 7, 190, 2, 2, 5673, 5672, 3, 2, 2, 2, 5673, 5674, 3, 2, 2, 2, 5674, 5676, 3, 2, 2, 2, 5675, 5650, 3, 2, 2, 2, 5675, 5654, 3, 2, 2, 2, 5675, 5666, 3, 2, 2, 2, 5675, 5667, 3, 2, 2, 2, 5675, 5671, 3, 2, 2, 2, 5676, 549, 3, 2, 2, 2, 5677, 5678, 7, 1024, 2, 2, 5678, 5679, 5, 530, 266, 2, 5679, 5680, 7, 1025, 2, 2, 5680, 551, 3, 2, 2, 2, 5681, 5682, 7, 1024, 2, 2, 5682, 5683, 5, 530, 266, 2, 5683, 5684, 7, 1026, 2, 2, 5684, 5685, 5, 530, 266, 2, 5685, 5686, 7, 1025, 2, 2, 5686, 553, 3, 2, 2, 2, 5687, 5688, 7, 1024, 2, 2, 5688, 5691, 5, 530, 266, 2, 5689, 5690, 7, 1026, 2, 2, 5690, 5692, 5, 530, 266, 2, 5691, 5689, 3, 2, 2, 2, 5691, 5692, 3, 2, 2, 2, 5692, 5693, 3, 2, 2, 2, 5693, 5694, 7, 1025, 2, 2, 5694, 555, 3, 2, 2, 2, 5695, 5700, 5, 524, 263, 2, 5696, 5697, 7, 1026, 2, 2, 5697, 5699, 5, 524, 263, 2, 5698, 5696, 3, 2, 2, 2, 5699, 5702, 3, 2, 2, 2, 5700, 5698, 3, 2, 2, 2, 5700, 5701, 3, 2, 2, 2, 5701, 557, 3, 2, 2, 2, 5702, 5700, 3, 2, 2, 2, 5703, 5708, 5, 500, 251, 2, 5704, 5705, 7, 1026, 2, 2, 5705, 5707, 5, 500, 251, 2, 5706, 5704, 3, 2, 2, 2, 5707, 5710, 3, 2, 2, 2, 5708, 5706, 3, 2, 2, 2, 5708, 5709, 3, 2, 2, 2, 5709, 559, 3, 2, 2, 2, 5710, 5708, 3, 2, 2, 2, 5711, 5712, 7, 1024, 2, 2, 5712, 5717, 5, 504, 253, 2, 5713, 5714, 7, 1026, 2, 2, 5714, 5716, 5, 504, 253, 2, 5715, 5713, 3, 2, 2, 2, 5716, 5719, 3, 2, 2, 2, 5717, 5715, 3, 2, 2, 2, 5717, 5718, 3, 2, 2, 2, 5718, 5720, 3, 2, 2, 2, 5719, 5717, 3, 2, 2, 2, 5720, 5721, 7, 1025, 2, 2, 5721, 561, 3, 2, 2, 2, 5722, 5727, 5, 604, 303, 2, 5723, 5724, 7, 1026, 2, 2, 5724, 5726, 5, 604, 303, 2, 5725, 5723, 3, 2, 2, 2, 5726, 5729, 3, 2, 2, 2, 5727, 5725, 3, 2, 2, 2, 5727, 5728, 3, 2, 2, 2, 5728, 563, 3, 2, 2, 2, 5729, 5727, 3, 2, 2, 2, 5730, 5735, 5, 608, 305, 2, 5731, 5732, 7, 1026, 2, 2, 5732, 5734, 5, 608, 305, 2, 5733, 5731, 3, 2, 2, 2, 5734, 5737, 3, 2, 2, 2, 5735, 5733, 3, 2, 2, 2, 5735, 5736, 3, 2, 2, 2, 5736, 565, 3, 2, 2, 2, 5737, 5735, 3, 2, 2, 2, 5738, 5743, 5, 578, 290, 2, 5739, 5740, 7, 1026, 2, 2, 5740, 5742, 5, 578, 290, 2, 5741, 5739, 3, 2, 2, 2, 5742, 5745, 3, 2, 2, 2, 5743, 5741, 3, 2, 2, 2, 5743, 5744, 3, 2, 2, 2, 5744, 567, 3, 2, 2, 2, 5745, 5743, 3, 2, 2, 2, 5746, 5751, 5, 542, 272, 2, 5747, 5748, 7, 1026, 2, 2, 5748, 5750, 5, 542, 272, 2, 5749, 5747, 3, 2, 2, 2, 5750, 5753, 3, 2, 2, 2, 5751, 5749, 3, 2, 2, 2, 5751, 5752, 3, 2, 2, 2, 5752, 569, 3, 2, 2, 2, 5753, 5751, 3, 2, 2, 2, 5754, 5759, 7, 1039, 2, 2, 5755, 5756, 7, 1026, 2, 2, 5756, 5758, 7, 1039, 2, 2, 5757, 5755, 3, 2, 2, 2, 5758, 5761, 3, 2, 2, 2, 5759, 5757, 3, 2, 2, 2, 5759, 5760, 3, 2, 2, 2, 5760, 571, 3, 2, 2, 2, 5761, 5759, 3, 2, 2, 2, 5762, 5767, 7, 1050, 2, 2, 5763, 5764, 7, 1026, 2, 2, 5764, 5766, 7, 1050, 2, 2, 5765, 5763, 3, 2, 2, 2, 5766, 5769, 3, 2, 2, 2, 5767, 5765, 3, 2, 2, 2, 5767, 5768, 3, 2, 2, 2, 5768, 573, 3, 2, 2, 2, 5769, 5767, 3, 2, 2, 2, 5770, 5782, 7, 106, 2, 2, 5771, 5773, 5, 616, 309, 2, 5772, 5771, 3, 2, 2, 2, 5772, 5773, 3, 2, 2, 2, 5773, 5774, 3, 2, 2, 2, 5774, 5782, 5, 542, 272, 2, 5775, 5779, 5, 576, 289, 2, 5776, 5777, 7, 108, 2, 2, 5777, 5778, 7, 168, 2, 2, 5778, 5780, 5, 576, 289, 2, 5779, 5776, 3, 2, 2, 2, 5779, 5780, 3, 2, 2, 2, 5780, 5782, 3, 2, 2, 2, 5781, 5770, 3, 2, 2, 2, 5781, 5772, 3, 2, 2, 2, 5781, 5775, 3, 2, 2, 2, 5782, 575, 3, 2, 2, 2, 5783, 5789, 9, 104, 2, 2, 5784, 5786, 7, 1024, 2, 2, 5785, 5787, 5, 530, 266, 2, 5786, 5785, 3, 2, 2, 2, 5786, 5787, 3, 2, 2, 2, 5787, 5788, 3, 2, 2, 2, 5788, 5790, 7, 1025, 2, 2, 5789, 5784, 3, 2, 2, 2, 5789, 5790, 3, 2, 2, 2, 5790, 5798, 3, 2, 2, 2, 5791, 5792, 7, 263, 2, 2, 5792, 5794, 7, 1024, 2, 2, 5793, 5795, 5, 530, 266, 2, 5794, 5793, 3, 2, 2, 2, 5794, 5795, 3, 2, 2, 2, 5795, 5796, 3, 2, 2, 2, 5796, 5798, 7, 1025, 2, 2, 5797, 5783, 3, 2, 2, 2, 5797, 5791, 3, 2, 2, 2, 5798, 577, 3, 2, 2, 2, 5799, 5802, 5, 604, 303, 2, 5800, 5802, 7, 40, 2, 2, 5801, 5799, 3, 2, 2, 2, 5801, 5800, 3, 2, 2, 2, 5802, 579, 3, 2, 2, 2, 5803, 5804, 7, 71, 2, 2, 5804, 5805, 7, 55, 2, 2, 5805, 581, 3, 2, 2, 2, 5806, 5807, 7, 71, 2, 2, 5807, 5808, 7, 104, 2, 2, 5808, 5809, 7, 55, 2, 2, 5809, 583, 3, 2, 2, 2, 5810, 5828, 5, 586, 294, 2, 5811, 5828, 5, 594, 298, 2, 5812, 5813, 5, 596, 299, 2, 5813, 5815, 7, 1024, 2, 2, 5814, 5816, 5, 600, 301, 2, 5815, 5814, 3, 2, 2, 2, 5815, 5816, 3, 2, 2, 2, 5816, 5817, 3, 2, 2, 2, 5817, 5818, 7, 1025, 2, 2, 5818, 5828, 3, 2, 2, 2, 5819, 5820, 5, 498, 250, 2, 5820, 5822, 7, 1024, 2, 2, 5821, 5823, 5, 600, 301, 2, 5822, 5821, 3, 2, 2, 2, 5822, 5823, 3, 2, 2, 2, 5823, 5824, 3, 2, 2, 2, 5824, 5825, 7, 1025, 2, 2, 5825, 5828, 3, 2, 2, 2, 5826, 5828, 5, 598, 300, 2, 5827, 5810, 3, 2, 2, 2, 5827, 5811, 3, 2, 2, 2, 5827, 5812, 3, 2, 2, 2, 5827, 5819, 3, 2, 2, 2, 5827, 5826, 3, 2, 2, 2, 5828, 585, 3, 2, 2, 2, 5829, 5987, 9, 105, 2, 2, 5830, 5831, 7, 31, 2, 2, 5831, 5832, 7, 1024, 2, 2, 5832, 5833, 5, 604, 303, 2, 5833, 5834, 7, 1026, 2, 2, 5834, 5835, 5, 548, 275, 2, 5835, 5836, 7, 1025, 2, 2, 5836, 5987, 3, 2, 2, 2, 5837, 5838, 7, 31, 2, 2, 5838, 5839, 7, 1024, 2, 2, 5839, 5840, 5, 604, 303, 2, 5840, 5841, 7, 171, 2, 2, 5841, 5842, 5, 510, 256, 2, 5842, 5843, 7, 1025, 2, 2, 5843, 5987, 3, 2, 2, 2, 5844, 5845, 7, 22, 2, 2, 5845, 5846, 7, 1024, 2, 2, 5846, 5847, 5, 604, 303, 2, 5847, 5848, 7, 13, 2, 2, 5848, 5849, 5, 548, 275, 2, 5849, 5850, 7, 1025, 2, 2, 5850, 5987, 3, 2, 2, 2, 5851, 5852, 7, 172, 2, 2, 5852, 5853, 7, 1024, 2, 2, 5853, 5854, 5, 502, 252, 2, 5854, 5855, 7, 1025, 2, 2, 5855, 5987, 3, 2, 2, 2, 5856, 5857, 7, 21, 2, 2, 5857, 5859, 5, 604, 303, 2, 5858, 5860, 5, 588, 295, 2, 5859, 5858, 3, 2, 2, 2, 5860, 5861, 3, 2, 2, 2, 5861, 5859, 3, 2, 2, 2, 5861, 5862, 3, 2, 2, 2, 5862, 5865, 3, 2, 2, 2, 5863, 5864, 7, 51, 2, 2, 5864, 5866, 5, 602, 302, 2, 5865, 5863, 3, 2, 2, 2, 5865, 5866, 3, 2, 2, 2, 5866, 5867, 3, 2, 2, 2, 5867, 5868, 7, 342, 2, 2, 5868, 5987, 3, 2, 2, 2, 5869, 5871, 7, 21, 2, 2, 5870, 5872, 5, 588, 295, 2, 5871, 5870, 3, 2, 2, 2, 5872, 5873, 3, 2, 2, 2, 5873, 5871, 3, 2, 2, 2, 5873, 5874, 3, 2, 2, 2, 5874, 5877, 3, 2, 2, 2, 5875, 5876, 7, 51, 2, 2, 5876, 5878, 5, 602, 302, 2, 5877, 5875, 3, 2, 2, 2, 5877, 5878, 3, 2, 2, 2, 5878, 5879, 3, 2, 2, 2, 5879, 5880, 7, 342, 2, 2, 5880, 5987, 3, 2, 2, 2, 5881, 5882, 7, 206, 2, 2, 5882, 5883, 7, 1024, 2, 2, 5883, 5886, 5, 600, 301, 2, 5884, 5885, 7, 171, 2, 2, 5885, 5887, 5, 510, 256, 2, 5886, 5884, 3, 2, 2, 2, 5886, 5887, 3, 2, 2, 2, 5887, 5888, 3, 2, 2, 2, 5888, 5889, 7, 1025, 2, 2, 5889, 5987, 3, 2, 2, 2, 5890, 5891, 7, 264, 2, 2, 5891, 5894, 7, 1024, 2, 2, 5892, 5895, 5, 534, 268, 2, 5893, 5895, 5, 604, 303, 2, 5894, 5892, 3, 2, 2, 2, 5894, 5893, 3, 2, 2, 2, 5895, 5896, 3, 2, 2, 2, 5896, 5899, 7, 73, 2, 2, 5897, 5900, 5, 534, 268, 2, 5898, 5900, 5, 604, 303, 2, 5899, 5897, 3, 2, 2, 2, 5899, 5898, 3, 2, 2, 2, 5900, 5901, 3, 2, 2, 2, 5901, 5902, 7, 1025, 2, 2, 5902, 5987, 3, 2, 2, 2, 5903, 5904, 9, 106, 2, 2, 5904, 5907, 7, 1024, 2, 2, 5905, 5908, 5, 534, 268, 2, 5906, 5908, 5, 604, 303, 2, 5907, 5905, 3, 2, 2, 2, 5907, 5906, 3, 2, 2, 2, 5908, 5909, 3, 2, 2, 2, 5909, 5912, 7, 63, 2, 2, 5910, 5913, 5, 530, 266, 2, 5911, 5913, 5, 604, 303, 2, 5912, 5910, 3, 2, 2, 2, 5912, 5911, 3, 2, 2, 2, 5913, 5919, 3, 2, 2, 2, 5914, 5917, 7, 60, 2, 2, 5915, 5918, 5, 530, 266, 2, 5916, 5918, 5, 604, 303, 2, 5917, 5915, 3, 2, 2, 2, 5917, 5916, 3, 2, 2, 2, 5918, 5920, 3, 2, 2, 2, 5919, 5914, 3, 2, 2, 2, 5919, 5920, 3, 2, 2, 2, 5920, 5921, 3, 2, 2, 2, 5921, 5922, 7, 1025, 2, 2, 5922, 5987, 3, 2, 2, 2, 5923, 5924, 7, 268, 2, 2, 5924, 5925, 7, 1024, 2, 2, 5925, 5928, 9, 107, 2, 2, 5926, 5929, 5, 534, 268, 2, 5927, 5929, 5, 604, 303, 2, 5928, 5926, 3, 2, 2, 2, 5928, 5927, 3, 2, 2, 2, 5928, 5929, 3, 2, 2, 2, 5929, 5930, 3, 2, 2, 2, 5930, 5933, 7, 63, 2, 2, 5931, 5934, 5, 534, 268, 2, 5932, 5934, 5, 604, 303, 2, 5933, 5931, 3, 2, 2, 2, 5933, 5932, 3, 2, 2, 2, 5934, 5935, 3, 2, 2, 2, 5935, 5936, 7, 1025, 2, 2, 5936, 5987, 3, 2, 2, 2, 5937, 5938, 7, 268, 2, 2, 5938, 5941, 7, 1024, 2, 2, 5939, 5942, 5, 534, 268, 2, 5940, 5942, 5, 604, 303, 2, 5941, 5939, 3, 2, 2, 2, 5941, 5940, 3, 2, 2, 2, 5942, 5943, 3, 2, 2, 2, 5943, 5946, 7, 63, 2, 2, 5944, 5947, 5, 534, 268, 2, 5945, 5947, 5, 604, 303, 2, 5946, 5944, 3, 2, 2, 2, 5946, 5945, 3, 2, 2, 2, 5947, 5948, 3, 2, 2, 2, 5948, 5949, 7, 1025, 2, 2, 5949, 5987, 3, 2, 2, 2, 5950, 5951, 7, 993, 2, 2, 5951, 5954, 7, 1024, 2, 2, 5952, 5955, 5, 534, 268, 2, 5953, 5955, 5, 604, 303, 2, 5954, 5952, 3, 2, 2, 2, 5954, 5953, 3, 2, 2, 2, 5955, 5962, 3, 2, 2, 2, 5956, 5957, 7, 13, 2, 2, 5957, 5958, 9, 108, 2, 2, 5958, 5959, 7, 1024, 2, 2, 5959, 5960, 5, 530, 266, 2, 5960, 5961, 7, 1025, 2, 2, 5961, 5963, 3, 2, 2, 2, 5962, 5956, 3, 2, 2, 2, 5962, 5963, 3, 2, 2, 2, 5963, 5965, 3, 2, 2, 2, 5964, 5966, 5, 590, 296, 2, 5965, 5964, 3, 2, 2, 2, 5965, 5966, 3, 2, 2, 2, 5966, 5967, 3, 2, 2, 2, 5967, 5968, 7, 1025, 2, 2, 5968, 5987, 3, 2, 2, 2, 5969, 5970, 7, 261, 2, 2, 5970, 5971, 7, 1024, 2, 2, 5971, 5972, 5, 60, 31, 2, 5972, 5975, 7, 63, 2, 2, 5973, 5976, 5, 534, 268, 2, 5974, 5976, 5, 604, 303, 2, 5975, 5973, 3, 2, 2, 2, 5975, 5974, 3, 2, 2, 2, 5976, 5977, 3, 2, 2, 2, 5977, 5978, 7, 1025, 2, 2, 5978, 5987, 3, 2, 2, 2, 5979, 5980, 7, 793, 2, 2, 5980, 5981, 7, 1024, 2, 2, 5981, 5982, 9, 109, 2, 2, 5982, 5983, 7, 1026, 2, 2, 5983, 5984, 5, 534, 268, 2, 5984, 5985, 7, 1025, 2, 2, 5985, 5987, 3, 2, 2, 2, 5986, 5829, 3, 2, 2, 2, 5986, 5830, 3, 2, 2, 2, 5986, 5837, 3, 2, 2, 2, 5986, 5844, 3, 2, 2, 2, 5986, 5851, 3, 2, 2, 2, 5986, 5856, 3, 2, 2, 2, 5986, 5869, 3, 2, 2, 2, 5986, 5881, 3, 2, 2, 2, 5986, 5890, 3, 2, 2, 2, 5986, 5903, 3, 2, 2, 2, 5986, 5923, 3, 2, 2, 2, 5986, 5937, 3, 2, 2, 2, 5986, 5950, 3, 2, 2, 2, 5986, 5969, 3, 2, 2, 2, 5986, 5979, 3, 2, 2, 2, 5987, 587, 3, 2, 2, 2, 5988, 5989, 7, 173, 2, 2, 5989, 5990, 5, 602, 302, 2, 5990, 5991, 7, 158, 2, 2, 5991, 5992, 5, 602, 302, 2, 5992, 589, 3, 2, 2, 2, 5993, 5994, 7, 402, 2, 2, 5994, 5999, 5, 592, 297, 2, 5995, 5996, 7, 1026, 2, 2, 5996, 5998, 5, 592, 297, 2, 5997, 5995, 3, 2, 2, 2, 5998, 6001, 3, 2, 2, 2, 5999, 5997, 3, 2, 2, 2, 5999, 6000, 3, 2, 2, 2, 6000, 6008, 3, 2, 2, 2, 6001, 5999, 3, 2, 2, 2, 6002, 6003, 7, 402, 2, 2, 6003, 6004, 5, 530, 266, 2, 6004, 6005, 7, 1012, 2, 2, 6005, 6006, 5, 530, 266, 2, 6006, 6008, 3, 2, 2, 2, 6007, 5993, 3, 2, 2, 2, 6007, 6002, 3, 2, 2, 2, 6008, 591, 3, 2, 2, 2, 6009, 6011, 5, 530, 266, 2, 6010, 6012, 9, 110, 2, 2, 6011, 6010, 3, 2, 2, 2, 6011, 6012, 3, 2, 2, 2, 6012, 593, 3, 2, 2, 2, 6013, 6014, 9, 111, 2, 2, 6014, 6016, 7, 1024, 2, 2, 6015, 6017, 9, 39, 2, 2, 6016, 6015, 3, 2, 2, 2, 6016, 6017, 3, 2, 2, 2, 6017, 6018, 3, 2, 2, 2, 6018, 6019, 5, 602, 302, 2, 6019, 6020, 7, 1025, 2, 2, 6020, 6070, 3, 2, 2, 2, 6021, 6022, 7, 241, 2, 2, 6022, 6028, 7, 1024, 2, 2, 6023, 6029, 7, 1007, 2, 2, 6024, 6026, 7, 8, 2, 2, 6025, 6024, 3, 2, 2, 2, 6025, 6026, 3, 2, 2, 2, 6026, 6027, 3, 2, 2, 2, 6027, 6029, 5, 602, 302, 2, 6028, 6023, 3, 2, 2, 2, 6028, 6025, 3, 2, 2, 2, 6029, 6030, 3, 2, 2, 2, 6030, 6070, 7, 1025, 2, 2, 6031, 6032, 7, 241, 2, 2, 6032, 6033, 7, 1024, 2, 2, 6033, 6034, 7, 47, 2, 2, 6034, 6035, 5, 600, 301, 2, 6035, 6036, 7, 1025, 2, 2, 6036, 6070, 3, 2, 2, 2, 6037, 6038, 9, 112, 2, 2, 6038, 6040, 7, 1024, 2, 2, 6039, 6041, 7, 8, 2, 2, 6040, 6039, 3, 2, 2, 2, 6040, 6041, 3, 2, 2, 2, 6041, 6042, 3, 2, 2, 2, 6042, 6043, 5, 602, 302, 2, 6043, 6044, 7, 1025, 2, 2, 6044, 6070, 3, 2, 2, 2, 6045, 6046, 7, 242, 2, 2, 6046, 6048, 7, 1024, 2, 2, 6047, 6049, 7, 47, 2, 2, 6048, 6047, 3, 2, 2, 2, 6048, 6049, 3, 2, 2, 2, 6049, 6050, 3, 2, 2, 2, 6050, 6061, 5, 600, 301, 2, 6051, 6052, 7, 113, 2, 2, 6052, 6053, 7, 18, 2, 2, 6053, 6058, 5, 210, 106, 2, 6054, 6055, 7, 1026, 2, 2, 6055, 6057, 5, 210, 106, 2, 6056, 6054, 3, 2, 2, 2, 6057, 6060, 3, 2, 2, 2, 6058, 6056, 3, 2, 2, 2, 6058, 6059, 3, 2, 2, 2, 6059, 6062, 3, 2, 2, 2, 6060, 6058, 3, 2, 2, 2, 6061, 6051, 3, 2, 2, 2, 6061, 6062, 3, 2, 2, 2, 6062, 6065, 3, 2, 2, 2, 6063, 6064, 7, 141, 2, 2, 6064, 6066, 7, 1039, 2, 2, 6065, 6063, 3, 2, 2, 2, 6065, 6066, 3, 2, 2, 2, 6066, 6067, 3, 2, 2, 2, 6067, 6068, 7, 1025, 2, 2, 6068, 6070, 3, 2, 2, 2, 6069, 6013, 3, 2, 2, 2, 6069, 6021, 3, 2, 2, 2, 6069, 6031, 3, 2, 2, 2, 6069, 6037, 3, 2, 2, 2, 6069, 6045, 3, 2, 2, 2, 6070, 595, 3, 2, 2, 2, 6071, 6095, 5, 638, 320, 2, 6072, 6095, 7, 642, 2, 2, 6073, 6095, 7, 257, 2, 2, 6074, 6095, 7, 253, 2, 2, 6075, 6095, 7, 254, 2, 2, 6076, 6095, 7, 255, 2, 2, 6077, 6095, 7, 258, 2, 2, 6078, 6095, 7, 259, 2, 2, 6079, 6095, 7, 260, 2, 2, 6080, 6095, 7, 71, 2, 2, 6081, 6095, 7, 78, 2, 2, 6082, 6095, 7, 256, 2, 2, 6083, 6095, 7, 262, 2, 2, 6084, 6095, 7, 438, 2, 2, 6085, 6095, 7, 263, 2, 2, 6086, 6095, 7, 129, 2, 2, 6087, 6095, 7, 265, 2, 2, 6088, 6095, 7, 266, 2, 2, 6089, 6095, 7, 267, 2, 2, 6090, 6095, 7, 268, 2, 2, 6091, 6095, 7, 269, 2, 2, 6092, 6095, 7, 270, 2, 2, 6093, 6095, 7, 271, 2, 2, 6094, 6071, 3, 2, 2, 2, 6094, 6072, 3, 2, 2, 2, 6094, 6073, 3, 2, 2, 2, 6094, 6074, 3, 2, 2, 2, 6094, 6075, 3, 2, 2, 2, 6094, 6076, 3, 2, 2, 2, 6094, 6077, 3, 2, 2, 2, 6094, 6078, 3, 2, 2, 2, 6094, 6079, 3, 2, 2, 2, 6094, 6080, 3, 2, 2, 2, 6094, 6081, 3, 2, 2, 2, 6094, 6082, 3, 2, 2, 2, 6094, 6083, 3, 2, 2, 2, 6094, 6084, 3, 2, 2, 2, 6094, 6085, 3, 2, 2, 2, 6094, 6086, 3, 2, 2, 2, 6094, 6087, 3, 2, 2, 2, 6094, 6088, 3, 2, 2, 2, 6094, 6089, 3, 2, 2, 2, 6094, 6090, 3, 2, 2, 2, 6094, 6091, 3, 2, 2, 2, 6094, 6092, 3, 2, 2, 2, 6094, 6093, 3, 2, 2, 2, 6095, 597, 3, 2, 2, 2, 6096, 6097, 9, 113, 2, 2, 6097, 6098, 7, 1024, 2, 2, 6098, 6099, 5, 602, 302, 2, 6099, 6100, 7, 1025, 2, 2, 6100, 599, 3, 2, 2, 2, 6101, 6106, 5, 542, 272, 2, 6102, 6106, 5, 502, 252, 2, 6103, 6106, 5, 584, 293, 2, 6104, 6106, 5, 604, 303, 2, 6105, 6101, 3, 2, 2, 2, 6105, 6102, 3, 2, 2, 2, 6105, 6103, 3, 2, 2, 2, 6105, 6104, 3, 2, 2, 2, 6106, 6116, 3, 2, 2, 2, 6107, 6112, 7, 1026, 2, 2, 6108, 6113, 5, 542, 272, 2, 6109, 6113, 5, 502, 252, 2, 6110, 6113, 5, 584, 293, 2, 6111, 6113, 5, 604, 303, 2, 6112, 6108, 3, 2, 2, 2, 6112, 6109, 3, 2, 2, 2, 6112, 6110, 3, 2, 2, 2, 6112, 6111, 3, 2, 2, 2, 6113, 6115, 3, 2, 2, 2, 6114, 6107, 3, 2, 2, 2, 6115, 6118, 3, 2, 2, 2, 6116, 6114, 3, 2, 2, 2, 6116, 6117, 3, 2, 2, 2, 6117, 601, 3, 2, 2, 2, 6118, 6116, 3, 2, 2, 2, 6119, 6124, 5, 542, 272, 2, 6120, 6124, 5, 502, 252, 2, 6121, 6124, 5, 584, 293, 2, 6122, 6124, 5, 604, 303, 2, 6123, 6119, 3, 2, 2, 2, 6123, 6120, 3, 2, 2, 2, 6123, 6121, 3, 2, 2, 2, 6123, 6122, 3, 2, 2, 2, 6124, 603, 3, 2, 2, 2, 6125, 6126, 8, 303, 1, 2, 6126, 6127, 9, 114, 2, 2, 6127, 6137, 5, 604, 303, 6, 6128, 6129, 5, 606, 304, 2, 6129, 6131, 7, 81, 2, 2, 6130, 6132, 7, 104, 2, 2, 6131, 6130, 3, 2, 2, 2, 6131, 6132, 3, 2, 2, 2, 6132, 6133, 3, 2, 2, 2, 6133, 6134, 9, 115, 2, 2, 6134, 6137, 3, 2, 2, 2, 6135, 6137, 5, 606, 304, 2, 6136, 6125, 3, 2, 2, 2, 6136, 6128, 3, 2, 2, 2, 6136, 6135, 3, 2, 2, 2, 6137, 6144, 3, 2, 2, 2, 6138, 6139, 12, 5, 2, 2, 6139, 6140, 5, 620, 311, 2, 6140, 6141, 5, 604, 303, 6, 6141, 6143, 3, 2, 2, 2, 6142, 6138, 3, 2, 2, 2, 6143, 6146, 3, 2, 2, 2, 6144, 6142, 3, 2, 2, 2, 6144, 6145, 3, 2, 2, 2, 6145, 605, 3, 2, 2, 2, 6146, 6144, 3, 2, 2, 2, 6147, 6150, 8, 304, 1, 2, 6148, 6149, 7, 1050, 2, 2, 6149, 6151, 7, 998, 2, 2, 6150, 6148, 3, 2, 2, 2, 6150, 6151, 3, 2, 2, 2, 6151, 6152, 3, 2, 2, 2, 6152, 6153, 5, 614, 308, 2, 6153, 6211, 3, 2, 2, 2, 6154, 6155, 12, 9, 2, 2, 6155, 6156, 5, 618, 310, 2, 6156, 6157, 5, 606, 304, 10, 6157, 6210, 3, 2, 2, 2, 6158, 6160, 12, 7, 2, 2, 6159, 6161, 7, 104, 2, 2, 6160, 6159, 3, 2, 2, 2, 6160, 6161, 3, 2, 2, 2, 6161, 6162, 3, 2, 2, 2, 6162, 6163, 7, 16, 2, 2, 6163, 6164, 5, 606, 304, 2, 6164, 6165, 7, 12, 2, 2, 6165, 6166, 5, 606, 304, 8, 6166, 6210, 3, 2, 2, 2, 6167, 6168, 12, 6, 2, 2, 6168, 6169, 7, 533, 2, 2, 6169, 6170, 7, 90, 2, 2, 6170, 6210, 5, 606, 304, 7, 6171, 6173, 12, 4, 2, 2, 6172, 6174, 7, 104, 2, 2, 6173, 6172, 3, 2, 2, 2, 6173, 6174, 3, 2, 2, 2, 6174, 6175, 3, 2, 2, 2, 6175, 6176, 9, 116, 2, 2, 6176, 6210, 5, 606, 304, 5, 6177, 6179, 12, 11, 2, 2, 6178, 6180, 7, 104, 2, 2, 6179, 6178, 3, 2, 2, 2, 6179, 6180, 3, 2, 2, 2, 6180, 6181, 3, 2, 2, 2, 6181, 6182, 7, 73, 2, 2, 6182, 6185, 7, 1024, 2, 2, 6183, 6186, 5, 180, 91, 2, 6184, 6186, 5, 562, 282, 2, 6185, 6183, 3, 2, 2, 2, 6185, 6184, 3, 2, 2, 2, 6186, 6187, 3, 2, 2, 2, 6187, 6188, 7, 1025, 2, 2, 6188, 6210, 3, 2, 2, 2, 6189, 6190, 12, 10, 2, 2, 6190, 6191, 7, 81, 2, 2, 6191, 6210, 5, 540, 271, 2, 6192, 6193, 12, 8, 2, 2, 6193, 6194, 5, 618, 310, 2, 6194, 6195, 9, 117, 2, 2, 6195, 6196, 7, 1024, 2, 2, 6196, 6197, 5, 180, 91, 2, 6197, 6198, 7, 1025, 2, 2, 6198, 6210, 3, 2, 2, 2, 6199, 6201, 12, 5, 2, 2, 6200, 6202, 7, 104, 2, 2, 6201, 6200, 3, 2, 2, 2, 6201, 6202, 3, 2, 2, 2, 6202, 6203, 3, 2, 2, 2, 6203, 6204, 7, 90, 2, 2, 6204, 6207, 5, 606, 304, 2, 6205, 6206, 7, 348, 2, 2, 6206, 6208, 7, 1039, 2, 2, 6207, 6205, 3, 2, 2, 2, 6207, 6208, 3, 2, 2, 2, 6208, 6210, 3, 2, 2, 2, 6209, 6154, 3, 2, 2, 2, 6209, 6158, 3, 2, 2, 2, 6209, 6167, 3, 2, 2, 2, 6209, 6171, 3, 2, 2, 2, 6209, 6177, 3, 2, 2, 2, 6209, 6189, 3, 2, 2, 2, 6209, 6192, 3, 2, 2, 2, 6209, 6199, 3, 2, 2, 2, 6210, 6213, 3, 2, 2, 2, 6211, 6209, 3, 2, 2, 2, 6211, 6212, 3, 2, 2, 2, 6212, 607, 3, 2, 2, 2, 6213, 6211, 3, 2, 2, 2, 6214, 6215, 8, 305, 1, 2, 6215, 6216, 9, 114, 2, 2, 6216, 6219, 5, 608, 305, 6, 6217, 6219, 5, 610, 306, 2, 6218, 6214, 3, 2, 2, 2, 6218, 6217, 3, 2, 2, 2, 6219, 6232, 3, 2, 2, 2, 6220, 6221, 12, 5, 2, 2, 6221, 6222, 5, 620, 311, 2, 6222, 6223, 5, 608, 305, 6, 6223, 6231, 3, 2, 2, 2, 6224, 6225, 12, 4, 2, 2, 6225, 6227, 7, 81, 2, 2, 6226, 6228, 7, 104, 2, 2, 6227, 6226, 3, 2, 2, 2, 6227, 6228, 3, 2, 2, 2, 6228, 6229, 3, 2, 2, 2, 6229, 6231, 9, 115, 2, 2, 6230, 6220, 3, 2, 2, 2, 6230, 6224, 3, 2, 2, 2, 6231, 6234, 3, 2, 2, 2, 6232, 6230, 3, 2, 2, 2, 6232, 6233, 3, 2, 2, 2, 6233, 609, 3, 2, 2, 2, 6234, 6232, 3, 2, 2, 2, 6235, 6238, 8, 306, 1, 2, 6236, 6237, 7, 1050, 2, 2, 6237, 6239, 7, 998, 2, 2, 6238, 6236, 3, 2, 2, 2, 6238, 6239, 3, 2, 2, 2, 6239, 6240, 3, 2, 2, 2, 6240, 6241, 5, 612, 307, 2, 6241, 6299, 3, 2, 2, 2, 6242, 6243, 12, 9, 2, 2, 6243, 6244, 5, 618, 310, 2, 6244, 6245, 5, 610, 306, 10, 6245, 6298, 3, 2, 2, 2, 6246, 6248, 12, 7, 2, 2, 6247, 6249, 7, 104, 2, 2, 6248, 6247, 3, 2, 2, 2, 6248, 6249, 3, 2, 2, 2, 6249, 6250, 3, 2, 2, 2, 6250, 6251, 7, 16, 2, 2, 6251, 6252, 5, 610, 306, 2, 6252, 6253, 7, 12, 2, 2, 6253, 6254, 5, 610, 306, 8, 6254, 6298, 3, 2, 2, 2, 6255, 6256, 12, 6, 2, 2, 6256, 6257, 7, 533, 2, 2, 6257, 6258, 7, 90, 2, 2, 6258, 6298, 5, 610, 306, 7, 6259, 6261, 12, 11, 2, 2, 6260, 6262, 7, 104, 2, 2, 6261, 6260, 3, 2, 2, 2, 6261, 6262, 3, 2, 2, 2, 6262, 6263, 3, 2, 2, 2, 6263, 6264, 7, 73, 2, 2, 6264, 6267, 7, 1024, 2, 2, 6265, 6268, 5, 180, 91, 2, 6266, 6268, 5, 564, 283, 2, 6267, 6265, 3, 2, 2, 2, 6267, 6266, 3, 2, 2, 2, 6268, 6269, 3, 2, 2, 2, 6269, 6270, 7, 1025, 2, 2, 6270, 6298, 3, 2, 2, 2, 6271, 6272, 12, 10, 2, 2, 6272, 6273, 7, 81, 2, 2, 6273, 6298, 5, 540, 271, 2, 6274, 6275, 12, 8, 2, 2, 6275, 6276, 5, 618, 310, 2, 6276, 6277, 9, 117, 2, 2, 6277, 6278, 7, 1024, 2, 2, 6278, 6279, 5, 180, 91, 2, 6279, 6280, 7, 1025, 2, 2, 6280, 6298, 3, 2, 2, 2, 6281, 6283, 12, 5, 2, 2, 6282, 6284, 7, 104, 2, 2, 6283, 6282, 3, 2, 2, 2, 6283, 6284, 3, 2, 2, 2, 6284, 6285, 3, 2, 2, 2, 6285, 6286, 7, 90, 2, 2, 6286, 6289, 5, 610, 306, 2, 6287, 6288, 7, 348, 2, 2, 6288, 6290, 7, 1039, 2, 2, 6289, 6287, 3, 2, 2, 2, 6289, 6290, 3, 2, 2, 2, 6290, 6298, 3, 2, 2, 2, 6291, 6293, 12, 4, 2, 2, 6292, 6294, 7, 104, 2, 2, 6293, 6292, 3, 2, 2, 2, 6293, 6294, 3, 2, 2, 2, 6294, 6295, 3, 2, 2, 2, 6295, 6296, 9, 116, 2, 2, 6296, 6298, 5, 606, 304, 2, 6297, 6242, 3, 2, 2, 2, 6297, 6246, 3, 2, 2, 2, 6297, 6255, 3, 2, 2, 2, 6297, 6259, 3, 2, 2, 2, 6297, 6271, 3, 2, 2, 2, 6297, 6274, 3, 2, 2, 2, 6297, 6281, 3, 2, 2, 2, 6297, 6291, 3, 2, 2, 2, 6298, 6301, 3, 2, 2, 2, 6299, 6297, 3, 2, 2, 2, 6299, 6300, 3, 2, 2, 2, 6300, 611, 3, 2, 2, 2, 6301, 6299, 3, 2, 2, 2, 6302, 6303, 8, 307, 1, 2, 6303, 6348, 5, 542, 272, 2, 6304, 6348, 5, 502, 252, 2, 6305, 6348, 5, 584, 293, 2, 6306, 6348, 5, 508, 255, 2, 6307, 6308, 5, 616, 309, 2, 6308, 6309, 5, 612, 307, 11, 6309, 6348, 3, 2, 2, 2, 6310, 6311, 7, 210, 2, 2, 6311, 6348, 5, 612, 307, 10, 6312, 6313, 7, 1024, 2, 2, 6313, 6318, 5, 608, 305, 2, 6314, 6315, 7, 1026, 2, 2, 6315, 6317, 5, 608, 305, 2, 6316, 6314, 3, 2, 2, 2, 6317, 6320, 3, 2, 2, 2, 6318, 6316, 3, 2, 2, 2, 6318, 6319, 3, 2, 2, 2, 6319, 6321, 3, 2, 2, 2, 6320, 6318, 3, 2, 2, 2, 6321, 6322, 7, 1025, 2, 2, 6322, 6348, 3, 2, 2, 2, 6323, 6324, 7, 515, 2, 2, 6324, 6325, 7, 1024, 2, 2, 6325, 6328, 5, 608, 305, 2, 6326, 6327, 7, 1026, 2, 2, 6327, 6329, 5, 608, 305, 2, 6328, 6326, 3, 2, 2, 2, 6329, 6330, 3, 2, 2, 2, 6330, 6328, 3, 2, 2, 2, 6330, 6331, 3, 2, 2, 2, 6331, 6332, 3, 2, 2, 2, 6332, 6333, 7, 1025, 2, 2, 6333, 6348, 3, 2, 2, 2, 6334, 6335, 7, 55, 2, 2, 6335, 6336, 7, 1024, 2, 2, 6336, 6337, 5, 180, 91, 2, 6337, 6338, 7, 1025, 2, 2, 6338, 6348, 3, 2, 2, 2, 6339, 6340, 7, 1024, 2, 2, 6340, 6341, 5, 180, 91, 2, 6341, 6342, 7, 1025, 2, 2, 6342, 6348, 3, 2, 2, 2, 6343, 6344, 7, 79, 2, 2, 6344, 6345, 5, 608, 305, 2, 6345, 6346, 5, 60, 31, 2, 6346, 6348, 3, 2, 2, 2, 6347, 6302, 3, 2, 2, 2, 6347, 6304, 3, 2, 2, 2, 6347, 6305, 3, 2, 2, 2, 6347, 6306, 3, 2, 2, 2, 6347, 6307, 3, 2, 2, 2, 6347, 6310, 3, 2, 2, 2, 6347, 6312, 3, 2, 2, 2, 6347, 6323, 3, 2, 2, 2, 6347, 6334, 3, 2, 2, 2, 6347, 6339, 3, 2, 2, 2, 6347, 6343, 3, 2, 2, 2, 6348, 6362, 3, 2, 2, 2, 6349, 6350, 12, 4, 2, 2, 6350, 6351, 5, 622, 312, 2, 6351, 6352, 5, 612, 307, 5, 6352, 6361, 3, 2, 2, 2, 6353, 6354, 12, 3, 2, 2, 6354, 6355, 5, 624, 313, 2, 6355, 6356, 5, 612, 307, 4, 6356, 6361, 3, 2, 2, 2, 6357, 6358, 12, 13, 2, 2, 6358, 6359, 7, 26, 2, 2, 6359, 6361, 5, 512, 257, 2, 6360, 6349, 3, 2, 2, 2, 6360, 6353, 3, 2, 2, 2, 6360, 6357, 3, 2, 2, 2, 6361, 6364, 3, 2, 2, 2, 6362, 6360, 3, 2, 2, 2, 6362, 6363, 3, 2, 2, 2, 6363, 613, 3, 2, 2, 2, 6364, 6362, 3, 2, 2, 2, 6365, 6366, 8, 308, 1, 2, 6366, 6411, 5, 542, 272, 2, 6367, 6411, 5, 502, 252, 2, 6368, 6411, 5, 584, 293, 2, 6369, 6411, 5, 508, 255, 2, 6370, 6371, 5, 616, 309, 2, 6371, 6372, 5, 614, 308, 11, 6372, 6411, 3, 2, 2, 2, 6373, 6374, 7, 210, 2, 2, 6374, 6411, 5, 614, 308, 10, 6375, 6376, 7, 1024, 2, 2, 6376, 6381, 5, 604, 303, 2, 6377, 6378, 7, 1026, 2, 2, 6378, 6380, 5, 604, 303, 2, 6379, 6377, 3, 2, 2, 2, 6380, 6383, 3, 2, 2, 2, 6381, 6379, 3, 2, 2, 2, 6381, 6382, 3, 2, 2, 2, 6382, 6384, 3, 2, 2, 2, 6383, 6381, 3, 2, 2, 2, 6384, 6385, 7, 1025, 2, 2, 6385, 6411, 3, 2, 2, 2, 6386, 6387, 7, 515, 2, 2, 6387, 6388, 7, 1024, 2, 2, 6388, 6391, 5, 604, 303, 2, 6389, 6390, 7, 1026, 2, 2, 6390, 6392, 5, 604, 303, 2, 6391, 6389, 3, 2, 2, 2, 6392, 6393, 3, 2, 2, 2, 6393, 6391, 3, 2, 2, 2, 6393, 6394, 3, 2, 2, 2, 6394, 6395, 3, 2, 2, 2, 6395, 6396, 7, 1025, 2, 2, 6396, 6411, 3, 2, 2, 2, 6397, 6398, 7, 55, 2, 2, 6398, 6399, 7, 1024, 2, 2, 6399, 6400, 5, 180, 91, 2, 6400, 6401, 7, 1025, 2, 2, 6401, 6411, 3, 2, 2, 2, 6402, 6403, 7, 1024, 2, 2, 6403, 6404, 5, 180, 91, 2, 6404, 6405, 7, 1025, 2, 2, 6405, 6411, 3, 2, 2, 2, 6406, 6407, 7, 79, 2, 2, 6407, 6408, 5, 604, 303, 2, 6408, 6409, 5, 60, 31, 2, 6409, 6411, 3, 2, 2, 2, 6410, 6365, 3, 2, 2, 2, 6410, 6367, 3, 2, 2, 2, 6410, 6368, 3, 2, 2, 2, 6410, 6369, 3, 2, 2, 2, 6410, 6370, 3, 2, 2, 2, 6410, 6373, 3, 2, 2, 2, 6410, 6375, 3, 2, 2, 2, 6410, 6386, 3, 2, 2, 2, 6410, 6397, 3, 2, 2, 2, 6410, 6402, 3, 2, 2, 2, 6410, 6406, 3, 2, 2, 2, 6411, 6425, 3, 2, 2, 2, 6412, 6413, 12, 4, 2, 2, 6413, 6414, 5, 622, 312, 2, 6414, 6415, 5, 614, 308, 5, 6415, 6424, 3, 2, 2, 2, 6416, 6417, 12, 3, 2, 2, 6417, 6418, 5, 624, 313, 2, 6418, 6419, 5, 614, 308, 4, 6419, 6424, 3, 2, 2, 2, 6420, 6421, 12, 13, 2, 2, 6421, 6422, 7, 26, 2, 2, 6422, 6424, 5, 512, 257, 2, 6423, 6412, 3, 2, 2, 2, 6423, 6416, 3, 2, 2, 2, 6423, 6420, 3, 2, 2, 2, 6424, 6427, 3, 2, 2, 2, 6425, 6423, 3, 2, 2, 2, 6425, 6426, 3, 2, 2, 2, 6426, 615, 3, 2, 2, 2, 6427, 6425, 3, 2, 2, 2, 6428, 6429, 9, 118, 2, 2, 6429, 617, 3, 2, 2, 2, 6430, 6445, 7, 1015, 2, 2, 6431, 6445, 7, 1016, 2, 2, 6432, 6445, 7, 1017, 2, 2, 6433, 6434, 7, 1017, 2, 2, 6434, 6445, 7, 1015, 2, 2, 6435, 6436, 7, 1016, 2, 2, 6436, 6445, 7, 1015, 2, 2, 6437, 6438, 7, 1017, 2, 2, 6438, 6445, 7, 1016, 2, 2, 6439, 6440, 7, 1018, 2, 2, 6440, 6445, 7, 1015, 2, 2, 6441, 6442, 7, 1017, 2, 2, 6442, 6443, 7, 1015, 2, 2, 6443, 6445, 7, 1016, 2, 2, 6444, 6430, 3, 2, 2, 2, 6444, 6431, 3, 2, 2, 2, 6444, 6432, 3, 2, 2, 2, 6444, 6433, 3, 2, 2, 2, 6444, 6435, 3, 2, 2, 2, 6444, 6437, 3, 2, 2, 2, 6444, 6439, 3, 2, 2, 2, 6444, 6441, 3, 2, 2, 2, 6445, 619, 3, 2, 2, 2, 6446, 6454, 7, 12, 2, 2, 6447, 6448, 7, 1021, 2, 2, 6448, 6454, 7, 1021, 2, 2, 6449, 6454, 7, 178, 2, 2, 6450, 6454, 7, 112, 2, 2, 6451, 6452, 7, 1020, 2, 2, 6452, 6454, 7, 1020, 2, 2, 6453, 6446, 3, 2, 2, 2, 6453, 6447, 3, 2, 2, 2, 6453, 6449, 3, 2, 2, 2, 6453, 6450, 3, 2, 2, 2, 6453, 6451, 3, 2, 2, 2, 6454, 621, 3, 2, 2, 2, 6455, 6456, 7, 1017, 2, 2, 6456, 6463, 7, 1017, 2, 2, 6457, 6458, 7, 1016, 2, 2, 6458, 6463, 7, 1016, 2, 2, 6459, 6463, 7, 1021, 2, 2, 6460, 6463, 7, 1022, 2, 2, 6461, 6463, 7, 1020, 2, 2, 6462, 6455, 3, 2, 2, 2, 6462, 6457, 3, 2, 2, 2, 6462, 6459, 3, 2, 2, 2, 6462, 6460, 3, 2, 2, 2, 6462, 6461, 3, 2, 2, 2, 6463, 623, 3, 2, 2, 2, 6464, 6465, 9, 119, 2, 2, 6465, 625, 3, 2, 2, 2, 6466, 6467, 9, 120, 2, 2, 6467, 627, 3, 2, 2, 2, 6468, 6469, 9, 121, 2, 2, 6469, 629, 3, 2, 2, 2, 6470, 6471, 9, 122, 2, 2, 6471, 631, 3, 2, 2, 2, 6472, 6473, 9, 123, 2, 2, 6473, 633, 3, 2, 2, 2, 6474, 6475, 9, 124, 2, 2, 6475, 635, 3, 2, 2, 2, 6476, 6477, 9, 125, 2, 2, 6477, 637, 3, 2, 2, 2, 6478, 6479, 9, 126, 2, 2, 6479, 639, 3, 2, 2, 2, 941, 641, 644, 650, 653, 656, 658, 663, 666, 669, 678, 717, 729, 740, 757, 762, 774, 801, 810, 815, 821, 826, 830, 839, 842, 845, 849, 856, 859, 864, 872, 877, 882, 885, 887, 899, 902, 906, 909, 913, 916, 920, 923, 926, 930, 933, 937, 943, 949, 955, 962, 969, 975, 981, 990, 995, 1011, 1018, 1022, 1032, 1036, 1040, 1044, 1048, 1053, 1056, 1059, 1062, 1065, 1071, 1075, 1081, 1086, 1089, 1092, 1094, 1105, 1109, 1112, 1126, 1129, 1133, 1136, 1140, 1143, 1147, 1150, 1154, 1157, 1160, 1164, 1167, 1171, 1177, 1190, 1197, 1202, 1205, 1210, 1218, 1224, 1228, 1231, 1236, 1239, 1243, 1246, 1250, 1253, 1261, 1263, 1270, 1276, 1284, 1287, 1294, 1297, 1299, 1305, 1311, 1328, 1335, 1342, 1353, 1356, 1369, 1382, 1387, 1403, 1411, 1421, 1427, 1437, 1440, 1445, 1458, 1465, 1470, 1474, 1476, 1481, 1484, 1490, 1495, 1497, 1501, 1504, 1507, 1513, 1518, 1520, 1525, 1532, 1534, 1541, 1546, 1550, 1553, 1561, 1569, 1571, 1579, 1583, 1586, 1592, 1597, 1600, 1606, 1609, 1613, 1618, 1623, 1627, 1632, 1635, 1639, 1643, 1647, 1651, 1656, 1661, 1666, 1672, 1677, 1682, 1688, 1693, 1698, 1703, 1708, 1713, 1718, 1723, 1728, 1733, 1738, 1744, 1749, 1755, 1765, 1772, 1774, 1782, 1787, 1790, 1798, 1804, 1820, 1832, 1834, 1837, 1845, 1851, 1857, 1870, 1877, 1885, 1888, 1899, 1907, 1910, 1922, 1929, 1937, 1940, 1952, 1959, 1967, 1970, 1977, 1985, 1988, 1990, 1995, 2003, 2012, 2016, 2020, 2025, 2031, 2037, 2042, 2047, 2052, 2057, 2060, 2065, 2070, 2080, 2084, 2091, 2096, 2099, 2104, 2107, 2111, 2115, 2123, 2142, 2145, 2148, 2152, 2162, 2175, 2182, 2185, 2194, 2197, 2200, 2211, 2214, 2218, 2226, 2229, 2234, 2242, 2248, 2252, 2256, 2261, 2266, 2273, 2277, 2288, 2296, 2299, 2305, 2311, 2313, 2318, 2321, 2327, 2333, 2335, 2339, 2342, 2345, 2351, 2357, 2360, 2366, 2372, 2374, 2379, 2387, 2389, 2398, 2403, 2411, 2415, 2423, 2433, 2438, 2445, 2449, 2453, 2477, 2481, 2493, 2496, 2505, 2522, 2534, 2541, 2548, 2563, 2576, 2582, 2588, 2594, 2600, 2606, 2612, 2617, 2624, 2631, 2638, 2643, 2646, 2648, 2662, 2669, 2676, 2682, 2686, 2690, 2697, 2700, 2705, 2712, 2719, 2723, 2732, 2741, 2750, 2753, 2757, 2766, 2770, 2773, 2776, 2782, 2785, 2791, 2800, 2803, 2814, 2817, 2822, 2825, 2830, 2840, 2845, 2851, 2853, 2859, 2861, 2867, 2875, 2880, 2888, 2891, 2896, 2899, 2904, 2912, 2920, 2926, 2934, 2939, 2947, 2950, 2954, 2957, 2965, 2971, 2980, 2983, 2987, 2991, 2997, 3001, 3005, 3007, 3010, 3013, 3016, 3022, 3026, 3029, 3032, 3035, 3038, 3040, 3044, 3050, 3056, 3061, 3064, 3070, 3074, 3082, 3086, 3089, 3092, 3101, 3105, 3108, 3112, 3116, 3119, 3122, 3127, 3133, 3137, 3147, 3153, 3157, 3163, 3167, 3173, 3176, 3188, 3192, 3196, 3204, 3208, 3216, 3219, 3223, 3226, 3234, 3239, 3242, 3245, 3249, 3252, 3261, 3266, 3275, 3280, 3287, 3294, 3302, 3307, 3315, 3318, 3321, 3328, 3331, 3338, 3341, 3349, 3355, 3366, 3369, 3380, 3386, 3390, 3401, 3406, 3408, 3412, 3422, 3432, 3438, 3443, 3446, 3449, 3452, 3458, 3463, 3466, 3469, 3472, 3474, 3480, 3485, 3488, 3491, 3495, 3501, 3505, 3515, 3519, 3525, 3534, 3537, 3541, 3544, 3548, 3552, 3555, 3557, 3565, 3577, 3583, 3585, 3591, 3593, 3595, 3601, 3609, 3617, 3623, 3632, 3637, 3639, 3643, 3647, 3653, 3660, 3664, 3673, 3676, 3680, 3684, 3688, 3691, 3694, 3697, 3701, 3705, 3708, 3711, 3714, 3721, 3725, 3740, 3753, 3761, 3771, 3775, 3778, 3784, 3787, 3790, 3799, 3808, 3818, 3822, 3832, 3842, 3850, 3853, 3862, 3865, 3869, 3874, 3878, 3887, 3890, 3921, 3924, 3927, 3983, 3988, 4016, 4030, 4037, 4041, 4047, 4055, 4057, 4068, 4078, 4085, 4091, 4099, 4104, 4112, 4120, 4128, 4136, 4142, 4145, 4149, 4154, 4159, 4165, 4167, 4178, 4183, 4190, 4192, 4206, 4212, 4217, 4222, 4228, 4235, 4243, 4251, 4256, 4262, 4265, 4273, 4280, 4289, 4292, 4309, 4317, 4325, 4329, 4336, 4342, 4350, 4359, 4365, 4372, 4379, 4384, 4387, 4389, 4395, 4397, 4401, 4403, 4406, 4415, 4421, 4428, 4435, 4440, 4443, 4445, 4451, 4453, 4457, 4459, 4462, 4467, 4474, 4483, 4488, 4497, 4504, 4509, 4512, 4514, 4520, 4522, 4525, 4537, 4543, 4552, 4561, 4566, 4575, 4581, 4592, 4595, 4607, 4614, 4619, 4634, 4645, 4648, 4658, 4668, 4678, 4688, 4692, 4696, 4705, 4733, 4751, 4759, 4770, 4777, 4781, 4788, 4793, 4796, 4799, 4808, 4812, 4842, 4849, 4853, 4860, 4863, 4879, 4882, 4892, 4896, 4902, 4905, 4910, 4914, 4921, 4924, 4930, 4954, 4967, 4970, 4980, 4988, 4992, 4999, 5002, 5011, 5017, 5023, 5033, 5035, 5041, 5044, 5047, 5059, 5062, 5068, 5071, 5079, 5087, 5093, 5097, 5111, 5123, 5130, 5133, 5140, 5147, 5152, 5157, 5168, 5179, 5185, 5190, 5203, 5205, 5210, 5215, 5217, 5224, 5231, 5234, 5237, 5243, 5247, 5253, 5259, 5272, 5277, 5285, 5288, 5293, 5298, 5306, 5309, 5315, 5319, 5332, 5338, 5350, 5353, 5362, 5367, 5373, 5380, 5382, 5386, 5392, 5395, 5405, 5409, 5429, 5436, 5438, 5445, 5447, 5451, 5456, 5467, 5472, 5478, 5481, 5485, 5490, 5493, 5497, 5501, 5503, 5508, 5513, 5526, 5529, 5533, 5536, 5541, 5544, 5548, 5553, 5556, 5561, 5564, 5570, 5573, 5577, 5580, 5583, 5587, 5590, 5593, 5597, 5600, 5603, 5606, 5610, 5613, 5616, 5621, 5626, 5631, 5634, 5637, 5645, 5652, 5656, 5661, 5664, 5669, 5673, 5675, 5691, 5700, 5708, 5717, 5727, 5735, 5743, 5751, 5759, 5767, 5772, 5779, 5781, 5786, 5789, 5794, 5797, 5801, 5815, 5822, 5827, 5861, 5865, 5873, 5877, 5886, 5894, 5899, 5907, 5912, 5917, 5919, 5928, 5933, 5941, 5946, 5954, 5962, 5965, 5975, 5986, 5999, 6007, 6011, 6016, 6025, 6028, 6040, 6048, 6058, 6061, 6065, 6069, 6094, 6105, 6112, 6116, 6123, 6131, 6136, 6144, 6150, 6160, 6173, 6179, 6185, 6201, 6207, 6209, 6211, 6218, 6227, 6230, 6232, 6238, 6248, 6261, 6267, 6283, 6289, 6293, 6297, 6299, 6318, 6330, 6347, 6360, 6362, 6381, 6393, 6410, 6423, 6425, 6444, 6453, 6462] \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParser.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParser.java new file mode 100644 index 00000000000..81642e9de86 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParser.java @@ -0,0 +1,65742 @@ +// Generated from E:/seata/seata/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr\MySqlParser.g4 by ANTLR 4.8 +package io.seata.sqlparser.antlr.mysql.parser; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class MySqlParser extends Parser { + static { RuntimeMetaData.checkVersion("4.8", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + SPACE=1, SPEC_MYSQL_COMMENT=2, COMMENT_INPUT=3, LINE_COMMENT=4, ADD=5, + ALL=6, ALTER=7, ALWAYS=8, ANALYZE=9, AND=10, AS=11, ASC=12, BEFORE=13, + BETWEEN=14, BOTH=15, BY=16, CALL=17, CASCADE=18, CASE=19, CAST=20, CHANGE=21, + CHARACTER=22, CHECK=23, COLLATE=24, COLUMN=25, CONDITION=26, CONSTRAINT=27, + CONTINUE=28, CONVERT=29, CREATE=30, CROSS=31, CURRENT=32, CURRENT_USER=33, + CURSOR=34, DATABASE=35, DATABASES=36, DECLARE=37, DEFAULT=38, DELAYED=39, + DELETE=40, DESC=41, DESCRIBE=42, DETERMINISTIC=43, DIAGNOSTICS=44, DISTINCT=45, + DISTINCTROW=46, DROP=47, EACH=48, ELSE=49, ELSEIF=50, ENCLOSED=51, ESCAPED=52, + EXISTS=53, EXIT=54, EXPLAIN=55, FALSE=56, FETCH=57, FOR=58, FORCE=59, + FOREIGN=60, FROM=61, FULLTEXT=62, GENERATED=63, GET=64, GRANT=65, GROUP=66, + HAVING=67, HIGH_PRIORITY=68, IF=69, IGNORE=70, IN=71, INDEX=72, INFILE=73, + INNER=74, INOUT=75, INSERT=76, INTERVAL=77, INTO=78, IS=79, ITERATE=80, + JOIN=81, KEY=82, KEYS=83, KILL=84, LEADING=85, LEAVE=86, LEFT=87, LIKE=88, + LIMIT=89, LINEAR=90, LINES=91, LOAD=92, LOCK=93, LOOP=94, LOW_PRIORITY=95, + MASTER_BIND=96, MASTER_SSL_VERIFY_SERVER_CERT=97, MATCH=98, MAXVALUE=99, + MODIFIES=100, NATURAL=101, NOT=102, NO_WRITE_TO_BINLOG=103, NULL_LITERAL=104, + NUMBER=105, ON=106, OPTIMIZE=107, OPTION=108, OPTIONALLY=109, OR=110, + ORDER=111, OUT=112, OUTER=113, OUTFILE=114, PARTITION=115, PRIMARY=116, + PROCEDURE=117, PURGE=118, RANGE=119, READ=120, READS=121, REFERENCES=122, + REGEXP=123, RELEASE=124, RENAME=125, REPEAT=126, REPLACE=127, REQUIRE=128, + RESIGNAL=129, RESTRICT=130, RETURN=131, REVOKE=132, RIGHT=133, RLIKE=134, + SCHEMA=135, SCHEMAS=136, SELECT=137, SET=138, SEPARATOR=139, SHOW=140, + SIGNAL=141, SPATIAL=142, SQL=143, SQLEXCEPTION=144, SQLSTATE=145, SQLWARNING=146, + SQL_BIG_RESULT=147, SQL_CALC_FOUND_ROWS=148, SQL_SMALL_RESULT=149, SSL=150, + STACKED=151, STARTING=152, STRAIGHT_JOIN=153, TABLE=154, TERMINATED=155, + THEN=156, TO=157, TRAILING=158, TRIGGER=159, TRUE=160, UNDO=161, UNION=162, + UNIQUE=163, UNLOCK=164, UNSIGNED=165, UPDATE=166, USAGE=167, USE=168, + USING=169, VALUES=170, WHEN=171, WHERE=172, WHILE=173, WITH=174, WRITE=175, + XOR=176, ZEROFILL=177, TINYINT=178, SMALLINT=179, MEDIUMINT=180, MIDDLEINT=181, + INT=182, INT1=183, INT2=184, INT3=185, INT4=186, INT8=187, INTEGER=188, + BIGINT=189, REAL=190, DOUBLE=191, PRECISION=192, FLOAT=193, FLOAT4=194, + FLOAT8=195, DECIMAL=196, DEC=197, NUMERIC=198, DATE=199, TIME=200, TIMESTAMP=201, + DATETIME=202, YEAR=203, CHAR=204, VARCHAR=205, NVARCHAR=206, NATIONAL=207, + BINARY=208, VARBINARY=209, TINYBLOB=210, BLOB=211, MEDIUMBLOB=212, LONG=213, + LONGBLOB=214, TINYTEXT=215, TEXT=216, MEDIUMTEXT=217, LONGTEXT=218, ENUM=219, + VARYING=220, SERIAL=221, YEAR_MONTH=222, DAY_HOUR=223, DAY_MINUTE=224, + DAY_SECOND=225, HOUR_MINUTE=226, HOUR_SECOND=227, MINUTE_SECOND=228, SECOND_MICROSECOND=229, + MINUTE_MICROSECOND=230, HOUR_MICROSECOND=231, DAY_MICROSECOND=232, JSON_VALID=233, + JSON_SCHEMA_VALID=234, AVG=235, BIT_AND=236, BIT_OR=237, BIT_XOR=238, + COUNT=239, GROUP_CONCAT=240, MAX=241, MIN=242, STD=243, STDDEV=244, STDDEV_POP=245, + STDDEV_SAMP=246, SUM=247, VAR_POP=248, VAR_SAMP=249, VARIANCE=250, CURRENT_DATE=251, + CURRENT_TIME=252, CURRENT_TIMESTAMP=253, LOCALTIME=254, CURDATE=255, CURTIME=256, + DATE_ADD=257, DATE_SUB=258, EXTRACT=259, LOCALTIMESTAMP=260, NOW=261, + POSITION=262, SUBSTR=263, SUBSTRING=264, SYSDATE=265, TRIM=266, UTC_DATE=267, + UTC_TIME=268, UTC_TIMESTAMP=269, ACCOUNT=270, ACTION=271, AFTER=272, AGGREGATE=273, + ALGORITHM=274, ANY=275, AT=276, AUTHORS=277, AUTOCOMMIT=278, AUTOEXTEND_SIZE=279, + AUTO_INCREMENT=280, AVG_ROW_LENGTH=281, BEGIN=282, BINLOG=283, BIT=284, + BLOCK=285, BOOL=286, BOOLEAN=287, BTREE=288, CACHE=289, CASCADED=290, + CHAIN=291, CHANGED=292, CHANNEL=293, CHECKSUM=294, PAGE_CHECKSUM=295, + CIPHER=296, CLASS_ORIGIN=297, CLIENT=298, CLOSE=299, COALESCE=300, CODE=301, + COLUMNS=302, COLUMN_FORMAT=303, COLUMN_NAME=304, COMMENT=305, COMMIT=306, + COMPACT=307, COMPLETION=308, COMPRESSED=309, COMPRESSION=310, CONCURRENT=311, + CONNECTION=312, CONSISTENT=313, CONSTRAINT_CATALOG=314, CONSTRAINT_SCHEMA=315, + CONSTRAINT_NAME=316, CONTAINS=317, CONTEXT=318, CONTRIBUTORS=319, COPY=320, + CPU=321, CURSOR_NAME=322, DATA=323, DATAFILE=324, DEALLOCATE=325, DEFAULT_AUTH=326, + DEFINER=327, DELAY_KEY_WRITE=328, DES_KEY_FILE=329, DIRECTORY=330, DISABLE=331, + DISCARD=332, DISK=333, DO=334, DUMPFILE=335, DUPLICATE=336, DYNAMIC=337, + ENABLE=338, ENCRYPTION=339, END=340, ENDS=341, ENGINE=342, ENGINES=343, + ERROR=344, ERRORS=345, ESCAPE=346, EVEN=347, EVENT=348, EVENTS=349, EVERY=350, + EXCHANGE=351, EXCLUSIVE=352, EXPIRE=353, EXPORT=354, EXTENDED=355, EXTENT_SIZE=356, + FAST=357, FAULTS=358, FIELDS=359, FILE_BLOCK_SIZE=360, FILTER=361, FIRST=362, + FIXED=363, FLUSH=364, FOLLOWS=365, FOUND=366, FULL=367, FUNCTION=368, + GENERAL=369, GLOBAL=370, GRANTS=371, GROUP_REPLICATION=372, HANDLER=373, + HASH=374, HELP=375, HOST=376, HOSTS=377, IDENTIFIED=378, IGNORE_SERVER_IDS=379, + IMPORT=380, INDEXES=381, INITIAL_SIZE=382, INPLACE=383, INSERT_METHOD=384, + INSTALL=385, INSTANCE=386, INVISIBLE=387, INVOKER=388, IO=389, IO_THREAD=390, + IPC=391, ISOLATION=392, ISSUER=393, JSON=394, KEY_BLOCK_SIZE=395, LANGUAGE=396, + LAST=397, LEAVES=398, LESS=399, LEVEL=400, LIST=401, LOCAL=402, LOGFILE=403, + LOGS=404, MASTER=405, MASTER_AUTO_POSITION=406, MASTER_CONNECT_RETRY=407, + MASTER_DELAY=408, MASTER_HEARTBEAT_PERIOD=409, MASTER_HOST=410, MASTER_LOG_FILE=411, + MASTER_LOG_POS=412, MASTER_PASSWORD=413, MASTER_PORT=414, MASTER_RETRY_COUNT=415, + MASTER_SSL=416, MASTER_SSL_CA=417, MASTER_SSL_CAPATH=418, MASTER_SSL_CERT=419, + MASTER_SSL_CIPHER=420, MASTER_SSL_CRL=421, MASTER_SSL_CRLPATH=422, MASTER_SSL_KEY=423, + MASTER_TLS_VERSION=424, MASTER_USER=425, MAX_CONNECTIONS_PER_HOUR=426, + MAX_QUERIES_PER_HOUR=427, MAX_ROWS=428, MAX_SIZE=429, MAX_UPDATES_PER_HOUR=430, + MAX_USER_CONNECTIONS=431, MEDIUM=432, MEMBER=433, MERGE=434, MESSAGE_TEXT=435, + MID=436, MIGRATE=437, MIN_ROWS=438, MODE=439, MODIFY=440, MUTEX=441, MYSQL=442, + MYSQL_ERRNO=443, NAME=444, NAMES=445, NCHAR=446, NEVER=447, NEXT=448, + NO=449, NODEGROUP=450, NONE=451, OFFLINE=452, OFFSET=453, OF=454, OJ=455, + OLD_PASSWORD=456, ONE=457, ONLINE=458, ONLY=459, OPEN=460, OPTIMIZER_COSTS=461, + OPTIONS=462, OWNER=463, PACK_KEYS=464, PAGE=465, PARSER=466, PARTIAL=467, + PARTITIONING=468, PARTITIONS=469, PASSWORD=470, PHASE=471, PLUGIN=472, + PLUGIN_DIR=473, PLUGINS=474, PORT=475, PRECEDES=476, PREPARE=477, PRESERVE=478, + PREV=479, PROCESSLIST=480, PROFILE=481, PROFILES=482, PROXY=483, QUERY=484, + QUICK=485, REBUILD=486, RECOVER=487, REDO_BUFFER_SIZE=488, REDUNDANT=489, + RELAY=490, RELAY_LOG_FILE=491, RELAY_LOG_POS=492, RELAYLOG=493, REMOVE=494, + REORGANIZE=495, REPAIR=496, REPLICATE_DO_DB=497, REPLICATE_DO_TABLE=498, + REPLICATE_IGNORE_DB=499, REPLICATE_IGNORE_TABLE=500, REPLICATE_REWRITE_DB=501, + REPLICATE_WILD_DO_TABLE=502, REPLICATE_WILD_IGNORE_TABLE=503, REPLICATION=504, + RESET=505, RESUME=506, RETURNED_SQLSTATE=507, RETURNS=508, ROLE=509, ROLLBACK=510, + ROLLUP=511, ROTATE=512, ROW=513, ROWS=514, ROW_FORMAT=515, SAVEPOINT=516, + SCHEDULE=517, SECURITY=518, SERVER=519, SESSION=520, SHARE=521, SHARED=522, + SIGNED=523, SIMPLE=524, SLAVE=525, SLOW=526, SNAPSHOT=527, SOCKET=528, + SOME=529, SONAME=530, SOUNDS=531, SOURCE=532, SQL_AFTER_GTIDS=533, SQL_AFTER_MTS_GAPS=534, + SQL_BEFORE_GTIDS=535, SQL_BUFFER_RESULT=536, SQL_CACHE=537, SQL_NO_CACHE=538, + SQL_THREAD=539, START=540, STARTS=541, STATS_AUTO_RECALC=542, STATS_PERSISTENT=543, + STATS_SAMPLE_PAGES=544, STATUS=545, STOP=546, STORAGE=547, STORED=548, + STRING=549, SUBCLASS_ORIGIN=550, SUBJECT=551, SUBPARTITION=552, SUBPARTITIONS=553, + SUSPEND=554, SWAPS=555, SWITCHES=556, TABLE_NAME=557, TABLESPACE=558, + TEMPORARY=559, TEMPTABLE=560, THAN=561, TRADITIONAL=562, TRANSACTION=563, + TRANSACTIONAL=564, TRIGGERS=565, TRUNCATE=566, UNDEFINED=567, UNDOFILE=568, + UNDO_BUFFER_SIZE=569, UNINSTALL=570, UNKNOWN=571, UNTIL=572, UPGRADE=573, + USER=574, USE_FRM=575, USER_RESOURCES=576, VALIDATION=577, VALUE=578, + VARIABLES=579, VIEW=580, VIRTUAL=581, VISIBLE=582, WAIT=583, WARNINGS=584, + WITHOUT=585, WORK=586, WRAPPER=587, X509=588, XA=589, XML=590, EUR=591, + USA=592, JIS=593, ISO=594, INTERNAL=595, QUARTER=596, MONTH=597, DAY=598, + HOUR=599, MINUTE=600, WEEK=601, SECOND=602, MICROSECOND=603, TABLES=604, + ROUTINE=605, EXECUTE=606, FILE=607, PROCESS=608, RELOAD=609, SHUTDOWN=610, + SUPER=611, PRIVILEGES=612, APPLICATION_PASSWORD_ADMIN=613, AUDIT_ADMIN=614, + BACKUP_ADMIN=615, BINLOG_ADMIN=616, BINLOG_ENCRYPTION_ADMIN=617, CLONE_ADMIN=618, + CONNECTION_ADMIN=619, ENCRYPTION_KEY_ADMIN=620, FIREWALL_ADMIN=621, FIREWALL_USER=622, + GROUP_REPLICATION_ADMIN=623, INNODB_REDO_LOG_ARCHIVE=624, NDB_STORED_USER=625, + PERSIST_RO_VARIABLES_ADMIN=626, REPLICATION_APPLIER=627, REPLICATION_SLAVE_ADMIN=628, + RESOURCE_GROUP_ADMIN=629, RESOURCE_GROUP_USER=630, ROLE_ADMIN=631, SESSION_VARIABLES_ADMIN=632, + SET_USER_ID=633, SHOW_ROUTINE=634, SYSTEM_VARIABLES_ADMIN=635, TABLE_ENCRYPTION_ADMIN=636, + VERSION_TOKEN_ADMIN=637, XA_RECOVER_ADMIN=638, ARMSCII8=639, ASCII=640, + BIG5=641, CP1250=642, CP1251=643, CP1256=644, CP1257=645, CP850=646, CP852=647, + CP866=648, CP932=649, DEC8=650, EUCJPMS=651, EUCKR=652, GB2312=653, GBK=654, + GEOSTD8=655, GREEK=656, HEBREW=657, HP8=658, KEYBCS2=659, KOI8R=660, KOI8U=661, + LATIN1=662, LATIN2=663, LATIN5=664, LATIN7=665, MACCE=666, MACROMAN=667, + SJIS=668, SWE7=669, TIS620=670, UCS2=671, UJIS=672, UTF16=673, UTF16LE=674, + UTF32=675, UTF8=676, UTF8MB3=677, UTF8MB4=678, ARCHIVE=679, BLACKHOLE=680, + CSV=681, FEDERATED=682, INNODB=683, MEMORY=684, MRG_MYISAM=685, MYISAM=686, + NDB=687, NDBCLUSTER=688, PERFORMANCE_SCHEMA=689, TOKUDB=690, REPEATABLE=691, + COMMITTED=692, UNCOMMITTED=693, SERIALIZABLE=694, GEOMETRYCOLLECTION=695, + GEOMCOLLECTION=696, GEOMETRY=697, LINESTRING=698, MULTILINESTRING=699, + MULTIPOINT=700, MULTIPOLYGON=701, POINT=702, POLYGON=703, ABS=704, ACOS=705, + ADDDATE=706, ADDTIME=707, AES_DECRYPT=708, AES_ENCRYPT=709, AREA=710, + ASBINARY=711, ASIN=712, ASTEXT=713, ASWKB=714, ASWKT=715, ASYMMETRIC_DECRYPT=716, + ASYMMETRIC_DERIVE=717, ASYMMETRIC_ENCRYPT=718, ASYMMETRIC_SIGN=719, ASYMMETRIC_VERIFY=720, + ATAN=721, ATAN2=722, BENCHMARK=723, BIN=724, BIT_COUNT=725, BIT_LENGTH=726, + BUFFER=727, CATALOG_NAME=728, CEIL=729, CEILING=730, CENTROID=731, CHARACTER_LENGTH=732, + CHARSET=733, CHAR_LENGTH=734, COERCIBILITY=735, COLLATION=736, COMPRESS=737, + CONCAT=738, CONCAT_WS=739, CONNECTION_ID=740, CONV=741, CONVERT_TZ=742, + COS=743, COT=744, CRC32=745, CREATE_ASYMMETRIC_PRIV_KEY=746, CREATE_ASYMMETRIC_PUB_KEY=747, + CREATE_DH_PARAMETERS=748, CREATE_DIGEST=749, CROSSES=750, DATEDIFF=751, + DATE_FORMAT=752, DAYNAME=753, DAYOFMONTH=754, DAYOFWEEK=755, DAYOFYEAR=756, + DECODE=757, DEGREES=758, DES_DECRYPT=759, DES_ENCRYPT=760, DIMENSION=761, + DISJOINT=762, ELT=763, ENCODE=764, ENCRYPT=765, ENDPOINT=766, ENVELOPE=767, + EQUALS=768, EXP=769, EXPORT_SET=770, EXTERIORRING=771, EXTRACTVALUE=772, + FIELD=773, FIND_IN_SET=774, FLOOR=775, FORMAT=776, FOUND_ROWS=777, FROM_BASE64=778, + FROM_DAYS=779, FROM_UNIXTIME=780, GEOMCOLLFROMTEXT=781, GEOMCOLLFROMWKB=782, + GEOMETRYCOLLECTIONFROMTEXT=783, GEOMETRYCOLLECTIONFROMWKB=784, GEOMETRYFROMTEXT=785, + GEOMETRYFROMWKB=786, GEOMETRYN=787, GEOMETRYTYPE=788, GEOMFROMTEXT=789, + GEOMFROMWKB=790, GET_FORMAT=791, GET_LOCK=792, GLENGTH=793, GREATEST=794, + GTID_SUBSET=795, GTID_SUBTRACT=796, HEX=797, IFNULL=798, INET6_ATON=799, + INET6_NTOA=800, INET_ATON=801, INET_NTOA=802, INSTR=803, INTERIORRINGN=804, + INTERSECTS=805, ISCLOSED=806, ISEMPTY=807, ISNULL=808, ISSIMPLE=809, IS_FREE_LOCK=810, + IS_IPV4=811, IS_IPV4_COMPAT=812, IS_IPV4_MAPPED=813, IS_IPV6=814, IS_USED_LOCK=815, + LAST_INSERT_ID=816, LCASE=817, LEAST=818, LENGTH=819, LINEFROMTEXT=820, + LINEFROMWKB=821, LINESTRINGFROMTEXT=822, LINESTRINGFROMWKB=823, LN=824, + LOAD_FILE=825, LOCATE=826, LOG=827, LOG10=828, LOG2=829, LOWER=830, LPAD=831, + LTRIM=832, MAKEDATE=833, MAKETIME=834, MAKE_SET=835, MASTER_POS_WAIT=836, + MBRCONTAINS=837, MBRDISJOINT=838, MBREQUAL=839, MBRINTERSECTS=840, MBROVERLAPS=841, + MBRTOUCHES=842, MBRWITHIN=843, MD5=844, MLINEFROMTEXT=845, MLINEFROMWKB=846, + MONTHNAME=847, MPOINTFROMTEXT=848, MPOINTFROMWKB=849, MPOLYFROMTEXT=850, + MPOLYFROMWKB=851, MULTILINESTRINGFROMTEXT=852, MULTILINESTRINGFROMWKB=853, + MULTIPOINTFROMTEXT=854, MULTIPOINTFROMWKB=855, MULTIPOLYGONFROMTEXT=856, + MULTIPOLYGONFROMWKB=857, NAME_CONST=858, NULLIF=859, NUMGEOMETRIES=860, + NUMINTERIORRINGS=861, NUMPOINTS=862, OCT=863, OCTET_LENGTH=864, ORD=865, + OVERLAPS=866, PERIOD_ADD=867, PERIOD_DIFF=868, PI=869, POINTFROMTEXT=870, + POINTFROMWKB=871, POINTN=872, POLYFROMTEXT=873, POLYFROMWKB=874, POLYGONFROMTEXT=875, + POLYGONFROMWKB=876, POW=877, POWER=878, QUOTE=879, RADIANS=880, RAND=881, + RANDOM_BYTES=882, RELEASE_LOCK=883, REVERSE=884, ROUND=885, ROW_COUNT=886, + RPAD=887, RTRIM=888, SEC_TO_TIME=889, SESSION_USER=890, SHA=891, SHA1=892, + SHA2=893, SCHEMA_NAME=894, SIGN=895, SIN=896, SLEEP=897, SOUNDEX=898, + SQL_THREAD_WAIT_AFTER_GTIDS=899, SQRT=900, SRID=901, STARTPOINT=902, STRCMP=903, + STR_TO_DATE=904, ST_AREA=905, ST_ASBINARY=906, ST_ASTEXT=907, ST_ASWKB=908, + ST_ASWKT=909, ST_BUFFER=910, ST_CENTROID=911, ST_CONTAINS=912, ST_CROSSES=913, + ST_DIFFERENCE=914, ST_DIMENSION=915, ST_DISJOINT=916, ST_DISTANCE=917, + ST_ENDPOINT=918, ST_ENVELOPE=919, ST_EQUALS=920, ST_EXTERIORRING=921, + ST_GEOMCOLLFROMTEXT=922, ST_GEOMCOLLFROMTXT=923, ST_GEOMCOLLFROMWKB=924, + ST_GEOMETRYCOLLECTIONFROMTEXT=925, ST_GEOMETRYCOLLECTIONFROMWKB=926, ST_GEOMETRYFROMTEXT=927, + ST_GEOMETRYFROMWKB=928, ST_GEOMETRYN=929, ST_GEOMETRYTYPE=930, ST_GEOMFROMTEXT=931, + ST_GEOMFROMWKB=932, ST_INTERIORRINGN=933, ST_INTERSECTION=934, ST_INTERSECTS=935, + ST_ISCLOSED=936, ST_ISEMPTY=937, ST_ISSIMPLE=938, ST_LINEFROMTEXT=939, + ST_LINEFROMWKB=940, ST_LINESTRINGFROMTEXT=941, ST_LINESTRINGFROMWKB=942, + ST_NUMGEOMETRIES=943, ST_NUMINTERIORRING=944, ST_NUMINTERIORRINGS=945, + ST_NUMPOINTS=946, ST_OVERLAPS=947, ST_POINTFROMTEXT=948, ST_POINTFROMWKB=949, + ST_POINTN=950, ST_POLYFROMTEXT=951, ST_POLYFROMWKB=952, ST_POLYGONFROMTEXT=953, + ST_POLYGONFROMWKB=954, ST_SRID=955, ST_STARTPOINT=956, ST_SYMDIFFERENCE=957, + ST_TOUCHES=958, ST_UNION=959, ST_WITHIN=960, ST_X=961, ST_Y=962, SUBDATE=963, + SUBSTRING_INDEX=964, SUBTIME=965, SYSTEM_USER=966, TAN=967, TIMEDIFF=968, + TIMESTAMPADD=969, TIMESTAMPDIFF=970, TIME_FORMAT=971, TIME_TO_SEC=972, + TOUCHES=973, TO_BASE64=974, TO_DAYS=975, TO_SECONDS=976, UCASE=977, UNCOMPRESS=978, + UNCOMPRESSED_LENGTH=979, UNHEX=980, UNIX_TIMESTAMP=981, UPDATEXML=982, + UPPER=983, UUID=984, UUID_SHORT=985, VALIDATE_PASSWORD_STRENGTH=986, VERSION=987, + WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS=988, WEEKDAY=989, WEEKOFYEAR=990, WEIGHT_STRING=991, + WITHIN=992, YEARWEEK=993, Y_FUNCTION=994, X_FUNCTION=995, VAR_ASSIGN=996, + PLUS_ASSIGN=997, MINUS_ASSIGN=998, MULT_ASSIGN=999, DIV_ASSIGN=1000, MOD_ASSIGN=1001, + AND_ASSIGN=1002, XOR_ASSIGN=1003, OR_ASSIGN=1004, STAR=1005, DIVIDE=1006, + MODULE=1007, PLUS=1008, MINUSMINUS=1009, MINUS=1010, DIV=1011, MOD=1012, + EQUAL_SYMBOL=1013, GREATER_SYMBOL=1014, LESS_SYMBOL=1015, EXCLAMATION_SYMBOL=1016, + BIT_NOT_OP=1017, BIT_OR_OP=1018, BIT_AND_OP=1019, BIT_XOR_OP=1020, DOT=1021, + LR_BRACKET=1022, RR_BRACKET=1023, COMMA=1024, SEMI=1025, AT_SIGN=1026, + ZERO_DECIMAL=1027, ONE_DECIMAL=1028, TWO_DECIMAL=1029, SINGLE_QUOTE_SYMB=1030, + DOUBLE_QUOTE_SYMB=1031, REVERSE_QUOTE_SYMB=1032, COLON_SYMB=1033, CHARSET_REVERSE_QOUTE_STRING=1034, + FILESIZE_LITERAL=1035, START_NATIONAL_STRING_LITERAL=1036, STRING_LITERAL=1037, + DECIMAL_LITERAL=1038, HEXADECIMAL_LITERAL=1039, REAL_LITERAL=1040, NULL_SPEC_LITERAL=1041, + BIT_STRING=1042, STRING_CHARSET_NAME=1043, DOT_ID=1044, ID=1045, REVERSE_QUOTE_ID=1046, + STRING_USER_NAME=1047, LOCAL_ID=1048, GLOBAL_ID=1049, ERROR_RECONGNIGION=1050; + public static final int + RULE_root = 0, RULE_sqlStatements = 1, RULE_sqlStatement = 2, RULE_emptyStatement = 3, + RULE_ddlStatement = 4, RULE_dmlStatement = 5, RULE_transactionStatement = 6, + RULE_replicationStatement = 7, RULE_preparedStatement = 8, RULE_compoundStatement = 9, + RULE_administrationStatement = 10, RULE_utilityStatement = 11, RULE_createDatabase = 12, + RULE_createEvent = 13, RULE_createIndex = 14, RULE_createLogfileGroup = 15, + RULE_createProcedure = 16, RULE_createFunction = 17, RULE_createServer = 18, + RULE_createTable = 19, RULE_createTablespaceInnodb = 20, RULE_createTablespaceNdb = 21, + RULE_createTrigger = 22, RULE_createView = 23, RULE_createDatabaseOption = 24, + RULE_ownerStatement = 25, RULE_scheduleExpression = 26, RULE_timestampValue = 27, + RULE_intervalExpr = 28, RULE_intervalType = 29, RULE_enableType = 30, + RULE_indexType = 31, RULE_indexOption = 32, RULE_procedureParameter = 33, + RULE_functionParameter = 34, RULE_routineOption = 35, RULE_serverOption = 36, + RULE_createDefinitions = 37, RULE_createDefinition = 38, RULE_columnDefinition = 39, + RULE_columnConstraint = 40, RULE_tableConstraint = 41, RULE_referenceDefinition = 42, + RULE_referenceAction = 43, RULE_referenceControlType = 44, RULE_indexColumnDefinition = 45, + RULE_tableOption = 46, RULE_tablespaceStorage = 47, RULE_partitionDefinitions = 48, + RULE_partitionFunctionDefinition = 49, RULE_subpartitionFunctionDefinition = 50, + RULE_partitionDefinition = 51, RULE_partitionDefinerAtom = 52, RULE_partitionDefinerVector = 53, + RULE_subpartitionDefinition = 54, RULE_partitionOption = 55, RULE_alterDatabase = 56, + RULE_alterEvent = 57, RULE_alterFunction = 58, RULE_alterInstance = 59, + RULE_alterLogfileGroup = 60, RULE_alterProcedure = 61, RULE_alterServer = 62, + RULE_alterTable = 63, RULE_alterTablespace = 64, RULE_alterView = 65, + RULE_alterSpecification = 66, RULE_dropDatabase = 67, RULE_dropEvent = 68, + RULE_dropIndex = 69, RULE_dropLogfileGroup = 70, RULE_dropProcedure = 71, + RULE_dropFunction = 72, RULE_dropServer = 73, RULE_dropTable = 74, RULE_dropTablespace = 75, + RULE_dropTrigger = 76, RULE_dropView = 77, RULE_renameTable = 78, RULE_renameTableClause = 79, + RULE_truncateTable = 80, RULE_callStatement = 81, RULE_deleteStatement = 82, + RULE_doStatement = 83, RULE_handlerStatement = 84, RULE_insertStatement = 85, + RULE_loadDataStatement = 86, RULE_loadXmlStatement = 87, RULE_replaceStatement = 88, + RULE_selectStatement = 89, RULE_updateStatement = 90, RULE_insertStatementValue = 91, + RULE_updatedElement = 92, RULE_assignmentField = 93, RULE_lockClause = 94, + RULE_singleDeleteStatement = 95, RULE_multipleDeleteStatement = 96, RULE_handlerOpenStatement = 97, + RULE_handlerReadIndexStatement = 98, RULE_handlerReadStatement = 99, RULE_handlerCloseStatement = 100, + RULE_singleUpdateStatement = 101, RULE_multipleUpdateStatement = 102, + RULE_orderByClause = 103, RULE_orderByExpression = 104, RULE_tableSources = 105, + RULE_tableSource = 106, RULE_tableSourceItem = 107, RULE_indexHint = 108, + RULE_indexHintType = 109, RULE_joinPart = 110, RULE_queryExpression = 111, + RULE_queryExpressionNointo = 112, RULE_querySpecification = 113, RULE_querySpecificationNointo = 114, + RULE_unionParenthesis = 115, RULE_unionStatement = 116, RULE_selectSpec = 117, + RULE_selectElements = 118, RULE_selectElement = 119, RULE_selectIntoExpression = 120, + RULE_selectFieldsInto = 121, RULE_selectLinesInto = 122, RULE_fromClause = 123, + RULE_groupByItem = 124, RULE_limitClause = 125, RULE_limitClauseAtom = 126, + RULE_startTransaction = 127, RULE_beginWork = 128, RULE_commitWork = 129, + RULE_rollbackWork = 130, RULE_savepointStatement = 131, RULE_rollbackStatement = 132, + RULE_releaseStatement = 133, RULE_lockTables = 134, RULE_unlockTables = 135, + RULE_setAutocommitStatement = 136, RULE_setTransactionStatement = 137, + RULE_transactionMode = 138, RULE_lockTableElement = 139, RULE_lockAction = 140, + RULE_transactionOption = 141, RULE_transactionLevel = 142, RULE_changeMaster = 143, + RULE_changeReplicationFilter = 144, RULE_purgeBinaryLogs = 145, RULE_resetMaster = 146, + RULE_resetSlave = 147, RULE_startSlave = 148, RULE_stopSlave = 149, RULE_startGroupReplication = 150, + RULE_stopGroupReplication = 151, RULE_masterOption = 152, RULE_stringMasterOption = 153, + RULE_decimalMasterOption = 154, RULE_boolMasterOption = 155, RULE_channelOption = 156, + RULE_replicationFilter = 157, RULE_tablePair = 158, RULE_threadType = 159, + RULE_untilOption = 160, RULE_connectionOption = 161, RULE_gtuidSet = 162, + RULE_xaStartTransaction = 163, RULE_xaEndTransaction = 164, RULE_xaPrepareStatement = 165, + RULE_xaCommitWork = 166, RULE_xaRollbackWork = 167, RULE_xaRecoverWork = 168, + RULE_prepareStatement = 169, RULE_executeStatement = 170, RULE_deallocatePrepare = 171, + RULE_routineBody = 172, RULE_blockStatement = 173, RULE_caseStatement = 174, + RULE_ifStatement = 175, RULE_iterateStatement = 176, RULE_leaveStatement = 177, + RULE_loopStatement = 178, RULE_repeatStatement = 179, RULE_returnStatement = 180, + RULE_whileStatement = 181, RULE_cursorStatement = 182, RULE_declareVariable = 183, + RULE_declareCondition = 184, RULE_declareCursor = 185, RULE_declareHandler = 186, + RULE_handlerConditionValue = 187, RULE_procedureSqlStatement = 188, RULE_caseAlternative = 189, + RULE_elifAlternative = 190, RULE_alterUser = 191, RULE_createUser = 192, + RULE_dropUser = 193, RULE_grantStatement = 194, RULE_grantProxy = 195, + RULE_renameUser = 196, RULE_revokeStatement = 197, RULE_revokeProxy = 198, + RULE_setPasswordStatement = 199, RULE_userSpecification = 200, RULE_userAuthOption = 201, + RULE_tlsOption = 202, RULE_userResourceOption = 203, RULE_userPasswordOption = 204, + RULE_userLockOption = 205, RULE_privelegeClause = 206, RULE_privilege = 207, + RULE_privilegeLevel = 208, RULE_renameUserClause = 209, RULE_analyzeTable = 210, + RULE_checkTable = 211, RULE_checksumTable = 212, RULE_optimizeTable = 213, + RULE_repairTable = 214, RULE_checkTableOption = 215, RULE_createUdfunction = 216, + RULE_installPlugin = 217, RULE_uninstallPlugin = 218, RULE_setStatement = 219, + RULE_showStatement = 220, RULE_variableClause = 221, RULE_showCommonEntity = 222, + RULE_showFilter = 223, RULE_showGlobalInfoClause = 224, RULE_showSchemaEntity = 225, + RULE_showProfileType = 226, RULE_binlogStatement = 227, RULE_cacheIndexStatement = 228, + RULE_flushStatement = 229, RULE_killStatement = 230, RULE_loadIndexIntoCache = 231, + RULE_resetStatement = 232, RULE_shutdownStatement = 233, RULE_tableIndexes = 234, + RULE_flushOption = 235, RULE_flushTableOption = 236, RULE_loadedTableIndexes = 237, + RULE_simpleDescribeStatement = 238, RULE_fullDescribeStatement = 239, + RULE_helpStatement = 240, RULE_useStatement = 241, RULE_signalStatement = 242, + RULE_resignalStatement = 243, RULE_signalConditionInformation = 244, RULE_diagnosticsStatement = 245, + RULE_diagnosticsConditionInformationName = 246, RULE_describeObjectClause = 247, + RULE_fullId = 248, RULE_tableName = 249, RULE_fullColumnName = 250, RULE_indexColumnName = 251, + RULE_userName = 252, RULE_mysqlVariable = 253, RULE_charsetName = 254, + RULE_collationName = 255, RULE_engineName = 256, RULE_uuidSet = 257, RULE_xid = 258, + RULE_xuidStringId = 259, RULE_authPlugin = 260, RULE_uid = 261, RULE_simpleId = 262, + RULE_dottedId = 263, RULE_decimalLiteral = 264, RULE_fileSizeLiteral = 265, + RULE_stringLiteral = 266, RULE_booleanLiteral = 267, RULE_hexadecimalLiteral = 268, + RULE_nullNotnull = 269, RULE_constant = 270, RULE_dataType = 271, RULE_collectionOptions = 272, + RULE_convertedDataType = 273, RULE_lengthOneDimension = 274, RULE_lengthTwoDimension = 275, + RULE_lengthTwoOptionalDimension = 276, RULE_uidList = 277, RULE_tables = 278, + RULE_indexColumnNames = 279, RULE_expressions = 280, RULE_expressionsForUpdate = 281, + RULE_expressionsWithDefaults = 282, RULE_constants = 283, RULE_simpleStrings = 284, + RULE_userVariables = 285, RULE_defaultValue = 286, RULE_currentTimestamp = 287, + RULE_expressionOrDefault = 288, RULE_ifExists = 289, RULE_ifNotExists = 290, + RULE_functionCall = 291, RULE_specificFunction = 292, RULE_caseFuncAlternative = 293, + RULE_levelsInWeightString = 294, RULE_levelInWeightListElement = 295, + RULE_aggregateWindowedFunction = 296, RULE_scalarFunctionName = 297, RULE_passwordFunctionClause = 298, + RULE_functionArgs = 299, RULE_functionArg = 300, RULE_expression = 301, + RULE_predicate = 302, RULE_expressionForUpdate = 303, RULE_predicateForUpdate = 304, + RULE_expressionAtomForUpdate = 305, RULE_expressionAtom = 306, RULE_unaryOperator = 307, + RULE_comparisonOperator = 308, RULE_logicalOperator = 309, RULE_bitOperator = 310, + RULE_mathOperator = 311, RULE_charsetNameBase = 312, RULE_transactionLevelBase = 313, + RULE_privilegesBase = 314, RULE_intervalTypeBase = 315, RULE_dataTypeBase = 316, + RULE_keywordsCanBeId = 317, RULE_functionNameBase = 318; + private static String[] makeRuleNames() { + return new String[] { + "root", "sqlStatements", "sqlStatement", "emptyStatement", "ddlStatement", + "dmlStatement", "transactionStatement", "replicationStatement", "preparedStatement", + "compoundStatement", "administrationStatement", "utilityStatement", "createDatabase", + "createEvent", "createIndex", "createLogfileGroup", "createProcedure", + "createFunction", "createServer", "createTable", "createTablespaceInnodb", + "createTablespaceNdb", "createTrigger", "createView", "createDatabaseOption", + "ownerStatement", "scheduleExpression", "timestampValue", "intervalExpr", + "intervalType", "enableType", "indexType", "indexOption", "procedureParameter", + "functionParameter", "routineOption", "serverOption", "createDefinitions", + "createDefinition", "columnDefinition", "columnConstraint", "tableConstraint", + "referenceDefinition", "referenceAction", "referenceControlType", "indexColumnDefinition", + "tableOption", "tablespaceStorage", "partitionDefinitions", "partitionFunctionDefinition", + "subpartitionFunctionDefinition", "partitionDefinition", "partitionDefinerAtom", + "partitionDefinerVector", "subpartitionDefinition", "partitionOption", + "alterDatabase", "alterEvent", "alterFunction", "alterInstance", "alterLogfileGroup", + "alterProcedure", "alterServer", "alterTable", "alterTablespace", "alterView", + "alterSpecification", "dropDatabase", "dropEvent", "dropIndex", "dropLogfileGroup", + "dropProcedure", "dropFunction", "dropServer", "dropTable", "dropTablespace", + "dropTrigger", "dropView", "renameTable", "renameTableClause", "truncateTable", + "callStatement", "deleteStatement", "doStatement", "handlerStatement", + "insertStatement", "loadDataStatement", "loadXmlStatement", "replaceStatement", + "selectStatement", "updateStatement", "insertStatementValue", "updatedElement", + "assignmentField", "lockClause", "singleDeleteStatement", "multipleDeleteStatement", + "handlerOpenStatement", "handlerReadIndexStatement", "handlerReadStatement", + "handlerCloseStatement", "singleUpdateStatement", "multipleUpdateStatement", + "orderByClause", "orderByExpression", "tableSources", "tableSource", + "tableSourceItem", "indexHint", "indexHintType", "joinPart", "queryExpression", + "queryExpressionNointo", "querySpecification", "querySpecificationNointo", + "unionParenthesis", "unionStatement", "selectSpec", "selectElements", + "selectElement", "selectIntoExpression", "selectFieldsInto", "selectLinesInto", + "fromClause", "groupByItem", "limitClause", "limitClauseAtom", "startTransaction", + "beginWork", "commitWork", "rollbackWork", "savepointStatement", "rollbackStatement", + "releaseStatement", "lockTables", "unlockTables", "setAutocommitStatement", + "setTransactionStatement", "transactionMode", "lockTableElement", "lockAction", + "transactionOption", "transactionLevel", "changeMaster", "changeReplicationFilter", + "purgeBinaryLogs", "resetMaster", "resetSlave", "startSlave", "stopSlave", + "startGroupReplication", "stopGroupReplication", "masterOption", "stringMasterOption", + "decimalMasterOption", "boolMasterOption", "channelOption", "replicationFilter", + "tablePair", "threadType", "untilOption", "connectionOption", "gtuidSet", + "xaStartTransaction", "xaEndTransaction", "xaPrepareStatement", "xaCommitWork", + "xaRollbackWork", "xaRecoverWork", "prepareStatement", "executeStatement", + "deallocatePrepare", "routineBody", "blockStatement", "caseStatement", + "ifStatement", "iterateStatement", "leaveStatement", "loopStatement", + "repeatStatement", "returnStatement", "whileStatement", "cursorStatement", + "declareVariable", "declareCondition", "declareCursor", "declareHandler", + "handlerConditionValue", "procedureSqlStatement", "caseAlternative", + "elifAlternative", "alterUser", "createUser", "dropUser", "grantStatement", + "grantProxy", "renameUser", "revokeStatement", "revokeProxy", "setPasswordStatement", + "userSpecification", "userAuthOption", "tlsOption", "userResourceOption", + "userPasswordOption", "userLockOption", "privelegeClause", "privilege", + "privilegeLevel", "renameUserClause", "analyzeTable", "checkTable", "checksumTable", + "optimizeTable", "repairTable", "checkTableOption", "createUdfunction", + "installPlugin", "uninstallPlugin", "setStatement", "showStatement", + "variableClause", "showCommonEntity", "showFilter", "showGlobalInfoClause", + "showSchemaEntity", "showProfileType", "binlogStatement", "cacheIndexStatement", + "flushStatement", "killStatement", "loadIndexIntoCache", "resetStatement", + "shutdownStatement", "tableIndexes", "flushOption", "flushTableOption", + "loadedTableIndexes", "simpleDescribeStatement", "fullDescribeStatement", + "helpStatement", "useStatement", "signalStatement", "resignalStatement", + "signalConditionInformation", "diagnosticsStatement", "diagnosticsConditionInformationName", + "describeObjectClause", "fullId", "tableName", "fullColumnName", "indexColumnName", + "userName", "mysqlVariable", "charsetName", "collationName", "engineName", + "uuidSet", "xid", "xuidStringId", "authPlugin", "uid", "simpleId", "dottedId", + "decimalLiteral", "fileSizeLiteral", "stringLiteral", "booleanLiteral", + "hexadecimalLiteral", "nullNotnull", "constant", "dataType", "collectionOptions", + "convertedDataType", "lengthOneDimension", "lengthTwoDimension", "lengthTwoOptionalDimension", + "uidList", "tables", "indexColumnNames", "expressions", "expressionsForUpdate", + "expressionsWithDefaults", "constants", "simpleStrings", "userVariables", + "defaultValue", "currentTimestamp", "expressionOrDefault", "ifExists", + "ifNotExists", "functionCall", "specificFunction", "caseFuncAlternative", + "levelsInWeightString", "levelInWeightListElement", "aggregateWindowedFunction", + "scalarFunctionName", "passwordFunctionClause", "functionArgs", "functionArg", + "expression", "predicate", "expressionForUpdate", "predicateForUpdate", + "expressionAtomForUpdate", "expressionAtom", "unaryOperator", "comparisonOperator", + "logicalOperator", "bitOperator", "mathOperator", "charsetNameBase", + "transactionLevelBase", "privilegesBase", "intervalTypeBase", "dataTypeBase", + "keywordsCanBeId", "functionNameBase" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, null, "'ADD'", "'ALL'", "'ALTER'", "'ALWAYS'", + "'ANALYZE'", "'AND'", "'AS'", "'ASC'", "'BEFORE'", "'BETWEEN'", "'BOTH'", + "'BY'", "'CALL'", "'CASCADE'", "'CASE'", "'CAST'", "'CHANGE'", "'CHARACTER'", + "'CHECK'", "'COLLATE'", "'COLUMN'", "'CONDITION'", "'CONSTRAINT'", "'CONTINUE'", + "'CONVERT'", "'CREATE'", "'CROSS'", "'CURRENT'", "'CURRENT_USER'", "'CURSOR'", + "'DATABASE'", "'DATABASES'", "'DECLARE'", "'DEFAULT'", "'DELAYED'", "'DELETE'", + "'DESC'", "'DESCRIBE'", "'DETERMINISTIC'", "'DIAGNOSTICS'", "'DISTINCT'", + "'DISTINCTROW'", "'DROP'", "'EACH'", "'ELSE'", "'ELSEIF'", "'ENCLOSED'", + "'ESCAPED'", "'EXISTS'", "'EXIT'", "'EXPLAIN'", "'FALSE'", "'FETCH'", + "'FOR'", "'FORCE'", "'FOREIGN'", "'FROM'", "'FULLTEXT'", "'GENERATED'", + "'GET'", "'GRANT'", "'GROUP'", "'HAVING'", "'HIGH_PRIORITY'", "'IF'", + "'IGNORE'", "'IN'", "'INDEX'", "'INFILE'", "'INNER'", "'INOUT'", "'INSERT'", + "'INTERVAL'", "'INTO'", "'IS'", "'ITERATE'", "'JOIN'", "'KEY'", "'KEYS'", + "'KILL'", "'LEADING'", "'LEAVE'", "'LEFT'", "'LIKE'", "'LIMIT'", "'LINEAR'", + "'LINES'", "'LOAD'", "'LOCK'", "'LOOP'", "'LOW_PRIORITY'", "'MASTER_BIND'", + "'MASTER_SSL_VERIFY_SERVER_CERT'", "'MATCH'", "'MAXVALUE'", "'MODIFIES'", + "'NATURAL'", "'NOT'", "'NO_WRITE_TO_BINLOG'", "'NULL'", "'NUMBER'", "'ON'", + "'OPTIMIZE'", "'OPTION'", "'OPTIONALLY'", "'OR'", "'ORDER'", "'OUT'", + "'OUTER'", "'OUTFILE'", "'PARTITION'", "'PRIMARY'", "'PROCEDURE'", "'PURGE'", + "'RANGE'", "'READ'", "'READS'", "'REFERENCES'", "'REGEXP'", "'RELEASE'", + "'RENAME'", "'REPEAT'", "'REPLACE'", "'REQUIRE'", "'RESIGNAL'", "'RESTRICT'", + "'RETURN'", "'REVOKE'", "'RIGHT'", "'RLIKE'", "'SCHEMA'", "'SCHEMAS'", + "'SELECT'", "'SET'", "'SEPARATOR'", "'SHOW'", "'SIGNAL'", "'SPATIAL'", + "'SQL'", "'SQLEXCEPTION'", "'SQLSTATE'", "'SQLWARNING'", "'SQL_BIG_RESULT'", + "'SQL_CALC_FOUND_ROWS'", "'SQL_SMALL_RESULT'", "'SSL'", "'STACKED'", + "'STARTING'", "'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_VALID'", "'JSON_SCHEMA_VALID'", "'AVG'", + "'BIT_AND'", "'BIT_OR'", "'BIT_XOR'", "'COUNT'", "'GROUP_CONCAT'", "'MAX'", + "'MIN'", "'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'", "'COALESCE'", "'CODE'", + "'COLUMNS'", "'COLUMN_FORMAT'", "'COLUMN_NAME'", "'COMMENT'", "'COMMIT'", + "'COMPACT'", "'COMPLETION'", "'COMPRESSED'", "'COMPRESSION'", "'CONCURRENT'", + "'CONNECTION'", "'CONSISTENT'", "'CONSTRAINT_CATALOG'", "'CONSTRAINT_SCHEMA'", + "'CONSTRAINT_NAME'", "'CONTAINS'", "'CONTEXT'", "'CONTRIBUTORS'", "'COPY'", + "'CPU'", "'CURSOR_NAME'", "'DATA'", "'DATAFILE'", "'DEALLOCATE'", "'DEFAULT_AUTH'", + "'DEFINER'", "'DELAY_KEY_WRITE'", "'DES_KEY_FILE'", "'DIRECTORY'", "'DISABLE'", + "'DISCARD'", "'DISK'", "'DO'", "'DUMPFILE'", "'DUPLICATE'", "'DYNAMIC'", + "'ENABLE'", "'ENCRYPTION'", "'END'", "'ENDS'", "'ENGINE'", "'ENGINES'", + "'ERROR'", "'ERRORS'", "'ESCAPE'", "'EVEN'", "'EVENT'", "'EVENTS'", "'EVERY'", + "'EXCHANGE'", "'EXCLUSIVE'", "'EXPIRE'", "'EXPORT'", "'EXTENDED'", "'EXTENT_SIZE'", + "'FAST'", "'FAULTS'", "'FIELDS'", "'FILE_BLOCK_SIZE'", "'FILTER'", "'FIRST'", + "'FIXED'", "'FLUSH'", "'FOLLOWS'", "'FOUND'", "'FULL'", "'FUNCTION'", + "'GENERAL'", "'GLOBAL'", "'GRANTS'", "'GROUP_REPLICATION'", "'HANDLER'", + "'HASH'", "'HELP'", "'HOST'", "'HOSTS'", "'IDENTIFIED'", "'IGNORE_SERVER_IDS'", + "'IMPORT'", "'INDEXES'", "'INITIAL_SIZE'", "'INPLACE'", "'INSERT_METHOD'", + "'INSTALL'", "'INSTANCE'", "'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'", "'NODEGROUP'", "'NONE'", "'OFFLINE'", "'OFFSET'", "'OF'", + "'OJ'", "'OLD_PASSWORD'", "'ONE'", "'ONLINE'", "'ONLY'", "'OPEN'", "'OPTIMIZER_COSTS'", + "'OPTIONS'", "'OWNER'", "'PACK_KEYS'", "'PAGE'", "'PARSER'", "'PARTIAL'", + "'PARTITIONING'", "'PARTITIONS'", "'PASSWORD'", "'PHASE'", "'PLUGIN'", + "'PLUGIN_DIR'", "'PLUGINS'", "'PORT'", "'PRECEDES'", "'PREPARE'", "'PRESERVE'", + "'PREV'", "'PROCESSLIST'", "'PROFILE'", "'PROFILES'", "'PROXY'", "'QUERY'", + "'QUICK'", "'REBUILD'", "'RECOVER'", "'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'", "'RESUME'", "'RETURNED_SQLSTATE'", "'RETURNS'", "'ROLE'", + "'ROLLBACK'", "'ROLLUP'", "'ROTATE'", "'ROW'", "'ROWS'", "'ROW_FORMAT'", + "'SAVEPOINT'", "'SCHEDULE'", "'SECURITY'", "'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'", "'TEMPORARY'", "'TEMPTABLE'", + "'THAN'", "'TRADITIONAL'", "'TRANSACTION'", "'TRANSACTIONAL'", "'TRIGGERS'", + "'TRUNCATE'", "'UNDEFINED'", "'UNDOFILE'", "'UNDO_BUFFER_SIZE'", "'UNINSTALL'", + "'UNKNOWN'", "'UNTIL'", "'UPGRADE'", "'USER'", "'USE_FRM'", "'USER_RESOURCES'", + "'VALIDATION'", "'VALUE'", "'VARIABLES'", "'VIEW'", "'VIRTUAL'", "'VISIBLE'", + "'WAIT'", "'WARNINGS'", "'WITHOUT'", "'WORK'", "'WRAPPER'", "'X509'", + "'XA'", "'XML'", "'EUR'", "'USA'", "'JIS'", "'ISO'", "'INTERNAL'", "'QUARTER'", + "'MONTH'", "'DAY'", "'HOUR'", "'MINUTE'", "'WEEK'", "'SECOND'", "'MICROSECOND'", + "'TABLES'", "'ROUTINE'", "'EXECUTE'", "'FILE'", "'PROCESS'", "'RELOAD'", + "'SHUTDOWN'", "'SUPER'", "'PRIVILEGES'", "'APPLICATION_PASSWORD_ADMIN'", + "'AUDIT_ADMIN'", "'BACKUP_ADMIN'", "'BINLOG_ADMIN'", "'BINLOG_ENCRYPTION_ADMIN'", + "'CLONE_ADMIN'", "'CONNECTION_ADMIN'", "'ENCRYPTION_KEY_ADMIN'", "'FIREWALL_ADMIN'", + "'FIREWALL_USER'", "'GROUP_REPLICATION_ADMIN'", "'INNODB_REDO_LOG_ARCHIVE'", + "'NDB_STORED_USER'", "'PERSIST_RO_VARIABLES_ADMIN'", "'REPLICATION_APPLIER'", + "'REPLICATION_SLAVE_ADMIN'", "'RESOURCE_GROUP_ADMIN'", "'RESOURCE_GROUP_USER'", + "'ROLE_ADMIN'", null, "'SET_USER_ID'", "'SHOW_ROUTINE'", "'SYSTEM_VARIABLES_ADMIN'", + "'TABLE_ENCRYPTION_ADMIN'", "'VERSION_TOKEN_ADMIN'", "'XA_RECOVER_ADMIN'", + "'ARMSCII8'", "'ASCII'", "'BIG5'", "'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'", "'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'", "'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'", "'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'", "'''", "'\"'", "'`'", "':'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "SPACE", "SPEC_MYSQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", + "ADD", "ALL", "ALTER", "ALWAYS", "ANALYZE", "AND", "AS", "ASC", "BEFORE", + "BETWEEN", "BOTH", "BY", "CALL", "CASCADE", "CASE", "CAST", "CHANGE", + "CHARACTER", "CHECK", "COLLATE", "COLUMN", "CONDITION", "CONSTRAINT", + "CONTINUE", "CONVERT", "CREATE", "CROSS", "CURRENT", "CURRENT_USER", + "CURSOR", "DATABASE", "DATABASES", "DECLARE", "DEFAULT", "DELAYED", "DELETE", + "DESC", "DESCRIBE", "DETERMINISTIC", "DIAGNOSTICS", "DISTINCT", "DISTINCTROW", + "DROP", "EACH", "ELSE", "ELSEIF", "ENCLOSED", "ESCAPED", "EXISTS", "EXIT", + "EXPLAIN", "FALSE", "FETCH", "FOR", "FORCE", "FOREIGN", "FROM", "FULLTEXT", + "GENERATED", "GET", "GRANT", "GROUP", "HAVING", "HIGH_PRIORITY", "IF", + "IGNORE", "IN", "INDEX", "INFILE", "INNER", "INOUT", "INSERT", "INTERVAL", + "INTO", "IS", "ITERATE", "JOIN", "KEY", "KEYS", "KILL", "LEADING", "LEAVE", + "LEFT", "LIKE", "LIMIT", "LINEAR", "LINES", "LOAD", "LOCK", "LOOP", "LOW_PRIORITY", + "MASTER_BIND", "MASTER_SSL_VERIFY_SERVER_CERT", "MATCH", "MAXVALUE", + "MODIFIES", "NATURAL", "NOT", "NO_WRITE_TO_BINLOG", "NULL_LITERAL", "NUMBER", + "ON", "OPTIMIZE", "OPTION", "OPTIONALLY", "OR", "ORDER", "OUT", "OUTER", + "OUTFILE", "PARTITION", "PRIMARY", "PROCEDURE", "PURGE", "RANGE", "READ", + "READS", "REFERENCES", "REGEXP", "RELEASE", "RENAME", "REPEAT", "REPLACE", + "REQUIRE", "RESIGNAL", "RESTRICT", "RETURN", "REVOKE", "RIGHT", "RLIKE", + "SCHEMA", "SCHEMAS", "SELECT", "SET", "SEPARATOR", "SHOW", "SIGNAL", + "SPATIAL", "SQL", "SQLEXCEPTION", "SQLSTATE", "SQLWARNING", "SQL_BIG_RESULT", + "SQL_CALC_FOUND_ROWS", "SQL_SMALL_RESULT", "SSL", "STACKED", "STARTING", + "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_VALID", + "JSON_SCHEMA_VALID", "AVG", "BIT_AND", "BIT_OR", "BIT_XOR", "COUNT", + "GROUP_CONCAT", "MAX", "MIN", "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", "COALESCE", "CODE", "COLUMNS", + "COLUMN_FORMAT", "COLUMN_NAME", "COMMENT", "COMMIT", "COMPACT", "COMPLETION", + "COMPRESSED", "COMPRESSION", "CONCURRENT", "CONNECTION", "CONSISTENT", + "CONSTRAINT_CATALOG", "CONSTRAINT_SCHEMA", "CONSTRAINT_NAME", "CONTAINS", + "CONTEXT", "CONTRIBUTORS", "COPY", "CPU", "CURSOR_NAME", "DATA", "DATAFILE", + "DEALLOCATE", "DEFAULT_AUTH", "DEFINER", "DELAY_KEY_WRITE", "DES_KEY_FILE", + "DIRECTORY", "DISABLE", "DISCARD", "DISK", "DO", "DUMPFILE", "DUPLICATE", + "DYNAMIC", "ENABLE", "ENCRYPTION", "END", "ENDS", "ENGINE", "ENGINES", + "ERROR", "ERRORS", "ESCAPE", "EVEN", "EVENT", "EVENTS", "EVERY", "EXCHANGE", + "EXCLUSIVE", "EXPIRE", "EXPORT", "EXTENDED", "EXTENT_SIZE", "FAST", "FAULTS", + "FIELDS", "FILE_BLOCK_SIZE", "FILTER", "FIRST", "FIXED", "FLUSH", "FOLLOWS", + "FOUND", "FULL", "FUNCTION", "GENERAL", "GLOBAL", "GRANTS", "GROUP_REPLICATION", + "HANDLER", "HASH", "HELP", "HOST", "HOSTS", "IDENTIFIED", "IGNORE_SERVER_IDS", + "IMPORT", "INDEXES", "INITIAL_SIZE", "INPLACE", "INSERT_METHOD", "INSTALL", + "INSTANCE", "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", "NODEGROUP", "NONE", + "OFFLINE", "OFFSET", "OF", "OJ", "OLD_PASSWORD", "ONE", "ONLINE", "ONLY", + "OPEN", "OPTIMIZER_COSTS", "OPTIONS", "OWNER", "PACK_KEYS", "PAGE", "PARSER", + "PARTIAL", "PARTITIONING", "PARTITIONS", "PASSWORD", "PHASE", "PLUGIN", + "PLUGIN_DIR", "PLUGINS", "PORT", "PRECEDES", "PREPARE", "PRESERVE", "PREV", + "PROCESSLIST", "PROFILE", "PROFILES", "PROXY", "QUERY", "QUICK", "REBUILD", + "RECOVER", "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", "RESUME", "RETURNED_SQLSTATE", "RETURNS", "ROLE", + "ROLLBACK", "ROLLUP", "ROTATE", "ROW", "ROWS", "ROW_FORMAT", "SAVEPOINT", + "SCHEDULE", "SECURITY", "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", "TEMPORARY", "TEMPTABLE", "THAN", "TRADITIONAL", "TRANSACTION", + "TRANSACTIONAL", "TRIGGERS", "TRUNCATE", "UNDEFINED", "UNDOFILE", "UNDO_BUFFER_SIZE", + "UNINSTALL", "UNKNOWN", "UNTIL", "UPGRADE", "USER", "USE_FRM", "USER_RESOURCES", + "VALIDATION", "VALUE", "VARIABLES", "VIEW", "VIRTUAL", "VISIBLE", "WAIT", + "WARNINGS", "WITHOUT", "WORK", "WRAPPER", "X509", "XA", "XML", "EUR", + "USA", "JIS", "ISO", "INTERNAL", "QUARTER", "MONTH", "DAY", "HOUR", "MINUTE", + "WEEK", "SECOND", "MICROSECOND", "TABLES", "ROUTINE", "EXECUTE", "FILE", + "PROCESS", "RELOAD", "SHUTDOWN", "SUPER", "PRIVILEGES", "APPLICATION_PASSWORD_ADMIN", + "AUDIT_ADMIN", "BACKUP_ADMIN", "BINLOG_ADMIN", "BINLOG_ENCRYPTION_ADMIN", + "CLONE_ADMIN", "CONNECTION_ADMIN", "ENCRYPTION_KEY_ADMIN", "FIREWALL_ADMIN", + "FIREWALL_USER", "GROUP_REPLICATION_ADMIN", "INNODB_REDO_LOG_ARCHIVE", + "NDB_STORED_USER", "PERSIST_RO_VARIABLES_ADMIN", "REPLICATION_APPLIER", + "REPLICATION_SLAVE_ADMIN", "RESOURCE_GROUP_ADMIN", "RESOURCE_GROUP_USER", + "ROLE_ADMIN", "SESSION_VARIABLES_ADMIN", "SET_USER_ID", "SHOW_ROUTINE", + "SYSTEM_VARIABLES_ADMIN", "TABLE_ENCRYPTION_ADMIN", "VERSION_TOKEN_ADMIN", + "XA_RECOVER_ADMIN", "ARMSCII8", "ASCII", "BIG5", "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", "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", "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", + "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", "MINUSMINUS", "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", + "LOCAL_ID", "GLOBAL_ID", "ERROR_RECONGNIGION" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "MySqlParser.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public MySqlParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + public static class RootContext extends ParserRuleContext { + public TerminalNode EOF() { return getToken(MySqlParser.EOF, 0); } + public SqlStatementsContext sqlStatements() { + return getRuleContext(SqlStatementsContext.class,0); + } + public TerminalNode MINUSMINUS() { return getToken(MySqlParser.MINUSMINUS, 0); } + public RootContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_root; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRoot(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRoot(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRoot(this); + else return visitor.visitChildren(this); + } + } + + public final RootContext root() throws RecognitionException { + RootContext _localctx = new RootContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_root); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(639); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ALTER) | (1L << ANALYZE) | (1L << CALL) | (1L << CHANGE) | (1L << CHECK) | (1L << CREATE) | (1L << DELETE) | (1L << DESC) | (1L << DESCRIBE) | (1L << DROP) | (1L << EXPLAIN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (GET - 64)) | (1L << (GRANT - 64)) | (1L << (INSERT - 64)) | (1L << (KILL - 64)) | (1L << (LOAD - 64)) | (1L << (LOCK - 64)) | (1L << (OPTIMIZE - 64)) | (1L << (PURGE - 64)) | (1L << (RELEASE - 64)) | (1L << (RENAME - 64)) | (1L << (REPLACE - 64)))) != 0) || ((((_la - 129)) & ~0x3f) == 0 && ((1L << (_la - 129)) & ((1L << (RESIGNAL - 129)) | (1L << (REVOKE - 129)) | (1L << (SELECT - 129)) | (1L << (SET - 129)) | (1L << (SHOW - 129)) | (1L << (SIGNAL - 129)) | (1L << (UNLOCK - 129)) | (1L << (UPDATE - 129)) | (1L << (USE - 129)))) != 0) || ((((_la - 282)) & ~0x3f) == 0 && ((1L << (_la - 282)) & ((1L << (BEGIN - 282)) | (1L << (BINLOG - 282)) | (1L << (CACHE - 282)) | (1L << (CHECKSUM - 282)) | (1L << (COMMIT - 282)) | (1L << (DEALLOCATE - 282)) | (1L << (DO - 282)))) != 0) || ((((_la - 364)) & ~0x3f) == 0 && ((1L << (_la - 364)) & ((1L << (FLUSH - 364)) | (1L << (HANDLER - 364)) | (1L << (HELP - 364)) | (1L << (INSTALL - 364)))) != 0) || ((((_la - 477)) & ~0x3f) == 0 && ((1L << (_la - 477)) & ((1L << (PREPARE - 477)) | (1L << (REPAIR - 477)) | (1L << (RESET - 477)) | (1L << (ROLLBACK - 477)) | (1L << (SAVEPOINT - 477)) | (1L << (START - 477)))) != 0) || ((((_la - 546)) & ~0x3f) == 0 && ((1L << (_la - 546)) & ((1L << (STOP - 546)) | (1L << (TRUNCATE - 546)) | (1L << (UNINSTALL - 546)) | (1L << (XA - 546)) | (1L << (EXECUTE - 546)))) != 0) || _la==SHUTDOWN || _la==LR_BRACKET || _la==SEMI) { + { + setState(638); + sqlStatements(); + } + } + + setState(642); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==MINUSMINUS) { + { + setState(641); + match(MINUSMINUS); + } + } + + setState(644); + match(EOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SqlStatementsContext extends ParserRuleContext { + public List sqlStatement() { + return getRuleContexts(SqlStatementContext.class); + } + public SqlStatementContext sqlStatement(int i) { + return getRuleContext(SqlStatementContext.class,i); + } + public List emptyStatement() { + return getRuleContexts(EmptyStatementContext.class); + } + public EmptyStatementContext emptyStatement(int i) { + return getRuleContext(EmptyStatementContext.class,i); + } + public List SEMI() { return getTokens(MySqlParser.SEMI); } + public TerminalNode SEMI(int i) { + return getToken(MySqlParser.SEMI, i); + } + public List MINUSMINUS() { return getTokens(MySqlParser.MINUSMINUS); } + public TerminalNode MINUSMINUS(int i) { + return getToken(MySqlParser.MINUSMINUS, i); + } + public SqlStatementsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_sqlStatements; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSqlStatements(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSqlStatements(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSqlStatements(this); + else return visitor.visitChildren(this); + } + } + + public final SqlStatementsContext sqlStatements() throws RecognitionException { + SqlStatementsContext _localctx = new SqlStatementsContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_sqlStatements); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(656); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,5,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + setState(654); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ALTER: + case ANALYZE: + case CALL: + case CHANGE: + case CHECK: + case CREATE: + case DELETE: + case DESC: + case DESCRIBE: + case DROP: + case EXPLAIN: + case GET: + case GRANT: + case INSERT: + case KILL: + case LOAD: + case LOCK: + case OPTIMIZE: + case PURGE: + case RELEASE: + case RENAME: + case REPLACE: + case RESIGNAL: + case REVOKE: + case SELECT: + case SET: + case SHOW: + case SIGNAL: + case UNLOCK: + case UPDATE: + case USE: + case BEGIN: + case BINLOG: + case CACHE: + case CHECKSUM: + case COMMIT: + case DEALLOCATE: + case DO: + case FLUSH: + case HANDLER: + case HELP: + case INSTALL: + case PREPARE: + case REPAIR: + case RESET: + case ROLLBACK: + case SAVEPOINT: + case START: + case STOP: + case TRUNCATE: + case UNINSTALL: + case XA: + case EXECUTE: + case SHUTDOWN: + case LR_BRACKET: + { + setState(646); + sqlStatement(); + setState(648); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==MINUSMINUS) { + { + setState(647); + match(MINUSMINUS); + } + } + + setState(651); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) { + case 1: + { + setState(650); + match(SEMI); + } + break; + } + } + break; + case SEMI: + { + setState(653); + emptyStatement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + setState(658); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,5,_ctx); + } + setState(667); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ALTER: + case ANALYZE: + case CALL: + case CHANGE: + case CHECK: + case CREATE: + case DELETE: + case DESC: + case DESCRIBE: + case DROP: + case EXPLAIN: + case GET: + case GRANT: + case INSERT: + case KILL: + case LOAD: + case LOCK: + case OPTIMIZE: + case PURGE: + case RELEASE: + case RENAME: + case REPLACE: + case RESIGNAL: + case REVOKE: + case SELECT: + case SET: + case SHOW: + case SIGNAL: + case UNLOCK: + case UPDATE: + case USE: + case BEGIN: + case BINLOG: + case CACHE: + case CHECKSUM: + case COMMIT: + case DEALLOCATE: + case DO: + case FLUSH: + case HANDLER: + case HELP: + case INSTALL: + case PREPARE: + case REPAIR: + case RESET: + case ROLLBACK: + case SAVEPOINT: + case START: + case STOP: + case TRUNCATE: + case UNINSTALL: + case XA: + case EXECUTE: + case SHUTDOWN: + case LR_BRACKET: + { + setState(659); + sqlStatement(); + setState(664); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) { + case 1: + { + setState(661); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==MINUSMINUS) { + { + setState(660); + match(MINUSMINUS); + } + } + + setState(663); + match(SEMI); + } + break; + } + } + break; + case SEMI: + { + setState(666); + emptyStatement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SqlStatementContext extends ParserRuleContext { + public DdlStatementContext ddlStatement() { + return getRuleContext(DdlStatementContext.class,0); + } + public DmlStatementContext dmlStatement() { + return getRuleContext(DmlStatementContext.class,0); + } + public TransactionStatementContext transactionStatement() { + return getRuleContext(TransactionStatementContext.class,0); + } + public ReplicationStatementContext replicationStatement() { + return getRuleContext(ReplicationStatementContext.class,0); + } + public PreparedStatementContext preparedStatement() { + return getRuleContext(PreparedStatementContext.class,0); + } + public AdministrationStatementContext administrationStatement() { + return getRuleContext(AdministrationStatementContext.class,0); + } + public UtilityStatementContext utilityStatement() { + return getRuleContext(UtilityStatementContext.class,0); + } + public SqlStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_sqlStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSqlStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSqlStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSqlStatement(this); + else return visitor.visitChildren(this); + } + } + + public final SqlStatementContext sqlStatement() throws RecognitionException { + SqlStatementContext _localctx = new SqlStatementContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_sqlStatement); + try { + setState(676); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(669); + ddlStatement(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(670); + dmlStatement(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(671); + transactionStatement(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(672); + replicationStatement(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(673); + preparedStatement(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(674); + administrationStatement(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(675); + utilityStatement(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EmptyStatementContext extends ParserRuleContext { + public TerminalNode SEMI() { return getToken(MySqlParser.SEMI, 0); } + public EmptyStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_emptyStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterEmptyStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitEmptyStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitEmptyStatement(this); + else return visitor.visitChildren(this); + } + } + + public final EmptyStatementContext emptyStatement() throws RecognitionException { + EmptyStatementContext _localctx = new EmptyStatementContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_emptyStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(678); + match(SEMI); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DdlStatementContext extends ParserRuleContext { + public CreateDatabaseContext createDatabase() { + return getRuleContext(CreateDatabaseContext.class,0); + } + public CreateEventContext createEvent() { + return getRuleContext(CreateEventContext.class,0); + } + public CreateIndexContext createIndex() { + return getRuleContext(CreateIndexContext.class,0); + } + public CreateLogfileGroupContext createLogfileGroup() { + return getRuleContext(CreateLogfileGroupContext.class,0); + } + public CreateProcedureContext createProcedure() { + return getRuleContext(CreateProcedureContext.class,0); + } + public CreateFunctionContext createFunction() { + return getRuleContext(CreateFunctionContext.class,0); + } + public CreateServerContext createServer() { + return getRuleContext(CreateServerContext.class,0); + } + public CreateTableContext createTable() { + return getRuleContext(CreateTableContext.class,0); + } + public CreateTablespaceInnodbContext createTablespaceInnodb() { + return getRuleContext(CreateTablespaceInnodbContext.class,0); + } + public CreateTablespaceNdbContext createTablespaceNdb() { + return getRuleContext(CreateTablespaceNdbContext.class,0); + } + public CreateTriggerContext createTrigger() { + return getRuleContext(CreateTriggerContext.class,0); + } + public CreateViewContext createView() { + return getRuleContext(CreateViewContext.class,0); + } + public AlterDatabaseContext alterDatabase() { + return getRuleContext(AlterDatabaseContext.class,0); + } + public AlterEventContext alterEvent() { + return getRuleContext(AlterEventContext.class,0); + } + public AlterFunctionContext alterFunction() { + return getRuleContext(AlterFunctionContext.class,0); + } + public AlterInstanceContext alterInstance() { + return getRuleContext(AlterInstanceContext.class,0); + } + public AlterLogfileGroupContext alterLogfileGroup() { + return getRuleContext(AlterLogfileGroupContext.class,0); + } + public AlterProcedureContext alterProcedure() { + return getRuleContext(AlterProcedureContext.class,0); + } + public AlterServerContext alterServer() { + return getRuleContext(AlterServerContext.class,0); + } + public AlterTableContext alterTable() { + return getRuleContext(AlterTableContext.class,0); + } + public AlterTablespaceContext alterTablespace() { + return getRuleContext(AlterTablespaceContext.class,0); + } + public AlterViewContext alterView() { + return getRuleContext(AlterViewContext.class,0); + } + public DropDatabaseContext dropDatabase() { + return getRuleContext(DropDatabaseContext.class,0); + } + public DropEventContext dropEvent() { + return getRuleContext(DropEventContext.class,0); + } + public DropIndexContext dropIndex() { + return getRuleContext(DropIndexContext.class,0); + } + public DropLogfileGroupContext dropLogfileGroup() { + return getRuleContext(DropLogfileGroupContext.class,0); + } + public DropProcedureContext dropProcedure() { + return getRuleContext(DropProcedureContext.class,0); + } + public DropFunctionContext dropFunction() { + return getRuleContext(DropFunctionContext.class,0); + } + public DropServerContext dropServer() { + return getRuleContext(DropServerContext.class,0); + } + public DropTableContext dropTable() { + return getRuleContext(DropTableContext.class,0); + } + public DropTablespaceContext dropTablespace() { + return getRuleContext(DropTablespaceContext.class,0); + } + public DropTriggerContext dropTrigger() { + return getRuleContext(DropTriggerContext.class,0); + } + public DropViewContext dropView() { + return getRuleContext(DropViewContext.class,0); + } + public RenameTableContext renameTable() { + return getRuleContext(RenameTableContext.class,0); + } + public TruncateTableContext truncateTable() { + return getRuleContext(TruncateTableContext.class,0); + } + public DdlStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ddlStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDdlStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDdlStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDdlStatement(this); + else return visitor.visitChildren(this); + } + } + + public final DdlStatementContext ddlStatement() throws RecognitionException { + DdlStatementContext _localctx = new DdlStatementContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_ddlStatement); + try { + setState(715); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(680); + createDatabase(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(681); + createEvent(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(682); + createIndex(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(683); + createLogfileGroup(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(684); + createProcedure(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(685); + createFunction(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(686); + createServer(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(687); + createTable(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(688); + createTablespaceInnodb(); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(689); + createTablespaceNdb(); + } + break; + case 11: + enterOuterAlt(_localctx, 11); + { + setState(690); + createTrigger(); + } + break; + case 12: + enterOuterAlt(_localctx, 12); + { + setState(691); + createView(); + } + break; + case 13: + enterOuterAlt(_localctx, 13); + { + setState(692); + alterDatabase(); + } + break; + case 14: + enterOuterAlt(_localctx, 14); + { + setState(693); + alterEvent(); + } + break; + case 15: + enterOuterAlt(_localctx, 15); + { + setState(694); + alterFunction(); + } + break; + case 16: + enterOuterAlt(_localctx, 16); + { + setState(695); + alterInstance(); + } + break; + case 17: + enterOuterAlt(_localctx, 17); + { + setState(696); + alterLogfileGroup(); + } + break; + case 18: + enterOuterAlt(_localctx, 18); + { + setState(697); + alterProcedure(); + } + break; + case 19: + enterOuterAlt(_localctx, 19); + { + setState(698); + alterServer(); + } + break; + case 20: + enterOuterAlt(_localctx, 20); + { + setState(699); + alterTable(); + } + break; + case 21: + enterOuterAlt(_localctx, 21); + { + setState(700); + alterTablespace(); + } + break; + case 22: + enterOuterAlt(_localctx, 22); + { + setState(701); + alterView(); + } + break; + case 23: + enterOuterAlt(_localctx, 23); + { + setState(702); + dropDatabase(); + } + break; + case 24: + enterOuterAlt(_localctx, 24); + { + setState(703); + dropEvent(); + } + break; + case 25: + enterOuterAlt(_localctx, 25); + { + setState(704); + dropIndex(); + } + break; + case 26: + enterOuterAlt(_localctx, 26); + { + setState(705); + dropLogfileGroup(); + } + break; + case 27: + enterOuterAlt(_localctx, 27); + { + setState(706); + dropProcedure(); + } + break; + case 28: + enterOuterAlt(_localctx, 28); + { + setState(707); + dropFunction(); + } + break; + case 29: + enterOuterAlt(_localctx, 29); + { + setState(708); + dropServer(); + } + break; + case 30: + enterOuterAlt(_localctx, 30); + { + setState(709); + dropTable(); + } + break; + case 31: + enterOuterAlt(_localctx, 31); + { + setState(710); + dropTablespace(); + } + break; + case 32: + enterOuterAlt(_localctx, 32); + { + setState(711); + dropTrigger(); + } + break; + case 33: + enterOuterAlt(_localctx, 33); + { + setState(712); + dropView(); + } + break; + case 34: + enterOuterAlt(_localctx, 34); + { + setState(713); + renameTable(); + } + break; + case 35: + enterOuterAlt(_localctx, 35); + { + setState(714); + truncateTable(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DmlStatementContext extends ParserRuleContext { + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public InsertStatementContext insertStatement() { + return getRuleContext(InsertStatementContext.class,0); + } + public UpdateStatementContext updateStatement() { + return getRuleContext(UpdateStatementContext.class,0); + } + public DeleteStatementContext deleteStatement() { + return getRuleContext(DeleteStatementContext.class,0); + } + public ReplaceStatementContext replaceStatement() { + return getRuleContext(ReplaceStatementContext.class,0); + } + public CallStatementContext callStatement() { + return getRuleContext(CallStatementContext.class,0); + } + public LoadDataStatementContext loadDataStatement() { + return getRuleContext(LoadDataStatementContext.class,0); + } + public LoadXmlStatementContext loadXmlStatement() { + return getRuleContext(LoadXmlStatementContext.class,0); + } + public DoStatementContext doStatement() { + return getRuleContext(DoStatementContext.class,0); + } + public HandlerStatementContext handlerStatement() { + return getRuleContext(HandlerStatementContext.class,0); + } + public DmlStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dmlStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDmlStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDmlStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDmlStatement(this); + else return visitor.visitChildren(this); + } + } + + public final DmlStatementContext dmlStatement() throws RecognitionException { + DmlStatementContext _localctx = new DmlStatementContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_dmlStatement); + try { + setState(727); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(717); + selectStatement(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(718); + insertStatement(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(719); + updateStatement(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(720); + deleteStatement(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(721); + replaceStatement(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(722); + callStatement(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(723); + loadDataStatement(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(724); + loadXmlStatement(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(725); + doStatement(); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(726); + handlerStatement(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TransactionStatementContext extends ParserRuleContext { + public StartTransactionContext startTransaction() { + return getRuleContext(StartTransactionContext.class,0); + } + public BeginWorkContext beginWork() { + return getRuleContext(BeginWorkContext.class,0); + } + public CommitWorkContext commitWork() { + return getRuleContext(CommitWorkContext.class,0); + } + public RollbackWorkContext rollbackWork() { + return getRuleContext(RollbackWorkContext.class,0); + } + public SavepointStatementContext savepointStatement() { + return getRuleContext(SavepointStatementContext.class,0); + } + public RollbackStatementContext rollbackStatement() { + return getRuleContext(RollbackStatementContext.class,0); + } + public ReleaseStatementContext releaseStatement() { + return getRuleContext(ReleaseStatementContext.class,0); + } + public LockTablesContext lockTables() { + return getRuleContext(LockTablesContext.class,0); + } + public UnlockTablesContext unlockTables() { + return getRuleContext(UnlockTablesContext.class,0); + } + public TransactionStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_transactionStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTransactionStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTransactionStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTransactionStatement(this); + else return visitor.visitChildren(this); + } + } + + public final TransactionStatementContext transactionStatement() throws RecognitionException { + TransactionStatementContext _localctx = new TransactionStatementContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_transactionStatement); + try { + setState(738); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(729); + startTransaction(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(730); + beginWork(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(731); + commitWork(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(732); + rollbackWork(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(733); + savepointStatement(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(734); + rollbackStatement(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(735); + releaseStatement(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(736); + lockTables(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(737); + unlockTables(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ReplicationStatementContext extends ParserRuleContext { + public ChangeMasterContext changeMaster() { + return getRuleContext(ChangeMasterContext.class,0); + } + public ChangeReplicationFilterContext changeReplicationFilter() { + return getRuleContext(ChangeReplicationFilterContext.class,0); + } + public PurgeBinaryLogsContext purgeBinaryLogs() { + return getRuleContext(PurgeBinaryLogsContext.class,0); + } + public ResetMasterContext resetMaster() { + return getRuleContext(ResetMasterContext.class,0); + } + public ResetSlaveContext resetSlave() { + return getRuleContext(ResetSlaveContext.class,0); + } + public StartSlaveContext startSlave() { + return getRuleContext(StartSlaveContext.class,0); + } + public StopSlaveContext stopSlave() { + return getRuleContext(StopSlaveContext.class,0); + } + public StartGroupReplicationContext startGroupReplication() { + return getRuleContext(StartGroupReplicationContext.class,0); + } + public StopGroupReplicationContext stopGroupReplication() { + return getRuleContext(StopGroupReplicationContext.class,0); + } + public XaStartTransactionContext xaStartTransaction() { + return getRuleContext(XaStartTransactionContext.class,0); + } + public XaEndTransactionContext xaEndTransaction() { + return getRuleContext(XaEndTransactionContext.class,0); + } + public XaPrepareStatementContext xaPrepareStatement() { + return getRuleContext(XaPrepareStatementContext.class,0); + } + public XaCommitWorkContext xaCommitWork() { + return getRuleContext(XaCommitWorkContext.class,0); + } + public XaRollbackWorkContext xaRollbackWork() { + return getRuleContext(XaRollbackWorkContext.class,0); + } + public XaRecoverWorkContext xaRecoverWork() { + return getRuleContext(XaRecoverWorkContext.class,0); + } + public ReplicationStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_replicationStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterReplicationStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitReplicationStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitReplicationStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ReplicationStatementContext replicationStatement() throws RecognitionException { + ReplicationStatementContext _localctx = new ReplicationStatementContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_replicationStatement); + try { + setState(755); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(740); + changeMaster(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(741); + changeReplicationFilter(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(742); + purgeBinaryLogs(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(743); + resetMaster(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(744); + resetSlave(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(745); + startSlave(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(746); + stopSlave(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(747); + startGroupReplication(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(748); + stopGroupReplication(); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(749); + xaStartTransaction(); + } + break; + case 11: + enterOuterAlt(_localctx, 11); + { + setState(750); + xaEndTransaction(); + } + break; + case 12: + enterOuterAlt(_localctx, 12); + { + setState(751); + xaPrepareStatement(); + } + break; + case 13: + enterOuterAlt(_localctx, 13); + { + setState(752); + xaCommitWork(); + } + break; + case 14: + enterOuterAlt(_localctx, 14); + { + setState(753); + xaRollbackWork(); + } + break; + case 15: + enterOuterAlt(_localctx, 15); + { + setState(754); + xaRecoverWork(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PreparedStatementContext extends ParserRuleContext { + public PrepareStatementContext prepareStatement() { + return getRuleContext(PrepareStatementContext.class,0); + } + public ExecuteStatementContext executeStatement() { + return getRuleContext(ExecuteStatementContext.class,0); + } + public DeallocatePrepareContext deallocatePrepare() { + return getRuleContext(DeallocatePrepareContext.class,0); + } + public PreparedStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_preparedStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPreparedStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPreparedStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPreparedStatement(this); + else return visitor.visitChildren(this); + } + } + + public final PreparedStatementContext preparedStatement() throws RecognitionException { + PreparedStatementContext _localctx = new PreparedStatementContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_preparedStatement); + try { + setState(760); + _errHandler.sync(this); + switch (_input.LA(1)) { + case PREPARE: + enterOuterAlt(_localctx, 1); + { + setState(757); + prepareStatement(); + } + break; + case EXECUTE: + enterOuterAlt(_localctx, 2); + { + setState(758); + executeStatement(); + } + break; + case DROP: + case DEALLOCATE: + enterOuterAlt(_localctx, 3); + { + setState(759); + deallocatePrepare(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CompoundStatementContext extends ParserRuleContext { + public BlockStatementContext blockStatement() { + return getRuleContext(BlockStatementContext.class,0); + } + public CaseStatementContext caseStatement() { + return getRuleContext(CaseStatementContext.class,0); + } + public IfStatementContext ifStatement() { + return getRuleContext(IfStatementContext.class,0); + } + public LeaveStatementContext leaveStatement() { + return getRuleContext(LeaveStatementContext.class,0); + } + public LoopStatementContext loopStatement() { + return getRuleContext(LoopStatementContext.class,0); + } + public RepeatStatementContext repeatStatement() { + return getRuleContext(RepeatStatementContext.class,0); + } + public WhileStatementContext whileStatement() { + return getRuleContext(WhileStatementContext.class,0); + } + public IterateStatementContext iterateStatement() { + return getRuleContext(IterateStatementContext.class,0); + } + public ReturnStatementContext returnStatement() { + return getRuleContext(ReturnStatementContext.class,0); + } + public CursorStatementContext cursorStatement() { + return getRuleContext(CursorStatementContext.class,0); + } + public CompoundStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_compoundStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCompoundStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCompoundStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCompoundStatement(this); + else return visitor.visitChildren(this); + } + } + + public final CompoundStatementContext compoundStatement() throws RecognitionException { + CompoundStatementContext _localctx = new CompoundStatementContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_compoundStatement); + try { + setState(772); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(762); + blockStatement(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(763); + caseStatement(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(764); + ifStatement(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(765); + leaveStatement(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(766); + loopStatement(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(767); + repeatStatement(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(768); + whileStatement(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(769); + iterateStatement(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(770); + returnStatement(); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(771); + cursorStatement(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AdministrationStatementContext extends ParserRuleContext { + public AlterUserContext alterUser() { + return getRuleContext(AlterUserContext.class,0); + } + public CreateUserContext createUser() { + return getRuleContext(CreateUserContext.class,0); + } + public DropUserContext dropUser() { + return getRuleContext(DropUserContext.class,0); + } + public GrantStatementContext grantStatement() { + return getRuleContext(GrantStatementContext.class,0); + } + public GrantProxyContext grantProxy() { + return getRuleContext(GrantProxyContext.class,0); + } + public RenameUserContext renameUser() { + return getRuleContext(RenameUserContext.class,0); + } + public RevokeStatementContext revokeStatement() { + return getRuleContext(RevokeStatementContext.class,0); + } + public RevokeProxyContext revokeProxy() { + return getRuleContext(RevokeProxyContext.class,0); + } + public AnalyzeTableContext analyzeTable() { + return getRuleContext(AnalyzeTableContext.class,0); + } + public CheckTableContext checkTable() { + return getRuleContext(CheckTableContext.class,0); + } + public ChecksumTableContext checksumTable() { + return getRuleContext(ChecksumTableContext.class,0); + } + public OptimizeTableContext optimizeTable() { + return getRuleContext(OptimizeTableContext.class,0); + } + public RepairTableContext repairTable() { + return getRuleContext(RepairTableContext.class,0); + } + public CreateUdfunctionContext createUdfunction() { + return getRuleContext(CreateUdfunctionContext.class,0); + } + public InstallPluginContext installPlugin() { + return getRuleContext(InstallPluginContext.class,0); + } + public UninstallPluginContext uninstallPlugin() { + return getRuleContext(UninstallPluginContext.class,0); + } + public SetStatementContext setStatement() { + return getRuleContext(SetStatementContext.class,0); + } + public ShowStatementContext showStatement() { + return getRuleContext(ShowStatementContext.class,0); + } + public BinlogStatementContext binlogStatement() { + return getRuleContext(BinlogStatementContext.class,0); + } + public CacheIndexStatementContext cacheIndexStatement() { + return getRuleContext(CacheIndexStatementContext.class,0); + } + public FlushStatementContext flushStatement() { + return getRuleContext(FlushStatementContext.class,0); + } + public KillStatementContext killStatement() { + return getRuleContext(KillStatementContext.class,0); + } + public LoadIndexIntoCacheContext loadIndexIntoCache() { + return getRuleContext(LoadIndexIntoCacheContext.class,0); + } + public ResetStatementContext resetStatement() { + return getRuleContext(ResetStatementContext.class,0); + } + public ShutdownStatementContext shutdownStatement() { + return getRuleContext(ShutdownStatementContext.class,0); + } + public AdministrationStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_administrationStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAdministrationStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAdministrationStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAdministrationStatement(this); + else return visitor.visitChildren(this); + } + } + + public final AdministrationStatementContext administrationStatement() throws RecognitionException { + AdministrationStatementContext _localctx = new AdministrationStatementContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_administrationStatement); + try { + setState(799); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(774); + alterUser(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(775); + createUser(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(776); + dropUser(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(777); + grantStatement(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(778); + grantProxy(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(779); + renameUser(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(780); + revokeStatement(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(781); + revokeProxy(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(782); + analyzeTable(); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(783); + checkTable(); + } + break; + case 11: + enterOuterAlt(_localctx, 11); + { + setState(784); + checksumTable(); + } + break; + case 12: + enterOuterAlt(_localctx, 12); + { + setState(785); + optimizeTable(); + } + break; + case 13: + enterOuterAlt(_localctx, 13); + { + setState(786); + repairTable(); + } + break; + case 14: + enterOuterAlt(_localctx, 14); + { + setState(787); + createUdfunction(); + } + break; + case 15: + enterOuterAlt(_localctx, 15); + { + setState(788); + installPlugin(); + } + break; + case 16: + enterOuterAlt(_localctx, 16); + { + setState(789); + uninstallPlugin(); + } + break; + case 17: + enterOuterAlt(_localctx, 17); + { + setState(790); + setStatement(); + } + break; + case 18: + enterOuterAlt(_localctx, 18); + { + setState(791); + showStatement(); + } + break; + case 19: + enterOuterAlt(_localctx, 19); + { + setState(792); + binlogStatement(); + } + break; + case 20: + enterOuterAlt(_localctx, 20); + { + setState(793); + cacheIndexStatement(); + } + break; + case 21: + enterOuterAlt(_localctx, 21); + { + setState(794); + flushStatement(); + } + break; + case 22: + enterOuterAlt(_localctx, 22); + { + setState(795); + killStatement(); + } + break; + case 23: + enterOuterAlt(_localctx, 23); + { + setState(796); + loadIndexIntoCache(); + } + break; + case 24: + enterOuterAlt(_localctx, 24); + { + setState(797); + resetStatement(); + } + break; + case 25: + enterOuterAlt(_localctx, 25); + { + setState(798); + shutdownStatement(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UtilityStatementContext extends ParserRuleContext { + public SimpleDescribeStatementContext simpleDescribeStatement() { + return getRuleContext(SimpleDescribeStatementContext.class,0); + } + public FullDescribeStatementContext fullDescribeStatement() { + return getRuleContext(FullDescribeStatementContext.class,0); + } + public HelpStatementContext helpStatement() { + return getRuleContext(HelpStatementContext.class,0); + } + public UseStatementContext useStatement() { + return getRuleContext(UseStatementContext.class,0); + } + public SignalStatementContext signalStatement() { + return getRuleContext(SignalStatementContext.class,0); + } + public ResignalStatementContext resignalStatement() { + return getRuleContext(ResignalStatementContext.class,0); + } + public DiagnosticsStatementContext diagnosticsStatement() { + return getRuleContext(DiagnosticsStatementContext.class,0); + } + public UtilityStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_utilityStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUtilityStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUtilityStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUtilityStatement(this); + else return visitor.visitChildren(this); + } + } + + public final UtilityStatementContext utilityStatement() throws RecognitionException { + UtilityStatementContext _localctx = new UtilityStatementContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_utilityStatement); + try { + setState(808); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(801); + simpleDescribeStatement(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(802); + fullDescribeStatement(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(803); + helpStatement(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(804); + useStatement(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(805); + signalStatement(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(806); + resignalStatement(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(807); + diagnosticsStatement(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateDatabaseContext extends ParserRuleContext { + public Token dbFormat; + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode DATABASE() { return getToken(MySqlParser.DATABASE, 0); } + public TerminalNode SCHEMA() { return getToken(MySqlParser.SCHEMA, 0); } + public IfNotExistsContext ifNotExists() { + return getRuleContext(IfNotExistsContext.class,0); + } + public List createDatabaseOption() { + return getRuleContexts(CreateDatabaseOptionContext.class); + } + public CreateDatabaseOptionContext createDatabaseOption(int i) { + return getRuleContext(CreateDatabaseOptionContext.class,i); + } + public CreateDatabaseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createDatabase; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateDatabase(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateDatabase(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateDatabase(this); + else return visitor.visitChildren(this); + } + } + + public final CreateDatabaseContext createDatabase() throws RecognitionException { + CreateDatabaseContext _localctx = new CreateDatabaseContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_createDatabase); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(810); + match(CREATE); + setState(811); + ((CreateDatabaseContext)_localctx).dbFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DATABASE || _la==SCHEMA) ) { + ((CreateDatabaseContext)_localctx).dbFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(813); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(812); + ifNotExists(); + } + } + + setState(815); + uid(); + setState(819); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CHARACTER) | (1L << COLLATE) | (1L << DEFAULT))) != 0) || _la==CHARSET) { + { + { + setState(816); + createDatabaseOption(); + } + } + setState(821); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateEventContext extends ParserRuleContext { + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode EVENT() { return getToken(MySqlParser.EVENT, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public List ON() { return getTokens(MySqlParser.ON); } + public TerminalNode ON(int i) { + return getToken(MySqlParser.ON, i); + } + public TerminalNode SCHEDULE() { return getToken(MySqlParser.SCHEDULE, 0); } + public ScheduleExpressionContext scheduleExpression() { + return getRuleContext(ScheduleExpressionContext.class,0); + } + public TerminalNode DO() { return getToken(MySqlParser.DO, 0); } + public RoutineBodyContext routineBody() { + return getRuleContext(RoutineBodyContext.class,0); + } + public OwnerStatementContext ownerStatement() { + return getRuleContext(OwnerStatementContext.class,0); + } + public IfNotExistsContext ifNotExists() { + return getRuleContext(IfNotExistsContext.class,0); + } + public TerminalNode COMPLETION() { return getToken(MySqlParser.COMPLETION, 0); } + public TerminalNode PRESERVE() { return getToken(MySqlParser.PRESERVE, 0); } + public EnableTypeContext enableType() { + return getRuleContext(EnableTypeContext.class,0); + } + public TerminalNode COMMENT() { return getToken(MySqlParser.COMMENT, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public CreateEventContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createEvent; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateEvent(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateEvent(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateEvent(this); + else return visitor.visitChildren(this); + } + } + + public final CreateEventContext createEvent() throws RecognitionException { + CreateEventContext _localctx = new CreateEventContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_createEvent); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(822); + match(CREATE); + setState(824); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFINER) { + { + setState(823); + ownerStatement(); + } + } + + setState(826); + match(EVENT); + setState(828); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(827); + ifNotExists(); + } + } + + setState(830); + fullId(); + setState(831); + match(ON); + setState(832); + match(SCHEDULE); + setState(833); + scheduleExpression(); + setState(840); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ON) { + { + setState(834); + match(ON); + setState(835); + match(COMPLETION); + setState(837); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(836); + match(NOT); + } + } + + setState(839); + match(PRESERVE); + } + } + + setState(843); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DISABLE || _la==ENABLE) { + { + setState(842); + enableType(); + } + } + + setState(847); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMENT) { + { + setState(845); + match(COMMENT); + setState(846); + match(STRING_LITERAL); + } + } + + setState(849); + match(DO); + setState(850); + routineBody(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateIndexContext extends ParserRuleContext { + public Token intimeAction; + public Token indexCategory; + public Token algType; + public Token lockType; + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public IndexColumnNamesContext indexColumnNames() { + return getRuleContext(IndexColumnNamesContext.class,0); + } + public IndexTypeContext indexType() { + return getRuleContext(IndexTypeContext.class,0); + } + public List indexOption() { + return getRuleContexts(IndexOptionContext.class); + } + public IndexOptionContext indexOption(int i) { + return getRuleContext(IndexOptionContext.class,i); + } + public List ALGORITHM() { return getTokens(MySqlParser.ALGORITHM); } + public TerminalNode ALGORITHM(int i) { + return getToken(MySqlParser.ALGORITHM, i); + } + public List LOCK() { return getTokens(MySqlParser.LOCK); } + public TerminalNode LOCK(int i) { + return getToken(MySqlParser.LOCK, i); + } + public TerminalNode ONLINE() { return getToken(MySqlParser.ONLINE, 0); } + public TerminalNode OFFLINE() { return getToken(MySqlParser.OFFLINE, 0); } + public TerminalNode UNIQUE() { return getToken(MySqlParser.UNIQUE, 0); } + public TerminalNode FULLTEXT() { return getToken(MySqlParser.FULLTEXT, 0); } + public TerminalNode SPATIAL() { return getToken(MySqlParser.SPATIAL, 0); } + public List DEFAULT() { return getTokens(MySqlParser.DEFAULT); } + public TerminalNode DEFAULT(int i) { + return getToken(MySqlParser.DEFAULT, i); + } + public List INPLACE() { return getTokens(MySqlParser.INPLACE); } + public TerminalNode INPLACE(int i) { + return getToken(MySqlParser.INPLACE, i); + } + public List COPY() { return getTokens(MySqlParser.COPY); } + public TerminalNode COPY(int i) { + return getToken(MySqlParser.COPY, i); + } + public List NONE() { return getTokens(MySqlParser.NONE); } + public TerminalNode NONE(int i) { + return getToken(MySqlParser.NONE, i); + } + public List SHARED() { return getTokens(MySqlParser.SHARED); } + public TerminalNode SHARED(int i) { + return getToken(MySqlParser.SHARED, i); + } + public List EXCLUSIVE() { return getTokens(MySqlParser.EXCLUSIVE); } + public TerminalNode EXCLUSIVE(int i) { + return getToken(MySqlParser.EXCLUSIVE, i); + } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public CreateIndexContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createIndex; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateIndex(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateIndex(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateIndex(this); + else return visitor.visitChildren(this); + } + } + + public final CreateIndexContext createIndex() throws RecognitionException { + CreateIndexContext _localctx = new CreateIndexContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_createIndex); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(852); + match(CREATE); + setState(854); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==OFFLINE || _la==ONLINE) { + { + setState(853); + ((CreateIndexContext)_localctx).intimeAction = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==OFFLINE || _la==ONLINE) ) { + ((CreateIndexContext)_localctx).intimeAction = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(857); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FULLTEXT || _la==SPATIAL || _la==UNIQUE) { + { + setState(856); + ((CreateIndexContext)_localctx).indexCategory = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FULLTEXT || _la==SPATIAL || _la==UNIQUE) ) { + ((CreateIndexContext)_localctx).indexCategory = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(859); + match(INDEX); + setState(860); + uid(); + setState(862); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==USING) { + { + setState(861); + indexType(); + } + } + + setState(864); + match(ON); + setState(865); + tableName(); + setState(866); + indexColumnNames(); + setState(870); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==USING || _la==WITH || _la==COMMENT || _la==INVISIBLE || _la==KEY_BLOCK_SIZE || _la==VISIBLE) { + { + { + setState(867); + indexOption(); + } + } + setState(872); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(885); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,33,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + setState(883); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ALGORITHM: + { + setState(873); + match(ALGORITHM); + setState(875); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(874); + match(EQUAL_SYMBOL); + } + } + + setState(877); + ((CreateIndexContext)_localctx).algType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFAULT || _la==COPY || _la==INPLACE) ) { + ((CreateIndexContext)_localctx).algType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case LOCK: + { + setState(878); + match(LOCK); + setState(880); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(879); + match(EQUAL_SYMBOL); + } + } + + setState(882); + ((CreateIndexContext)_localctx).lockType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFAULT || _la==EXCLUSIVE || _la==NONE || _la==SHARED) ) { + ((CreateIndexContext)_localctx).lockType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + } + setState(887); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,33,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateLogfileGroupContext extends ParserRuleContext { + public Token undoFile; + public FileSizeLiteralContext initSize; + public FileSizeLiteralContext undoSize; + public FileSizeLiteralContext redoSize; + public Token comment; + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode LOGFILE() { return getToken(MySqlParser.LOGFILE, 0); } + public TerminalNode GROUP() { return getToken(MySqlParser.GROUP, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public TerminalNode UNDOFILE() { return getToken(MySqlParser.UNDOFILE, 0); } + public TerminalNode ENGINE() { return getToken(MySqlParser.ENGINE, 0); } + public EngineNameContext engineName() { + return getRuleContext(EngineNameContext.class,0); + } + public List STRING_LITERAL() { return getTokens(MySqlParser.STRING_LITERAL); } + public TerminalNode STRING_LITERAL(int i) { + return getToken(MySqlParser.STRING_LITERAL, i); + } + public TerminalNode INITIAL_SIZE() { return getToken(MySqlParser.INITIAL_SIZE, 0); } + public TerminalNode UNDO_BUFFER_SIZE() { return getToken(MySqlParser.UNDO_BUFFER_SIZE, 0); } + public TerminalNode REDO_BUFFER_SIZE() { return getToken(MySqlParser.REDO_BUFFER_SIZE, 0); } + public TerminalNode NODEGROUP() { return getToken(MySqlParser.NODEGROUP, 0); } + public TerminalNode WAIT() { return getToken(MySqlParser.WAIT, 0); } + public TerminalNode COMMENT() { return getToken(MySqlParser.COMMENT, 0); } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public List fileSizeLiteral() { + return getRuleContexts(FileSizeLiteralContext.class); + } + public FileSizeLiteralContext fileSizeLiteral(int i) { + return getRuleContext(FileSizeLiteralContext.class,i); + } + public CreateLogfileGroupContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createLogfileGroup; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateLogfileGroup(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateLogfileGroup(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateLogfileGroup(this); + else return visitor.visitChildren(this); + } + } + + public final CreateLogfileGroupContext createLogfileGroup() throws RecognitionException { + CreateLogfileGroupContext _localctx = new CreateLogfileGroupContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_createLogfileGroup); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(888); + match(CREATE); + setState(889); + match(LOGFILE); + setState(890); + match(GROUP); + setState(891); + uid(); + setState(892); + match(ADD); + setState(893); + match(UNDOFILE); + setState(894); + ((CreateLogfileGroupContext)_localctx).undoFile = match(STRING_LITERAL); + setState(900); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INITIAL_SIZE) { + { + setState(895); + match(INITIAL_SIZE); + setState(897); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(896); + match(EQUAL_SYMBOL); + } + } + + setState(899); + ((CreateLogfileGroupContext)_localctx).initSize = fileSizeLiteral(); + } + } + + setState(907); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==UNDO_BUFFER_SIZE) { + { + setState(902); + match(UNDO_BUFFER_SIZE); + setState(904); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(903); + match(EQUAL_SYMBOL); + } + } + + setState(906); + ((CreateLogfileGroupContext)_localctx).undoSize = fileSizeLiteral(); + } + } + + setState(914); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==REDO_BUFFER_SIZE) { + { + setState(909); + match(REDO_BUFFER_SIZE); + setState(911); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(910); + match(EQUAL_SYMBOL); + } + } + + setState(913); + ((CreateLogfileGroupContext)_localctx).redoSize = fileSizeLiteral(); + } + } + + setState(921); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NODEGROUP) { + { + setState(916); + match(NODEGROUP); + setState(918); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(917); + match(EQUAL_SYMBOL); + } + } + + setState(920); + uid(); + } + } + + setState(924); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WAIT) { + { + setState(923); + match(WAIT); + } + } + + setState(931); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMENT) { + { + setState(926); + match(COMMENT); + setState(928); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(927); + match(EQUAL_SYMBOL); + } + } + + setState(930); + ((CreateLogfileGroupContext)_localctx).comment = match(STRING_LITERAL); + } + } + + setState(933); + match(ENGINE); + setState(935); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(934); + match(EQUAL_SYMBOL); + } + } + + setState(937); + engineName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateProcedureContext extends ParserRuleContext { + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode PROCEDURE() { return getToken(MySqlParser.PROCEDURE, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public RoutineBodyContext routineBody() { + return getRuleContext(RoutineBodyContext.class,0); + } + public OwnerStatementContext ownerStatement() { + return getRuleContext(OwnerStatementContext.class,0); + } + public List procedureParameter() { + return getRuleContexts(ProcedureParameterContext.class); + } + public ProcedureParameterContext procedureParameter(int i) { + return getRuleContext(ProcedureParameterContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public List routineOption() { + return getRuleContexts(RoutineOptionContext.class); + } + public RoutineOptionContext routineOption(int i) { + return getRuleContext(RoutineOptionContext.class,i); + } + public CreateProcedureContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createProcedure; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateProcedure(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateProcedure(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateProcedure(this); + else return visitor.visitChildren(this); + } + } + + public final CreateProcedureContext createProcedure() throws RecognitionException { + CreateProcedureContext _localctx = new CreateProcedureContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_createProcedure); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(939); + match(CREATE); + setState(941); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFINER) { + { + setState(940); + ownerStatement(); + } + } + + setState(943); + match(PROCEDURE); + setState(944); + fullId(); + setState(945); + match(LR_BRACKET); + setState(947); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (IN - 71)) | (1L << (INOUT - 71)) | (1L << (LEFT - 71)) | (1L << (NUMBER - 71)) | (1L << (OUT - 71)) | (1L << (RIGHT - 71)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(946); + procedureParameter(); + } + } + + setState(953); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(949); + match(COMMA); + setState(950); + procedureParameter(); + } + } + setState(955); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(956); + match(RR_BRACKET); + setState(960); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(957); + routineOption(); + } + } + } + setState(962); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + } + setState(963); + routineBody(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateFunctionContext extends ParserRuleContext { + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode FUNCTION() { return getToken(MySqlParser.FUNCTION, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode RETURNS() { return getToken(MySqlParser.RETURNS, 0); } + public DataTypeContext dataType() { + return getRuleContext(DataTypeContext.class,0); + } + public RoutineBodyContext routineBody() { + return getRuleContext(RoutineBodyContext.class,0); + } + public ReturnStatementContext returnStatement() { + return getRuleContext(ReturnStatementContext.class,0); + } + public OwnerStatementContext ownerStatement() { + return getRuleContext(OwnerStatementContext.class,0); + } + public List functionParameter() { + return getRuleContexts(FunctionParameterContext.class); + } + public FunctionParameterContext functionParameter(int i) { + return getRuleContext(FunctionParameterContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public List routineOption() { + return getRuleContexts(RoutineOptionContext.class); + } + public RoutineOptionContext routineOption(int i) { + return getRuleContext(RoutineOptionContext.class,i); + } + public CreateFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateFunction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateFunction(this); + else return visitor.visitChildren(this); + } + } + + public final CreateFunctionContext createFunction() throws RecognitionException { + CreateFunctionContext _localctx = new CreateFunctionContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_createFunction); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(965); + match(CREATE); + setState(967); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFINER) { + { + setState(966); + ownerStatement(); + } + } + + setState(969); + match(FUNCTION); + setState(970); + fullId(); + setState(971); + match(LR_BRACKET); + setState(973); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(972); + functionParameter(); + } + } + + setState(979); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(975); + match(COMMA); + setState(976); + functionParameter(); + } + } + setState(981); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(982); + match(RR_BRACKET); + setState(983); + match(RETURNS); + setState(984); + dataType(); + setState(988); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,53,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(985); + routineOption(); + } + } + } + setState(990); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,53,_ctx); + } + setState(993); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ALTER: + case ANALYZE: + case CALL: + case CHANGE: + case CHECK: + case CREATE: + case CURRENT: + case DATABASE: + case DELETE: + case DESC: + case DESCRIBE: + case DIAGNOSTICS: + case DROP: + case EXPLAIN: + case GET: + case GRANT: + case INSERT: + case KILL: + case LEFT: + case LOAD: + case LOCK: + case NUMBER: + case OPTIMIZE: + case PURGE: + case RELEASE: + case RENAME: + case REPLACE: + case RESIGNAL: + case REVOKE: + case RIGHT: + case SELECT: + case SET: + case SHOW: + case SIGNAL: + case STACKED: + case UNLOCK: + case UPDATE: + case USE: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case LR_BRACKET: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + { + setState(991); + routineBody(); + } + break; + case RETURN: + { + setState(992); + returnStatement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateServerContext extends ParserRuleContext { + public Token wrapperName; + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode SERVER() { return getToken(MySqlParser.SERVER, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode FOREIGN() { return getToken(MySqlParser.FOREIGN, 0); } + public TerminalNode DATA() { return getToken(MySqlParser.DATA, 0); } + public TerminalNode WRAPPER() { return getToken(MySqlParser.WRAPPER, 0); } + public TerminalNode OPTIONS() { return getToken(MySqlParser.OPTIONS, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List serverOption() { + return getRuleContexts(ServerOptionContext.class); + } + public ServerOptionContext serverOption(int i) { + return getRuleContext(ServerOptionContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode MYSQL() { return getToken(MySqlParser.MYSQL, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public CreateServerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createServer; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateServer(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateServer(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateServer(this); + else return visitor.visitChildren(this); + } + } + + public final CreateServerContext createServer() throws RecognitionException { + CreateServerContext _localctx = new CreateServerContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_createServer); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(995); + match(CREATE); + setState(996); + match(SERVER); + setState(997); + uid(); + setState(998); + match(FOREIGN); + setState(999); + match(DATA); + setState(1000); + match(WRAPPER); + setState(1001); + ((CreateServerContext)_localctx).wrapperName = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==MYSQL || _la==STRING_LITERAL) ) { + ((CreateServerContext)_localctx).wrapperName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(1002); + match(OPTIONS); + setState(1003); + match(LR_BRACKET); + setState(1004); + serverOption(); + setState(1009); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(1005); + match(COMMA); + setState(1006); + serverOption(); + } + } + setState(1011); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1012); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateTableContext extends ParserRuleContext { + public CreateTableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createTable; } + + public CreateTableContext() { } + public void copyFrom(CreateTableContext ctx) { + super.copyFrom(ctx); + } + } + public static class CopyCreateTableContext extends CreateTableContext { + public TableNameContext parenthesisTable; + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public List tableName() { + return getRuleContexts(TableNameContext.class); + } + public TableNameContext tableName(int i) { + return getRuleContext(TableNameContext.class,i); + } + public TerminalNode LIKE() { return getToken(MySqlParser.LIKE, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode TEMPORARY() { return getToken(MySqlParser.TEMPORARY, 0); } + public IfNotExistsContext ifNotExists() { + return getRuleContext(IfNotExistsContext.class,0); + } + public CopyCreateTableContext(CreateTableContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCopyCreateTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCopyCreateTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCopyCreateTable(this); + else return visitor.visitChildren(this); + } + } + public static class ColumnCreateTableContext extends CreateTableContext { + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public CreateDefinitionsContext createDefinitions() { + return getRuleContext(CreateDefinitionsContext.class,0); + } + public TerminalNode TEMPORARY() { return getToken(MySqlParser.TEMPORARY, 0); } + public IfNotExistsContext ifNotExists() { + return getRuleContext(IfNotExistsContext.class,0); + } + public List tableOption() { + return getRuleContexts(TableOptionContext.class); + } + public TableOptionContext tableOption(int i) { + return getRuleContext(TableOptionContext.class,i); + } + public PartitionDefinitionsContext partitionDefinitions() { + return getRuleContext(PartitionDefinitionsContext.class,0); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public ColumnCreateTableContext(CreateTableContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterColumnCreateTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitColumnCreateTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitColumnCreateTable(this); + else return visitor.visitChildren(this); + } + } + public static class QueryCreateTableContext extends CreateTableContext { + public Token keyViolate; + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public TerminalNode TEMPORARY() { return getToken(MySqlParser.TEMPORARY, 0); } + public IfNotExistsContext ifNotExists() { + return getRuleContext(IfNotExistsContext.class,0); + } + public CreateDefinitionsContext createDefinitions() { + return getRuleContext(CreateDefinitionsContext.class,0); + } + public List tableOption() { + return getRuleContexts(TableOptionContext.class); + } + public TableOptionContext tableOption(int i) { + return getRuleContext(TableOptionContext.class,i); + } + public PartitionDefinitionsContext partitionDefinitions() { + return getRuleContext(PartitionDefinitionsContext.class,0); + } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public TerminalNode IGNORE() { return getToken(MySqlParser.IGNORE, 0); } + public TerminalNode REPLACE() { return getToken(MySqlParser.REPLACE, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public QueryCreateTableContext(CreateTableContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterQueryCreateTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitQueryCreateTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitQueryCreateTable(this); + else return visitor.visitChildren(this); + } + } + + public final CreateTableContext createTable() throws RecognitionException { + CreateTableContext _localctx = new CreateTableContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_createTable); + int _la; + try { + int _alt; + setState(1092); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,74,_ctx) ) { + case 1: + _localctx = new CopyCreateTableContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(1014); + match(CREATE); + setState(1016); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==TEMPORARY) { + { + setState(1015); + match(TEMPORARY); + } + } + + setState(1018); + match(TABLE); + setState(1020); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(1019); + ifNotExists(); + } + } + + setState(1022); + tableName(); + setState(1030); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LIKE: + { + setState(1023); + match(LIKE); + setState(1024); + tableName(); + } + break; + case LR_BRACKET: + { + setState(1025); + match(LR_BRACKET); + setState(1026); + match(LIKE); + setState(1027); + ((CopyCreateTableContext)_localctx).parenthesisTable = tableName(); + setState(1028); + match(RR_BRACKET); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 2: + _localctx = new QueryCreateTableContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(1032); + match(CREATE); + setState(1034); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==TEMPORARY) { + { + setState(1033); + match(TEMPORARY); + } + } + + setState(1036); + match(TABLE); + setState(1038); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(1037); + ifNotExists(); + } + } + + setState(1040); + tableName(); + setState(1042); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) { + case 1: + { + setState(1041); + createDefinitions(); + } + break; + } + setState(1054); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 22)) & ~0x3f) == 0 && ((1L << (_la - 22)) & ((1L << (CHARACTER - 22)) | (1L << (COLLATE - 22)) | (1L << (DEFAULT - 22)) | (1L << (INDEX - 22)))) != 0) || _la==UNION || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (COMMENT - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONNECTION - 280)) | (1L << (DATA - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (ENGINE - 280)))) != 0) || ((((_la - 384)) & ~0x3f) == 0 && ((1L << (_la - 384)) & ((1L << (INSERT_METHOD - 384)) | (1L << (KEY_BLOCK_SIZE - 384)) | (1L << (MAX_ROWS - 384)) | (1L << (MIN_ROWS - 384)))) != 0) || ((((_la - 464)) & ~0x3f) == 0 && ((1L << (_la - 464)) & ((1L << (PACK_KEYS - 464)) | (1L << (PASSWORD - 464)) | (1L << (ROW_FORMAT - 464)))) != 0) || ((((_la - 542)) & ~0x3f) == 0 && ((1L << (_la - 542)) & ((1L << (STATS_AUTO_RECALC - 542)) | (1L << (STATS_PERSISTENT - 542)) | (1L << (STATS_SAMPLE_PAGES - 542)) | (1L << (STORAGE - 542)) | (1L << (TABLESPACE - 542)))) != 0) || _la==CHARSET) { + { + setState(1044); + tableOption(); + setState(1051); + _errHandler.sync(this); + _la = _input.LA(1); + while (((((_la - 22)) & ~0x3f) == 0 && ((1L << (_la - 22)) & ((1L << (CHARACTER - 22)) | (1L << (COLLATE - 22)) | (1L << (DEFAULT - 22)) | (1L << (INDEX - 22)))) != 0) || _la==UNION || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (COMMENT - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONNECTION - 280)) | (1L << (DATA - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (ENGINE - 280)))) != 0) || ((((_la - 384)) & ~0x3f) == 0 && ((1L << (_la - 384)) & ((1L << (INSERT_METHOD - 384)) | (1L << (KEY_BLOCK_SIZE - 384)) | (1L << (MAX_ROWS - 384)) | (1L << (MIN_ROWS - 384)))) != 0) || ((((_la - 464)) & ~0x3f) == 0 && ((1L << (_la - 464)) & ((1L << (PACK_KEYS - 464)) | (1L << (PASSWORD - 464)) | (1L << (ROW_FORMAT - 464)))) != 0) || ((((_la - 542)) & ~0x3f) == 0 && ((1L << (_la - 542)) & ((1L << (STATS_AUTO_RECALC - 542)) | (1L << (STATS_PERSISTENT - 542)) | (1L << (STATS_SAMPLE_PAGES - 542)) | (1L << (STORAGE - 542)) | (1L << (TABLESPACE - 542)))) != 0) || _la==CHARSET || _la==COMMA) { + { + { + setState(1046); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(1045); + match(COMMA); + } + } + + setState(1048); + tableOption(); + } + } + setState(1053); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(1057); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PARTITION) { + { + setState(1056); + partitionDefinitions(); + } + } + + setState(1060); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IGNORE || _la==REPLACE) { + { + setState(1059); + ((QueryCreateTableContext)_localctx).keyViolate = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==IGNORE || _la==REPLACE) ) { + ((QueryCreateTableContext)_localctx).keyViolate = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(1063); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(1062); + match(AS); + } + } + + setState(1065); + selectStatement(); + } + break; + case 3: + _localctx = new ColumnCreateTableContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(1067); + match(CREATE); + setState(1069); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==TEMPORARY) { + { + setState(1068); + match(TEMPORARY); + } + } + + setState(1071); + match(TABLE); + setState(1073); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(1072); + ifNotExists(); + } + } + + setState(1075); + tableName(); + setState(1076); + createDefinitions(); + setState(1087); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,72,_ctx) ) { + case 1: + { + setState(1077); + tableOption(); + setState(1084); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,71,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1079); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(1078); + match(COMMA); + } + } + + setState(1081); + tableOption(); + } + } + } + setState(1086); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,71,_ctx); + } + } + break; + } + setState(1090); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PARTITION) { + { + setState(1089); + partitionDefinitions(); + } + } + + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateTablespaceInnodbContext extends ParserRuleContext { + public Token datafile; + public FileSizeLiteralContext fileBlockSize; + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode TABLESPACE() { return getToken(MySqlParser.TABLESPACE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public TerminalNode DATAFILE() { return getToken(MySqlParser.DATAFILE, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode FILE_BLOCK_SIZE() { return getToken(MySqlParser.FILE_BLOCK_SIZE, 0); } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public TerminalNode ENGINE() { return getToken(MySqlParser.ENGINE, 0); } + public EngineNameContext engineName() { + return getRuleContext(EngineNameContext.class,0); + } + public FileSizeLiteralContext fileSizeLiteral() { + return getRuleContext(FileSizeLiteralContext.class,0); + } + public CreateTablespaceInnodbContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createTablespaceInnodb; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateTablespaceInnodb(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateTablespaceInnodb(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateTablespaceInnodb(this); + else return visitor.visitChildren(this); + } + } + + public final CreateTablespaceInnodbContext createTablespaceInnodb() throws RecognitionException { + CreateTablespaceInnodbContext _localctx = new CreateTablespaceInnodbContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_createTablespaceInnodb); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1094); + match(CREATE); + setState(1095); + match(TABLESPACE); + setState(1096); + uid(); + setState(1097); + match(ADD); + setState(1098); + match(DATAFILE); + setState(1099); + ((CreateTablespaceInnodbContext)_localctx).datafile = match(STRING_LITERAL); + setState(1103); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FILE_BLOCK_SIZE) { + { + setState(1100); + match(FILE_BLOCK_SIZE); + setState(1101); + match(EQUAL_SYMBOL); + setState(1102); + ((CreateTablespaceInnodbContext)_localctx).fileBlockSize = fileSizeLiteral(); + } + } + + setState(1110); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ENGINE) { + { + setState(1105); + match(ENGINE); + setState(1107); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1106); + match(EQUAL_SYMBOL); + } + } + + setState(1109); + engineName(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateTablespaceNdbContext extends ParserRuleContext { + public Token datafile; + public FileSizeLiteralContext extentSize; + public FileSizeLiteralContext initialSize; + public FileSizeLiteralContext autoextendSize; + public FileSizeLiteralContext maxSize; + public Token comment; + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode TABLESPACE() { return getToken(MySqlParser.TABLESPACE, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public TerminalNode DATAFILE() { return getToken(MySqlParser.DATAFILE, 0); } + public TerminalNode USE() { return getToken(MySqlParser.USE, 0); } + public TerminalNode LOGFILE() { return getToken(MySqlParser.LOGFILE, 0); } + public TerminalNode GROUP() { return getToken(MySqlParser.GROUP, 0); } + public TerminalNode ENGINE() { return getToken(MySqlParser.ENGINE, 0); } + public EngineNameContext engineName() { + return getRuleContext(EngineNameContext.class,0); + } + public List STRING_LITERAL() { return getTokens(MySqlParser.STRING_LITERAL); } + public TerminalNode STRING_LITERAL(int i) { + return getToken(MySqlParser.STRING_LITERAL, i); + } + public TerminalNode EXTENT_SIZE() { return getToken(MySqlParser.EXTENT_SIZE, 0); } + public TerminalNode INITIAL_SIZE() { return getToken(MySqlParser.INITIAL_SIZE, 0); } + public TerminalNode AUTOEXTEND_SIZE() { return getToken(MySqlParser.AUTOEXTEND_SIZE, 0); } + public TerminalNode MAX_SIZE() { return getToken(MySqlParser.MAX_SIZE, 0); } + public TerminalNode NODEGROUP() { return getToken(MySqlParser.NODEGROUP, 0); } + public TerminalNode WAIT() { return getToken(MySqlParser.WAIT, 0); } + public TerminalNode COMMENT() { return getToken(MySqlParser.COMMENT, 0); } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public List fileSizeLiteral() { + return getRuleContexts(FileSizeLiteralContext.class); + } + public FileSizeLiteralContext fileSizeLiteral(int i) { + return getRuleContext(FileSizeLiteralContext.class,i); + } + public CreateTablespaceNdbContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createTablespaceNdb; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateTablespaceNdb(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateTablespaceNdb(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateTablespaceNdb(this); + else return visitor.visitChildren(this); + } + } + + public final CreateTablespaceNdbContext createTablespaceNdb() throws RecognitionException { + CreateTablespaceNdbContext _localctx = new CreateTablespaceNdbContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_createTablespaceNdb); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1112); + match(CREATE); + setState(1113); + match(TABLESPACE); + setState(1114); + uid(); + setState(1115); + match(ADD); + setState(1116); + match(DATAFILE); + setState(1117); + ((CreateTablespaceNdbContext)_localctx).datafile = match(STRING_LITERAL); + setState(1118); + match(USE); + setState(1119); + match(LOGFILE); + setState(1120); + match(GROUP); + setState(1121); + uid(); + setState(1127); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EXTENT_SIZE) { + { + setState(1122); + match(EXTENT_SIZE); + setState(1124); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1123); + match(EQUAL_SYMBOL); + } + } + + setState(1126); + ((CreateTablespaceNdbContext)_localctx).extentSize = fileSizeLiteral(); + } + } + + setState(1134); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INITIAL_SIZE) { + { + setState(1129); + match(INITIAL_SIZE); + setState(1131); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1130); + match(EQUAL_SYMBOL); + } + } + + setState(1133); + ((CreateTablespaceNdbContext)_localctx).initialSize = fileSizeLiteral(); + } + } + + setState(1141); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AUTOEXTEND_SIZE) { + { + setState(1136); + match(AUTOEXTEND_SIZE); + setState(1138); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1137); + match(EQUAL_SYMBOL); + } + } + + setState(1140); + ((CreateTablespaceNdbContext)_localctx).autoextendSize = fileSizeLiteral(); + } + } + + setState(1148); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==MAX_SIZE) { + { + setState(1143); + match(MAX_SIZE); + setState(1145); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1144); + match(EQUAL_SYMBOL); + } + } + + setState(1147); + ((CreateTablespaceNdbContext)_localctx).maxSize = fileSizeLiteral(); + } + } + + setState(1155); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NODEGROUP) { + { + setState(1150); + match(NODEGROUP); + setState(1152); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1151); + match(EQUAL_SYMBOL); + } + } + + setState(1154); + uid(); + } + } + + setState(1158); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WAIT) { + { + setState(1157); + match(WAIT); + } + } + + setState(1165); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMENT) { + { + setState(1160); + match(COMMENT); + setState(1162); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1161); + match(EQUAL_SYMBOL); + } + } + + setState(1164); + ((CreateTablespaceNdbContext)_localctx).comment = match(STRING_LITERAL); + } + } + + setState(1167); + match(ENGINE); + setState(1169); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1168); + match(EQUAL_SYMBOL); + } + } + + setState(1171); + engineName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateTriggerContext extends ParserRuleContext { + public FullIdContext thisTrigger; + public Token triggerTime; + public Token triggerEvent; + public Token triggerPlace; + public FullIdContext otherTrigger; + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode TRIGGER() { return getToken(MySqlParser.TRIGGER, 0); } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public TerminalNode EACH() { return getToken(MySqlParser.EACH, 0); } + public TerminalNode ROW() { return getToken(MySqlParser.ROW, 0); } + public RoutineBodyContext routineBody() { + return getRuleContext(RoutineBodyContext.class,0); + } + public List fullId() { + return getRuleContexts(FullIdContext.class); + } + public FullIdContext fullId(int i) { + return getRuleContext(FullIdContext.class,i); + } + public TerminalNode BEFORE() { return getToken(MySqlParser.BEFORE, 0); } + public TerminalNode AFTER() { return getToken(MySqlParser.AFTER, 0); } + public TerminalNode INSERT() { return getToken(MySqlParser.INSERT, 0); } + public TerminalNode UPDATE() { return getToken(MySqlParser.UPDATE, 0); } + public TerminalNode DELETE() { return getToken(MySqlParser.DELETE, 0); } + public OwnerStatementContext ownerStatement() { + return getRuleContext(OwnerStatementContext.class,0); + } + public TerminalNode FOLLOWS() { return getToken(MySqlParser.FOLLOWS, 0); } + public TerminalNode PRECEDES() { return getToken(MySqlParser.PRECEDES, 0); } + public CreateTriggerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createTrigger; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateTrigger(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateTrigger(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateTrigger(this); + else return visitor.visitChildren(this); + } + } + + public final CreateTriggerContext createTrigger() throws RecognitionException { + CreateTriggerContext _localctx = new CreateTriggerContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_createTrigger); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1173); + match(CREATE); + setState(1175); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFINER) { + { + setState(1174); + ownerStatement(); + } + } + + setState(1177); + match(TRIGGER); + setState(1178); + ((CreateTriggerContext)_localctx).thisTrigger = fullId(); + setState(1179); + ((CreateTriggerContext)_localctx).triggerTime = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==BEFORE || _la==AFTER) ) { + ((CreateTriggerContext)_localctx).triggerTime = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(1180); + ((CreateTriggerContext)_localctx).triggerEvent = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DELETE || _la==INSERT || _la==UPDATE) ) { + ((CreateTriggerContext)_localctx).triggerEvent = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(1181); + match(ON); + setState(1182); + tableName(); + setState(1183); + match(FOR); + setState(1184); + match(EACH); + setState(1185); + match(ROW); + setState(1188); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,93,_ctx) ) { + case 1: + { + setState(1186); + ((CreateTriggerContext)_localctx).triggerPlace = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FOLLOWS || _la==PRECEDES) ) { + ((CreateTriggerContext)_localctx).triggerPlace = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(1187); + ((CreateTriggerContext)_localctx).otherTrigger = fullId(); + } + break; + } + setState(1190); + routineBody(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateViewContext extends ParserRuleContext { + public Token algType; + public Token secContext; + public Token checkOption; + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode VIEW() { return getToken(MySqlParser.VIEW, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public TerminalNode OR() { return getToken(MySqlParser.OR, 0); } + public TerminalNode REPLACE() { return getToken(MySqlParser.REPLACE, 0); } + public TerminalNode ALGORITHM() { return getToken(MySqlParser.ALGORITHM, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public OwnerStatementContext ownerStatement() { + return getRuleContext(OwnerStatementContext.class,0); + } + public TerminalNode SQL() { return getToken(MySqlParser.SQL, 0); } + public TerminalNode SECURITY() { return getToken(MySqlParser.SECURITY, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public TerminalNode CHECK() { return getToken(MySqlParser.CHECK, 0); } + public TerminalNode OPTION() { return getToken(MySqlParser.OPTION, 0); } + public TerminalNode UNDEFINED() { return getToken(MySqlParser.UNDEFINED, 0); } + public TerminalNode MERGE() { return getToken(MySqlParser.MERGE, 0); } + public TerminalNode TEMPTABLE() { return getToken(MySqlParser.TEMPTABLE, 0); } + public TerminalNode DEFINER() { return getToken(MySqlParser.DEFINER, 0); } + public TerminalNode INVOKER() { return getToken(MySqlParser.INVOKER, 0); } + public TerminalNode CASCADED() { return getToken(MySqlParser.CASCADED, 0); } + public TerminalNode LOCAL() { return getToken(MySqlParser.LOCAL, 0); } + public CreateViewContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createView; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateView(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateView(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateView(this); + else return visitor.visitChildren(this); + } + } + + public final CreateViewContext createView() throws RecognitionException { + CreateViewContext _localctx = new CreateViewContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_createView); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1192); + match(CREATE); + setState(1195); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==OR) { + { + setState(1193); + match(OR); + setState(1194); + match(REPLACE); + } + } + + setState(1200); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALGORITHM) { + { + setState(1197); + match(ALGORITHM); + setState(1198); + match(EQUAL_SYMBOL); + setState(1199); + ((CreateViewContext)_localctx).algType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==MERGE || _la==TEMPTABLE || _la==UNDEFINED) ) { + ((CreateViewContext)_localctx).algType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(1203); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFINER) { + { + setState(1202); + ownerStatement(); + } + } + + setState(1208); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SQL) { + { + setState(1205); + match(SQL); + setState(1206); + match(SECURITY); + setState(1207); + ((CreateViewContext)_localctx).secContext = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFINER || _la==INVOKER) ) { + ((CreateViewContext)_localctx).secContext = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(1210); + match(VIEW); + setState(1211); + fullId(); + setState(1216); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LR_BRACKET) { + { + setState(1212); + match(LR_BRACKET); + setState(1213); + uidList(); + setState(1214); + match(RR_BRACKET); + } + } + + setState(1218); + match(AS); + setState(1219); + selectStatement(); + setState(1226); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WITH) { + { + setState(1220); + match(WITH); + setState(1222); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CASCADED || _la==LOCAL) { + { + setState(1221); + ((CreateViewContext)_localctx).checkOption = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==CASCADED || _la==LOCAL) ) { + ((CreateViewContext)_localctx).checkOption = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(1224); + match(CHECK); + setState(1225); + match(OPTION); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateDatabaseOptionContext extends ParserRuleContext { + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode CHARSET() { return getToken(MySqlParser.CHARSET, 0); } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public List DEFAULT() { return getTokens(MySqlParser.DEFAULT); } + public TerminalNode DEFAULT(int i) { + return getToken(MySqlParser.DEFAULT, i); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode COLLATE() { return getToken(MySqlParser.COLLATE, 0); } + public CollationNameContext collationName() { + return getRuleContext(CollationNameContext.class,0); + } + public CreateDatabaseOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createDatabaseOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateDatabaseOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateDatabaseOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateDatabaseOption(this); + else return visitor.visitChildren(this); + } + } + + public final CreateDatabaseOptionContext createDatabaseOption() throws RecognitionException { + CreateDatabaseOptionContext _localctx = new CreateDatabaseOptionContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_createDatabaseOption); + int _la; + try { + setState(1251); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,107,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1229); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFAULT) { + { + setState(1228); + match(DEFAULT); + } + } + + setState(1234); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CHARACTER: + { + setState(1231); + match(CHARACTER); + setState(1232); + match(SET); + } + break; + case CHARSET: + { + setState(1233); + match(CHARSET); + } + break; + default: + throw new NoViableAltException(this); + } + setState(1237); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1236); + match(EQUAL_SYMBOL); + } + } + + setState(1241); + _errHandler.sync(this); + switch (_input.LA(1)) { + case BINARY: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + { + setState(1239); + charsetName(); + } + break; + case DEFAULT: + { + setState(1240); + match(DEFAULT); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1244); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFAULT) { + { + setState(1243); + match(DEFAULT); + } + } + + setState(1246); + match(COLLATE); + setState(1248); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1247); + match(EQUAL_SYMBOL); + } + } + + setState(1250); + collationName(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class OwnerStatementContext extends ParserRuleContext { + public TerminalNode DEFINER() { return getToken(MySqlParser.DEFINER, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public UserNameContext userName() { + return getRuleContext(UserNameContext.class,0); + } + public TerminalNode CURRENT_USER() { return getToken(MySqlParser.CURRENT_USER, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public OwnerStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ownerStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterOwnerStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitOwnerStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitOwnerStatement(this); + else return visitor.visitChildren(this); + } + } + + public final OwnerStatementContext ownerStatement() throws RecognitionException { + OwnerStatementContext _localctx = new OwnerStatementContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_ownerStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1253); + match(DEFINER); + setState(1254); + match(EQUAL_SYMBOL); + setState(1261); + _errHandler.sync(this); + switch (_input.LA(1)) { + case STRING_LITERAL: + case ID: + case STRING_USER_NAME: + { + setState(1255); + userName(); + } + break; + case CURRENT_USER: + { + setState(1256); + match(CURRENT_USER); + setState(1259); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LR_BRACKET) { + { + setState(1257); + match(LR_BRACKET); + setState(1258); + match(RR_BRACKET); + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ScheduleExpressionContext extends ParserRuleContext { + public ScheduleExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_scheduleExpression; } + + public ScheduleExpressionContext() { } + public void copyFrom(ScheduleExpressionContext ctx) { + super.copyFrom(ctx); + } + } + public static class PreciseScheduleContext extends ScheduleExpressionContext { + public TerminalNode AT() { return getToken(MySqlParser.AT, 0); } + public TimestampValueContext timestampValue() { + return getRuleContext(TimestampValueContext.class,0); + } + public List intervalExpr() { + return getRuleContexts(IntervalExprContext.class); + } + public IntervalExprContext intervalExpr(int i) { + return getRuleContext(IntervalExprContext.class,i); + } + public PreciseScheduleContext(ScheduleExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPreciseSchedule(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPreciseSchedule(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPreciseSchedule(this); + else return visitor.visitChildren(this); + } + } + public static class IntervalScheduleContext extends ScheduleExpressionContext { + public TimestampValueContext startTimestamp; + public IntervalExprContext intervalExpr; + public List startIntervals = new ArrayList(); + public TimestampValueContext endTimestamp; + public List endIntervals = new ArrayList(); + public TerminalNode EVERY() { return getToken(MySqlParser.EVERY, 0); } + public IntervalTypeContext intervalType() { + return getRuleContext(IntervalTypeContext.class,0); + } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode STARTS() { return getToken(MySqlParser.STARTS, 0); } + public TerminalNode ENDS() { return getToken(MySqlParser.ENDS, 0); } + public List timestampValue() { + return getRuleContexts(TimestampValueContext.class); + } + public TimestampValueContext timestampValue(int i) { + return getRuleContext(TimestampValueContext.class,i); + } + public List intervalExpr() { + return getRuleContexts(IntervalExprContext.class); + } + public IntervalExprContext intervalExpr(int i) { + return getRuleContext(IntervalExprContext.class,i); + } + public IntervalScheduleContext(ScheduleExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIntervalSchedule(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIntervalSchedule(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIntervalSchedule(this); + else return visitor.visitChildren(this); + } + } + + public final ScheduleExpressionContext scheduleExpression() throws RecognitionException { + ScheduleExpressionContext _localctx = new ScheduleExpressionContext(_ctx, getState()); + enterRule(_localctx, 52, RULE_scheduleExpression); + int _la; + try { + setState(1297); + _errHandler.sync(this); + switch (_input.LA(1)) { + case AT: + _localctx = new PreciseScheduleContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(1263); + match(AT); + setState(1264); + timestampValue(); + setState(1268); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==PLUS) { + { + { + setState(1265); + intervalExpr(); + } + } + setState(1270); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case EVERY: + _localctx = new IntervalScheduleContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(1271); + match(EVERY); + setState(1274); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,111,_ctx) ) { + case 1: + { + setState(1272); + decimalLiteral(); + } + break; + case 2: + { + setState(1273); + expression(0); + } + break; + } + setState(1276); + intervalType(); + setState(1285); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==STARTS) { + { + setState(1277); + match(STARTS); + setState(1278); + ((IntervalScheduleContext)_localctx).startTimestamp = timestampValue(); + setState(1282); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==PLUS) { + { + { + setState(1279); + ((IntervalScheduleContext)_localctx).intervalExpr = intervalExpr(); + ((IntervalScheduleContext)_localctx).startIntervals.add(((IntervalScheduleContext)_localctx).intervalExpr); + } + } + setState(1284); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(1295); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ENDS) { + { + setState(1287); + match(ENDS); + setState(1288); + ((IntervalScheduleContext)_localctx).endTimestamp = timestampValue(); + setState(1292); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==PLUS) { + { + { + setState(1289); + ((IntervalScheduleContext)_localctx).intervalExpr = intervalExpr(); + ((IntervalScheduleContext)_localctx).endIntervals.add(((IntervalScheduleContext)_localctx).intervalExpr); + } + } + setState(1294); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TimestampValueContext extends ParserRuleContext { + public TerminalNode CURRENT_TIMESTAMP() { return getToken(MySqlParser.CURRENT_TIMESTAMP, 0); } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TimestampValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_timestampValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTimestampValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTimestampValue(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTimestampValue(this); + else return visitor.visitChildren(this); + } + } + + public final TimestampValueContext timestampValue() throws RecognitionException { + TimestampValueContext _localctx = new TimestampValueContext(_ctx, getState()); + enterRule(_localctx, 54, RULE_timestampValue); + try { + setState(1303); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,117,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1299); + match(CURRENT_TIMESTAMP); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1300); + stringLiteral(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1301); + decimalLiteral(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1302); + expression(0); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IntervalExprContext extends ParserRuleContext { + public TerminalNode PLUS() { return getToken(MySqlParser.PLUS, 0); } + public TerminalNode INTERVAL() { return getToken(MySqlParser.INTERVAL, 0); } + public IntervalTypeContext intervalType() { + return getRuleContext(IntervalTypeContext.class,0); + } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public IntervalExprContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_intervalExpr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIntervalExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIntervalExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIntervalExpr(this); + else return visitor.visitChildren(this); + } + } + + public final IntervalExprContext intervalExpr() throws RecognitionException { + IntervalExprContext _localctx = new IntervalExprContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_intervalExpr); + try { + enterOuterAlt(_localctx, 1); + { + setState(1305); + match(PLUS); + setState(1306); + match(INTERVAL); + setState(1309); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,118,_ctx) ) { + case 1: + { + setState(1307); + decimalLiteral(); + } + break; + case 2: + { + setState(1308); + expression(0); + } + break; + } + setState(1311); + intervalType(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IntervalTypeContext extends ParserRuleContext { + public IntervalTypeBaseContext intervalTypeBase() { + return getRuleContext(IntervalTypeBaseContext.class,0); + } + public TerminalNode YEAR() { return getToken(MySqlParser.YEAR, 0); } + public TerminalNode YEAR_MONTH() { return getToken(MySqlParser.YEAR_MONTH, 0); } + public TerminalNode DAY_HOUR() { return getToken(MySqlParser.DAY_HOUR, 0); } + public TerminalNode DAY_MINUTE() { return getToken(MySqlParser.DAY_MINUTE, 0); } + public TerminalNode DAY_SECOND() { return getToken(MySqlParser.DAY_SECOND, 0); } + public TerminalNode HOUR_MINUTE() { return getToken(MySqlParser.HOUR_MINUTE, 0); } + public TerminalNode HOUR_SECOND() { return getToken(MySqlParser.HOUR_SECOND, 0); } + public TerminalNode MINUTE_SECOND() { return getToken(MySqlParser.MINUTE_SECOND, 0); } + public TerminalNode SECOND_MICROSECOND() { return getToken(MySqlParser.SECOND_MICROSECOND, 0); } + public TerminalNode MINUTE_MICROSECOND() { return getToken(MySqlParser.MINUTE_MICROSECOND, 0); } + public TerminalNode HOUR_MICROSECOND() { return getToken(MySqlParser.HOUR_MICROSECOND, 0); } + public TerminalNode DAY_MICROSECOND() { return getToken(MySqlParser.DAY_MICROSECOND, 0); } + public IntervalTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_intervalType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIntervalType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIntervalType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIntervalType(this); + else return visitor.visitChildren(this); + } + } + + public final IntervalTypeContext intervalType() throws RecognitionException { + IntervalTypeContext _localctx = new IntervalTypeContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_intervalType); + try { + setState(1326); + _errHandler.sync(this); + switch (_input.LA(1)) { + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + enterOuterAlt(_localctx, 1); + { + setState(1313); + intervalTypeBase(); + } + break; + case YEAR: + enterOuterAlt(_localctx, 2); + { + setState(1314); + match(YEAR); + } + break; + case YEAR_MONTH: + enterOuterAlt(_localctx, 3); + { + setState(1315); + match(YEAR_MONTH); + } + break; + case DAY_HOUR: + enterOuterAlt(_localctx, 4); + { + setState(1316); + match(DAY_HOUR); + } + break; + case DAY_MINUTE: + enterOuterAlt(_localctx, 5); + { + setState(1317); + match(DAY_MINUTE); + } + break; + case DAY_SECOND: + enterOuterAlt(_localctx, 6); + { + setState(1318); + match(DAY_SECOND); + } + break; + case HOUR_MINUTE: + enterOuterAlt(_localctx, 7); + { + setState(1319); + match(HOUR_MINUTE); + } + break; + case HOUR_SECOND: + enterOuterAlt(_localctx, 8); + { + setState(1320); + match(HOUR_SECOND); + } + break; + case MINUTE_SECOND: + enterOuterAlt(_localctx, 9); + { + setState(1321); + match(MINUTE_SECOND); + } + break; + case SECOND_MICROSECOND: + enterOuterAlt(_localctx, 10); + { + setState(1322); + match(SECOND_MICROSECOND); + } + break; + case MINUTE_MICROSECOND: + enterOuterAlt(_localctx, 11); + { + setState(1323); + match(MINUTE_MICROSECOND); + } + break; + case HOUR_MICROSECOND: + enterOuterAlt(_localctx, 12); + { + setState(1324); + match(HOUR_MICROSECOND); + } + break; + case DAY_MICROSECOND: + enterOuterAlt(_localctx, 13); + { + setState(1325); + match(DAY_MICROSECOND); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnableTypeContext extends ParserRuleContext { + public TerminalNode ENABLE() { return getToken(MySqlParser.ENABLE, 0); } + public TerminalNode DISABLE() { return getToken(MySqlParser.DISABLE, 0); } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public TerminalNode SLAVE() { return getToken(MySqlParser.SLAVE, 0); } + public EnableTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enableType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterEnableType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitEnableType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitEnableType(this); + else return visitor.visitChildren(this); + } + } + + public final EnableTypeContext enableType() throws RecognitionException { + EnableTypeContext _localctx = new EnableTypeContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_enableType); + try { + setState(1333); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,120,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1328); + match(ENABLE); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1329); + match(DISABLE); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1330); + match(DISABLE); + setState(1331); + match(ON); + setState(1332); + match(SLAVE); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IndexTypeContext extends ParserRuleContext { + public TerminalNode USING() { return getToken(MySqlParser.USING, 0); } + public TerminalNode BTREE() { return getToken(MySqlParser.BTREE, 0); } + public TerminalNode HASH() { return getToken(MySqlParser.HASH, 0); } + public IndexTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_indexType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIndexType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIndexType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIndexType(this); + else return visitor.visitChildren(this); + } + } + + public final IndexTypeContext indexType() throws RecognitionException { + IndexTypeContext _localctx = new IndexTypeContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_indexType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1335); + match(USING); + setState(1336); + _la = _input.LA(1); + if ( !(_la==BTREE || _la==HASH) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IndexOptionContext extends ParserRuleContext { + public TerminalNode KEY_BLOCK_SIZE() { return getToken(MySqlParser.KEY_BLOCK_SIZE, 0); } + public FileSizeLiteralContext fileSizeLiteral() { + return getRuleContext(FileSizeLiteralContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public IndexTypeContext indexType() { + return getRuleContext(IndexTypeContext.class,0); + } + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public TerminalNode PARSER() { return getToken(MySqlParser.PARSER, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode COMMENT() { return getToken(MySqlParser.COMMENT, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode INVISIBLE() { return getToken(MySqlParser.INVISIBLE, 0); } + public TerminalNode VISIBLE() { return getToken(MySqlParser.VISIBLE, 0); } + public IndexOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_indexOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIndexOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIndexOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIndexOption(this); + else return visitor.visitChildren(this); + } + } + + public final IndexOptionContext indexOption() throws RecognitionException { + IndexOptionContext _localctx = new IndexOptionContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_indexOption); + int _la; + try { + setState(1351); + _errHandler.sync(this); + switch (_input.LA(1)) { + case KEY_BLOCK_SIZE: + enterOuterAlt(_localctx, 1); + { + setState(1338); + match(KEY_BLOCK_SIZE); + setState(1340); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1339); + match(EQUAL_SYMBOL); + } + } + + setState(1342); + fileSizeLiteral(); + } + break; + case USING: + enterOuterAlt(_localctx, 2); + { + setState(1343); + indexType(); + } + break; + case WITH: + enterOuterAlt(_localctx, 3); + { + setState(1344); + match(WITH); + setState(1345); + match(PARSER); + setState(1346); + uid(); + } + break; + case COMMENT: + enterOuterAlt(_localctx, 4); + { + setState(1347); + match(COMMENT); + setState(1348); + match(STRING_LITERAL); + } + break; + case INVISIBLE: + enterOuterAlt(_localctx, 5); + { + setState(1349); + match(INVISIBLE); + } + break; + case VISIBLE: + enterOuterAlt(_localctx, 6); + { + setState(1350); + match(VISIBLE); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ProcedureParameterContext extends ParserRuleContext { + public Token direction; + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public DataTypeContext dataType() { + return getRuleContext(DataTypeContext.class,0); + } + public TerminalNode IN() { return getToken(MySqlParser.IN, 0); } + public TerminalNode OUT() { return getToken(MySqlParser.OUT, 0); } + public TerminalNode INOUT() { return getToken(MySqlParser.INOUT, 0); } + public ProcedureParameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_procedureParameter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterProcedureParameter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitProcedureParameter(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitProcedureParameter(this); + else return visitor.visitChildren(this); + } + } + + public final ProcedureParameterContext procedureParameter() throws RecognitionException { + ProcedureParameterContext _localctx = new ProcedureParameterContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_procedureParameter); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1354); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (IN - 71)) | (1L << (INOUT - 71)) | (1L << (OUT - 71)))) != 0)) { + { + setState(1353); + ((ProcedureParameterContext)_localctx).direction = _input.LT(1); + _la = _input.LA(1); + if ( !(((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (IN - 71)) | (1L << (INOUT - 71)) | (1L << (OUT - 71)))) != 0)) ) { + ((ProcedureParameterContext)_localctx).direction = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(1356); + uid(); + setState(1357); + dataType(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionParameterContext extends ParserRuleContext { + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public DataTypeContext dataType() { + return getRuleContext(DataTypeContext.class,0); + } + public FunctionParameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionParameter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFunctionParameter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFunctionParameter(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFunctionParameter(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionParameterContext functionParameter() throws RecognitionException { + FunctionParameterContext _localctx = new FunctionParameterContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_functionParameter); + try { + enterOuterAlt(_localctx, 1); + { + setState(1359); + uid(); + setState(1360); + dataType(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RoutineOptionContext extends ParserRuleContext { + public RoutineOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_routineOption; } + + public RoutineOptionContext() { } + public void copyFrom(RoutineOptionContext ctx) { + super.copyFrom(ctx); + } + } + public static class RoutineBehaviorContext extends RoutineOptionContext { + public TerminalNode DETERMINISTIC() { return getToken(MySqlParser.DETERMINISTIC, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public RoutineBehaviorContext(RoutineOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRoutineBehavior(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRoutineBehavior(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRoutineBehavior(this); + else return visitor.visitChildren(this); + } + } + public static class RoutineLanguageContext extends RoutineOptionContext { + public TerminalNode LANGUAGE() { return getToken(MySqlParser.LANGUAGE, 0); } + public TerminalNode SQL() { return getToken(MySqlParser.SQL, 0); } + public RoutineLanguageContext(RoutineOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRoutineLanguage(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRoutineLanguage(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRoutineLanguage(this); + else return visitor.visitChildren(this); + } + } + public static class RoutineCommentContext extends RoutineOptionContext { + public TerminalNode COMMENT() { return getToken(MySqlParser.COMMENT, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public RoutineCommentContext(RoutineOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRoutineComment(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRoutineComment(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRoutineComment(this); + else return visitor.visitChildren(this); + } + } + public static class RoutineSecurityContext extends RoutineOptionContext { + public Token context; + public TerminalNode SQL() { return getToken(MySqlParser.SQL, 0); } + public TerminalNode SECURITY() { return getToken(MySqlParser.SECURITY, 0); } + public TerminalNode DEFINER() { return getToken(MySqlParser.DEFINER, 0); } + public TerminalNode INVOKER() { return getToken(MySqlParser.INVOKER, 0); } + public RoutineSecurityContext(RoutineOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRoutineSecurity(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRoutineSecurity(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRoutineSecurity(this); + else return visitor.visitChildren(this); + } + } + public static class RoutineDataContext extends RoutineOptionContext { + public TerminalNode CONTAINS() { return getToken(MySqlParser.CONTAINS, 0); } + public TerminalNode SQL() { return getToken(MySqlParser.SQL, 0); } + public TerminalNode NO() { return getToken(MySqlParser.NO, 0); } + public TerminalNode READS() { return getToken(MySqlParser.READS, 0); } + public TerminalNode DATA() { return getToken(MySqlParser.DATA, 0); } + public TerminalNode MODIFIES() { return getToken(MySqlParser.MODIFIES, 0); } + public RoutineDataContext(RoutineOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRoutineData(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRoutineData(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRoutineData(this); + else return visitor.visitChildren(this); + } + } + + public final RoutineOptionContext routineOption() throws RecognitionException { + RoutineOptionContext _localctx = new RoutineOptionContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_routineOption); + int _la; + try { + setState(1385); + _errHandler.sync(this); + switch (_input.LA(1)) { + case COMMENT: + _localctx = new RoutineCommentContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(1362); + match(COMMENT); + setState(1363); + match(STRING_LITERAL); + } + break; + case LANGUAGE: + _localctx = new RoutineLanguageContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(1364); + match(LANGUAGE); + setState(1365); + match(SQL); + } + break; + case DETERMINISTIC: + case NOT: + _localctx = new RoutineBehaviorContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(1367); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(1366); + match(NOT); + } + } + + setState(1369); + match(DETERMINISTIC); + } + break; + case MODIFIES: + case READS: + case CONTAINS: + case NO: + _localctx = new RoutineDataContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(1380); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CONTAINS: + { + setState(1370); + match(CONTAINS); + setState(1371); + match(SQL); + } + break; + case NO: + { + setState(1372); + match(NO); + setState(1373); + match(SQL); + } + break; + case READS: + { + setState(1374); + match(READS); + setState(1375); + match(SQL); + setState(1376); + match(DATA); + } + break; + case MODIFIES: + { + setState(1377); + match(MODIFIES); + setState(1378); + match(SQL); + setState(1379); + match(DATA); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case SQL: + _localctx = new RoutineSecurityContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(1382); + match(SQL); + setState(1383); + match(SECURITY); + setState(1384); + ((RoutineSecurityContext)_localctx).context = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFINER || _la==INVOKER) ) { + ((RoutineSecurityContext)_localctx).context = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ServerOptionContext extends ParserRuleContext { + public TerminalNode HOST() { return getToken(MySqlParser.HOST, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode DATABASE() { return getToken(MySqlParser.DATABASE, 0); } + public TerminalNode USER() { return getToken(MySqlParser.USER, 0); } + public TerminalNode PASSWORD() { return getToken(MySqlParser.PASSWORD, 0); } + public TerminalNode SOCKET() { return getToken(MySqlParser.SOCKET, 0); } + public TerminalNode OWNER() { return getToken(MySqlParser.OWNER, 0); } + public TerminalNode PORT() { return getToken(MySqlParser.PORT, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public ServerOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_serverOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterServerOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitServerOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitServerOption(this); + else return visitor.visitChildren(this); + } + } + + public final ServerOptionContext serverOption() throws RecognitionException { + ServerOptionContext _localctx = new ServerOptionContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_serverOption); + try { + setState(1401); + _errHandler.sync(this); + switch (_input.LA(1)) { + case HOST: + enterOuterAlt(_localctx, 1); + { + setState(1387); + match(HOST); + setState(1388); + match(STRING_LITERAL); + } + break; + case DATABASE: + enterOuterAlt(_localctx, 2); + { + setState(1389); + match(DATABASE); + setState(1390); + match(STRING_LITERAL); + } + break; + case USER: + enterOuterAlt(_localctx, 3); + { + setState(1391); + match(USER); + setState(1392); + match(STRING_LITERAL); + } + break; + case PASSWORD: + enterOuterAlt(_localctx, 4); + { + setState(1393); + match(PASSWORD); + setState(1394); + match(STRING_LITERAL); + } + break; + case SOCKET: + enterOuterAlt(_localctx, 5); + { + setState(1395); + match(SOCKET); + setState(1396); + match(STRING_LITERAL); + } + break; + case OWNER: + enterOuterAlt(_localctx, 6); + { + setState(1397); + match(OWNER); + setState(1398); + match(STRING_LITERAL); + } + break; + case PORT: + enterOuterAlt(_localctx, 7); + { + setState(1399); + match(PORT); + setState(1400); + decimalLiteral(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateDefinitionsContext extends ParserRuleContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List createDefinition() { + return getRuleContexts(CreateDefinitionContext.class); + } + public CreateDefinitionContext createDefinition(int i) { + return getRuleContext(CreateDefinitionContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public CreateDefinitionsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createDefinitions; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateDefinitions(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateDefinitions(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateDefinitions(this); + else return visitor.visitChildren(this); + } + } + + public final CreateDefinitionsContext createDefinitions() throws RecognitionException { + CreateDefinitionsContext _localctx = new CreateDefinitionsContext(_ctx, getState()); + enterRule(_localctx, 74, RULE_createDefinitions); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1403); + match(LR_BRACKET); + setState(1404); + createDefinition(); + setState(1409); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(1405); + match(COMMA); + setState(1406); + createDefinition(); + } + } + setState(1411); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1412); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateDefinitionContext extends ParserRuleContext { + public CreateDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createDefinition; } + + public CreateDefinitionContext() { } + public void copyFrom(CreateDefinitionContext ctx) { + super.copyFrom(ctx); + } + } + public static class ColumnDeclarationContext extends CreateDefinitionContext { + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public ColumnDefinitionContext columnDefinition() { + return getRuleContext(ColumnDefinitionContext.class,0); + } + public ColumnDeclarationContext(CreateDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterColumnDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitColumnDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitColumnDeclaration(this); + else return visitor.visitChildren(this); + } + } + public static class ConstraintDeclarationContext extends CreateDefinitionContext { + public TableConstraintContext tableConstraint() { + return getRuleContext(TableConstraintContext.class,0); + } + public ConstraintDeclarationContext(CreateDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterConstraintDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitConstraintDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitConstraintDeclaration(this); + else return visitor.visitChildren(this); + } + } + public static class IndexDeclarationContext extends CreateDefinitionContext { + public IndexColumnDefinitionContext indexColumnDefinition() { + return getRuleContext(IndexColumnDefinitionContext.class,0); + } + public IndexDeclarationContext(CreateDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIndexDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIndexDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIndexDeclaration(this); + else return visitor.visitChildren(this); + } + } + + public final CreateDefinitionContext createDefinition() throws RecognitionException { + CreateDefinitionContext _localctx = new CreateDefinitionContext(_ctx, getState()); + enterRule(_localctx, 76, RULE_createDefinition); + try { + setState(1419); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + _localctx = new ColumnDeclarationContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(1414); + uid(); + setState(1415); + columnDefinition(); + } + break; + case CHECK: + case CONSTRAINT: + case FOREIGN: + case PRIMARY: + case UNIQUE: + _localctx = new ConstraintDeclarationContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(1417); + tableConstraint(); + } + break; + case FULLTEXT: + case INDEX: + case KEY: + case SPATIAL: + _localctx = new IndexDeclarationContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(1418); + indexColumnDefinition(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ColumnDefinitionContext extends ParserRuleContext { + public DataTypeContext dataType() { + return getRuleContext(DataTypeContext.class,0); + } + public List columnConstraint() { + return getRuleContexts(ColumnConstraintContext.class); + } + public ColumnConstraintContext columnConstraint(int i) { + return getRuleContext(ColumnConstraintContext.class,i); + } + public ColumnDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_columnDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterColumnDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitColumnDefinition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitColumnDefinition(this); + else return visitor.visitChildren(this); + } + } + + public final ColumnDefinitionContext columnDefinition() throws RecognitionException { + ColumnDefinitionContext _localctx = new ColumnDefinitionContext(_ctx, getState()); + enterRule(_localctx, 78, RULE_columnDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1421); + dataType(); + setState(1425); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << AS) | (1L << COLLATE) | (1L << DEFAULT) | (1L << GENERATED))) != 0) || ((((_la - 82)) & ~0x3f) == 0 && ((1L << (_la - 82)) & ((1L << (KEY - 82)) | (1L << (NOT - 82)) | (1L << (NULL_LITERAL - 82)) | (1L << (ON - 82)) | (1L << (PRIMARY - 82)) | (1L << (REFERENCES - 82)))) != 0) || _la==UNIQUE || _la==SERIAL || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COMMENT - 280)))) != 0) || _la==STORAGE || _la==NULL_SPEC_LITERAL) { + { + { + setState(1422); + columnConstraint(); + } + } + setState(1427); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ColumnConstraintContext extends ParserRuleContext { + public ColumnConstraintContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_columnConstraint; } + + public ColumnConstraintContext() { } + public void copyFrom(ColumnConstraintContext ctx) { + super.copyFrom(ctx); + } + } + public static class StorageColumnConstraintContext extends ColumnConstraintContext { + public Token storageval; + public TerminalNode STORAGE() { return getToken(MySqlParser.STORAGE, 0); } + public TerminalNode DISK() { return getToken(MySqlParser.DISK, 0); } + public TerminalNode MEMORY() { return getToken(MySqlParser.MEMORY, 0); } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public StorageColumnConstraintContext(ColumnConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterStorageColumnConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitStorageColumnConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitStorageColumnConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class FormatColumnConstraintContext extends ColumnConstraintContext { + public Token colformat; + public TerminalNode COLUMN_FORMAT() { return getToken(MySqlParser.COLUMN_FORMAT, 0); } + public TerminalNode FIXED() { return getToken(MySqlParser.FIXED, 0); } + public TerminalNode DYNAMIC() { return getToken(MySqlParser.DYNAMIC, 0); } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public FormatColumnConstraintContext(ColumnConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFormatColumnConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFormatColumnConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFormatColumnConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class CollateColumnConstraintContext extends ColumnConstraintContext { + public TerminalNode COLLATE() { return getToken(MySqlParser.COLLATE, 0); } + public CollationNameContext collationName() { + return getRuleContext(CollationNameContext.class,0); + } + public CollateColumnConstraintContext(ColumnConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCollateColumnConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCollateColumnConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCollateColumnConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class AutoIncrementColumnConstraintContext extends ColumnConstraintContext { + public TerminalNode AUTO_INCREMENT() { return getToken(MySqlParser.AUTO_INCREMENT, 0); } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public TerminalNode UPDATE() { return getToken(MySqlParser.UPDATE, 0); } + public CurrentTimestampContext currentTimestamp() { + return getRuleContext(CurrentTimestampContext.class,0); + } + public AutoIncrementColumnConstraintContext(ColumnConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAutoIncrementColumnConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAutoIncrementColumnConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAutoIncrementColumnConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class CommentColumnConstraintContext extends ColumnConstraintContext { + public TerminalNode COMMENT() { return getToken(MySqlParser.COMMENT, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public CommentColumnConstraintContext(ColumnConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCommentColumnConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCommentColumnConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCommentColumnConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class PrimaryKeyColumnConstraintContext extends ColumnConstraintContext { + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public TerminalNode PRIMARY() { return getToken(MySqlParser.PRIMARY, 0); } + public PrimaryKeyColumnConstraintContext(ColumnConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPrimaryKeyColumnConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPrimaryKeyColumnConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPrimaryKeyColumnConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class UniqueKeyColumnConstraintContext extends ColumnConstraintContext { + public TerminalNode UNIQUE() { return getToken(MySqlParser.UNIQUE, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public UniqueKeyColumnConstraintContext(ColumnConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUniqueKeyColumnConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUniqueKeyColumnConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUniqueKeyColumnConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class SerialDefaultColumnConstraintContext extends ColumnConstraintContext { + public TerminalNode SERIAL() { return getToken(MySqlParser.SERIAL, 0); } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public TerminalNode VALUE() { return getToken(MySqlParser.VALUE, 0); } + public SerialDefaultColumnConstraintContext(ColumnConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSerialDefaultColumnConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSerialDefaultColumnConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSerialDefaultColumnConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class NullColumnConstraintContext extends ColumnConstraintContext { + public NullNotnullContext nullNotnull() { + return getRuleContext(NullNotnullContext.class,0); + } + public NullColumnConstraintContext(ColumnConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterNullColumnConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitNullColumnConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitNullColumnConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class DefaultColumnConstraintContext extends ColumnConstraintContext { + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public DefaultValueContext defaultValue() { + return getRuleContext(DefaultValueContext.class,0); + } + public DefaultColumnConstraintContext(ColumnConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDefaultColumnConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDefaultColumnConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDefaultColumnConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class ReferenceColumnConstraintContext extends ColumnConstraintContext { + public ReferenceDefinitionContext referenceDefinition() { + return getRuleContext(ReferenceDefinitionContext.class,0); + } + public ReferenceColumnConstraintContext(ColumnConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterReferenceColumnConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitReferenceColumnConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitReferenceColumnConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class GeneratedColumnConstraintContext extends ColumnConstraintContext { + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode GENERATED() { return getToken(MySqlParser.GENERATED, 0); } + public TerminalNode ALWAYS() { return getToken(MySqlParser.ALWAYS, 0); } + public TerminalNode VIRTUAL() { return getToken(MySqlParser.VIRTUAL, 0); } + public TerminalNode STORED() { return getToken(MySqlParser.STORED, 0); } + public GeneratedColumnConstraintContext(ColumnConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterGeneratedColumnConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitGeneratedColumnConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitGeneratedColumnConstraint(this); + else return visitor.visitChildren(this); + } + } + + public final ColumnConstraintContext columnConstraint() throws RecognitionException { + ColumnConstraintContext _localctx = new ColumnConstraintContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_columnConstraint); + int _la; + try { + setState(1468); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NOT: + case NULL_LITERAL: + case NULL_SPEC_LITERAL: + _localctx = new NullColumnConstraintContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(1428); + nullNotnull(); + } + break; + case DEFAULT: + _localctx = new DefaultColumnConstraintContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(1429); + match(DEFAULT); + setState(1430); + defaultValue(); + } + break; + case ON: + case AUTO_INCREMENT: + _localctx = new AutoIncrementColumnConstraintContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(1435); + _errHandler.sync(this); + switch (_input.LA(1)) { + case AUTO_INCREMENT: + { + setState(1431); + match(AUTO_INCREMENT); + } + break; + case ON: + { + setState(1432); + match(ON); + setState(1433); + match(UPDATE); + setState(1434); + currentTimestamp(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case KEY: + case PRIMARY: + _localctx = new PrimaryKeyColumnConstraintContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(1438); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PRIMARY) { + { + setState(1437); + match(PRIMARY); + } + } + + setState(1440); + match(KEY); + } + break; + case UNIQUE: + _localctx = new UniqueKeyColumnConstraintContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(1441); + match(UNIQUE); + setState(1443); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,133,_ctx) ) { + case 1: + { + setState(1442); + match(KEY); + } + break; + } + } + break; + case COMMENT: + _localctx = new CommentColumnConstraintContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(1445); + match(COMMENT); + setState(1446); + match(STRING_LITERAL); + } + break; + case COLUMN_FORMAT: + _localctx = new FormatColumnConstraintContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(1447); + match(COLUMN_FORMAT); + setState(1448); + ((FormatColumnConstraintContext)_localctx).colformat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFAULT || _la==DYNAMIC || _la==FIXED) ) { + ((FormatColumnConstraintContext)_localctx).colformat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case STORAGE: + _localctx = new StorageColumnConstraintContext(_localctx); + enterOuterAlt(_localctx, 8); + { + setState(1449); + match(STORAGE); + setState(1450); + ((StorageColumnConstraintContext)_localctx).storageval = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFAULT || _la==DISK || _la==MEMORY) ) { + ((StorageColumnConstraintContext)_localctx).storageval = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case REFERENCES: + _localctx = new ReferenceColumnConstraintContext(_localctx); + enterOuterAlt(_localctx, 9); + { + setState(1451); + referenceDefinition(); + } + break; + case COLLATE: + _localctx = new CollateColumnConstraintContext(_localctx); + enterOuterAlt(_localctx, 10); + { + setState(1452); + match(COLLATE); + setState(1453); + collationName(); + } + break; + case AS: + case GENERATED: + _localctx = new GeneratedColumnConstraintContext(_localctx); + enterOuterAlt(_localctx, 11); + { + setState(1456); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==GENERATED) { + { + setState(1454); + match(GENERATED); + setState(1455); + match(ALWAYS); + } + } + + setState(1458); + match(AS); + setState(1459); + match(LR_BRACKET); + setState(1460); + expression(0); + setState(1461); + match(RR_BRACKET); + setState(1463); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==STORED || _la==VIRTUAL) { + { + setState(1462); + _la = _input.LA(1); + if ( !(_la==STORED || _la==VIRTUAL) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + } + break; + case SERIAL: + _localctx = new SerialDefaultColumnConstraintContext(_localctx); + enterOuterAlt(_localctx, 12); + { + setState(1465); + match(SERIAL); + setState(1466); + match(DEFAULT); + setState(1467); + match(VALUE); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TableConstraintContext extends ParserRuleContext { + public TableConstraintContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tableConstraint; } + + public TableConstraintContext() { } + public void copyFrom(TableConstraintContext ctx) { + super.copyFrom(ctx); + } + } + public static class UniqueKeyTableConstraintContext extends TableConstraintContext { + public UidContext name; + public Token indexFormat; + public UidContext index; + public TerminalNode UNIQUE() { return getToken(MySqlParser.UNIQUE, 0); } + public IndexColumnNamesContext indexColumnNames() { + return getRuleContext(IndexColumnNamesContext.class,0); + } + public TerminalNode CONSTRAINT() { return getToken(MySqlParser.CONSTRAINT, 0); } + public IndexTypeContext indexType() { + return getRuleContext(IndexTypeContext.class,0); + } + public List indexOption() { + return getRuleContexts(IndexOptionContext.class); + } + public IndexOptionContext indexOption(int i) { + return getRuleContext(IndexOptionContext.class,i); + } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public UniqueKeyTableConstraintContext(TableConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUniqueKeyTableConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUniqueKeyTableConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUniqueKeyTableConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class CheckTableConstraintContext extends TableConstraintContext { + public UidContext name; + public TerminalNode CHECK() { return getToken(MySqlParser.CHECK, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode CONSTRAINT() { return getToken(MySqlParser.CONSTRAINT, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public CheckTableConstraintContext(TableConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCheckTableConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCheckTableConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCheckTableConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class PrimaryKeyTableConstraintContext extends TableConstraintContext { + public UidContext name; + public UidContext index; + public TerminalNode PRIMARY() { return getToken(MySqlParser.PRIMARY, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public IndexColumnNamesContext indexColumnNames() { + return getRuleContext(IndexColumnNamesContext.class,0); + } + public TerminalNode CONSTRAINT() { return getToken(MySqlParser.CONSTRAINT, 0); } + public IndexTypeContext indexType() { + return getRuleContext(IndexTypeContext.class,0); + } + public List indexOption() { + return getRuleContexts(IndexOptionContext.class); + } + public IndexOptionContext indexOption(int i) { + return getRuleContext(IndexOptionContext.class,i); + } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public PrimaryKeyTableConstraintContext(TableConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPrimaryKeyTableConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPrimaryKeyTableConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPrimaryKeyTableConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class ForeignKeyTableConstraintContext extends TableConstraintContext { + public UidContext name; + public UidContext index; + public TerminalNode FOREIGN() { return getToken(MySqlParser.FOREIGN, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public IndexColumnNamesContext indexColumnNames() { + return getRuleContext(IndexColumnNamesContext.class,0); + } + public ReferenceDefinitionContext referenceDefinition() { + return getRuleContext(ReferenceDefinitionContext.class,0); + } + public TerminalNode CONSTRAINT() { return getToken(MySqlParser.CONSTRAINT, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public ForeignKeyTableConstraintContext(TableConstraintContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterForeignKeyTableConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitForeignKeyTableConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitForeignKeyTableConstraint(this); + else return visitor.visitChildren(this); + } + } + + public final TableConstraintContext tableConstraint() throws RecognitionException { + TableConstraintContext _localctx = new TableConstraintContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_tableConstraint); + int _la; + try { + setState(1539); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,153,_ctx) ) { + case 1: + _localctx = new PrimaryKeyTableConstraintContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(1474); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CONSTRAINT) { + { + setState(1470); + match(CONSTRAINT); + setState(1472); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(1471); + ((PrimaryKeyTableConstraintContext)_localctx).name = uid(); + } + } + + } + } + + setState(1476); + match(PRIMARY); + setState(1477); + match(KEY); + setState(1479); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(1478); + ((PrimaryKeyTableConstraintContext)_localctx).index = uid(); + } + } + + setState(1482); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==USING) { + { + setState(1481); + indexType(); + } + } + + setState(1484); + indexColumnNames(); + setState(1488); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==USING || _la==WITH || _la==COMMENT || _la==INVISIBLE || _la==KEY_BLOCK_SIZE || _la==VISIBLE) { + { + { + setState(1485); + indexOption(); + } + } + setState(1490); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 2: + _localctx = new UniqueKeyTableConstraintContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(1495); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CONSTRAINT) { + { + setState(1491); + match(CONSTRAINT); + setState(1493); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(1492); + ((UniqueKeyTableConstraintContext)_localctx).name = uid(); + } + } + + } + } + + setState(1497); + match(UNIQUE); + setState(1499); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INDEX || _la==KEY) { + { + setState(1498); + ((UniqueKeyTableConstraintContext)_localctx).indexFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==INDEX || _la==KEY) ) { + ((UniqueKeyTableConstraintContext)_localctx).indexFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(1502); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(1501); + ((UniqueKeyTableConstraintContext)_localctx).index = uid(); + } + } + + setState(1505); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==USING) { + { + setState(1504); + indexType(); + } + } + + setState(1507); + indexColumnNames(); + setState(1511); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==USING || _la==WITH || _la==COMMENT || _la==INVISIBLE || _la==KEY_BLOCK_SIZE || _la==VISIBLE) { + { + { + setState(1508); + indexOption(); + } + } + setState(1513); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 3: + _localctx = new ForeignKeyTableConstraintContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(1518); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CONSTRAINT) { + { + setState(1514); + match(CONSTRAINT); + setState(1516); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(1515); + ((ForeignKeyTableConstraintContext)_localctx).name = uid(); + } + } + + } + } + + setState(1520); + match(FOREIGN); + setState(1521); + match(KEY); + setState(1523); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(1522); + ((ForeignKeyTableConstraintContext)_localctx).index = uid(); + } + } + + setState(1525); + indexColumnNames(); + setState(1526); + referenceDefinition(); + } + break; + case 4: + _localctx = new CheckTableConstraintContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(1532); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CONSTRAINT) { + { + setState(1528); + match(CONSTRAINT); + setState(1530); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(1529); + ((CheckTableConstraintContext)_localctx).name = uid(); + } + } + + } + } + + setState(1534); + match(CHECK); + setState(1535); + match(LR_BRACKET); + setState(1536); + expression(0); + setState(1537); + match(RR_BRACKET); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ReferenceDefinitionContext extends ParserRuleContext { + public Token matchType; + public TerminalNode REFERENCES() { return getToken(MySqlParser.REFERENCES, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public IndexColumnNamesContext indexColumnNames() { + return getRuleContext(IndexColumnNamesContext.class,0); + } + public TerminalNode MATCH() { return getToken(MySqlParser.MATCH, 0); } + public ReferenceActionContext referenceAction() { + return getRuleContext(ReferenceActionContext.class,0); + } + public TerminalNode FULL() { return getToken(MySqlParser.FULL, 0); } + public TerminalNode PARTIAL() { return getToken(MySqlParser.PARTIAL, 0); } + public TerminalNode SIMPLE() { return getToken(MySqlParser.SIMPLE, 0); } + public ReferenceDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_referenceDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterReferenceDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitReferenceDefinition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitReferenceDefinition(this); + else return visitor.visitChildren(this); + } + } + + public final ReferenceDefinitionContext referenceDefinition() throws RecognitionException { + ReferenceDefinitionContext _localctx = new ReferenceDefinitionContext(_ctx, getState()); + enterRule(_localctx, 84, RULE_referenceDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1541); + match(REFERENCES); + setState(1542); + tableName(); + setState(1544); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,154,_ctx) ) { + case 1: + { + setState(1543); + indexColumnNames(); + } + break; + } + setState(1548); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==MATCH) { + { + setState(1546); + match(MATCH); + setState(1547); + ((ReferenceDefinitionContext)_localctx).matchType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FULL || _la==PARTIAL || _la==SIMPLE) ) { + ((ReferenceDefinitionContext)_localctx).matchType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(1551); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,156,_ctx) ) { + case 1: + { + setState(1550); + referenceAction(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ReferenceActionContext extends ParserRuleContext { + public ReferenceControlTypeContext onDelete; + public ReferenceControlTypeContext onUpdate; + public List ON() { return getTokens(MySqlParser.ON); } + public TerminalNode ON(int i) { + return getToken(MySqlParser.ON, i); + } + public TerminalNode DELETE() { return getToken(MySqlParser.DELETE, 0); } + public List referenceControlType() { + return getRuleContexts(ReferenceControlTypeContext.class); + } + public ReferenceControlTypeContext referenceControlType(int i) { + return getRuleContext(ReferenceControlTypeContext.class,i); + } + public TerminalNode UPDATE() { return getToken(MySqlParser.UPDATE, 0); } + public ReferenceActionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_referenceAction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterReferenceAction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitReferenceAction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitReferenceAction(this); + else return visitor.visitChildren(this); + } + } + + public final ReferenceActionContext referenceAction() throws RecognitionException { + ReferenceActionContext _localctx = new ReferenceActionContext(_ctx, getState()); + enterRule(_localctx, 86, RULE_referenceAction); + try { + setState(1569); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,159,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1553); + match(ON); + setState(1554); + match(DELETE); + setState(1555); + ((ReferenceActionContext)_localctx).onDelete = referenceControlType(); + setState(1559); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,157,_ctx) ) { + case 1: + { + setState(1556); + match(ON); + setState(1557); + match(UPDATE); + setState(1558); + ((ReferenceActionContext)_localctx).onUpdate = referenceControlType(); + } + break; + } + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1561); + match(ON); + setState(1562); + match(UPDATE); + setState(1563); + ((ReferenceActionContext)_localctx).onUpdate = referenceControlType(); + setState(1567); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,158,_ctx) ) { + case 1: + { + setState(1564); + match(ON); + setState(1565); + match(DELETE); + setState(1566); + ((ReferenceActionContext)_localctx).onDelete = referenceControlType(); + } + break; + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ReferenceControlTypeContext extends ParserRuleContext { + public TerminalNode RESTRICT() { return getToken(MySqlParser.RESTRICT, 0); } + public TerminalNode CASCADE() { return getToken(MySqlParser.CASCADE, 0); } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode NULL_LITERAL() { return getToken(MySqlParser.NULL_LITERAL, 0); } + public TerminalNode NO() { return getToken(MySqlParser.NO, 0); } + public TerminalNode ACTION() { return getToken(MySqlParser.ACTION, 0); } + public ReferenceControlTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_referenceControlType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterReferenceControlType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitReferenceControlType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitReferenceControlType(this); + else return visitor.visitChildren(this); + } + } + + public final ReferenceControlTypeContext referenceControlType() throws RecognitionException { + ReferenceControlTypeContext _localctx = new ReferenceControlTypeContext(_ctx, getState()); + enterRule(_localctx, 88, RULE_referenceControlType); + try { + setState(1577); + _errHandler.sync(this); + switch (_input.LA(1)) { + case RESTRICT: + enterOuterAlt(_localctx, 1); + { + setState(1571); + match(RESTRICT); + } + break; + case CASCADE: + enterOuterAlt(_localctx, 2); + { + setState(1572); + match(CASCADE); + } + break; + case SET: + enterOuterAlt(_localctx, 3); + { + setState(1573); + match(SET); + setState(1574); + match(NULL_LITERAL); + } + break; + case NO: + enterOuterAlt(_localctx, 4); + { + setState(1575); + match(NO); + setState(1576); + match(ACTION); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IndexColumnDefinitionContext extends ParserRuleContext { + public IndexColumnDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_indexColumnDefinition; } + + public IndexColumnDefinitionContext() { } + public void copyFrom(IndexColumnDefinitionContext ctx) { + super.copyFrom(ctx); + } + } + public static class SpecialIndexDeclarationContext extends IndexColumnDefinitionContext { + public Token indexFormat; + public IndexColumnNamesContext indexColumnNames() { + return getRuleContext(IndexColumnNamesContext.class,0); + } + public TerminalNode FULLTEXT() { return getToken(MySqlParser.FULLTEXT, 0); } + public TerminalNode SPATIAL() { return getToken(MySqlParser.SPATIAL, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public List indexOption() { + return getRuleContexts(IndexOptionContext.class); + } + public IndexOptionContext indexOption(int i) { + return getRuleContext(IndexOptionContext.class,i); + } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public SpecialIndexDeclarationContext(IndexColumnDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSpecialIndexDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSpecialIndexDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSpecialIndexDeclaration(this); + else return visitor.visitChildren(this); + } + } + public static class SimpleIndexDeclarationContext extends IndexColumnDefinitionContext { + public Token indexFormat; + public IndexColumnNamesContext indexColumnNames() { + return getRuleContext(IndexColumnNamesContext.class,0); + } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public IndexTypeContext indexType() { + return getRuleContext(IndexTypeContext.class,0); + } + public List indexOption() { + return getRuleContexts(IndexOptionContext.class); + } + public IndexOptionContext indexOption(int i) { + return getRuleContext(IndexOptionContext.class,i); + } + public SimpleIndexDeclarationContext(IndexColumnDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSimpleIndexDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSimpleIndexDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSimpleIndexDeclaration(this); + else return visitor.visitChildren(this); + } + } + + public final IndexColumnDefinitionContext indexColumnDefinition() throws RecognitionException { + IndexColumnDefinitionContext _localctx = new IndexColumnDefinitionContext(_ctx, getState()); + enterRule(_localctx, 90, RULE_indexColumnDefinition); + int _la; + try { + setState(1607); + _errHandler.sync(this); + switch (_input.LA(1)) { + case INDEX: + case KEY: + _localctx = new SimpleIndexDeclarationContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(1579); + ((SimpleIndexDeclarationContext)_localctx).indexFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==INDEX || _la==KEY) ) { + ((SimpleIndexDeclarationContext)_localctx).indexFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(1581); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(1580); + uid(); + } + } + + setState(1584); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==USING) { + { + setState(1583); + indexType(); + } + } + + setState(1586); + indexColumnNames(); + setState(1590); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==USING || _la==WITH || _la==COMMENT || _la==INVISIBLE || _la==KEY_BLOCK_SIZE || _la==VISIBLE) { + { + { + setState(1587); + indexOption(); + } + } + setState(1592); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case FULLTEXT: + case SPATIAL: + _localctx = new SpecialIndexDeclarationContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(1593); + _la = _input.LA(1); + if ( !(_la==FULLTEXT || _la==SPATIAL) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(1595); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INDEX || _la==KEY) { + { + setState(1594); + ((SpecialIndexDeclarationContext)_localctx).indexFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==INDEX || _la==KEY) ) { + ((SpecialIndexDeclarationContext)_localctx).indexFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(1598); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(1597); + uid(); + } + } + + setState(1600); + indexColumnNames(); + setState(1604); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==USING || _la==WITH || _la==COMMENT || _la==INVISIBLE || _la==KEY_BLOCK_SIZE || _la==VISIBLE) { + { + { + setState(1601); + indexOption(); + } + } + setState(1606); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TableOptionContext extends ParserRuleContext { + public TableOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tableOption; } + + public TableOptionContext() { } + public void copyFrom(TableOptionContext ctx) { + super.copyFrom(ctx); + } + } + public static class TableOptionEngineContext extends TableOptionContext { + public TerminalNode ENGINE() { return getToken(MySqlParser.ENGINE, 0); } + public EngineNameContext engineName() { + return getRuleContext(EngineNameContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionEngineContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionEngine(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionEngine(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionEngine(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionMaxRowsContext extends TableOptionContext { + public TerminalNode MAX_ROWS() { return getToken(MySqlParser.MAX_ROWS, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionMaxRowsContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionMaxRows(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionMaxRows(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionMaxRows(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionCollateContext extends TableOptionContext { + public TerminalNode COLLATE() { return getToken(MySqlParser.COLLATE, 0); } + public CollationNameContext collationName() { + return getRuleContext(CollationNameContext.class,0); + } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionCollateContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionCollate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionCollate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionCollate(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionPersistentContext extends TableOptionContext { + public Token extBoolValue; + public TerminalNode STATS_PERSISTENT() { return getToken(MySqlParser.STATS_PERSISTENT, 0); } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public TerminalNode ZERO_DECIMAL() { return getToken(MySqlParser.ZERO_DECIMAL, 0); } + public TerminalNode ONE_DECIMAL() { return getToken(MySqlParser.ONE_DECIMAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionPersistentContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionPersistent(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionPersistent(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionPersistent(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionTablespaceContext extends TableOptionContext { + public TerminalNode TABLESPACE() { return getToken(MySqlParser.TABLESPACE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TablespaceStorageContext tablespaceStorage() { + return getRuleContext(TablespaceStorageContext.class,0); + } + public TableOptionTablespaceContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionTablespace(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionTablespace(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionTablespace(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionPackKeysContext extends TableOptionContext { + public Token extBoolValue; + public TerminalNode PACK_KEYS() { return getToken(MySqlParser.PACK_KEYS, 0); } + public TerminalNode ZERO_DECIMAL() { return getToken(MySqlParser.ZERO_DECIMAL, 0); } + public TerminalNode ONE_DECIMAL() { return getToken(MySqlParser.ONE_DECIMAL, 0); } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionPackKeysContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionPackKeys(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionPackKeys(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionPackKeys(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionPasswordContext extends TableOptionContext { + public TerminalNode PASSWORD() { return getToken(MySqlParser.PASSWORD, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionPasswordContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionPassword(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionPassword(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionPassword(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionUnionContext extends TableOptionContext { + public TerminalNode UNION() { return getToken(MySqlParser.UNION, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TablesContext tables() { + return getRuleContext(TablesContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionUnionContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionUnion(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionUnion(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionUnion(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionSamplePageContext extends TableOptionContext { + public TerminalNode STATS_SAMPLE_PAGES() { return getToken(MySqlParser.STATS_SAMPLE_PAGES, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionSamplePageContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionSamplePage(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionSamplePage(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionSamplePage(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionCharsetContext extends TableOptionContext { + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode CHARSET() { return getToken(MySqlParser.CHARSET, 0); } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public List DEFAULT() { return getTokens(MySqlParser.DEFAULT); } + public TerminalNode DEFAULT(int i) { + return getToken(MySqlParser.DEFAULT, i); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionCharsetContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionCharset(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionCharset(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionCharset(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionIndexDirectoryContext extends TableOptionContext { + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode DIRECTORY() { return getToken(MySqlParser.DIRECTORY, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionIndexDirectoryContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionIndexDirectory(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionIndexDirectory(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionIndexDirectory(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionKeyBlockSizeContext extends TableOptionContext { + public TerminalNode KEY_BLOCK_SIZE() { return getToken(MySqlParser.KEY_BLOCK_SIZE, 0); } + public FileSizeLiteralContext fileSizeLiteral() { + return getRuleContext(FileSizeLiteralContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionKeyBlockSizeContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionKeyBlockSize(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionKeyBlockSize(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionKeyBlockSize(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionEncryptionContext extends TableOptionContext { + public TerminalNode ENCRYPTION() { return getToken(MySqlParser.ENCRYPTION, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionEncryptionContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionEncryption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionEncryption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionEncryption(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionDataDirectoryContext extends TableOptionContext { + public TerminalNode DATA() { return getToken(MySqlParser.DATA, 0); } + public TerminalNode DIRECTORY() { return getToken(MySqlParser.DIRECTORY, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionDataDirectoryContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionDataDirectory(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionDataDirectory(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionDataDirectory(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionRecalculationContext extends TableOptionContext { + public Token extBoolValue; + public TerminalNode STATS_AUTO_RECALC() { return getToken(MySqlParser.STATS_AUTO_RECALC, 0); } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public TerminalNode ZERO_DECIMAL() { return getToken(MySqlParser.ZERO_DECIMAL, 0); } + public TerminalNode ONE_DECIMAL() { return getToken(MySqlParser.ONE_DECIMAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionRecalculationContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionRecalculation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionRecalculation(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionRecalculation(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionAutoIncrementContext extends TableOptionContext { + public TerminalNode AUTO_INCREMENT() { return getToken(MySqlParser.AUTO_INCREMENT, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionAutoIncrementContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionAutoIncrement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionAutoIncrement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionAutoIncrement(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionChecksumContext extends TableOptionContext { + public Token boolValue; + public TerminalNode CHECKSUM() { return getToken(MySqlParser.CHECKSUM, 0); } + public TerminalNode PAGE_CHECKSUM() { return getToken(MySqlParser.PAGE_CHECKSUM, 0); } + public TerminalNode ZERO_DECIMAL() { return getToken(MySqlParser.ZERO_DECIMAL, 0); } + public TerminalNode ONE_DECIMAL() { return getToken(MySqlParser.ONE_DECIMAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionChecksumContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionChecksum(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionChecksum(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionChecksum(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionDelayContext extends TableOptionContext { + public Token boolValue; + public TerminalNode DELAY_KEY_WRITE() { return getToken(MySqlParser.DELAY_KEY_WRITE, 0); } + public TerminalNode ZERO_DECIMAL() { return getToken(MySqlParser.ZERO_DECIMAL, 0); } + public TerminalNode ONE_DECIMAL() { return getToken(MySqlParser.ONE_DECIMAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionDelayContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionDelay(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionDelay(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionDelay(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionConnectionContext extends TableOptionContext { + public TerminalNode CONNECTION() { return getToken(MySqlParser.CONNECTION, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionConnectionContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionConnection(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionConnection(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionConnection(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionCommentContext extends TableOptionContext { + public TerminalNode COMMENT() { return getToken(MySqlParser.COMMENT, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionCommentContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionComment(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionComment(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionComment(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionAverageContext extends TableOptionContext { + public TerminalNode AVG_ROW_LENGTH() { return getToken(MySqlParser.AVG_ROW_LENGTH, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionAverageContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionAverage(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionAverage(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionAverage(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionRowFormatContext extends TableOptionContext { + public Token rowFormat; + public TerminalNode ROW_FORMAT() { return getToken(MySqlParser.ROW_FORMAT, 0); } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public TerminalNode DYNAMIC() { return getToken(MySqlParser.DYNAMIC, 0); } + public TerminalNode FIXED() { return getToken(MySqlParser.FIXED, 0); } + public TerminalNode COMPRESSED() { return getToken(MySqlParser.COMPRESSED, 0); } + public TerminalNode REDUNDANT() { return getToken(MySqlParser.REDUNDANT, 0); } + public TerminalNode COMPACT() { return getToken(MySqlParser.COMPACT, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionRowFormatContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionRowFormat(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionRowFormat(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionRowFormat(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionCompressionContext extends TableOptionContext { + public TerminalNode COMPRESSION() { return getToken(MySqlParser.COMPRESSION, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode ID() { return getToken(MySqlParser.ID, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionCompressionContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionCompression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionCompression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionCompression(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionInsertMethodContext extends TableOptionContext { + public Token insertMethod; + public TerminalNode INSERT_METHOD() { return getToken(MySqlParser.INSERT_METHOD, 0); } + public TerminalNode NO() { return getToken(MySqlParser.NO, 0); } + public TerminalNode FIRST() { return getToken(MySqlParser.FIRST, 0); } + public TerminalNode LAST() { return getToken(MySqlParser.LAST, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionInsertMethodContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionInsertMethod(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionInsertMethod(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionInsertMethod(this); + else return visitor.visitChildren(this); + } + } + public static class TableOptionMinRowsContext extends TableOptionContext { + public TerminalNode MIN_ROWS() { return getToken(MySqlParser.MIN_ROWS, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TableOptionMinRowsContext(TableOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableOptionMinRows(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableOptionMinRows(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableOptionMinRows(this); + else return visitor.visitChildren(this); + } + } + + public final TableOptionContext tableOption() throws RecognitionException { + TableOptionContext _localctx = new TableOptionContext(_ctx, getState()); + enterRule(_localctx, 92, RULE_tableOption); + int _la; + try { + setState(1753); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,197,_ctx) ) { + case 1: + _localctx = new TableOptionEngineContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(1609); + match(ENGINE); + setState(1611); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1610); + match(EQUAL_SYMBOL); + } + } + + setState(1613); + engineName(); + } + break; + case 2: + _localctx = new TableOptionAutoIncrementContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(1614); + match(AUTO_INCREMENT); + setState(1616); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1615); + match(EQUAL_SYMBOL); + } + } + + setState(1618); + decimalLiteral(); + } + break; + case 3: + _localctx = new TableOptionAverageContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(1619); + match(AVG_ROW_LENGTH); + setState(1621); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1620); + match(EQUAL_SYMBOL); + } + } + + setState(1623); + decimalLiteral(); + } + break; + case 4: + _localctx = new TableOptionCharsetContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(1625); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFAULT) { + { + setState(1624); + match(DEFAULT); + } + } + + setState(1630); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CHARACTER: + { + setState(1627); + match(CHARACTER); + setState(1628); + match(SET); + } + break; + case CHARSET: + { + setState(1629); + match(CHARSET); + } + break; + default: + throw new NoViableAltException(this); + } + setState(1633); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1632); + match(EQUAL_SYMBOL); + } + } + + setState(1637); + _errHandler.sync(this); + switch (_input.LA(1)) { + case BINARY: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + { + setState(1635); + charsetName(); + } + break; + case DEFAULT: + { + setState(1636); + match(DEFAULT); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 5: + _localctx = new TableOptionChecksumContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(1639); + _la = _input.LA(1); + if ( !(_la==CHECKSUM || _la==PAGE_CHECKSUM) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(1641); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1640); + match(EQUAL_SYMBOL); + } + } + + setState(1643); + ((TableOptionChecksumContext)_localctx).boolValue = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ZERO_DECIMAL || _la==ONE_DECIMAL) ) { + ((TableOptionChecksumContext)_localctx).boolValue = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 6: + _localctx = new TableOptionCollateContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(1645); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFAULT) { + { + setState(1644); + match(DEFAULT); + } + } + + setState(1647); + match(COLLATE); + setState(1649); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1648); + match(EQUAL_SYMBOL); + } + } + + setState(1651); + collationName(); + } + break; + case 7: + _localctx = new TableOptionCommentContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(1652); + match(COMMENT); + setState(1654); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1653); + match(EQUAL_SYMBOL); + } + } + + setState(1656); + match(STRING_LITERAL); + } + break; + case 8: + _localctx = new TableOptionCompressionContext(_localctx); + enterOuterAlt(_localctx, 8); + { + setState(1657); + match(COMPRESSION); + setState(1659); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1658); + match(EQUAL_SYMBOL); + } + } + + setState(1661); + _la = _input.LA(1); + if ( !(_la==STRING_LITERAL || _la==ID) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 9: + _localctx = new TableOptionConnectionContext(_localctx); + enterOuterAlt(_localctx, 9); + { + setState(1662); + match(CONNECTION); + setState(1664); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1663); + match(EQUAL_SYMBOL); + } + } + + setState(1666); + match(STRING_LITERAL); + } + break; + case 10: + _localctx = new TableOptionDataDirectoryContext(_localctx); + enterOuterAlt(_localctx, 10); + { + setState(1667); + match(DATA); + setState(1668); + match(DIRECTORY); + setState(1670); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1669); + match(EQUAL_SYMBOL); + } + } + + setState(1672); + match(STRING_LITERAL); + } + break; + case 11: + _localctx = new TableOptionDelayContext(_localctx); + enterOuterAlt(_localctx, 11); + { + setState(1673); + match(DELAY_KEY_WRITE); + setState(1675); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1674); + match(EQUAL_SYMBOL); + } + } + + setState(1677); + ((TableOptionDelayContext)_localctx).boolValue = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ZERO_DECIMAL || _la==ONE_DECIMAL) ) { + ((TableOptionDelayContext)_localctx).boolValue = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 12: + _localctx = new TableOptionEncryptionContext(_localctx); + enterOuterAlt(_localctx, 12); + { + setState(1678); + match(ENCRYPTION); + setState(1680); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1679); + match(EQUAL_SYMBOL); + } + } + + setState(1682); + match(STRING_LITERAL); + } + break; + case 13: + _localctx = new TableOptionIndexDirectoryContext(_localctx); + enterOuterAlt(_localctx, 13); + { + setState(1683); + match(INDEX); + setState(1684); + match(DIRECTORY); + setState(1686); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1685); + match(EQUAL_SYMBOL); + } + } + + setState(1688); + match(STRING_LITERAL); + } + break; + case 14: + _localctx = new TableOptionInsertMethodContext(_localctx); + enterOuterAlt(_localctx, 14); + { + setState(1689); + match(INSERT_METHOD); + setState(1691); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1690); + match(EQUAL_SYMBOL); + } + } + + setState(1693); + ((TableOptionInsertMethodContext)_localctx).insertMethod = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FIRST || _la==LAST || _la==NO) ) { + ((TableOptionInsertMethodContext)_localctx).insertMethod = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 15: + _localctx = new TableOptionKeyBlockSizeContext(_localctx); + enterOuterAlt(_localctx, 15); + { + setState(1694); + match(KEY_BLOCK_SIZE); + setState(1696); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1695); + match(EQUAL_SYMBOL); + } + } + + setState(1698); + fileSizeLiteral(); + } + break; + case 16: + _localctx = new TableOptionMaxRowsContext(_localctx); + enterOuterAlt(_localctx, 16); + { + setState(1699); + match(MAX_ROWS); + setState(1701); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1700); + match(EQUAL_SYMBOL); + } + } + + setState(1703); + decimalLiteral(); + } + break; + case 17: + _localctx = new TableOptionMinRowsContext(_localctx); + enterOuterAlt(_localctx, 17); + { + setState(1704); + match(MIN_ROWS); + setState(1706); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1705); + match(EQUAL_SYMBOL); + } + } + + setState(1708); + decimalLiteral(); + } + break; + case 18: + _localctx = new TableOptionPackKeysContext(_localctx); + enterOuterAlt(_localctx, 18); + { + setState(1709); + match(PACK_KEYS); + setState(1711); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1710); + match(EQUAL_SYMBOL); + } + } + + setState(1713); + ((TableOptionPackKeysContext)_localctx).extBoolValue = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFAULT || _la==ZERO_DECIMAL || _la==ONE_DECIMAL) ) { + ((TableOptionPackKeysContext)_localctx).extBoolValue = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 19: + _localctx = new TableOptionPasswordContext(_localctx); + enterOuterAlt(_localctx, 19); + { + setState(1714); + match(PASSWORD); + setState(1716); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1715); + match(EQUAL_SYMBOL); + } + } + + setState(1718); + match(STRING_LITERAL); + } + break; + case 20: + _localctx = new TableOptionRowFormatContext(_localctx); + enterOuterAlt(_localctx, 20); + { + setState(1719); + match(ROW_FORMAT); + setState(1721); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1720); + match(EQUAL_SYMBOL); + } + } + + setState(1723); + ((TableOptionRowFormatContext)_localctx).rowFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFAULT || ((((_la - 307)) & ~0x3f) == 0 && ((1L << (_la - 307)) & ((1L << (COMPACT - 307)) | (1L << (COMPRESSED - 307)) | (1L << (DYNAMIC - 307)) | (1L << (FIXED - 307)))) != 0) || _la==REDUNDANT) ) { + ((TableOptionRowFormatContext)_localctx).rowFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 21: + _localctx = new TableOptionRecalculationContext(_localctx); + enterOuterAlt(_localctx, 21); + { + setState(1724); + match(STATS_AUTO_RECALC); + setState(1726); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1725); + match(EQUAL_SYMBOL); + } + } + + setState(1728); + ((TableOptionRecalculationContext)_localctx).extBoolValue = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFAULT || _la==ZERO_DECIMAL || _la==ONE_DECIMAL) ) { + ((TableOptionRecalculationContext)_localctx).extBoolValue = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 22: + _localctx = new TableOptionPersistentContext(_localctx); + enterOuterAlt(_localctx, 22); + { + setState(1729); + match(STATS_PERSISTENT); + setState(1731); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1730); + match(EQUAL_SYMBOL); + } + } + + setState(1733); + ((TableOptionPersistentContext)_localctx).extBoolValue = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFAULT || _la==ZERO_DECIMAL || _la==ONE_DECIMAL) ) { + ((TableOptionPersistentContext)_localctx).extBoolValue = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 23: + _localctx = new TableOptionSamplePageContext(_localctx); + enterOuterAlt(_localctx, 23); + { + setState(1734); + match(STATS_SAMPLE_PAGES); + setState(1736); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1735); + match(EQUAL_SYMBOL); + } + } + + setState(1738); + decimalLiteral(); + } + break; + case 24: + _localctx = new TableOptionTablespaceContext(_localctx); + enterOuterAlt(_localctx, 24); + { + setState(1739); + match(TABLESPACE); + setState(1740); + uid(); + setState(1742); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,195,_ctx) ) { + case 1: + { + setState(1741); + tablespaceStorage(); + } + break; + } + } + break; + case 25: + _localctx = new TableOptionTablespaceContext(_localctx); + enterOuterAlt(_localctx, 25); + { + setState(1744); + tablespaceStorage(); + } + break; + case 26: + _localctx = new TableOptionUnionContext(_localctx); + enterOuterAlt(_localctx, 26); + { + setState(1745); + match(UNION); + setState(1747); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(1746); + match(EQUAL_SYMBOL); + } + } + + setState(1749); + match(LR_BRACKET); + setState(1750); + tables(); + setState(1751); + match(RR_BRACKET); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TablespaceStorageContext extends ParserRuleContext { + public TerminalNode STORAGE() { return getToken(MySqlParser.STORAGE, 0); } + public TerminalNode DISK() { return getToken(MySqlParser.DISK, 0); } + public TerminalNode MEMORY() { return getToken(MySqlParser.MEMORY, 0); } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public TablespaceStorageContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tablespaceStorage; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTablespaceStorage(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTablespaceStorage(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTablespaceStorage(this); + else return visitor.visitChildren(this); + } + } + + public final TablespaceStorageContext tablespaceStorage() throws RecognitionException { + TablespaceStorageContext _localctx = new TablespaceStorageContext(_ctx, getState()); + enterRule(_localctx, 94, RULE_tablespaceStorage); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1755); + match(STORAGE); + setState(1756); + _la = _input.LA(1); + if ( !(_la==DEFAULT || _la==DISK || _la==MEMORY) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PartitionDefinitionsContext extends ParserRuleContext { + public DecimalLiteralContext count; + public DecimalLiteralContext subCount; + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public List BY() { return getTokens(MySqlParser.BY); } + public TerminalNode BY(int i) { + return getToken(MySqlParser.BY, i); + } + public PartitionFunctionDefinitionContext partitionFunctionDefinition() { + return getRuleContext(PartitionFunctionDefinitionContext.class,0); + } + public TerminalNode PARTITIONS() { return getToken(MySqlParser.PARTITIONS, 0); } + public TerminalNode SUBPARTITION() { return getToken(MySqlParser.SUBPARTITION, 0); } + public SubpartitionFunctionDefinitionContext subpartitionFunctionDefinition() { + return getRuleContext(SubpartitionFunctionDefinitionContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List partitionDefinition() { + return getRuleContexts(PartitionDefinitionContext.class); + } + public PartitionDefinitionContext partitionDefinition(int i) { + return getRuleContext(PartitionDefinitionContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List decimalLiteral() { + return getRuleContexts(DecimalLiteralContext.class); + } + public DecimalLiteralContext decimalLiteral(int i) { + return getRuleContext(DecimalLiteralContext.class,i); + } + public TerminalNode SUBPARTITIONS() { return getToken(MySqlParser.SUBPARTITIONS, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public PartitionDefinitionsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_partitionDefinitions; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionDefinitions(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionDefinitions(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionDefinitions(this); + else return visitor.visitChildren(this); + } + } + + public final PartitionDefinitionsContext partitionDefinitions() throws RecognitionException { + PartitionDefinitionsContext _localctx = new PartitionDefinitionsContext(_ctx, getState()); + enterRule(_localctx, 96, RULE_partitionDefinitions); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1758); + match(PARTITION); + setState(1759); + match(BY); + setState(1760); + partitionFunctionDefinition(); + setState(1763); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PARTITIONS) { + { + setState(1761); + match(PARTITIONS); + setState(1762); + ((PartitionDefinitionsContext)_localctx).count = decimalLiteral(); + } + } + + setState(1772); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SUBPARTITION) { + { + setState(1765); + match(SUBPARTITION); + setState(1766); + match(BY); + setState(1767); + subpartitionFunctionDefinition(); + setState(1770); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SUBPARTITIONS) { + { + setState(1768); + match(SUBPARTITIONS); + setState(1769); + ((PartitionDefinitionsContext)_localctx).subCount = decimalLiteral(); + } + } + + } + } + + setState(1785); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,202,_ctx) ) { + case 1: + { + setState(1774); + match(LR_BRACKET); + setState(1775); + partitionDefinition(); + setState(1780); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(1776); + match(COMMA); + setState(1777); + partitionDefinition(); + } + } + setState(1782); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1783); + match(RR_BRACKET); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PartitionFunctionDefinitionContext extends ParserRuleContext { + public PartitionFunctionDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_partitionFunctionDefinition; } + + public PartitionFunctionDefinitionContext() { } + public void copyFrom(PartitionFunctionDefinitionContext ctx) { + super.copyFrom(ctx); + } + } + public static class PartitionFunctionKeyContext extends PartitionFunctionDefinitionContext { + public Token algType; + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode LINEAR() { return getToken(MySqlParser.LINEAR, 0); } + public TerminalNode ALGORITHM() { return getToken(MySqlParser.ALGORITHM, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode ONE_DECIMAL() { return getToken(MySqlParser.ONE_DECIMAL, 0); } + public TerminalNode TWO_DECIMAL() { return getToken(MySqlParser.TWO_DECIMAL, 0); } + public PartitionFunctionKeyContext(PartitionFunctionDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionFunctionKey(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionFunctionKey(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionFunctionKey(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionFunctionHashContext extends PartitionFunctionDefinitionContext { + public TerminalNode HASH() { return getToken(MySqlParser.HASH, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode LINEAR() { return getToken(MySqlParser.LINEAR, 0); } + public PartitionFunctionHashContext(PartitionFunctionDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionFunctionHash(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionFunctionHash(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionFunctionHash(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionFunctionListContext extends PartitionFunctionDefinitionContext { + public TerminalNode LIST() { return getToken(MySqlParser.LIST, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode COLUMNS() { return getToken(MySqlParser.COLUMNS, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public PartitionFunctionListContext(PartitionFunctionDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionFunctionList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionFunctionList(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionFunctionList(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionFunctionRangeContext extends PartitionFunctionDefinitionContext { + public TerminalNode RANGE() { return getToken(MySqlParser.RANGE, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode COLUMNS() { return getToken(MySqlParser.COLUMNS, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public PartitionFunctionRangeContext(PartitionFunctionDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionFunctionRange(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionFunctionRange(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionFunctionRange(this); + else return visitor.visitChildren(this); + } + } + + public final PartitionFunctionDefinitionContext partitionFunctionDefinition() throws RecognitionException { + PartitionFunctionDefinitionContext _localctx = new PartitionFunctionDefinitionContext(_ctx, getState()); + enterRule(_localctx, 98, RULE_partitionFunctionDefinition); + int _la; + try { + setState(1832); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,208,_ctx) ) { + case 1: + _localctx = new PartitionFunctionHashContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(1788); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LINEAR) { + { + setState(1787); + match(LINEAR); + } + } + + setState(1790); + match(HASH); + setState(1791); + match(LR_BRACKET); + setState(1792); + expression(0); + setState(1793); + match(RR_BRACKET); + } + break; + case 2: + _localctx = new PartitionFunctionKeyContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(1796); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LINEAR) { + { + setState(1795); + match(LINEAR); + } + } + + setState(1798); + match(KEY); + setState(1802); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALGORITHM) { + { + setState(1799); + match(ALGORITHM); + setState(1800); + match(EQUAL_SYMBOL); + setState(1801); + ((PartitionFunctionKeyContext)_localctx).algType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ONE_DECIMAL || _la==TWO_DECIMAL) ) { + ((PartitionFunctionKeyContext)_localctx).algType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(1804); + match(LR_BRACKET); + setState(1805); + uidList(); + setState(1806); + match(RR_BRACKET); + } + break; + case 3: + _localctx = new PartitionFunctionRangeContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(1808); + match(RANGE); + setState(1818); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LR_BRACKET: + { + setState(1809); + match(LR_BRACKET); + setState(1810); + expression(0); + setState(1811); + match(RR_BRACKET); + } + break; + case COLUMNS: + { + setState(1813); + match(COLUMNS); + setState(1814); + match(LR_BRACKET); + setState(1815); + uidList(); + setState(1816); + match(RR_BRACKET); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 4: + _localctx = new PartitionFunctionListContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(1820); + match(LIST); + setState(1830); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LR_BRACKET: + { + setState(1821); + match(LR_BRACKET); + setState(1822); + expression(0); + setState(1823); + match(RR_BRACKET); + } + break; + case COLUMNS: + { + setState(1825); + match(COLUMNS); + setState(1826); + match(LR_BRACKET); + setState(1827); + uidList(); + setState(1828); + match(RR_BRACKET); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SubpartitionFunctionDefinitionContext extends ParserRuleContext { + public SubpartitionFunctionDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_subpartitionFunctionDefinition; } + + public SubpartitionFunctionDefinitionContext() { } + public void copyFrom(SubpartitionFunctionDefinitionContext ctx) { + super.copyFrom(ctx); + } + } + public static class SubPartitionFunctionHashContext extends SubpartitionFunctionDefinitionContext { + public TerminalNode HASH() { return getToken(MySqlParser.HASH, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode LINEAR() { return getToken(MySqlParser.LINEAR, 0); } + public SubPartitionFunctionHashContext(SubpartitionFunctionDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSubPartitionFunctionHash(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSubPartitionFunctionHash(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSubPartitionFunctionHash(this); + else return visitor.visitChildren(this); + } + } + public static class SubPartitionFunctionKeyContext extends SubpartitionFunctionDefinitionContext { + public Token algType; + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode LINEAR() { return getToken(MySqlParser.LINEAR, 0); } + public TerminalNode ALGORITHM() { return getToken(MySqlParser.ALGORITHM, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode ONE_DECIMAL() { return getToken(MySqlParser.ONE_DECIMAL, 0); } + public TerminalNode TWO_DECIMAL() { return getToken(MySqlParser.TWO_DECIMAL, 0); } + public SubPartitionFunctionKeyContext(SubpartitionFunctionDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSubPartitionFunctionKey(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSubPartitionFunctionKey(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSubPartitionFunctionKey(this); + else return visitor.visitChildren(this); + } + } + + public final SubpartitionFunctionDefinitionContext subpartitionFunctionDefinition() throws RecognitionException { + SubpartitionFunctionDefinitionContext _localctx = new SubpartitionFunctionDefinitionContext(_ctx, getState()); + enterRule(_localctx, 100, RULE_subpartitionFunctionDefinition); + int _la; + try { + setState(1855); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,212,_ctx) ) { + case 1: + _localctx = new SubPartitionFunctionHashContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(1835); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LINEAR) { + { + setState(1834); + match(LINEAR); + } + } + + setState(1837); + match(HASH); + setState(1838); + match(LR_BRACKET); + setState(1839); + expression(0); + setState(1840); + match(RR_BRACKET); + } + break; + case 2: + _localctx = new SubPartitionFunctionKeyContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(1843); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LINEAR) { + { + setState(1842); + match(LINEAR); + } + } + + setState(1845); + match(KEY); + setState(1849); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALGORITHM) { + { + setState(1846); + match(ALGORITHM); + setState(1847); + match(EQUAL_SYMBOL); + setState(1848); + ((SubPartitionFunctionKeyContext)_localctx).algType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ONE_DECIMAL || _la==TWO_DECIMAL) ) { + ((SubPartitionFunctionKeyContext)_localctx).algType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(1851); + match(LR_BRACKET); + setState(1852); + uidList(); + setState(1853); + match(RR_BRACKET); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PartitionDefinitionContext extends ParserRuleContext { + public PartitionDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_partitionDefinition; } + + public PartitionDefinitionContext() { } + public void copyFrom(PartitionDefinitionContext ctx) { + super.copyFrom(ctx); + } + } + public static class PartitionComparisionContext extends PartitionDefinitionContext { + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode VALUES() { return getToken(MySqlParser.VALUES, 0); } + public TerminalNode LESS() { return getToken(MySqlParser.LESS, 0); } + public TerminalNode THAN() { return getToken(MySqlParser.THAN, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List partitionDefinerAtom() { + return getRuleContexts(PartitionDefinerAtomContext.class); + } + public PartitionDefinerAtomContext partitionDefinerAtom(int i) { + return getRuleContext(PartitionDefinerAtomContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public List partitionOption() { + return getRuleContexts(PartitionOptionContext.class); + } + public PartitionOptionContext partitionOption(int i) { + return getRuleContext(PartitionOptionContext.class,i); + } + public List subpartitionDefinition() { + return getRuleContexts(SubpartitionDefinitionContext.class); + } + public SubpartitionDefinitionContext subpartitionDefinition(int i) { + return getRuleContext(SubpartitionDefinitionContext.class,i); + } + public PartitionComparisionContext(PartitionDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionComparision(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionComparision(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionComparision(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionListAtomContext extends PartitionDefinitionContext { + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode VALUES() { return getToken(MySqlParser.VALUES, 0); } + public TerminalNode IN() { return getToken(MySqlParser.IN, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List partitionDefinerAtom() { + return getRuleContexts(PartitionDefinerAtomContext.class); + } + public PartitionDefinerAtomContext partitionDefinerAtom(int i) { + return getRuleContext(PartitionDefinerAtomContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public List partitionOption() { + return getRuleContexts(PartitionOptionContext.class); + } + public PartitionOptionContext partitionOption(int i) { + return getRuleContext(PartitionOptionContext.class,i); + } + public List subpartitionDefinition() { + return getRuleContexts(SubpartitionDefinitionContext.class); + } + public SubpartitionDefinitionContext subpartitionDefinition(int i) { + return getRuleContext(SubpartitionDefinitionContext.class,i); + } + public PartitionListAtomContext(PartitionDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionListAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionListAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionListAtom(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionListVectorContext extends PartitionDefinitionContext { + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode VALUES() { return getToken(MySqlParser.VALUES, 0); } + public TerminalNode IN() { return getToken(MySqlParser.IN, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List partitionDefinerVector() { + return getRuleContexts(PartitionDefinerVectorContext.class); + } + public PartitionDefinerVectorContext partitionDefinerVector(int i) { + return getRuleContext(PartitionDefinerVectorContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public List partitionOption() { + return getRuleContexts(PartitionOptionContext.class); + } + public PartitionOptionContext partitionOption(int i) { + return getRuleContext(PartitionOptionContext.class,i); + } + public List subpartitionDefinition() { + return getRuleContexts(SubpartitionDefinitionContext.class); + } + public SubpartitionDefinitionContext subpartitionDefinition(int i) { + return getRuleContext(SubpartitionDefinitionContext.class,i); + } + public PartitionListVectorContext(PartitionDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionListVector(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionListVector(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionListVector(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionSimpleContext extends PartitionDefinitionContext { + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public List partitionOption() { + return getRuleContexts(PartitionOptionContext.class); + } + public PartitionOptionContext partitionOption(int i) { + return getRuleContext(PartitionOptionContext.class,i); + } + public List subpartitionDefinition() { + return getRuleContexts(SubpartitionDefinitionContext.class); + } + public SubpartitionDefinitionContext subpartitionDefinition(int i) { + return getRuleContext(SubpartitionDefinitionContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public PartitionSimpleContext(PartitionDefinitionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionSimple(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionSimple(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionSimple(this); + else return visitor.visitChildren(this); + } + } + + public final PartitionDefinitionContext partitionDefinition() throws RecognitionException { + PartitionDefinitionContext _localctx = new PartitionDefinitionContext(_ctx, getState()); + enterRule(_localctx, 102, RULE_partitionDefinition); + int _la; + try { + int _alt; + setState(1988); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,231,_ctx) ) { + case 1: + _localctx = new PartitionComparisionContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(1857); + match(PARTITION); + setState(1858); + uid(); + setState(1859); + match(VALUES); + setState(1860); + match(LESS); + setState(1861); + match(THAN); + setState(1862); + match(LR_BRACKET); + setState(1863); + partitionDefinerAtom(); + setState(1868); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(1864); + match(COMMA); + setState(1865); + partitionDefinerAtom(); + } + } + setState(1870); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1871); + match(RR_BRACKET); + setState(1875); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==INDEX || ((((_la - 305)) & ~0x3f) == 0 && ((1L << (_la - 305)) & ((1L << (COMMENT - 305)) | (1L << (DATA - 305)) | (1L << (ENGINE - 305)))) != 0) || ((((_la - 428)) & ~0x3f) == 0 && ((1L << (_la - 428)) & ((1L << (MAX_ROWS - 428)) | (1L << (MIN_ROWS - 428)) | (1L << (NODEGROUP - 428)))) != 0) || _la==STORAGE || _la==TABLESPACE) { + { + { + setState(1872); + partitionOption(); + } + } + setState(1877); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1886); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SUBPARTITION) { + { + setState(1878); + subpartitionDefinition(); + setState(1883); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,215,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1879); + match(COMMA); + setState(1880); + subpartitionDefinition(); + } + } + } + setState(1885); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,215,_ctx); + } + } + } + + } + break; + case 2: + _localctx = new PartitionComparisionContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(1888); + match(PARTITION); + setState(1889); + uid(); + setState(1890); + match(VALUES); + setState(1891); + match(LESS); + setState(1892); + match(THAN); + setState(1893); + partitionDefinerAtom(); + setState(1897); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==INDEX || ((((_la - 305)) & ~0x3f) == 0 && ((1L << (_la - 305)) & ((1L << (COMMENT - 305)) | (1L << (DATA - 305)) | (1L << (ENGINE - 305)))) != 0) || ((((_la - 428)) & ~0x3f) == 0 && ((1L << (_la - 428)) & ((1L << (MAX_ROWS - 428)) | (1L << (MIN_ROWS - 428)) | (1L << (NODEGROUP - 428)))) != 0) || _la==STORAGE || _la==TABLESPACE) { + { + { + setState(1894); + partitionOption(); + } + } + setState(1899); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1908); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SUBPARTITION) { + { + setState(1900); + subpartitionDefinition(); + setState(1905); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,218,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1901); + match(COMMA); + setState(1902); + subpartitionDefinition(); + } + } + } + setState(1907); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,218,_ctx); + } + } + } + + } + break; + case 3: + _localctx = new PartitionListAtomContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(1910); + match(PARTITION); + setState(1911); + uid(); + setState(1912); + match(VALUES); + setState(1913); + match(IN); + setState(1914); + match(LR_BRACKET); + setState(1915); + partitionDefinerAtom(); + setState(1920); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(1916); + match(COMMA); + setState(1917); + partitionDefinerAtom(); + } + } + setState(1922); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1923); + match(RR_BRACKET); + setState(1927); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==INDEX || ((((_la - 305)) & ~0x3f) == 0 && ((1L << (_la - 305)) & ((1L << (COMMENT - 305)) | (1L << (DATA - 305)) | (1L << (ENGINE - 305)))) != 0) || ((((_la - 428)) & ~0x3f) == 0 && ((1L << (_la - 428)) & ((1L << (MAX_ROWS - 428)) | (1L << (MIN_ROWS - 428)) | (1L << (NODEGROUP - 428)))) != 0) || _la==STORAGE || _la==TABLESPACE) { + { + { + setState(1924); + partitionOption(); + } + } + setState(1929); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1938); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SUBPARTITION) { + { + setState(1930); + subpartitionDefinition(); + setState(1935); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,222,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1931); + match(COMMA); + setState(1932); + subpartitionDefinition(); + } + } + } + setState(1937); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,222,_ctx); + } + } + } + + } + break; + case 4: + _localctx = new PartitionListVectorContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(1940); + match(PARTITION); + setState(1941); + uid(); + setState(1942); + match(VALUES); + setState(1943); + match(IN); + setState(1944); + match(LR_BRACKET); + setState(1945); + partitionDefinerVector(); + setState(1950); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(1946); + match(COMMA); + setState(1947); + partitionDefinerVector(); + } + } + setState(1952); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1953); + match(RR_BRACKET); + setState(1957); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==INDEX || ((((_la - 305)) & ~0x3f) == 0 && ((1L << (_la - 305)) & ((1L << (COMMENT - 305)) | (1L << (DATA - 305)) | (1L << (ENGINE - 305)))) != 0) || ((((_la - 428)) & ~0x3f) == 0 && ((1L << (_la - 428)) & ((1L << (MAX_ROWS - 428)) | (1L << (MIN_ROWS - 428)) | (1L << (NODEGROUP - 428)))) != 0) || _la==STORAGE || _la==TABLESPACE) { + { + { + setState(1954); + partitionOption(); + } + } + setState(1959); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1968); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SUBPARTITION) { + { + setState(1960); + subpartitionDefinition(); + setState(1965); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,226,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1961); + match(COMMA); + setState(1962); + subpartitionDefinition(); + } + } + } + setState(1967); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,226,_ctx); + } + } + } + + } + break; + case 5: + _localctx = new PartitionSimpleContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(1970); + match(PARTITION); + setState(1971); + uid(); + setState(1975); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==INDEX || ((((_la - 305)) & ~0x3f) == 0 && ((1L << (_la - 305)) & ((1L << (COMMENT - 305)) | (1L << (DATA - 305)) | (1L << (ENGINE - 305)))) != 0) || ((((_la - 428)) & ~0x3f) == 0 && ((1L << (_la - 428)) & ((1L << (MAX_ROWS - 428)) | (1L << (MIN_ROWS - 428)) | (1L << (NODEGROUP - 428)))) != 0) || _la==STORAGE || _la==TABLESPACE) { + { + { + setState(1972); + partitionOption(); + } + } + setState(1977); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1986); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SUBPARTITION) { + { + setState(1978); + subpartitionDefinition(); + setState(1983); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,229,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1979); + match(COMMA); + setState(1980); + subpartitionDefinition(); + } + } + } + setState(1985); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,229,_ctx); + } + } + } + + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PartitionDefinerAtomContext extends ParserRuleContext { + public ConstantContext constant() { + return getRuleContext(ConstantContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode MAXVALUE() { return getToken(MySqlParser.MAXVALUE, 0); } + public PartitionDefinerAtomContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_partitionDefinerAtom; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionDefinerAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionDefinerAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionDefinerAtom(this); + else return visitor.visitChildren(this); + } + } + + public final PartitionDefinerAtomContext partitionDefinerAtom() throws RecognitionException { + PartitionDefinerAtomContext _localctx = new PartitionDefinerAtomContext(_ctx, getState()); + enterRule(_localctx, 104, RULE_partitionDefinerAtom); + try { + setState(1993); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,232,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1990); + constant(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1991); + expression(0); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1992); + match(MAXVALUE); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PartitionDefinerVectorContext extends ParserRuleContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List partitionDefinerAtom() { + return getRuleContexts(PartitionDefinerAtomContext.class); + } + public PartitionDefinerAtomContext partitionDefinerAtom(int i) { + return getRuleContext(PartitionDefinerAtomContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public PartitionDefinerVectorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_partitionDefinerVector; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionDefinerVector(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionDefinerVector(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionDefinerVector(this); + else return visitor.visitChildren(this); + } + } + + public final PartitionDefinerVectorContext partitionDefinerVector() throws RecognitionException { + PartitionDefinerVectorContext _localctx = new PartitionDefinerVectorContext(_ctx, getState()); + enterRule(_localctx, 106, RULE_partitionDefinerVector); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1995); + match(LR_BRACKET); + setState(1996); + partitionDefinerAtom(); + setState(1999); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(1997); + match(COMMA); + setState(1998); + partitionDefinerAtom(); + } + } + setState(2001); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==COMMA ); + setState(2003); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SubpartitionDefinitionContext extends ParserRuleContext { + public TerminalNode SUBPARTITION() { return getToken(MySqlParser.SUBPARTITION, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public List partitionOption() { + return getRuleContexts(PartitionOptionContext.class); + } + public PartitionOptionContext partitionOption(int i) { + return getRuleContext(PartitionOptionContext.class,i); + } + public SubpartitionDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_subpartitionDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSubpartitionDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSubpartitionDefinition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSubpartitionDefinition(this); + else return visitor.visitChildren(this); + } + } + + public final SubpartitionDefinitionContext subpartitionDefinition() throws RecognitionException { + SubpartitionDefinitionContext _localctx = new SubpartitionDefinitionContext(_ctx, getState()); + enterRule(_localctx, 108, RULE_subpartitionDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2005); + match(SUBPARTITION); + setState(2006); + uid(); + setState(2010); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==INDEX || ((((_la - 305)) & ~0x3f) == 0 && ((1L << (_la - 305)) & ((1L << (COMMENT - 305)) | (1L << (DATA - 305)) | (1L << (ENGINE - 305)))) != 0) || ((((_la - 428)) & ~0x3f) == 0 && ((1L << (_la - 428)) & ((1L << (MAX_ROWS - 428)) | (1L << (MIN_ROWS - 428)) | (1L << (NODEGROUP - 428)))) != 0) || _la==STORAGE || _la==TABLESPACE) { + { + { + setState(2007); + partitionOption(); + } + } + setState(2012); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PartitionOptionContext extends ParserRuleContext { + public PartitionOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_partitionOption; } + + public PartitionOptionContext() { } + public void copyFrom(PartitionOptionContext ctx) { + super.copyFrom(ctx); + } + } + public static class PartitionOptionCommentContext extends PartitionOptionContext { + public Token comment; + public TerminalNode COMMENT() { return getToken(MySqlParser.COMMENT, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public PartitionOptionCommentContext(PartitionOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionOptionComment(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionOptionComment(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionOptionComment(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionOptionNodeGroupContext extends PartitionOptionContext { + public UidContext nodegroup; + public TerminalNode NODEGROUP() { return getToken(MySqlParser.NODEGROUP, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public PartitionOptionNodeGroupContext(PartitionOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionOptionNodeGroup(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionOptionNodeGroup(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionOptionNodeGroup(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionOptionIndexDirectoryContext extends PartitionOptionContext { + public Token indexDirectory; + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode DIRECTORY() { return getToken(MySqlParser.DIRECTORY, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public PartitionOptionIndexDirectoryContext(PartitionOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionOptionIndexDirectory(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionOptionIndexDirectory(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionOptionIndexDirectory(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionOptionMaxRowsContext extends PartitionOptionContext { + public DecimalLiteralContext maxRows; + public TerminalNode MAX_ROWS() { return getToken(MySqlParser.MAX_ROWS, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public PartitionOptionMaxRowsContext(PartitionOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionOptionMaxRows(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionOptionMaxRows(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionOptionMaxRows(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionOptionTablespaceContext extends PartitionOptionContext { + public UidContext tablespace; + public TerminalNode TABLESPACE() { return getToken(MySqlParser.TABLESPACE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public PartitionOptionTablespaceContext(PartitionOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionOptionTablespace(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionOptionTablespace(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionOptionTablespace(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionOptionEngineContext extends PartitionOptionContext { + public TerminalNode ENGINE() { return getToken(MySqlParser.ENGINE, 0); } + public EngineNameContext engineName() { + return getRuleContext(EngineNameContext.class,0); + } + public TerminalNode STORAGE() { return getToken(MySqlParser.STORAGE, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public PartitionOptionEngineContext(PartitionOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionOptionEngine(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionOptionEngine(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionOptionEngine(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionOptionMinRowsContext extends PartitionOptionContext { + public DecimalLiteralContext minRows; + public TerminalNode MIN_ROWS() { return getToken(MySqlParser.MIN_ROWS, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public PartitionOptionMinRowsContext(PartitionOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionOptionMinRows(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionOptionMinRows(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionOptionMinRows(this); + else return visitor.visitChildren(this); + } + } + public static class PartitionOptionDataDirectoryContext extends PartitionOptionContext { + public Token dataDirectory; + public TerminalNode DATA() { return getToken(MySqlParser.DATA, 0); } + public TerminalNode DIRECTORY() { return getToken(MySqlParser.DIRECTORY, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public PartitionOptionDataDirectoryContext(PartitionOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPartitionOptionDataDirectory(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPartitionOptionDataDirectory(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPartitionOptionDataDirectory(this); + else return visitor.visitChildren(this); + } + } + + public final PartitionOptionContext partitionOption() throws RecognitionException { + PartitionOptionContext _localctx = new PartitionOptionContext(_ctx, getState()); + enterRule(_localctx, 110, RULE_partitionOption); + int _la; + try { + setState(2058); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ENGINE: + case STORAGE: + _localctx = new PartitionOptionEngineContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(2014); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==STORAGE) { + { + setState(2013); + match(STORAGE); + } + } + + setState(2016); + match(ENGINE); + setState(2018); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2017); + match(EQUAL_SYMBOL); + } + } + + setState(2020); + engineName(); + } + break; + case COMMENT: + _localctx = new PartitionOptionCommentContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(2021); + match(COMMENT); + setState(2023); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2022); + match(EQUAL_SYMBOL); + } + } + + setState(2025); + ((PartitionOptionCommentContext)_localctx).comment = match(STRING_LITERAL); + } + break; + case DATA: + _localctx = new PartitionOptionDataDirectoryContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(2026); + match(DATA); + setState(2027); + match(DIRECTORY); + setState(2029); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2028); + match(EQUAL_SYMBOL); + } + } + + setState(2031); + ((PartitionOptionDataDirectoryContext)_localctx).dataDirectory = match(STRING_LITERAL); + } + break; + case INDEX: + _localctx = new PartitionOptionIndexDirectoryContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(2032); + match(INDEX); + setState(2033); + match(DIRECTORY); + setState(2035); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2034); + match(EQUAL_SYMBOL); + } + } + + setState(2037); + ((PartitionOptionIndexDirectoryContext)_localctx).indexDirectory = match(STRING_LITERAL); + } + break; + case MAX_ROWS: + _localctx = new PartitionOptionMaxRowsContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(2038); + match(MAX_ROWS); + setState(2040); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2039); + match(EQUAL_SYMBOL); + } + } + + setState(2042); + ((PartitionOptionMaxRowsContext)_localctx).maxRows = decimalLiteral(); + } + break; + case MIN_ROWS: + _localctx = new PartitionOptionMinRowsContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(2043); + match(MIN_ROWS); + setState(2045); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2044); + match(EQUAL_SYMBOL); + } + } + + setState(2047); + ((PartitionOptionMinRowsContext)_localctx).minRows = decimalLiteral(); + } + break; + case TABLESPACE: + _localctx = new PartitionOptionTablespaceContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(2048); + match(TABLESPACE); + setState(2050); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2049); + match(EQUAL_SYMBOL); + } + } + + setState(2052); + ((PartitionOptionTablespaceContext)_localctx).tablespace = uid(); + } + break; + case NODEGROUP: + _localctx = new PartitionOptionNodeGroupContext(_localctx); + enterOuterAlt(_localctx, 8); + { + setState(2053); + match(NODEGROUP); + setState(2055); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2054); + match(EQUAL_SYMBOL); + } + } + + setState(2057); + ((PartitionOptionNodeGroupContext)_localctx).nodegroup = uid(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlterDatabaseContext extends ParserRuleContext { + public AlterDatabaseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alterDatabase; } + + public AlterDatabaseContext() { } + public void copyFrom(AlterDatabaseContext ctx) { + super.copyFrom(ctx); + } + } + public static class AlterUpgradeNameContext extends AlterDatabaseContext { + public Token dbFormat; + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode UPGRADE() { return getToken(MySqlParser.UPGRADE, 0); } + public TerminalNode DATA() { return getToken(MySqlParser.DATA, 0); } + public TerminalNode DIRECTORY() { return getToken(MySqlParser.DIRECTORY, 0); } + public TerminalNode NAME() { return getToken(MySqlParser.NAME, 0); } + public TerminalNode DATABASE() { return getToken(MySqlParser.DATABASE, 0); } + public TerminalNode SCHEMA() { return getToken(MySqlParser.SCHEMA, 0); } + public AlterUpgradeNameContext(AlterDatabaseContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterUpgradeName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterUpgradeName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterUpgradeName(this); + else return visitor.visitChildren(this); + } + } + public static class AlterSimpleDatabaseContext extends AlterDatabaseContext { + public Token dbFormat; + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode DATABASE() { return getToken(MySqlParser.DATABASE, 0); } + public TerminalNode SCHEMA() { return getToken(MySqlParser.SCHEMA, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public List createDatabaseOption() { + return getRuleContexts(CreateDatabaseOptionContext.class); + } + public CreateDatabaseOptionContext createDatabaseOption(int i) { + return getRuleContext(CreateDatabaseOptionContext.class,i); + } + public AlterSimpleDatabaseContext(AlterDatabaseContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterSimpleDatabase(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterSimpleDatabase(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterSimpleDatabase(this); + else return visitor.visitChildren(this); + } + } + + public final AlterDatabaseContext alterDatabase() throws RecognitionException { + AlterDatabaseContext _localctx = new AlterDatabaseContext(_ctx, getState()); + enterRule(_localctx, 112, RULE_alterDatabase); + int _la; + try { + setState(2078); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,247,_ctx) ) { + case 1: + _localctx = new AlterSimpleDatabaseContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(2060); + match(ALTER); + setState(2061); + ((AlterSimpleDatabaseContext)_localctx).dbFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DATABASE || _la==SCHEMA) ) { + ((AlterSimpleDatabaseContext)_localctx).dbFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2063); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,245,_ctx) ) { + case 1: + { + setState(2062); + uid(); + } + break; + } + setState(2066); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(2065); + createDatabaseOption(); + } + } + setState(2068); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CHARACTER) | (1L << COLLATE) | (1L << DEFAULT))) != 0) || _la==CHARSET ); + } + break; + case 2: + _localctx = new AlterUpgradeNameContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(2070); + match(ALTER); + setState(2071); + ((AlterUpgradeNameContext)_localctx).dbFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DATABASE || _la==SCHEMA) ) { + ((AlterUpgradeNameContext)_localctx).dbFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2072); + uid(); + setState(2073); + match(UPGRADE); + setState(2074); + match(DATA); + setState(2075); + match(DIRECTORY); + setState(2076); + match(NAME); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlterEventContext extends ParserRuleContext { + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode EVENT() { return getToken(MySqlParser.EVENT, 0); } + public List fullId() { + return getRuleContexts(FullIdContext.class); + } + public FullIdContext fullId(int i) { + return getRuleContext(FullIdContext.class,i); + } + public OwnerStatementContext ownerStatement() { + return getRuleContext(OwnerStatementContext.class,0); + } + public List ON() { return getTokens(MySqlParser.ON); } + public TerminalNode ON(int i) { + return getToken(MySqlParser.ON, i); + } + public TerminalNode SCHEDULE() { return getToken(MySqlParser.SCHEDULE, 0); } + public ScheduleExpressionContext scheduleExpression() { + return getRuleContext(ScheduleExpressionContext.class,0); + } + public TerminalNode COMPLETION() { return getToken(MySqlParser.COMPLETION, 0); } + public TerminalNode PRESERVE() { return getToken(MySqlParser.PRESERVE, 0); } + public TerminalNode RENAME() { return getToken(MySqlParser.RENAME, 0); } + public TerminalNode TO() { return getToken(MySqlParser.TO, 0); } + public EnableTypeContext enableType() { + return getRuleContext(EnableTypeContext.class,0); + } + public TerminalNode COMMENT() { return getToken(MySqlParser.COMMENT, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode DO() { return getToken(MySqlParser.DO, 0); } + public RoutineBodyContext routineBody() { + return getRuleContext(RoutineBodyContext.class,0); + } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public AlterEventContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alterEvent; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterEvent(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterEvent(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterEvent(this); + else return visitor.visitChildren(this); + } + } + + public final AlterEventContext alterEvent() throws RecognitionException { + AlterEventContext _localctx = new AlterEventContext(_ctx, getState()); + enterRule(_localctx, 114, RULE_alterEvent); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2080); + match(ALTER); + setState(2082); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFINER) { + { + setState(2081); + ownerStatement(); + } + } + + setState(2084); + match(EVENT); + setState(2085); + fullId(); + setState(2089); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,249,_ctx) ) { + case 1: + { + setState(2086); + match(ON); + setState(2087); + match(SCHEDULE); + setState(2088); + scheduleExpression(); + } + break; + } + setState(2097); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ON) { + { + setState(2091); + match(ON); + setState(2092); + match(COMPLETION); + setState(2094); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(2093); + match(NOT); + } + } + + setState(2096); + match(PRESERVE); + } + } + + setState(2102); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,252,_ctx) ) { + case 1: + { + setState(2099); + match(RENAME); + setState(2100); + match(TO); + setState(2101); + fullId(); + } + break; + } + setState(2105); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DISABLE || _la==ENABLE) { + { + setState(2104); + enableType(); + } + } + + setState(2109); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMENT) { + { + setState(2107); + match(COMMENT); + setState(2108); + match(STRING_LITERAL); + } + } + + setState(2113); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,255,_ctx) ) { + case 1: + { + setState(2111); + match(DO); + setState(2112); + routineBody(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlterFunctionContext extends ParserRuleContext { + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode FUNCTION() { return getToken(MySqlParser.FUNCTION, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public List routineOption() { + return getRuleContexts(RoutineOptionContext.class); + } + public RoutineOptionContext routineOption(int i) { + return getRuleContext(RoutineOptionContext.class,i); + } + public AlterFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alterFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterFunction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterFunction(this); + else return visitor.visitChildren(this); + } + } + + public final AlterFunctionContext alterFunction() throws RecognitionException { + AlterFunctionContext _localctx = new AlterFunctionContext(_ctx, getState()); + enterRule(_localctx, 116, RULE_alterFunction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2115); + match(ALTER); + setState(2116); + match(FUNCTION); + setState(2117); + fullId(); + setState(2121); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==DETERMINISTIC || ((((_la - 100)) & ~0x3f) == 0 && ((1L << (_la - 100)) & ((1L << (MODIFIES - 100)) | (1L << (NOT - 100)) | (1L << (READS - 100)) | (1L << (SQL - 100)))) != 0) || _la==COMMENT || _la==CONTAINS || _la==LANGUAGE || _la==NO) { + { + { + setState(2118); + routineOption(); + } + } + setState(2123); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlterInstanceContext extends ParserRuleContext { + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode INSTANCE() { return getToken(MySqlParser.INSTANCE, 0); } + public TerminalNode ROTATE() { return getToken(MySqlParser.ROTATE, 0); } + public TerminalNode INNODB() { return getToken(MySqlParser.INNODB, 0); } + public TerminalNode MASTER() { return getToken(MySqlParser.MASTER, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public AlterInstanceContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alterInstance; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterInstance(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterInstance(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterInstance(this); + else return visitor.visitChildren(this); + } + } + + public final AlterInstanceContext alterInstance() throws RecognitionException { + AlterInstanceContext _localctx = new AlterInstanceContext(_ctx, getState()); + enterRule(_localctx, 118, RULE_alterInstance); + try { + enterOuterAlt(_localctx, 1); + { + setState(2124); + match(ALTER); + setState(2125); + match(INSTANCE); + setState(2126); + match(ROTATE); + setState(2127); + match(INNODB); + setState(2128); + match(MASTER); + setState(2129); + match(KEY); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlterLogfileGroupContext extends ParserRuleContext { + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode LOGFILE() { return getToken(MySqlParser.LOGFILE, 0); } + public TerminalNode GROUP() { return getToken(MySqlParser.GROUP, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public TerminalNode UNDOFILE() { return getToken(MySqlParser.UNDOFILE, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode ENGINE() { return getToken(MySqlParser.ENGINE, 0); } + public EngineNameContext engineName() { + return getRuleContext(EngineNameContext.class,0); + } + public TerminalNode INITIAL_SIZE() { return getToken(MySqlParser.INITIAL_SIZE, 0); } + public FileSizeLiteralContext fileSizeLiteral() { + return getRuleContext(FileSizeLiteralContext.class,0); + } + public TerminalNode WAIT() { return getToken(MySqlParser.WAIT, 0); } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public AlterLogfileGroupContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alterLogfileGroup; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterLogfileGroup(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterLogfileGroup(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterLogfileGroup(this); + else return visitor.visitChildren(this); + } + } + + public final AlterLogfileGroupContext alterLogfileGroup() throws RecognitionException { + AlterLogfileGroupContext _localctx = new AlterLogfileGroupContext(_ctx, getState()); + enterRule(_localctx, 120, RULE_alterLogfileGroup); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2131); + match(ALTER); + setState(2132); + match(LOGFILE); + setState(2133); + match(GROUP); + setState(2134); + uid(); + setState(2135); + match(ADD); + setState(2136); + match(UNDOFILE); + setState(2137); + match(STRING_LITERAL); + setState(2143); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INITIAL_SIZE) { + { + setState(2138); + match(INITIAL_SIZE); + setState(2140); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2139); + match(EQUAL_SYMBOL); + } + } + + setState(2142); + fileSizeLiteral(); + } + } + + setState(2146); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WAIT) { + { + setState(2145); + match(WAIT); + } + } + + setState(2148); + match(ENGINE); + setState(2150); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2149); + match(EQUAL_SYMBOL); + } + } + + setState(2152); + engineName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlterProcedureContext extends ParserRuleContext { + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode PROCEDURE() { return getToken(MySqlParser.PROCEDURE, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public List routineOption() { + return getRuleContexts(RoutineOptionContext.class); + } + public RoutineOptionContext routineOption(int i) { + return getRuleContext(RoutineOptionContext.class,i); + } + public AlterProcedureContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alterProcedure; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterProcedure(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterProcedure(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterProcedure(this); + else return visitor.visitChildren(this); + } + } + + public final AlterProcedureContext alterProcedure() throws RecognitionException { + AlterProcedureContext _localctx = new AlterProcedureContext(_ctx, getState()); + enterRule(_localctx, 122, RULE_alterProcedure); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2154); + match(ALTER); + setState(2155); + match(PROCEDURE); + setState(2156); + fullId(); + setState(2160); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==DETERMINISTIC || ((((_la - 100)) & ~0x3f) == 0 && ((1L << (_la - 100)) & ((1L << (MODIFIES - 100)) | (1L << (NOT - 100)) | (1L << (READS - 100)) | (1L << (SQL - 100)))) != 0) || _la==COMMENT || _la==CONTAINS || _la==LANGUAGE || _la==NO) { + { + { + setState(2157); + routineOption(); + } + } + setState(2162); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlterServerContext extends ParserRuleContext { + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode SERVER() { return getToken(MySqlParser.SERVER, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode OPTIONS() { return getToken(MySqlParser.OPTIONS, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List serverOption() { + return getRuleContexts(ServerOptionContext.class); + } + public ServerOptionContext serverOption(int i) { + return getRuleContext(ServerOptionContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public AlterServerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alterServer; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterServer(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterServer(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterServer(this); + else return visitor.visitChildren(this); + } + } + + public final AlterServerContext alterServer() throws RecognitionException { + AlterServerContext _localctx = new AlterServerContext(_ctx, getState()); + enterRule(_localctx, 124, RULE_alterServer); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2163); + match(ALTER); + setState(2164); + match(SERVER); + setState(2165); + uid(); + setState(2166); + match(OPTIONS); + setState(2167); + match(LR_BRACKET); + setState(2168); + serverOption(); + setState(2173); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2169); + match(COMMA); + setState(2170); + serverOption(); + } + } + setState(2175); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2176); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlterTableContext extends ParserRuleContext { + public Token intimeAction; + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode IGNORE() { return getToken(MySqlParser.IGNORE, 0); } + public List alterSpecification() { + return getRuleContexts(AlterSpecificationContext.class); + } + public AlterSpecificationContext alterSpecification(int i) { + return getRuleContext(AlterSpecificationContext.class,i); + } + public PartitionDefinitionsContext partitionDefinitions() { + return getRuleContext(PartitionDefinitionsContext.class,0); + } + public TerminalNode ONLINE() { return getToken(MySqlParser.ONLINE, 0); } + public TerminalNode OFFLINE() { return getToken(MySqlParser.OFFLINE, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public AlterTableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alterTable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterTable(this); + else return visitor.visitChildren(this); + } + } + + public final AlterTableContext alterTable() throws RecognitionException { + AlterTableContext _localctx = new AlterTableContext(_ctx, getState()); + enterRule(_localctx, 126, RULE_alterTable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2178); + match(ALTER); + setState(2180); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==OFFLINE || _la==ONLINE) { + { + setState(2179); + ((AlterTableContext)_localctx).intimeAction = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==OFFLINE || _la==ONLINE) ) { + ((AlterTableContext)_localctx).intimeAction = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2183); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IGNORE) { + { + setState(2182); + match(IGNORE); + } + } + + setState(2185); + match(TABLE); + setState(2186); + tableName(); + setState(2195); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,266,_ctx) ) { + case 1: + { + setState(2187); + alterSpecification(); + setState(2192); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2188); + match(COMMA); + setState(2189); + alterSpecification(); + } + } + setState(2194); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + } + setState(2198); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PARTITION) { + { + setState(2197); + partitionDefinitions(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlterTablespaceContext extends ParserRuleContext { + public Token objectAction; + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode TABLESPACE() { return getToken(MySqlParser.TABLESPACE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode DATAFILE() { return getToken(MySqlParser.DATAFILE, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode ENGINE() { return getToken(MySqlParser.ENGINE, 0); } + public EngineNameContext engineName() { + return getRuleContext(EngineNameContext.class,0); + } + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode INITIAL_SIZE() { return getToken(MySqlParser.INITIAL_SIZE, 0); } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public FileSizeLiteralContext fileSizeLiteral() { + return getRuleContext(FileSizeLiteralContext.class,0); + } + public TerminalNode WAIT() { return getToken(MySqlParser.WAIT, 0); } + public AlterTablespaceContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alterTablespace; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterTablespace(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterTablespace(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterTablespace(this); + else return visitor.visitChildren(this); + } + } + + public final AlterTablespaceContext alterTablespace() throws RecognitionException { + AlterTablespaceContext _localctx = new AlterTablespaceContext(_ctx, getState()); + enterRule(_localctx, 128, RULE_alterTablespace); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2200); + match(ALTER); + setState(2201); + match(TABLESPACE); + setState(2202); + uid(); + setState(2203); + ((AlterTablespaceContext)_localctx).objectAction = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ADD || _la==DROP) ) { + ((AlterTablespaceContext)_localctx).objectAction = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2204); + match(DATAFILE); + setState(2205); + match(STRING_LITERAL); + setState(2209); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INITIAL_SIZE) { + { + setState(2206); + match(INITIAL_SIZE); + setState(2207); + match(EQUAL_SYMBOL); + setState(2208); + fileSizeLiteral(); + } + } + + setState(2212); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WAIT) { + { + setState(2211); + match(WAIT); + } + } + + setState(2214); + match(ENGINE); + setState(2216); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2215); + match(EQUAL_SYMBOL); + } + } + + setState(2218); + engineName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlterViewContext extends ParserRuleContext { + public Token algType; + public Token secContext; + public Token checkOpt; + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode VIEW() { return getToken(MySqlParser.VIEW, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public TerminalNode ALGORITHM() { return getToken(MySqlParser.ALGORITHM, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public OwnerStatementContext ownerStatement() { + return getRuleContext(OwnerStatementContext.class,0); + } + public TerminalNode SQL() { return getToken(MySqlParser.SQL, 0); } + public TerminalNode SECURITY() { return getToken(MySqlParser.SECURITY, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public TerminalNode CHECK() { return getToken(MySqlParser.CHECK, 0); } + public TerminalNode OPTION() { return getToken(MySqlParser.OPTION, 0); } + public TerminalNode UNDEFINED() { return getToken(MySqlParser.UNDEFINED, 0); } + public TerminalNode MERGE() { return getToken(MySqlParser.MERGE, 0); } + public TerminalNode TEMPTABLE() { return getToken(MySqlParser.TEMPTABLE, 0); } + public TerminalNode DEFINER() { return getToken(MySqlParser.DEFINER, 0); } + public TerminalNode INVOKER() { return getToken(MySqlParser.INVOKER, 0); } + public TerminalNode CASCADED() { return getToken(MySqlParser.CASCADED, 0); } + public TerminalNode LOCAL() { return getToken(MySqlParser.LOCAL, 0); } + public AlterViewContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alterView; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterView(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterView(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterView(this); + else return visitor.visitChildren(this); + } + } + + public final AlterViewContext alterView() throws RecognitionException { + AlterViewContext _localctx = new AlterViewContext(_ctx, getState()); + enterRule(_localctx, 130, RULE_alterView); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2220); + match(ALTER); + setState(2224); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALGORITHM) { + { + setState(2221); + match(ALGORITHM); + setState(2222); + match(EQUAL_SYMBOL); + setState(2223); + ((AlterViewContext)_localctx).algType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==MERGE || _la==TEMPTABLE || _la==UNDEFINED) ) { + ((AlterViewContext)_localctx).algType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2227); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFINER) { + { + setState(2226); + ownerStatement(); + } + } + + setState(2232); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SQL) { + { + setState(2229); + match(SQL); + setState(2230); + match(SECURITY); + setState(2231); + ((AlterViewContext)_localctx).secContext = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFINER || _la==INVOKER) ) { + ((AlterViewContext)_localctx).secContext = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2234); + match(VIEW); + setState(2235); + fullId(); + setState(2240); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LR_BRACKET) { + { + setState(2236); + match(LR_BRACKET); + setState(2237); + uidList(); + setState(2238); + match(RR_BRACKET); + } + } + + setState(2242); + match(AS); + setState(2243); + selectStatement(); + setState(2250); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WITH) { + { + setState(2244); + match(WITH); + setState(2246); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CASCADED || _la==LOCAL) { + { + setState(2245); + ((AlterViewContext)_localctx).checkOpt = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==CASCADED || _la==LOCAL) ) { + ((AlterViewContext)_localctx).checkOpt = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2248); + match(CHECK); + setState(2249); + match(OPTION); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlterSpecificationContext extends ParserRuleContext { + public AlterSpecificationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alterSpecification; } + + public AlterSpecificationContext() { } + public void copyFrom(AlterSpecificationContext ctx) { + super.copyFrom(ctx); + } + } + public static class AlterByDisableKeysContext extends AlterSpecificationContext { + public TerminalNode DISABLE() { return getToken(MySqlParser.DISABLE, 0); } + public TerminalNode KEYS() { return getToken(MySqlParser.KEYS, 0); } + public AlterByDisableKeysContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByDisableKeys(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByDisableKeys(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByDisableKeys(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByDefaultCharsetContext extends AlterSpecificationContext { + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public TerminalNode COLLATE() { return getToken(MySqlParser.COLLATE, 0); } + public CollationNameContext collationName() { + return getRuleContext(CollationNameContext.class,0); + } + public AlterByDefaultCharsetContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByDefaultCharset(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByDefaultCharset(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByDefaultCharset(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByRenameColumnContext extends AlterSpecificationContext { + public UidContext oldColumn; + public UidContext newColumn; + public TerminalNode RENAME() { return getToken(MySqlParser.RENAME, 0); } + public TerminalNode COLUMN() { return getToken(MySqlParser.COLUMN, 0); } + public TerminalNode TO() { return getToken(MySqlParser.TO, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public AlterByRenameColumnContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByRenameColumn(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByRenameColumn(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByRenameColumn(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByConvertCharsetContext extends AlterSpecificationContext { + public TerminalNode CONVERT() { return getToken(MySqlParser.CONVERT, 0); } + public TerminalNode TO() { return getToken(MySqlParser.TO, 0); } + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public TerminalNode COLLATE() { return getToken(MySqlParser.COLLATE, 0); } + public CollationNameContext collationName() { + return getRuleContext(CollationNameContext.class,0); + } + public AlterByConvertCharsetContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByConvertCharset(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByConvertCharset(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByConvertCharset(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByAddPartitionContext extends AlterSpecificationContext { + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List partitionDefinition() { + return getRuleContexts(PartitionDefinitionContext.class); + } + public PartitionDefinitionContext partitionDefinition(int i) { + return getRuleContext(PartitionDefinitionContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public AlterByAddPartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByAddPartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByAddPartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByAddPartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByAddForeignKeyContext extends AlterSpecificationContext { + public UidContext name; + public UidContext indexName; + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public TerminalNode FOREIGN() { return getToken(MySqlParser.FOREIGN, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public IndexColumnNamesContext indexColumnNames() { + return getRuleContext(IndexColumnNamesContext.class,0); + } + public ReferenceDefinitionContext referenceDefinition() { + return getRuleContext(ReferenceDefinitionContext.class,0); + } + public TerminalNode CONSTRAINT() { return getToken(MySqlParser.CONSTRAINT, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public AlterByAddForeignKeyContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByAddForeignKey(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByAddForeignKey(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByAddForeignKey(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByRenameIndexContext extends AlterSpecificationContext { + public Token indexFormat; + public TerminalNode RENAME() { return getToken(MySqlParser.RENAME, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public TerminalNode TO() { return getToken(MySqlParser.TO, 0); } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public AlterByRenameIndexContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByRenameIndex(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByRenameIndex(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByRenameIndex(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByRemovePartitioningContext extends AlterSpecificationContext { + public TerminalNode REMOVE() { return getToken(MySqlParser.REMOVE, 0); } + public TerminalNode PARTITIONING() { return getToken(MySqlParser.PARTITIONING, 0); } + public AlterByRemovePartitioningContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByRemovePartitioning(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByRemovePartitioning(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByRemovePartitioning(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByRenameContext extends AlterSpecificationContext { + public Token renameFormat; + public TerminalNode RENAME() { return getToken(MySqlParser.RENAME, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public TerminalNode TO() { return getToken(MySqlParser.TO, 0); } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public AlterByRenameContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByRename(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByRename(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByRename(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByOptimizePartitionContext extends AlterSpecificationContext { + public TerminalNode OPTIMIZE() { return getToken(MySqlParser.OPTIMIZE, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public AlterByOptimizePartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByOptimizePartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByOptimizePartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByOptimizePartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByImportTablespaceContext extends AlterSpecificationContext { + public TerminalNode IMPORT() { return getToken(MySqlParser.IMPORT, 0); } + public TerminalNode TABLESPACE() { return getToken(MySqlParser.TABLESPACE, 0); } + public AlterByImportTablespaceContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByImportTablespace(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByImportTablespace(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByImportTablespace(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByCoalescePartitionContext extends AlterSpecificationContext { + public TerminalNode COALESCE() { return getToken(MySqlParser.COALESCE, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public AlterByCoalescePartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByCoalescePartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByCoalescePartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByCoalescePartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByAddColumnsContext extends AlterSpecificationContext { + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public List columnDefinition() { + return getRuleContexts(ColumnDefinitionContext.class); + } + public ColumnDefinitionContext columnDefinition(int i) { + return getRuleContext(ColumnDefinitionContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode COLUMN() { return getToken(MySqlParser.COLUMN, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public AlterByAddColumnsContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByAddColumns(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByAddColumns(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByAddColumns(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByDropForeignKeyContext extends AlterSpecificationContext { + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode FOREIGN() { return getToken(MySqlParser.FOREIGN, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public AlterByDropForeignKeyContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByDropForeignKey(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByDropForeignKey(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByDropForeignKey(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByAddCheckTableConstraintContext extends AlterSpecificationContext { + public UidContext name; + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public TerminalNode CHECK() { return getToken(MySqlParser.CHECK, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode CONSTRAINT() { return getToken(MySqlParser.CONSTRAINT, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public AlterByAddCheckTableConstraintContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByAddCheckTableConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByAddCheckTableConstraint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByAddCheckTableConstraint(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByRebuildPartitionContext extends AlterSpecificationContext { + public TerminalNode REBUILD() { return getToken(MySqlParser.REBUILD, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public AlterByRebuildPartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByRebuildPartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByRebuildPartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByRebuildPartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByUpgradePartitioningContext extends AlterSpecificationContext { + public TerminalNode UPGRADE() { return getToken(MySqlParser.UPGRADE, 0); } + public TerminalNode PARTITIONING() { return getToken(MySqlParser.PARTITIONING, 0); } + public AlterByUpgradePartitioningContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByUpgradePartitioning(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByUpgradePartitioning(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByUpgradePartitioning(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByRepairPartitionContext extends AlterSpecificationContext { + public TerminalNode REPAIR() { return getToken(MySqlParser.REPAIR, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public AlterByRepairPartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByRepairPartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByRepairPartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByRepairPartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByExchangePartitionContext extends AlterSpecificationContext { + public Token validationFormat; + public TerminalNode EXCHANGE() { return getToken(MySqlParser.EXCHANGE, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public List WITH() { return getTokens(MySqlParser.WITH); } + public TerminalNode WITH(int i) { + return getToken(MySqlParser.WITH, i); + } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode VALIDATION() { return getToken(MySqlParser.VALIDATION, 0); } + public TerminalNode WITHOUT() { return getToken(MySqlParser.WITHOUT, 0); } + public AlterByExchangePartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByExchangePartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByExchangePartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByExchangePartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByAddIndexContext extends AlterSpecificationContext { + public Token indexFormat; + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public IndexColumnNamesContext indexColumnNames() { + return getRuleContext(IndexColumnNamesContext.class,0); + } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public IndexTypeContext indexType() { + return getRuleContext(IndexTypeContext.class,0); + } + public List indexOption() { + return getRuleContexts(IndexOptionContext.class); + } + public IndexOptionContext indexOption(int i) { + return getRuleContext(IndexOptionContext.class,i); + } + public AlterByAddIndexContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByAddIndex(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByAddIndex(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByAddIndex(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByDropColumnContext extends AlterSpecificationContext { + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode COLUMN() { return getToken(MySqlParser.COLUMN, 0); } + public TerminalNode RESTRICT() { return getToken(MySqlParser.RESTRICT, 0); } + public AlterByDropColumnContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByDropColumn(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByDropColumn(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByDropColumn(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByImportPartitionContext extends AlterSpecificationContext { + public TerminalNode IMPORT() { return getToken(MySqlParser.IMPORT, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public TerminalNode TABLESPACE() { return getToken(MySqlParser.TABLESPACE, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public AlterByImportPartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByImportPartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByImportPartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByImportPartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByChangeDefaultContext extends AlterSpecificationContext { + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public DefaultValueContext defaultValue() { + return getRuleContext(DefaultValueContext.class,0); + } + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode COLUMN() { return getToken(MySqlParser.COLUMN, 0); } + public AlterByChangeDefaultContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByChangeDefault(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByChangeDefault(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByChangeDefault(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByForceContext extends AlterSpecificationContext { + public TerminalNode FORCE() { return getToken(MySqlParser.FORCE, 0); } + public AlterByForceContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByForce(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByForce(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByForce(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByDropPartitionContext extends AlterSpecificationContext { + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public AlterByDropPartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByDropPartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByDropPartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByDropPartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByAddSpecialIndexContext extends AlterSpecificationContext { + public Token keyType; + public Token indexFormat; + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public IndexColumnNamesContext indexColumnNames() { + return getRuleContext(IndexColumnNamesContext.class,0); + } + public TerminalNode FULLTEXT() { return getToken(MySqlParser.FULLTEXT, 0); } + public TerminalNode SPATIAL() { return getToken(MySqlParser.SPATIAL, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public List indexOption() { + return getRuleContexts(IndexOptionContext.class); + } + public IndexOptionContext indexOption(int i) { + return getRuleContext(IndexOptionContext.class,i); + } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public AlterByAddSpecialIndexContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByAddSpecialIndex(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByAddSpecialIndex(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByAddSpecialIndex(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByModifyColumnContext extends AlterSpecificationContext { + public TerminalNode MODIFY() { return getToken(MySqlParser.MODIFY, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public ColumnDefinitionContext columnDefinition() { + return getRuleContext(ColumnDefinitionContext.class,0); + } + public TerminalNode COLUMN() { return getToken(MySqlParser.COLUMN, 0); } + public TerminalNode FIRST() { return getToken(MySqlParser.FIRST, 0); } + public TerminalNode AFTER() { return getToken(MySqlParser.AFTER, 0); } + public AlterByModifyColumnContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByModifyColumn(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByModifyColumn(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByModifyColumn(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByTableOptionContext extends AlterSpecificationContext { + public List tableOption() { + return getRuleContexts(TableOptionContext.class); + } + public TableOptionContext tableOption(int i) { + return getRuleContext(TableOptionContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public AlterByTableOptionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByTableOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByTableOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByTableOption(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByDropPrimaryKeyContext extends AlterSpecificationContext { + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode PRIMARY() { return getToken(MySqlParser.PRIMARY, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public AlterByDropPrimaryKeyContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByDropPrimaryKey(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByDropPrimaryKey(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByDropPrimaryKey(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByLockContext extends AlterSpecificationContext { + public Token lockType; + public TerminalNode LOCK() { return getToken(MySqlParser.LOCK, 0); } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public TerminalNode NONE() { return getToken(MySqlParser.NONE, 0); } + public TerminalNode SHARED() { return getToken(MySqlParser.SHARED, 0); } + public TerminalNode EXCLUSIVE() { return getToken(MySqlParser.EXCLUSIVE, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public AlterByLockContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByLock(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByLock(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByLock(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByDiscardPartitionContext extends AlterSpecificationContext { + public TerminalNode DISCARD() { return getToken(MySqlParser.DISCARD, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public TerminalNode TABLESPACE() { return getToken(MySqlParser.TABLESPACE, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public AlterByDiscardPartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByDiscardPartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByDiscardPartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByDiscardPartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByDiscardTablespaceContext extends AlterSpecificationContext { + public TerminalNode DISCARD() { return getToken(MySqlParser.DISCARD, 0); } + public TerminalNode TABLESPACE() { return getToken(MySqlParser.TABLESPACE, 0); } + public AlterByDiscardTablespaceContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByDiscardTablespace(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByDiscardTablespace(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByDiscardTablespace(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByValidateContext extends AlterSpecificationContext { + public Token validationFormat; + public TerminalNode VALIDATION() { return getToken(MySqlParser.VALIDATION, 0); } + public TerminalNode WITHOUT() { return getToken(MySqlParser.WITHOUT, 0); } + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public AlterByValidateContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByValidate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByValidate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByValidate(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByAddPrimaryKeyContext extends AlterSpecificationContext { + public UidContext name; + public UidContext index; + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public TerminalNode PRIMARY() { return getToken(MySqlParser.PRIMARY, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public IndexColumnNamesContext indexColumnNames() { + return getRuleContext(IndexColumnNamesContext.class,0); + } + public TerminalNode CONSTRAINT() { return getToken(MySqlParser.CONSTRAINT, 0); } + public IndexTypeContext indexType() { + return getRuleContext(IndexTypeContext.class,0); + } + public List indexOption() { + return getRuleContexts(IndexOptionContext.class); + } + public IndexOptionContext indexOption(int i) { + return getRuleContext(IndexOptionContext.class,i); + } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public AlterByAddPrimaryKeyContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByAddPrimaryKey(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByAddPrimaryKey(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByAddPrimaryKey(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByCheckPartitionContext extends AlterSpecificationContext { + public TerminalNode CHECK() { return getToken(MySqlParser.CHECK, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public AlterByCheckPartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByCheckPartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByCheckPartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByCheckPartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByEnableKeysContext extends AlterSpecificationContext { + public TerminalNode ENABLE() { return getToken(MySqlParser.ENABLE, 0); } + public TerminalNode KEYS() { return getToken(MySqlParser.KEYS, 0); } + public AlterByEnableKeysContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByEnableKeys(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByEnableKeys(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByEnableKeys(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByReorganizePartitionContext extends AlterSpecificationContext { + public TerminalNode REORGANIZE() { return getToken(MySqlParser.REORGANIZE, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode INTO() { return getToken(MySqlParser.INTO, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List partitionDefinition() { + return getRuleContexts(PartitionDefinitionContext.class); + } + public PartitionDefinitionContext partitionDefinition(int i) { + return getRuleContext(PartitionDefinitionContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public AlterByReorganizePartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByReorganizePartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByReorganizePartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByReorganizePartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterBySetAlgorithmContext extends AlterSpecificationContext { + public Token algType; + public TerminalNode ALGORITHM() { return getToken(MySqlParser.ALGORITHM, 0); } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public TerminalNode INPLACE() { return getToken(MySqlParser.INPLACE, 0); } + public TerminalNode COPY() { return getToken(MySqlParser.COPY, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public AlterBySetAlgorithmContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterBySetAlgorithm(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterBySetAlgorithm(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterBySetAlgorithm(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByAnalyzePartitionContext extends AlterSpecificationContext { + public TerminalNode ANALYZE() { return getToken(MySqlParser.ANALYZE, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public AlterByAnalyzePartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByAnalyzePartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByAnalyzePartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByAnalyzePartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByChangeColumnContext extends AlterSpecificationContext { + public UidContext oldColumn; + public UidContext newColumn; + public UidContext afterColumn; + public TerminalNode CHANGE() { return getToken(MySqlParser.CHANGE, 0); } + public ColumnDefinitionContext columnDefinition() { + return getRuleContext(ColumnDefinitionContext.class,0); + } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public TerminalNode COLUMN() { return getToken(MySqlParser.COLUMN, 0); } + public TerminalNode FIRST() { return getToken(MySqlParser.FIRST, 0); } + public TerminalNode AFTER() { return getToken(MySqlParser.AFTER, 0); } + public AlterByChangeColumnContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByChangeColumn(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByChangeColumn(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByChangeColumn(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByAddUniqueKeyContext extends AlterSpecificationContext { + public UidContext name; + public Token indexFormat; + public UidContext indexName; + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public TerminalNode UNIQUE() { return getToken(MySqlParser.UNIQUE, 0); } + public IndexColumnNamesContext indexColumnNames() { + return getRuleContext(IndexColumnNamesContext.class,0); + } + public TerminalNode CONSTRAINT() { return getToken(MySqlParser.CONSTRAINT, 0); } + public IndexTypeContext indexType() { + return getRuleContext(IndexTypeContext.class,0); + } + public List indexOption() { + return getRuleContexts(IndexOptionContext.class); + } + public IndexOptionContext indexOption(int i) { + return getRuleContext(IndexOptionContext.class,i); + } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public AlterByAddUniqueKeyContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByAddUniqueKey(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByAddUniqueKey(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByAddUniqueKey(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByTruncatePartitionContext extends AlterSpecificationContext { + public TerminalNode TRUNCATE() { return getToken(MySqlParser.TRUNCATE, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public AlterByTruncatePartitionContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByTruncatePartition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByTruncatePartition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByTruncatePartition(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByDropIndexContext extends AlterSpecificationContext { + public Token indexFormat; + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public AlterByDropIndexContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByDropIndex(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByDropIndex(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByDropIndex(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByAddColumnContext extends AlterSpecificationContext { + public TerminalNode ADD() { return getToken(MySqlParser.ADD, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public ColumnDefinitionContext columnDefinition() { + return getRuleContext(ColumnDefinitionContext.class,0); + } + public TerminalNode COLUMN() { return getToken(MySqlParser.COLUMN, 0); } + public TerminalNode FIRST() { return getToken(MySqlParser.FIRST, 0); } + public TerminalNode AFTER() { return getToken(MySqlParser.AFTER, 0); } + public AlterByAddColumnContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByAddColumn(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByAddColumn(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByAddColumn(this); + else return visitor.visitChildren(this); + } + } + public static class AlterByOrderContext extends AlterSpecificationContext { + public TerminalNode ORDER() { return getToken(MySqlParser.ORDER, 0); } + public TerminalNode BY() { return getToken(MySqlParser.BY, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public AlterByOrderContext(AlterSpecificationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterByOrder(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterByOrder(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterByOrder(this); + else return visitor.visitChildren(this); + } + } + + public final AlterSpecificationContext alterSpecification() throws RecognitionException { + AlterSpecificationContext _localctx = new AlterSpecificationContext(_ctx, getState()); + enterRule(_localctx, 132, RULE_alterSpecification); + int _la; + try { + int _alt; + setState(2610); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,331,_ctx) ) { + case 1: + _localctx = new AlterByTableOptionContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(2252); + tableOption(); + setState(2259); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,278,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2254); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(2253); + match(COMMA); + } + } + + setState(2256); + tableOption(); + } + } + } + setState(2261); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,278,_ctx); + } + } + break; + case 2: + _localctx = new AlterByAddColumnContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(2262); + match(ADD); + setState(2264); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLUMN) { + { + setState(2263); + match(COLUMN); + } + } + + setState(2266); + uid(); + setState(2267); + columnDefinition(); + setState(2271); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FIRST: + { + setState(2268); + match(FIRST); + } + break; + case AFTER: + { + setState(2269); + match(AFTER); + setState(2270); + uid(); + } + break; + case EOF: + case ALTER: + case ANALYZE: + case CALL: + case CHANGE: + case CHECK: + case CREATE: + case DELETE: + case DESC: + case DESCRIBE: + case DROP: + case EXPLAIN: + case GET: + case GRANT: + case INSERT: + case KILL: + case LOAD: + case LOCK: + case OPTIMIZE: + case PARTITION: + case PURGE: + case RELEASE: + case RENAME: + case REPLACE: + case RESIGNAL: + case REVOKE: + case SELECT: + case SET: + case SHOW: + case SIGNAL: + case UNLOCK: + case UPDATE: + case USE: + case BEGIN: + case BINLOG: + case CACHE: + case CHECKSUM: + case COMMIT: + case DEALLOCATE: + case DO: + case FLUSH: + case HANDLER: + case HELP: + case INSTALL: + case PREPARE: + case REPAIR: + case RESET: + case ROLLBACK: + case SAVEPOINT: + case START: + case STOP: + case TRUNCATE: + case UNINSTALL: + case XA: + case EXECUTE: + case SHUTDOWN: + case MINUSMINUS: + case LR_BRACKET: + case COMMA: + case SEMI: + break; + default: + break; + } + } + break; + case 3: + _localctx = new AlterByAddColumnsContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(2273); + match(ADD); + setState(2275); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLUMN) { + { + setState(2274); + match(COLUMN); + } + } + + setState(2277); + match(LR_BRACKET); + setState(2278); + uid(); + setState(2279); + columnDefinition(); + setState(2286); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2280); + match(COMMA); + setState(2281); + uid(); + setState(2282); + columnDefinition(); + } + } + setState(2288); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2289); + match(RR_BRACKET); + } + break; + case 4: + _localctx = new AlterByAddIndexContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(2291); + match(ADD); + setState(2292); + ((AlterByAddIndexContext)_localctx).indexFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==INDEX || _la==KEY) ) { + ((AlterByAddIndexContext)_localctx).indexFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2294); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(2293); + uid(); + } + } + + setState(2297); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==USING) { + { + setState(2296); + indexType(); + } + } + + setState(2299); + indexColumnNames(); + setState(2303); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==USING || _la==WITH || _la==COMMENT || _la==INVISIBLE || _la==KEY_BLOCK_SIZE || _la==VISIBLE) { + { + { + setState(2300); + indexOption(); + } + } + setState(2305); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 5: + _localctx = new AlterByAddPrimaryKeyContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(2306); + match(ADD); + setState(2311); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CONSTRAINT) { + { + setState(2307); + match(CONSTRAINT); + setState(2309); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(2308); + ((AlterByAddPrimaryKeyContext)_localctx).name = uid(); + } + } + + } + } + + setState(2313); + match(PRIMARY); + setState(2314); + match(KEY); + setState(2316); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(2315); + ((AlterByAddPrimaryKeyContext)_localctx).index = uid(); + } + } + + setState(2319); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==USING) { + { + setState(2318); + indexType(); + } + } + + setState(2321); + indexColumnNames(); + setState(2325); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==USING || _la==WITH || _la==COMMENT || _la==INVISIBLE || _la==KEY_BLOCK_SIZE || _la==VISIBLE) { + { + { + setState(2322); + indexOption(); + } + } + setState(2327); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 6: + _localctx = new AlterByAddUniqueKeyContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(2328); + match(ADD); + setState(2333); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CONSTRAINT) { + { + setState(2329); + match(CONSTRAINT); + setState(2331); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(2330); + ((AlterByAddUniqueKeyContext)_localctx).name = uid(); + } + } + + } + } + + setState(2335); + match(UNIQUE); + setState(2337); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INDEX || _la==KEY) { + { + setState(2336); + ((AlterByAddUniqueKeyContext)_localctx).indexFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==INDEX || _la==KEY) ) { + ((AlterByAddUniqueKeyContext)_localctx).indexFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2340); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(2339); + ((AlterByAddUniqueKeyContext)_localctx).indexName = uid(); + } + } + + setState(2343); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==USING) { + { + setState(2342); + indexType(); + } + } + + setState(2345); + indexColumnNames(); + setState(2349); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==USING || _la==WITH || _la==COMMENT || _la==INVISIBLE || _la==KEY_BLOCK_SIZE || _la==VISIBLE) { + { + { + setState(2346); + indexOption(); + } + } + setState(2351); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 7: + _localctx = new AlterByAddSpecialIndexContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(2352); + match(ADD); + setState(2353); + ((AlterByAddSpecialIndexContext)_localctx).keyType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FULLTEXT || _la==SPATIAL) ) { + ((AlterByAddSpecialIndexContext)_localctx).keyType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2355); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INDEX || _la==KEY) { + { + setState(2354); + ((AlterByAddSpecialIndexContext)_localctx).indexFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==INDEX || _la==KEY) ) { + ((AlterByAddSpecialIndexContext)_localctx).indexFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2358); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(2357); + uid(); + } + } + + setState(2360); + indexColumnNames(); + setState(2364); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==USING || _la==WITH || _la==COMMENT || _la==INVISIBLE || _la==KEY_BLOCK_SIZE || _la==VISIBLE) { + { + { + setState(2361); + indexOption(); + } + } + setState(2366); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 8: + _localctx = new AlterByAddForeignKeyContext(_localctx); + enterOuterAlt(_localctx, 8); + { + setState(2367); + match(ADD); + setState(2372); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CONSTRAINT) { + { + setState(2368); + match(CONSTRAINT); + setState(2370); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(2369); + ((AlterByAddForeignKeyContext)_localctx).name = uid(); + } + } + + } + } + + setState(2374); + match(FOREIGN); + setState(2375); + match(KEY); + setState(2377); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(2376); + ((AlterByAddForeignKeyContext)_localctx).indexName = uid(); + } + } + + setState(2379); + indexColumnNames(); + setState(2380); + referenceDefinition(); + } + break; + case 9: + _localctx = new AlterByAddCheckTableConstraintContext(_localctx); + enterOuterAlt(_localctx, 9); + { + setState(2382); + match(ADD); + setState(2387); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CONSTRAINT) { + { + setState(2383); + match(CONSTRAINT); + setState(2385); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(2384); + ((AlterByAddCheckTableConstraintContext)_localctx).name = uid(); + } + } + + } + } + + setState(2389); + match(CHECK); + setState(2390); + match(LR_BRACKET); + setState(2391); + expression(0); + setState(2392); + match(RR_BRACKET); + } + break; + case 10: + _localctx = new AlterBySetAlgorithmContext(_localctx); + enterOuterAlt(_localctx, 10); + { + setState(2394); + match(ALGORITHM); + setState(2396); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2395); + match(EQUAL_SYMBOL); + } + } + + setState(2398); + ((AlterBySetAlgorithmContext)_localctx).algType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFAULT || _la==COPY || _la==INPLACE) ) { + ((AlterBySetAlgorithmContext)_localctx).algType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 11: + _localctx = new AlterByChangeDefaultContext(_localctx); + enterOuterAlt(_localctx, 11); + { + setState(2399); + match(ALTER); + setState(2401); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLUMN) { + { + setState(2400); + match(COLUMN); + } + } + + setState(2403); + uid(); + setState(2409); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SET: + { + setState(2404); + match(SET); + setState(2405); + match(DEFAULT); + setState(2406); + defaultValue(); + } + break; + case DROP: + { + setState(2407); + match(DROP); + setState(2408); + match(DEFAULT); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 12: + _localctx = new AlterByChangeColumnContext(_localctx); + enterOuterAlt(_localctx, 12); + { + setState(2411); + match(CHANGE); + setState(2413); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLUMN) { + { + setState(2412); + match(COLUMN); + } + } + + setState(2415); + ((AlterByChangeColumnContext)_localctx).oldColumn = uid(); + setState(2416); + ((AlterByChangeColumnContext)_localctx).newColumn = uid(); + setState(2417); + columnDefinition(); + setState(2421); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FIRST: + { + setState(2418); + match(FIRST); + } + break; + case AFTER: + { + setState(2419); + match(AFTER); + setState(2420); + ((AlterByChangeColumnContext)_localctx).afterColumn = uid(); + } + break; + case EOF: + case ALTER: + case ANALYZE: + case CALL: + case CHANGE: + case CHECK: + case CREATE: + case DELETE: + case DESC: + case DESCRIBE: + case DROP: + case EXPLAIN: + case GET: + case GRANT: + case INSERT: + case KILL: + case LOAD: + case LOCK: + case OPTIMIZE: + case PARTITION: + case PURGE: + case RELEASE: + case RENAME: + case REPLACE: + case RESIGNAL: + case REVOKE: + case SELECT: + case SET: + case SHOW: + case SIGNAL: + case UNLOCK: + case UPDATE: + case USE: + case BEGIN: + case BINLOG: + case CACHE: + case CHECKSUM: + case COMMIT: + case DEALLOCATE: + case DO: + case FLUSH: + case HANDLER: + case HELP: + case INSTALL: + case PREPARE: + case REPAIR: + case RESET: + case ROLLBACK: + case SAVEPOINT: + case START: + case STOP: + case TRUNCATE: + case UNINSTALL: + case XA: + case EXECUTE: + case SHUTDOWN: + case MINUSMINUS: + case LR_BRACKET: + case COMMA: + case SEMI: + break; + default: + break; + } + } + break; + case 13: + _localctx = new AlterByRenameColumnContext(_localctx); + enterOuterAlt(_localctx, 13); + { + setState(2423); + match(RENAME); + setState(2424); + match(COLUMN); + setState(2425); + ((AlterByRenameColumnContext)_localctx).oldColumn = uid(); + setState(2426); + match(TO); + setState(2427); + ((AlterByRenameColumnContext)_localctx).newColumn = uid(); + } + break; + case 14: + _localctx = new AlterByLockContext(_localctx); + enterOuterAlt(_localctx, 14); + { + setState(2429); + match(LOCK); + setState(2431); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2430); + match(EQUAL_SYMBOL); + } + } + + setState(2433); + ((AlterByLockContext)_localctx).lockType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFAULT || _la==EXCLUSIVE || _la==NONE || _la==SHARED) ) { + ((AlterByLockContext)_localctx).lockType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 15: + _localctx = new AlterByModifyColumnContext(_localctx); + enterOuterAlt(_localctx, 15); + { + setState(2434); + match(MODIFY); + setState(2436); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLUMN) { + { + setState(2435); + match(COLUMN); + } + } + + setState(2438); + uid(); + setState(2439); + columnDefinition(); + setState(2443); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FIRST: + { + setState(2440); + match(FIRST); + } + break; + case AFTER: + { + setState(2441); + match(AFTER); + setState(2442); + uid(); + } + break; + case EOF: + case ALTER: + case ANALYZE: + case CALL: + case CHANGE: + case CHECK: + case CREATE: + case DELETE: + case DESC: + case DESCRIBE: + case DROP: + case EXPLAIN: + case GET: + case GRANT: + case INSERT: + case KILL: + case LOAD: + case LOCK: + case OPTIMIZE: + case PARTITION: + case PURGE: + case RELEASE: + case RENAME: + case REPLACE: + case RESIGNAL: + case REVOKE: + case SELECT: + case SET: + case SHOW: + case SIGNAL: + case UNLOCK: + case UPDATE: + case USE: + case BEGIN: + case BINLOG: + case CACHE: + case CHECKSUM: + case COMMIT: + case DEALLOCATE: + case DO: + case FLUSH: + case HANDLER: + case HELP: + case INSTALL: + case PREPARE: + case REPAIR: + case RESET: + case ROLLBACK: + case SAVEPOINT: + case START: + case STOP: + case TRUNCATE: + case UNINSTALL: + case XA: + case EXECUTE: + case SHUTDOWN: + case MINUSMINUS: + case LR_BRACKET: + case COMMA: + case SEMI: + break; + default: + break; + } + } + break; + case 16: + _localctx = new AlterByDropColumnContext(_localctx); + enterOuterAlt(_localctx, 16); + { + setState(2445); + match(DROP); + setState(2447); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLUMN) { + { + setState(2446); + match(COLUMN); + } + } + + setState(2449); + uid(); + setState(2451); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==RESTRICT) { + { + setState(2450); + match(RESTRICT); + } + } + + } + break; + case 17: + _localctx = new AlterByDropPrimaryKeyContext(_localctx); + enterOuterAlt(_localctx, 17); + { + setState(2453); + match(DROP); + setState(2454); + match(PRIMARY); + setState(2455); + match(KEY); + } + break; + case 18: + _localctx = new AlterByRenameIndexContext(_localctx); + enterOuterAlt(_localctx, 18); + { + setState(2456); + match(RENAME); + setState(2457); + ((AlterByRenameIndexContext)_localctx).indexFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==INDEX || _la==KEY) ) { + ((AlterByRenameIndexContext)_localctx).indexFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2458); + uid(); + setState(2459); + match(TO); + setState(2460); + uid(); + } + break; + case 19: + _localctx = new AlterByDropIndexContext(_localctx); + enterOuterAlt(_localctx, 19); + { + setState(2462); + match(DROP); + setState(2463); + ((AlterByDropIndexContext)_localctx).indexFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==INDEX || _la==KEY) ) { + ((AlterByDropIndexContext)_localctx).indexFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2464); + uid(); + } + break; + case 20: + _localctx = new AlterByDropForeignKeyContext(_localctx); + enterOuterAlt(_localctx, 20); + { + setState(2465); + match(DROP); + setState(2466); + match(FOREIGN); + setState(2467); + match(KEY); + setState(2468); + uid(); + } + break; + case 21: + _localctx = new AlterByDisableKeysContext(_localctx); + enterOuterAlt(_localctx, 21); + { + setState(2469); + match(DISABLE); + setState(2470); + match(KEYS); + } + break; + case 22: + _localctx = new AlterByEnableKeysContext(_localctx); + enterOuterAlt(_localctx, 22); + { + setState(2471); + match(ENABLE); + setState(2472); + match(KEYS); + } + break; + case 23: + _localctx = new AlterByRenameContext(_localctx); + enterOuterAlt(_localctx, 23); + { + setState(2473); + match(RENAME); + setState(2475); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS || _la==TO) { + { + setState(2474); + ((AlterByRenameContext)_localctx).renameFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==AS || _la==TO) ) { + ((AlterByRenameContext)_localctx).renameFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2479); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,316,_ctx) ) { + case 1: + { + setState(2477); + uid(); + } + break; + case 2: + { + setState(2478); + fullId(); + } + break; + } + } + break; + case 24: + _localctx = new AlterByOrderContext(_localctx); + enterOuterAlt(_localctx, 24); + { + setState(2481); + match(ORDER); + setState(2482); + match(BY); + setState(2483); + uidList(); + } + break; + case 25: + _localctx = new AlterByConvertCharsetContext(_localctx); + enterOuterAlt(_localctx, 25); + { + setState(2484); + match(CONVERT); + setState(2485); + match(TO); + setState(2486); + match(CHARACTER); + setState(2487); + match(SET); + setState(2488); + charsetName(); + setState(2491); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLLATE) { + { + setState(2489); + match(COLLATE); + setState(2490); + collationName(); + } + } + + } + break; + case 26: + _localctx = new AlterByDefaultCharsetContext(_localctx); + enterOuterAlt(_localctx, 26); + { + setState(2494); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFAULT) { + { + setState(2493); + match(DEFAULT); + } + } + + setState(2496); + match(CHARACTER); + setState(2497); + match(SET); + setState(2498); + match(EQUAL_SYMBOL); + setState(2499); + charsetName(); + setState(2503); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLLATE) { + { + setState(2500); + match(COLLATE); + setState(2501); + match(EQUAL_SYMBOL); + setState(2502); + collationName(); + } + } + + } + break; + case 27: + _localctx = new AlterByDiscardTablespaceContext(_localctx); + enterOuterAlt(_localctx, 27); + { + setState(2505); + match(DISCARD); + setState(2506); + match(TABLESPACE); + } + break; + case 28: + _localctx = new AlterByImportTablespaceContext(_localctx); + enterOuterAlt(_localctx, 28); + { + setState(2507); + match(IMPORT); + setState(2508); + match(TABLESPACE); + } + break; + case 29: + _localctx = new AlterByForceContext(_localctx); + enterOuterAlt(_localctx, 29); + { + setState(2509); + match(FORCE); + } + break; + case 30: + _localctx = new AlterByValidateContext(_localctx); + enterOuterAlt(_localctx, 30); + { + setState(2510); + ((AlterByValidateContext)_localctx).validationFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==WITH || _la==WITHOUT) ) { + ((AlterByValidateContext)_localctx).validationFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2511); + match(VALIDATION); + } + break; + case 31: + _localctx = new AlterByAddPartitionContext(_localctx); + enterOuterAlt(_localctx, 31); + { + setState(2512); + match(ADD); + setState(2513); + match(PARTITION); + setState(2514); + match(LR_BRACKET); + setState(2515); + partitionDefinition(); + setState(2520); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2516); + match(COMMA); + setState(2517); + partitionDefinition(); + } + } + setState(2522); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2523); + match(RR_BRACKET); + } + break; + case 32: + _localctx = new AlterByDropPartitionContext(_localctx); + enterOuterAlt(_localctx, 32); + { + setState(2525); + match(DROP); + setState(2526); + match(PARTITION); + setState(2527); + uidList(); + } + break; + case 33: + _localctx = new AlterByDiscardPartitionContext(_localctx); + enterOuterAlt(_localctx, 33); + { + setState(2528); + match(DISCARD); + setState(2529); + match(PARTITION); + setState(2532); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + { + setState(2530); + uidList(); + } + break; + case ALL: + { + setState(2531); + match(ALL); + } + break; + default: + throw new NoViableAltException(this); + } + setState(2534); + match(TABLESPACE); + } + break; + case 34: + _localctx = new AlterByImportPartitionContext(_localctx); + enterOuterAlt(_localctx, 34); + { + setState(2535); + match(IMPORT); + setState(2536); + match(PARTITION); + setState(2539); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + { + setState(2537); + uidList(); + } + break; + case ALL: + { + setState(2538); + match(ALL); + } + break; + default: + throw new NoViableAltException(this); + } + setState(2541); + match(TABLESPACE); + } + break; + case 35: + _localctx = new AlterByTruncatePartitionContext(_localctx); + enterOuterAlt(_localctx, 35); + { + setState(2542); + match(TRUNCATE); + setState(2543); + match(PARTITION); + setState(2546); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + { + setState(2544); + uidList(); + } + break; + case ALL: + { + setState(2545); + match(ALL); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 36: + _localctx = new AlterByCoalescePartitionContext(_localctx); + enterOuterAlt(_localctx, 36); + { + setState(2548); + match(COALESCE); + setState(2549); + match(PARTITION); + setState(2550); + decimalLiteral(); + } + break; + case 37: + _localctx = new AlterByReorganizePartitionContext(_localctx); + enterOuterAlt(_localctx, 37); + { + setState(2551); + match(REORGANIZE); + setState(2552); + match(PARTITION); + setState(2553); + uidList(); + setState(2554); + match(INTO); + setState(2555); + match(LR_BRACKET); + setState(2556); + partitionDefinition(); + setState(2561); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2557); + match(COMMA); + setState(2558); + partitionDefinition(); + } + } + setState(2563); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2564); + match(RR_BRACKET); + } + break; + case 38: + _localctx = new AlterByExchangePartitionContext(_localctx); + enterOuterAlt(_localctx, 38); + { + setState(2566); + match(EXCHANGE); + setState(2567); + match(PARTITION); + setState(2568); + uid(); + setState(2569); + match(WITH); + setState(2570); + match(TABLE); + setState(2571); + tableName(); + setState(2574); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WITH || _la==WITHOUT) { + { + setState(2572); + ((AlterByExchangePartitionContext)_localctx).validationFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==WITH || _la==WITHOUT) ) { + ((AlterByExchangePartitionContext)_localctx).validationFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2573); + match(VALIDATION); + } + } + + } + break; + case 39: + _localctx = new AlterByAnalyzePartitionContext(_localctx); + enterOuterAlt(_localctx, 39); + { + setState(2576); + match(ANALYZE); + setState(2577); + match(PARTITION); + setState(2580); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + { + setState(2578); + uidList(); + } + break; + case ALL: + { + setState(2579); + match(ALL); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 40: + _localctx = new AlterByCheckPartitionContext(_localctx); + enterOuterAlt(_localctx, 40); + { + setState(2582); + match(CHECK); + setState(2583); + match(PARTITION); + setState(2586); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + { + setState(2584); + uidList(); + } + break; + case ALL: + { + setState(2585); + match(ALL); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 41: + _localctx = new AlterByOptimizePartitionContext(_localctx); + enterOuterAlt(_localctx, 41); + { + setState(2588); + match(OPTIMIZE); + setState(2589); + match(PARTITION); + setState(2592); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + { + setState(2590); + uidList(); + } + break; + case ALL: + { + setState(2591); + match(ALL); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 42: + _localctx = new AlterByRebuildPartitionContext(_localctx); + enterOuterAlt(_localctx, 42); + { + setState(2594); + match(REBUILD); + setState(2595); + match(PARTITION); + setState(2598); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + { + setState(2596); + uidList(); + } + break; + case ALL: + { + setState(2597); + match(ALL); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 43: + _localctx = new AlterByRepairPartitionContext(_localctx); + enterOuterAlt(_localctx, 43); + { + setState(2600); + match(REPAIR); + setState(2601); + match(PARTITION); + setState(2604); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + { + setState(2602); + uidList(); + } + break; + case ALL: + { + setState(2603); + match(ALL); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 44: + _localctx = new AlterByRemovePartitioningContext(_localctx); + enterOuterAlt(_localctx, 44); + { + setState(2606); + match(REMOVE); + setState(2607); + match(PARTITIONING); + } + break; + case 45: + _localctx = new AlterByUpgradePartitioningContext(_localctx); + enterOuterAlt(_localctx, 45); + { + setState(2608); + match(UPGRADE); + setState(2609); + match(PARTITIONING); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DropDatabaseContext extends ParserRuleContext { + public Token dbFormat; + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode DATABASE() { return getToken(MySqlParser.DATABASE, 0); } + public TerminalNode SCHEMA() { return getToken(MySqlParser.SCHEMA, 0); } + public IfExistsContext ifExists() { + return getRuleContext(IfExistsContext.class,0); + } + public DropDatabaseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropDatabase; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDropDatabase(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDropDatabase(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDropDatabase(this); + else return visitor.visitChildren(this); + } + } + + public final DropDatabaseContext dropDatabase() throws RecognitionException { + DropDatabaseContext _localctx = new DropDatabaseContext(_ctx, getState()); + enterRule(_localctx, 134, RULE_dropDatabase); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2612); + match(DROP); + setState(2613); + ((DropDatabaseContext)_localctx).dbFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DATABASE || _la==SCHEMA) ) { + ((DropDatabaseContext)_localctx).dbFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2615); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(2614); + ifExists(); + } + } + + setState(2617); + uid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DropEventContext extends ParserRuleContext { + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode EVENT() { return getToken(MySqlParser.EVENT, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public IfExistsContext ifExists() { + return getRuleContext(IfExistsContext.class,0); + } + public DropEventContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropEvent; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDropEvent(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDropEvent(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDropEvent(this); + else return visitor.visitChildren(this); + } + } + + public final DropEventContext dropEvent() throws RecognitionException { + DropEventContext _localctx = new DropEventContext(_ctx, getState()); + enterRule(_localctx, 136, RULE_dropEvent); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2619); + match(DROP); + setState(2620); + match(EVENT); + setState(2622); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(2621); + ifExists(); + } + } + + setState(2624); + fullId(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DropIndexContext extends ParserRuleContext { + public Token intimeAction; + public Token algType; + public Token lockType; + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public List ALGORITHM() { return getTokens(MySqlParser.ALGORITHM); } + public TerminalNode ALGORITHM(int i) { + return getToken(MySqlParser.ALGORITHM, i); + } + public List LOCK() { return getTokens(MySqlParser.LOCK); } + public TerminalNode LOCK(int i) { + return getToken(MySqlParser.LOCK, i); + } + public TerminalNode ONLINE() { return getToken(MySqlParser.ONLINE, 0); } + public TerminalNode OFFLINE() { return getToken(MySqlParser.OFFLINE, 0); } + public List DEFAULT() { return getTokens(MySqlParser.DEFAULT); } + public TerminalNode DEFAULT(int i) { + return getToken(MySqlParser.DEFAULT, i); + } + public List INPLACE() { return getTokens(MySqlParser.INPLACE); } + public TerminalNode INPLACE(int i) { + return getToken(MySqlParser.INPLACE, i); + } + public List COPY() { return getTokens(MySqlParser.COPY); } + public TerminalNode COPY(int i) { + return getToken(MySqlParser.COPY, i); + } + public List NONE() { return getTokens(MySqlParser.NONE); } + public TerminalNode NONE(int i) { + return getToken(MySqlParser.NONE, i); + } + public List SHARED() { return getTokens(MySqlParser.SHARED); } + public TerminalNode SHARED(int i) { + return getToken(MySqlParser.SHARED, i); + } + public List EXCLUSIVE() { return getTokens(MySqlParser.EXCLUSIVE); } + public TerminalNode EXCLUSIVE(int i) { + return getToken(MySqlParser.EXCLUSIVE, i); + } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public DropIndexContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropIndex; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDropIndex(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDropIndex(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDropIndex(this); + else return visitor.visitChildren(this); + } + } + + public final DropIndexContext dropIndex() throws RecognitionException { + DropIndexContext _localctx = new DropIndexContext(_ctx, getState()); + enterRule(_localctx, 138, RULE_dropIndex); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2626); + match(DROP); + setState(2627); + match(INDEX); + setState(2629); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,334,_ctx) ) { + case 1: + { + setState(2628); + ((DropIndexContext)_localctx).intimeAction = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==OFFLINE || _la==ONLINE) ) { + ((DropIndexContext)_localctx).intimeAction = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + setState(2631); + uid(); + setState(2632); + match(ON); + setState(2633); + tableName(); + setState(2646); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,338,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + setState(2644); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ALGORITHM: + { + setState(2634); + match(ALGORITHM); + setState(2636); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2635); + match(EQUAL_SYMBOL); + } + } + + setState(2638); + ((DropIndexContext)_localctx).algType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFAULT || _la==COPY || _la==INPLACE) ) { + ((DropIndexContext)_localctx).algType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case LOCK: + { + setState(2639); + match(LOCK); + setState(2641); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2640); + match(EQUAL_SYMBOL); + } + } + + setState(2643); + ((DropIndexContext)_localctx).lockType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DEFAULT || _la==EXCLUSIVE || _la==NONE || _la==SHARED) ) { + ((DropIndexContext)_localctx).lockType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + } + setState(2648); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,338,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DropLogfileGroupContext extends ParserRuleContext { + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode LOGFILE() { return getToken(MySqlParser.LOGFILE, 0); } + public TerminalNode GROUP() { return getToken(MySqlParser.GROUP, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode ENGINE() { return getToken(MySqlParser.ENGINE, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public EngineNameContext engineName() { + return getRuleContext(EngineNameContext.class,0); + } + public DropLogfileGroupContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropLogfileGroup; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDropLogfileGroup(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDropLogfileGroup(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDropLogfileGroup(this); + else return visitor.visitChildren(this); + } + } + + public final DropLogfileGroupContext dropLogfileGroup() throws RecognitionException { + DropLogfileGroupContext _localctx = new DropLogfileGroupContext(_ctx, getState()); + enterRule(_localctx, 140, RULE_dropLogfileGroup); + try { + enterOuterAlt(_localctx, 1); + { + setState(2649); + match(DROP); + setState(2650); + match(LOGFILE); + setState(2651); + match(GROUP); + setState(2652); + uid(); + setState(2653); + match(ENGINE); + setState(2654); + match(EQUAL_SYMBOL); + setState(2655); + engineName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DropProcedureContext extends ParserRuleContext { + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode PROCEDURE() { return getToken(MySqlParser.PROCEDURE, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public IfExistsContext ifExists() { + return getRuleContext(IfExistsContext.class,0); + } + public DropProcedureContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropProcedure; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDropProcedure(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDropProcedure(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDropProcedure(this); + else return visitor.visitChildren(this); + } + } + + public final DropProcedureContext dropProcedure() throws RecognitionException { + DropProcedureContext _localctx = new DropProcedureContext(_ctx, getState()); + enterRule(_localctx, 142, RULE_dropProcedure); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2657); + match(DROP); + setState(2658); + match(PROCEDURE); + setState(2660); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(2659); + ifExists(); + } + } + + setState(2662); + fullId(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DropFunctionContext extends ParserRuleContext { + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode FUNCTION() { return getToken(MySqlParser.FUNCTION, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public IfExistsContext ifExists() { + return getRuleContext(IfExistsContext.class,0); + } + public DropFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDropFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDropFunction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDropFunction(this); + else return visitor.visitChildren(this); + } + } + + public final DropFunctionContext dropFunction() throws RecognitionException { + DropFunctionContext _localctx = new DropFunctionContext(_ctx, getState()); + enterRule(_localctx, 144, RULE_dropFunction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2664); + match(DROP); + setState(2665); + match(FUNCTION); + setState(2667); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(2666); + ifExists(); + } + } + + setState(2669); + fullId(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DropServerContext extends ParserRuleContext { + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode SERVER() { return getToken(MySqlParser.SERVER, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public IfExistsContext ifExists() { + return getRuleContext(IfExistsContext.class,0); + } + public DropServerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropServer; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDropServer(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDropServer(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDropServer(this); + else return visitor.visitChildren(this); + } + } + + public final DropServerContext dropServer() throws RecognitionException { + DropServerContext _localctx = new DropServerContext(_ctx, getState()); + enterRule(_localctx, 146, RULE_dropServer); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2671); + match(DROP); + setState(2672); + match(SERVER); + setState(2674); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(2673); + ifExists(); + } + } + + setState(2676); + uid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DropTableContext extends ParserRuleContext { + public Token dropType; + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TablesContext tables() { + return getRuleContext(TablesContext.class,0); + } + public TerminalNode TEMPORARY() { return getToken(MySqlParser.TEMPORARY, 0); } + public IfExistsContext ifExists() { + return getRuleContext(IfExistsContext.class,0); + } + public TerminalNode RESTRICT() { return getToken(MySqlParser.RESTRICT, 0); } + public TerminalNode CASCADE() { return getToken(MySqlParser.CASCADE, 0); } + public DropTableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropTable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDropTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDropTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDropTable(this); + else return visitor.visitChildren(this); + } + } + + public final DropTableContext dropTable() throws RecognitionException { + DropTableContext _localctx = new DropTableContext(_ctx, getState()); + enterRule(_localctx, 148, RULE_dropTable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2678); + match(DROP); + setState(2680); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==TEMPORARY) { + { + setState(2679); + match(TEMPORARY); + } + } + + setState(2682); + match(TABLE); + setState(2684); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(2683); + ifExists(); + } + } + + setState(2686); + tables(); + setState(2688); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CASCADE || _la==RESTRICT) { + { + setState(2687); + ((DropTableContext)_localctx).dropType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==CASCADE || _la==RESTRICT) ) { + ((DropTableContext)_localctx).dropType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DropTablespaceContext extends ParserRuleContext { + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode TABLESPACE() { return getToken(MySqlParser.TABLESPACE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode ENGINE() { return getToken(MySqlParser.ENGINE, 0); } + public EngineNameContext engineName() { + return getRuleContext(EngineNameContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public DropTablespaceContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropTablespace; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDropTablespace(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDropTablespace(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDropTablespace(this); + else return visitor.visitChildren(this); + } + } + + public final DropTablespaceContext dropTablespace() throws RecognitionException { + DropTablespaceContext _localctx = new DropTablespaceContext(_ctx, getState()); + enterRule(_localctx, 150, RULE_dropTablespace); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2690); + match(DROP); + setState(2691); + match(TABLESPACE); + setState(2692); + uid(); + setState(2698); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ENGINE) { + { + setState(2693); + match(ENGINE); + setState(2695); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQUAL_SYMBOL) { + { + setState(2694); + match(EQUAL_SYMBOL); + } + } + + setState(2697); + engineName(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DropTriggerContext extends ParserRuleContext { + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode TRIGGER() { return getToken(MySqlParser.TRIGGER, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public IfExistsContext ifExists() { + return getRuleContext(IfExistsContext.class,0); + } + public DropTriggerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropTrigger; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDropTrigger(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDropTrigger(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDropTrigger(this); + else return visitor.visitChildren(this); + } + } + + public final DropTriggerContext dropTrigger() throws RecognitionException { + DropTriggerContext _localctx = new DropTriggerContext(_ctx, getState()); + enterRule(_localctx, 152, RULE_dropTrigger); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2700); + match(DROP); + setState(2701); + match(TRIGGER); + setState(2703); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(2702); + ifExists(); + } + } + + setState(2705); + fullId(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DropViewContext extends ParserRuleContext { + public Token dropType; + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode VIEW() { return getToken(MySqlParser.VIEW, 0); } + public List fullId() { + return getRuleContexts(FullIdContext.class); + } + public FullIdContext fullId(int i) { + return getRuleContext(FullIdContext.class,i); + } + public IfExistsContext ifExists() { + return getRuleContext(IfExistsContext.class,0); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode RESTRICT() { return getToken(MySqlParser.RESTRICT, 0); } + public TerminalNode CASCADE() { return getToken(MySqlParser.CASCADE, 0); } + public DropViewContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropView; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDropView(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDropView(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDropView(this); + else return visitor.visitChildren(this); + } + } + + public final DropViewContext dropView() throws RecognitionException { + DropViewContext _localctx = new DropViewContext(_ctx, getState()); + enterRule(_localctx, 154, RULE_dropView); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2707); + match(DROP); + setState(2708); + match(VIEW); + setState(2710); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(2709); + ifExists(); + } + } + + setState(2712); + fullId(); + setState(2717); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2713); + match(COMMA); + setState(2714); + fullId(); + } + } + setState(2719); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2721); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CASCADE || _la==RESTRICT) { + { + setState(2720); + ((DropViewContext)_localctx).dropType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==CASCADE || _la==RESTRICT) ) { + ((DropViewContext)_localctx).dropType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RenameTableContext extends ParserRuleContext { + public TerminalNode RENAME() { return getToken(MySqlParser.RENAME, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public List renameTableClause() { + return getRuleContexts(RenameTableClauseContext.class); + } + public RenameTableClauseContext renameTableClause(int i) { + return getRuleContext(RenameTableClauseContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public RenameTableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_renameTable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRenameTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRenameTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRenameTable(this); + else return visitor.visitChildren(this); + } + } + + public final RenameTableContext renameTable() throws RecognitionException { + RenameTableContext _localctx = new RenameTableContext(_ctx, getState()); + enterRule(_localctx, 156, RULE_renameTable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2723); + match(RENAME); + setState(2724); + match(TABLE); + setState(2725); + renameTableClause(); + setState(2730); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2726); + match(COMMA); + setState(2727); + renameTableClause(); + } + } + setState(2732); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RenameTableClauseContext extends ParserRuleContext { + public List tableName() { + return getRuleContexts(TableNameContext.class); + } + public TableNameContext tableName(int i) { + return getRuleContext(TableNameContext.class,i); + } + public TerminalNode TO() { return getToken(MySqlParser.TO, 0); } + public RenameTableClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_renameTableClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRenameTableClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRenameTableClause(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRenameTableClause(this); + else return visitor.visitChildren(this); + } + } + + public final RenameTableClauseContext renameTableClause() throws RecognitionException { + RenameTableClauseContext _localctx = new RenameTableClauseContext(_ctx, getState()); + enterRule(_localctx, 158, RULE_renameTableClause); + try { + enterOuterAlt(_localctx, 1); + { + setState(2733); + tableName(); + setState(2734); + match(TO); + setState(2735); + tableName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TruncateTableContext extends ParserRuleContext { + public TerminalNode TRUNCATE() { return getToken(MySqlParser.TRUNCATE, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TruncateTableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_truncateTable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTruncateTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTruncateTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTruncateTable(this); + else return visitor.visitChildren(this); + } + } + + public final TruncateTableContext truncateTable() throws RecognitionException { + TruncateTableContext _localctx = new TruncateTableContext(_ctx, getState()); + enterRule(_localctx, 160, RULE_truncateTable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2737); + match(TRUNCATE); + setState(2739); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==TABLE) { + { + setState(2738); + match(TABLE); + } + } + + setState(2741); + tableName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CallStatementContext extends ParserRuleContext { + public TerminalNode CALL() { return getToken(MySqlParser.CALL, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public ConstantsContext constants() { + return getRuleContext(ConstantsContext.class,0); + } + public ExpressionsContext expressions() { + return getRuleContext(ExpressionsContext.class,0); + } + public CallStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_callStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCallStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCallStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCallStatement(this); + else return visitor.visitChildren(this); + } + } + + public final CallStatementContext callStatement() throws RecognitionException { + CallStatementContext _localctx = new CallStatementContext(_ctx, getState()); + enterRule(_localctx, 162, RULE_callStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(2743); + match(CALL); + setState(2744); + fullId(); + setState(2751); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,354,_ctx) ) { + case 1: + { + setState(2745); + match(LR_BRACKET); + setState(2748); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,353,_ctx) ) { + case 1: + { + setState(2746); + constants(); + } + break; + case 2: + { + setState(2747); + expressions(); + } + break; + } + setState(2750); + match(RR_BRACKET); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeleteStatementContext extends ParserRuleContext { + public SingleDeleteStatementContext singleDeleteStatement() { + return getRuleContext(SingleDeleteStatementContext.class,0); + } + public MultipleDeleteStatementContext multipleDeleteStatement() { + return getRuleContext(MultipleDeleteStatementContext.class,0); + } + public DeleteStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_deleteStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDeleteStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDeleteStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDeleteStatement(this); + else return visitor.visitChildren(this); + } + } + + public final DeleteStatementContext deleteStatement() throws RecognitionException { + DeleteStatementContext _localctx = new DeleteStatementContext(_ctx, getState()); + enterRule(_localctx, 164, RULE_deleteStatement); + try { + setState(2755); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,355,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(2753); + singleDeleteStatement(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(2754); + multipleDeleteStatement(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DoStatementContext extends ParserRuleContext { + public TerminalNode DO() { return getToken(MySqlParser.DO, 0); } + public ExpressionsContext expressions() { + return getRuleContext(ExpressionsContext.class,0); + } + public DoStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_doStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDoStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDoStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDoStatement(this); + else return visitor.visitChildren(this); + } + } + + public final DoStatementContext doStatement() throws RecognitionException { + DoStatementContext _localctx = new DoStatementContext(_ctx, getState()); + enterRule(_localctx, 166, RULE_doStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(2757); + match(DO); + setState(2758); + expressions(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class HandlerStatementContext extends ParserRuleContext { + public HandlerOpenStatementContext handlerOpenStatement() { + return getRuleContext(HandlerOpenStatementContext.class,0); + } + public HandlerReadIndexStatementContext handlerReadIndexStatement() { + return getRuleContext(HandlerReadIndexStatementContext.class,0); + } + public HandlerReadStatementContext handlerReadStatement() { + return getRuleContext(HandlerReadStatementContext.class,0); + } + public HandlerCloseStatementContext handlerCloseStatement() { + return getRuleContext(HandlerCloseStatementContext.class,0); + } + public HandlerStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_handlerStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHandlerStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHandlerStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHandlerStatement(this); + else return visitor.visitChildren(this); + } + } + + public final HandlerStatementContext handlerStatement() throws RecognitionException { + HandlerStatementContext _localctx = new HandlerStatementContext(_ctx, getState()); + enterRule(_localctx, 168, RULE_handlerStatement); + try { + setState(2764); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,356,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(2760); + handlerOpenStatement(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(2761); + handlerReadIndexStatement(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(2762); + handlerReadStatement(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(2763); + handlerCloseStatement(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InsertStatementContext extends ParserRuleContext { + public Token priority; + public UidListContext partitions; + public UidListContext columns; + public UpdatedElementContext setFirst; + public UpdatedElementContext updatedElement; + public List setElements = new ArrayList(); + public UpdatedElementContext duplicatedFirst; + public List duplicatedElements = new ArrayList(); + public TerminalNode INSERT() { return getToken(MySqlParser.INSERT, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public InsertStatementValueContext insertStatementValue() { + return getRuleContext(InsertStatementValueContext.class,0); + } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode IGNORE() { return getToken(MySqlParser.IGNORE, 0); } + public TerminalNode INTO() { return getToken(MySqlParser.INTO, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public List LR_BRACKET() { return getTokens(MySqlParser.LR_BRACKET); } + public TerminalNode LR_BRACKET(int i) { + return getToken(MySqlParser.LR_BRACKET, i); + } + public List RR_BRACKET() { return getTokens(MySqlParser.RR_BRACKET); } + public TerminalNode RR_BRACKET(int i) { + return getToken(MySqlParser.RR_BRACKET, i); + } + public List updatedElement() { + return getRuleContexts(UpdatedElementContext.class); + } + public UpdatedElementContext updatedElement(int i) { + return getRuleContext(UpdatedElementContext.class,i); + } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public TerminalNode DUPLICATE() { return getToken(MySqlParser.DUPLICATE, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public TerminalNode UPDATE() { return getToken(MySqlParser.UPDATE, 0); } + public TerminalNode LOW_PRIORITY() { return getToken(MySqlParser.LOW_PRIORITY, 0); } + public TerminalNode DELAYED() { return getToken(MySqlParser.DELAYED, 0); } + public TerminalNode HIGH_PRIORITY() { return getToken(MySqlParser.HIGH_PRIORITY, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public List uidList() { + return getRuleContexts(UidListContext.class); + } + public UidListContext uidList(int i) { + return getRuleContext(UidListContext.class,i); + } + public InsertStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_insertStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterInsertStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitInsertStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitInsertStatement(this); + else return visitor.visitChildren(this); + } + } + + public final InsertStatementContext insertStatement() throws RecognitionException { + InsertStatementContext _localctx = new InsertStatementContext(_ctx, getState()); + enterRule(_localctx, 170, RULE_insertStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2766); + match(INSERT); + setState(2768); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 39)) & ~0x3f) == 0 && ((1L << (_la - 39)) & ((1L << (DELAYED - 39)) | (1L << (HIGH_PRIORITY - 39)) | (1L << (LOW_PRIORITY - 39)))) != 0)) { + { + setState(2767); + ((InsertStatementContext)_localctx).priority = _input.LT(1); + _la = _input.LA(1); + if ( !(((((_la - 39)) & ~0x3f) == 0 && ((1L << (_la - 39)) & ((1L << (DELAYED - 39)) | (1L << (HIGH_PRIORITY - 39)) | (1L << (LOW_PRIORITY - 39)))) != 0)) ) { + ((InsertStatementContext)_localctx).priority = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2771); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IGNORE) { + { + setState(2770); + match(IGNORE); + } + } + + setState(2774); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INTO) { + { + setState(2773); + match(INTO); + } + } + + setState(2776); + tableName(); + setState(2783); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PARTITION) { + { + setState(2777); + match(PARTITION); + setState(2778); + match(LR_BRACKET); + setState(2780); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(2779); + ((InsertStatementContext)_localctx).partitions = uidList(); + } + } + + setState(2782); + match(RR_BRACKET); + } + } + + setState(2801); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SELECT: + case VALUES: + case VALUE: + case LR_BRACKET: + { + setState(2789); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,362,_ctx) ) { + case 1: + { + setState(2785); + match(LR_BRACKET); + setState(2786); + ((InsertStatementContext)_localctx).columns = uidList(); + setState(2787); + match(RR_BRACKET); + } + break; + } + setState(2791); + insertStatementValue(); + } + break; + case SET: + { + setState(2792); + match(SET); + setState(2793); + ((InsertStatementContext)_localctx).setFirst = updatedElement(); + setState(2798); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2794); + match(COMMA); + setState(2795); + ((InsertStatementContext)_localctx).updatedElement = updatedElement(); + ((InsertStatementContext)_localctx).setElements.add(((InsertStatementContext)_localctx).updatedElement); + } + } + setState(2800); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(2815); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ON) { + { + setState(2803); + match(ON); + setState(2804); + match(DUPLICATE); + setState(2805); + match(KEY); + setState(2806); + match(UPDATE); + setState(2807); + ((InsertStatementContext)_localctx).duplicatedFirst = updatedElement(); + setState(2812); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2808); + match(COMMA); + setState(2809); + ((InsertStatementContext)_localctx).updatedElement = updatedElement(); + ((InsertStatementContext)_localctx).duplicatedElements.add(((InsertStatementContext)_localctx).updatedElement); + } + } + setState(2814); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LoadDataStatementContext extends ParserRuleContext { + public Token priority; + public Token filename; + public Token violation; + public CharsetNameContext charset; + public Token fieldsFormat; + public Token linesFormat; + public TerminalNode LOAD() { return getToken(MySqlParser.LOAD, 0); } + public TerminalNode DATA() { return getToken(MySqlParser.DATA, 0); } + public TerminalNode INFILE() { return getToken(MySqlParser.INFILE, 0); } + public TerminalNode INTO() { return getToken(MySqlParser.INTO, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode LOCAL() { return getToken(MySqlParser.LOCAL, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public List LR_BRACKET() { return getTokens(MySqlParser.LR_BRACKET); } + public TerminalNode LR_BRACKET(int i) { + return getToken(MySqlParser.LR_BRACKET, i); + } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public List RR_BRACKET() { return getTokens(MySqlParser.RR_BRACKET); } + public TerminalNode RR_BRACKET(int i) { + return getToken(MySqlParser.RR_BRACKET, i); + } + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public List SET() { return getTokens(MySqlParser.SET); } + public TerminalNode SET(int i) { + return getToken(MySqlParser.SET, i); + } + public List LINES() { return getTokens(MySqlParser.LINES); } + public TerminalNode LINES(int i) { + return getToken(MySqlParser.LINES, i); + } + public List IGNORE() { return getTokens(MySqlParser.IGNORE); } + public TerminalNode IGNORE(int i) { + return getToken(MySqlParser.IGNORE, i); + } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public List assignmentField() { + return getRuleContexts(AssignmentFieldContext.class); + } + public AssignmentFieldContext assignmentField(int i) { + return getRuleContext(AssignmentFieldContext.class,i); + } + public List updatedElement() { + return getRuleContexts(UpdatedElementContext.class); + } + public UpdatedElementContext updatedElement(int i) { + return getRuleContext(UpdatedElementContext.class,i); + } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public TerminalNode LOW_PRIORITY() { return getToken(MySqlParser.LOW_PRIORITY, 0); } + public TerminalNode CONCURRENT() { return getToken(MySqlParser.CONCURRENT, 0); } + public TerminalNode REPLACE() { return getToken(MySqlParser.REPLACE, 0); } + public TerminalNode FIELDS() { return getToken(MySqlParser.FIELDS, 0); } + public TerminalNode COLUMNS() { return getToken(MySqlParser.COLUMNS, 0); } + public TerminalNode ROWS() { return getToken(MySqlParser.ROWS, 0); } + public List selectFieldsInto() { + return getRuleContexts(SelectFieldsIntoContext.class); + } + public SelectFieldsIntoContext selectFieldsInto(int i) { + return getRuleContext(SelectFieldsIntoContext.class,i); + } + public List selectLinesInto() { + return getRuleContexts(SelectLinesIntoContext.class); + } + public SelectLinesIntoContext selectLinesInto(int i) { + return getRuleContext(SelectLinesIntoContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public LoadDataStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_loadDataStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLoadDataStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLoadDataStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLoadDataStatement(this); + else return visitor.visitChildren(this); + } + } + + public final LoadDataStatementContext loadDataStatement() throws RecognitionException { + LoadDataStatementContext _localctx = new LoadDataStatementContext(_ctx, getState()); + enterRule(_localctx, 172, RULE_loadDataStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2817); + match(LOAD); + setState(2818); + match(DATA); + setState(2820); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LOW_PRIORITY || _la==CONCURRENT) { + { + setState(2819); + ((LoadDataStatementContext)_localctx).priority = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==LOW_PRIORITY || _la==CONCURRENT) ) { + ((LoadDataStatementContext)_localctx).priority = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2823); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LOCAL) { + { + setState(2822); + match(LOCAL); + } + } + + setState(2825); + match(INFILE); + setState(2826); + ((LoadDataStatementContext)_localctx).filename = match(STRING_LITERAL); + setState(2828); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IGNORE || _la==REPLACE) { + { + setState(2827); + ((LoadDataStatementContext)_localctx).violation = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==IGNORE || _la==REPLACE) ) { + ((LoadDataStatementContext)_localctx).violation = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2830); + match(INTO); + setState(2831); + match(TABLE); + setState(2832); + tableName(); + setState(2838); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PARTITION) { + { + setState(2833); + match(PARTITION); + setState(2834); + match(LR_BRACKET); + setState(2835); + uidList(); + setState(2836); + match(RR_BRACKET); + } + } + + setState(2843); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CHARACTER) { + { + setState(2840); + match(CHARACTER); + setState(2841); + match(SET); + setState(2842); + ((LoadDataStatementContext)_localctx).charset = charsetName(); + } + } + + setState(2851); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLUMNS || _la==FIELDS) { + { + setState(2845); + ((LoadDataStatementContext)_localctx).fieldsFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==COLUMNS || _la==FIELDS) ) { + ((LoadDataStatementContext)_localctx).fieldsFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2847); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(2846); + selectFieldsInto(); + } + } + setState(2849); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==ENCLOSED || _la==ESCAPED || _la==OPTIONALLY || _la==TERMINATED ); + } + } + + setState(2859); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LINES) { + { + setState(2853); + match(LINES); + setState(2855); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(2854); + selectLinesInto(); + } + } + setState(2857); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==STARTING || _la==TERMINATED ); + } + } + + setState(2865); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IGNORE) { + { + setState(2861); + match(IGNORE); + setState(2862); + decimalLiteral(); + setState(2863); + ((LoadDataStatementContext)_localctx).linesFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==LINES || _la==ROWS) ) { + ((LoadDataStatementContext)_localctx).linesFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2878); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,378,_ctx) ) { + case 1: + { + setState(2867); + match(LR_BRACKET); + setState(2868); + assignmentField(); + setState(2873); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2869); + match(COMMA); + setState(2870); + assignmentField(); + } + } + setState(2875); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2876); + match(RR_BRACKET); + } + break; + } + setState(2889); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,380,_ctx) ) { + case 1: + { + setState(2880); + match(SET); + setState(2881); + updatedElement(); + setState(2886); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2882); + match(COMMA); + setState(2883); + updatedElement(); + } + } + setState(2888); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LoadXmlStatementContext extends ParserRuleContext { + public Token priority; + public Token filename; + public Token violation; + public CharsetNameContext charset; + public Token tag; + public Token linesFormat; + public TerminalNode LOAD() { return getToken(MySqlParser.LOAD, 0); } + public TerminalNode XML() { return getToken(MySqlParser.XML, 0); } + public TerminalNode INFILE() { return getToken(MySqlParser.INFILE, 0); } + public TerminalNode INTO() { return getToken(MySqlParser.INTO, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public List STRING_LITERAL() { return getTokens(MySqlParser.STRING_LITERAL); } + public TerminalNode STRING_LITERAL(int i) { + return getToken(MySqlParser.STRING_LITERAL, i); + } + public TerminalNode LOCAL() { return getToken(MySqlParser.LOCAL, 0); } + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public List SET() { return getTokens(MySqlParser.SET); } + public TerminalNode SET(int i) { + return getToken(MySqlParser.SET, i); + } + public List ROWS() { return getTokens(MySqlParser.ROWS); } + public TerminalNode ROWS(int i) { + return getToken(MySqlParser.ROWS, i); + } + public TerminalNode IDENTIFIED() { return getToken(MySqlParser.IDENTIFIED, 0); } + public TerminalNode BY() { return getToken(MySqlParser.BY, 0); } + public TerminalNode LESS_SYMBOL() { return getToken(MySqlParser.LESS_SYMBOL, 0); } + public TerminalNode GREATER_SYMBOL() { return getToken(MySqlParser.GREATER_SYMBOL, 0); } + public List IGNORE() { return getTokens(MySqlParser.IGNORE); } + public TerminalNode IGNORE(int i) { + return getToken(MySqlParser.IGNORE, i); + } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List assignmentField() { + return getRuleContexts(AssignmentFieldContext.class); + } + public AssignmentFieldContext assignmentField(int i) { + return getRuleContext(AssignmentFieldContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List updatedElement() { + return getRuleContexts(UpdatedElementContext.class); + } + public UpdatedElementContext updatedElement(int i) { + return getRuleContext(UpdatedElementContext.class,i); + } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public TerminalNode LOW_PRIORITY() { return getToken(MySqlParser.LOW_PRIORITY, 0); } + public TerminalNode CONCURRENT() { return getToken(MySqlParser.CONCURRENT, 0); } + public TerminalNode REPLACE() { return getToken(MySqlParser.REPLACE, 0); } + public TerminalNode LINES() { return getToken(MySqlParser.LINES, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public LoadXmlStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_loadXmlStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLoadXmlStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLoadXmlStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLoadXmlStatement(this); + else return visitor.visitChildren(this); + } + } + + public final LoadXmlStatementContext loadXmlStatement() throws RecognitionException { + LoadXmlStatementContext _localctx = new LoadXmlStatementContext(_ctx, getState()); + enterRule(_localctx, 174, RULE_loadXmlStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2891); + match(LOAD); + setState(2892); + match(XML); + setState(2894); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LOW_PRIORITY || _la==CONCURRENT) { + { + setState(2893); + ((LoadXmlStatementContext)_localctx).priority = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==LOW_PRIORITY || _la==CONCURRENT) ) { + ((LoadXmlStatementContext)_localctx).priority = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2897); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LOCAL) { + { + setState(2896); + match(LOCAL); + } + } + + setState(2899); + match(INFILE); + setState(2900); + ((LoadXmlStatementContext)_localctx).filename = match(STRING_LITERAL); + setState(2902); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IGNORE || _la==REPLACE) { + { + setState(2901); + ((LoadXmlStatementContext)_localctx).violation = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==IGNORE || _la==REPLACE) ) { + ((LoadXmlStatementContext)_localctx).violation = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2904); + match(INTO); + setState(2905); + match(TABLE); + setState(2906); + tableName(); + setState(2910); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CHARACTER) { + { + setState(2907); + match(CHARACTER); + setState(2908); + match(SET); + setState(2909); + ((LoadXmlStatementContext)_localctx).charset = charsetName(); + } + } + + setState(2918); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ROWS) { + { + setState(2912); + match(ROWS); + setState(2913); + match(IDENTIFIED); + setState(2914); + match(BY); + setState(2915); + match(LESS_SYMBOL); + setState(2916); + ((LoadXmlStatementContext)_localctx).tag = match(STRING_LITERAL); + setState(2917); + match(GREATER_SYMBOL); + } + } + + setState(2924); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IGNORE) { + { + setState(2920); + match(IGNORE); + setState(2921); + decimalLiteral(); + setState(2922); + ((LoadXmlStatementContext)_localctx).linesFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==LINES || _la==ROWS) ) { + ((LoadXmlStatementContext)_localctx).linesFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2937); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,388,_ctx) ) { + case 1: + { + setState(2926); + match(LR_BRACKET); + setState(2927); + assignmentField(); + setState(2932); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2928); + match(COMMA); + setState(2929); + assignmentField(); + } + } + setState(2934); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2935); + match(RR_BRACKET); + } + break; + } + setState(2948); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,390,_ctx) ) { + case 1: + { + setState(2939); + match(SET); + setState(2940); + updatedElement(); + setState(2945); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2941); + match(COMMA); + setState(2942); + updatedElement(); + } + } + setState(2947); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ReplaceStatementContext extends ParserRuleContext { + public Token priority; + public UidListContext partitions; + public UidListContext columns; + public UpdatedElementContext setFirst; + public UpdatedElementContext updatedElement; + public List setElements = new ArrayList(); + public TerminalNode REPLACE() { return getToken(MySqlParser.REPLACE, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public InsertStatementValueContext insertStatementValue() { + return getRuleContext(InsertStatementValueContext.class,0); + } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode INTO() { return getToken(MySqlParser.INTO, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public List LR_BRACKET() { return getTokens(MySqlParser.LR_BRACKET); } + public TerminalNode LR_BRACKET(int i) { + return getToken(MySqlParser.LR_BRACKET, i); + } + public List RR_BRACKET() { return getTokens(MySqlParser.RR_BRACKET); } + public TerminalNode RR_BRACKET(int i) { + return getToken(MySqlParser.RR_BRACKET, i); + } + public List updatedElement() { + return getRuleContexts(UpdatedElementContext.class); + } + public UpdatedElementContext updatedElement(int i) { + return getRuleContext(UpdatedElementContext.class,i); + } + public List uidList() { + return getRuleContexts(UidListContext.class); + } + public UidListContext uidList(int i) { + return getRuleContext(UidListContext.class,i); + } + public TerminalNode LOW_PRIORITY() { return getToken(MySqlParser.LOW_PRIORITY, 0); } + public TerminalNode DELAYED() { return getToken(MySqlParser.DELAYED, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public ReplaceStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_replaceStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterReplaceStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitReplaceStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitReplaceStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ReplaceStatementContext replaceStatement() throws RecognitionException { + ReplaceStatementContext _localctx = new ReplaceStatementContext(_ctx, getState()); + enterRule(_localctx, 176, RULE_replaceStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2950); + match(REPLACE); + setState(2952); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DELAYED || _la==LOW_PRIORITY) { + { + setState(2951); + ((ReplaceStatementContext)_localctx).priority = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DELAYED || _la==LOW_PRIORITY) ) { + ((ReplaceStatementContext)_localctx).priority = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(2955); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INTO) { + { + setState(2954); + match(INTO); + } + } + + setState(2957); + tableName(); + setState(2963); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PARTITION) { + { + setState(2958); + match(PARTITION); + setState(2959); + match(LR_BRACKET); + setState(2960); + ((ReplaceStatementContext)_localctx).partitions = uidList(); + setState(2961); + match(RR_BRACKET); + } + } + + setState(2981); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SELECT: + case VALUES: + case VALUE: + case LR_BRACKET: + { + setState(2969); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,394,_ctx) ) { + case 1: + { + setState(2965); + match(LR_BRACKET); + setState(2966); + ((ReplaceStatementContext)_localctx).columns = uidList(); + setState(2967); + match(RR_BRACKET); + } + break; + } + setState(2971); + insertStatementValue(); + } + break; + case SET: + { + setState(2972); + match(SET); + setState(2973); + ((ReplaceStatementContext)_localctx).setFirst = updatedElement(); + setState(2978); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(2974); + match(COMMA); + setState(2975); + ((ReplaceStatementContext)_localctx).updatedElement = updatedElement(); + ((ReplaceStatementContext)_localctx).setElements.add(((ReplaceStatementContext)_localctx).updatedElement); + } + } + setState(2980); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SelectStatementContext extends ParserRuleContext { + public SelectStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectStatement; } + + public SelectStatementContext() { } + public void copyFrom(SelectStatementContext ctx) { + super.copyFrom(ctx); + } + } + public static class UnionSelectContext extends SelectStatementContext { + public Token unionType; + public QuerySpecificationNointoContext querySpecificationNointo() { + return getRuleContext(QuerySpecificationNointoContext.class,0); + } + public List unionStatement() { + return getRuleContexts(UnionStatementContext.class); + } + public UnionStatementContext unionStatement(int i) { + return getRuleContext(UnionStatementContext.class,i); + } + public TerminalNode UNION() { return getToken(MySqlParser.UNION, 0); } + public OrderByClauseContext orderByClause() { + return getRuleContext(OrderByClauseContext.class,0); + } + public LimitClauseContext limitClause() { + return getRuleContext(LimitClauseContext.class,0); + } + public LockClauseContext lockClause() { + return getRuleContext(LockClauseContext.class,0); + } + public QuerySpecificationContext querySpecification() { + return getRuleContext(QuerySpecificationContext.class,0); + } + public QueryExpressionContext queryExpression() { + return getRuleContext(QueryExpressionContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public TerminalNode DISTINCT() { return getToken(MySqlParser.DISTINCT, 0); } + public UnionSelectContext(SelectStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUnionSelect(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUnionSelect(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUnionSelect(this); + else return visitor.visitChildren(this); + } + } + public static class UnionParenthesisSelectContext extends SelectStatementContext { + public Token unionType; + public QueryExpressionNointoContext queryExpressionNointo() { + return getRuleContext(QueryExpressionNointoContext.class,0); + } + public List unionParenthesis() { + return getRuleContexts(UnionParenthesisContext.class); + } + public UnionParenthesisContext unionParenthesis(int i) { + return getRuleContext(UnionParenthesisContext.class,i); + } + public TerminalNode UNION() { return getToken(MySqlParser.UNION, 0); } + public QueryExpressionContext queryExpression() { + return getRuleContext(QueryExpressionContext.class,0); + } + public OrderByClauseContext orderByClause() { + return getRuleContext(OrderByClauseContext.class,0); + } + public LimitClauseContext limitClause() { + return getRuleContext(LimitClauseContext.class,0); + } + public LockClauseContext lockClause() { + return getRuleContext(LockClauseContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public TerminalNode DISTINCT() { return getToken(MySqlParser.DISTINCT, 0); } + public UnionParenthesisSelectContext(SelectStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUnionParenthesisSelect(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUnionParenthesisSelect(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUnionParenthesisSelect(this); + else return visitor.visitChildren(this); + } + } + public static class SimpleSelectContext extends SelectStatementContext { + public QuerySpecificationContext querySpecification() { + return getRuleContext(QuerySpecificationContext.class,0); + } + public LockClauseContext lockClause() { + return getRuleContext(LockClauseContext.class,0); + } + public SimpleSelectContext(SelectStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSimpleSelect(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSimpleSelect(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSimpleSelect(this); + else return visitor.visitChildren(this); + } + } + public static class ParenthesisSelectContext extends SelectStatementContext { + public QueryExpressionContext queryExpression() { + return getRuleContext(QueryExpressionContext.class,0); + } + public LockClauseContext lockClause() { + return getRuleContext(LockClauseContext.class,0); + } + public ParenthesisSelectContext(SelectStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterParenthesisSelect(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitParenthesisSelect(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitParenthesisSelect(this); + else return visitor.visitChildren(this); + } + } + + public final SelectStatementContext selectStatement() throws RecognitionException { + SelectStatementContext _localctx = new SelectStatementContext(_ctx, getState()); + enterRule(_localctx, 178, RULE_selectStatement); + int _la; + try { + int _alt; + setState(3038); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,412,_ctx) ) { + case 1: + _localctx = new SimpleSelectContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(2983); + querySpecification(); + setState(2985); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,397,_ctx) ) { + case 1: + { + setState(2984); + lockClause(); + } + break; + } + } + break; + case 2: + _localctx = new ParenthesisSelectContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(2987); + queryExpression(); + setState(2989); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,398,_ctx) ) { + case 1: + { + setState(2988); + lockClause(); + } + break; + } + } + break; + case 3: + _localctx = new UnionSelectContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(2991); + querySpecificationNointo(); + setState(2993); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(2992); + unionStatement(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(2995); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,399,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + setState(3005); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==UNION) { + { + setState(2997); + match(UNION); + setState(2999); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALL || _la==DISTINCT) { + { + setState(2998); + ((UnionSelectContext)_localctx).unionType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ALL || _la==DISTINCT) ) { + ((UnionSelectContext)_localctx).unionType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(3003); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SELECT: + { + setState(3001); + querySpecification(); + } + break; + case LR_BRACKET: + { + setState(3002); + queryExpression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + + setState(3008); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ORDER) { + { + setState(3007); + orderByClause(); + } + } + + setState(3011); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LIMIT) { + { + setState(3010); + limitClause(); + } + } + + setState(3014); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,405,_ctx) ) { + case 1: + { + setState(3013); + lockClause(); + } + break; + } + } + break; + case 4: + _localctx = new UnionParenthesisSelectContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(3016); + queryExpressionNointo(); + setState(3018); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(3017); + unionParenthesis(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(3020); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,406,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + setState(3027); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==UNION) { + { + setState(3022); + match(UNION); + setState(3024); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALL || _la==DISTINCT) { + { + setState(3023); + ((UnionParenthesisSelectContext)_localctx).unionType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ALL || _la==DISTINCT) ) { + ((UnionParenthesisSelectContext)_localctx).unionType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(3026); + queryExpression(); + } + } + + setState(3030); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ORDER) { + { + setState(3029); + orderByClause(); + } + } + + setState(3033); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LIMIT) { + { + setState(3032); + limitClause(); + } + } + + setState(3036); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,411,_ctx) ) { + case 1: + { + setState(3035); + lockClause(); + } + break; + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UpdateStatementContext extends ParserRuleContext { + public SingleUpdateStatementContext singleUpdateStatement() { + return getRuleContext(SingleUpdateStatementContext.class,0); + } + public MultipleUpdateStatementContext multipleUpdateStatement() { + return getRuleContext(MultipleUpdateStatementContext.class,0); + } + public UpdateStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_updateStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUpdateStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUpdateStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUpdateStatement(this); + else return visitor.visitChildren(this); + } + } + + public final UpdateStatementContext updateStatement() throws RecognitionException { + UpdateStatementContext _localctx = new UpdateStatementContext(_ctx, getState()); + enterRule(_localctx, 180, RULE_updateStatement); + try { + setState(3042); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,413,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(3040); + singleUpdateStatement(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(3041); + multipleUpdateStatement(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InsertStatementValueContext extends ParserRuleContext { + public Token insertFormat; + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public List LR_BRACKET() { return getTokens(MySqlParser.LR_BRACKET); } + public TerminalNode LR_BRACKET(int i) { + return getToken(MySqlParser.LR_BRACKET, i); + } + public List RR_BRACKET() { return getTokens(MySqlParser.RR_BRACKET); } + public TerminalNode RR_BRACKET(int i) { + return getToken(MySqlParser.RR_BRACKET, i); + } + public TerminalNode VALUES() { return getToken(MySqlParser.VALUES, 0); } + public TerminalNode VALUE() { return getToken(MySqlParser.VALUE, 0); } + public List expressionsWithDefaults() { + return getRuleContexts(ExpressionsWithDefaultsContext.class); + } + public ExpressionsWithDefaultsContext expressionsWithDefaults(int i) { + return getRuleContext(ExpressionsWithDefaultsContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public InsertStatementValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_insertStatementValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterInsertStatementValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitInsertStatementValue(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitInsertStatementValue(this); + else return visitor.visitChildren(this); + } + } + + public final InsertStatementValueContext insertStatementValue() throws RecognitionException { + InsertStatementValueContext _localctx = new InsertStatementValueContext(_ctx, getState()); + enterRule(_localctx, 182, RULE_insertStatementValue); + int _la; + try { + setState(3062); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SELECT: + case LR_BRACKET: + enterOuterAlt(_localctx, 1); + { + setState(3044); + selectStatement(); + } + break; + case VALUES: + case VALUE: + enterOuterAlt(_localctx, 2); + { + setState(3045); + ((InsertStatementValueContext)_localctx).insertFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==VALUES || _la==VALUE) ) { + ((InsertStatementValueContext)_localctx).insertFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(3046); + match(LR_BRACKET); + setState(3048); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CASE) | (1L << CAST) | (1L << CONVERT) | (1L << CURRENT) | (1L << CURRENT_USER) | (1L << DATABASE) | (1L << DEFAULT) | (1L << DIAGNOSTICS) | (1L << EXISTS) | (1L << FALSE))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (IF - 69)) | (1L << (INSERT - 69)) | (1L << (INTERVAL - 69)) | (1L << (LEFT - 69)) | (1L << (NOT - 69)) | (1L << (NULL_LITERAL - 69)) | (1L << (NUMBER - 69)) | (1L << (REPLACE - 69)))) != 0) || ((((_la - 133)) & ~0x3f) == 0 && ((1L << (_la - 133)) & ((1L << (RIGHT - 133)) | (1L << (STACKED - 133)) | (1L << (TRUE - 133)) | (1L << (VALUES - 133)))) != 0) || ((((_la - 199)) & ~0x3f) == 0 && ((1L << (_la - 199)) & ((1L << (DATE - 199)) | (1L << (TIME - 199)) | (1L << (TIMESTAMP - 199)) | (1L << (DATETIME - 199)) | (1L << (YEAR - 199)) | (1L << (CHAR - 199)) | (1L << (BINARY - 199)) | (1L << (TEXT - 199)) | (1L << (ENUM - 199)) | (1L << (SERIAL - 199)) | (1L << (AVG - 199)) | (1L << (BIT_AND - 199)) | (1L << (BIT_OR - 199)) | (1L << (BIT_XOR - 199)) | (1L << (COUNT - 199)) | (1L << (GROUP_CONCAT - 199)) | (1L << (MAX - 199)) | (1L << (MIN - 199)) | (1L << (STD - 199)) | (1L << (STDDEV - 199)) | (1L << (STDDEV_POP - 199)) | (1L << (STDDEV_SAMP - 199)) | (1L << (SUM - 199)) | (1L << (VAR_POP - 199)) | (1L << (VAR_SAMP - 199)) | (1L << (VARIANCE - 199)) | (1L << (CURRENT_DATE - 199)) | (1L << (CURRENT_TIME - 199)) | (1L << (CURRENT_TIMESTAMP - 199)) | (1L << (LOCALTIME - 199)) | (1L << (CURDATE - 199)) | (1L << (CURTIME - 199)) | (1L << (DATE_ADD - 199)) | (1L << (DATE_SUB - 199)) | (1L << (EXTRACT - 199)) | (1L << (LOCALTIMESTAMP - 199)) | (1L << (NOW - 199)) | (1L << (POSITION - 199)))) != 0) || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & ((1L << (SUBSTR - 263)) | (1L << (SUBSTRING - 263)) | (1L << (SYSDATE - 263)) | (1L << (TRIM - 263)) | (1L << (UTC_DATE - 263)) | (1L << (UTC_TIME - 263)) | (1L << (UTC_TIMESTAMP - 263)) | (1L << (ACCOUNT - 263)) | (1L << (ACTION - 263)) | (1L << (AFTER - 263)) | (1L << (AGGREGATE - 263)) | (1L << (ALGORITHM - 263)) | (1L << (ANY - 263)) | (1L << (AT - 263)) | (1L << (AUTHORS - 263)) | (1L << (AUTOCOMMIT - 263)) | (1L << (AUTOEXTEND_SIZE - 263)) | (1L << (AUTO_INCREMENT - 263)) | (1L << (AVG_ROW_LENGTH - 263)) | (1L << (BEGIN - 263)) | (1L << (BINLOG - 263)) | (1L << (BIT - 263)) | (1L << (BLOCK - 263)) | (1L << (BOOL - 263)) | (1L << (BOOLEAN - 263)) | (1L << (BTREE - 263)) | (1L << (CACHE - 263)) | (1L << (CASCADED - 263)) | (1L << (CHAIN - 263)) | (1L << (CHANGED - 263)) | (1L << (CHANNEL - 263)) | (1L << (CHECKSUM - 263)) | (1L << (PAGE_CHECKSUM - 263)) | (1L << (CIPHER - 263)) | (1L << (CLASS_ORIGIN - 263)) | (1L << (CLIENT - 263)) | (1L << (CLOSE - 263)) | (1L << (COALESCE - 263)) | (1L << (CODE - 263)) | (1L << (COLUMNS - 263)) | (1L << (COLUMN_FORMAT - 263)) | (1L << (COLUMN_NAME - 263)) | (1L << (COMMENT - 263)) | (1L << (COMMIT - 263)) | (1L << (COMPACT - 263)) | (1L << (COMPLETION - 263)) | (1L << (COMPRESSED - 263)) | (1L << (COMPRESSION - 263)) | (1L << (CONCURRENT - 263)) | (1L << (CONNECTION - 263)) | (1L << (CONSISTENT - 263)) | (1L << (CONSTRAINT_CATALOG - 263)) | (1L << (CONSTRAINT_SCHEMA - 263)) | (1L << (CONSTRAINT_NAME - 263)) | (1L << (CONTAINS - 263)) | (1L << (CONTEXT - 263)) | (1L << (CONTRIBUTORS - 263)) | (1L << (COPY - 263)) | (1L << (CPU - 263)) | (1L << (CURSOR_NAME - 263)) | (1L << (DATA - 263)) | (1L << (DATAFILE - 263)) | (1L << (DEALLOCATE - 263)) | (1L << (DEFAULT_AUTH - 263)))) != 0) || ((((_la - 327)) & ~0x3f) == 0 && ((1L << (_la - 327)) & ((1L << (DEFINER - 327)) | (1L << (DELAY_KEY_WRITE - 327)) | (1L << (DES_KEY_FILE - 327)) | (1L << (DIRECTORY - 327)) | (1L << (DISABLE - 327)) | (1L << (DISCARD - 327)) | (1L << (DISK - 327)) | (1L << (DO - 327)) | (1L << (DUMPFILE - 327)) | (1L << (DUPLICATE - 327)) | (1L << (DYNAMIC - 327)) | (1L << (ENABLE - 327)) | (1L << (ENCRYPTION - 327)) | (1L << (END - 327)) | (1L << (ENDS - 327)) | (1L << (ENGINE - 327)) | (1L << (ENGINES - 327)) | (1L << (ERROR - 327)) | (1L << (ERRORS - 327)) | (1L << (ESCAPE - 327)) | (1L << (EVEN - 327)) | (1L << (EVENT - 327)) | (1L << (EVENTS - 327)) | (1L << (EVERY - 327)) | (1L << (EXCHANGE - 327)) | (1L << (EXCLUSIVE - 327)) | (1L << (EXPIRE - 327)) | (1L << (EXPORT - 327)) | (1L << (EXTENDED - 327)) | (1L << (EXTENT_SIZE - 327)) | (1L << (FAST - 327)) | (1L << (FAULTS - 327)) | (1L << (FIELDS - 327)) | (1L << (FILE_BLOCK_SIZE - 327)) | (1L << (FILTER - 327)) | (1L << (FIRST - 327)) | (1L << (FIXED - 327)) | (1L << (FLUSH - 327)) | (1L << (FOLLOWS - 327)) | (1L << (FOUND - 327)) | (1L << (FULL - 327)) | (1L << (FUNCTION - 327)) | (1L << (GENERAL - 327)) | (1L << (GLOBAL - 327)) | (1L << (GRANTS - 327)) | (1L << (GROUP_REPLICATION - 327)) | (1L << (HANDLER - 327)) | (1L << (HASH - 327)) | (1L << (HELP - 327)) | (1L << (HOST - 327)) | (1L << (HOSTS - 327)) | (1L << (IDENTIFIED - 327)) | (1L << (IGNORE_SERVER_IDS - 327)) | (1L << (IMPORT - 327)) | (1L << (INDEXES - 327)) | (1L << (INITIAL_SIZE - 327)) | (1L << (INPLACE - 327)) | (1L << (INSERT_METHOD - 327)) | (1L << (INSTALL - 327)) | (1L << (INSTANCE - 327)) | (1L << (INVISIBLE - 327)) | (1L << (INVOKER - 327)) | (1L << (IO - 327)) | (1L << (IO_THREAD - 327)))) != 0) || ((((_la - 391)) & ~0x3f) == 0 && ((1L << (_la - 391)) & ((1L << (IPC - 391)) | (1L << (ISOLATION - 391)) | (1L << (ISSUER - 391)) | (1L << (JSON - 391)) | (1L << (KEY_BLOCK_SIZE - 391)) | (1L << (LANGUAGE - 391)) | (1L << (LAST - 391)) | (1L << (LEAVES - 391)) | (1L << (LESS - 391)) | (1L << (LEVEL - 391)) | (1L << (LIST - 391)) | (1L << (LOCAL - 391)) | (1L << (LOGFILE - 391)) | (1L << (LOGS - 391)) | (1L << (MASTER - 391)) | (1L << (MASTER_AUTO_POSITION - 391)) | (1L << (MASTER_CONNECT_RETRY - 391)) | (1L << (MASTER_DELAY - 391)) | (1L << (MASTER_HEARTBEAT_PERIOD - 391)) | (1L << (MASTER_HOST - 391)) | (1L << (MASTER_LOG_FILE - 391)) | (1L << (MASTER_LOG_POS - 391)) | (1L << (MASTER_PASSWORD - 391)) | (1L << (MASTER_PORT - 391)) | (1L << (MASTER_RETRY_COUNT - 391)) | (1L << (MASTER_SSL - 391)) | (1L << (MASTER_SSL_CA - 391)) | (1L << (MASTER_SSL_CAPATH - 391)) | (1L << (MASTER_SSL_CERT - 391)) | (1L << (MASTER_SSL_CIPHER - 391)) | (1L << (MASTER_SSL_CRL - 391)) | (1L << (MASTER_SSL_CRLPATH - 391)) | (1L << (MASTER_SSL_KEY - 391)) | (1L << (MASTER_TLS_VERSION - 391)) | (1L << (MASTER_USER - 391)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 391)) | (1L << (MAX_QUERIES_PER_HOUR - 391)) | (1L << (MAX_ROWS - 391)) | (1L << (MAX_SIZE - 391)) | (1L << (MAX_UPDATES_PER_HOUR - 391)) | (1L << (MAX_USER_CONNECTIONS - 391)) | (1L << (MEDIUM - 391)) | (1L << (MERGE - 391)) | (1L << (MESSAGE_TEXT - 391)) | (1L << (MID - 391)) | (1L << (MIGRATE - 391)) | (1L << (MIN_ROWS - 391)) | (1L << (MODE - 391)) | (1L << (MODIFY - 391)) | (1L << (MUTEX - 391)) | (1L << (MYSQL - 391)) | (1L << (MYSQL_ERRNO - 391)) | (1L << (NAME - 391)) | (1L << (NAMES - 391)) | (1L << (NCHAR - 391)) | (1L << (NEVER - 391)) | (1L << (NEXT - 391)) | (1L << (NO - 391)) | (1L << (NODEGROUP - 391)) | (1L << (NONE - 391)) | (1L << (OFFLINE - 391)) | (1L << (OFFSET - 391)))) != 0) || ((((_la - 455)) & ~0x3f) == 0 && ((1L << (_la - 455)) & ((1L << (OJ - 455)) | (1L << (OLD_PASSWORD - 455)) | (1L << (ONE - 455)) | (1L << (ONLINE - 455)) | (1L << (ONLY - 455)) | (1L << (OPEN - 455)) | (1L << (OPTIMIZER_COSTS - 455)) | (1L << (OPTIONS - 455)) | (1L << (OWNER - 455)) | (1L << (PACK_KEYS - 455)) | (1L << (PAGE - 455)) | (1L << (PARSER - 455)) | (1L << (PARTIAL - 455)) | (1L << (PARTITIONING - 455)) | (1L << (PARTITIONS - 455)) | (1L << (PASSWORD - 455)) | (1L << (PHASE - 455)) | (1L << (PLUGIN - 455)) | (1L << (PLUGIN_DIR - 455)) | (1L << (PLUGINS - 455)) | (1L << (PORT - 455)) | (1L << (PRECEDES - 455)) | (1L << (PREPARE - 455)) | (1L << (PRESERVE - 455)) | (1L << (PREV - 455)) | (1L << (PROCESSLIST - 455)) | (1L << (PROFILE - 455)) | (1L << (PROFILES - 455)) | (1L << (PROXY - 455)) | (1L << (QUERY - 455)) | (1L << (QUICK - 455)) | (1L << (REBUILD - 455)) | (1L << (RECOVER - 455)) | (1L << (REDO_BUFFER_SIZE - 455)) | (1L << (REDUNDANT - 455)) | (1L << (RELAY - 455)) | (1L << (RELAY_LOG_FILE - 455)) | (1L << (RELAY_LOG_POS - 455)) | (1L << (RELAYLOG - 455)) | (1L << (REMOVE - 455)) | (1L << (REORGANIZE - 455)) | (1L << (REPAIR - 455)) | (1L << (REPLICATE_DO_DB - 455)) | (1L << (REPLICATE_DO_TABLE - 455)) | (1L << (REPLICATE_IGNORE_DB - 455)) | (1L << (REPLICATE_IGNORE_TABLE - 455)) | (1L << (REPLICATE_REWRITE_DB - 455)) | (1L << (REPLICATE_WILD_DO_TABLE - 455)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 455)) | (1L << (REPLICATION - 455)) | (1L << (RESET - 455)) | (1L << (RESUME - 455)) | (1L << (RETURNED_SQLSTATE - 455)) | (1L << (RETURNS - 455)) | (1L << (ROLLBACK - 455)) | (1L << (ROLLUP - 455)) | (1L << (ROTATE - 455)) | (1L << (ROW - 455)) | (1L << (ROWS - 455)) | (1L << (ROW_FORMAT - 455)) | (1L << (SAVEPOINT - 455)) | (1L << (SCHEDULE - 455)) | (1L << (SECURITY - 455)))) != 0) || ((((_la - 519)) & ~0x3f) == 0 && ((1L << (_la - 519)) & ((1L << (SERVER - 519)) | (1L << (SESSION - 519)) | (1L << (SHARE - 519)) | (1L << (SHARED - 519)) | (1L << (SIGNED - 519)) | (1L << (SIMPLE - 519)) | (1L << (SLAVE - 519)) | (1L << (SLOW - 519)) | (1L << (SNAPSHOT - 519)) | (1L << (SOCKET - 519)) | (1L << (SOME - 519)) | (1L << (SONAME - 519)) | (1L << (SOUNDS - 519)) | (1L << (SOURCE - 519)) | (1L << (SQL_AFTER_GTIDS - 519)) | (1L << (SQL_AFTER_MTS_GAPS - 519)) | (1L << (SQL_BEFORE_GTIDS - 519)) | (1L << (SQL_BUFFER_RESULT - 519)) | (1L << (SQL_CACHE - 519)) | (1L << (SQL_NO_CACHE - 519)) | (1L << (SQL_THREAD - 519)) | (1L << (START - 519)) | (1L << (STARTS - 519)) | (1L << (STATS_AUTO_RECALC - 519)) | (1L << (STATS_PERSISTENT - 519)) | (1L << (STATS_SAMPLE_PAGES - 519)) | (1L << (STATUS - 519)) | (1L << (STOP - 519)) | (1L << (STORAGE - 519)) | (1L << (STRING - 519)) | (1L << (SUBCLASS_ORIGIN - 519)) | (1L << (SUBJECT - 519)) | (1L << (SUBPARTITION - 519)) | (1L << (SUBPARTITIONS - 519)) | (1L << (SUSPEND - 519)) | (1L << (SWAPS - 519)) | (1L << (SWITCHES - 519)) | (1L << (TABLE_NAME - 519)) | (1L << (TABLESPACE - 519)) | (1L << (TEMPORARY - 519)) | (1L << (TEMPTABLE - 519)) | (1L << (THAN - 519)) | (1L << (TRADITIONAL - 519)) | (1L << (TRANSACTION - 519)) | (1L << (TRIGGERS - 519)) | (1L << (TRUNCATE - 519)) | (1L << (UNDEFINED - 519)) | (1L << (UNDOFILE - 519)) | (1L << (UNDO_BUFFER_SIZE - 519)) | (1L << (UNINSTALL - 519)) | (1L << (UNKNOWN - 519)) | (1L << (UNTIL - 519)) | (1L << (UPGRADE - 519)) | (1L << (USER - 519)) | (1L << (USE_FRM - 519)) | (1L << (USER_RESOURCES - 519)) | (1L << (VALIDATION - 519)) | (1L << (VALUE - 519)) | (1L << (VARIABLES - 519)) | (1L << (VIEW - 519)) | (1L << (VISIBLE - 519)))) != 0) || ((((_la - 583)) & ~0x3f) == 0 && ((1L << (_la - 583)) & ((1L << (WAIT - 583)) | (1L << (WARNINGS - 583)) | (1L << (WITHOUT - 583)) | (1L << (WORK - 583)) | (1L << (WRAPPER - 583)) | (1L << (X509 - 583)) | (1L << (XA - 583)) | (1L << (XML - 583)) | (1L << (INTERNAL - 583)) | (1L << (QUARTER - 583)) | (1L << (MONTH - 583)) | (1L << (DAY - 583)) | (1L << (HOUR - 583)) | (1L << (MINUTE - 583)) | (1L << (WEEK - 583)) | (1L << (SECOND - 583)) | (1L << (MICROSECOND - 583)) | (1L << (TABLES - 583)) | (1L << (ROUTINE - 583)) | (1L << (EXECUTE - 583)) | (1L << (FILE - 583)) | (1L << (PROCESS - 583)) | (1L << (RELOAD - 583)) | (1L << (SHUTDOWN - 583)) | (1L << (SUPER - 583)) | (1L << (PRIVILEGES - 583)) | (1L << (SESSION_VARIABLES_ADMIN - 583)) | (1L << (ARMSCII8 - 583)) | (1L << (ASCII - 583)) | (1L << (BIG5 - 583)) | (1L << (CP1250 - 583)) | (1L << (CP1251 - 583)) | (1L << (CP1256 - 583)) | (1L << (CP1257 - 583)) | (1L << (CP850 - 583)))) != 0) || ((((_la - 647)) & ~0x3f) == 0 && ((1L << (_la - 647)) & ((1L << (CP852 - 647)) | (1L << (CP866 - 647)) | (1L << (CP932 - 647)) | (1L << (DEC8 - 647)) | (1L << (EUCJPMS - 647)) | (1L << (EUCKR - 647)) | (1L << (GB2312 - 647)) | (1L << (GBK - 647)) | (1L << (GEOSTD8 - 647)) | (1L << (GREEK - 647)) | (1L << (HEBREW - 647)) | (1L << (HP8 - 647)) | (1L << (KEYBCS2 - 647)) | (1L << (KOI8R - 647)) | (1L << (KOI8U - 647)) | (1L << (LATIN1 - 647)) | (1L << (LATIN2 - 647)) | (1L << (LATIN5 - 647)) | (1L << (LATIN7 - 647)) | (1L << (MACCE - 647)) | (1L << (MACROMAN - 647)) | (1L << (SJIS - 647)) | (1L << (SWE7 - 647)) | (1L << (TIS620 - 647)) | (1L << (UCS2 - 647)) | (1L << (UJIS - 647)) | (1L << (UTF16 - 647)) | (1L << (UTF16LE - 647)) | (1L << (UTF32 - 647)) | (1L << (UTF8 - 647)) | (1L << (UTF8MB3 - 647)) | (1L << (UTF8MB4 - 647)) | (1L << (ARCHIVE - 647)) | (1L << (BLACKHOLE - 647)) | (1L << (CSV - 647)) | (1L << (FEDERATED - 647)) | (1L << (INNODB - 647)) | (1L << (MEMORY - 647)) | (1L << (MRG_MYISAM - 647)) | (1L << (MYISAM - 647)) | (1L << (NDB - 647)) | (1L << (NDBCLUSTER - 647)) | (1L << (PERFORMANCE_SCHEMA - 647)) | (1L << (TOKUDB - 647)) | (1L << (REPEATABLE - 647)) | (1L << (COMMITTED - 647)) | (1L << (UNCOMMITTED - 647)) | (1L << (SERIALIZABLE - 647)) | (1L << (GEOMETRYCOLLECTION - 647)) | (1L << (LINESTRING - 647)) | (1L << (MULTILINESTRING - 647)) | (1L << (MULTIPOINT - 647)) | (1L << (MULTIPOLYGON - 647)) | (1L << (POINT - 647)) | (1L << (POLYGON - 647)) | (1L << (ABS - 647)) | (1L << (ACOS - 647)) | (1L << (ADDDATE - 647)) | (1L << (ADDTIME - 647)) | (1L << (AES_DECRYPT - 647)) | (1L << (AES_ENCRYPT - 647)) | (1L << (AREA - 647)))) != 0) || ((((_la - 711)) & ~0x3f) == 0 && ((1L << (_la - 711)) & ((1L << (ASBINARY - 711)) | (1L << (ASIN - 711)) | (1L << (ASTEXT - 711)) | (1L << (ASWKB - 711)) | (1L << (ASWKT - 711)) | (1L << (ASYMMETRIC_DECRYPT - 711)) | (1L << (ASYMMETRIC_DERIVE - 711)) | (1L << (ASYMMETRIC_ENCRYPT - 711)) | (1L << (ASYMMETRIC_SIGN - 711)) | (1L << (ASYMMETRIC_VERIFY - 711)) | (1L << (ATAN - 711)) | (1L << (ATAN2 - 711)) | (1L << (BENCHMARK - 711)) | (1L << (BIN - 711)) | (1L << (BIT_COUNT - 711)) | (1L << (BIT_LENGTH - 711)) | (1L << (BUFFER - 711)) | (1L << (CATALOG_NAME - 711)) | (1L << (CEIL - 711)) | (1L << (CEILING - 711)) | (1L << (CENTROID - 711)) | (1L << (CHARACTER_LENGTH - 711)) | (1L << (CHARSET - 711)) | (1L << (CHAR_LENGTH - 711)) | (1L << (COERCIBILITY - 711)) | (1L << (COLLATION - 711)) | (1L << (COMPRESS - 711)) | (1L << (CONCAT - 711)) | (1L << (CONCAT_WS - 711)) | (1L << (CONNECTION_ID - 711)) | (1L << (CONV - 711)) | (1L << (CONVERT_TZ - 711)) | (1L << (COS - 711)) | (1L << (COT - 711)) | (1L << (CRC32 - 711)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 711)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 711)) | (1L << (CREATE_DH_PARAMETERS - 711)) | (1L << (CREATE_DIGEST - 711)) | (1L << (CROSSES - 711)) | (1L << (DATEDIFF - 711)) | (1L << (DATE_FORMAT - 711)) | (1L << (DAYNAME - 711)) | (1L << (DAYOFMONTH - 711)) | (1L << (DAYOFWEEK - 711)) | (1L << (DAYOFYEAR - 711)) | (1L << (DECODE - 711)) | (1L << (DEGREES - 711)) | (1L << (DES_DECRYPT - 711)) | (1L << (DES_ENCRYPT - 711)) | (1L << (DIMENSION - 711)) | (1L << (DISJOINT - 711)) | (1L << (ELT - 711)) | (1L << (ENCODE - 711)) | (1L << (ENCRYPT - 711)) | (1L << (ENDPOINT - 711)) | (1L << (ENVELOPE - 711)) | (1L << (EQUALS - 711)) | (1L << (EXP - 711)) | (1L << (EXPORT_SET - 711)) | (1L << (EXTERIORRING - 711)) | (1L << (EXTRACTVALUE - 711)) | (1L << (FIELD - 711)) | (1L << (FIND_IN_SET - 711)))) != 0) || ((((_la - 775)) & ~0x3f) == 0 && ((1L << (_la - 775)) & ((1L << (FLOOR - 775)) | (1L << (FORMAT - 775)) | (1L << (FOUND_ROWS - 775)) | (1L << (FROM_BASE64 - 775)) | (1L << (FROM_DAYS - 775)) | (1L << (FROM_UNIXTIME - 775)) | (1L << (GEOMCOLLFROMTEXT - 775)) | (1L << (GEOMCOLLFROMWKB - 775)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 775)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 775)) | (1L << (GEOMETRYFROMTEXT - 775)) | (1L << (GEOMETRYFROMWKB - 775)) | (1L << (GEOMETRYN - 775)) | (1L << (GEOMETRYTYPE - 775)) | (1L << (GEOMFROMTEXT - 775)) | (1L << (GEOMFROMWKB - 775)) | (1L << (GET_FORMAT - 775)) | (1L << (GET_LOCK - 775)) | (1L << (GLENGTH - 775)) | (1L << (GREATEST - 775)) | (1L << (GTID_SUBSET - 775)) | (1L << (GTID_SUBTRACT - 775)) | (1L << (HEX - 775)) | (1L << (IFNULL - 775)) | (1L << (INET6_ATON - 775)) | (1L << (INET6_NTOA - 775)) | (1L << (INET_ATON - 775)) | (1L << (INET_NTOA - 775)) | (1L << (INSTR - 775)) | (1L << (INTERIORRINGN - 775)) | (1L << (INTERSECTS - 775)) | (1L << (ISCLOSED - 775)) | (1L << (ISEMPTY - 775)) | (1L << (ISNULL - 775)) | (1L << (ISSIMPLE - 775)) | (1L << (IS_FREE_LOCK - 775)) | (1L << (IS_IPV4 - 775)) | (1L << (IS_IPV4_COMPAT - 775)) | (1L << (IS_IPV4_MAPPED - 775)) | (1L << (IS_IPV6 - 775)) | (1L << (IS_USED_LOCK - 775)) | (1L << (LAST_INSERT_ID - 775)) | (1L << (LCASE - 775)) | (1L << (LEAST - 775)) | (1L << (LENGTH - 775)) | (1L << (LINEFROMTEXT - 775)) | (1L << (LINEFROMWKB - 775)) | (1L << (LINESTRINGFROMTEXT - 775)) | (1L << (LINESTRINGFROMWKB - 775)) | (1L << (LN - 775)) | (1L << (LOAD_FILE - 775)) | (1L << (LOCATE - 775)) | (1L << (LOG - 775)) | (1L << (LOG10 - 775)) | (1L << (LOG2 - 775)) | (1L << (LOWER - 775)) | (1L << (LPAD - 775)) | (1L << (LTRIM - 775)) | (1L << (MAKEDATE - 775)) | (1L << (MAKETIME - 775)) | (1L << (MAKE_SET - 775)) | (1L << (MASTER_POS_WAIT - 775)) | (1L << (MBRCONTAINS - 775)) | (1L << (MBRDISJOINT - 775)))) != 0) || ((((_la - 839)) & ~0x3f) == 0 && ((1L << (_la - 839)) & ((1L << (MBREQUAL - 839)) | (1L << (MBRINTERSECTS - 839)) | (1L << (MBROVERLAPS - 839)) | (1L << (MBRTOUCHES - 839)) | (1L << (MBRWITHIN - 839)) | (1L << (MD5 - 839)) | (1L << (MLINEFROMTEXT - 839)) | (1L << (MLINEFROMWKB - 839)) | (1L << (MONTHNAME - 839)) | (1L << (MPOINTFROMTEXT - 839)) | (1L << (MPOINTFROMWKB - 839)) | (1L << (MPOLYFROMTEXT - 839)) | (1L << (MPOLYFROMWKB - 839)) | (1L << (MULTILINESTRINGFROMTEXT - 839)) | (1L << (MULTILINESTRINGFROMWKB - 839)) | (1L << (MULTIPOINTFROMTEXT - 839)) | (1L << (MULTIPOINTFROMWKB - 839)) | (1L << (MULTIPOLYGONFROMTEXT - 839)) | (1L << (MULTIPOLYGONFROMWKB - 839)) | (1L << (NAME_CONST - 839)) | (1L << (NULLIF - 839)) | (1L << (NUMGEOMETRIES - 839)) | (1L << (NUMINTERIORRINGS - 839)) | (1L << (NUMPOINTS - 839)) | (1L << (OCT - 839)) | (1L << (OCTET_LENGTH - 839)) | (1L << (ORD - 839)) | (1L << (OVERLAPS - 839)) | (1L << (PERIOD_ADD - 839)) | (1L << (PERIOD_DIFF - 839)) | (1L << (PI - 839)) | (1L << (POINTFROMTEXT - 839)) | (1L << (POINTFROMWKB - 839)) | (1L << (POINTN - 839)) | (1L << (POLYFROMTEXT - 839)) | (1L << (POLYFROMWKB - 839)) | (1L << (POLYGONFROMTEXT - 839)) | (1L << (POLYGONFROMWKB - 839)) | (1L << (POW - 839)) | (1L << (POWER - 839)) | (1L << (QUOTE - 839)) | (1L << (RADIANS - 839)) | (1L << (RAND - 839)) | (1L << (RANDOM_BYTES - 839)) | (1L << (RELEASE_LOCK - 839)) | (1L << (REVERSE - 839)) | (1L << (ROUND - 839)) | (1L << (ROW_COUNT - 839)) | (1L << (RPAD - 839)) | (1L << (RTRIM - 839)) | (1L << (SEC_TO_TIME - 839)) | (1L << (SESSION_USER - 839)) | (1L << (SHA - 839)) | (1L << (SHA1 - 839)) | (1L << (SHA2 - 839)) | (1L << (SCHEMA_NAME - 839)) | (1L << (SIGN - 839)) | (1L << (SIN - 839)) | (1L << (SLEEP - 839)) | (1L << (SOUNDEX - 839)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 839)) | (1L << (SQRT - 839)) | (1L << (SRID - 839)) | (1L << (STARTPOINT - 839)))) != 0) || ((((_la - 903)) & ~0x3f) == 0 && ((1L << (_la - 903)) & ((1L << (STRCMP - 903)) | (1L << (STR_TO_DATE - 903)) | (1L << (ST_AREA - 903)) | (1L << (ST_ASBINARY - 903)) | (1L << (ST_ASTEXT - 903)) | (1L << (ST_ASWKB - 903)) | (1L << (ST_ASWKT - 903)) | (1L << (ST_BUFFER - 903)) | (1L << (ST_CENTROID - 903)) | (1L << (ST_CONTAINS - 903)) | (1L << (ST_CROSSES - 903)) | (1L << (ST_DIFFERENCE - 903)) | (1L << (ST_DIMENSION - 903)) | (1L << (ST_DISJOINT - 903)) | (1L << (ST_DISTANCE - 903)) | (1L << (ST_ENDPOINT - 903)) | (1L << (ST_ENVELOPE - 903)) | (1L << (ST_EQUALS - 903)) | (1L << (ST_EXTERIORRING - 903)) | (1L << (ST_GEOMCOLLFROMTEXT - 903)) | (1L << (ST_GEOMCOLLFROMTXT - 903)) | (1L << (ST_GEOMCOLLFROMWKB - 903)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 903)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 903)) | (1L << (ST_GEOMETRYFROMTEXT - 903)) | (1L << (ST_GEOMETRYFROMWKB - 903)) | (1L << (ST_GEOMETRYN - 903)) | (1L << (ST_GEOMETRYTYPE - 903)) | (1L << (ST_GEOMFROMTEXT - 903)) | (1L << (ST_GEOMFROMWKB - 903)) | (1L << (ST_INTERIORRINGN - 903)) | (1L << (ST_INTERSECTION - 903)) | (1L << (ST_INTERSECTS - 903)) | (1L << (ST_ISCLOSED - 903)) | (1L << (ST_ISEMPTY - 903)) | (1L << (ST_ISSIMPLE - 903)) | (1L << (ST_LINEFROMTEXT - 903)) | (1L << (ST_LINEFROMWKB - 903)) | (1L << (ST_LINESTRINGFROMTEXT - 903)) | (1L << (ST_LINESTRINGFROMWKB - 903)) | (1L << (ST_NUMGEOMETRIES - 903)) | (1L << (ST_NUMINTERIORRING - 903)) | (1L << (ST_NUMINTERIORRINGS - 903)) | (1L << (ST_NUMPOINTS - 903)) | (1L << (ST_OVERLAPS - 903)) | (1L << (ST_POINTFROMTEXT - 903)) | (1L << (ST_POINTFROMWKB - 903)) | (1L << (ST_POINTN - 903)) | (1L << (ST_POLYFROMTEXT - 903)) | (1L << (ST_POLYFROMWKB - 903)) | (1L << (ST_POLYGONFROMTEXT - 903)) | (1L << (ST_POLYGONFROMWKB - 903)) | (1L << (ST_SRID - 903)) | (1L << (ST_STARTPOINT - 903)) | (1L << (ST_SYMDIFFERENCE - 903)) | (1L << (ST_TOUCHES - 903)) | (1L << (ST_UNION - 903)) | (1L << (ST_WITHIN - 903)) | (1L << (ST_X - 903)) | (1L << (ST_Y - 903)) | (1L << (SUBDATE - 903)) | (1L << (SUBSTRING_INDEX - 903)) | (1L << (SUBTIME - 903)) | (1L << (SYSTEM_USER - 903)))) != 0) || ((((_la - 967)) & ~0x3f) == 0 && ((1L << (_la - 967)) & ((1L << (TAN - 967)) | (1L << (TIMEDIFF - 967)) | (1L << (TIMESTAMPADD - 967)) | (1L << (TIMESTAMPDIFF - 967)) | (1L << (TIME_FORMAT - 967)) | (1L << (TIME_TO_SEC - 967)) | (1L << (TOUCHES - 967)) | (1L << (TO_BASE64 - 967)) | (1L << (TO_DAYS - 967)) | (1L << (TO_SECONDS - 967)) | (1L << (UCASE - 967)) | (1L << (UNCOMPRESS - 967)) | (1L << (UNCOMPRESSED_LENGTH - 967)) | (1L << (UNHEX - 967)) | (1L << (UNIX_TIMESTAMP - 967)) | (1L << (UPDATEXML - 967)) | (1L << (UPPER - 967)) | (1L << (UUID - 967)) | (1L << (UUID_SHORT - 967)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 967)) | (1L << (VERSION - 967)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 967)) | (1L << (WEEKDAY - 967)) | (1L << (WEEKOFYEAR - 967)) | (1L << (WEIGHT_STRING - 967)) | (1L << (WITHIN - 967)) | (1L << (YEARWEEK - 967)) | (1L << (Y_FUNCTION - 967)) | (1L << (X_FUNCTION - 967)) | (1L << (PLUS - 967)) | (1L << (MINUS - 967)) | (1L << (EXCLAMATION_SYMBOL - 967)) | (1L << (BIT_NOT_OP - 967)) | (1L << (LR_BRACKET - 967)) | (1L << (ZERO_DECIMAL - 967)) | (1L << (ONE_DECIMAL - 967)) | (1L << (TWO_DECIMAL - 967)))) != 0) || ((((_la - 1034)) & ~0x3f) == 0 && ((1L << (_la - 1034)) & ((1L << (CHARSET_REVERSE_QOUTE_STRING - 1034)) | (1L << (START_NATIONAL_STRING_LITERAL - 1034)) | (1L << (STRING_LITERAL - 1034)) | (1L << (DECIMAL_LITERAL - 1034)) | (1L << (HEXADECIMAL_LITERAL - 1034)) | (1L << (REAL_LITERAL - 1034)) | (1L << (NULL_SPEC_LITERAL - 1034)) | (1L << (BIT_STRING - 1034)) | (1L << (STRING_CHARSET_NAME - 1034)) | (1L << (ID - 1034)) | (1L << (REVERSE_QUOTE_ID - 1034)) | (1L << (LOCAL_ID - 1034)) | (1L << (GLOBAL_ID - 1034)))) != 0)) { + { + setState(3047); + expressionsWithDefaults(); + } + } + + setState(3050); + match(RR_BRACKET); + setState(3059); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3051); + match(COMMA); + setState(3052); + match(LR_BRACKET); + setState(3054); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CASE) | (1L << CAST) | (1L << CONVERT) | (1L << CURRENT) | (1L << CURRENT_USER) | (1L << DATABASE) | (1L << DEFAULT) | (1L << DIAGNOSTICS) | (1L << EXISTS) | (1L << FALSE))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (IF - 69)) | (1L << (INSERT - 69)) | (1L << (INTERVAL - 69)) | (1L << (LEFT - 69)) | (1L << (NOT - 69)) | (1L << (NULL_LITERAL - 69)) | (1L << (NUMBER - 69)) | (1L << (REPLACE - 69)))) != 0) || ((((_la - 133)) & ~0x3f) == 0 && ((1L << (_la - 133)) & ((1L << (RIGHT - 133)) | (1L << (STACKED - 133)) | (1L << (TRUE - 133)) | (1L << (VALUES - 133)))) != 0) || ((((_la - 199)) & ~0x3f) == 0 && ((1L << (_la - 199)) & ((1L << (DATE - 199)) | (1L << (TIME - 199)) | (1L << (TIMESTAMP - 199)) | (1L << (DATETIME - 199)) | (1L << (YEAR - 199)) | (1L << (CHAR - 199)) | (1L << (BINARY - 199)) | (1L << (TEXT - 199)) | (1L << (ENUM - 199)) | (1L << (SERIAL - 199)) | (1L << (AVG - 199)) | (1L << (BIT_AND - 199)) | (1L << (BIT_OR - 199)) | (1L << (BIT_XOR - 199)) | (1L << (COUNT - 199)) | (1L << (GROUP_CONCAT - 199)) | (1L << (MAX - 199)) | (1L << (MIN - 199)) | (1L << (STD - 199)) | (1L << (STDDEV - 199)) | (1L << (STDDEV_POP - 199)) | (1L << (STDDEV_SAMP - 199)) | (1L << (SUM - 199)) | (1L << (VAR_POP - 199)) | (1L << (VAR_SAMP - 199)) | (1L << (VARIANCE - 199)) | (1L << (CURRENT_DATE - 199)) | (1L << (CURRENT_TIME - 199)) | (1L << (CURRENT_TIMESTAMP - 199)) | (1L << (LOCALTIME - 199)) | (1L << (CURDATE - 199)) | (1L << (CURTIME - 199)) | (1L << (DATE_ADD - 199)) | (1L << (DATE_SUB - 199)) | (1L << (EXTRACT - 199)) | (1L << (LOCALTIMESTAMP - 199)) | (1L << (NOW - 199)) | (1L << (POSITION - 199)))) != 0) || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & ((1L << (SUBSTR - 263)) | (1L << (SUBSTRING - 263)) | (1L << (SYSDATE - 263)) | (1L << (TRIM - 263)) | (1L << (UTC_DATE - 263)) | (1L << (UTC_TIME - 263)) | (1L << (UTC_TIMESTAMP - 263)) | (1L << (ACCOUNT - 263)) | (1L << (ACTION - 263)) | (1L << (AFTER - 263)) | (1L << (AGGREGATE - 263)) | (1L << (ALGORITHM - 263)) | (1L << (ANY - 263)) | (1L << (AT - 263)) | (1L << (AUTHORS - 263)) | (1L << (AUTOCOMMIT - 263)) | (1L << (AUTOEXTEND_SIZE - 263)) | (1L << (AUTO_INCREMENT - 263)) | (1L << (AVG_ROW_LENGTH - 263)) | (1L << (BEGIN - 263)) | (1L << (BINLOG - 263)) | (1L << (BIT - 263)) | (1L << (BLOCK - 263)) | (1L << (BOOL - 263)) | (1L << (BOOLEAN - 263)) | (1L << (BTREE - 263)) | (1L << (CACHE - 263)) | (1L << (CASCADED - 263)) | (1L << (CHAIN - 263)) | (1L << (CHANGED - 263)) | (1L << (CHANNEL - 263)) | (1L << (CHECKSUM - 263)) | (1L << (PAGE_CHECKSUM - 263)) | (1L << (CIPHER - 263)) | (1L << (CLASS_ORIGIN - 263)) | (1L << (CLIENT - 263)) | (1L << (CLOSE - 263)) | (1L << (COALESCE - 263)) | (1L << (CODE - 263)) | (1L << (COLUMNS - 263)) | (1L << (COLUMN_FORMAT - 263)) | (1L << (COLUMN_NAME - 263)) | (1L << (COMMENT - 263)) | (1L << (COMMIT - 263)) | (1L << (COMPACT - 263)) | (1L << (COMPLETION - 263)) | (1L << (COMPRESSED - 263)) | (1L << (COMPRESSION - 263)) | (1L << (CONCURRENT - 263)) | (1L << (CONNECTION - 263)) | (1L << (CONSISTENT - 263)) | (1L << (CONSTRAINT_CATALOG - 263)) | (1L << (CONSTRAINT_SCHEMA - 263)) | (1L << (CONSTRAINT_NAME - 263)) | (1L << (CONTAINS - 263)) | (1L << (CONTEXT - 263)) | (1L << (CONTRIBUTORS - 263)) | (1L << (COPY - 263)) | (1L << (CPU - 263)) | (1L << (CURSOR_NAME - 263)) | (1L << (DATA - 263)) | (1L << (DATAFILE - 263)) | (1L << (DEALLOCATE - 263)) | (1L << (DEFAULT_AUTH - 263)))) != 0) || ((((_la - 327)) & ~0x3f) == 0 && ((1L << (_la - 327)) & ((1L << (DEFINER - 327)) | (1L << (DELAY_KEY_WRITE - 327)) | (1L << (DES_KEY_FILE - 327)) | (1L << (DIRECTORY - 327)) | (1L << (DISABLE - 327)) | (1L << (DISCARD - 327)) | (1L << (DISK - 327)) | (1L << (DO - 327)) | (1L << (DUMPFILE - 327)) | (1L << (DUPLICATE - 327)) | (1L << (DYNAMIC - 327)) | (1L << (ENABLE - 327)) | (1L << (ENCRYPTION - 327)) | (1L << (END - 327)) | (1L << (ENDS - 327)) | (1L << (ENGINE - 327)) | (1L << (ENGINES - 327)) | (1L << (ERROR - 327)) | (1L << (ERRORS - 327)) | (1L << (ESCAPE - 327)) | (1L << (EVEN - 327)) | (1L << (EVENT - 327)) | (1L << (EVENTS - 327)) | (1L << (EVERY - 327)) | (1L << (EXCHANGE - 327)) | (1L << (EXCLUSIVE - 327)) | (1L << (EXPIRE - 327)) | (1L << (EXPORT - 327)) | (1L << (EXTENDED - 327)) | (1L << (EXTENT_SIZE - 327)) | (1L << (FAST - 327)) | (1L << (FAULTS - 327)) | (1L << (FIELDS - 327)) | (1L << (FILE_BLOCK_SIZE - 327)) | (1L << (FILTER - 327)) | (1L << (FIRST - 327)) | (1L << (FIXED - 327)) | (1L << (FLUSH - 327)) | (1L << (FOLLOWS - 327)) | (1L << (FOUND - 327)) | (1L << (FULL - 327)) | (1L << (FUNCTION - 327)) | (1L << (GENERAL - 327)) | (1L << (GLOBAL - 327)) | (1L << (GRANTS - 327)) | (1L << (GROUP_REPLICATION - 327)) | (1L << (HANDLER - 327)) | (1L << (HASH - 327)) | (1L << (HELP - 327)) | (1L << (HOST - 327)) | (1L << (HOSTS - 327)) | (1L << (IDENTIFIED - 327)) | (1L << (IGNORE_SERVER_IDS - 327)) | (1L << (IMPORT - 327)) | (1L << (INDEXES - 327)) | (1L << (INITIAL_SIZE - 327)) | (1L << (INPLACE - 327)) | (1L << (INSERT_METHOD - 327)) | (1L << (INSTALL - 327)) | (1L << (INSTANCE - 327)) | (1L << (INVISIBLE - 327)) | (1L << (INVOKER - 327)) | (1L << (IO - 327)) | (1L << (IO_THREAD - 327)))) != 0) || ((((_la - 391)) & ~0x3f) == 0 && ((1L << (_la - 391)) & ((1L << (IPC - 391)) | (1L << (ISOLATION - 391)) | (1L << (ISSUER - 391)) | (1L << (JSON - 391)) | (1L << (KEY_BLOCK_SIZE - 391)) | (1L << (LANGUAGE - 391)) | (1L << (LAST - 391)) | (1L << (LEAVES - 391)) | (1L << (LESS - 391)) | (1L << (LEVEL - 391)) | (1L << (LIST - 391)) | (1L << (LOCAL - 391)) | (1L << (LOGFILE - 391)) | (1L << (LOGS - 391)) | (1L << (MASTER - 391)) | (1L << (MASTER_AUTO_POSITION - 391)) | (1L << (MASTER_CONNECT_RETRY - 391)) | (1L << (MASTER_DELAY - 391)) | (1L << (MASTER_HEARTBEAT_PERIOD - 391)) | (1L << (MASTER_HOST - 391)) | (1L << (MASTER_LOG_FILE - 391)) | (1L << (MASTER_LOG_POS - 391)) | (1L << (MASTER_PASSWORD - 391)) | (1L << (MASTER_PORT - 391)) | (1L << (MASTER_RETRY_COUNT - 391)) | (1L << (MASTER_SSL - 391)) | (1L << (MASTER_SSL_CA - 391)) | (1L << (MASTER_SSL_CAPATH - 391)) | (1L << (MASTER_SSL_CERT - 391)) | (1L << (MASTER_SSL_CIPHER - 391)) | (1L << (MASTER_SSL_CRL - 391)) | (1L << (MASTER_SSL_CRLPATH - 391)) | (1L << (MASTER_SSL_KEY - 391)) | (1L << (MASTER_TLS_VERSION - 391)) | (1L << (MASTER_USER - 391)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 391)) | (1L << (MAX_QUERIES_PER_HOUR - 391)) | (1L << (MAX_ROWS - 391)) | (1L << (MAX_SIZE - 391)) | (1L << (MAX_UPDATES_PER_HOUR - 391)) | (1L << (MAX_USER_CONNECTIONS - 391)) | (1L << (MEDIUM - 391)) | (1L << (MERGE - 391)) | (1L << (MESSAGE_TEXT - 391)) | (1L << (MID - 391)) | (1L << (MIGRATE - 391)) | (1L << (MIN_ROWS - 391)) | (1L << (MODE - 391)) | (1L << (MODIFY - 391)) | (1L << (MUTEX - 391)) | (1L << (MYSQL - 391)) | (1L << (MYSQL_ERRNO - 391)) | (1L << (NAME - 391)) | (1L << (NAMES - 391)) | (1L << (NCHAR - 391)) | (1L << (NEVER - 391)) | (1L << (NEXT - 391)) | (1L << (NO - 391)) | (1L << (NODEGROUP - 391)) | (1L << (NONE - 391)) | (1L << (OFFLINE - 391)) | (1L << (OFFSET - 391)))) != 0) || ((((_la - 455)) & ~0x3f) == 0 && ((1L << (_la - 455)) & ((1L << (OJ - 455)) | (1L << (OLD_PASSWORD - 455)) | (1L << (ONE - 455)) | (1L << (ONLINE - 455)) | (1L << (ONLY - 455)) | (1L << (OPEN - 455)) | (1L << (OPTIMIZER_COSTS - 455)) | (1L << (OPTIONS - 455)) | (1L << (OWNER - 455)) | (1L << (PACK_KEYS - 455)) | (1L << (PAGE - 455)) | (1L << (PARSER - 455)) | (1L << (PARTIAL - 455)) | (1L << (PARTITIONING - 455)) | (1L << (PARTITIONS - 455)) | (1L << (PASSWORD - 455)) | (1L << (PHASE - 455)) | (1L << (PLUGIN - 455)) | (1L << (PLUGIN_DIR - 455)) | (1L << (PLUGINS - 455)) | (1L << (PORT - 455)) | (1L << (PRECEDES - 455)) | (1L << (PREPARE - 455)) | (1L << (PRESERVE - 455)) | (1L << (PREV - 455)) | (1L << (PROCESSLIST - 455)) | (1L << (PROFILE - 455)) | (1L << (PROFILES - 455)) | (1L << (PROXY - 455)) | (1L << (QUERY - 455)) | (1L << (QUICK - 455)) | (1L << (REBUILD - 455)) | (1L << (RECOVER - 455)) | (1L << (REDO_BUFFER_SIZE - 455)) | (1L << (REDUNDANT - 455)) | (1L << (RELAY - 455)) | (1L << (RELAY_LOG_FILE - 455)) | (1L << (RELAY_LOG_POS - 455)) | (1L << (RELAYLOG - 455)) | (1L << (REMOVE - 455)) | (1L << (REORGANIZE - 455)) | (1L << (REPAIR - 455)) | (1L << (REPLICATE_DO_DB - 455)) | (1L << (REPLICATE_DO_TABLE - 455)) | (1L << (REPLICATE_IGNORE_DB - 455)) | (1L << (REPLICATE_IGNORE_TABLE - 455)) | (1L << (REPLICATE_REWRITE_DB - 455)) | (1L << (REPLICATE_WILD_DO_TABLE - 455)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 455)) | (1L << (REPLICATION - 455)) | (1L << (RESET - 455)) | (1L << (RESUME - 455)) | (1L << (RETURNED_SQLSTATE - 455)) | (1L << (RETURNS - 455)) | (1L << (ROLLBACK - 455)) | (1L << (ROLLUP - 455)) | (1L << (ROTATE - 455)) | (1L << (ROW - 455)) | (1L << (ROWS - 455)) | (1L << (ROW_FORMAT - 455)) | (1L << (SAVEPOINT - 455)) | (1L << (SCHEDULE - 455)) | (1L << (SECURITY - 455)))) != 0) || ((((_la - 519)) & ~0x3f) == 0 && ((1L << (_la - 519)) & ((1L << (SERVER - 519)) | (1L << (SESSION - 519)) | (1L << (SHARE - 519)) | (1L << (SHARED - 519)) | (1L << (SIGNED - 519)) | (1L << (SIMPLE - 519)) | (1L << (SLAVE - 519)) | (1L << (SLOW - 519)) | (1L << (SNAPSHOT - 519)) | (1L << (SOCKET - 519)) | (1L << (SOME - 519)) | (1L << (SONAME - 519)) | (1L << (SOUNDS - 519)) | (1L << (SOURCE - 519)) | (1L << (SQL_AFTER_GTIDS - 519)) | (1L << (SQL_AFTER_MTS_GAPS - 519)) | (1L << (SQL_BEFORE_GTIDS - 519)) | (1L << (SQL_BUFFER_RESULT - 519)) | (1L << (SQL_CACHE - 519)) | (1L << (SQL_NO_CACHE - 519)) | (1L << (SQL_THREAD - 519)) | (1L << (START - 519)) | (1L << (STARTS - 519)) | (1L << (STATS_AUTO_RECALC - 519)) | (1L << (STATS_PERSISTENT - 519)) | (1L << (STATS_SAMPLE_PAGES - 519)) | (1L << (STATUS - 519)) | (1L << (STOP - 519)) | (1L << (STORAGE - 519)) | (1L << (STRING - 519)) | (1L << (SUBCLASS_ORIGIN - 519)) | (1L << (SUBJECT - 519)) | (1L << (SUBPARTITION - 519)) | (1L << (SUBPARTITIONS - 519)) | (1L << (SUSPEND - 519)) | (1L << (SWAPS - 519)) | (1L << (SWITCHES - 519)) | (1L << (TABLE_NAME - 519)) | (1L << (TABLESPACE - 519)) | (1L << (TEMPORARY - 519)) | (1L << (TEMPTABLE - 519)) | (1L << (THAN - 519)) | (1L << (TRADITIONAL - 519)) | (1L << (TRANSACTION - 519)) | (1L << (TRIGGERS - 519)) | (1L << (TRUNCATE - 519)) | (1L << (UNDEFINED - 519)) | (1L << (UNDOFILE - 519)) | (1L << (UNDO_BUFFER_SIZE - 519)) | (1L << (UNINSTALL - 519)) | (1L << (UNKNOWN - 519)) | (1L << (UNTIL - 519)) | (1L << (UPGRADE - 519)) | (1L << (USER - 519)) | (1L << (USE_FRM - 519)) | (1L << (USER_RESOURCES - 519)) | (1L << (VALIDATION - 519)) | (1L << (VALUE - 519)) | (1L << (VARIABLES - 519)) | (1L << (VIEW - 519)) | (1L << (VISIBLE - 519)))) != 0) || ((((_la - 583)) & ~0x3f) == 0 && ((1L << (_la - 583)) & ((1L << (WAIT - 583)) | (1L << (WARNINGS - 583)) | (1L << (WITHOUT - 583)) | (1L << (WORK - 583)) | (1L << (WRAPPER - 583)) | (1L << (X509 - 583)) | (1L << (XA - 583)) | (1L << (XML - 583)) | (1L << (INTERNAL - 583)) | (1L << (QUARTER - 583)) | (1L << (MONTH - 583)) | (1L << (DAY - 583)) | (1L << (HOUR - 583)) | (1L << (MINUTE - 583)) | (1L << (WEEK - 583)) | (1L << (SECOND - 583)) | (1L << (MICROSECOND - 583)) | (1L << (TABLES - 583)) | (1L << (ROUTINE - 583)) | (1L << (EXECUTE - 583)) | (1L << (FILE - 583)) | (1L << (PROCESS - 583)) | (1L << (RELOAD - 583)) | (1L << (SHUTDOWN - 583)) | (1L << (SUPER - 583)) | (1L << (PRIVILEGES - 583)) | (1L << (SESSION_VARIABLES_ADMIN - 583)) | (1L << (ARMSCII8 - 583)) | (1L << (ASCII - 583)) | (1L << (BIG5 - 583)) | (1L << (CP1250 - 583)) | (1L << (CP1251 - 583)) | (1L << (CP1256 - 583)) | (1L << (CP1257 - 583)) | (1L << (CP850 - 583)))) != 0) || ((((_la - 647)) & ~0x3f) == 0 && ((1L << (_la - 647)) & ((1L << (CP852 - 647)) | (1L << (CP866 - 647)) | (1L << (CP932 - 647)) | (1L << (DEC8 - 647)) | (1L << (EUCJPMS - 647)) | (1L << (EUCKR - 647)) | (1L << (GB2312 - 647)) | (1L << (GBK - 647)) | (1L << (GEOSTD8 - 647)) | (1L << (GREEK - 647)) | (1L << (HEBREW - 647)) | (1L << (HP8 - 647)) | (1L << (KEYBCS2 - 647)) | (1L << (KOI8R - 647)) | (1L << (KOI8U - 647)) | (1L << (LATIN1 - 647)) | (1L << (LATIN2 - 647)) | (1L << (LATIN5 - 647)) | (1L << (LATIN7 - 647)) | (1L << (MACCE - 647)) | (1L << (MACROMAN - 647)) | (1L << (SJIS - 647)) | (1L << (SWE7 - 647)) | (1L << (TIS620 - 647)) | (1L << (UCS2 - 647)) | (1L << (UJIS - 647)) | (1L << (UTF16 - 647)) | (1L << (UTF16LE - 647)) | (1L << (UTF32 - 647)) | (1L << (UTF8 - 647)) | (1L << (UTF8MB3 - 647)) | (1L << (UTF8MB4 - 647)) | (1L << (ARCHIVE - 647)) | (1L << (BLACKHOLE - 647)) | (1L << (CSV - 647)) | (1L << (FEDERATED - 647)) | (1L << (INNODB - 647)) | (1L << (MEMORY - 647)) | (1L << (MRG_MYISAM - 647)) | (1L << (MYISAM - 647)) | (1L << (NDB - 647)) | (1L << (NDBCLUSTER - 647)) | (1L << (PERFORMANCE_SCHEMA - 647)) | (1L << (TOKUDB - 647)) | (1L << (REPEATABLE - 647)) | (1L << (COMMITTED - 647)) | (1L << (UNCOMMITTED - 647)) | (1L << (SERIALIZABLE - 647)) | (1L << (GEOMETRYCOLLECTION - 647)) | (1L << (LINESTRING - 647)) | (1L << (MULTILINESTRING - 647)) | (1L << (MULTIPOINT - 647)) | (1L << (MULTIPOLYGON - 647)) | (1L << (POINT - 647)) | (1L << (POLYGON - 647)) | (1L << (ABS - 647)) | (1L << (ACOS - 647)) | (1L << (ADDDATE - 647)) | (1L << (ADDTIME - 647)) | (1L << (AES_DECRYPT - 647)) | (1L << (AES_ENCRYPT - 647)) | (1L << (AREA - 647)))) != 0) || ((((_la - 711)) & ~0x3f) == 0 && ((1L << (_la - 711)) & ((1L << (ASBINARY - 711)) | (1L << (ASIN - 711)) | (1L << (ASTEXT - 711)) | (1L << (ASWKB - 711)) | (1L << (ASWKT - 711)) | (1L << (ASYMMETRIC_DECRYPT - 711)) | (1L << (ASYMMETRIC_DERIVE - 711)) | (1L << (ASYMMETRIC_ENCRYPT - 711)) | (1L << (ASYMMETRIC_SIGN - 711)) | (1L << (ASYMMETRIC_VERIFY - 711)) | (1L << (ATAN - 711)) | (1L << (ATAN2 - 711)) | (1L << (BENCHMARK - 711)) | (1L << (BIN - 711)) | (1L << (BIT_COUNT - 711)) | (1L << (BIT_LENGTH - 711)) | (1L << (BUFFER - 711)) | (1L << (CATALOG_NAME - 711)) | (1L << (CEIL - 711)) | (1L << (CEILING - 711)) | (1L << (CENTROID - 711)) | (1L << (CHARACTER_LENGTH - 711)) | (1L << (CHARSET - 711)) | (1L << (CHAR_LENGTH - 711)) | (1L << (COERCIBILITY - 711)) | (1L << (COLLATION - 711)) | (1L << (COMPRESS - 711)) | (1L << (CONCAT - 711)) | (1L << (CONCAT_WS - 711)) | (1L << (CONNECTION_ID - 711)) | (1L << (CONV - 711)) | (1L << (CONVERT_TZ - 711)) | (1L << (COS - 711)) | (1L << (COT - 711)) | (1L << (CRC32 - 711)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 711)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 711)) | (1L << (CREATE_DH_PARAMETERS - 711)) | (1L << (CREATE_DIGEST - 711)) | (1L << (CROSSES - 711)) | (1L << (DATEDIFF - 711)) | (1L << (DATE_FORMAT - 711)) | (1L << (DAYNAME - 711)) | (1L << (DAYOFMONTH - 711)) | (1L << (DAYOFWEEK - 711)) | (1L << (DAYOFYEAR - 711)) | (1L << (DECODE - 711)) | (1L << (DEGREES - 711)) | (1L << (DES_DECRYPT - 711)) | (1L << (DES_ENCRYPT - 711)) | (1L << (DIMENSION - 711)) | (1L << (DISJOINT - 711)) | (1L << (ELT - 711)) | (1L << (ENCODE - 711)) | (1L << (ENCRYPT - 711)) | (1L << (ENDPOINT - 711)) | (1L << (ENVELOPE - 711)) | (1L << (EQUALS - 711)) | (1L << (EXP - 711)) | (1L << (EXPORT_SET - 711)) | (1L << (EXTERIORRING - 711)) | (1L << (EXTRACTVALUE - 711)) | (1L << (FIELD - 711)) | (1L << (FIND_IN_SET - 711)))) != 0) || ((((_la - 775)) & ~0x3f) == 0 && ((1L << (_la - 775)) & ((1L << (FLOOR - 775)) | (1L << (FORMAT - 775)) | (1L << (FOUND_ROWS - 775)) | (1L << (FROM_BASE64 - 775)) | (1L << (FROM_DAYS - 775)) | (1L << (FROM_UNIXTIME - 775)) | (1L << (GEOMCOLLFROMTEXT - 775)) | (1L << (GEOMCOLLFROMWKB - 775)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 775)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 775)) | (1L << (GEOMETRYFROMTEXT - 775)) | (1L << (GEOMETRYFROMWKB - 775)) | (1L << (GEOMETRYN - 775)) | (1L << (GEOMETRYTYPE - 775)) | (1L << (GEOMFROMTEXT - 775)) | (1L << (GEOMFROMWKB - 775)) | (1L << (GET_FORMAT - 775)) | (1L << (GET_LOCK - 775)) | (1L << (GLENGTH - 775)) | (1L << (GREATEST - 775)) | (1L << (GTID_SUBSET - 775)) | (1L << (GTID_SUBTRACT - 775)) | (1L << (HEX - 775)) | (1L << (IFNULL - 775)) | (1L << (INET6_ATON - 775)) | (1L << (INET6_NTOA - 775)) | (1L << (INET_ATON - 775)) | (1L << (INET_NTOA - 775)) | (1L << (INSTR - 775)) | (1L << (INTERIORRINGN - 775)) | (1L << (INTERSECTS - 775)) | (1L << (ISCLOSED - 775)) | (1L << (ISEMPTY - 775)) | (1L << (ISNULL - 775)) | (1L << (ISSIMPLE - 775)) | (1L << (IS_FREE_LOCK - 775)) | (1L << (IS_IPV4 - 775)) | (1L << (IS_IPV4_COMPAT - 775)) | (1L << (IS_IPV4_MAPPED - 775)) | (1L << (IS_IPV6 - 775)) | (1L << (IS_USED_LOCK - 775)) | (1L << (LAST_INSERT_ID - 775)) | (1L << (LCASE - 775)) | (1L << (LEAST - 775)) | (1L << (LENGTH - 775)) | (1L << (LINEFROMTEXT - 775)) | (1L << (LINEFROMWKB - 775)) | (1L << (LINESTRINGFROMTEXT - 775)) | (1L << (LINESTRINGFROMWKB - 775)) | (1L << (LN - 775)) | (1L << (LOAD_FILE - 775)) | (1L << (LOCATE - 775)) | (1L << (LOG - 775)) | (1L << (LOG10 - 775)) | (1L << (LOG2 - 775)) | (1L << (LOWER - 775)) | (1L << (LPAD - 775)) | (1L << (LTRIM - 775)) | (1L << (MAKEDATE - 775)) | (1L << (MAKETIME - 775)) | (1L << (MAKE_SET - 775)) | (1L << (MASTER_POS_WAIT - 775)) | (1L << (MBRCONTAINS - 775)) | (1L << (MBRDISJOINT - 775)))) != 0) || ((((_la - 839)) & ~0x3f) == 0 && ((1L << (_la - 839)) & ((1L << (MBREQUAL - 839)) | (1L << (MBRINTERSECTS - 839)) | (1L << (MBROVERLAPS - 839)) | (1L << (MBRTOUCHES - 839)) | (1L << (MBRWITHIN - 839)) | (1L << (MD5 - 839)) | (1L << (MLINEFROMTEXT - 839)) | (1L << (MLINEFROMWKB - 839)) | (1L << (MONTHNAME - 839)) | (1L << (MPOINTFROMTEXT - 839)) | (1L << (MPOINTFROMWKB - 839)) | (1L << (MPOLYFROMTEXT - 839)) | (1L << (MPOLYFROMWKB - 839)) | (1L << (MULTILINESTRINGFROMTEXT - 839)) | (1L << (MULTILINESTRINGFROMWKB - 839)) | (1L << (MULTIPOINTFROMTEXT - 839)) | (1L << (MULTIPOINTFROMWKB - 839)) | (1L << (MULTIPOLYGONFROMTEXT - 839)) | (1L << (MULTIPOLYGONFROMWKB - 839)) | (1L << (NAME_CONST - 839)) | (1L << (NULLIF - 839)) | (1L << (NUMGEOMETRIES - 839)) | (1L << (NUMINTERIORRINGS - 839)) | (1L << (NUMPOINTS - 839)) | (1L << (OCT - 839)) | (1L << (OCTET_LENGTH - 839)) | (1L << (ORD - 839)) | (1L << (OVERLAPS - 839)) | (1L << (PERIOD_ADD - 839)) | (1L << (PERIOD_DIFF - 839)) | (1L << (PI - 839)) | (1L << (POINTFROMTEXT - 839)) | (1L << (POINTFROMWKB - 839)) | (1L << (POINTN - 839)) | (1L << (POLYFROMTEXT - 839)) | (1L << (POLYFROMWKB - 839)) | (1L << (POLYGONFROMTEXT - 839)) | (1L << (POLYGONFROMWKB - 839)) | (1L << (POW - 839)) | (1L << (POWER - 839)) | (1L << (QUOTE - 839)) | (1L << (RADIANS - 839)) | (1L << (RAND - 839)) | (1L << (RANDOM_BYTES - 839)) | (1L << (RELEASE_LOCK - 839)) | (1L << (REVERSE - 839)) | (1L << (ROUND - 839)) | (1L << (ROW_COUNT - 839)) | (1L << (RPAD - 839)) | (1L << (RTRIM - 839)) | (1L << (SEC_TO_TIME - 839)) | (1L << (SESSION_USER - 839)) | (1L << (SHA - 839)) | (1L << (SHA1 - 839)) | (1L << (SHA2 - 839)) | (1L << (SCHEMA_NAME - 839)) | (1L << (SIGN - 839)) | (1L << (SIN - 839)) | (1L << (SLEEP - 839)) | (1L << (SOUNDEX - 839)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 839)) | (1L << (SQRT - 839)) | (1L << (SRID - 839)) | (1L << (STARTPOINT - 839)))) != 0) || ((((_la - 903)) & ~0x3f) == 0 && ((1L << (_la - 903)) & ((1L << (STRCMP - 903)) | (1L << (STR_TO_DATE - 903)) | (1L << (ST_AREA - 903)) | (1L << (ST_ASBINARY - 903)) | (1L << (ST_ASTEXT - 903)) | (1L << (ST_ASWKB - 903)) | (1L << (ST_ASWKT - 903)) | (1L << (ST_BUFFER - 903)) | (1L << (ST_CENTROID - 903)) | (1L << (ST_CONTAINS - 903)) | (1L << (ST_CROSSES - 903)) | (1L << (ST_DIFFERENCE - 903)) | (1L << (ST_DIMENSION - 903)) | (1L << (ST_DISJOINT - 903)) | (1L << (ST_DISTANCE - 903)) | (1L << (ST_ENDPOINT - 903)) | (1L << (ST_ENVELOPE - 903)) | (1L << (ST_EQUALS - 903)) | (1L << (ST_EXTERIORRING - 903)) | (1L << (ST_GEOMCOLLFROMTEXT - 903)) | (1L << (ST_GEOMCOLLFROMTXT - 903)) | (1L << (ST_GEOMCOLLFROMWKB - 903)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 903)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 903)) | (1L << (ST_GEOMETRYFROMTEXT - 903)) | (1L << (ST_GEOMETRYFROMWKB - 903)) | (1L << (ST_GEOMETRYN - 903)) | (1L << (ST_GEOMETRYTYPE - 903)) | (1L << (ST_GEOMFROMTEXT - 903)) | (1L << (ST_GEOMFROMWKB - 903)) | (1L << (ST_INTERIORRINGN - 903)) | (1L << (ST_INTERSECTION - 903)) | (1L << (ST_INTERSECTS - 903)) | (1L << (ST_ISCLOSED - 903)) | (1L << (ST_ISEMPTY - 903)) | (1L << (ST_ISSIMPLE - 903)) | (1L << (ST_LINEFROMTEXT - 903)) | (1L << (ST_LINEFROMWKB - 903)) | (1L << (ST_LINESTRINGFROMTEXT - 903)) | (1L << (ST_LINESTRINGFROMWKB - 903)) | (1L << (ST_NUMGEOMETRIES - 903)) | (1L << (ST_NUMINTERIORRING - 903)) | (1L << (ST_NUMINTERIORRINGS - 903)) | (1L << (ST_NUMPOINTS - 903)) | (1L << (ST_OVERLAPS - 903)) | (1L << (ST_POINTFROMTEXT - 903)) | (1L << (ST_POINTFROMWKB - 903)) | (1L << (ST_POINTN - 903)) | (1L << (ST_POLYFROMTEXT - 903)) | (1L << (ST_POLYFROMWKB - 903)) | (1L << (ST_POLYGONFROMTEXT - 903)) | (1L << (ST_POLYGONFROMWKB - 903)) | (1L << (ST_SRID - 903)) | (1L << (ST_STARTPOINT - 903)) | (1L << (ST_SYMDIFFERENCE - 903)) | (1L << (ST_TOUCHES - 903)) | (1L << (ST_UNION - 903)) | (1L << (ST_WITHIN - 903)) | (1L << (ST_X - 903)) | (1L << (ST_Y - 903)) | (1L << (SUBDATE - 903)) | (1L << (SUBSTRING_INDEX - 903)) | (1L << (SUBTIME - 903)) | (1L << (SYSTEM_USER - 903)))) != 0) || ((((_la - 967)) & ~0x3f) == 0 && ((1L << (_la - 967)) & ((1L << (TAN - 967)) | (1L << (TIMEDIFF - 967)) | (1L << (TIMESTAMPADD - 967)) | (1L << (TIMESTAMPDIFF - 967)) | (1L << (TIME_FORMAT - 967)) | (1L << (TIME_TO_SEC - 967)) | (1L << (TOUCHES - 967)) | (1L << (TO_BASE64 - 967)) | (1L << (TO_DAYS - 967)) | (1L << (TO_SECONDS - 967)) | (1L << (UCASE - 967)) | (1L << (UNCOMPRESS - 967)) | (1L << (UNCOMPRESSED_LENGTH - 967)) | (1L << (UNHEX - 967)) | (1L << (UNIX_TIMESTAMP - 967)) | (1L << (UPDATEXML - 967)) | (1L << (UPPER - 967)) | (1L << (UUID - 967)) | (1L << (UUID_SHORT - 967)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 967)) | (1L << (VERSION - 967)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 967)) | (1L << (WEEKDAY - 967)) | (1L << (WEEKOFYEAR - 967)) | (1L << (WEIGHT_STRING - 967)) | (1L << (WITHIN - 967)) | (1L << (YEARWEEK - 967)) | (1L << (Y_FUNCTION - 967)) | (1L << (X_FUNCTION - 967)) | (1L << (PLUS - 967)) | (1L << (MINUS - 967)) | (1L << (EXCLAMATION_SYMBOL - 967)) | (1L << (BIT_NOT_OP - 967)) | (1L << (LR_BRACKET - 967)) | (1L << (ZERO_DECIMAL - 967)) | (1L << (ONE_DECIMAL - 967)) | (1L << (TWO_DECIMAL - 967)))) != 0) || ((((_la - 1034)) & ~0x3f) == 0 && ((1L << (_la - 1034)) & ((1L << (CHARSET_REVERSE_QOUTE_STRING - 1034)) | (1L << (START_NATIONAL_STRING_LITERAL - 1034)) | (1L << (STRING_LITERAL - 1034)) | (1L << (DECIMAL_LITERAL - 1034)) | (1L << (HEXADECIMAL_LITERAL - 1034)) | (1L << (REAL_LITERAL - 1034)) | (1L << (NULL_SPEC_LITERAL - 1034)) | (1L << (BIT_STRING - 1034)) | (1L << (STRING_CHARSET_NAME - 1034)) | (1L << (ID - 1034)) | (1L << (REVERSE_QUOTE_ID - 1034)) | (1L << (LOCAL_ID - 1034)) | (1L << (GLOBAL_ID - 1034)))) != 0)) { + { + setState(3053); + expressionsWithDefaults(); + } + } + + setState(3056); + match(RR_BRACKET); + } + } + setState(3061); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UpdatedElementContext extends ParserRuleContext { + public FullColumnNameContext fullColumnName() { + return getRuleContext(FullColumnNameContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public UpdatedElementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_updatedElement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUpdatedElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUpdatedElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUpdatedElement(this); + else return visitor.visitChildren(this); + } + } + + public final UpdatedElementContext updatedElement() throws RecognitionException { + UpdatedElementContext _localctx = new UpdatedElementContext(_ctx, getState()); + enterRule(_localctx, 184, RULE_updatedElement); + try { + enterOuterAlt(_localctx, 1); + { + setState(3064); + fullColumnName(); + setState(3065); + match(EQUAL_SYMBOL); + setState(3068); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CASE: + case CAST: + case CONVERT: + case CURRENT: + case CURRENT_USER: + case DATABASE: + case DIAGNOSTICS: + case EXISTS: + case FALSE: + case IF: + case INSERT: + case INTERVAL: + case LEFT: + case NOT: + case NULL_LITERAL: + case NUMBER: + case REPLACE: + case RIGHT: + case STACKED: + case TRUE: + case VALUES: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case CHAR: + case BINARY: + case TEXT: + case ENUM: + case SERIAL: + case AVG: + case BIT_AND: + case BIT_OR: + case BIT_XOR: + case COUNT: + case GROUP_CONCAT: + case MAX: + case MIN: + case STD: + case STDDEV: + case STDDEV_POP: + case STDDEV_SAMP: + case SUM: + case VAR_POP: + case VAR_SAMP: + case VARIANCE: + case CURRENT_DATE: + case CURRENT_TIME: + case CURRENT_TIMESTAMP: + case LOCALTIME: + case CURDATE: + case CURTIME: + case DATE_ADD: + case DATE_SUB: + case EXTRACT: + case LOCALTIMESTAMP: + case NOW: + case POSITION: + case SUBSTR: + case SUBSTRING: + case SYSDATE: + case TRIM: + case UTC_DATE: + case UTC_TIME: + case UTC_TIMESTAMP: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case PLUS: + case MINUS: + case EXCLAMATION_SYMBOL: + case BIT_NOT_OP: + case LR_BRACKET: + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case CHARSET_REVERSE_QOUTE_STRING: + case START_NATIONAL_STRING_LITERAL: + case STRING_LITERAL: + case DECIMAL_LITERAL: + case HEXADECIMAL_LITERAL: + case REAL_LITERAL: + case NULL_SPEC_LITERAL: + case BIT_STRING: + case STRING_CHARSET_NAME: + case ID: + case REVERSE_QUOTE_ID: + case LOCAL_ID: + case GLOBAL_ID: + { + setState(3066); + expression(0); + } + break; + case DEFAULT: + { + setState(3067); + match(DEFAULT); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AssignmentFieldContext extends ParserRuleContext { + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode LOCAL_ID() { return getToken(MySqlParser.LOCAL_ID, 0); } + public AssignmentFieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignmentField; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAssignmentField(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAssignmentField(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAssignmentField(this); + else return visitor.visitChildren(this); + } + } + + public final AssignmentFieldContext assignmentField() throws RecognitionException { + AssignmentFieldContext _localctx = new AssignmentFieldContext(_ctx, getState()); + enterRule(_localctx, 186, RULE_assignmentField); + try { + setState(3072); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + enterOuterAlt(_localctx, 1); + { + setState(3070); + uid(); + } + break; + case LOCAL_ID: + enterOuterAlt(_localctx, 2); + { + setState(3071); + match(LOCAL_ID); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LockClauseContext extends ParserRuleContext { + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public TerminalNode UPDATE() { return getToken(MySqlParser.UPDATE, 0); } + public TerminalNode LOCK() { return getToken(MySqlParser.LOCK, 0); } + public TerminalNode IN() { return getToken(MySqlParser.IN, 0); } + public TerminalNode SHARE() { return getToken(MySqlParser.SHARE, 0); } + public TerminalNode MODE() { return getToken(MySqlParser.MODE, 0); } + public LockClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lockClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLockClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLockClause(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLockClause(this); + else return visitor.visitChildren(this); + } + } + + public final LockClauseContext lockClause() throws RecognitionException { + LockClauseContext _localctx = new LockClauseContext(_ctx, getState()); + enterRule(_localctx, 188, RULE_lockClause); + try { + setState(3080); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FOR: + enterOuterAlt(_localctx, 1); + { + setState(3074); + match(FOR); + setState(3075); + match(UPDATE); + } + break; + case LOCK: + enterOuterAlt(_localctx, 2); + { + setState(3076); + match(LOCK); + setState(3077); + match(IN); + setState(3078); + match(SHARE); + setState(3079); + match(MODE); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SingleDeleteStatementContext extends ParserRuleContext { + public Token priority; + public TerminalNode DELETE() { return getToken(MySqlParser.DELETE, 0); } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode QUICK() { return getToken(MySqlParser.QUICK, 0); } + public TerminalNode IGNORE() { return getToken(MySqlParser.IGNORE, 0); } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode WHERE() { return getToken(MySqlParser.WHERE, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public OrderByClauseContext orderByClause() { + return getRuleContext(OrderByClauseContext.class,0); + } + public TerminalNode LIMIT() { return getToken(MySqlParser.LIMIT, 0); } + public LimitClauseAtomContext limitClauseAtom() { + return getRuleContext(LimitClauseAtomContext.class,0); + } + public TerminalNode LOW_PRIORITY() { return getToken(MySqlParser.LOW_PRIORITY, 0); } + public SingleDeleteStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_singleDeleteStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSingleDeleteStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSingleDeleteStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSingleDeleteStatement(this); + else return visitor.visitChildren(this); + } + } + + public final SingleDeleteStatementContext singleDeleteStatement() throws RecognitionException { + SingleDeleteStatementContext _localctx = new SingleDeleteStatementContext(_ctx, getState()); + enterRule(_localctx, 190, RULE_singleDeleteStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3082); + match(DELETE); + setState(3084); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LOW_PRIORITY) { + { + setState(3083); + ((SingleDeleteStatementContext)_localctx).priority = match(LOW_PRIORITY); + } + } + + setState(3087); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==QUICK) { + { + setState(3086); + match(QUICK); + } + } + + setState(3090); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IGNORE) { + { + setState(3089); + match(IGNORE); + } + } + + setState(3092); + match(FROM); + setState(3093); + tableName(); + setState(3099); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PARTITION) { + { + setState(3094); + match(PARTITION); + setState(3095); + match(LR_BRACKET); + setState(3096); + uidList(); + setState(3097); + match(RR_BRACKET); + } + } + + setState(3103); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(3101); + match(WHERE); + setState(3102); + expression(0); + } + } + + setState(3106); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ORDER) { + { + setState(3105); + orderByClause(); + } + } + + setState(3110); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LIMIT) { + { + setState(3108); + match(LIMIT); + setState(3109); + limitClauseAtom(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MultipleDeleteStatementContext extends ParserRuleContext { + public Token priority; + public TerminalNode DELETE() { return getToken(MySqlParser.DELETE, 0); } + public List tableName() { + return getRuleContexts(TableNameContext.class); + } + public TableNameContext tableName(int i) { + return getRuleContext(TableNameContext.class,i); + } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public TableSourcesContext tableSources() { + return getRuleContext(TableSourcesContext.class,0); + } + public TerminalNode USING() { return getToken(MySqlParser.USING, 0); } + public TerminalNode QUICK() { return getToken(MySqlParser.QUICK, 0); } + public TerminalNode IGNORE() { return getToken(MySqlParser.IGNORE, 0); } + public TerminalNode WHERE() { return getToken(MySqlParser.WHERE, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode LOW_PRIORITY() { return getToken(MySqlParser.LOW_PRIORITY, 0); } + public List DOT() { return getTokens(MySqlParser.DOT); } + public TerminalNode DOT(int i) { + return getToken(MySqlParser.DOT, i); + } + public List STAR() { return getTokens(MySqlParser.STAR); } + public TerminalNode STAR(int i) { + return getToken(MySqlParser.STAR, i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public MultipleDeleteStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multipleDeleteStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMultipleDeleteStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMultipleDeleteStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMultipleDeleteStatement(this); + else return visitor.visitChildren(this); + } + } + + public final MultipleDeleteStatementContext multipleDeleteStatement() throws RecognitionException { + MultipleDeleteStatementContext _localctx = new MultipleDeleteStatementContext(_ctx, getState()); + enterRule(_localctx, 192, RULE_multipleDeleteStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3112); + match(DELETE); + setState(3114); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LOW_PRIORITY) { + { + setState(3113); + ((MultipleDeleteStatementContext)_localctx).priority = match(LOW_PRIORITY); + } + } + + setState(3117); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,429,_ctx) ) { + case 1: + { + setState(3116); + match(QUICK); + } + break; + } + setState(3120); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IGNORE) { + { + setState(3119); + match(IGNORE); + } + } + + setState(3161); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + { + setState(3122); + tableName(); + setState(3125); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DOT) { + { + setState(3123); + match(DOT); + setState(3124); + match(STAR); + } + } + + setState(3135); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3127); + match(COMMA); + setState(3128); + tableName(); + setState(3131); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DOT) { + { + setState(3129); + match(DOT); + setState(3130); + match(STAR); + } + } + + } + } + setState(3137); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3138); + match(FROM); + setState(3139); + tableSources(); + } + break; + case FROM: + { + setState(3141); + match(FROM); + setState(3142); + tableName(); + setState(3145); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DOT) { + { + setState(3143); + match(DOT); + setState(3144); + match(STAR); + } + } + + setState(3155); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3147); + match(COMMA); + setState(3148); + tableName(); + setState(3151); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DOT) { + { + setState(3149); + match(DOT); + setState(3150); + match(STAR); + } + } + + } + } + setState(3157); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3158); + match(USING); + setState(3159); + tableSources(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(3165); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(3163); + match(WHERE); + setState(3164); + expression(0); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class HandlerOpenStatementContext extends ParserRuleContext { + public TerminalNode HANDLER() { return getToken(MySqlParser.HANDLER, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode OPEN() { return getToken(MySqlParser.OPEN, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public HandlerOpenStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_handlerOpenStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHandlerOpenStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHandlerOpenStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHandlerOpenStatement(this); + else return visitor.visitChildren(this); + } + } + + public final HandlerOpenStatementContext handlerOpenStatement() throws RecognitionException { + HandlerOpenStatementContext _localctx = new HandlerOpenStatementContext(_ctx, getState()); + enterRule(_localctx, 194, RULE_handlerOpenStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3167); + match(HANDLER); + setState(3168); + tableName(); + setState(3169); + match(OPEN); + setState(3174); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,440,_ctx) ) { + case 1: + { + setState(3171); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(3170); + match(AS); + } + } + + setState(3173); + uid(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class HandlerReadIndexStatementContext extends ParserRuleContext { + public UidContext index; + public Token moveOrder; + public TerminalNode HANDLER() { return getToken(MySqlParser.HANDLER, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode READ() { return getToken(MySqlParser.READ, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public ComparisonOperatorContext comparisonOperator() { + return getRuleContext(ComparisonOperatorContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public ConstantsContext constants() { + return getRuleContext(ConstantsContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode WHERE() { return getToken(MySqlParser.WHERE, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode LIMIT() { return getToken(MySqlParser.LIMIT, 0); } + public LimitClauseAtomContext limitClauseAtom() { + return getRuleContext(LimitClauseAtomContext.class,0); + } + public TerminalNode FIRST() { return getToken(MySqlParser.FIRST, 0); } + public TerminalNode NEXT() { return getToken(MySqlParser.NEXT, 0); } + public TerminalNode PREV() { return getToken(MySqlParser.PREV, 0); } + public TerminalNode LAST() { return getToken(MySqlParser.LAST, 0); } + public HandlerReadIndexStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_handlerReadIndexStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHandlerReadIndexStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHandlerReadIndexStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHandlerReadIndexStatement(this); + else return visitor.visitChildren(this); + } + } + + public final HandlerReadIndexStatementContext handlerReadIndexStatement() throws RecognitionException { + HandlerReadIndexStatementContext _localctx = new HandlerReadIndexStatementContext(_ctx, getState()); + enterRule(_localctx, 196, RULE_handlerReadIndexStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3176); + match(HANDLER); + setState(3177); + tableName(); + setState(3178); + match(READ); + setState(3179); + ((HandlerReadIndexStatementContext)_localctx).index = uid(); + setState(3186); + _errHandler.sync(this); + switch (_input.LA(1)) { + case EQUAL_SYMBOL: + case GREATER_SYMBOL: + case LESS_SYMBOL: + case EXCLAMATION_SYMBOL: + { + setState(3180); + comparisonOperator(); + setState(3181); + match(LR_BRACKET); + setState(3182); + constants(); + setState(3183); + match(RR_BRACKET); + } + break; + case FIRST: + case LAST: + case NEXT: + case PREV: + { + setState(3185); + ((HandlerReadIndexStatementContext)_localctx).moveOrder = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FIRST || _la==LAST || _la==NEXT || _la==PREV) ) { + ((HandlerReadIndexStatementContext)_localctx).moveOrder = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(3190); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(3188); + match(WHERE); + setState(3189); + expression(0); + } + } + + setState(3194); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LIMIT) { + { + setState(3192); + match(LIMIT); + setState(3193); + limitClauseAtom(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class HandlerReadStatementContext extends ParserRuleContext { + public Token moveOrder; + public TerminalNode HANDLER() { return getToken(MySqlParser.HANDLER, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode READ() { return getToken(MySqlParser.READ, 0); } + public TerminalNode FIRST() { return getToken(MySqlParser.FIRST, 0); } + public TerminalNode NEXT() { return getToken(MySqlParser.NEXT, 0); } + public TerminalNode WHERE() { return getToken(MySqlParser.WHERE, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode LIMIT() { return getToken(MySqlParser.LIMIT, 0); } + public LimitClauseAtomContext limitClauseAtom() { + return getRuleContext(LimitClauseAtomContext.class,0); + } + public HandlerReadStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_handlerReadStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHandlerReadStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHandlerReadStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHandlerReadStatement(this); + else return visitor.visitChildren(this); + } + } + + public final HandlerReadStatementContext handlerReadStatement() throws RecognitionException { + HandlerReadStatementContext _localctx = new HandlerReadStatementContext(_ctx, getState()); + enterRule(_localctx, 198, RULE_handlerReadStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3196); + match(HANDLER); + setState(3197); + tableName(); + setState(3198); + match(READ); + setState(3199); + ((HandlerReadStatementContext)_localctx).moveOrder = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FIRST || _la==NEXT) ) { + ((HandlerReadStatementContext)_localctx).moveOrder = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(3202); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(3200); + match(WHERE); + setState(3201); + expression(0); + } + } + + setState(3206); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LIMIT) { + { + setState(3204); + match(LIMIT); + setState(3205); + limitClauseAtom(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class HandlerCloseStatementContext extends ParserRuleContext { + public TerminalNode HANDLER() { return getToken(MySqlParser.HANDLER, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode CLOSE() { return getToken(MySqlParser.CLOSE, 0); } + public HandlerCloseStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_handlerCloseStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHandlerCloseStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHandlerCloseStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHandlerCloseStatement(this); + else return visitor.visitChildren(this); + } + } + + public final HandlerCloseStatementContext handlerCloseStatement() throws RecognitionException { + HandlerCloseStatementContext _localctx = new HandlerCloseStatementContext(_ctx, getState()); + enterRule(_localctx, 200, RULE_handlerCloseStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(3208); + match(HANDLER); + setState(3209); + tableName(); + setState(3210); + match(CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SingleUpdateStatementContext extends ParserRuleContext { + public Token priority; + public TerminalNode UPDATE() { return getToken(MySqlParser.UPDATE, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public List updatedElement() { + return getRuleContexts(UpdatedElementContext.class); + } + public UpdatedElementContext updatedElement(int i) { + return getRuleContext(UpdatedElementContext.class,i); + } + public TerminalNode IGNORE() { return getToken(MySqlParser.IGNORE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode WHERE() { return getToken(MySqlParser.WHERE, 0); } + public ExpressionForUpdateContext expressionForUpdate() { + return getRuleContext(ExpressionForUpdateContext.class,0); + } + public OrderByClauseContext orderByClause() { + return getRuleContext(OrderByClauseContext.class,0); + } + public LimitClauseContext limitClause() { + return getRuleContext(LimitClauseContext.class,0); + } + public TerminalNode LOW_PRIORITY() { return getToken(MySqlParser.LOW_PRIORITY, 0); } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public SingleUpdateStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_singleUpdateStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSingleUpdateStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSingleUpdateStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSingleUpdateStatement(this); + else return visitor.visitChildren(this); + } + } + + public final SingleUpdateStatementContext singleUpdateStatement() throws RecognitionException { + SingleUpdateStatementContext _localctx = new SingleUpdateStatementContext(_ctx, getState()); + enterRule(_localctx, 202, RULE_singleUpdateStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3212); + match(UPDATE); + setState(3214); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LOW_PRIORITY) { + { + setState(3213); + ((SingleUpdateStatementContext)_localctx).priority = match(LOW_PRIORITY); + } + } + + setState(3217); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IGNORE) { + { + setState(3216); + match(IGNORE); + } + } + + setState(3219); + tableName(); + setState(3224); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << AS) | (1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(3221); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(3220); + match(AS); + } + } + + setState(3223); + uid(); + } + } + + setState(3226); + match(SET); + setState(3227); + updatedElement(); + setState(3232); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3228); + match(COMMA); + setState(3229); + updatedElement(); + } + } + setState(3234); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3237); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(3235); + match(WHERE); + setState(3236); + expressionForUpdate(0); + } + } + + setState(3240); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ORDER) { + { + setState(3239); + orderByClause(); + } + } + + setState(3243); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LIMIT) { + { + setState(3242); + limitClause(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MultipleUpdateStatementContext extends ParserRuleContext { + public Token priority; + public TerminalNode UPDATE() { return getToken(MySqlParser.UPDATE, 0); } + public TableSourcesContext tableSources() { + return getRuleContext(TableSourcesContext.class,0); + } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public List updatedElement() { + return getRuleContexts(UpdatedElementContext.class); + } + public UpdatedElementContext updatedElement(int i) { + return getRuleContext(UpdatedElementContext.class,i); + } + public TerminalNode IGNORE() { return getToken(MySqlParser.IGNORE, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode WHERE() { return getToken(MySqlParser.WHERE, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode LOW_PRIORITY() { return getToken(MySqlParser.LOW_PRIORITY, 0); } + public MultipleUpdateStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multipleUpdateStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMultipleUpdateStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMultipleUpdateStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMultipleUpdateStatement(this); + else return visitor.visitChildren(this); + } + } + + public final MultipleUpdateStatementContext multipleUpdateStatement() throws RecognitionException { + MultipleUpdateStatementContext _localctx = new MultipleUpdateStatementContext(_ctx, getState()); + enterRule(_localctx, 204, RULE_multipleUpdateStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3245); + match(UPDATE); + setState(3247); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LOW_PRIORITY) { + { + setState(3246); + ((MultipleUpdateStatementContext)_localctx).priority = match(LOW_PRIORITY); + } + } + + setState(3250); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IGNORE) { + { + setState(3249); + match(IGNORE); + } + } + + setState(3252); + tableSources(); + setState(3253); + match(SET); + setState(3254); + updatedElement(); + setState(3259); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3255); + match(COMMA); + setState(3256); + updatedElement(); + } + } + setState(3261); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3264); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(3262); + match(WHERE); + setState(3263); + expression(0); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class OrderByClauseContext extends ParserRuleContext { + public TerminalNode ORDER() { return getToken(MySqlParser.ORDER, 0); } + public TerminalNode BY() { return getToken(MySqlParser.BY, 0); } + public List orderByExpression() { + return getRuleContexts(OrderByExpressionContext.class); + } + public OrderByExpressionContext orderByExpression(int i) { + return getRuleContext(OrderByExpressionContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public OrderByClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_orderByClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterOrderByClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitOrderByClause(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitOrderByClause(this); + else return visitor.visitChildren(this); + } + } + + public final OrderByClauseContext orderByClause() throws RecognitionException { + OrderByClauseContext _localctx = new OrderByClauseContext(_ctx, getState()); + enterRule(_localctx, 206, RULE_orderByClause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3266); + match(ORDER); + setState(3267); + match(BY); + setState(3268); + orderByExpression(); + setState(3273); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3269); + match(COMMA); + setState(3270); + orderByExpression(); + } + } + setState(3275); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class OrderByExpressionContext extends ParserRuleContext { + public Token order; + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode ASC() { return getToken(MySqlParser.ASC, 0); } + public TerminalNode DESC() { return getToken(MySqlParser.DESC, 0); } + public OrderByExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_orderByExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterOrderByExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitOrderByExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitOrderByExpression(this); + else return visitor.visitChildren(this); + } + } + + public final OrderByExpressionContext orderByExpression() throws RecognitionException { + OrderByExpressionContext _localctx = new OrderByExpressionContext(_ctx, getState()); + enterRule(_localctx, 208, RULE_orderByExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3276); + expression(0); + setState(3278); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,459,_ctx) ) { + case 1: + { + setState(3277); + ((OrderByExpressionContext)_localctx).order = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ASC || _la==DESC) ) { + ((OrderByExpressionContext)_localctx).order = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TableSourcesContext extends ParserRuleContext { + public List tableSource() { + return getRuleContexts(TableSourceContext.class); + } + public TableSourceContext tableSource(int i) { + return getRuleContext(TableSourceContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TableSourcesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tableSources; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableSources(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableSources(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableSources(this); + else return visitor.visitChildren(this); + } + } + + public final TableSourcesContext tableSources() throws RecognitionException { + TableSourcesContext _localctx = new TableSourcesContext(_ctx, getState()); + enterRule(_localctx, 210, RULE_tableSources); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3280); + tableSource(); + setState(3285); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3281); + match(COMMA); + setState(3282); + tableSource(); + } + } + setState(3287); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TableSourceContext extends ParserRuleContext { + public TableSourceContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tableSource; } + + public TableSourceContext() { } + public void copyFrom(TableSourceContext ctx) { + super.copyFrom(ctx); + } + } + public static class TableSourceNestedContext extends TableSourceContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TableSourceItemContext tableSourceItem() { + return getRuleContext(TableSourceItemContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List joinPart() { + return getRuleContexts(JoinPartContext.class); + } + public JoinPartContext joinPart(int i) { + return getRuleContext(JoinPartContext.class,i); + } + public TableSourceNestedContext(TableSourceContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableSourceNested(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableSourceNested(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableSourceNested(this); + else return visitor.visitChildren(this); + } + } + public static class TableSourceBaseContext extends TableSourceContext { + public TableSourceItemContext tableSourceItem() { + return getRuleContext(TableSourceItemContext.class,0); + } + public List joinPart() { + return getRuleContexts(JoinPartContext.class); + } + public JoinPartContext joinPart(int i) { + return getRuleContext(JoinPartContext.class,i); + } + public TableSourceBaseContext(TableSourceContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableSourceBase(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableSourceBase(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableSourceBase(this); + else return visitor.visitChildren(this); + } + } + + public final TableSourceContext tableSource() throws RecognitionException { + TableSourceContext _localctx = new TableSourceContext(_ctx, getState()); + enterRule(_localctx, 212, RULE_tableSource); + int _la; + try { + int _alt; + setState(3305); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,463,_ctx) ) { + case 1: + _localctx = new TableSourceBaseContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(3288); + tableSourceItem(); + setState(3292); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,461,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3289); + joinPart(); + } + } + } + setState(3294); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,461,_ctx); + } + } + break; + case 2: + _localctx = new TableSourceNestedContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(3295); + match(LR_BRACKET); + setState(3296); + tableSourceItem(); + setState(3300); + _errHandler.sync(this); + _la = _input.LA(1); + while (((((_la - 31)) & ~0x3f) == 0 && ((1L << (_la - 31)) & ((1L << (CROSS - 31)) | (1L << (INNER - 31)) | (1L << (JOIN - 31)) | (1L << (LEFT - 31)))) != 0) || ((((_la - 101)) & ~0x3f) == 0 && ((1L << (_la - 101)) & ((1L << (NATURAL - 101)) | (1L << (RIGHT - 101)) | (1L << (STRAIGHT_JOIN - 101)))) != 0)) { + { + { + setState(3297); + joinPart(); + } + } + setState(3302); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3303); + match(RR_BRACKET); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TableSourceItemContext extends ParserRuleContext { + public TableSourceItemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tableSourceItem; } + + public TableSourceItemContext() { } + public void copyFrom(TableSourceItemContext ctx) { + super.copyFrom(ctx); + } + } + public static class SubqueryTableItemContext extends TableSourceItemContext { + public SelectStatementContext parenthesisSubquery; + public UidContext alias; + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public SubqueryTableItemContext(TableSourceItemContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSubqueryTableItem(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSubqueryTableItem(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSubqueryTableItem(this); + else return visitor.visitChildren(this); + } + } + public static class AtomTableItemContext extends TableSourceItemContext { + public UidContext alias; + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List indexHint() { + return getRuleContexts(IndexHintContext.class); + } + public IndexHintContext indexHint(int i) { + return getRuleContext(IndexHintContext.class,i); + } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public AtomTableItemContext(TableSourceItemContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAtomTableItem(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAtomTableItem(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAtomTableItem(this); + else return visitor.visitChildren(this); + } + } + public static class TableSourcesItemContext extends TableSourceItemContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TableSourcesContext tableSources() { + return getRuleContext(TableSourcesContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TableSourcesItemContext(TableSourceItemContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableSourcesItem(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableSourcesItem(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableSourcesItem(this); + else return visitor.visitChildren(this); + } + } + + public final TableSourceItemContext tableSourceItem() throws RecognitionException { + TableSourceItemContext _localctx = new TableSourceItemContext(_ctx, getState()); + enterRule(_localctx, 214, RULE_tableSourceItem); + int _la; + try { + int _alt; + setState(3347); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,471,_ctx) ) { + case 1: + _localctx = new AtomTableItemContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(3307); + tableName(); + setState(3313); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PARTITION) { + { + setState(3308); + match(PARTITION); + setState(3309); + match(LR_BRACKET); + setState(3310); + uidList(); + setState(3311); + match(RR_BRACKET); + } + } + + setState(3319); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,466,_ctx) ) { + case 1: + { + setState(3316); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(3315); + match(AS); + } + } + + setState(3318); + ((AtomTableItemContext)_localctx).alias = uid(); + } + break; + } + setState(3329); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,468,_ctx) ) { + case 1: + { + setState(3321); + indexHint(); + setState(3326); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,467,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3322); + match(COMMA); + setState(3323); + indexHint(); + } + } + } + setState(3328); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,467,_ctx); + } + } + break; + } + } + break; + case 2: + _localctx = new SubqueryTableItemContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(3336); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,469,_ctx) ) { + case 1: + { + setState(3331); + selectStatement(); + } + break; + case 2: + { + setState(3332); + match(LR_BRACKET); + setState(3333); + ((SubqueryTableItemContext)_localctx).parenthesisSubquery = selectStatement(); + setState(3334); + match(RR_BRACKET); + } + break; + } + setState(3339); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(3338); + match(AS); + } + } + + setState(3341); + ((SubqueryTableItemContext)_localctx).alias = uid(); + } + break; + case 3: + _localctx = new TableSourcesItemContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(3343); + match(LR_BRACKET); + setState(3344); + tableSources(); + setState(3345); + match(RR_BRACKET); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IndexHintContext extends ParserRuleContext { + public Token indexHintAction; + public Token keyFormat; + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode USE() { return getToken(MySqlParser.USE, 0); } + public TerminalNode IGNORE() { return getToken(MySqlParser.IGNORE, 0); } + public TerminalNode FORCE() { return getToken(MySqlParser.FORCE, 0); } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public IndexHintTypeContext indexHintType() { + return getRuleContext(IndexHintTypeContext.class,0); + } + public IndexHintContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_indexHint; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIndexHint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIndexHint(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIndexHint(this); + else return visitor.visitChildren(this); + } + } + + public final IndexHintContext indexHint() throws RecognitionException { + IndexHintContext _localctx = new IndexHintContext(_ctx, getState()); + enterRule(_localctx, 216, RULE_indexHint); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3349); + ((IndexHintContext)_localctx).indexHintAction = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FORCE || _la==IGNORE || _la==USE) ) { + ((IndexHintContext)_localctx).indexHintAction = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(3350); + ((IndexHintContext)_localctx).keyFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==INDEX || _la==KEY) ) { + ((IndexHintContext)_localctx).keyFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(3353); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FOR) { + { + setState(3351); + match(FOR); + setState(3352); + indexHintType(); + } + } + + setState(3355); + match(LR_BRACKET); + setState(3356); + uidList(); + setState(3357); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IndexHintTypeContext extends ParserRuleContext { + public TerminalNode JOIN() { return getToken(MySqlParser.JOIN, 0); } + public TerminalNode ORDER() { return getToken(MySqlParser.ORDER, 0); } + public TerminalNode BY() { return getToken(MySqlParser.BY, 0); } + public TerminalNode GROUP() { return getToken(MySqlParser.GROUP, 0); } + public IndexHintTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_indexHintType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIndexHintType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIndexHintType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIndexHintType(this); + else return visitor.visitChildren(this); + } + } + + public final IndexHintTypeContext indexHintType() throws RecognitionException { + IndexHintTypeContext _localctx = new IndexHintTypeContext(_ctx, getState()); + enterRule(_localctx, 218, RULE_indexHintType); + try { + setState(3364); + _errHandler.sync(this); + switch (_input.LA(1)) { + case JOIN: + enterOuterAlt(_localctx, 1); + { + setState(3359); + match(JOIN); + } + break; + case ORDER: + enterOuterAlt(_localctx, 2); + { + setState(3360); + match(ORDER); + setState(3361); + match(BY); + } + break; + case GROUP: + enterOuterAlt(_localctx, 3); + { + setState(3362); + match(GROUP); + setState(3363); + match(BY); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class JoinPartContext extends ParserRuleContext { + public JoinPartContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_joinPart; } + + public JoinPartContext() { } + public void copyFrom(JoinPartContext ctx) { + super.copyFrom(ctx); + } + } + public static class InnerJoinContext extends JoinPartContext { + public TerminalNode JOIN() { return getToken(MySqlParser.JOIN, 0); } + public TableSourceItemContext tableSourceItem() { + return getRuleContext(TableSourceItemContext.class,0); + } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode USING() { return getToken(MySqlParser.USING, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode INNER() { return getToken(MySqlParser.INNER, 0); } + public TerminalNode CROSS() { return getToken(MySqlParser.CROSS, 0); } + public InnerJoinContext(JoinPartContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterInnerJoin(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitInnerJoin(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitInnerJoin(this); + else return visitor.visitChildren(this); + } + } + public static class NaturalJoinContext extends JoinPartContext { + public TerminalNode NATURAL() { return getToken(MySqlParser.NATURAL, 0); } + public TerminalNode JOIN() { return getToken(MySqlParser.JOIN, 0); } + public TableSourceItemContext tableSourceItem() { + return getRuleContext(TableSourceItemContext.class,0); + } + public TerminalNode LEFT() { return getToken(MySqlParser.LEFT, 0); } + public TerminalNode RIGHT() { return getToken(MySqlParser.RIGHT, 0); } + public TerminalNode OUTER() { return getToken(MySqlParser.OUTER, 0); } + public NaturalJoinContext(JoinPartContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterNaturalJoin(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitNaturalJoin(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitNaturalJoin(this); + else return visitor.visitChildren(this); + } + } + public static class OuterJoinContext extends JoinPartContext { + public TerminalNode JOIN() { return getToken(MySqlParser.JOIN, 0); } + public TableSourceItemContext tableSourceItem() { + return getRuleContext(TableSourceItemContext.class,0); + } + public TerminalNode LEFT() { return getToken(MySqlParser.LEFT, 0); } + public TerminalNode RIGHT() { return getToken(MySqlParser.RIGHT, 0); } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode USING() { return getToken(MySqlParser.USING, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode OUTER() { return getToken(MySqlParser.OUTER, 0); } + public OuterJoinContext(JoinPartContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterOuterJoin(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitOuterJoin(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitOuterJoin(this); + else return visitor.visitChildren(this); + } + } + public static class StraightJoinContext extends JoinPartContext { + public TerminalNode STRAIGHT_JOIN() { return getToken(MySqlParser.STRAIGHT_JOIN, 0); } + public TableSourceItemContext tableSourceItem() { + return getRuleContext(TableSourceItemContext.class,0); + } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public StraightJoinContext(JoinPartContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterStraightJoin(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitStraightJoin(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitStraightJoin(this); + else return visitor.visitChildren(this); + } + } + + public final JoinPartContext joinPart() throws RecognitionException { + JoinPartContext _localctx = new JoinPartContext(_ctx, getState()); + enterRule(_localctx, 220, RULE_joinPart); + int _la; + try { + setState(3410); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CROSS: + case INNER: + case JOIN: + _localctx = new InnerJoinContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(3367); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CROSS || _la==INNER) { + { + setState(3366); + _la = _input.LA(1); + if ( !(_la==CROSS || _la==INNER) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(3369); + match(JOIN); + setState(3370); + tableSourceItem(); + setState(3378); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,475,_ctx) ) { + case 1: + { + setState(3371); + match(ON); + setState(3372); + expression(0); + } + break; + case 2: + { + setState(3373); + match(USING); + setState(3374); + match(LR_BRACKET); + setState(3375); + uidList(); + setState(3376); + match(RR_BRACKET); + } + break; + } + } + break; + case STRAIGHT_JOIN: + _localctx = new StraightJoinContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(3380); + match(STRAIGHT_JOIN); + setState(3381); + tableSourceItem(); + setState(3384); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,476,_ctx) ) { + case 1: + { + setState(3382); + match(ON); + setState(3383); + expression(0); + } + break; + } + } + break; + case LEFT: + case RIGHT: + _localctx = new OuterJoinContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(3386); + _la = _input.LA(1); + if ( !(_la==LEFT || _la==RIGHT) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(3388); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==OUTER) { + { + setState(3387); + match(OUTER); + } + } + + setState(3390); + match(JOIN); + setState(3391); + tableSourceItem(); + setState(3399); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ON: + { + setState(3392); + match(ON); + setState(3393); + expression(0); + } + break; + case USING: + { + setState(3394); + match(USING); + setState(3395); + match(LR_BRACKET); + setState(3396); + uidList(); + setState(3397); + match(RR_BRACKET); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case NATURAL: + _localctx = new NaturalJoinContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(3401); + match(NATURAL); + setState(3406); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LEFT || _la==RIGHT) { + { + setState(3402); + _la = _input.LA(1); + if ( !(_la==LEFT || _la==RIGHT) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(3404); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==OUTER) { + { + setState(3403); + match(OUTER); + } + } + + } + } + + setState(3408); + match(JOIN); + setState(3409); + tableSourceItem(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class QueryExpressionContext extends ParserRuleContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public QuerySpecificationContext querySpecification() { + return getRuleContext(QuerySpecificationContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public QueryExpressionContext queryExpression() { + return getRuleContext(QueryExpressionContext.class,0); + } + public QueryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_queryExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterQueryExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitQueryExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitQueryExpression(this); + else return visitor.visitChildren(this); + } + } + + public final QueryExpressionContext queryExpression() throws RecognitionException { + QueryExpressionContext _localctx = new QueryExpressionContext(_ctx, getState()); + enterRule(_localctx, 222, RULE_queryExpression); + try { + setState(3420); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,482,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(3412); + match(LR_BRACKET); + setState(3413); + querySpecification(); + setState(3414); + match(RR_BRACKET); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(3416); + match(LR_BRACKET); + setState(3417); + queryExpression(); + setState(3418); + match(RR_BRACKET); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class QueryExpressionNointoContext extends ParserRuleContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public QuerySpecificationNointoContext querySpecificationNointo() { + return getRuleContext(QuerySpecificationNointoContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public QueryExpressionNointoContext queryExpressionNointo() { + return getRuleContext(QueryExpressionNointoContext.class,0); + } + public QueryExpressionNointoContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_queryExpressionNointo; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterQueryExpressionNointo(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitQueryExpressionNointo(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitQueryExpressionNointo(this); + else return visitor.visitChildren(this); + } + } + + public final QueryExpressionNointoContext queryExpressionNointo() throws RecognitionException { + QueryExpressionNointoContext _localctx = new QueryExpressionNointoContext(_ctx, getState()); + enterRule(_localctx, 224, RULE_queryExpressionNointo); + try { + setState(3430); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,483,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(3422); + match(LR_BRACKET); + setState(3423); + querySpecificationNointo(); + setState(3424); + match(RR_BRACKET); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(3426); + match(LR_BRACKET); + setState(3427); + queryExpressionNointo(); + setState(3428); + match(RR_BRACKET); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class QuerySpecificationContext extends ParserRuleContext { + public TerminalNode SELECT() { return getToken(MySqlParser.SELECT, 0); } + public SelectElementsContext selectElements() { + return getRuleContext(SelectElementsContext.class,0); + } + public List selectSpec() { + return getRuleContexts(SelectSpecContext.class); + } + public SelectSpecContext selectSpec(int i) { + return getRuleContext(SelectSpecContext.class,i); + } + public SelectIntoExpressionContext selectIntoExpression() { + return getRuleContext(SelectIntoExpressionContext.class,0); + } + public FromClauseContext fromClause() { + return getRuleContext(FromClauseContext.class,0); + } + public OrderByClauseContext orderByClause() { + return getRuleContext(OrderByClauseContext.class,0); + } + public LimitClauseContext limitClause() { + return getRuleContext(LimitClauseContext.class,0); + } + public QuerySpecificationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_querySpecification; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterQuerySpecification(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitQuerySpecification(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitQuerySpecification(this); + else return visitor.visitChildren(this); + } + } + + public final QuerySpecificationContext querySpecification() throws RecognitionException { + QuerySpecificationContext _localctx = new QuerySpecificationContext(_ctx, getState()); + enterRule(_localctx, 226, RULE_querySpecification); + int _la; + try { + int _alt; + setState(3472); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,494,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(3432); + match(SELECT); + setState(3436); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,484,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3433); + selectSpec(); + } + } + } + setState(3438); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,484,_ctx); + } + setState(3439); + selectElements(); + setState(3441); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INTO) { + { + setState(3440); + selectIntoExpression(); + } + } + + setState(3444); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FROM) { + { + setState(3443); + fromClause(); + } + } + + setState(3447); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,487,_ctx) ) { + case 1: + { + setState(3446); + orderByClause(); + } + break; + } + setState(3450); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,488,_ctx) ) { + case 1: + { + setState(3449); + limitClause(); + } + break; + } + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(3452); + match(SELECT); + setState(3456); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,489,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3453); + selectSpec(); + } + } + } + setState(3458); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,489,_ctx); + } + setState(3459); + selectElements(); + setState(3461); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FROM) { + { + setState(3460); + fromClause(); + } + } + + setState(3464); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,491,_ctx) ) { + case 1: + { + setState(3463); + orderByClause(); + } + break; + } + setState(3467); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,492,_ctx) ) { + case 1: + { + setState(3466); + limitClause(); + } + break; + } + setState(3470); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INTO) { + { + setState(3469); + selectIntoExpression(); + } + } + + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class QuerySpecificationNointoContext extends ParserRuleContext { + public TerminalNode SELECT() { return getToken(MySqlParser.SELECT, 0); } + public SelectElementsContext selectElements() { + return getRuleContext(SelectElementsContext.class,0); + } + public List selectSpec() { + return getRuleContexts(SelectSpecContext.class); + } + public SelectSpecContext selectSpec(int i) { + return getRuleContext(SelectSpecContext.class,i); + } + public FromClauseContext fromClause() { + return getRuleContext(FromClauseContext.class,0); + } + public OrderByClauseContext orderByClause() { + return getRuleContext(OrderByClauseContext.class,0); + } + public LimitClauseContext limitClause() { + return getRuleContext(LimitClauseContext.class,0); + } + public QuerySpecificationNointoContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_querySpecificationNointo; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterQuerySpecificationNointo(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitQuerySpecificationNointo(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitQuerySpecificationNointo(this); + else return visitor.visitChildren(this); + } + } + + public final QuerySpecificationNointoContext querySpecificationNointo() throws RecognitionException { + QuerySpecificationNointoContext _localctx = new QuerySpecificationNointoContext(_ctx, getState()); + enterRule(_localctx, 228, RULE_querySpecificationNointo); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(3474); + match(SELECT); + setState(3478); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,495,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3475); + selectSpec(); + } + } + } + setState(3480); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,495,_ctx); + } + setState(3481); + selectElements(); + setState(3483); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FROM) { + { + setState(3482); + fromClause(); + } + } + + setState(3486); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,497,_ctx) ) { + case 1: + { + setState(3485); + orderByClause(); + } + break; + } + setState(3489); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,498,_ctx) ) { + case 1: + { + setState(3488); + limitClause(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UnionParenthesisContext extends ParserRuleContext { + public Token unionType; + public TerminalNode UNION() { return getToken(MySqlParser.UNION, 0); } + public QueryExpressionNointoContext queryExpressionNointo() { + return getRuleContext(QueryExpressionNointoContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public TerminalNode DISTINCT() { return getToken(MySqlParser.DISTINCT, 0); } + public UnionParenthesisContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unionParenthesis; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUnionParenthesis(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUnionParenthesis(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUnionParenthesis(this); + else return visitor.visitChildren(this); + } + } + + public final UnionParenthesisContext unionParenthesis() throws RecognitionException { + UnionParenthesisContext _localctx = new UnionParenthesisContext(_ctx, getState()); + enterRule(_localctx, 230, RULE_unionParenthesis); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3491); + match(UNION); + setState(3493); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALL || _la==DISTINCT) { + { + setState(3492); + ((UnionParenthesisContext)_localctx).unionType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ALL || _la==DISTINCT) ) { + ((UnionParenthesisContext)_localctx).unionType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(3495); + queryExpressionNointo(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UnionStatementContext extends ParserRuleContext { + public Token unionType; + public TerminalNode UNION() { return getToken(MySqlParser.UNION, 0); } + public QuerySpecificationNointoContext querySpecificationNointo() { + return getRuleContext(QuerySpecificationNointoContext.class,0); + } + public QueryExpressionNointoContext queryExpressionNointo() { + return getRuleContext(QueryExpressionNointoContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public TerminalNode DISTINCT() { return getToken(MySqlParser.DISTINCT, 0); } + public UnionStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unionStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUnionStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUnionStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUnionStatement(this); + else return visitor.visitChildren(this); + } + } + + public final UnionStatementContext unionStatement() throws RecognitionException { + UnionStatementContext _localctx = new UnionStatementContext(_ctx, getState()); + enterRule(_localctx, 232, RULE_unionStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3497); + match(UNION); + setState(3499); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALL || _la==DISTINCT) { + { + setState(3498); + ((UnionStatementContext)_localctx).unionType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ALL || _la==DISTINCT) ) { + ((UnionStatementContext)_localctx).unionType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(3503); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SELECT: + { + setState(3501); + querySpecificationNointo(); + } + break; + case LR_BRACKET: + { + setState(3502); + queryExpressionNointo(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SelectSpecContext extends ParserRuleContext { + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public TerminalNode DISTINCT() { return getToken(MySqlParser.DISTINCT, 0); } + public TerminalNode DISTINCTROW() { return getToken(MySqlParser.DISTINCTROW, 0); } + public TerminalNode HIGH_PRIORITY() { return getToken(MySqlParser.HIGH_PRIORITY, 0); } + public TerminalNode STRAIGHT_JOIN() { return getToken(MySqlParser.STRAIGHT_JOIN, 0); } + public TerminalNode SQL_SMALL_RESULT() { return getToken(MySqlParser.SQL_SMALL_RESULT, 0); } + public TerminalNode SQL_BIG_RESULT() { return getToken(MySqlParser.SQL_BIG_RESULT, 0); } + public TerminalNode SQL_BUFFER_RESULT() { return getToken(MySqlParser.SQL_BUFFER_RESULT, 0); } + public TerminalNode SQL_CACHE() { return getToken(MySqlParser.SQL_CACHE, 0); } + public TerminalNode SQL_NO_CACHE() { return getToken(MySqlParser.SQL_NO_CACHE, 0); } + public TerminalNode SQL_CALC_FOUND_ROWS() { return getToken(MySqlParser.SQL_CALC_FOUND_ROWS, 0); } + public SelectSpecContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectSpec; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSelectSpec(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSelectSpec(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSelectSpec(this); + else return visitor.visitChildren(this); + } + } + + public final SelectSpecContext selectSpec() throws RecognitionException { + SelectSpecContext _localctx = new SelectSpecContext(_ctx, getState()); + enterRule(_localctx, 234, RULE_selectSpec); + int _la; + try { + setState(3513); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ALL: + case DISTINCT: + case DISTINCTROW: + enterOuterAlt(_localctx, 1); + { + setState(3505); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ALL) | (1L << DISTINCT) | (1L << DISTINCTROW))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case HIGH_PRIORITY: + enterOuterAlt(_localctx, 2); + { + setState(3506); + match(HIGH_PRIORITY); + } + break; + case STRAIGHT_JOIN: + enterOuterAlt(_localctx, 3); + { + setState(3507); + match(STRAIGHT_JOIN); + } + break; + case SQL_SMALL_RESULT: + enterOuterAlt(_localctx, 4); + { + setState(3508); + match(SQL_SMALL_RESULT); + } + break; + case SQL_BIG_RESULT: + enterOuterAlt(_localctx, 5); + { + setState(3509); + match(SQL_BIG_RESULT); + } + break; + case SQL_BUFFER_RESULT: + enterOuterAlt(_localctx, 6); + { + setState(3510); + match(SQL_BUFFER_RESULT); + } + break; + case SQL_CACHE: + case SQL_NO_CACHE: + enterOuterAlt(_localctx, 7); + { + setState(3511); + _la = _input.LA(1); + if ( !(_la==SQL_CACHE || _la==SQL_NO_CACHE) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case SQL_CALC_FOUND_ROWS: + enterOuterAlt(_localctx, 8); + { + setState(3512); + match(SQL_CALC_FOUND_ROWS); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SelectElementsContext extends ParserRuleContext { + public Token star; + public List selectElement() { + return getRuleContexts(SelectElementContext.class); + } + public SelectElementContext selectElement(int i) { + return getRuleContext(SelectElementContext.class,i); + } + public TerminalNode STAR() { return getToken(MySqlParser.STAR, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public SelectElementsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectElements; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSelectElements(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSelectElements(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSelectElements(this); + else return visitor.visitChildren(this); + } + } + + public final SelectElementsContext selectElements() throws RecognitionException { + SelectElementsContext _localctx = new SelectElementsContext(_ctx, getState()); + enterRule(_localctx, 236, RULE_selectElements); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3517); + _errHandler.sync(this); + switch (_input.LA(1)) { + case STAR: + { + setState(3515); + ((SelectElementsContext)_localctx).star = match(STAR); + } + break; + case CASE: + case CAST: + case CONVERT: + case CURRENT: + case CURRENT_USER: + case DATABASE: + case DIAGNOSTICS: + case EXISTS: + case FALSE: + case IF: + case INSERT: + case INTERVAL: + case LEFT: + case NOT: + case NULL_LITERAL: + case NUMBER: + case REPLACE: + case RIGHT: + case STACKED: + case TRUE: + case VALUES: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case CHAR: + case BINARY: + case TEXT: + case ENUM: + case SERIAL: + case AVG: + case BIT_AND: + case BIT_OR: + case BIT_XOR: + case COUNT: + case GROUP_CONCAT: + case MAX: + case MIN: + case STD: + case STDDEV: + case STDDEV_POP: + case STDDEV_SAMP: + case SUM: + case VAR_POP: + case VAR_SAMP: + case VARIANCE: + case CURRENT_DATE: + case CURRENT_TIME: + case CURRENT_TIMESTAMP: + case LOCALTIME: + case CURDATE: + case CURTIME: + case DATE_ADD: + case DATE_SUB: + case EXTRACT: + case LOCALTIMESTAMP: + case NOW: + case POSITION: + case SUBSTR: + case SUBSTRING: + case SYSDATE: + case TRIM: + case UTC_DATE: + case UTC_TIME: + case UTC_TIMESTAMP: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case PLUS: + case MINUS: + case EXCLAMATION_SYMBOL: + case BIT_NOT_OP: + case LR_BRACKET: + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case CHARSET_REVERSE_QOUTE_STRING: + case START_NATIONAL_STRING_LITERAL: + case STRING_LITERAL: + case DECIMAL_LITERAL: + case HEXADECIMAL_LITERAL: + case REAL_LITERAL: + case NULL_SPEC_LITERAL: + case BIT_STRING: + case STRING_CHARSET_NAME: + case ID: + case REVERSE_QUOTE_ID: + case LOCAL_ID: + case GLOBAL_ID: + { + setState(3516); + selectElement(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(3523); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3519); + match(COMMA); + setState(3520); + selectElement(); + } + } + setState(3525); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SelectElementContext extends ParserRuleContext { + public SelectElementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectElement; } + + public SelectElementContext() { } + public void copyFrom(SelectElementContext ctx) { + super.copyFrom(ctx); + } + } + public static class SelectExpressionElementContext extends SelectElementContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode LOCAL_ID() { return getToken(MySqlParser.LOCAL_ID, 0); } + public TerminalNode VAR_ASSIGN() { return getToken(MySqlParser.VAR_ASSIGN, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public SelectExpressionElementContext(SelectElementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSelectExpressionElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSelectExpressionElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSelectExpressionElement(this); + else return visitor.visitChildren(this); + } + } + public static class SelectFunctionElementContext extends SelectElementContext { + public FunctionCallContext functionCall() { + return getRuleContext(FunctionCallContext.class,0); + } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public SelectFunctionElementContext(SelectElementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSelectFunctionElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSelectFunctionElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSelectFunctionElement(this); + else return visitor.visitChildren(this); + } + } + public static class SelectStarElementContext extends SelectElementContext { + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public TerminalNode DOT() { return getToken(MySqlParser.DOT, 0); } + public TerminalNode STAR() { return getToken(MySqlParser.STAR, 0); } + public SelectStarElementContext(SelectElementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSelectStarElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSelectStarElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSelectStarElement(this); + else return visitor.visitChildren(this); + } + } + public static class SelectColumnElementContext extends SelectElementContext { + public FullColumnNameContext fullColumnName() { + return getRuleContext(FullColumnNameContext.class,0); + } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public SelectColumnElementContext(SelectElementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSelectColumnElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSelectColumnElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSelectColumnElement(this); + else return visitor.visitChildren(this); + } + } + + public final SelectElementContext selectElement() throws RecognitionException { + SelectElementContext _localctx = new SelectElementContext(_ctx, getState()); + enterRule(_localctx, 238, RULE_selectElement); + int _la; + try { + setState(3555); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,512,_ctx) ) { + case 1: + _localctx = new SelectStarElementContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(3526); + fullId(); + setState(3527); + match(DOT); + setState(3528); + match(STAR); + } + break; + case 2: + _localctx = new SelectColumnElementContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(3530); + fullColumnName(); + setState(3535); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,506,_ctx) ) { + case 1: + { + setState(3532); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(3531); + match(AS); + } + } + + setState(3534); + uid(); + } + break; + } + } + break; + case 3: + _localctx = new SelectFunctionElementContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(3537); + functionCall(); + setState(3542); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,508,_ctx) ) { + case 1: + { + setState(3539); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(3538); + match(AS); + } + } + + setState(3541); + uid(); + } + break; + } + } + break; + case 4: + _localctx = new SelectExpressionElementContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(3546); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,509,_ctx) ) { + case 1: + { + setState(3544); + match(LOCAL_ID); + setState(3545); + match(VAR_ASSIGN); + } + break; + } + setState(3548); + expression(0); + setState(3553); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,511,_ctx) ) { + case 1: + { + setState(3550); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(3549); + match(AS); + } + } + + setState(3552); + uid(); + } + break; + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SelectIntoExpressionContext extends ParserRuleContext { + public SelectIntoExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectIntoExpression; } + + public SelectIntoExpressionContext() { } + public void copyFrom(SelectIntoExpressionContext ctx) { + super.copyFrom(ctx); + } + } + public static class SelectIntoVariablesContext extends SelectIntoExpressionContext { + public TerminalNode INTO() { return getToken(MySqlParser.INTO, 0); } + public List assignmentField() { + return getRuleContexts(AssignmentFieldContext.class); + } + public AssignmentFieldContext assignmentField(int i) { + return getRuleContext(AssignmentFieldContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public SelectIntoVariablesContext(SelectIntoExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSelectIntoVariables(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSelectIntoVariables(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSelectIntoVariables(this); + else return visitor.visitChildren(this); + } + } + public static class SelectIntoTextFileContext extends SelectIntoExpressionContext { + public Token filename; + public CharsetNameContext charset; + public Token fieldsFormat; + public TerminalNode INTO() { return getToken(MySqlParser.INTO, 0); } + public TerminalNode OUTFILE() { return getToken(MySqlParser.OUTFILE, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode LINES() { return getToken(MySqlParser.LINES, 0); } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public TerminalNode FIELDS() { return getToken(MySqlParser.FIELDS, 0); } + public TerminalNode COLUMNS() { return getToken(MySqlParser.COLUMNS, 0); } + public List selectFieldsInto() { + return getRuleContexts(SelectFieldsIntoContext.class); + } + public SelectFieldsIntoContext selectFieldsInto(int i) { + return getRuleContext(SelectFieldsIntoContext.class,i); + } + public List selectLinesInto() { + return getRuleContexts(SelectLinesIntoContext.class); + } + public SelectLinesIntoContext selectLinesInto(int i) { + return getRuleContext(SelectLinesIntoContext.class,i); + } + public SelectIntoTextFileContext(SelectIntoExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSelectIntoTextFile(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSelectIntoTextFile(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSelectIntoTextFile(this); + else return visitor.visitChildren(this); + } + } + public static class SelectIntoDumpFileContext extends SelectIntoExpressionContext { + public TerminalNode INTO() { return getToken(MySqlParser.INTO, 0); } + public TerminalNode DUMPFILE() { return getToken(MySqlParser.DUMPFILE, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public SelectIntoDumpFileContext(SelectIntoExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSelectIntoDumpFile(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSelectIntoDumpFile(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSelectIntoDumpFile(this); + else return visitor.visitChildren(this); + } + } + + public final SelectIntoExpressionContext selectIntoExpression() throws RecognitionException { + SelectIntoExpressionContext _localctx = new SelectIntoExpressionContext(_ctx, getState()); + enterRule(_localctx, 240, RULE_selectIntoExpression); + int _la; + try { + setState(3593); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,519,_ctx) ) { + case 1: + _localctx = new SelectIntoVariablesContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(3557); + match(INTO); + setState(3558); + assignmentField(); + setState(3563); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3559); + match(COMMA); + setState(3560); + assignmentField(); + } + } + setState(3565); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 2: + _localctx = new SelectIntoDumpFileContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(3566); + match(INTO); + setState(3567); + match(DUMPFILE); + setState(3568); + match(STRING_LITERAL); + } + break; + case 3: + _localctx = new SelectIntoTextFileContext(_localctx); + enterOuterAlt(_localctx, 3); + { + { + setState(3569); + match(INTO); + setState(3570); + match(OUTFILE); + setState(3571); + ((SelectIntoTextFileContext)_localctx).filename = match(STRING_LITERAL); + setState(3575); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CHARACTER) { + { + setState(3572); + match(CHARACTER); + setState(3573); + match(SET); + setState(3574); + ((SelectIntoTextFileContext)_localctx).charset = charsetName(); + } + } + + setState(3583); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,516,_ctx) ) { + case 1: + { + setState(3577); + ((SelectIntoTextFileContext)_localctx).fieldsFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==COLUMNS || _la==FIELDS) ) { + ((SelectIntoTextFileContext)_localctx).fieldsFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(3579); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(3578); + selectFieldsInto(); + } + } + setState(3581); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==ENCLOSED || _la==ESCAPED || _la==OPTIONALLY || _la==TERMINATED ); + } + break; + } + setState(3591); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LINES) { + { + setState(3585); + match(LINES); + setState(3587); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(3586); + selectLinesInto(); + } + } + setState(3589); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==STARTING || _la==TERMINATED ); + } + } + + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SelectFieldsIntoContext extends ParserRuleContext { + public Token terminationField; + public Token enclosion; + public Token escaping; + public TerminalNode TERMINATED() { return getToken(MySqlParser.TERMINATED, 0); } + public TerminalNode BY() { return getToken(MySqlParser.BY, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode ENCLOSED() { return getToken(MySqlParser.ENCLOSED, 0); } + public TerminalNode OPTIONALLY() { return getToken(MySqlParser.OPTIONALLY, 0); } + public TerminalNode ESCAPED() { return getToken(MySqlParser.ESCAPED, 0); } + public SelectFieldsIntoContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectFieldsInto; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSelectFieldsInto(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSelectFieldsInto(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSelectFieldsInto(this); + else return visitor.visitChildren(this); + } + } + + public final SelectFieldsIntoContext selectFieldsInto() throws RecognitionException { + SelectFieldsIntoContext _localctx = new SelectFieldsIntoContext(_ctx, getState()); + enterRule(_localctx, 242, RULE_selectFieldsInto); + int _la; + try { + setState(3607); + _errHandler.sync(this); + switch (_input.LA(1)) { + case TERMINATED: + enterOuterAlt(_localctx, 1); + { + setState(3595); + match(TERMINATED); + setState(3596); + match(BY); + setState(3597); + ((SelectFieldsIntoContext)_localctx).terminationField = match(STRING_LITERAL); + } + break; + case ENCLOSED: + case OPTIONALLY: + enterOuterAlt(_localctx, 2); + { + setState(3599); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==OPTIONALLY) { + { + setState(3598); + match(OPTIONALLY); + } + } + + setState(3601); + match(ENCLOSED); + setState(3602); + match(BY); + setState(3603); + ((SelectFieldsIntoContext)_localctx).enclosion = match(STRING_LITERAL); + } + break; + case ESCAPED: + enterOuterAlt(_localctx, 3); + { + setState(3604); + match(ESCAPED); + setState(3605); + match(BY); + setState(3606); + ((SelectFieldsIntoContext)_localctx).escaping = match(STRING_LITERAL); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SelectLinesIntoContext extends ParserRuleContext { + public Token starting; + public Token terminationLine; + public TerminalNode STARTING() { return getToken(MySqlParser.STARTING, 0); } + public TerminalNode BY() { return getToken(MySqlParser.BY, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode TERMINATED() { return getToken(MySqlParser.TERMINATED, 0); } + public SelectLinesIntoContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectLinesInto; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSelectLinesInto(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSelectLinesInto(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSelectLinesInto(this); + else return visitor.visitChildren(this); + } + } + + public final SelectLinesIntoContext selectLinesInto() throws RecognitionException { + SelectLinesIntoContext _localctx = new SelectLinesIntoContext(_ctx, getState()); + enterRule(_localctx, 244, RULE_selectLinesInto); + try { + setState(3615); + _errHandler.sync(this); + switch (_input.LA(1)) { + case STARTING: + enterOuterAlt(_localctx, 1); + { + setState(3609); + match(STARTING); + setState(3610); + match(BY); + setState(3611); + ((SelectLinesIntoContext)_localctx).starting = match(STRING_LITERAL); + } + break; + case TERMINATED: + enterOuterAlt(_localctx, 2); + { + setState(3612); + match(TERMINATED); + setState(3613); + match(BY); + setState(3614); + ((SelectLinesIntoContext)_localctx).terminationLine = match(STRING_LITERAL); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FromClauseContext extends ParserRuleContext { + public ExpressionContext whereExpr; + public ExpressionContext havingExpr; + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public TableSourcesContext tableSources() { + return getRuleContext(TableSourcesContext.class,0); + } + public TerminalNode WHERE() { return getToken(MySqlParser.WHERE, 0); } + public TerminalNode GROUP() { return getToken(MySqlParser.GROUP, 0); } + public TerminalNode BY() { return getToken(MySqlParser.BY, 0); } + public List groupByItem() { + return getRuleContexts(GroupByItemContext.class); + } + public GroupByItemContext groupByItem(int i) { + return getRuleContext(GroupByItemContext.class,i); + } + public TerminalNode HAVING() { return getToken(MySqlParser.HAVING, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public TerminalNode ROLLUP() { return getToken(MySqlParser.ROLLUP, 0); } + public FromClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fromClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFromClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFromClause(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFromClause(this); + else return visitor.visitChildren(this); + } + } + + public final FromClauseContext fromClause() throws RecognitionException { + FromClauseContext _localctx = new FromClauseContext(_ctx, getState()); + enterRule(_localctx, 246, RULE_fromClause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3617); + match(FROM); + setState(3618); + tableSources(); + setState(3621); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(3619); + match(WHERE); + setState(3620); + ((FromClauseContext)_localctx).whereExpr = expression(0); + } + } + + setState(3637); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==GROUP) { + { + setState(3623); + match(GROUP); + setState(3624); + match(BY); + setState(3625); + groupByItem(); + setState(3630); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3626); + match(COMMA); + setState(3627); + groupByItem(); + } + } + setState(3632); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3635); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,525,_ctx) ) { + case 1: + { + setState(3633); + match(WITH); + setState(3634); + match(ROLLUP); + } + break; + } + } + } + + setState(3641); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==HAVING) { + { + setState(3639); + match(HAVING); + setState(3640); + ((FromClauseContext)_localctx).havingExpr = expression(0); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class GroupByItemContext extends ParserRuleContext { + public Token order; + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode ASC() { return getToken(MySqlParser.ASC, 0); } + public TerminalNode DESC() { return getToken(MySqlParser.DESC, 0); } + public GroupByItemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_groupByItem; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterGroupByItem(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitGroupByItem(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitGroupByItem(this); + else return visitor.visitChildren(this); + } + } + + public final GroupByItemContext groupByItem() throws RecognitionException { + GroupByItemContext _localctx = new GroupByItemContext(_ctx, getState()); + enterRule(_localctx, 248, RULE_groupByItem); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3643); + expression(0); + setState(3645); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,528,_ctx) ) { + case 1: + { + setState(3644); + ((GroupByItemContext)_localctx).order = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ASC || _la==DESC) ) { + ((GroupByItemContext)_localctx).order = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LimitClauseContext extends ParserRuleContext { + public LimitClauseAtomContext offset; + public LimitClauseAtomContext limit; + public TerminalNode LIMIT() { return getToken(MySqlParser.LIMIT, 0); } + public TerminalNode OFFSET() { return getToken(MySqlParser.OFFSET, 0); } + public List limitClauseAtom() { + return getRuleContexts(LimitClauseAtomContext.class); + } + public LimitClauseAtomContext limitClauseAtom(int i) { + return getRuleContext(LimitClauseAtomContext.class,i); + } + public TerminalNode COMMA() { return getToken(MySqlParser.COMMA, 0); } + public LimitClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_limitClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLimitClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLimitClause(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLimitClause(this); + else return visitor.visitChildren(this); + } + } + + public final LimitClauseContext limitClause() throws RecognitionException { + LimitClauseContext _localctx = new LimitClauseContext(_ctx, getState()); + enterRule(_localctx, 250, RULE_limitClause); + try { + enterOuterAlt(_localctx, 1); + { + setState(3647); + match(LIMIT); + setState(3658); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,530,_ctx) ) { + case 1: + { + setState(3651); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,529,_ctx) ) { + case 1: + { + setState(3648); + ((LimitClauseContext)_localctx).offset = limitClauseAtom(); + setState(3649); + match(COMMA); + } + break; + } + setState(3653); + ((LimitClauseContext)_localctx).limit = limitClauseAtom(); + } + break; + case 2: + { + setState(3654); + ((LimitClauseContext)_localctx).limit = limitClauseAtom(); + setState(3655); + match(OFFSET); + setState(3656); + ((LimitClauseContext)_localctx).offset = limitClauseAtom(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LimitClauseAtomContext extends ParserRuleContext { + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public MysqlVariableContext mysqlVariable() { + return getRuleContext(MysqlVariableContext.class,0); + } + public LimitClauseAtomContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_limitClauseAtom; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLimitClauseAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLimitClauseAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLimitClauseAtom(this); + else return visitor.visitChildren(this); + } + } + + public final LimitClauseAtomContext limitClauseAtom() throws RecognitionException { + LimitClauseAtomContext _localctx = new LimitClauseAtomContext(_ctx, getState()); + enterRule(_localctx, 252, RULE_limitClauseAtom); + try { + setState(3662); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case DECIMAL_LITERAL: + enterOuterAlt(_localctx, 1); + { + setState(3660); + decimalLiteral(); + } + break; + case LOCAL_ID: + case GLOBAL_ID: + enterOuterAlt(_localctx, 2); + { + setState(3661); + mysqlVariable(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StartTransactionContext extends ParserRuleContext { + public TerminalNode START() { return getToken(MySqlParser.START, 0); } + public TerminalNode TRANSACTION() { return getToken(MySqlParser.TRANSACTION, 0); } + public List transactionMode() { + return getRuleContexts(TransactionModeContext.class); + } + public TransactionModeContext transactionMode(int i) { + return getRuleContext(TransactionModeContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public StartTransactionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_startTransaction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterStartTransaction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitStartTransaction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitStartTransaction(this); + else return visitor.visitChildren(this); + } + } + + public final StartTransactionContext startTransaction() throws RecognitionException { + StartTransactionContext _localctx = new StartTransactionContext(_ctx, getState()); + enterRule(_localctx, 254, RULE_startTransaction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3664); + match(START); + setState(3665); + match(TRANSACTION); + setState(3674); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==READ || _la==WITH) { + { + setState(3666); + transactionMode(); + setState(3671); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3667); + match(COMMA); + setState(3668); + transactionMode(); + } + } + setState(3673); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BeginWorkContext extends ParserRuleContext { + public TerminalNode BEGIN() { return getToken(MySqlParser.BEGIN, 0); } + public TerminalNode WORK() { return getToken(MySqlParser.WORK, 0); } + public BeginWorkContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_beginWork; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBeginWork(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBeginWork(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBeginWork(this); + else return visitor.visitChildren(this); + } + } + + public final BeginWorkContext beginWork() throws RecognitionException { + BeginWorkContext _localctx = new BeginWorkContext(_ctx, getState()); + enterRule(_localctx, 256, RULE_beginWork); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3676); + match(BEGIN); + setState(3678); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WORK) { + { + setState(3677); + match(WORK); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CommitWorkContext extends ParserRuleContext { + public Token nochain; + public Token norelease; + public TerminalNode COMMIT() { return getToken(MySqlParser.COMMIT, 0); } + public TerminalNode WORK() { return getToken(MySqlParser.WORK, 0); } + public TerminalNode AND() { return getToken(MySqlParser.AND, 0); } + public TerminalNode CHAIN() { return getToken(MySqlParser.CHAIN, 0); } + public TerminalNode RELEASE() { return getToken(MySqlParser.RELEASE, 0); } + public List NO() { return getTokens(MySqlParser.NO); } + public TerminalNode NO(int i) { + return getToken(MySqlParser.NO, i); + } + public CommitWorkContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_commitWork; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCommitWork(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCommitWork(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCommitWork(this); + else return visitor.visitChildren(this); + } + } + + public final CommitWorkContext commitWork() throws RecognitionException { + CommitWorkContext _localctx = new CommitWorkContext(_ctx, getState()); + enterRule(_localctx, 258, RULE_commitWork); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3680); + match(COMMIT); + setState(3682); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WORK) { + { + setState(3681); + match(WORK); + } + } + + setState(3689); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AND) { + { + setState(3684); + match(AND); + setState(3686); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NO) { + { + setState(3685); + ((CommitWorkContext)_localctx).nochain = match(NO); + } + } + + setState(3688); + match(CHAIN); + } + } + + setState(3695); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,539,_ctx) ) { + case 1: + { + setState(3692); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NO) { + { + setState(3691); + ((CommitWorkContext)_localctx).norelease = match(NO); + } + } + + setState(3694); + match(RELEASE); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RollbackWorkContext extends ParserRuleContext { + public Token nochain; + public Token norelease; + public TerminalNode ROLLBACK() { return getToken(MySqlParser.ROLLBACK, 0); } + public TerminalNode WORK() { return getToken(MySqlParser.WORK, 0); } + public TerminalNode AND() { return getToken(MySqlParser.AND, 0); } + public TerminalNode CHAIN() { return getToken(MySqlParser.CHAIN, 0); } + public TerminalNode RELEASE() { return getToken(MySqlParser.RELEASE, 0); } + public List NO() { return getTokens(MySqlParser.NO); } + public TerminalNode NO(int i) { + return getToken(MySqlParser.NO, i); + } + public RollbackWorkContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_rollbackWork; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRollbackWork(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRollbackWork(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRollbackWork(this); + else return visitor.visitChildren(this); + } + } + + public final RollbackWorkContext rollbackWork() throws RecognitionException { + RollbackWorkContext _localctx = new RollbackWorkContext(_ctx, getState()); + enterRule(_localctx, 260, RULE_rollbackWork); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3697); + match(ROLLBACK); + setState(3699); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WORK) { + { + setState(3698); + match(WORK); + } + } + + setState(3706); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AND) { + { + setState(3701); + match(AND); + setState(3703); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NO) { + { + setState(3702); + ((RollbackWorkContext)_localctx).nochain = match(NO); + } + } + + setState(3705); + match(CHAIN); + } + } + + setState(3712); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,544,_ctx) ) { + case 1: + { + setState(3709); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NO) { + { + setState(3708); + ((RollbackWorkContext)_localctx).norelease = match(NO); + } + } + + setState(3711); + match(RELEASE); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SavepointStatementContext extends ParserRuleContext { + public TerminalNode SAVEPOINT() { return getToken(MySqlParser.SAVEPOINT, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public SavepointStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_savepointStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSavepointStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSavepointStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSavepointStatement(this); + else return visitor.visitChildren(this); + } + } + + public final SavepointStatementContext savepointStatement() throws RecognitionException { + SavepointStatementContext _localctx = new SavepointStatementContext(_ctx, getState()); + enterRule(_localctx, 262, RULE_savepointStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(3714); + match(SAVEPOINT); + setState(3715); + uid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RollbackStatementContext extends ParserRuleContext { + public TerminalNode ROLLBACK() { return getToken(MySqlParser.ROLLBACK, 0); } + public TerminalNode TO() { return getToken(MySqlParser.TO, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode WORK() { return getToken(MySqlParser.WORK, 0); } + public TerminalNode SAVEPOINT() { return getToken(MySqlParser.SAVEPOINT, 0); } + public RollbackStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_rollbackStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRollbackStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRollbackStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRollbackStatement(this); + else return visitor.visitChildren(this); + } + } + + public final RollbackStatementContext rollbackStatement() throws RecognitionException { + RollbackStatementContext _localctx = new RollbackStatementContext(_ctx, getState()); + enterRule(_localctx, 264, RULE_rollbackStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3717); + match(ROLLBACK); + setState(3719); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WORK) { + { + setState(3718); + match(WORK); + } + } + + setState(3721); + match(TO); + setState(3723); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,546,_ctx) ) { + case 1: + { + setState(3722); + match(SAVEPOINT); + } + break; + } + setState(3725); + uid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ReleaseStatementContext extends ParserRuleContext { + public TerminalNode RELEASE() { return getToken(MySqlParser.RELEASE, 0); } + public TerminalNode SAVEPOINT() { return getToken(MySqlParser.SAVEPOINT, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public ReleaseStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_releaseStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterReleaseStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitReleaseStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitReleaseStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ReleaseStatementContext releaseStatement() throws RecognitionException { + ReleaseStatementContext _localctx = new ReleaseStatementContext(_ctx, getState()); + enterRule(_localctx, 266, RULE_releaseStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(3727); + match(RELEASE); + setState(3728); + match(SAVEPOINT); + setState(3729); + uid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LockTablesContext extends ParserRuleContext { + public TerminalNode LOCK() { return getToken(MySqlParser.LOCK, 0); } + public TerminalNode TABLES() { return getToken(MySqlParser.TABLES, 0); } + public List lockTableElement() { + return getRuleContexts(LockTableElementContext.class); + } + public LockTableElementContext lockTableElement(int i) { + return getRuleContext(LockTableElementContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public LockTablesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lockTables; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLockTables(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLockTables(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLockTables(this); + else return visitor.visitChildren(this); + } + } + + public final LockTablesContext lockTables() throws RecognitionException { + LockTablesContext _localctx = new LockTablesContext(_ctx, getState()); + enterRule(_localctx, 268, RULE_lockTables); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3731); + match(LOCK); + setState(3732); + match(TABLES); + setState(3733); + lockTableElement(); + setState(3738); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3734); + match(COMMA); + setState(3735); + lockTableElement(); + } + } + setState(3740); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UnlockTablesContext extends ParserRuleContext { + public TerminalNode UNLOCK() { return getToken(MySqlParser.UNLOCK, 0); } + public TerminalNode TABLES() { return getToken(MySqlParser.TABLES, 0); } + public UnlockTablesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unlockTables; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUnlockTables(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUnlockTables(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUnlockTables(this); + else return visitor.visitChildren(this); + } + } + + public final UnlockTablesContext unlockTables() throws RecognitionException { + UnlockTablesContext _localctx = new UnlockTablesContext(_ctx, getState()); + enterRule(_localctx, 270, RULE_unlockTables); + try { + enterOuterAlt(_localctx, 1); + { + setState(3741); + match(UNLOCK); + setState(3742); + match(TABLES); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SetAutocommitStatementContext extends ParserRuleContext { + public Token autocommitValue; + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode AUTOCOMMIT() { return getToken(MySqlParser.AUTOCOMMIT, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode ZERO_DECIMAL() { return getToken(MySqlParser.ZERO_DECIMAL, 0); } + public TerminalNode ONE_DECIMAL() { return getToken(MySqlParser.ONE_DECIMAL, 0); } + public SetAutocommitStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_setAutocommitStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSetAutocommitStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSetAutocommitStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSetAutocommitStatement(this); + else return visitor.visitChildren(this); + } + } + + public final SetAutocommitStatementContext setAutocommitStatement() throws RecognitionException { + SetAutocommitStatementContext _localctx = new SetAutocommitStatementContext(_ctx, getState()); + enterRule(_localctx, 272, RULE_setAutocommitStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3744); + match(SET); + setState(3745); + match(AUTOCOMMIT); + setState(3746); + match(EQUAL_SYMBOL); + setState(3747); + ((SetAutocommitStatementContext)_localctx).autocommitValue = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ZERO_DECIMAL || _la==ONE_DECIMAL) ) { + ((SetAutocommitStatementContext)_localctx).autocommitValue = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SetTransactionStatementContext extends ParserRuleContext { + public Token transactionContext; + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode TRANSACTION() { return getToken(MySqlParser.TRANSACTION, 0); } + public List transactionOption() { + return getRuleContexts(TransactionOptionContext.class); + } + public TransactionOptionContext transactionOption(int i) { + return getRuleContext(TransactionOptionContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode GLOBAL() { return getToken(MySqlParser.GLOBAL, 0); } + public TerminalNode SESSION() { return getToken(MySqlParser.SESSION, 0); } + public SetTransactionStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_setTransactionStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSetTransactionStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSetTransactionStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSetTransactionStatement(this); + else return visitor.visitChildren(this); + } + } + + public final SetTransactionStatementContext setTransactionStatement() throws RecognitionException { + SetTransactionStatementContext _localctx = new SetTransactionStatementContext(_ctx, getState()); + enterRule(_localctx, 274, RULE_setTransactionStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3749); + match(SET); + setState(3751); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==GLOBAL || _la==SESSION) { + { + setState(3750); + ((SetTransactionStatementContext)_localctx).transactionContext = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==GLOBAL || _la==SESSION) ) { + ((SetTransactionStatementContext)_localctx).transactionContext = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(3753); + match(TRANSACTION); + setState(3754); + transactionOption(); + setState(3759); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3755); + match(COMMA); + setState(3756); + transactionOption(); + } + } + setState(3761); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TransactionModeContext extends ParserRuleContext { + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public TerminalNode CONSISTENT() { return getToken(MySqlParser.CONSISTENT, 0); } + public TerminalNode SNAPSHOT() { return getToken(MySqlParser.SNAPSHOT, 0); } + public TerminalNode READ() { return getToken(MySqlParser.READ, 0); } + public TerminalNode WRITE() { return getToken(MySqlParser.WRITE, 0); } + public TerminalNode ONLY() { return getToken(MySqlParser.ONLY, 0); } + public TransactionModeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_transactionMode; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTransactionMode(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTransactionMode(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTransactionMode(this); + else return visitor.visitChildren(this); + } + } + + public final TransactionModeContext transactionMode() throws RecognitionException { + TransactionModeContext _localctx = new TransactionModeContext(_ctx, getState()); + enterRule(_localctx, 276, RULE_transactionMode); + try { + setState(3769); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,550,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(3762); + match(WITH); + setState(3763); + match(CONSISTENT); + setState(3764); + match(SNAPSHOT); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(3765); + match(READ); + setState(3766); + match(WRITE); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(3767); + match(READ); + setState(3768); + match(ONLY); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LockTableElementContext extends ParserRuleContext { + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public LockActionContext lockAction() { + return getRuleContext(LockActionContext.class,0); + } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public LockTableElementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lockTableElement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLockTableElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLockTableElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLockTableElement(this); + else return visitor.visitChildren(this); + } + } + + public final LockTableElementContext lockTableElement() throws RecognitionException { + LockTableElementContext _localctx = new LockTableElementContext(_ctx, getState()); + enterRule(_localctx, 278, RULE_lockTableElement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3771); + tableName(); + setState(3776); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << AS) | (1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(3773); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(3772); + match(AS); + } + } + + setState(3775); + uid(); + } + } + + setState(3778); + lockAction(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LockActionContext extends ParserRuleContext { + public TerminalNode READ() { return getToken(MySqlParser.READ, 0); } + public TerminalNode LOCAL() { return getToken(MySqlParser.LOCAL, 0); } + public TerminalNode WRITE() { return getToken(MySqlParser.WRITE, 0); } + public TerminalNode LOW_PRIORITY() { return getToken(MySqlParser.LOW_PRIORITY, 0); } + public LockActionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lockAction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLockAction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLockAction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLockAction(this); + else return visitor.visitChildren(this); + } + } + + public final LockActionContext lockAction() throws RecognitionException { + LockActionContext _localctx = new LockActionContext(_ctx, getState()); + enterRule(_localctx, 280, RULE_lockAction); + int _la; + try { + setState(3788); + _errHandler.sync(this); + switch (_input.LA(1)) { + case READ: + enterOuterAlt(_localctx, 1); + { + setState(3780); + match(READ); + setState(3782); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LOCAL) { + { + setState(3781); + match(LOCAL); + } + } + + } + break; + case LOW_PRIORITY: + case WRITE: + enterOuterAlt(_localctx, 2); + { + setState(3785); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LOW_PRIORITY) { + { + setState(3784); + match(LOW_PRIORITY); + } + } + + setState(3787); + match(WRITE); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TransactionOptionContext extends ParserRuleContext { + public TerminalNode ISOLATION() { return getToken(MySqlParser.ISOLATION, 0); } + public TerminalNode LEVEL() { return getToken(MySqlParser.LEVEL, 0); } + public TransactionLevelContext transactionLevel() { + return getRuleContext(TransactionLevelContext.class,0); + } + public TerminalNode READ() { return getToken(MySqlParser.READ, 0); } + public TerminalNode WRITE() { return getToken(MySqlParser.WRITE, 0); } + public TerminalNode ONLY() { return getToken(MySqlParser.ONLY, 0); } + public TransactionOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_transactionOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTransactionOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTransactionOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTransactionOption(this); + else return visitor.visitChildren(this); + } + } + + public final TransactionOptionContext transactionOption() throws RecognitionException { + TransactionOptionContext _localctx = new TransactionOptionContext(_ctx, getState()); + enterRule(_localctx, 282, RULE_transactionOption); + try { + setState(3797); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,556,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(3790); + match(ISOLATION); + setState(3791); + match(LEVEL); + setState(3792); + transactionLevel(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(3793); + match(READ); + setState(3794); + match(WRITE); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(3795); + match(READ); + setState(3796); + match(ONLY); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TransactionLevelContext extends ParserRuleContext { + public TerminalNode REPEATABLE() { return getToken(MySqlParser.REPEATABLE, 0); } + public TerminalNode READ() { return getToken(MySqlParser.READ, 0); } + public TerminalNode COMMITTED() { return getToken(MySqlParser.COMMITTED, 0); } + public TerminalNode UNCOMMITTED() { return getToken(MySqlParser.UNCOMMITTED, 0); } + public TerminalNode SERIALIZABLE() { return getToken(MySqlParser.SERIALIZABLE, 0); } + public TransactionLevelContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_transactionLevel; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTransactionLevel(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTransactionLevel(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTransactionLevel(this); + else return visitor.visitChildren(this); + } + } + + public final TransactionLevelContext transactionLevel() throws RecognitionException { + TransactionLevelContext _localctx = new TransactionLevelContext(_ctx, getState()); + enterRule(_localctx, 284, RULE_transactionLevel); + try { + setState(3806); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,557,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(3799); + match(REPEATABLE); + setState(3800); + match(READ); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(3801); + match(READ); + setState(3802); + match(COMMITTED); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(3803); + match(READ); + setState(3804); + match(UNCOMMITTED); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(3805); + match(SERIALIZABLE); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ChangeMasterContext extends ParserRuleContext { + public TerminalNode CHANGE() { return getToken(MySqlParser.CHANGE, 0); } + public TerminalNode MASTER() { return getToken(MySqlParser.MASTER, 0); } + public TerminalNode TO() { return getToken(MySqlParser.TO, 0); } + public List masterOption() { + return getRuleContexts(MasterOptionContext.class); + } + public MasterOptionContext masterOption(int i) { + return getRuleContext(MasterOptionContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public ChannelOptionContext channelOption() { + return getRuleContext(ChannelOptionContext.class,0); + } + public ChangeMasterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_changeMaster; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterChangeMaster(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitChangeMaster(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitChangeMaster(this); + else return visitor.visitChildren(this); + } + } + + public final ChangeMasterContext changeMaster() throws RecognitionException { + ChangeMasterContext _localctx = new ChangeMasterContext(_ctx, getState()); + enterRule(_localctx, 286, RULE_changeMaster); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3808); + match(CHANGE); + setState(3809); + match(MASTER); + setState(3810); + match(TO); + setState(3811); + masterOption(); + setState(3816); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3812); + match(COMMA); + setState(3813); + masterOption(); + } + } + setState(3818); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3820); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FOR) { + { + setState(3819); + channelOption(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ChangeReplicationFilterContext extends ParserRuleContext { + public TerminalNode CHANGE() { return getToken(MySqlParser.CHANGE, 0); } + public TerminalNode REPLICATION() { return getToken(MySqlParser.REPLICATION, 0); } + public TerminalNode FILTER() { return getToken(MySqlParser.FILTER, 0); } + public List replicationFilter() { + return getRuleContexts(ReplicationFilterContext.class); + } + public ReplicationFilterContext replicationFilter(int i) { + return getRuleContext(ReplicationFilterContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public ChangeReplicationFilterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_changeReplicationFilter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterChangeReplicationFilter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitChangeReplicationFilter(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitChangeReplicationFilter(this); + else return visitor.visitChildren(this); + } + } + + public final ChangeReplicationFilterContext changeReplicationFilter() throws RecognitionException { + ChangeReplicationFilterContext _localctx = new ChangeReplicationFilterContext(_ctx, getState()); + enterRule(_localctx, 288, RULE_changeReplicationFilter); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3822); + match(CHANGE); + setState(3823); + match(REPLICATION); + setState(3824); + match(FILTER); + setState(3825); + replicationFilter(); + setState(3830); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3826); + match(COMMA); + setState(3827); + replicationFilter(); + } + } + setState(3832); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PurgeBinaryLogsContext extends ParserRuleContext { + public Token purgeFormat; + public Token fileName; + public Token timeValue; + public TerminalNode PURGE() { return getToken(MySqlParser.PURGE, 0); } + public TerminalNode LOGS() { return getToken(MySqlParser.LOGS, 0); } + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public TerminalNode MASTER() { return getToken(MySqlParser.MASTER, 0); } + public TerminalNode TO() { return getToken(MySqlParser.TO, 0); } + public TerminalNode BEFORE() { return getToken(MySqlParser.BEFORE, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public PurgeBinaryLogsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_purgeBinaryLogs; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPurgeBinaryLogs(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPurgeBinaryLogs(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPurgeBinaryLogs(this); + else return visitor.visitChildren(this); + } + } + + public final PurgeBinaryLogsContext purgeBinaryLogs() throws RecognitionException { + PurgeBinaryLogsContext _localctx = new PurgeBinaryLogsContext(_ctx, getState()); + enterRule(_localctx, 290, RULE_purgeBinaryLogs); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3833); + match(PURGE); + setState(3834); + ((PurgeBinaryLogsContext)_localctx).purgeFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==BINARY || _la==MASTER) ) { + ((PurgeBinaryLogsContext)_localctx).purgeFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(3835); + match(LOGS); + setState(3840); + _errHandler.sync(this); + switch (_input.LA(1)) { + case TO: + { + setState(3836); + match(TO); + setState(3837); + ((PurgeBinaryLogsContext)_localctx).fileName = match(STRING_LITERAL); + } + break; + case BEFORE: + { + setState(3838); + match(BEFORE); + setState(3839); + ((PurgeBinaryLogsContext)_localctx).timeValue = match(STRING_LITERAL); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ResetMasterContext extends ParserRuleContext { + public TerminalNode RESET() { return getToken(MySqlParser.RESET, 0); } + public TerminalNode MASTER() { return getToken(MySqlParser.MASTER, 0); } + public ResetMasterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_resetMaster; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterResetMaster(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitResetMaster(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitResetMaster(this); + else return visitor.visitChildren(this); + } + } + + public final ResetMasterContext resetMaster() throws RecognitionException { + ResetMasterContext _localctx = new ResetMasterContext(_ctx, getState()); + enterRule(_localctx, 292, RULE_resetMaster); + try { + enterOuterAlt(_localctx, 1); + { + setState(3842); + match(RESET); + setState(3843); + match(MASTER); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ResetSlaveContext extends ParserRuleContext { + public TerminalNode RESET() { return getToken(MySqlParser.RESET, 0); } + public TerminalNode SLAVE() { return getToken(MySqlParser.SLAVE, 0); } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public ChannelOptionContext channelOption() { + return getRuleContext(ChannelOptionContext.class,0); + } + public ResetSlaveContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_resetSlave; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterResetSlave(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitResetSlave(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitResetSlave(this); + else return visitor.visitChildren(this); + } + } + + public final ResetSlaveContext resetSlave() throws RecognitionException { + ResetSlaveContext _localctx = new ResetSlaveContext(_ctx, getState()); + enterRule(_localctx, 294, RULE_resetSlave); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3845); + match(RESET); + setState(3846); + match(SLAVE); + setState(3848); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALL) { + { + setState(3847); + match(ALL); + } + } + + setState(3851); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FOR) { + { + setState(3850); + channelOption(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StartSlaveContext extends ParserRuleContext { + public TerminalNode START() { return getToken(MySqlParser.START, 0); } + public TerminalNode SLAVE() { return getToken(MySqlParser.SLAVE, 0); } + public List threadType() { + return getRuleContexts(ThreadTypeContext.class); + } + public ThreadTypeContext threadType(int i) { + return getRuleContext(ThreadTypeContext.class,i); + } + public TerminalNode UNTIL() { return getToken(MySqlParser.UNTIL, 0); } + public UntilOptionContext untilOption() { + return getRuleContext(UntilOptionContext.class,0); + } + public List connectionOption() { + return getRuleContexts(ConnectionOptionContext.class); + } + public ConnectionOptionContext connectionOption(int i) { + return getRuleContext(ConnectionOptionContext.class,i); + } + public ChannelOptionContext channelOption() { + return getRuleContext(ChannelOptionContext.class,0); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public StartSlaveContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_startSlave; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterStartSlave(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitStartSlave(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitStartSlave(this); + else return visitor.visitChildren(this); + } + } + + public final StartSlaveContext startSlave() throws RecognitionException { + StartSlaveContext _localctx = new StartSlaveContext(_ctx, getState()); + enterRule(_localctx, 296, RULE_startSlave); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3853); + match(START); + setState(3854); + match(SLAVE); + setState(3863); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IO_THREAD || _la==SQL_THREAD) { + { + setState(3855); + threadType(); + setState(3860); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3856); + match(COMMA); + setState(3857); + threadType(); + } + } + setState(3862); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(3867); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==UNTIL) { + { + setState(3865); + match(UNTIL); + setState(3866); + untilOption(); + } + } + + setState(3872); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==DEFAULT_AUTH || _la==PASSWORD || _la==PLUGIN_DIR || _la==USER) { + { + { + setState(3869); + connectionOption(); + } + } + setState(3874); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3876); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FOR) { + { + setState(3875); + channelOption(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StopSlaveContext extends ParserRuleContext { + public TerminalNode STOP() { return getToken(MySqlParser.STOP, 0); } + public TerminalNode SLAVE() { return getToken(MySqlParser.SLAVE, 0); } + public List threadType() { + return getRuleContexts(ThreadTypeContext.class); + } + public ThreadTypeContext threadType(int i) { + return getRuleContext(ThreadTypeContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public StopSlaveContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_stopSlave; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterStopSlave(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitStopSlave(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitStopSlave(this); + else return visitor.visitChildren(this); + } + } + + public final StopSlaveContext stopSlave() throws RecognitionException { + StopSlaveContext _localctx = new StopSlaveContext(_ctx, getState()); + enterRule(_localctx, 298, RULE_stopSlave); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3878); + match(STOP); + setState(3879); + match(SLAVE); + setState(3888); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IO_THREAD || _la==SQL_THREAD) { + { + setState(3880); + threadType(); + setState(3885); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3881); + match(COMMA); + setState(3882); + threadType(); + } + } + setState(3887); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StartGroupReplicationContext extends ParserRuleContext { + public TerminalNode START() { return getToken(MySqlParser.START, 0); } + public TerminalNode GROUP_REPLICATION() { return getToken(MySqlParser.GROUP_REPLICATION, 0); } + public StartGroupReplicationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_startGroupReplication; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterStartGroupReplication(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitStartGroupReplication(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitStartGroupReplication(this); + else return visitor.visitChildren(this); + } + } + + public final StartGroupReplicationContext startGroupReplication() throws RecognitionException { + StartGroupReplicationContext _localctx = new StartGroupReplicationContext(_ctx, getState()); + enterRule(_localctx, 300, RULE_startGroupReplication); + try { + enterOuterAlt(_localctx, 1); + { + setState(3890); + match(START); + setState(3891); + match(GROUP_REPLICATION); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StopGroupReplicationContext extends ParserRuleContext { + public TerminalNode STOP() { return getToken(MySqlParser.STOP, 0); } + public TerminalNode GROUP_REPLICATION() { return getToken(MySqlParser.GROUP_REPLICATION, 0); } + public StopGroupReplicationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_stopGroupReplication; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterStopGroupReplication(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitStopGroupReplication(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitStopGroupReplication(this); + else return visitor.visitChildren(this); + } + } + + public final StopGroupReplicationContext stopGroupReplication() throws RecognitionException { + StopGroupReplicationContext _localctx = new StopGroupReplicationContext(_ctx, getState()); + enterRule(_localctx, 302, RULE_stopGroupReplication); + try { + enterOuterAlt(_localctx, 1); + { + setState(3893); + match(STOP); + setState(3894); + match(GROUP_REPLICATION); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MasterOptionContext extends ParserRuleContext { + public MasterOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_masterOption; } + + public MasterOptionContext() { } + public void copyFrom(MasterOptionContext ctx) { + super.copyFrom(ctx); + } + } + public static class MasterStringOptionContext extends MasterOptionContext { + public StringMasterOptionContext stringMasterOption() { + return getRuleContext(StringMasterOptionContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public MasterStringOptionContext(MasterOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMasterStringOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMasterStringOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMasterStringOption(this); + else return visitor.visitChildren(this); + } + } + public static class MasterRealOptionContext extends MasterOptionContext { + public TerminalNode MASTER_HEARTBEAT_PERIOD() { return getToken(MySqlParser.MASTER_HEARTBEAT_PERIOD, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode REAL_LITERAL() { return getToken(MySqlParser.REAL_LITERAL, 0); } + public MasterRealOptionContext(MasterOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMasterRealOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMasterRealOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMasterRealOption(this); + else return visitor.visitChildren(this); + } + } + public static class MasterBoolOptionContext extends MasterOptionContext { + public Token boolVal; + public BoolMasterOptionContext boolMasterOption() { + return getRuleContext(BoolMasterOptionContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode ZERO_DECIMAL() { return getToken(MySqlParser.ZERO_DECIMAL, 0); } + public TerminalNode ONE_DECIMAL() { return getToken(MySqlParser.ONE_DECIMAL, 0); } + public MasterBoolOptionContext(MasterOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMasterBoolOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMasterBoolOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMasterBoolOption(this); + else return visitor.visitChildren(this); + } + } + public static class MasterUidListOptionContext extends MasterOptionContext { + public TerminalNode IGNORE_SERVER_IDS() { return getToken(MySqlParser.IGNORE_SERVER_IDS, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public MasterUidListOptionContext(MasterOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMasterUidListOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMasterUidListOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMasterUidListOption(this); + else return visitor.visitChildren(this); + } + } + public static class MasterDecimalOptionContext extends MasterOptionContext { + public DecimalMasterOptionContext decimalMasterOption() { + return getRuleContext(DecimalMasterOptionContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public MasterDecimalOptionContext(MasterOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMasterDecimalOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMasterDecimalOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMasterDecimalOption(this); + else return visitor.visitChildren(this); + } + } + + public final MasterOptionContext masterOption() throws RecognitionException { + MasterOptionContext _localctx = new MasterOptionContext(_ctx, getState()); + enterRule(_localctx, 304, RULE_masterOption); + int _la; + try { + setState(3925); + _errHandler.sync(this); + switch (_input.LA(1)) { + case MASTER_BIND: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_PASSWORD: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case RELAY_LOG_FILE: + _localctx = new MasterStringOptionContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(3896); + stringMasterOption(); + setState(3897); + match(EQUAL_SYMBOL); + setState(3898); + match(STRING_LITERAL); + } + break; + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_LOG_POS: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case RELAY_LOG_POS: + _localctx = new MasterDecimalOptionContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(3900); + decimalMasterOption(); + setState(3901); + match(EQUAL_SYMBOL); + setState(3902); + decimalLiteral(); + } + break; + case MASTER_SSL_VERIFY_SERVER_CERT: + case MASTER_AUTO_POSITION: + case MASTER_SSL: + _localctx = new MasterBoolOptionContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(3904); + boolMasterOption(); + setState(3905); + match(EQUAL_SYMBOL); + setState(3906); + ((MasterBoolOptionContext)_localctx).boolVal = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ZERO_DECIMAL || _la==ONE_DECIMAL) ) { + ((MasterBoolOptionContext)_localctx).boolVal = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case MASTER_HEARTBEAT_PERIOD: + _localctx = new MasterRealOptionContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(3908); + match(MASTER_HEARTBEAT_PERIOD); + setState(3909); + match(EQUAL_SYMBOL); + setState(3910); + match(REAL_LITERAL); + } + break; + case IGNORE_SERVER_IDS: + _localctx = new MasterUidListOptionContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(3911); + match(IGNORE_SERVER_IDS); + setState(3912); + match(EQUAL_SYMBOL); + setState(3913); + match(LR_BRACKET); + setState(3922); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(3914); + uid(); + setState(3919); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3915); + match(COMMA); + setState(3916); + uid(); + } + } + setState(3921); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(3924); + match(RR_BRACKET); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StringMasterOptionContext extends ParserRuleContext { + public TerminalNode MASTER_BIND() { return getToken(MySqlParser.MASTER_BIND, 0); } + public TerminalNode MASTER_HOST() { return getToken(MySqlParser.MASTER_HOST, 0); } + public TerminalNode MASTER_USER() { return getToken(MySqlParser.MASTER_USER, 0); } + public TerminalNode MASTER_PASSWORD() { return getToken(MySqlParser.MASTER_PASSWORD, 0); } + public TerminalNode MASTER_LOG_FILE() { return getToken(MySqlParser.MASTER_LOG_FILE, 0); } + public TerminalNode RELAY_LOG_FILE() { return getToken(MySqlParser.RELAY_LOG_FILE, 0); } + public TerminalNode MASTER_SSL_CA() { return getToken(MySqlParser.MASTER_SSL_CA, 0); } + public TerminalNode MASTER_SSL_CAPATH() { return getToken(MySqlParser.MASTER_SSL_CAPATH, 0); } + public TerminalNode MASTER_SSL_CERT() { return getToken(MySqlParser.MASTER_SSL_CERT, 0); } + public TerminalNode MASTER_SSL_CRL() { return getToken(MySqlParser.MASTER_SSL_CRL, 0); } + public TerminalNode MASTER_SSL_CRLPATH() { return getToken(MySqlParser.MASTER_SSL_CRLPATH, 0); } + public TerminalNode MASTER_SSL_KEY() { return getToken(MySqlParser.MASTER_SSL_KEY, 0); } + public TerminalNode MASTER_SSL_CIPHER() { return getToken(MySqlParser.MASTER_SSL_CIPHER, 0); } + public TerminalNode MASTER_TLS_VERSION() { return getToken(MySqlParser.MASTER_TLS_VERSION, 0); } + public StringMasterOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_stringMasterOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterStringMasterOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitStringMasterOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitStringMasterOption(this); + else return visitor.visitChildren(this); + } + } + + public final StringMasterOptionContext stringMasterOption() throws RecognitionException { + StringMasterOptionContext _localctx = new StringMasterOptionContext(_ctx, getState()); + enterRule(_localctx, 306, RULE_stringMasterOption); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3927); + _la = _input.LA(1); + if ( !(_la==MASTER_BIND || ((((_la - 410)) & ~0x3f) == 0 && ((1L << (_la - 410)) & ((1L << (MASTER_HOST - 410)) | (1L << (MASTER_LOG_FILE - 410)) | (1L << (MASTER_PASSWORD - 410)) | (1L << (MASTER_SSL_CA - 410)) | (1L << (MASTER_SSL_CAPATH - 410)) | (1L << (MASTER_SSL_CERT - 410)) | (1L << (MASTER_SSL_CIPHER - 410)) | (1L << (MASTER_SSL_CRL - 410)) | (1L << (MASTER_SSL_CRLPATH - 410)) | (1L << (MASTER_SSL_KEY - 410)) | (1L << (MASTER_TLS_VERSION - 410)) | (1L << (MASTER_USER - 410)))) != 0) || _la==RELAY_LOG_FILE) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DecimalMasterOptionContext extends ParserRuleContext { + public TerminalNode MASTER_PORT() { return getToken(MySqlParser.MASTER_PORT, 0); } + public TerminalNode MASTER_CONNECT_RETRY() { return getToken(MySqlParser.MASTER_CONNECT_RETRY, 0); } + public TerminalNode MASTER_RETRY_COUNT() { return getToken(MySqlParser.MASTER_RETRY_COUNT, 0); } + public TerminalNode MASTER_DELAY() { return getToken(MySqlParser.MASTER_DELAY, 0); } + public TerminalNode MASTER_LOG_POS() { return getToken(MySqlParser.MASTER_LOG_POS, 0); } + public TerminalNode RELAY_LOG_POS() { return getToken(MySqlParser.RELAY_LOG_POS, 0); } + public DecimalMasterOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_decimalMasterOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDecimalMasterOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDecimalMasterOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDecimalMasterOption(this); + else return visitor.visitChildren(this); + } + } + + public final DecimalMasterOptionContext decimalMasterOption() throws RecognitionException { + DecimalMasterOptionContext _localctx = new DecimalMasterOptionContext(_ctx, getState()); + enterRule(_localctx, 308, RULE_decimalMasterOption); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3929); + _la = _input.LA(1); + if ( !(((((_la - 407)) & ~0x3f) == 0 && ((1L << (_la - 407)) & ((1L << (MASTER_CONNECT_RETRY - 407)) | (1L << (MASTER_DELAY - 407)) | (1L << (MASTER_LOG_POS - 407)) | (1L << (MASTER_PORT - 407)) | (1L << (MASTER_RETRY_COUNT - 407)))) != 0) || _la==RELAY_LOG_POS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BoolMasterOptionContext extends ParserRuleContext { + public TerminalNode MASTER_AUTO_POSITION() { return getToken(MySqlParser.MASTER_AUTO_POSITION, 0); } + public TerminalNode MASTER_SSL() { return getToken(MySqlParser.MASTER_SSL, 0); } + public TerminalNode MASTER_SSL_VERIFY_SERVER_CERT() { return getToken(MySqlParser.MASTER_SSL_VERIFY_SERVER_CERT, 0); } + public BoolMasterOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_boolMasterOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBoolMasterOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBoolMasterOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBoolMasterOption(this); + else return visitor.visitChildren(this); + } + } + + public final BoolMasterOptionContext boolMasterOption() throws RecognitionException { + BoolMasterOptionContext _localctx = new BoolMasterOptionContext(_ctx, getState()); + enterRule(_localctx, 310, RULE_boolMasterOption); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3931); + _la = _input.LA(1); + if ( !(_la==MASTER_SSL_VERIFY_SERVER_CERT || _la==MASTER_AUTO_POSITION || _la==MASTER_SSL) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ChannelOptionContext extends ParserRuleContext { + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public TerminalNode CHANNEL() { return getToken(MySqlParser.CHANNEL, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public ChannelOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_channelOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterChannelOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitChannelOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitChannelOption(this); + else return visitor.visitChildren(this); + } + } + + public final ChannelOptionContext channelOption() throws RecognitionException { + ChannelOptionContext _localctx = new ChannelOptionContext(_ctx, getState()); + enterRule(_localctx, 312, RULE_channelOption); + try { + enterOuterAlt(_localctx, 1); + { + setState(3933); + match(FOR); + setState(3934); + match(CHANNEL); + setState(3935); + match(STRING_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ReplicationFilterContext extends ParserRuleContext { + public ReplicationFilterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_replicationFilter; } + + public ReplicationFilterContext() { } + public void copyFrom(ReplicationFilterContext ctx) { + super.copyFrom(ctx); + } + } + public static class WildIgnoreTableReplicationContext extends ReplicationFilterContext { + public TerminalNode REPLICATE_WILD_IGNORE_TABLE() { return getToken(MySqlParser.REPLICATE_WILD_IGNORE_TABLE, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public SimpleStringsContext simpleStrings() { + return getRuleContext(SimpleStringsContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public WildIgnoreTableReplicationContext(ReplicationFilterContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterWildIgnoreTableReplication(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitWildIgnoreTableReplication(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitWildIgnoreTableReplication(this); + else return visitor.visitChildren(this); + } + } + public static class DoTableReplicationContext extends ReplicationFilterContext { + public TerminalNode REPLICATE_DO_TABLE() { return getToken(MySqlParser.REPLICATE_DO_TABLE, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TablesContext tables() { + return getRuleContext(TablesContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public DoTableReplicationContext(ReplicationFilterContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDoTableReplication(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDoTableReplication(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDoTableReplication(this); + else return visitor.visitChildren(this); + } + } + public static class IgnoreTableReplicationContext extends ReplicationFilterContext { + public TerminalNode REPLICATE_IGNORE_TABLE() { return getToken(MySqlParser.REPLICATE_IGNORE_TABLE, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TablesContext tables() { + return getRuleContext(TablesContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public IgnoreTableReplicationContext(ReplicationFilterContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIgnoreTableReplication(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIgnoreTableReplication(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIgnoreTableReplication(this); + else return visitor.visitChildren(this); + } + } + public static class RewriteDbReplicationContext extends ReplicationFilterContext { + public TerminalNode REPLICATE_REWRITE_DB() { return getToken(MySqlParser.REPLICATE_REWRITE_DB, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List tablePair() { + return getRuleContexts(TablePairContext.class); + } + public TablePairContext tablePair(int i) { + return getRuleContext(TablePairContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public RewriteDbReplicationContext(ReplicationFilterContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRewriteDbReplication(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRewriteDbReplication(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRewriteDbReplication(this); + else return visitor.visitChildren(this); + } + } + public static class DoDbReplicationContext extends ReplicationFilterContext { + public TerminalNode REPLICATE_DO_DB() { return getToken(MySqlParser.REPLICATE_DO_DB, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public DoDbReplicationContext(ReplicationFilterContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDoDbReplication(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDoDbReplication(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDoDbReplication(this); + else return visitor.visitChildren(this); + } + } + public static class IgnoreDbReplicationContext extends ReplicationFilterContext { + public TerminalNode REPLICATE_IGNORE_DB() { return getToken(MySqlParser.REPLICATE_IGNORE_DB, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public IgnoreDbReplicationContext(ReplicationFilterContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIgnoreDbReplication(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIgnoreDbReplication(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIgnoreDbReplication(this); + else return visitor.visitChildren(this); + } + } + public static class WildDoTableReplicationContext extends ReplicationFilterContext { + public TerminalNode REPLICATE_WILD_DO_TABLE() { return getToken(MySqlParser.REPLICATE_WILD_DO_TABLE, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public SimpleStringsContext simpleStrings() { + return getRuleContext(SimpleStringsContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public WildDoTableReplicationContext(ReplicationFilterContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterWildDoTableReplication(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitWildDoTableReplication(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitWildDoTableReplication(this); + else return visitor.visitChildren(this); + } + } + + public final ReplicationFilterContext replicationFilter() throws RecognitionException { + ReplicationFilterContext _localctx = new ReplicationFilterContext(_ctx, getState()); + enterRule(_localctx, 314, RULE_replicationFilter); + int _la; + try { + setState(3986); + _errHandler.sync(this); + switch (_input.LA(1)) { + case REPLICATE_DO_DB: + _localctx = new DoDbReplicationContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(3937); + match(REPLICATE_DO_DB); + setState(3938); + match(EQUAL_SYMBOL); + setState(3939); + match(LR_BRACKET); + setState(3940); + uidList(); + setState(3941); + match(RR_BRACKET); + } + break; + case REPLICATE_IGNORE_DB: + _localctx = new IgnoreDbReplicationContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(3943); + match(REPLICATE_IGNORE_DB); + setState(3944); + match(EQUAL_SYMBOL); + setState(3945); + match(LR_BRACKET); + setState(3946); + uidList(); + setState(3947); + match(RR_BRACKET); + } + break; + case REPLICATE_DO_TABLE: + _localctx = new DoTableReplicationContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(3949); + match(REPLICATE_DO_TABLE); + setState(3950); + match(EQUAL_SYMBOL); + setState(3951); + match(LR_BRACKET); + setState(3952); + tables(); + setState(3953); + match(RR_BRACKET); + } + break; + case REPLICATE_IGNORE_TABLE: + _localctx = new IgnoreTableReplicationContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(3955); + match(REPLICATE_IGNORE_TABLE); + setState(3956); + match(EQUAL_SYMBOL); + setState(3957); + match(LR_BRACKET); + setState(3958); + tables(); + setState(3959); + match(RR_BRACKET); + } + break; + case REPLICATE_WILD_DO_TABLE: + _localctx = new WildDoTableReplicationContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(3961); + match(REPLICATE_WILD_DO_TABLE); + setState(3962); + match(EQUAL_SYMBOL); + setState(3963); + match(LR_BRACKET); + setState(3964); + simpleStrings(); + setState(3965); + match(RR_BRACKET); + } + break; + case REPLICATE_WILD_IGNORE_TABLE: + _localctx = new WildIgnoreTableReplicationContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(3967); + match(REPLICATE_WILD_IGNORE_TABLE); + setState(3968); + match(EQUAL_SYMBOL); + setState(3969); + match(LR_BRACKET); + setState(3970); + simpleStrings(); + setState(3971); + match(RR_BRACKET); + } + break; + case REPLICATE_REWRITE_DB: + _localctx = new RewriteDbReplicationContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(3973); + match(REPLICATE_REWRITE_DB); + setState(3974); + match(EQUAL_SYMBOL); + setState(3975); + match(LR_BRACKET); + setState(3976); + tablePair(); + setState(3981); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(3977); + match(COMMA); + setState(3978); + tablePair(); + } + } + setState(3983); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3984); + match(RR_BRACKET); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TablePairContext extends ParserRuleContext { + public TableNameContext firstTable; + public TableNameContext secondTable; + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode COMMA() { return getToken(MySqlParser.COMMA, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List tableName() { + return getRuleContexts(TableNameContext.class); + } + public TableNameContext tableName(int i) { + return getRuleContext(TableNameContext.class,i); + } + public TablePairContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tablePair; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTablePair(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTablePair(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTablePair(this); + else return visitor.visitChildren(this); + } + } + + public final TablePairContext tablePair() throws RecognitionException { + TablePairContext _localctx = new TablePairContext(_ctx, getState()); + enterRule(_localctx, 316, RULE_tablePair); + try { + enterOuterAlt(_localctx, 1); + { + setState(3988); + match(LR_BRACKET); + setState(3989); + ((TablePairContext)_localctx).firstTable = tableName(); + setState(3990); + match(COMMA); + setState(3991); + ((TablePairContext)_localctx).secondTable = tableName(); + setState(3992); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ThreadTypeContext extends ParserRuleContext { + public TerminalNode IO_THREAD() { return getToken(MySqlParser.IO_THREAD, 0); } + public TerminalNode SQL_THREAD() { return getToken(MySqlParser.SQL_THREAD, 0); } + public ThreadTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_threadType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterThreadType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitThreadType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitThreadType(this); + else return visitor.visitChildren(this); + } + } + + public final ThreadTypeContext threadType() throws RecognitionException { + ThreadTypeContext _localctx = new ThreadTypeContext(_ctx, getState()); + enterRule(_localctx, 318, RULE_threadType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3994); + _la = _input.LA(1); + if ( !(_la==IO_THREAD || _la==SQL_THREAD) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UntilOptionContext extends ParserRuleContext { + public UntilOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_untilOption; } + + public UntilOptionContext() { } + public void copyFrom(UntilOptionContext ctx) { + super.copyFrom(ctx); + } + } + public static class GtidsUntilOptionContext extends UntilOptionContext { + public Token gtids; + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public GtuidSetContext gtuidSet() { + return getRuleContext(GtuidSetContext.class,0); + } + public TerminalNode SQL_BEFORE_GTIDS() { return getToken(MySqlParser.SQL_BEFORE_GTIDS, 0); } + public TerminalNode SQL_AFTER_GTIDS() { return getToken(MySqlParser.SQL_AFTER_GTIDS, 0); } + public GtidsUntilOptionContext(UntilOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterGtidsUntilOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitGtidsUntilOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitGtidsUntilOption(this); + else return visitor.visitChildren(this); + } + } + public static class SqlGapsUntilOptionContext extends UntilOptionContext { + public TerminalNode SQL_AFTER_MTS_GAPS() { return getToken(MySqlParser.SQL_AFTER_MTS_GAPS, 0); } + public SqlGapsUntilOptionContext(UntilOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSqlGapsUntilOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSqlGapsUntilOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSqlGapsUntilOption(this); + else return visitor.visitChildren(this); + } + } + public static class MasterLogUntilOptionContext extends UntilOptionContext { + public TerminalNode MASTER_LOG_FILE() { return getToken(MySqlParser.MASTER_LOG_FILE, 0); } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode COMMA() { return getToken(MySqlParser.COMMA, 0); } + public TerminalNode MASTER_LOG_POS() { return getToken(MySqlParser.MASTER_LOG_POS, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public MasterLogUntilOptionContext(UntilOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMasterLogUntilOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMasterLogUntilOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMasterLogUntilOption(this); + else return visitor.visitChildren(this); + } + } + public static class RelayLogUntilOptionContext extends UntilOptionContext { + public TerminalNode RELAY_LOG_FILE() { return getToken(MySqlParser.RELAY_LOG_FILE, 0); } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode COMMA() { return getToken(MySqlParser.COMMA, 0); } + public TerminalNode RELAY_LOG_POS() { return getToken(MySqlParser.RELAY_LOG_POS, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public RelayLogUntilOptionContext(UntilOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRelayLogUntilOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRelayLogUntilOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRelayLogUntilOption(this); + else return visitor.visitChildren(this); + } + } + + public final UntilOptionContext untilOption() throws RecognitionException { + UntilOptionContext _localctx = new UntilOptionContext(_ctx, getState()); + enterRule(_localctx, 320, RULE_untilOption); + int _la; + try { + setState(4014); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SQL_AFTER_GTIDS: + case SQL_BEFORE_GTIDS: + _localctx = new GtidsUntilOptionContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(3996); + ((GtidsUntilOptionContext)_localctx).gtids = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==SQL_AFTER_GTIDS || _la==SQL_BEFORE_GTIDS) ) { + ((GtidsUntilOptionContext)_localctx).gtids = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(3997); + match(EQUAL_SYMBOL); + setState(3998); + gtuidSet(); + } + break; + case MASTER_LOG_FILE: + _localctx = new MasterLogUntilOptionContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(3999); + match(MASTER_LOG_FILE); + setState(4000); + match(EQUAL_SYMBOL); + setState(4001); + match(STRING_LITERAL); + setState(4002); + match(COMMA); + setState(4003); + match(MASTER_LOG_POS); + setState(4004); + match(EQUAL_SYMBOL); + setState(4005); + decimalLiteral(); + } + break; + case RELAY_LOG_FILE: + _localctx = new RelayLogUntilOptionContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(4006); + match(RELAY_LOG_FILE); + setState(4007); + match(EQUAL_SYMBOL); + setState(4008); + match(STRING_LITERAL); + setState(4009); + match(COMMA); + setState(4010); + match(RELAY_LOG_POS); + setState(4011); + match(EQUAL_SYMBOL); + setState(4012); + decimalLiteral(); + } + break; + case SQL_AFTER_MTS_GAPS: + _localctx = new SqlGapsUntilOptionContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(4013); + match(SQL_AFTER_MTS_GAPS); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConnectionOptionContext extends ParserRuleContext { + public ConnectionOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_connectionOption; } + + public ConnectionOptionContext() { } + public void copyFrom(ConnectionOptionContext ctx) { + super.copyFrom(ctx); + } + } + public static class PluginDirConnectionOptionContext extends ConnectionOptionContext { + public Token conOptPluginDir; + public TerminalNode PLUGIN_DIR() { return getToken(MySqlParser.PLUGIN_DIR, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public PluginDirConnectionOptionContext(ConnectionOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPluginDirConnectionOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPluginDirConnectionOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPluginDirConnectionOption(this); + else return visitor.visitChildren(this); + } + } + public static class UserConnectionOptionContext extends ConnectionOptionContext { + public Token conOptUser; + public TerminalNode USER() { return getToken(MySqlParser.USER, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public UserConnectionOptionContext(ConnectionOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUserConnectionOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUserConnectionOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUserConnectionOption(this); + else return visitor.visitChildren(this); + } + } + public static class DefaultAuthConnectionOptionContext extends ConnectionOptionContext { + public Token conOptDefAuth; + public TerminalNode DEFAULT_AUTH() { return getToken(MySqlParser.DEFAULT_AUTH, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public DefaultAuthConnectionOptionContext(ConnectionOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDefaultAuthConnectionOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDefaultAuthConnectionOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDefaultAuthConnectionOption(this); + else return visitor.visitChildren(this); + } + } + public static class PasswordConnectionOptionContext extends ConnectionOptionContext { + public Token conOptPassword; + public TerminalNode PASSWORD() { return getToken(MySqlParser.PASSWORD, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public PasswordConnectionOptionContext(ConnectionOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPasswordConnectionOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPasswordConnectionOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPasswordConnectionOption(this); + else return visitor.visitChildren(this); + } + } + + public final ConnectionOptionContext connectionOption() throws RecognitionException { + ConnectionOptionContext _localctx = new ConnectionOptionContext(_ctx, getState()); + enterRule(_localctx, 322, RULE_connectionOption); + try { + setState(4028); + _errHandler.sync(this); + switch (_input.LA(1)) { + case USER: + _localctx = new UserConnectionOptionContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(4016); + match(USER); + setState(4017); + match(EQUAL_SYMBOL); + setState(4018); + ((UserConnectionOptionContext)_localctx).conOptUser = match(STRING_LITERAL); + } + break; + case PASSWORD: + _localctx = new PasswordConnectionOptionContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(4019); + match(PASSWORD); + setState(4020); + match(EQUAL_SYMBOL); + setState(4021); + ((PasswordConnectionOptionContext)_localctx).conOptPassword = match(STRING_LITERAL); + } + break; + case DEFAULT_AUTH: + _localctx = new DefaultAuthConnectionOptionContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(4022); + match(DEFAULT_AUTH); + setState(4023); + match(EQUAL_SYMBOL); + setState(4024); + ((DefaultAuthConnectionOptionContext)_localctx).conOptDefAuth = match(STRING_LITERAL); + } + break; + case PLUGIN_DIR: + _localctx = new PluginDirConnectionOptionContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(4025); + match(PLUGIN_DIR); + setState(4026); + match(EQUAL_SYMBOL); + setState(4027); + ((PluginDirConnectionOptionContext)_localctx).conOptPluginDir = match(STRING_LITERAL); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class GtuidSetContext extends ParserRuleContext { + public List uuidSet() { + return getRuleContexts(UuidSetContext.class); + } + public UuidSetContext uuidSet(int i) { + return getRuleContext(UuidSetContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public GtuidSetContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_gtuidSet; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterGtuidSet(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitGtuidSet(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitGtuidSet(this); + else return visitor.visitChildren(this); + } + } + + public final GtuidSetContext gtuidSet() throws RecognitionException { + GtuidSetContext _localctx = new GtuidSetContext(_ctx, getState()); + enterRule(_localctx, 324, RULE_gtuidSet); + int _la; + try { + setState(4039); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case DECIMAL_LITERAL: + enterOuterAlt(_localctx, 1); + { + setState(4030); + uuidSet(); + setState(4035); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4031); + match(COMMA); + setState(4032); + uuidSet(); + } + } + setState(4037); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case STRING_LITERAL: + enterOuterAlt(_localctx, 2); + { + setState(4038); + match(STRING_LITERAL); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class XaStartTransactionContext extends ParserRuleContext { + public Token xaStart; + public Token xaAction; + public TerminalNode XA() { return getToken(MySqlParser.XA, 0); } + public XidContext xid() { + return getRuleContext(XidContext.class,0); + } + public TerminalNode START() { return getToken(MySqlParser.START, 0); } + public TerminalNode BEGIN() { return getToken(MySqlParser.BEGIN, 0); } + public TerminalNode JOIN() { return getToken(MySqlParser.JOIN, 0); } + public TerminalNode RESUME() { return getToken(MySqlParser.RESUME, 0); } + public XaStartTransactionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_xaStartTransaction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterXaStartTransaction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitXaStartTransaction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitXaStartTransaction(this); + else return visitor.visitChildren(this); + } + } + + public final XaStartTransactionContext xaStartTransaction() throws RecognitionException { + XaStartTransactionContext _localctx = new XaStartTransactionContext(_ctx, getState()); + enterRule(_localctx, 326, RULE_xaStartTransaction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4041); + match(XA); + setState(4042); + ((XaStartTransactionContext)_localctx).xaStart = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==BEGIN || _la==START) ) { + ((XaStartTransactionContext)_localctx).xaStart = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4043); + xid(); + setState(4045); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==JOIN || _la==RESUME) { + { + setState(4044); + ((XaStartTransactionContext)_localctx).xaAction = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==JOIN || _la==RESUME) ) { + ((XaStartTransactionContext)_localctx).xaAction = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class XaEndTransactionContext extends ParserRuleContext { + public TerminalNode XA() { return getToken(MySqlParser.XA, 0); } + public TerminalNode END() { return getToken(MySqlParser.END, 0); } + public XidContext xid() { + return getRuleContext(XidContext.class,0); + } + public TerminalNode SUSPEND() { return getToken(MySqlParser.SUSPEND, 0); } + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public TerminalNode MIGRATE() { return getToken(MySqlParser.MIGRATE, 0); } + public XaEndTransactionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_xaEndTransaction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterXaEndTransaction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitXaEndTransaction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitXaEndTransaction(this); + else return visitor.visitChildren(this); + } + } + + public final XaEndTransactionContext xaEndTransaction() throws RecognitionException { + XaEndTransactionContext _localctx = new XaEndTransactionContext(_ctx, getState()); + enterRule(_localctx, 328, RULE_xaEndTransaction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4047); + match(XA); + setState(4048); + match(END); + setState(4049); + xid(); + setState(4055); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SUSPEND) { + { + setState(4050); + match(SUSPEND); + setState(4053); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FOR) { + { + setState(4051); + match(FOR); + setState(4052); + match(MIGRATE); + } + } + + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class XaPrepareStatementContext extends ParserRuleContext { + public TerminalNode XA() { return getToken(MySqlParser.XA, 0); } + public TerminalNode PREPARE() { return getToken(MySqlParser.PREPARE, 0); } + public XidContext xid() { + return getRuleContext(XidContext.class,0); + } + public XaPrepareStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_xaPrepareStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterXaPrepareStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitXaPrepareStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitXaPrepareStatement(this); + else return visitor.visitChildren(this); + } + } + + public final XaPrepareStatementContext xaPrepareStatement() throws RecognitionException { + XaPrepareStatementContext _localctx = new XaPrepareStatementContext(_ctx, getState()); + enterRule(_localctx, 330, RULE_xaPrepareStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(4057); + match(XA); + setState(4058); + match(PREPARE); + setState(4059); + xid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class XaCommitWorkContext extends ParserRuleContext { + public TerminalNode XA() { return getToken(MySqlParser.XA, 0); } + public TerminalNode COMMIT() { return getToken(MySqlParser.COMMIT, 0); } + public XidContext xid() { + return getRuleContext(XidContext.class,0); + } + public TerminalNode ONE() { return getToken(MySqlParser.ONE, 0); } + public TerminalNode PHASE() { return getToken(MySqlParser.PHASE, 0); } + public XaCommitWorkContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_xaCommitWork; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterXaCommitWork(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitXaCommitWork(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitXaCommitWork(this); + else return visitor.visitChildren(this); + } + } + + public final XaCommitWorkContext xaCommitWork() throws RecognitionException { + XaCommitWorkContext _localctx = new XaCommitWorkContext(_ctx, getState()); + enterRule(_localctx, 332, RULE_xaCommitWork); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4061); + match(XA); + setState(4062); + match(COMMIT); + setState(4063); + xid(); + setState(4066); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ONE) { + { + setState(4064); + match(ONE); + setState(4065); + match(PHASE); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class XaRollbackWorkContext extends ParserRuleContext { + public TerminalNode XA() { return getToken(MySqlParser.XA, 0); } + public TerminalNode ROLLBACK() { return getToken(MySqlParser.ROLLBACK, 0); } + public XidContext xid() { + return getRuleContext(XidContext.class,0); + } + public XaRollbackWorkContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_xaRollbackWork; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterXaRollbackWork(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitXaRollbackWork(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitXaRollbackWork(this); + else return visitor.visitChildren(this); + } + } + + public final XaRollbackWorkContext xaRollbackWork() throws RecognitionException { + XaRollbackWorkContext _localctx = new XaRollbackWorkContext(_ctx, getState()); + enterRule(_localctx, 334, RULE_xaRollbackWork); + try { + enterOuterAlt(_localctx, 1); + { + setState(4068); + match(XA); + setState(4069); + match(ROLLBACK); + setState(4070); + xid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class XaRecoverWorkContext extends ParserRuleContext { + public TerminalNode XA() { return getToken(MySqlParser.XA, 0); } + public TerminalNode RECOVER() { return getToken(MySqlParser.RECOVER, 0); } + public TerminalNode CONVERT() { return getToken(MySqlParser.CONVERT, 0); } + public XidContext xid() { + return getRuleContext(XidContext.class,0); + } + public XaRecoverWorkContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_xaRecoverWork; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterXaRecoverWork(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitXaRecoverWork(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitXaRecoverWork(this); + else return visitor.visitChildren(this); + } + } + + public final XaRecoverWorkContext xaRecoverWork() throws RecognitionException { + XaRecoverWorkContext _localctx = new XaRecoverWorkContext(_ctx, getState()); + enterRule(_localctx, 336, RULE_xaRecoverWork); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4072); + match(XA); + setState(4073); + match(RECOVER); + setState(4076); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CONVERT) { + { + setState(4074); + match(CONVERT); + setState(4075); + xid(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PrepareStatementContext extends ParserRuleContext { + public Token query; + public Token variable; + public TerminalNode PREPARE() { return getToken(MySqlParser.PREPARE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode LOCAL_ID() { return getToken(MySqlParser.LOCAL_ID, 0); } + public PrepareStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_prepareStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPrepareStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPrepareStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPrepareStatement(this); + else return visitor.visitChildren(this); + } + } + + public final PrepareStatementContext prepareStatement() throws RecognitionException { + PrepareStatementContext _localctx = new PrepareStatementContext(_ctx, getState()); + enterRule(_localctx, 338, RULE_prepareStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(4078); + match(PREPARE); + setState(4079); + uid(); + setState(4080); + match(FROM); + setState(4083); + _errHandler.sync(this); + switch (_input.LA(1)) { + case STRING_LITERAL: + { + setState(4081); + ((PrepareStatementContext)_localctx).query = match(STRING_LITERAL); + } + break; + case LOCAL_ID: + { + setState(4082); + ((PrepareStatementContext)_localctx).variable = match(LOCAL_ID); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExecuteStatementContext extends ParserRuleContext { + public TerminalNode EXECUTE() { return getToken(MySqlParser.EXECUTE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode USING() { return getToken(MySqlParser.USING, 0); } + public UserVariablesContext userVariables() { + return getRuleContext(UserVariablesContext.class,0); + } + public ExecuteStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_executeStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterExecuteStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitExecuteStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitExecuteStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ExecuteStatementContext executeStatement() throws RecognitionException { + ExecuteStatementContext _localctx = new ExecuteStatementContext(_ctx, getState()); + enterRule(_localctx, 340, RULE_executeStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4085); + match(EXECUTE); + setState(4086); + uid(); + setState(4089); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==USING) { + { + setState(4087); + match(USING); + setState(4088); + userVariables(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeallocatePrepareContext extends ParserRuleContext { + public Token dropFormat; + public TerminalNode PREPARE() { return getToken(MySqlParser.PREPARE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode DEALLOCATE() { return getToken(MySqlParser.DEALLOCATE, 0); } + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public DeallocatePrepareContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_deallocatePrepare; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDeallocatePrepare(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDeallocatePrepare(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDeallocatePrepare(this); + else return visitor.visitChildren(this); + } + } + + public final DeallocatePrepareContext deallocatePrepare() throws RecognitionException { + DeallocatePrepareContext _localctx = new DeallocatePrepareContext(_ctx, getState()); + enterRule(_localctx, 342, RULE_deallocatePrepare); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4091); + ((DeallocatePrepareContext)_localctx).dropFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DROP || _la==DEALLOCATE) ) { + ((DeallocatePrepareContext)_localctx).dropFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4092); + match(PREPARE); + setState(4093); + uid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RoutineBodyContext extends ParserRuleContext { + public BlockStatementContext blockStatement() { + return getRuleContext(BlockStatementContext.class,0); + } + public SqlStatementContext sqlStatement() { + return getRuleContext(SqlStatementContext.class,0); + } + public RoutineBodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_routineBody; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRoutineBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRoutineBody(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRoutineBody(this); + else return visitor.visitChildren(this); + } + } + + public final RoutineBodyContext routineBody() throws RecognitionException { + RoutineBodyContext _localctx = new RoutineBodyContext(_ctx, getState()); + enterRule(_localctx, 344, RULE_routineBody); + try { + setState(4097); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,587,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(4095); + blockStatement(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(4096); + sqlStatement(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BlockStatementContext extends ParserRuleContext { + public TerminalNode BEGIN() { return getToken(MySqlParser.BEGIN, 0); } + public TerminalNode END() { return getToken(MySqlParser.END, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public TerminalNode COLON_SYMB() { return getToken(MySqlParser.COLON_SYMB, 0); } + public List declareVariable() { + return getRuleContexts(DeclareVariableContext.class); + } + public DeclareVariableContext declareVariable(int i) { + return getRuleContext(DeclareVariableContext.class,i); + } + public List SEMI() { return getTokens(MySqlParser.SEMI); } + public TerminalNode SEMI(int i) { + return getToken(MySqlParser.SEMI, i); + } + public List declareCondition() { + return getRuleContexts(DeclareConditionContext.class); + } + public DeclareConditionContext declareCondition(int i) { + return getRuleContext(DeclareConditionContext.class,i); + } + public List declareCursor() { + return getRuleContexts(DeclareCursorContext.class); + } + public DeclareCursorContext declareCursor(int i) { + return getRuleContext(DeclareCursorContext.class,i); + } + public List declareHandler() { + return getRuleContexts(DeclareHandlerContext.class); + } + public DeclareHandlerContext declareHandler(int i) { + return getRuleContext(DeclareHandlerContext.class,i); + } + public List procedureSqlStatement() { + return getRuleContexts(ProcedureSqlStatementContext.class); + } + public ProcedureSqlStatementContext procedureSqlStatement(int i) { + return getRuleContext(ProcedureSqlStatementContext.class,i); + } + public BlockStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_blockStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBlockStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBlockStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBlockStatement(this); + else return visitor.visitChildren(this); + } + } + + public final BlockStatementContext blockStatement() throws RecognitionException { + BlockStatementContext _localctx = new BlockStatementContext(_ctx, getState()); + enterRule(_localctx, 346, RULE_blockStatement); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(4102); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,588,_ctx) ) { + case 1: + { + setState(4099); + uid(); + setState(4100); + match(COLON_SYMB); + } + break; + } + setState(4104); + match(BEGIN); + setState(4143); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,594,_ctx) ) { + case 1: + { + setState(4110); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,589,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(4105); + declareVariable(); + setState(4106); + match(SEMI); + } + } + } + setState(4112); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,589,_ctx); + } + setState(4118); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,590,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(4113); + declareCondition(); + setState(4114); + match(SEMI); + } + } + } + setState(4120); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,590,_ctx); + } + setState(4126); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,591,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(4121); + declareCursor(); + setState(4122); + match(SEMI); + } + } + } + setState(4128); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,591,_ctx); + } + setState(4134); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==DECLARE) { + { + { + setState(4129); + declareHandler(); + setState(4130); + match(SEMI); + } + } + setState(4136); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(4140); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,593,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(4137); + procedureSqlStatement(); + } + } + } + setState(4142); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,593,_ctx); + } + } + break; + } + setState(4145); + match(END); + setState(4147); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,595,_ctx) ) { + case 1: + { + setState(4146); + uid(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CaseStatementContext extends ParserRuleContext { + public List CASE() { return getTokens(MySqlParser.CASE); } + public TerminalNode CASE(int i) { + return getToken(MySqlParser.CASE, i); + } + public TerminalNode END() { return getToken(MySqlParser.END, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public List caseAlternative() { + return getRuleContexts(CaseAlternativeContext.class); + } + public CaseAlternativeContext caseAlternative(int i) { + return getRuleContext(CaseAlternativeContext.class,i); + } + public TerminalNode ELSE() { return getToken(MySqlParser.ELSE, 0); } + public List procedureSqlStatement() { + return getRuleContexts(ProcedureSqlStatementContext.class); + } + public ProcedureSqlStatementContext procedureSqlStatement(int i) { + return getRuleContext(ProcedureSqlStatementContext.class,i); + } + public CaseStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_caseStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCaseStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCaseStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCaseStatement(this); + else return visitor.visitChildren(this); + } + } + + public final CaseStatementContext caseStatement() throws RecognitionException { + CaseStatementContext _localctx = new CaseStatementContext(_ctx, getState()); + enterRule(_localctx, 348, RULE_caseStatement); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(4149); + match(CASE); + setState(4152); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,596,_ctx) ) { + case 1: + { + setState(4150); + uid(); + } + break; + case 2: + { + setState(4151); + expression(0); + } + break; + } + setState(4155); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(4154); + caseAlternative(); + } + } + setState(4157); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==WHEN ); + setState(4165); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ELSE) { + { + setState(4159); + match(ELSE); + setState(4161); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(4160); + procedureSqlStatement(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(4163); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,598,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + + setState(4167); + match(END); + setState(4168); + match(CASE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IfStatementContext extends ParserRuleContext { + public ProcedureSqlStatementContext procedureSqlStatement; + public List thenStatements = new ArrayList(); + public List elseStatements = new ArrayList(); + public List IF() { return getTokens(MySqlParser.IF); } + public TerminalNode IF(int i) { + return getToken(MySqlParser.IF, i); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode THEN() { return getToken(MySqlParser.THEN, 0); } + public TerminalNode END() { return getToken(MySqlParser.END, 0); } + public List elifAlternative() { + return getRuleContexts(ElifAlternativeContext.class); + } + public ElifAlternativeContext elifAlternative(int i) { + return getRuleContext(ElifAlternativeContext.class,i); + } + public TerminalNode ELSE() { return getToken(MySqlParser.ELSE, 0); } + public List procedureSqlStatement() { + return getRuleContexts(ProcedureSqlStatementContext.class); + } + public ProcedureSqlStatementContext procedureSqlStatement(int i) { + return getRuleContext(ProcedureSqlStatementContext.class,i); + } + public IfStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ifStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIfStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIfStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIfStatement(this); + else return visitor.visitChildren(this); + } + } + + public final IfStatementContext ifStatement() throws RecognitionException { + IfStatementContext _localctx = new IfStatementContext(_ctx, getState()); + enterRule(_localctx, 350, RULE_ifStatement); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(4170); + match(IF); + setState(4171); + expression(0); + setState(4172); + match(THEN); + setState(4174); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(4173); + ((IfStatementContext)_localctx).procedureSqlStatement = procedureSqlStatement(); + ((IfStatementContext)_localctx).thenStatements.add(((IfStatementContext)_localctx).procedureSqlStatement); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(4176); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,600,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + setState(4181); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ELSEIF) { + { + { + setState(4178); + elifAlternative(); + } + } + setState(4183); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(4190); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ELSE) { + { + setState(4184); + match(ELSE); + setState(4186); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(4185); + ((IfStatementContext)_localctx).procedureSqlStatement = procedureSqlStatement(); + ((IfStatementContext)_localctx).elseStatements.add(((IfStatementContext)_localctx).procedureSqlStatement); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(4188); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,602,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + + setState(4192); + match(END); + setState(4193); + match(IF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IterateStatementContext extends ParserRuleContext { + public TerminalNode ITERATE() { return getToken(MySqlParser.ITERATE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public IterateStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_iterateStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIterateStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIterateStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIterateStatement(this); + else return visitor.visitChildren(this); + } + } + + public final IterateStatementContext iterateStatement() throws RecognitionException { + IterateStatementContext _localctx = new IterateStatementContext(_ctx, getState()); + enterRule(_localctx, 352, RULE_iterateStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(4195); + match(ITERATE); + setState(4196); + uid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LeaveStatementContext extends ParserRuleContext { + public TerminalNode LEAVE() { return getToken(MySqlParser.LEAVE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public LeaveStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_leaveStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLeaveStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLeaveStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLeaveStatement(this); + else return visitor.visitChildren(this); + } + } + + public final LeaveStatementContext leaveStatement() throws RecognitionException { + LeaveStatementContext _localctx = new LeaveStatementContext(_ctx, getState()); + enterRule(_localctx, 354, RULE_leaveStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(4198); + match(LEAVE); + setState(4199); + uid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LoopStatementContext extends ParserRuleContext { + public List LOOP() { return getTokens(MySqlParser.LOOP); } + public TerminalNode LOOP(int i) { + return getToken(MySqlParser.LOOP, i); + } + public TerminalNode END() { return getToken(MySqlParser.END, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public TerminalNode COLON_SYMB() { return getToken(MySqlParser.COLON_SYMB, 0); } + public List procedureSqlStatement() { + return getRuleContexts(ProcedureSqlStatementContext.class); + } + public ProcedureSqlStatementContext procedureSqlStatement(int i) { + return getRuleContext(ProcedureSqlStatementContext.class,i); + } + public LoopStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_loopStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLoopStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLoopStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLoopStatement(this); + else return visitor.visitChildren(this); + } + } + + public final LoopStatementContext loopStatement() throws RecognitionException { + LoopStatementContext _localctx = new LoopStatementContext(_ctx, getState()); + enterRule(_localctx, 356, RULE_loopStatement); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(4204); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(4201); + uid(); + setState(4202); + match(COLON_SYMB); + } + } + + setState(4206); + match(LOOP); + setState(4208); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(4207); + procedureSqlStatement(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(4210); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,605,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + setState(4212); + match(END); + setState(4213); + match(LOOP); + setState(4215); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(4214); + uid(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RepeatStatementContext extends ParserRuleContext { + public List REPEAT() { return getTokens(MySqlParser.REPEAT); } + public TerminalNode REPEAT(int i) { + return getToken(MySqlParser.REPEAT, i); + } + public TerminalNode UNTIL() { return getToken(MySqlParser.UNTIL, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode END() { return getToken(MySqlParser.END, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public TerminalNode COLON_SYMB() { return getToken(MySqlParser.COLON_SYMB, 0); } + public List procedureSqlStatement() { + return getRuleContexts(ProcedureSqlStatementContext.class); + } + public ProcedureSqlStatementContext procedureSqlStatement(int i) { + return getRuleContext(ProcedureSqlStatementContext.class,i); + } + public RepeatStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_repeatStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRepeatStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRepeatStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRepeatStatement(this); + else return visitor.visitChildren(this); + } + } + + public final RepeatStatementContext repeatStatement() throws RecognitionException { + RepeatStatementContext _localctx = new RepeatStatementContext(_ctx, getState()); + enterRule(_localctx, 358, RULE_repeatStatement); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(4220); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(4217); + uid(); + setState(4218); + match(COLON_SYMB); + } + } + + setState(4222); + match(REPEAT); + setState(4224); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(4223); + procedureSqlStatement(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(4226); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,608,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + setState(4228); + match(UNTIL); + setState(4229); + expression(0); + setState(4230); + match(END); + setState(4231); + match(REPEAT); + setState(4233); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(4232); + uid(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ReturnStatementContext extends ParserRuleContext { + public TerminalNode RETURN() { return getToken(MySqlParser.RETURN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ReturnStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_returnStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterReturnStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitReturnStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitReturnStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ReturnStatementContext returnStatement() throws RecognitionException { + ReturnStatementContext _localctx = new ReturnStatementContext(_ctx, getState()); + enterRule(_localctx, 360, RULE_returnStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(4235); + match(RETURN); + setState(4236); + expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class WhileStatementContext extends ParserRuleContext { + public List WHILE() { return getTokens(MySqlParser.WHILE); } + public TerminalNode WHILE(int i) { + return getToken(MySqlParser.WHILE, i); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode DO() { return getToken(MySqlParser.DO, 0); } + public TerminalNode END() { return getToken(MySqlParser.END, 0); } + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public TerminalNode COLON_SYMB() { return getToken(MySqlParser.COLON_SYMB, 0); } + public List procedureSqlStatement() { + return getRuleContexts(ProcedureSqlStatementContext.class); + } + public ProcedureSqlStatementContext procedureSqlStatement(int i) { + return getRuleContext(ProcedureSqlStatementContext.class,i); + } + public WhileStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_whileStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterWhileStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitWhileStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitWhileStatement(this); + else return visitor.visitChildren(this); + } + } + + public final WhileStatementContext whileStatement() throws RecognitionException { + WhileStatementContext _localctx = new WhileStatementContext(_ctx, getState()); + enterRule(_localctx, 362, RULE_whileStatement); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(4241); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(4238); + uid(); + setState(4239); + match(COLON_SYMB); + } + } + + setState(4243); + match(WHILE); + setState(4244); + expression(0); + setState(4245); + match(DO); + setState(4247); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(4246); + procedureSqlStatement(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(4249); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,611,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + setState(4251); + match(END); + setState(4252); + match(WHILE); + setState(4254); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT) | (1L << DATABASE) | (1L << DIAGNOSTICS))) != 0) || ((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (LEFT - 87)) | (1L << (NUMBER - 87)) | (1L << (RIGHT - 87)))) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & ((1L << (STACKED - 151)) | (1L << (DATE - 151)) | (1L << (TIME - 151)) | (1L << (TIMESTAMP - 151)) | (1L << (DATETIME - 151)) | (1L << (YEAR - 151)))) != 0) || ((((_la - 216)) & ~0x3f) == 0 && ((1L << (_la - 216)) & ((1L << (TEXT - 216)) | (1L << (ENUM - 216)) | (1L << (SERIAL - 216)) | (1L << (COUNT - 216)) | (1L << (POSITION - 216)) | (1L << (ACCOUNT - 216)) | (1L << (ACTION - 216)) | (1L << (AFTER - 216)) | (1L << (AGGREGATE - 216)) | (1L << (ALGORITHM - 216)) | (1L << (ANY - 216)) | (1L << (AT - 216)) | (1L << (AUTHORS - 216)) | (1L << (AUTOCOMMIT - 216)) | (1L << (AUTOEXTEND_SIZE - 216)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (AUTO_INCREMENT - 280)) | (1L << (AVG_ROW_LENGTH - 280)) | (1L << (BEGIN - 280)) | (1L << (BINLOG - 280)) | (1L << (BIT - 280)) | (1L << (BLOCK - 280)) | (1L << (BOOL - 280)) | (1L << (BOOLEAN - 280)) | (1L << (BTREE - 280)) | (1L << (CACHE - 280)) | (1L << (CASCADED - 280)) | (1L << (CHAIN - 280)) | (1L << (CHANGED - 280)) | (1L << (CHANNEL - 280)) | (1L << (CHECKSUM - 280)) | (1L << (PAGE_CHECKSUM - 280)) | (1L << (CIPHER - 280)) | (1L << (CLASS_ORIGIN - 280)) | (1L << (CLIENT - 280)) | (1L << (CLOSE - 280)) | (1L << (COALESCE - 280)) | (1L << (CODE - 280)) | (1L << (COLUMNS - 280)) | (1L << (COLUMN_FORMAT - 280)) | (1L << (COLUMN_NAME - 280)) | (1L << (COMMENT - 280)) | (1L << (COMMIT - 280)) | (1L << (COMPACT - 280)) | (1L << (COMPLETION - 280)) | (1L << (COMPRESSED - 280)) | (1L << (COMPRESSION - 280)) | (1L << (CONCURRENT - 280)) | (1L << (CONNECTION - 280)) | (1L << (CONSISTENT - 280)) | (1L << (CONSTRAINT_CATALOG - 280)) | (1L << (CONSTRAINT_SCHEMA - 280)) | (1L << (CONSTRAINT_NAME - 280)) | (1L << (CONTAINS - 280)) | (1L << (CONTEXT - 280)) | (1L << (CONTRIBUTORS - 280)) | (1L << (COPY - 280)) | (1L << (CPU - 280)) | (1L << (CURSOR_NAME - 280)) | (1L << (DATA - 280)) | (1L << (DATAFILE - 280)) | (1L << (DEALLOCATE - 280)) | (1L << (DEFAULT_AUTH - 280)) | (1L << (DEFINER - 280)) | (1L << (DELAY_KEY_WRITE - 280)) | (1L << (DES_KEY_FILE - 280)) | (1L << (DIRECTORY - 280)) | (1L << (DISABLE - 280)) | (1L << (DISCARD - 280)) | (1L << (DISK - 280)) | (1L << (DO - 280)) | (1L << (DUMPFILE - 280)) | (1L << (DUPLICATE - 280)) | (1L << (DYNAMIC - 280)) | (1L << (ENABLE - 280)) | (1L << (ENCRYPTION - 280)) | (1L << (END - 280)) | (1L << (ENDS - 280)) | (1L << (ENGINE - 280)) | (1L << (ENGINES - 280)))) != 0) || ((((_la - 344)) & ~0x3f) == 0 && ((1L << (_la - 344)) & ((1L << (ERROR - 344)) | (1L << (ERRORS - 344)) | (1L << (ESCAPE - 344)) | (1L << (EVEN - 344)) | (1L << (EVENT - 344)) | (1L << (EVENTS - 344)) | (1L << (EVERY - 344)) | (1L << (EXCHANGE - 344)) | (1L << (EXCLUSIVE - 344)) | (1L << (EXPIRE - 344)) | (1L << (EXPORT - 344)) | (1L << (EXTENDED - 344)) | (1L << (EXTENT_SIZE - 344)) | (1L << (FAST - 344)) | (1L << (FAULTS - 344)) | (1L << (FIELDS - 344)) | (1L << (FILE_BLOCK_SIZE - 344)) | (1L << (FILTER - 344)) | (1L << (FIRST - 344)) | (1L << (FIXED - 344)) | (1L << (FLUSH - 344)) | (1L << (FOLLOWS - 344)) | (1L << (FOUND - 344)) | (1L << (FULL - 344)) | (1L << (FUNCTION - 344)) | (1L << (GENERAL - 344)) | (1L << (GLOBAL - 344)) | (1L << (GRANTS - 344)) | (1L << (GROUP_REPLICATION - 344)) | (1L << (HANDLER - 344)) | (1L << (HASH - 344)) | (1L << (HELP - 344)) | (1L << (HOST - 344)) | (1L << (HOSTS - 344)) | (1L << (IDENTIFIED - 344)) | (1L << (IGNORE_SERVER_IDS - 344)) | (1L << (IMPORT - 344)) | (1L << (INDEXES - 344)) | (1L << (INITIAL_SIZE - 344)) | (1L << (INPLACE - 344)) | (1L << (INSERT_METHOD - 344)) | (1L << (INSTALL - 344)) | (1L << (INSTANCE - 344)) | (1L << (INVISIBLE - 344)) | (1L << (INVOKER - 344)) | (1L << (IO - 344)) | (1L << (IO_THREAD - 344)) | (1L << (IPC - 344)) | (1L << (ISOLATION - 344)) | (1L << (ISSUER - 344)) | (1L << (JSON - 344)) | (1L << (KEY_BLOCK_SIZE - 344)) | (1L << (LANGUAGE - 344)) | (1L << (LAST - 344)) | (1L << (LEAVES - 344)) | (1L << (LESS - 344)) | (1L << (LEVEL - 344)) | (1L << (LIST - 344)) | (1L << (LOCAL - 344)) | (1L << (LOGFILE - 344)) | (1L << (LOGS - 344)) | (1L << (MASTER - 344)) | (1L << (MASTER_AUTO_POSITION - 344)) | (1L << (MASTER_CONNECT_RETRY - 344)))) != 0) || ((((_la - 408)) & ~0x3f) == 0 && ((1L << (_la - 408)) & ((1L << (MASTER_DELAY - 408)) | (1L << (MASTER_HEARTBEAT_PERIOD - 408)) | (1L << (MASTER_HOST - 408)) | (1L << (MASTER_LOG_FILE - 408)) | (1L << (MASTER_LOG_POS - 408)) | (1L << (MASTER_PASSWORD - 408)) | (1L << (MASTER_PORT - 408)) | (1L << (MASTER_RETRY_COUNT - 408)) | (1L << (MASTER_SSL - 408)) | (1L << (MASTER_SSL_CA - 408)) | (1L << (MASTER_SSL_CAPATH - 408)) | (1L << (MASTER_SSL_CERT - 408)) | (1L << (MASTER_SSL_CIPHER - 408)) | (1L << (MASTER_SSL_CRL - 408)) | (1L << (MASTER_SSL_CRLPATH - 408)) | (1L << (MASTER_SSL_KEY - 408)) | (1L << (MASTER_TLS_VERSION - 408)) | (1L << (MASTER_USER - 408)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 408)) | (1L << (MAX_QUERIES_PER_HOUR - 408)) | (1L << (MAX_ROWS - 408)) | (1L << (MAX_SIZE - 408)) | (1L << (MAX_UPDATES_PER_HOUR - 408)) | (1L << (MAX_USER_CONNECTIONS - 408)) | (1L << (MEDIUM - 408)) | (1L << (MERGE - 408)) | (1L << (MESSAGE_TEXT - 408)) | (1L << (MID - 408)) | (1L << (MIGRATE - 408)) | (1L << (MIN_ROWS - 408)) | (1L << (MODE - 408)) | (1L << (MODIFY - 408)) | (1L << (MUTEX - 408)) | (1L << (MYSQL - 408)) | (1L << (MYSQL_ERRNO - 408)) | (1L << (NAME - 408)) | (1L << (NAMES - 408)) | (1L << (NCHAR - 408)) | (1L << (NEVER - 408)) | (1L << (NEXT - 408)) | (1L << (NO - 408)) | (1L << (NODEGROUP - 408)) | (1L << (NONE - 408)) | (1L << (OFFLINE - 408)) | (1L << (OFFSET - 408)) | (1L << (OJ - 408)) | (1L << (OLD_PASSWORD - 408)) | (1L << (ONE - 408)) | (1L << (ONLINE - 408)) | (1L << (ONLY - 408)) | (1L << (OPEN - 408)) | (1L << (OPTIMIZER_COSTS - 408)) | (1L << (OPTIONS - 408)) | (1L << (OWNER - 408)) | (1L << (PACK_KEYS - 408)) | (1L << (PAGE - 408)) | (1L << (PARSER - 408)) | (1L << (PARTIAL - 408)) | (1L << (PARTITIONING - 408)) | (1L << (PARTITIONS - 408)) | (1L << (PASSWORD - 408)) | (1L << (PHASE - 408)))) != 0) || ((((_la - 472)) & ~0x3f) == 0 && ((1L << (_la - 472)) & ((1L << (PLUGIN - 472)) | (1L << (PLUGIN_DIR - 472)) | (1L << (PLUGINS - 472)) | (1L << (PORT - 472)) | (1L << (PRECEDES - 472)) | (1L << (PREPARE - 472)) | (1L << (PRESERVE - 472)) | (1L << (PREV - 472)) | (1L << (PROCESSLIST - 472)) | (1L << (PROFILE - 472)) | (1L << (PROFILES - 472)) | (1L << (PROXY - 472)) | (1L << (QUERY - 472)) | (1L << (QUICK - 472)) | (1L << (REBUILD - 472)) | (1L << (RECOVER - 472)) | (1L << (REDO_BUFFER_SIZE - 472)) | (1L << (REDUNDANT - 472)) | (1L << (RELAY - 472)) | (1L << (RELAY_LOG_FILE - 472)) | (1L << (RELAY_LOG_POS - 472)) | (1L << (RELAYLOG - 472)) | (1L << (REMOVE - 472)) | (1L << (REORGANIZE - 472)) | (1L << (REPAIR - 472)) | (1L << (REPLICATE_DO_DB - 472)) | (1L << (REPLICATE_DO_TABLE - 472)) | (1L << (REPLICATE_IGNORE_DB - 472)) | (1L << (REPLICATE_IGNORE_TABLE - 472)) | (1L << (REPLICATE_REWRITE_DB - 472)) | (1L << (REPLICATE_WILD_DO_TABLE - 472)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 472)) | (1L << (REPLICATION - 472)) | (1L << (RESET - 472)) | (1L << (RESUME - 472)) | (1L << (RETURNED_SQLSTATE - 472)) | (1L << (RETURNS - 472)) | (1L << (ROLLBACK - 472)) | (1L << (ROLLUP - 472)) | (1L << (ROTATE - 472)) | (1L << (ROW - 472)) | (1L << (ROWS - 472)) | (1L << (ROW_FORMAT - 472)) | (1L << (SAVEPOINT - 472)) | (1L << (SCHEDULE - 472)) | (1L << (SECURITY - 472)) | (1L << (SERVER - 472)) | (1L << (SESSION - 472)) | (1L << (SHARE - 472)) | (1L << (SHARED - 472)) | (1L << (SIGNED - 472)) | (1L << (SIMPLE - 472)) | (1L << (SLAVE - 472)) | (1L << (SLOW - 472)) | (1L << (SNAPSHOT - 472)) | (1L << (SOCKET - 472)) | (1L << (SOME - 472)) | (1L << (SONAME - 472)) | (1L << (SOUNDS - 472)) | (1L << (SOURCE - 472)) | (1L << (SQL_AFTER_GTIDS - 472)) | (1L << (SQL_AFTER_MTS_GAPS - 472)) | (1L << (SQL_BEFORE_GTIDS - 472)))) != 0) || ((((_la - 536)) & ~0x3f) == 0 && ((1L << (_la - 536)) & ((1L << (SQL_BUFFER_RESULT - 536)) | (1L << (SQL_CACHE - 536)) | (1L << (SQL_NO_CACHE - 536)) | (1L << (SQL_THREAD - 536)) | (1L << (START - 536)) | (1L << (STARTS - 536)) | (1L << (STATS_AUTO_RECALC - 536)) | (1L << (STATS_PERSISTENT - 536)) | (1L << (STATS_SAMPLE_PAGES - 536)) | (1L << (STATUS - 536)) | (1L << (STOP - 536)) | (1L << (STORAGE - 536)) | (1L << (STRING - 536)) | (1L << (SUBCLASS_ORIGIN - 536)) | (1L << (SUBJECT - 536)) | (1L << (SUBPARTITION - 536)) | (1L << (SUBPARTITIONS - 536)) | (1L << (SUSPEND - 536)) | (1L << (SWAPS - 536)) | (1L << (SWITCHES - 536)) | (1L << (TABLE_NAME - 536)) | (1L << (TABLESPACE - 536)) | (1L << (TEMPORARY - 536)) | (1L << (TEMPTABLE - 536)) | (1L << (THAN - 536)) | (1L << (TRADITIONAL - 536)) | (1L << (TRANSACTION - 536)) | (1L << (TRIGGERS - 536)) | (1L << (TRUNCATE - 536)) | (1L << (UNDEFINED - 536)) | (1L << (UNDOFILE - 536)) | (1L << (UNDO_BUFFER_SIZE - 536)) | (1L << (UNINSTALL - 536)) | (1L << (UNKNOWN - 536)) | (1L << (UNTIL - 536)) | (1L << (UPGRADE - 536)) | (1L << (USER - 536)) | (1L << (USE_FRM - 536)) | (1L << (USER_RESOURCES - 536)) | (1L << (VALIDATION - 536)) | (1L << (VALUE - 536)) | (1L << (VARIABLES - 536)) | (1L << (VIEW - 536)) | (1L << (VISIBLE - 536)) | (1L << (WAIT - 536)) | (1L << (WARNINGS - 536)) | (1L << (WITHOUT - 536)) | (1L << (WORK - 536)) | (1L << (WRAPPER - 536)) | (1L << (X509 - 536)) | (1L << (XA - 536)) | (1L << (XML - 536)) | (1L << (INTERNAL - 536)) | (1L << (QUARTER - 536)) | (1L << (MONTH - 536)) | (1L << (DAY - 536)) | (1L << (HOUR - 536)))) != 0) || ((((_la - 600)) & ~0x3f) == 0 && ((1L << (_la - 600)) & ((1L << (MINUTE - 600)) | (1L << (WEEK - 600)) | (1L << (SECOND - 600)) | (1L << (MICROSECOND - 600)) | (1L << (TABLES - 600)) | (1L << (ROUTINE - 600)) | (1L << (EXECUTE - 600)) | (1L << (FILE - 600)) | (1L << (PROCESS - 600)) | (1L << (RELOAD - 600)) | (1L << (SHUTDOWN - 600)) | (1L << (SUPER - 600)) | (1L << (PRIVILEGES - 600)) | (1L << (SESSION_VARIABLES_ADMIN - 600)) | (1L << (ARMSCII8 - 600)) | (1L << (ASCII - 600)) | (1L << (BIG5 - 600)) | (1L << (CP1250 - 600)) | (1L << (CP1251 - 600)) | (1L << (CP1256 - 600)) | (1L << (CP1257 - 600)) | (1L << (CP850 - 600)) | (1L << (CP852 - 600)) | (1L << (CP866 - 600)) | (1L << (CP932 - 600)) | (1L << (DEC8 - 600)) | (1L << (EUCJPMS - 600)) | (1L << (EUCKR - 600)) | (1L << (GB2312 - 600)) | (1L << (GBK - 600)) | (1L << (GEOSTD8 - 600)) | (1L << (GREEK - 600)) | (1L << (HEBREW - 600)) | (1L << (HP8 - 600)) | (1L << (KEYBCS2 - 600)) | (1L << (KOI8R - 600)) | (1L << (KOI8U - 600)) | (1L << (LATIN1 - 600)) | (1L << (LATIN2 - 600)))) != 0) || ((((_la - 664)) & ~0x3f) == 0 && ((1L << (_la - 664)) & ((1L << (LATIN5 - 664)) | (1L << (LATIN7 - 664)) | (1L << (MACCE - 664)) | (1L << (MACROMAN - 664)) | (1L << (SJIS - 664)) | (1L << (SWE7 - 664)) | (1L << (TIS620 - 664)) | (1L << (UCS2 - 664)) | (1L << (UJIS - 664)) | (1L << (UTF16 - 664)) | (1L << (UTF16LE - 664)) | (1L << (UTF32 - 664)) | (1L << (UTF8 - 664)) | (1L << (UTF8MB3 - 664)) | (1L << (UTF8MB4 - 664)) | (1L << (ARCHIVE - 664)) | (1L << (BLACKHOLE - 664)) | (1L << (CSV - 664)) | (1L << (FEDERATED - 664)) | (1L << (INNODB - 664)) | (1L << (MEMORY - 664)) | (1L << (MRG_MYISAM - 664)) | (1L << (MYISAM - 664)) | (1L << (NDB - 664)) | (1L << (NDBCLUSTER - 664)) | (1L << (PERFORMANCE_SCHEMA - 664)) | (1L << (TOKUDB - 664)) | (1L << (REPEATABLE - 664)) | (1L << (COMMITTED - 664)) | (1L << (UNCOMMITTED - 664)) | (1L << (SERIALIZABLE - 664)) | (1L << (GEOMETRYCOLLECTION - 664)) | (1L << (LINESTRING - 664)) | (1L << (MULTILINESTRING - 664)) | (1L << (MULTIPOINT - 664)) | (1L << (MULTIPOLYGON - 664)) | (1L << (POINT - 664)) | (1L << (POLYGON - 664)) | (1L << (ABS - 664)) | (1L << (ACOS - 664)) | (1L << (ADDDATE - 664)) | (1L << (ADDTIME - 664)) | (1L << (AES_DECRYPT - 664)) | (1L << (AES_ENCRYPT - 664)) | (1L << (AREA - 664)) | (1L << (ASBINARY - 664)) | (1L << (ASIN - 664)) | (1L << (ASTEXT - 664)) | (1L << (ASWKB - 664)) | (1L << (ASWKT - 664)) | (1L << (ASYMMETRIC_DECRYPT - 664)) | (1L << (ASYMMETRIC_DERIVE - 664)) | (1L << (ASYMMETRIC_ENCRYPT - 664)) | (1L << (ASYMMETRIC_SIGN - 664)) | (1L << (ASYMMETRIC_VERIFY - 664)) | (1L << (ATAN - 664)) | (1L << (ATAN2 - 664)) | (1L << (BENCHMARK - 664)) | (1L << (BIN - 664)) | (1L << (BIT_COUNT - 664)) | (1L << (BIT_LENGTH - 664)) | (1L << (BUFFER - 664)))) != 0) || ((((_la - 728)) & ~0x3f) == 0 && ((1L << (_la - 728)) & ((1L << (CATALOG_NAME - 728)) | (1L << (CEIL - 728)) | (1L << (CEILING - 728)) | (1L << (CENTROID - 728)) | (1L << (CHARACTER_LENGTH - 728)) | (1L << (CHARSET - 728)) | (1L << (CHAR_LENGTH - 728)) | (1L << (COERCIBILITY - 728)) | (1L << (COLLATION - 728)) | (1L << (COMPRESS - 728)) | (1L << (CONCAT - 728)) | (1L << (CONCAT_WS - 728)) | (1L << (CONNECTION_ID - 728)) | (1L << (CONV - 728)) | (1L << (CONVERT_TZ - 728)) | (1L << (COS - 728)) | (1L << (COT - 728)) | (1L << (CRC32 - 728)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 728)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 728)) | (1L << (CREATE_DH_PARAMETERS - 728)) | (1L << (CREATE_DIGEST - 728)) | (1L << (CROSSES - 728)) | (1L << (DATEDIFF - 728)) | (1L << (DATE_FORMAT - 728)) | (1L << (DAYNAME - 728)) | (1L << (DAYOFMONTH - 728)) | (1L << (DAYOFWEEK - 728)) | (1L << (DAYOFYEAR - 728)) | (1L << (DECODE - 728)) | (1L << (DEGREES - 728)) | (1L << (DES_DECRYPT - 728)) | (1L << (DES_ENCRYPT - 728)) | (1L << (DIMENSION - 728)) | (1L << (DISJOINT - 728)) | (1L << (ELT - 728)) | (1L << (ENCODE - 728)) | (1L << (ENCRYPT - 728)) | (1L << (ENDPOINT - 728)) | (1L << (ENVELOPE - 728)) | (1L << (EQUALS - 728)) | (1L << (EXP - 728)) | (1L << (EXPORT_SET - 728)) | (1L << (EXTERIORRING - 728)) | (1L << (EXTRACTVALUE - 728)) | (1L << (FIELD - 728)) | (1L << (FIND_IN_SET - 728)) | (1L << (FLOOR - 728)) | (1L << (FORMAT - 728)) | (1L << (FOUND_ROWS - 728)) | (1L << (FROM_BASE64 - 728)) | (1L << (FROM_DAYS - 728)) | (1L << (FROM_UNIXTIME - 728)) | (1L << (GEOMCOLLFROMTEXT - 728)) | (1L << (GEOMCOLLFROMWKB - 728)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 728)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 728)) | (1L << (GEOMETRYFROMTEXT - 728)) | (1L << (GEOMETRYFROMWKB - 728)) | (1L << (GEOMETRYN - 728)) | (1L << (GEOMETRYTYPE - 728)) | (1L << (GEOMFROMTEXT - 728)) | (1L << (GEOMFROMWKB - 728)) | (1L << (GET_FORMAT - 728)))) != 0) || ((((_la - 792)) & ~0x3f) == 0 && ((1L << (_la - 792)) & ((1L << (GET_LOCK - 792)) | (1L << (GLENGTH - 792)) | (1L << (GREATEST - 792)) | (1L << (GTID_SUBSET - 792)) | (1L << (GTID_SUBTRACT - 792)) | (1L << (HEX - 792)) | (1L << (IFNULL - 792)) | (1L << (INET6_ATON - 792)) | (1L << (INET6_NTOA - 792)) | (1L << (INET_ATON - 792)) | (1L << (INET_NTOA - 792)) | (1L << (INSTR - 792)) | (1L << (INTERIORRINGN - 792)) | (1L << (INTERSECTS - 792)) | (1L << (ISCLOSED - 792)) | (1L << (ISEMPTY - 792)) | (1L << (ISNULL - 792)) | (1L << (ISSIMPLE - 792)) | (1L << (IS_FREE_LOCK - 792)) | (1L << (IS_IPV4 - 792)) | (1L << (IS_IPV4_COMPAT - 792)) | (1L << (IS_IPV4_MAPPED - 792)) | (1L << (IS_IPV6 - 792)) | (1L << (IS_USED_LOCK - 792)) | (1L << (LAST_INSERT_ID - 792)) | (1L << (LCASE - 792)) | (1L << (LEAST - 792)) | (1L << (LENGTH - 792)) | (1L << (LINEFROMTEXT - 792)) | (1L << (LINEFROMWKB - 792)) | (1L << (LINESTRINGFROMTEXT - 792)) | (1L << (LINESTRINGFROMWKB - 792)) | (1L << (LN - 792)) | (1L << (LOAD_FILE - 792)) | (1L << (LOCATE - 792)) | (1L << (LOG - 792)) | (1L << (LOG10 - 792)) | (1L << (LOG2 - 792)) | (1L << (LOWER - 792)) | (1L << (LPAD - 792)) | (1L << (LTRIM - 792)) | (1L << (MAKEDATE - 792)) | (1L << (MAKETIME - 792)) | (1L << (MAKE_SET - 792)) | (1L << (MASTER_POS_WAIT - 792)) | (1L << (MBRCONTAINS - 792)) | (1L << (MBRDISJOINT - 792)) | (1L << (MBREQUAL - 792)) | (1L << (MBRINTERSECTS - 792)) | (1L << (MBROVERLAPS - 792)) | (1L << (MBRTOUCHES - 792)) | (1L << (MBRWITHIN - 792)) | (1L << (MD5 - 792)) | (1L << (MLINEFROMTEXT - 792)) | (1L << (MLINEFROMWKB - 792)) | (1L << (MONTHNAME - 792)) | (1L << (MPOINTFROMTEXT - 792)) | (1L << (MPOINTFROMWKB - 792)) | (1L << (MPOLYFROMTEXT - 792)) | (1L << (MPOLYFROMWKB - 792)) | (1L << (MULTILINESTRINGFROMTEXT - 792)) | (1L << (MULTILINESTRINGFROMWKB - 792)) | (1L << (MULTIPOINTFROMTEXT - 792)) | (1L << (MULTIPOINTFROMWKB - 792)))) != 0) || ((((_la - 856)) & ~0x3f) == 0 && ((1L << (_la - 856)) & ((1L << (MULTIPOLYGONFROMTEXT - 856)) | (1L << (MULTIPOLYGONFROMWKB - 856)) | (1L << (NAME_CONST - 856)) | (1L << (NULLIF - 856)) | (1L << (NUMGEOMETRIES - 856)) | (1L << (NUMINTERIORRINGS - 856)) | (1L << (NUMPOINTS - 856)) | (1L << (OCT - 856)) | (1L << (OCTET_LENGTH - 856)) | (1L << (ORD - 856)) | (1L << (OVERLAPS - 856)) | (1L << (PERIOD_ADD - 856)) | (1L << (PERIOD_DIFF - 856)) | (1L << (PI - 856)) | (1L << (POINTFROMTEXT - 856)) | (1L << (POINTFROMWKB - 856)) | (1L << (POINTN - 856)) | (1L << (POLYFROMTEXT - 856)) | (1L << (POLYFROMWKB - 856)) | (1L << (POLYGONFROMTEXT - 856)) | (1L << (POLYGONFROMWKB - 856)) | (1L << (POW - 856)) | (1L << (POWER - 856)) | (1L << (QUOTE - 856)) | (1L << (RADIANS - 856)) | (1L << (RAND - 856)) | (1L << (RANDOM_BYTES - 856)) | (1L << (RELEASE_LOCK - 856)) | (1L << (REVERSE - 856)) | (1L << (ROUND - 856)) | (1L << (ROW_COUNT - 856)) | (1L << (RPAD - 856)) | (1L << (RTRIM - 856)) | (1L << (SEC_TO_TIME - 856)) | (1L << (SESSION_USER - 856)) | (1L << (SHA - 856)) | (1L << (SHA1 - 856)) | (1L << (SHA2 - 856)) | (1L << (SCHEMA_NAME - 856)) | (1L << (SIGN - 856)) | (1L << (SIN - 856)) | (1L << (SLEEP - 856)) | (1L << (SOUNDEX - 856)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 856)) | (1L << (SQRT - 856)) | (1L << (SRID - 856)) | (1L << (STARTPOINT - 856)) | (1L << (STRCMP - 856)) | (1L << (STR_TO_DATE - 856)) | (1L << (ST_AREA - 856)) | (1L << (ST_ASBINARY - 856)) | (1L << (ST_ASTEXT - 856)) | (1L << (ST_ASWKB - 856)) | (1L << (ST_ASWKT - 856)) | (1L << (ST_BUFFER - 856)) | (1L << (ST_CENTROID - 856)) | (1L << (ST_CONTAINS - 856)) | (1L << (ST_CROSSES - 856)) | (1L << (ST_DIFFERENCE - 856)) | (1L << (ST_DIMENSION - 856)) | (1L << (ST_DISJOINT - 856)) | (1L << (ST_DISTANCE - 856)) | (1L << (ST_ENDPOINT - 856)) | (1L << (ST_ENVELOPE - 856)))) != 0) || ((((_la - 920)) & ~0x3f) == 0 && ((1L << (_la - 920)) & ((1L << (ST_EQUALS - 920)) | (1L << (ST_EXTERIORRING - 920)) | (1L << (ST_GEOMCOLLFROMTEXT - 920)) | (1L << (ST_GEOMCOLLFROMTXT - 920)) | (1L << (ST_GEOMCOLLFROMWKB - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 920)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 920)) | (1L << (ST_GEOMETRYFROMTEXT - 920)) | (1L << (ST_GEOMETRYFROMWKB - 920)) | (1L << (ST_GEOMETRYN - 920)) | (1L << (ST_GEOMETRYTYPE - 920)) | (1L << (ST_GEOMFROMTEXT - 920)) | (1L << (ST_GEOMFROMWKB - 920)) | (1L << (ST_INTERIORRINGN - 920)) | (1L << (ST_INTERSECTION - 920)) | (1L << (ST_INTERSECTS - 920)) | (1L << (ST_ISCLOSED - 920)) | (1L << (ST_ISEMPTY - 920)) | (1L << (ST_ISSIMPLE - 920)) | (1L << (ST_LINEFROMTEXT - 920)) | (1L << (ST_LINEFROMWKB - 920)) | (1L << (ST_LINESTRINGFROMTEXT - 920)) | (1L << (ST_LINESTRINGFROMWKB - 920)) | (1L << (ST_NUMGEOMETRIES - 920)) | (1L << (ST_NUMINTERIORRING - 920)) | (1L << (ST_NUMINTERIORRINGS - 920)) | (1L << (ST_NUMPOINTS - 920)) | (1L << (ST_OVERLAPS - 920)) | (1L << (ST_POINTFROMTEXT - 920)) | (1L << (ST_POINTFROMWKB - 920)) | (1L << (ST_POINTN - 920)) | (1L << (ST_POLYFROMTEXT - 920)) | (1L << (ST_POLYFROMWKB - 920)) | (1L << (ST_POLYGONFROMTEXT - 920)) | (1L << (ST_POLYGONFROMWKB - 920)) | (1L << (ST_SRID - 920)) | (1L << (ST_STARTPOINT - 920)) | (1L << (ST_SYMDIFFERENCE - 920)) | (1L << (ST_TOUCHES - 920)) | (1L << (ST_UNION - 920)) | (1L << (ST_WITHIN - 920)) | (1L << (ST_X - 920)) | (1L << (ST_Y - 920)) | (1L << (SUBDATE - 920)) | (1L << (SUBSTRING_INDEX - 920)) | (1L << (SUBTIME - 920)) | (1L << (SYSTEM_USER - 920)) | (1L << (TAN - 920)) | (1L << (TIMEDIFF - 920)) | (1L << (TIMESTAMPADD - 920)) | (1L << (TIMESTAMPDIFF - 920)) | (1L << (TIME_FORMAT - 920)) | (1L << (TIME_TO_SEC - 920)) | (1L << (TOUCHES - 920)) | (1L << (TO_BASE64 - 920)) | (1L << (TO_DAYS - 920)) | (1L << (TO_SECONDS - 920)) | (1L << (UCASE - 920)) | (1L << (UNCOMPRESS - 920)) | (1L << (UNCOMPRESSED_LENGTH - 920)) | (1L << (UNHEX - 920)) | (1L << (UNIX_TIMESTAMP - 920)) | (1L << (UPDATEXML - 920)) | (1L << (UPPER - 920)))) != 0) || ((((_la - 984)) & ~0x3f) == 0 && ((1L << (_la - 984)) & ((1L << (UUID - 984)) | (1L << (UUID_SHORT - 984)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 984)) | (1L << (VERSION - 984)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 984)) | (1L << (WEEKDAY - 984)) | (1L << (WEEKOFYEAR - 984)) | (1L << (WEIGHT_STRING - 984)) | (1L << (WITHIN - 984)) | (1L << (YEARWEEK - 984)) | (1L << (Y_FUNCTION - 984)) | (1L << (X_FUNCTION - 984)) | (1L << (CHARSET_REVERSE_QOUTE_STRING - 984)) | (1L << (STRING_LITERAL - 984)) | (1L << (ID - 984)) | (1L << (REVERSE_QUOTE_ID - 984)))) != 0)) { + { + setState(4253); + uid(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CursorStatementContext extends ParserRuleContext { + public CursorStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_cursorStatement; } + + public CursorStatementContext() { } + public void copyFrom(CursorStatementContext ctx) { + super.copyFrom(ctx); + } + } + public static class CloseCursorContext extends CursorStatementContext { + public TerminalNode CLOSE() { return getToken(MySqlParser.CLOSE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public CloseCursorContext(CursorStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCloseCursor(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCloseCursor(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCloseCursor(this); + else return visitor.visitChildren(this); + } + } + public static class OpenCursorContext extends CursorStatementContext { + public TerminalNode OPEN() { return getToken(MySqlParser.OPEN, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public OpenCursorContext(CursorStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterOpenCursor(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitOpenCursor(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitOpenCursor(this); + else return visitor.visitChildren(this); + } + } + public static class FetchCursorContext extends CursorStatementContext { + public TerminalNode FETCH() { return getToken(MySqlParser.FETCH, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode INTO() { return getToken(MySqlParser.INTO, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public TerminalNode NEXT() { return getToken(MySqlParser.NEXT, 0); } + public FetchCursorContext(CursorStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFetchCursor(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFetchCursor(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFetchCursor(this); + else return visitor.visitChildren(this); + } + } + + public final CursorStatementContext cursorStatement() throws RecognitionException { + CursorStatementContext _localctx = new CursorStatementContext(_ctx, getState()); + enterRule(_localctx, 364, RULE_cursorStatement); + int _la; + try { + setState(4271); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CLOSE: + _localctx = new CloseCursorContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(4256); + match(CLOSE); + setState(4257); + uid(); + } + break; + case FETCH: + _localctx = new FetchCursorContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(4258); + match(FETCH); + setState(4263); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,614,_ctx) ) { + case 1: + { + setState(4260); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NEXT) { + { + setState(4259); + match(NEXT); + } + } + + setState(4262); + match(FROM); + } + break; + } + setState(4265); + uid(); + setState(4266); + match(INTO); + setState(4267); + uidList(); + } + break; + case OPEN: + _localctx = new OpenCursorContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(4269); + match(OPEN); + setState(4270); + uid(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeclareVariableContext extends ParserRuleContext { + public TerminalNode DECLARE() { return getToken(MySqlParser.DECLARE, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public DataTypeContext dataType() { + return getRuleContext(DataTypeContext.class,0); + } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public DefaultValueContext defaultValue() { + return getRuleContext(DefaultValueContext.class,0); + } + public DeclareVariableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declareVariable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDeclareVariable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDeclareVariable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDeclareVariable(this); + else return visitor.visitChildren(this); + } + } + + public final DeclareVariableContext declareVariable() throws RecognitionException { + DeclareVariableContext _localctx = new DeclareVariableContext(_ctx, getState()); + enterRule(_localctx, 366, RULE_declareVariable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4273); + match(DECLARE); + setState(4274); + uidList(); + setState(4275); + dataType(); + setState(4278); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DEFAULT) { + { + setState(4276); + match(DEFAULT); + setState(4277); + defaultValue(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeclareConditionContext extends ParserRuleContext { + public TerminalNode DECLARE() { return getToken(MySqlParser.DECLARE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode CONDITION() { return getToken(MySqlParser.CONDITION, 0); } + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode SQLSTATE() { return getToken(MySqlParser.SQLSTATE, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode VALUE() { return getToken(MySqlParser.VALUE, 0); } + public DeclareConditionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declareCondition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDeclareCondition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDeclareCondition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDeclareCondition(this); + else return visitor.visitChildren(this); + } + } + + public final DeclareConditionContext declareCondition() throws RecognitionException { + DeclareConditionContext _localctx = new DeclareConditionContext(_ctx, getState()); + enterRule(_localctx, 368, RULE_declareCondition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4280); + match(DECLARE); + setState(4281); + uid(); + setState(4282); + match(CONDITION); + setState(4283); + match(FOR); + setState(4290); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case DECIMAL_LITERAL: + { + setState(4284); + decimalLiteral(); + } + break; + case SQLSTATE: + { + setState(4285); + match(SQLSTATE); + setState(4287); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VALUE) { + { + setState(4286); + match(VALUE); + } + } + + setState(4289); + match(STRING_LITERAL); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeclareCursorContext extends ParserRuleContext { + public TerminalNode DECLARE() { return getToken(MySqlParser.DECLARE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode CURSOR() { return getToken(MySqlParser.CURSOR, 0); } + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public DeclareCursorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declareCursor; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDeclareCursor(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDeclareCursor(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDeclareCursor(this); + else return visitor.visitChildren(this); + } + } + + public final DeclareCursorContext declareCursor() throws RecognitionException { + DeclareCursorContext _localctx = new DeclareCursorContext(_ctx, getState()); + enterRule(_localctx, 370, RULE_declareCursor); + try { + enterOuterAlt(_localctx, 1); + { + setState(4292); + match(DECLARE); + setState(4293); + uid(); + setState(4294); + match(CURSOR); + setState(4295); + match(FOR); + setState(4296); + selectStatement(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeclareHandlerContext extends ParserRuleContext { + public Token handlerAction; + public TerminalNode DECLARE() { return getToken(MySqlParser.DECLARE, 0); } + public TerminalNode HANDLER() { return getToken(MySqlParser.HANDLER, 0); } + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public List handlerConditionValue() { + return getRuleContexts(HandlerConditionValueContext.class); + } + public HandlerConditionValueContext handlerConditionValue(int i) { + return getRuleContext(HandlerConditionValueContext.class,i); + } + public RoutineBodyContext routineBody() { + return getRuleContext(RoutineBodyContext.class,0); + } + public TerminalNode CONTINUE() { return getToken(MySqlParser.CONTINUE, 0); } + public TerminalNode EXIT() { return getToken(MySqlParser.EXIT, 0); } + public TerminalNode UNDO() { return getToken(MySqlParser.UNDO, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public DeclareHandlerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declareHandler; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDeclareHandler(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDeclareHandler(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDeclareHandler(this); + else return visitor.visitChildren(this); + } + } + + public final DeclareHandlerContext declareHandler() throws RecognitionException { + DeclareHandlerContext _localctx = new DeclareHandlerContext(_ctx, getState()); + enterRule(_localctx, 372, RULE_declareHandler); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4298); + match(DECLARE); + setState(4299); + ((DeclareHandlerContext)_localctx).handlerAction = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==CONTINUE || _la==EXIT || _la==UNDO) ) { + ((DeclareHandlerContext)_localctx).handlerAction = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4300); + match(HANDLER); + setState(4301); + match(FOR); + setState(4302); + handlerConditionValue(); + setState(4307); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4303); + match(COMMA); + setState(4304); + handlerConditionValue(); + } + } + setState(4309); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(4310); + routineBody(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class HandlerConditionValueContext extends ParserRuleContext { + public HandlerConditionValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_handlerConditionValue; } + + public HandlerConditionValueContext() { } + public void copyFrom(HandlerConditionValueContext ctx) { + super.copyFrom(ctx); + } + } + public static class HandlerConditionWarningContext extends HandlerConditionValueContext { + public TerminalNode SQLWARNING() { return getToken(MySqlParser.SQLWARNING, 0); } + public HandlerConditionWarningContext(HandlerConditionValueContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHandlerConditionWarning(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHandlerConditionWarning(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHandlerConditionWarning(this); + else return visitor.visitChildren(this); + } + } + public static class HandlerConditionCodeContext extends HandlerConditionValueContext { + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public HandlerConditionCodeContext(HandlerConditionValueContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHandlerConditionCode(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHandlerConditionCode(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHandlerConditionCode(this); + else return visitor.visitChildren(this); + } + } + public static class HandlerConditionNotfoundContext extends HandlerConditionValueContext { + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public TerminalNode FOUND() { return getToken(MySqlParser.FOUND, 0); } + public HandlerConditionNotfoundContext(HandlerConditionValueContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHandlerConditionNotfound(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHandlerConditionNotfound(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHandlerConditionNotfound(this); + else return visitor.visitChildren(this); + } + } + public static class HandlerConditionStateContext extends HandlerConditionValueContext { + public TerminalNode SQLSTATE() { return getToken(MySqlParser.SQLSTATE, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode VALUE() { return getToken(MySqlParser.VALUE, 0); } + public HandlerConditionStateContext(HandlerConditionValueContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHandlerConditionState(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHandlerConditionState(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHandlerConditionState(this); + else return visitor.visitChildren(this); + } + } + public static class HandlerConditionExceptionContext extends HandlerConditionValueContext { + public TerminalNode SQLEXCEPTION() { return getToken(MySqlParser.SQLEXCEPTION, 0); } + public HandlerConditionExceptionContext(HandlerConditionValueContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHandlerConditionException(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHandlerConditionException(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHandlerConditionException(this); + else return visitor.visitChildren(this); + } + } + public static class HandlerConditionNameContext extends HandlerConditionValueContext { + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public HandlerConditionNameContext(HandlerConditionValueContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHandlerConditionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHandlerConditionName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHandlerConditionName(this); + else return visitor.visitChildren(this); + } + } + + public final HandlerConditionValueContext handlerConditionValue() throws RecognitionException { + HandlerConditionValueContext _localctx = new HandlerConditionValueContext(_ctx, getState()); + enterRule(_localctx, 374, RULE_handlerConditionValue); + int _la; + try { + setState(4323); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case DECIMAL_LITERAL: + _localctx = new HandlerConditionCodeContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(4312); + decimalLiteral(); + } + break; + case SQLSTATE: + _localctx = new HandlerConditionStateContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(4313); + match(SQLSTATE); + setState(4315); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VALUE) { + { + setState(4314); + match(VALUE); + } + } + + setState(4317); + match(STRING_LITERAL); + } + break; + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + _localctx = new HandlerConditionNameContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(4318); + uid(); + } + break; + case SQLWARNING: + _localctx = new HandlerConditionWarningContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(4319); + match(SQLWARNING); + } + break; + case NOT: + _localctx = new HandlerConditionNotfoundContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(4320); + match(NOT); + setState(4321); + match(FOUND); + } + break; + case SQLEXCEPTION: + _localctx = new HandlerConditionExceptionContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(4322); + match(SQLEXCEPTION); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ProcedureSqlStatementContext extends ParserRuleContext { + public TerminalNode SEMI() { return getToken(MySqlParser.SEMI, 0); } + public CompoundStatementContext compoundStatement() { + return getRuleContext(CompoundStatementContext.class,0); + } + public SqlStatementContext sqlStatement() { + return getRuleContext(SqlStatementContext.class,0); + } + public ProcedureSqlStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_procedureSqlStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterProcedureSqlStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitProcedureSqlStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitProcedureSqlStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ProcedureSqlStatementContext procedureSqlStatement() throws RecognitionException { + ProcedureSqlStatementContext _localctx = new ProcedureSqlStatementContext(_ctx, getState()); + enterRule(_localctx, 376, RULE_procedureSqlStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(4327); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,622,_ctx) ) { + case 1: + { + setState(4325); + compoundStatement(); + } + break; + case 2: + { + setState(4326); + sqlStatement(); + } + break; + } + setState(4329); + match(SEMI); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CaseAlternativeContext extends ParserRuleContext { + public TerminalNode WHEN() { return getToken(MySqlParser.WHEN, 0); } + public TerminalNode THEN() { return getToken(MySqlParser.THEN, 0); } + public ConstantContext constant() { + return getRuleContext(ConstantContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public List procedureSqlStatement() { + return getRuleContexts(ProcedureSqlStatementContext.class); + } + public ProcedureSqlStatementContext procedureSqlStatement(int i) { + return getRuleContext(ProcedureSqlStatementContext.class,i); + } + public CaseAlternativeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_caseAlternative; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCaseAlternative(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCaseAlternative(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCaseAlternative(this); + else return visitor.visitChildren(this); + } + } + + public final CaseAlternativeContext caseAlternative() throws RecognitionException { + CaseAlternativeContext _localctx = new CaseAlternativeContext(_ctx, getState()); + enterRule(_localctx, 378, RULE_caseAlternative); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(4331); + match(WHEN); + setState(4334); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,623,_ctx) ) { + case 1: + { + setState(4332); + constant(); + } + break; + case 2: + { + setState(4333); + expression(0); + } + break; + } + setState(4336); + match(THEN); + setState(4338); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(4337); + procedureSqlStatement(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(4340); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,624,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ElifAlternativeContext extends ParserRuleContext { + public TerminalNode ELSEIF() { return getToken(MySqlParser.ELSEIF, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode THEN() { return getToken(MySqlParser.THEN, 0); } + public List procedureSqlStatement() { + return getRuleContexts(ProcedureSqlStatementContext.class); + } + public ProcedureSqlStatementContext procedureSqlStatement(int i) { + return getRuleContext(ProcedureSqlStatementContext.class,i); + } + public ElifAlternativeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_elifAlternative; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterElifAlternative(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitElifAlternative(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitElifAlternative(this); + else return visitor.visitChildren(this); + } + } + + public final ElifAlternativeContext elifAlternative() throws RecognitionException { + ElifAlternativeContext _localctx = new ElifAlternativeContext(_ctx, getState()); + enterRule(_localctx, 380, RULE_elifAlternative); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(4342); + match(ELSEIF); + setState(4343); + expression(0); + setState(4344); + match(THEN); + setState(4346); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(4345); + procedureSqlStatement(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(4348); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,625,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlterUserContext extends ParserRuleContext { + public AlterUserContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alterUser; } + + public AlterUserContext() { } + public void copyFrom(AlterUserContext ctx) { + super.copyFrom(ctx); + } + } + public static class AlterUserMysqlV56Context extends AlterUserContext { + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode USER() { return getToken(MySqlParser.USER, 0); } + public List userSpecification() { + return getRuleContexts(UserSpecificationContext.class); + } + public UserSpecificationContext userSpecification(int i) { + return getRuleContext(UserSpecificationContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public AlterUserMysqlV56Context(AlterUserContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterUserMysqlV56(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterUserMysqlV56(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterUserMysqlV56(this); + else return visitor.visitChildren(this); + } + } + public static class AlterUserMysqlV57Context extends AlterUserContext { + public Token tlsNone; + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode USER() { return getToken(MySqlParser.USER, 0); } + public List userAuthOption() { + return getRuleContexts(UserAuthOptionContext.class); + } + public UserAuthOptionContext userAuthOption(int i) { + return getRuleContext(UserAuthOptionContext.class,i); + } + public IfExistsContext ifExists() { + return getRuleContext(IfExistsContext.class,0); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode REQUIRE() { return getToken(MySqlParser.REQUIRE, 0); } + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public List userPasswordOption() { + return getRuleContexts(UserPasswordOptionContext.class); + } + public UserPasswordOptionContext userPasswordOption(int i) { + return getRuleContext(UserPasswordOptionContext.class,i); + } + public List userLockOption() { + return getRuleContexts(UserLockOptionContext.class); + } + public UserLockOptionContext userLockOption(int i) { + return getRuleContext(UserLockOptionContext.class,i); + } + public List tlsOption() { + return getRuleContexts(TlsOptionContext.class); + } + public TlsOptionContext tlsOption(int i) { + return getRuleContext(TlsOptionContext.class,i); + } + public TerminalNode NONE() { return getToken(MySqlParser.NONE, 0); } + public List userResourceOption() { + return getRuleContexts(UserResourceOptionContext.class); + } + public UserResourceOptionContext userResourceOption(int i) { + return getRuleContext(UserResourceOptionContext.class,i); + } + public List AND() { return getTokens(MySqlParser.AND); } + public TerminalNode AND(int i) { + return getToken(MySqlParser.AND, i); + } + public AlterUserMysqlV57Context(AlterUserContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAlterUserMysqlV57(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAlterUserMysqlV57(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAlterUserMysqlV57(this); + else return visitor.visitChildren(this); + } + } + + public final AlterUserContext alterUser() throws RecognitionException { + AlterUserContext _localctx = new AlterUserContext(_ctx, getState()); + enterRule(_localctx, 382, RULE_alterUser); + int _la; + try { + setState(4404); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,637,_ctx) ) { + case 1: + _localctx = new AlterUserMysqlV56Context(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(4350); + match(ALTER); + setState(4351); + match(USER); + setState(4352); + userSpecification(); + setState(4357); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4353); + match(COMMA); + setState(4354); + userSpecification(); + } + } + setState(4359); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 2: + _localctx = new AlterUserMysqlV57Context(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(4360); + match(ALTER); + setState(4361); + match(USER); + setState(4363); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(4362); + ifExists(); + } + } + + setState(4365); + userAuthOption(); + setState(4370); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4366); + match(COMMA); + setState(4367); + userAuthOption(); + } + } + setState(4372); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(4387); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==REQUIRE) { + { + setState(4373); + match(REQUIRE); + setState(4385); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NONE: + { + setState(4374); + ((AlterUserMysqlV57Context)_localctx).tlsNone = match(NONE); + } + break; + case SSL: + case CIPHER: + case ISSUER: + case SUBJECT: + case X509: + { + setState(4375); + tlsOption(); + setState(4382); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==AND || _la==SSL || _la==CIPHER || _la==ISSUER || _la==SUBJECT || _la==X509) { + { + { + setState(4377); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AND) { + { + setState(4376); + match(AND); + } + } + + setState(4379); + tlsOption(); + } + } + setState(4384); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + } + + setState(4395); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WITH) { + { + setState(4389); + match(WITH); + setState(4391); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(4390); + userResourceOption(); + } + } + setState(4393); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( ((((_la - 426)) & ~0x3f) == 0 && ((1L << (_la - 426)) & ((1L << (MAX_CONNECTIONS_PER_HOUR - 426)) | (1L << (MAX_QUERIES_PER_HOUR - 426)) | (1L << (MAX_UPDATES_PER_HOUR - 426)) | (1L << (MAX_USER_CONNECTIONS - 426)))) != 0) ); + } + } + + setState(4401); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ACCOUNT || _la==PASSWORD) { + { + setState(4399); + _errHandler.sync(this); + switch (_input.LA(1)) { + case PASSWORD: + { + setState(4397); + userPasswordOption(); + } + break; + case ACCOUNT: + { + setState(4398); + userLockOption(); + } + break; + default: + throw new NoViableAltException(this); + } + } + setState(4403); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateUserContext extends ParserRuleContext { + public CreateUserContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createUser; } + + public CreateUserContext() { } + public void copyFrom(CreateUserContext ctx) { + super.copyFrom(ctx); + } + } + public static class CreateUserMysqlV57Context extends CreateUserContext { + public Token tlsNone; + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode USER() { return getToken(MySqlParser.USER, 0); } + public List userAuthOption() { + return getRuleContexts(UserAuthOptionContext.class); + } + public UserAuthOptionContext userAuthOption(int i) { + return getRuleContext(UserAuthOptionContext.class,i); + } + public IfNotExistsContext ifNotExists() { + return getRuleContext(IfNotExistsContext.class,0); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode REQUIRE() { return getToken(MySqlParser.REQUIRE, 0); } + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public List userPasswordOption() { + return getRuleContexts(UserPasswordOptionContext.class); + } + public UserPasswordOptionContext userPasswordOption(int i) { + return getRuleContext(UserPasswordOptionContext.class,i); + } + public List userLockOption() { + return getRuleContexts(UserLockOptionContext.class); + } + public UserLockOptionContext userLockOption(int i) { + return getRuleContext(UserLockOptionContext.class,i); + } + public List tlsOption() { + return getRuleContexts(TlsOptionContext.class); + } + public TlsOptionContext tlsOption(int i) { + return getRuleContext(TlsOptionContext.class,i); + } + public TerminalNode NONE() { return getToken(MySqlParser.NONE, 0); } + public List userResourceOption() { + return getRuleContexts(UserResourceOptionContext.class); + } + public UserResourceOptionContext userResourceOption(int i) { + return getRuleContext(UserResourceOptionContext.class,i); + } + public List AND() { return getTokens(MySqlParser.AND); } + public TerminalNode AND(int i) { + return getToken(MySqlParser.AND, i); + } + public CreateUserMysqlV57Context(CreateUserContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateUserMysqlV57(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateUserMysqlV57(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateUserMysqlV57(this); + else return visitor.visitChildren(this); + } + } + public static class CreateUserMysqlV56Context extends CreateUserContext { + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode USER() { return getToken(MySqlParser.USER, 0); } + public List userAuthOption() { + return getRuleContexts(UserAuthOptionContext.class); + } + public UserAuthOptionContext userAuthOption(int i) { + return getRuleContext(UserAuthOptionContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public CreateUserMysqlV56Context(CreateUserContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateUserMysqlV56(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateUserMysqlV56(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateUserMysqlV56(this); + else return visitor.visitChildren(this); + } + } + + public final CreateUserContext createUser() throws RecognitionException { + CreateUserContext _localctx = new CreateUserContext(_ctx, getState()); + enterRule(_localctx, 384, RULE_createUser); + int _la; + try { + setState(4460); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,649,_ctx) ) { + case 1: + _localctx = new CreateUserMysqlV56Context(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(4406); + match(CREATE); + setState(4407); + match(USER); + setState(4408); + userAuthOption(); + setState(4413); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4409); + match(COMMA); + setState(4410); + userAuthOption(); + } + } + setState(4415); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 2: + _localctx = new CreateUserMysqlV57Context(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(4416); + match(CREATE); + setState(4417); + match(USER); + setState(4419); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(4418); + ifNotExists(); + } + } + + setState(4421); + userAuthOption(); + setState(4426); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4422); + match(COMMA); + setState(4423); + userAuthOption(); + } + } + setState(4428); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(4443); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==REQUIRE) { + { + setState(4429); + match(REQUIRE); + setState(4441); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NONE: + { + setState(4430); + ((CreateUserMysqlV57Context)_localctx).tlsNone = match(NONE); + } + break; + case SSL: + case CIPHER: + case ISSUER: + case SUBJECT: + case X509: + { + setState(4431); + tlsOption(); + setState(4438); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==AND || _la==SSL || _la==CIPHER || _la==ISSUER || _la==SUBJECT || _la==X509) { + { + { + setState(4433); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AND) { + { + setState(4432); + match(AND); + } + } + + setState(4435); + tlsOption(); + } + } + setState(4440); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + } + + setState(4451); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WITH) { + { + setState(4445); + match(WITH); + setState(4447); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(4446); + userResourceOption(); + } + } + setState(4449); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( ((((_la - 426)) & ~0x3f) == 0 && ((1L << (_la - 426)) & ((1L << (MAX_CONNECTIONS_PER_HOUR - 426)) | (1L << (MAX_QUERIES_PER_HOUR - 426)) | (1L << (MAX_UPDATES_PER_HOUR - 426)) | (1L << (MAX_USER_CONNECTIONS - 426)))) != 0) ); + } + } + + setState(4457); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ACCOUNT || _la==PASSWORD) { + { + setState(4455); + _errHandler.sync(this); + switch (_input.LA(1)) { + case PASSWORD: + { + setState(4453); + userPasswordOption(); + } + break; + case ACCOUNT: + { + setState(4454); + userLockOption(); + } + break; + default: + throw new NoViableAltException(this); + } + } + setState(4459); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DropUserContext extends ParserRuleContext { + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode USER() { return getToken(MySqlParser.USER, 0); } + public List userName() { + return getRuleContexts(UserNameContext.class); + } + public UserNameContext userName(int i) { + return getRuleContext(UserNameContext.class,i); + } + public IfExistsContext ifExists() { + return getRuleContext(IfExistsContext.class,0); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public DropUserContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropUser; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDropUser(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDropUser(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDropUser(this); + else return visitor.visitChildren(this); + } + } + + public final DropUserContext dropUser() throws RecognitionException { + DropUserContext _localctx = new DropUserContext(_ctx, getState()); + enterRule(_localctx, 386, RULE_dropUser); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4462); + match(DROP); + setState(4463); + match(USER); + setState(4465); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(4464); + ifExists(); + } + } + + setState(4467); + userName(); + setState(4472); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4468); + match(COMMA); + setState(4469); + userName(); + } + } + setState(4474); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class GrantStatementContext extends ParserRuleContext { + public Token privilegeObject; + public Token tlsNone; + public List GRANT() { return getTokens(MySqlParser.GRANT); } + public TerminalNode GRANT(int i) { + return getToken(MySqlParser.GRANT, i); + } + public List privelegeClause() { + return getRuleContexts(PrivelegeClauseContext.class); + } + public PrivelegeClauseContext privelegeClause(int i) { + return getRuleContext(PrivelegeClauseContext.class,i); + } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public PrivilegeLevelContext privilegeLevel() { + return getRuleContext(PrivilegeLevelContext.class,0); + } + public TerminalNode TO() { return getToken(MySqlParser.TO, 0); } + public List userAuthOption() { + return getRuleContexts(UserAuthOptionContext.class); + } + public UserAuthOptionContext userAuthOption(int i) { + return getRuleContext(UserAuthOptionContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode REQUIRE() { return getToken(MySqlParser.REQUIRE, 0); } + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TerminalNode FUNCTION() { return getToken(MySqlParser.FUNCTION, 0); } + public TerminalNode PROCEDURE() { return getToken(MySqlParser.PROCEDURE, 0); } + public List tlsOption() { + return getRuleContexts(TlsOptionContext.class); + } + public TlsOptionContext tlsOption(int i) { + return getRuleContext(TlsOptionContext.class,i); + } + public TerminalNode NONE() { return getToken(MySqlParser.NONE, 0); } + public List OPTION() { return getTokens(MySqlParser.OPTION); } + public TerminalNode OPTION(int i) { + return getToken(MySqlParser.OPTION, i); + } + public List userResourceOption() { + return getRuleContexts(UserResourceOptionContext.class); + } + public UserResourceOptionContext userResourceOption(int i) { + return getRuleContext(UserResourceOptionContext.class,i); + } + public List AND() { return getTokens(MySqlParser.AND); } + public TerminalNode AND(int i) { + return getToken(MySqlParser.AND, i); + } + public GrantStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_grantStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterGrantStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitGrantStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitGrantStatement(this); + else return visitor.visitChildren(this); + } + } + + public final GrantStatementContext grantStatement() throws RecognitionException { + GrantStatementContext _localctx = new GrantStatementContext(_ctx, getState()); + enterRule(_localctx, 388, RULE_grantStatement); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(4475); + match(GRANT); + setState(4476); + privelegeClause(); + setState(4481); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4477); + match(COMMA); + setState(4478); + privelegeClause(); + } + } + setState(4483); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(4484); + match(ON); + setState(4486); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,653,_ctx) ) { + case 1: + { + setState(4485); + ((GrantStatementContext)_localctx).privilegeObject = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==PROCEDURE || _la==TABLE || _la==FUNCTION) ) { + ((GrantStatementContext)_localctx).privilegeObject = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + setState(4488); + privilegeLevel(); + setState(4489); + match(TO); + setState(4490); + userAuthOption(); + setState(4495); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4491); + match(COMMA); + setState(4492); + userAuthOption(); + } + } + setState(4497); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(4512); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==REQUIRE) { + { + setState(4498); + match(REQUIRE); + setState(4510); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NONE: + { + setState(4499); + ((GrantStatementContext)_localctx).tlsNone = match(NONE); + } + break; + case SSL: + case CIPHER: + case ISSUER: + case SUBJECT: + case X509: + { + setState(4500); + tlsOption(); + setState(4507); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==AND || _la==SSL || _la==CIPHER || _la==ISSUER || _la==SUBJECT || _la==X509) { + { + { + setState(4502); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AND) { + { + setState(4501); + match(AND); + } + } + + setState(4504); + tlsOption(); + } + } + setState(4509); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + } + + setState(4523); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WITH) { + { + setState(4514); + match(WITH); + setState(4520); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,660,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + setState(4518); + _errHandler.sync(this); + switch (_input.LA(1)) { + case GRANT: + { + setState(4515); + match(GRANT); + setState(4516); + match(OPTION); + } + break; + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + { + setState(4517); + userResourceOption(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + setState(4522); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,660,_ctx); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class GrantProxyContext extends ParserRuleContext { + public UserNameContext fromFirst; + public UserNameContext toFirst; + public UserNameContext userName; + public List toOther = new ArrayList(); + public List GRANT() { return getTokens(MySqlParser.GRANT); } + public TerminalNode GRANT(int i) { + return getToken(MySqlParser.GRANT, i); + } + public TerminalNode PROXY() { return getToken(MySqlParser.PROXY, 0); } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public TerminalNode TO() { return getToken(MySqlParser.TO, 0); } + public List userName() { + return getRuleContexts(UserNameContext.class); + } + public UserNameContext userName(int i) { + return getRuleContext(UserNameContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public TerminalNode OPTION() { return getToken(MySqlParser.OPTION, 0); } + public GrantProxyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_grantProxy; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterGrantProxy(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitGrantProxy(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitGrantProxy(this); + else return visitor.visitChildren(this); + } + } + + public final GrantProxyContext grantProxy() throws RecognitionException { + GrantProxyContext _localctx = new GrantProxyContext(_ctx, getState()); + enterRule(_localctx, 390, RULE_grantProxy); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4525); + match(GRANT); + setState(4526); + match(PROXY); + setState(4527); + match(ON); + setState(4528); + ((GrantProxyContext)_localctx).fromFirst = userName(); + setState(4529); + match(TO); + setState(4530); + ((GrantProxyContext)_localctx).toFirst = userName(); + setState(4535); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4531); + match(COMMA); + setState(4532); + ((GrantProxyContext)_localctx).userName = userName(); + ((GrantProxyContext)_localctx).toOther.add(((GrantProxyContext)_localctx).userName); + } + } + setState(4537); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(4541); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WITH) { + { + setState(4538); + match(WITH); + setState(4539); + match(GRANT); + setState(4540); + match(OPTION); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RenameUserContext extends ParserRuleContext { + public TerminalNode RENAME() { return getToken(MySqlParser.RENAME, 0); } + public TerminalNode USER() { return getToken(MySqlParser.USER, 0); } + public List renameUserClause() { + return getRuleContexts(RenameUserClauseContext.class); + } + public RenameUserClauseContext renameUserClause(int i) { + return getRuleContext(RenameUserClauseContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public RenameUserContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_renameUser; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRenameUser(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRenameUser(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRenameUser(this); + else return visitor.visitChildren(this); + } + } + + public final RenameUserContext renameUser() throws RecognitionException { + RenameUserContext _localctx = new RenameUserContext(_ctx, getState()); + enterRule(_localctx, 392, RULE_renameUser); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4543); + match(RENAME); + setState(4544); + match(USER); + setState(4545); + renameUserClause(); + setState(4550); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4546); + match(COMMA); + setState(4547); + renameUserClause(); + } + } + setState(4552); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RevokeStatementContext extends ParserRuleContext { + public RevokeStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_revokeStatement; } + + public RevokeStatementContext() { } + public void copyFrom(RevokeStatementContext ctx) { + super.copyFrom(ctx); + } + } + public static class DetailRevokeContext extends RevokeStatementContext { + public Token privilegeObject; + public TerminalNode REVOKE() { return getToken(MySqlParser.REVOKE, 0); } + public List privelegeClause() { + return getRuleContexts(PrivelegeClauseContext.class); + } + public PrivelegeClauseContext privelegeClause(int i) { + return getRuleContext(PrivelegeClauseContext.class,i); + } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public PrivilegeLevelContext privilegeLevel() { + return getRuleContext(PrivilegeLevelContext.class,0); + } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public List userName() { + return getRuleContexts(UserNameContext.class); + } + public UserNameContext userName(int i) { + return getRuleContext(UserNameContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TerminalNode FUNCTION() { return getToken(MySqlParser.FUNCTION, 0); } + public TerminalNode PROCEDURE() { return getToken(MySqlParser.PROCEDURE, 0); } + public DetailRevokeContext(RevokeStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDetailRevoke(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDetailRevoke(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDetailRevoke(this); + else return visitor.visitChildren(this); + } + } + public static class ShortRevokeContext extends RevokeStatementContext { + public TerminalNode REVOKE() { return getToken(MySqlParser.REVOKE, 0); } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode GRANT() { return getToken(MySqlParser.GRANT, 0); } + public TerminalNode OPTION() { return getToken(MySqlParser.OPTION, 0); } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public List userName() { + return getRuleContexts(UserNameContext.class); + } + public UserNameContext userName(int i) { + return getRuleContext(UserNameContext.class,i); + } + public TerminalNode PRIVILEGES() { return getToken(MySqlParser.PRIVILEGES, 0); } + public ShortRevokeContext(RevokeStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShortRevoke(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShortRevoke(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShortRevoke(this); + else return visitor.visitChildren(this); + } + } + + public final RevokeStatementContext revokeStatement() throws RecognitionException { + RevokeStatementContext _localctx = new RevokeStatementContext(_ctx, getState()); + enterRule(_localctx, 394, RULE_revokeStatement); + int _la; + try { + setState(4593); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,670,_ctx) ) { + case 1: + _localctx = new DetailRevokeContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(4553); + match(REVOKE); + setState(4554); + privelegeClause(); + setState(4559); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4555); + match(COMMA); + setState(4556); + privelegeClause(); + } + } + setState(4561); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(4562); + match(ON); + setState(4564); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,666,_ctx) ) { + case 1: + { + setState(4563); + ((DetailRevokeContext)_localctx).privilegeObject = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==PROCEDURE || _la==TABLE || _la==FUNCTION) ) { + ((DetailRevokeContext)_localctx).privilegeObject = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + setState(4566); + privilegeLevel(); + setState(4567); + match(FROM); + setState(4568); + userName(); + setState(4573); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4569); + match(COMMA); + setState(4570); + userName(); + } + } + setState(4575); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 2: + _localctx = new ShortRevokeContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(4576); + match(REVOKE); + setState(4577); + match(ALL); + setState(4579); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PRIVILEGES) { + { + setState(4578); + match(PRIVILEGES); + } + } + + setState(4581); + match(COMMA); + setState(4582); + match(GRANT); + setState(4583); + match(OPTION); + setState(4584); + match(FROM); + setState(4585); + userName(); + setState(4590); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4586); + match(COMMA); + setState(4587); + userName(); + } + } + setState(4592); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RevokeProxyContext extends ParserRuleContext { + public UserNameContext onUser; + public UserNameContext fromFirst; + public UserNameContext userName; + public List fromOther = new ArrayList(); + public TerminalNode REVOKE() { return getToken(MySqlParser.REVOKE, 0); } + public TerminalNode PROXY() { return getToken(MySqlParser.PROXY, 0); } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public List userName() { + return getRuleContexts(UserNameContext.class); + } + public UserNameContext userName(int i) { + return getRuleContext(UserNameContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public RevokeProxyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_revokeProxy; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRevokeProxy(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRevokeProxy(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRevokeProxy(this); + else return visitor.visitChildren(this); + } + } + + public final RevokeProxyContext revokeProxy() throws RecognitionException { + RevokeProxyContext _localctx = new RevokeProxyContext(_ctx, getState()); + enterRule(_localctx, 396, RULE_revokeProxy); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4595); + match(REVOKE); + setState(4596); + match(PROXY); + setState(4597); + match(ON); + setState(4598); + ((RevokeProxyContext)_localctx).onUser = userName(); + setState(4599); + match(FROM); + setState(4600); + ((RevokeProxyContext)_localctx).fromFirst = userName(); + setState(4605); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4601); + match(COMMA); + setState(4602); + ((RevokeProxyContext)_localctx).userName = userName(); + ((RevokeProxyContext)_localctx).fromOther.add(((RevokeProxyContext)_localctx).userName); + } + } + setState(4607); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SetPasswordStatementContext extends ParserRuleContext { + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode PASSWORD() { return getToken(MySqlParser.PASSWORD, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public PasswordFunctionClauseContext passwordFunctionClause() { + return getRuleContext(PasswordFunctionClauseContext.class,0); + } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public UserNameContext userName() { + return getRuleContext(UserNameContext.class,0); + } + public SetPasswordStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_setPasswordStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSetPasswordStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSetPasswordStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSetPasswordStatement(this); + else return visitor.visitChildren(this); + } + } + + public final SetPasswordStatementContext setPasswordStatement() throws RecognitionException { + SetPasswordStatementContext _localctx = new SetPasswordStatementContext(_ctx, getState()); + enterRule(_localctx, 398, RULE_setPasswordStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4608); + match(SET); + setState(4609); + match(PASSWORD); + setState(4612); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FOR) { + { + setState(4610); + match(FOR); + setState(4611); + userName(); + } + } + + setState(4614); + match(EQUAL_SYMBOL); + setState(4617); + _errHandler.sync(this); + switch (_input.LA(1)) { + case OLD_PASSWORD: + case PASSWORD: + { + setState(4615); + passwordFunctionClause(); + } + break; + case STRING_LITERAL: + { + setState(4616); + match(STRING_LITERAL); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UserSpecificationContext extends ParserRuleContext { + public UserNameContext userName() { + return getRuleContext(UserNameContext.class,0); + } + public UserPasswordOptionContext userPasswordOption() { + return getRuleContext(UserPasswordOptionContext.class,0); + } + public UserSpecificationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_userSpecification; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUserSpecification(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUserSpecification(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUserSpecification(this); + else return visitor.visitChildren(this); + } + } + + public final UserSpecificationContext userSpecification() throws RecognitionException { + UserSpecificationContext _localctx = new UserSpecificationContext(_ctx, getState()); + enterRule(_localctx, 400, RULE_userSpecification); + try { + enterOuterAlt(_localctx, 1); + { + setState(4619); + userName(); + setState(4620); + userPasswordOption(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UserAuthOptionContext extends ParserRuleContext { + public UserAuthOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_userAuthOption; } + + public UserAuthOptionContext() { } + public void copyFrom(UserAuthOptionContext ctx) { + super.copyFrom(ctx); + } + } + public static class SimpleAuthOptionContext extends UserAuthOptionContext { + public UserNameContext userName() { + return getRuleContext(UserNameContext.class,0); + } + public SimpleAuthOptionContext(UserAuthOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSimpleAuthOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSimpleAuthOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSimpleAuthOption(this); + else return visitor.visitChildren(this); + } + } + public static class PasswordAuthOptionContext extends UserAuthOptionContext { + public Token hashed; + public UserNameContext userName() { + return getRuleContext(UserNameContext.class,0); + } + public TerminalNode IDENTIFIED() { return getToken(MySqlParser.IDENTIFIED, 0); } + public TerminalNode BY() { return getToken(MySqlParser.BY, 0); } + public TerminalNode PASSWORD() { return getToken(MySqlParser.PASSWORD, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public PasswordAuthOptionContext(UserAuthOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPasswordAuthOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPasswordAuthOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPasswordAuthOption(this); + else return visitor.visitChildren(this); + } + } + public static class StringAuthOptionContext extends UserAuthOptionContext { + public UserNameContext userName() { + return getRuleContext(UserNameContext.class,0); + } + public TerminalNode IDENTIFIED() { return getToken(MySqlParser.IDENTIFIED, 0); } + public TerminalNode BY() { return getToken(MySqlParser.BY, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public AuthPluginContext authPlugin() { + return getRuleContext(AuthPluginContext.class,0); + } + public StringAuthOptionContext(UserAuthOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterStringAuthOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitStringAuthOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitStringAuthOption(this); + else return visitor.visitChildren(this); + } + } + public static class HashAuthOptionContext extends UserAuthOptionContext { + public UserNameContext userName() { + return getRuleContext(UserNameContext.class,0); + } + public TerminalNode IDENTIFIED() { return getToken(MySqlParser.IDENTIFIED, 0); } + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public AuthPluginContext authPlugin() { + return getRuleContext(AuthPluginContext.class,0); + } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public HashAuthOptionContext(UserAuthOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHashAuthOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHashAuthOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHashAuthOption(this); + else return visitor.visitChildren(this); + } + } + + public final UserAuthOptionContext userAuthOption() throws RecognitionException { + UserAuthOptionContext _localctx = new UserAuthOptionContext(_ctx, getState()); + enterRule(_localctx, 402, RULE_userAuthOption); + int _la; + try { + setState(4646); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,676,_ctx) ) { + case 1: + _localctx = new PasswordAuthOptionContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(4622); + userName(); + setState(4623); + match(IDENTIFIED); + setState(4624); + match(BY); + setState(4625); + match(PASSWORD); + setState(4626); + ((PasswordAuthOptionContext)_localctx).hashed = match(STRING_LITERAL); + } + break; + case 2: + _localctx = new StringAuthOptionContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(4628); + userName(); + setState(4629); + match(IDENTIFIED); + setState(4632); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WITH) { + { + setState(4630); + match(WITH); + setState(4631); + authPlugin(); + } + } + + setState(4634); + match(BY); + setState(4635); + match(STRING_LITERAL); + } + break; + case 3: + _localctx = new HashAuthOptionContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(4637); + userName(); + setState(4638); + match(IDENTIFIED); + setState(4639); + match(WITH); + setState(4640); + authPlugin(); + setState(4643); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(4641); + match(AS); + setState(4642); + match(STRING_LITERAL); + } + } + + } + break; + case 4: + _localctx = new SimpleAuthOptionContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(4645); + userName(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TlsOptionContext extends ParserRuleContext { + public TerminalNode SSL() { return getToken(MySqlParser.SSL, 0); } + public TerminalNode X509() { return getToken(MySqlParser.X509, 0); } + public TerminalNode CIPHER() { return getToken(MySqlParser.CIPHER, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode ISSUER() { return getToken(MySqlParser.ISSUER, 0); } + public TerminalNode SUBJECT() { return getToken(MySqlParser.SUBJECT, 0); } + public TlsOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tlsOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTlsOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTlsOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTlsOption(this); + else return visitor.visitChildren(this); + } + } + + public final TlsOptionContext tlsOption() throws RecognitionException { + TlsOptionContext _localctx = new TlsOptionContext(_ctx, getState()); + enterRule(_localctx, 404, RULE_tlsOption); + try { + setState(4656); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SSL: + enterOuterAlt(_localctx, 1); + { + setState(4648); + match(SSL); + } + break; + case X509: + enterOuterAlt(_localctx, 2); + { + setState(4649); + match(X509); + } + break; + case CIPHER: + enterOuterAlt(_localctx, 3); + { + setState(4650); + match(CIPHER); + setState(4651); + match(STRING_LITERAL); + } + break; + case ISSUER: + enterOuterAlt(_localctx, 4); + { + setState(4652); + match(ISSUER); + setState(4653); + match(STRING_LITERAL); + } + break; + case SUBJECT: + enterOuterAlt(_localctx, 5); + { + setState(4654); + match(SUBJECT); + setState(4655); + match(STRING_LITERAL); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UserResourceOptionContext extends ParserRuleContext { + public TerminalNode MAX_QUERIES_PER_HOUR() { return getToken(MySqlParser.MAX_QUERIES_PER_HOUR, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode MAX_UPDATES_PER_HOUR() { return getToken(MySqlParser.MAX_UPDATES_PER_HOUR, 0); } + public TerminalNode MAX_CONNECTIONS_PER_HOUR() { return getToken(MySqlParser.MAX_CONNECTIONS_PER_HOUR, 0); } + public TerminalNode MAX_USER_CONNECTIONS() { return getToken(MySqlParser.MAX_USER_CONNECTIONS, 0); } + public UserResourceOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_userResourceOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUserResourceOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUserResourceOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUserResourceOption(this); + else return visitor.visitChildren(this); + } + } + + public final UserResourceOptionContext userResourceOption() throws RecognitionException { + UserResourceOptionContext _localctx = new UserResourceOptionContext(_ctx, getState()); + enterRule(_localctx, 406, RULE_userResourceOption); + try { + setState(4666); + _errHandler.sync(this); + switch (_input.LA(1)) { + case MAX_QUERIES_PER_HOUR: + enterOuterAlt(_localctx, 1); + { + setState(4658); + match(MAX_QUERIES_PER_HOUR); + setState(4659); + decimalLiteral(); + } + break; + case MAX_UPDATES_PER_HOUR: + enterOuterAlt(_localctx, 2); + { + setState(4660); + match(MAX_UPDATES_PER_HOUR); + setState(4661); + decimalLiteral(); + } + break; + case MAX_CONNECTIONS_PER_HOUR: + enterOuterAlt(_localctx, 3); + { + setState(4662); + match(MAX_CONNECTIONS_PER_HOUR); + setState(4663); + decimalLiteral(); + } + break; + case MAX_USER_CONNECTIONS: + enterOuterAlt(_localctx, 4); + { + setState(4664); + match(MAX_USER_CONNECTIONS); + setState(4665); + decimalLiteral(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UserPasswordOptionContext extends ParserRuleContext { + public Token expireType; + public TerminalNode PASSWORD() { return getToken(MySqlParser.PASSWORD, 0); } + public TerminalNode EXPIRE() { return getToken(MySqlParser.EXPIRE, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode DAY() { return getToken(MySqlParser.DAY, 0); } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public TerminalNode NEVER() { return getToken(MySqlParser.NEVER, 0); } + public TerminalNode INTERVAL() { return getToken(MySqlParser.INTERVAL, 0); } + public UserPasswordOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_userPasswordOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUserPasswordOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUserPasswordOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUserPasswordOption(this); + else return visitor.visitChildren(this); + } + } + + public final UserPasswordOptionContext userPasswordOption() throws RecognitionException { + UserPasswordOptionContext _localctx = new UserPasswordOptionContext(_ctx, getState()); + enterRule(_localctx, 408, RULE_userPasswordOption); + try { + enterOuterAlt(_localctx, 1); + { + setState(4668); + match(PASSWORD); + setState(4669); + match(EXPIRE); + setState(4676); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DEFAULT: + { + setState(4670); + ((UserPasswordOptionContext)_localctx).expireType = match(DEFAULT); + } + break; + case NEVER: + { + setState(4671); + ((UserPasswordOptionContext)_localctx).expireType = match(NEVER); + } + break; + case INTERVAL: + { + setState(4672); + ((UserPasswordOptionContext)_localctx).expireType = match(INTERVAL); + setState(4673); + decimalLiteral(); + setState(4674); + match(DAY); + } + break; + case EOF: + case ALTER: + case ANALYZE: + case CALL: + case CHANGE: + case CHECK: + case CREATE: + case DELETE: + case DESC: + case DESCRIBE: + case DROP: + case EXPLAIN: + case GET: + case GRANT: + case INSERT: + case KILL: + case LOAD: + case LOCK: + case OPTIMIZE: + case PURGE: + case RELEASE: + case RENAME: + case REPLACE: + case RESIGNAL: + case REVOKE: + case SELECT: + case SET: + case SHOW: + case SIGNAL: + case UNLOCK: + case UPDATE: + case USE: + case ACCOUNT: + case BEGIN: + case BINLOG: + case CACHE: + case CHECKSUM: + case COMMIT: + case DEALLOCATE: + case DO: + case FLUSH: + case HANDLER: + case HELP: + case INSTALL: + case PASSWORD: + case PREPARE: + case REPAIR: + case RESET: + case ROLLBACK: + case SAVEPOINT: + case START: + case STOP: + case TRUNCATE: + case UNINSTALL: + case XA: + case EXECUTE: + case SHUTDOWN: + case MINUSMINUS: + case LR_BRACKET: + case COMMA: + case SEMI: + break; + default: + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UserLockOptionContext extends ParserRuleContext { + public Token lockType; + public TerminalNode ACCOUNT() { return getToken(MySqlParser.ACCOUNT, 0); } + public TerminalNode LOCK() { return getToken(MySqlParser.LOCK, 0); } + public TerminalNode UNLOCK() { return getToken(MySqlParser.UNLOCK, 0); } + public UserLockOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_userLockOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUserLockOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUserLockOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUserLockOption(this); + else return visitor.visitChildren(this); + } + } + + public final UserLockOptionContext userLockOption() throws RecognitionException { + UserLockOptionContext _localctx = new UserLockOptionContext(_ctx, getState()); + enterRule(_localctx, 410, RULE_userLockOption); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4678); + match(ACCOUNT); + setState(4679); + ((UserLockOptionContext)_localctx).lockType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==LOCK || _la==UNLOCK) ) { + ((UserLockOptionContext)_localctx).lockType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PrivelegeClauseContext extends ParserRuleContext { + public PrivilegeContext privilege() { + return getRuleContext(PrivilegeContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public PrivelegeClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_privelegeClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPrivelegeClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPrivelegeClause(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPrivelegeClause(this); + else return visitor.visitChildren(this); + } + } + + public final PrivelegeClauseContext privelegeClause() throws RecognitionException { + PrivelegeClauseContext _localctx = new PrivelegeClauseContext(_ctx, getState()); + enterRule(_localctx, 412, RULE_privelegeClause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4681); + privilege(); + setState(4686); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LR_BRACKET) { + { + setState(4682); + match(LR_BRACKET); + setState(4683); + uidList(); + setState(4684); + match(RR_BRACKET); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PrivilegeContext extends ParserRuleContext { + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public TerminalNode PRIVILEGES() { return getToken(MySqlParser.PRIVILEGES, 0); } + public TerminalNode ALTER() { return getToken(MySqlParser.ALTER, 0); } + public TerminalNode ROUTINE() { return getToken(MySqlParser.ROUTINE, 0); } + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode TEMPORARY() { return getToken(MySqlParser.TEMPORARY, 0); } + public TerminalNode TABLES() { return getToken(MySqlParser.TABLES, 0); } + public TerminalNode VIEW() { return getToken(MySqlParser.VIEW, 0); } + public TerminalNode USER() { return getToken(MySqlParser.USER, 0); } + public TerminalNode TABLESPACE() { return getToken(MySqlParser.TABLESPACE, 0); } + public TerminalNode DELETE() { return getToken(MySqlParser.DELETE, 0); } + public TerminalNode DROP() { return getToken(MySqlParser.DROP, 0); } + public TerminalNode EVENT() { return getToken(MySqlParser.EVENT, 0); } + public TerminalNode EXECUTE() { return getToken(MySqlParser.EXECUTE, 0); } + public TerminalNode FILE() { return getToken(MySqlParser.FILE, 0); } + public TerminalNode GRANT() { return getToken(MySqlParser.GRANT, 0); } + public TerminalNode OPTION() { return getToken(MySqlParser.OPTION, 0); } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode INSERT() { return getToken(MySqlParser.INSERT, 0); } + public TerminalNode LOCK() { return getToken(MySqlParser.LOCK, 0); } + public TerminalNode PROCESS() { return getToken(MySqlParser.PROCESS, 0); } + public TerminalNode PROXY() { return getToken(MySqlParser.PROXY, 0); } + public TerminalNode REFERENCES() { return getToken(MySqlParser.REFERENCES, 0); } + public TerminalNode RELOAD() { return getToken(MySqlParser.RELOAD, 0); } + public TerminalNode REPLICATION() { return getToken(MySqlParser.REPLICATION, 0); } + public TerminalNode CLIENT() { return getToken(MySqlParser.CLIENT, 0); } + public TerminalNode SLAVE() { return getToken(MySqlParser.SLAVE, 0); } + public TerminalNode SELECT() { return getToken(MySqlParser.SELECT, 0); } + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode DATABASES() { return getToken(MySqlParser.DATABASES, 0); } + public TerminalNode SHUTDOWN() { return getToken(MySqlParser.SHUTDOWN, 0); } + public TerminalNode SUPER() { return getToken(MySqlParser.SUPER, 0); } + public TerminalNode TRIGGER() { return getToken(MySqlParser.TRIGGER, 0); } + public TerminalNode UPDATE() { return getToken(MySqlParser.UPDATE, 0); } + public TerminalNode USAGE() { return getToken(MySqlParser.USAGE, 0); } + public TerminalNode SESSION_VARIABLES_ADMIN() { return getToken(MySqlParser.SESSION_VARIABLES_ADMIN, 0); } + public PrivilegeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_privilege; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPrivilege(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPrivilege(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPrivilege(this); + else return visitor.visitChildren(this); + } + } + + public final PrivilegeContext privilege() throws RecognitionException { + PrivilegeContext _localctx = new PrivilegeContext(_ctx, getState()); + enterRule(_localctx, 414, RULE_privilege); + int _la; + try { + setState(4731); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ALL: + enterOuterAlt(_localctx, 1); + { + setState(4688); + match(ALL); + setState(4690); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PRIVILEGES) { + { + setState(4689); + match(PRIVILEGES); + } + } + + } + break; + case ALTER: + enterOuterAlt(_localctx, 2); + { + setState(4692); + match(ALTER); + setState(4694); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ROUTINE) { + { + setState(4693); + match(ROUTINE); + } + } + + } + break; + case CREATE: + enterOuterAlt(_localctx, 3); + { + setState(4696); + match(CREATE); + setState(4703); + _errHandler.sync(this); + switch (_input.LA(1)) { + case TEMPORARY: + { + setState(4697); + match(TEMPORARY); + setState(4698); + match(TABLES); + } + break; + case ROUTINE: + { + setState(4699); + match(ROUTINE); + } + break; + case VIEW: + { + setState(4700); + match(VIEW); + } + break; + case USER: + { + setState(4701); + match(USER); + } + break; + case TABLESPACE: + { + setState(4702); + match(TABLESPACE); + } + break; + case ON: + case LR_BRACKET: + case COMMA: + break; + default: + break; + } + } + break; + case DELETE: + enterOuterAlt(_localctx, 4); + { + setState(4705); + match(DELETE); + } + break; + case DROP: + enterOuterAlt(_localctx, 5); + { + setState(4706); + match(DROP); + } + break; + case EVENT: + enterOuterAlt(_localctx, 6); + { + setState(4707); + match(EVENT); + } + break; + case EXECUTE: + enterOuterAlt(_localctx, 7); + { + setState(4708); + match(EXECUTE); + } + break; + case FILE: + enterOuterAlt(_localctx, 8); + { + setState(4709); + match(FILE); + } + break; + case GRANT: + enterOuterAlt(_localctx, 9); + { + setState(4710); + match(GRANT); + setState(4711); + match(OPTION); + } + break; + case INDEX: + enterOuterAlt(_localctx, 10); + { + setState(4712); + match(INDEX); + } + break; + case INSERT: + enterOuterAlt(_localctx, 11); + { + setState(4713); + match(INSERT); + } + break; + case LOCK: + enterOuterAlt(_localctx, 12); + { + setState(4714); + match(LOCK); + setState(4715); + match(TABLES); + } + break; + case PROCESS: + enterOuterAlt(_localctx, 13); + { + setState(4716); + match(PROCESS); + } + break; + case PROXY: + enterOuterAlt(_localctx, 14); + { + setState(4717); + match(PROXY); + } + break; + case REFERENCES: + enterOuterAlt(_localctx, 15); + { + setState(4718); + match(REFERENCES); + } + break; + case RELOAD: + enterOuterAlt(_localctx, 16); + { + setState(4719); + match(RELOAD); + } + break; + case REPLICATION: + enterOuterAlt(_localctx, 17); + { + setState(4720); + match(REPLICATION); + setState(4721); + _la = _input.LA(1); + if ( !(_la==CLIENT || _la==SLAVE) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case SELECT: + enterOuterAlt(_localctx, 18); + { + setState(4722); + match(SELECT); + } + break; + case SHOW: + enterOuterAlt(_localctx, 19); + { + setState(4723); + match(SHOW); + setState(4724); + _la = _input.LA(1); + if ( !(_la==DATABASES || _la==VIEW) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case SHUTDOWN: + enterOuterAlt(_localctx, 20); + { + setState(4725); + match(SHUTDOWN); + } + break; + case SUPER: + enterOuterAlt(_localctx, 21); + { + setState(4726); + match(SUPER); + } + break; + case TRIGGER: + enterOuterAlt(_localctx, 22); + { + setState(4727); + match(TRIGGER); + } + break; + case UPDATE: + enterOuterAlt(_localctx, 23); + { + setState(4728); + match(UPDATE); + } + break; + case USAGE: + enterOuterAlt(_localctx, 24); + { + setState(4729); + match(USAGE); + } + break; + case SESSION_VARIABLES_ADMIN: + enterOuterAlt(_localctx, 25); + { + setState(4730); + match(SESSION_VARIABLES_ADMIN); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PrivilegeLevelContext extends ParserRuleContext { + public PrivilegeLevelContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_privilegeLevel; } + + public PrivilegeLevelContext() { } + public void copyFrom(PrivilegeLevelContext ctx) { + super.copyFrom(ctx); + } + } + public static class DefiniteSchemaPrivLevelContext extends PrivilegeLevelContext { + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode DOT() { return getToken(MySqlParser.DOT, 0); } + public TerminalNode STAR() { return getToken(MySqlParser.STAR, 0); } + public DefiniteSchemaPrivLevelContext(PrivilegeLevelContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDefiniteSchemaPrivLevel(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDefiniteSchemaPrivLevel(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDefiniteSchemaPrivLevel(this); + else return visitor.visitChildren(this); + } + } + public static class DefiniteFullTablePrivLevel2Context extends PrivilegeLevelContext { + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public DottedIdContext dottedId() { + return getRuleContext(DottedIdContext.class,0); + } + public DefiniteFullTablePrivLevel2Context(PrivilegeLevelContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDefiniteFullTablePrivLevel2(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDefiniteFullTablePrivLevel2(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDefiniteFullTablePrivLevel2(this); + else return visitor.visitChildren(this); + } + } + public static class DefiniteFullTablePrivLevelContext extends PrivilegeLevelContext { + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public TerminalNode DOT() { return getToken(MySqlParser.DOT, 0); } + public DefiniteFullTablePrivLevelContext(PrivilegeLevelContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDefiniteFullTablePrivLevel(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDefiniteFullTablePrivLevel(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDefiniteFullTablePrivLevel(this); + else return visitor.visitChildren(this); + } + } + public static class GlobalPrivLevelContext extends PrivilegeLevelContext { + public List STAR() { return getTokens(MySqlParser.STAR); } + public TerminalNode STAR(int i) { + return getToken(MySqlParser.STAR, i); + } + public TerminalNode DOT() { return getToken(MySqlParser.DOT, 0); } + public GlobalPrivLevelContext(PrivilegeLevelContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterGlobalPrivLevel(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitGlobalPrivLevel(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitGlobalPrivLevel(this); + else return visitor.visitChildren(this); + } + } + public static class DefiniteTablePrivLevelContext extends PrivilegeLevelContext { + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public DefiniteTablePrivLevelContext(PrivilegeLevelContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDefiniteTablePrivLevel(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDefiniteTablePrivLevel(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDefiniteTablePrivLevel(this); + else return visitor.visitChildren(this); + } + } + public static class CurrentSchemaPriviLevelContext extends PrivilegeLevelContext { + public TerminalNode STAR() { return getToken(MySqlParser.STAR, 0); } + public CurrentSchemaPriviLevelContext(PrivilegeLevelContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCurrentSchemaPriviLevel(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCurrentSchemaPriviLevel(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCurrentSchemaPriviLevel(this); + else return visitor.visitChildren(this); + } + } + + public final PrivilegeLevelContext privilegeLevel() throws RecognitionException { + PrivilegeLevelContext _localctx = new PrivilegeLevelContext(_ctx, getState()); + enterRule(_localctx, 416, RULE_privilegeLevel); + try { + setState(4749); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,685,_ctx) ) { + case 1: + _localctx = new CurrentSchemaPriviLevelContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(4733); + match(STAR); + } + break; + case 2: + _localctx = new GlobalPrivLevelContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(4734); + match(STAR); + setState(4735); + match(DOT); + setState(4736); + match(STAR); + } + break; + case 3: + _localctx = new DefiniteSchemaPrivLevelContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(4737); + uid(); + setState(4738); + match(DOT); + setState(4739); + match(STAR); + } + break; + case 4: + _localctx = new DefiniteFullTablePrivLevelContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(4741); + uid(); + setState(4742); + match(DOT); + setState(4743); + uid(); + } + break; + case 5: + _localctx = new DefiniteFullTablePrivLevel2Context(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(4745); + uid(); + setState(4746); + dottedId(); + } + break; + case 6: + _localctx = new DefiniteTablePrivLevelContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(4748); + uid(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RenameUserClauseContext extends ParserRuleContext { + public UserNameContext fromFirst; + public UserNameContext toFirst; + public TerminalNode TO() { return getToken(MySqlParser.TO, 0); } + public List userName() { + return getRuleContexts(UserNameContext.class); + } + public UserNameContext userName(int i) { + return getRuleContext(UserNameContext.class,i); + } + public RenameUserClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_renameUserClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRenameUserClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRenameUserClause(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRenameUserClause(this); + else return visitor.visitChildren(this); + } + } + + public final RenameUserClauseContext renameUserClause() throws RecognitionException { + RenameUserClauseContext _localctx = new RenameUserClauseContext(_ctx, getState()); + enterRule(_localctx, 418, RULE_renameUserClause); + try { + enterOuterAlt(_localctx, 1); + { + setState(4751); + ((RenameUserClauseContext)_localctx).fromFirst = userName(); + setState(4752); + match(TO); + setState(4753); + ((RenameUserClauseContext)_localctx).toFirst = userName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AnalyzeTableContext extends ParserRuleContext { + public Token actionOption; + public TerminalNode ANALYZE() { return getToken(MySqlParser.ANALYZE, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TablesContext tables() { + return getRuleContext(TablesContext.class,0); + } + public TerminalNode NO_WRITE_TO_BINLOG() { return getToken(MySqlParser.NO_WRITE_TO_BINLOG, 0); } + public TerminalNode LOCAL() { return getToken(MySqlParser.LOCAL, 0); } + public AnalyzeTableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_analyzeTable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAnalyzeTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAnalyzeTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAnalyzeTable(this); + else return visitor.visitChildren(this); + } + } + + public final AnalyzeTableContext analyzeTable() throws RecognitionException { + AnalyzeTableContext _localctx = new AnalyzeTableContext(_ctx, getState()); + enterRule(_localctx, 420, RULE_analyzeTable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4755); + match(ANALYZE); + setState(4757); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NO_WRITE_TO_BINLOG || _la==LOCAL) { + { + setState(4756); + ((AnalyzeTableContext)_localctx).actionOption = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==NO_WRITE_TO_BINLOG || _la==LOCAL) ) { + ((AnalyzeTableContext)_localctx).actionOption = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(4759); + match(TABLE); + setState(4760); + tables(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CheckTableContext extends ParserRuleContext { + public TerminalNode CHECK() { return getToken(MySqlParser.CHECK, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TablesContext tables() { + return getRuleContext(TablesContext.class,0); + } + public List checkTableOption() { + return getRuleContexts(CheckTableOptionContext.class); + } + public CheckTableOptionContext checkTableOption(int i) { + return getRuleContext(CheckTableOptionContext.class,i); + } + public CheckTableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_checkTable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCheckTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCheckTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCheckTable(this); + else return visitor.visitChildren(this); + } + } + + public final CheckTableContext checkTable() throws RecognitionException { + CheckTableContext _localctx = new CheckTableContext(_ctx, getState()); + enterRule(_localctx, 422, RULE_checkTable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4762); + match(CHECK); + setState(4763); + match(TABLE); + setState(4764); + tables(); + setState(4768); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==FOR || _la==CHANGED || _la==EXTENDED || _la==FAST || _la==MEDIUM || _la==QUICK) { + { + { + setState(4765); + checkTableOption(); + } + } + setState(4770); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ChecksumTableContext extends ParserRuleContext { + public Token actionOption; + public TerminalNode CHECKSUM() { return getToken(MySqlParser.CHECKSUM, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TablesContext tables() { + return getRuleContext(TablesContext.class,0); + } + public TerminalNode QUICK() { return getToken(MySqlParser.QUICK, 0); } + public TerminalNode EXTENDED() { return getToken(MySqlParser.EXTENDED, 0); } + public ChecksumTableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_checksumTable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterChecksumTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitChecksumTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitChecksumTable(this); + else return visitor.visitChildren(this); + } + } + + public final ChecksumTableContext checksumTable() throws RecognitionException { + ChecksumTableContext _localctx = new ChecksumTableContext(_ctx, getState()); + enterRule(_localctx, 424, RULE_checksumTable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4771); + match(CHECKSUM); + setState(4772); + match(TABLE); + setState(4773); + tables(); + setState(4775); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EXTENDED || _la==QUICK) { + { + setState(4774); + ((ChecksumTableContext)_localctx).actionOption = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==EXTENDED || _la==QUICK) ) { + ((ChecksumTableContext)_localctx).actionOption = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class OptimizeTableContext extends ParserRuleContext { + public Token actionOption; + public TerminalNode OPTIMIZE() { return getToken(MySqlParser.OPTIMIZE, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TablesContext tables() { + return getRuleContext(TablesContext.class,0); + } + public TerminalNode NO_WRITE_TO_BINLOG() { return getToken(MySqlParser.NO_WRITE_TO_BINLOG, 0); } + public TerminalNode LOCAL() { return getToken(MySqlParser.LOCAL, 0); } + public OptimizeTableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_optimizeTable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterOptimizeTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitOptimizeTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitOptimizeTable(this); + else return visitor.visitChildren(this); + } + } + + public final OptimizeTableContext optimizeTable() throws RecognitionException { + OptimizeTableContext _localctx = new OptimizeTableContext(_ctx, getState()); + enterRule(_localctx, 426, RULE_optimizeTable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4777); + match(OPTIMIZE); + setState(4779); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NO_WRITE_TO_BINLOG || _la==LOCAL) { + { + setState(4778); + ((OptimizeTableContext)_localctx).actionOption = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==NO_WRITE_TO_BINLOG || _la==LOCAL) ) { + ((OptimizeTableContext)_localctx).actionOption = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(4781); + match(TABLE); + setState(4782); + tables(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RepairTableContext extends ParserRuleContext { + public Token actionOption; + public TerminalNode REPAIR() { return getToken(MySqlParser.REPAIR, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TablesContext tables() { + return getRuleContext(TablesContext.class,0); + } + public TerminalNode QUICK() { return getToken(MySqlParser.QUICK, 0); } + public TerminalNode EXTENDED() { return getToken(MySqlParser.EXTENDED, 0); } + public TerminalNode USE_FRM() { return getToken(MySqlParser.USE_FRM, 0); } + public TerminalNode NO_WRITE_TO_BINLOG() { return getToken(MySqlParser.NO_WRITE_TO_BINLOG, 0); } + public TerminalNode LOCAL() { return getToken(MySqlParser.LOCAL, 0); } + public RepairTableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_repairTable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRepairTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRepairTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRepairTable(this); + else return visitor.visitChildren(this); + } + } + + public final RepairTableContext repairTable() throws RecognitionException { + RepairTableContext _localctx = new RepairTableContext(_ctx, getState()); + enterRule(_localctx, 428, RULE_repairTable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4784); + match(REPAIR); + setState(4786); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NO_WRITE_TO_BINLOG || _la==LOCAL) { + { + setState(4785); + ((RepairTableContext)_localctx).actionOption = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==NO_WRITE_TO_BINLOG || _la==LOCAL) ) { + ((RepairTableContext)_localctx).actionOption = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(4788); + match(TABLE); + setState(4789); + tables(); + setState(4791); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==QUICK) { + { + setState(4790); + match(QUICK); + } + } + + setState(4794); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EXTENDED) { + { + setState(4793); + match(EXTENDED); + } + } + + setState(4797); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==USE_FRM) { + { + setState(4796); + match(USE_FRM); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CheckTableOptionContext extends ParserRuleContext { + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public TerminalNode UPGRADE() { return getToken(MySqlParser.UPGRADE, 0); } + public TerminalNode QUICK() { return getToken(MySqlParser.QUICK, 0); } + public TerminalNode FAST() { return getToken(MySqlParser.FAST, 0); } + public TerminalNode MEDIUM() { return getToken(MySqlParser.MEDIUM, 0); } + public TerminalNode EXTENDED() { return getToken(MySqlParser.EXTENDED, 0); } + public TerminalNode CHANGED() { return getToken(MySqlParser.CHANGED, 0); } + public CheckTableOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_checkTableOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCheckTableOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCheckTableOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCheckTableOption(this); + else return visitor.visitChildren(this); + } + } + + public final CheckTableOptionContext checkTableOption() throws RecognitionException { + CheckTableOptionContext _localctx = new CheckTableOptionContext(_ctx, getState()); + enterRule(_localctx, 430, RULE_checkTableOption); + try { + setState(4806); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FOR: + enterOuterAlt(_localctx, 1); + { + setState(4799); + match(FOR); + setState(4800); + match(UPGRADE); + } + break; + case QUICK: + enterOuterAlt(_localctx, 2); + { + setState(4801); + match(QUICK); + } + break; + case FAST: + enterOuterAlt(_localctx, 3); + { + setState(4802); + match(FAST); + } + break; + case MEDIUM: + enterOuterAlt(_localctx, 4); + { + setState(4803); + match(MEDIUM); + } + break; + case EXTENDED: + enterOuterAlt(_localctx, 5); + { + setState(4804); + match(EXTENDED); + } + break; + case CHANGED: + enterOuterAlt(_localctx, 6); + { + setState(4805); + match(CHANGED); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CreateUdfunctionContext extends ParserRuleContext { + public Token returnType; + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode FUNCTION() { return getToken(MySqlParser.FUNCTION, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode RETURNS() { return getToken(MySqlParser.RETURNS, 0); } + public TerminalNode SONAME() { return getToken(MySqlParser.SONAME, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode STRING() { return getToken(MySqlParser.STRING, 0); } + public TerminalNode INTEGER() { return getToken(MySqlParser.INTEGER, 0); } + public TerminalNode REAL() { return getToken(MySqlParser.REAL, 0); } + public TerminalNode DECIMAL() { return getToken(MySqlParser.DECIMAL, 0); } + public TerminalNode AGGREGATE() { return getToken(MySqlParser.AGGREGATE, 0); } + public CreateUdfunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createUdfunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCreateUdfunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCreateUdfunction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCreateUdfunction(this); + else return visitor.visitChildren(this); + } + } + + public final CreateUdfunctionContext createUdfunction() throws RecognitionException { + CreateUdfunctionContext _localctx = new CreateUdfunctionContext(_ctx, getState()); + enterRule(_localctx, 432, RULE_createUdfunction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(4808); + match(CREATE); + setState(4810); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AGGREGATE) { + { + setState(4809); + match(AGGREGATE); + } + } + + setState(4812); + match(FUNCTION); + setState(4813); + uid(); + setState(4814); + match(RETURNS); + setState(4815); + ((CreateUdfunctionContext)_localctx).returnType = _input.LT(1); + _la = _input.LA(1); + if ( !(((((_la - 188)) & ~0x3f) == 0 && ((1L << (_la - 188)) & ((1L << (INTEGER - 188)) | (1L << (REAL - 188)) | (1L << (DECIMAL - 188)))) != 0) || _la==STRING) ) { + ((CreateUdfunctionContext)_localctx).returnType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4816); + match(SONAME); + setState(4817); + match(STRING_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InstallPluginContext extends ParserRuleContext { + public TerminalNode INSTALL() { return getToken(MySqlParser.INSTALL, 0); } + public TerminalNode PLUGIN() { return getToken(MySqlParser.PLUGIN, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode SONAME() { return getToken(MySqlParser.SONAME, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public InstallPluginContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_installPlugin; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterInstallPlugin(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitInstallPlugin(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitInstallPlugin(this); + else return visitor.visitChildren(this); + } + } + + public final InstallPluginContext installPlugin() throws RecognitionException { + InstallPluginContext _localctx = new InstallPluginContext(_ctx, getState()); + enterRule(_localctx, 434, RULE_installPlugin); + try { + enterOuterAlt(_localctx, 1); + { + setState(4819); + match(INSTALL); + setState(4820); + match(PLUGIN); + setState(4821); + uid(); + setState(4822); + match(SONAME); + setState(4823); + match(STRING_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UninstallPluginContext extends ParserRuleContext { + public TerminalNode UNINSTALL() { return getToken(MySqlParser.UNINSTALL, 0); } + public TerminalNode PLUGIN() { return getToken(MySqlParser.PLUGIN, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public UninstallPluginContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_uninstallPlugin; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUninstallPlugin(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUninstallPlugin(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUninstallPlugin(this); + else return visitor.visitChildren(this); + } + } + + public final UninstallPluginContext uninstallPlugin() throws RecognitionException { + UninstallPluginContext _localctx = new UninstallPluginContext(_ctx, getState()); + enterRule(_localctx, 436, RULE_uninstallPlugin); + try { + enterOuterAlt(_localctx, 1); + { + setState(4825); + match(UNINSTALL); + setState(4826); + match(PLUGIN); + setState(4827); + uid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SetStatementContext extends ParserRuleContext { + public SetStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_setStatement; } + + public SetStatementContext() { } + public void copyFrom(SetStatementContext ctx) { + super.copyFrom(ctx); + } + } + public static class SetTransactionContext extends SetStatementContext { + public SetTransactionStatementContext setTransactionStatement() { + return getRuleContext(SetTransactionStatementContext.class,0); + } + public SetTransactionContext(SetStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSetTransaction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSetTransaction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSetTransaction(this); + else return visitor.visitChildren(this); + } + } + public static class SetCharsetContext extends SetStatementContext { + public List SET() { return getTokens(MySqlParser.SET); } + public TerminalNode SET(int i) { + return getToken(MySqlParser.SET, i); + } + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public TerminalNode CHARSET() { return getToken(MySqlParser.CHARSET, 0); } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public SetCharsetContext(SetStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSetCharset(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSetCharset(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSetCharset(this); + else return visitor.visitChildren(this); + } + } + public static class SetNamesContext extends SetStatementContext { + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode NAMES() { return getToken(MySqlParser.NAMES, 0); } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public TerminalNode COLLATE() { return getToken(MySqlParser.COLLATE, 0); } + public CollationNameContext collationName() { + return getRuleContext(CollationNameContext.class,0); + } + public SetNamesContext(SetStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSetNames(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSetNames(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSetNames(this); + else return visitor.visitChildren(this); + } + } + public static class SetPasswordContext extends SetStatementContext { + public SetPasswordStatementContext setPasswordStatement() { + return getRuleContext(SetPasswordStatementContext.class,0); + } + public SetPasswordContext(SetStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSetPassword(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSetPassword(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSetPassword(this); + else return visitor.visitChildren(this); + } + } + public static class SetAutocommitContext extends SetStatementContext { + public SetAutocommitStatementContext setAutocommitStatement() { + return getRuleContext(SetAutocommitStatementContext.class,0); + } + public SetAutocommitContext(SetStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSetAutocommit(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSetAutocommit(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSetAutocommit(this); + else return visitor.visitChildren(this); + } + } + public static class SetNewValueInsideTriggerContext extends SetStatementContext { + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public List fullId() { + return getRuleContexts(FullIdContext.class); + } + public FullIdContext fullId(int i) { + return getRuleContext(FullIdContext.class,i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public List VAR_ASSIGN() { return getTokens(MySqlParser.VAR_ASSIGN); } + public TerminalNode VAR_ASSIGN(int i) { + return getToken(MySqlParser.VAR_ASSIGN, i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public SetNewValueInsideTriggerContext(SetStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSetNewValueInsideTrigger(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSetNewValueInsideTrigger(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSetNewValueInsideTrigger(this); + else return visitor.visitChildren(this); + } + } + public static class SetVariableContext extends SetStatementContext { + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public List variableClause() { + return getRuleContexts(VariableClauseContext.class); + } + public VariableClauseContext variableClause(int i) { + return getRuleContext(VariableClauseContext.class,i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public List VAR_ASSIGN() { return getTokens(MySqlParser.VAR_ASSIGN); } + public TerminalNode VAR_ASSIGN(int i) { + return getToken(MySqlParser.VAR_ASSIGN, i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public SetVariableContext(SetStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSetVariable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSetVariable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSetVariable(this); + else return visitor.visitChildren(this); + } + } + + public final SetStatementContext setStatement() throws RecognitionException { + SetStatementContext _localctx = new SetStatementContext(_ctx, getState()); + enterRule(_localctx, 438, RULE_setStatement); + int _la; + try { + setState(4880); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,702,_ctx) ) { + case 1: + _localctx = new SetVariableContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(4829); + match(SET); + setState(4830); + variableClause(); + setState(4831); + _la = _input.LA(1); + if ( !(_la==VAR_ASSIGN || _la==EQUAL_SYMBOL) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4832); + expression(0); + setState(4840); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4833); + match(COMMA); + setState(4834); + variableClause(); + setState(4835); + _la = _input.LA(1); + if ( !(_la==VAR_ASSIGN || _la==EQUAL_SYMBOL) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4836); + expression(0); + } + } + setState(4842); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 2: + _localctx = new SetCharsetContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(4843); + match(SET); + setState(4847); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CHARACTER: + { + setState(4844); + match(CHARACTER); + setState(4845); + match(SET); + } + break; + case CHARSET: + { + setState(4846); + match(CHARSET); + } + break; + default: + throw new NoViableAltException(this); + } + setState(4851); + _errHandler.sync(this); + switch (_input.LA(1)) { + case BINARY: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + { + setState(4849); + charsetName(); + } + break; + case DEFAULT: + { + setState(4850); + match(DEFAULT); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 3: + _localctx = new SetNamesContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(4853); + match(SET); + setState(4854); + match(NAMES); + setState(4861); + _errHandler.sync(this); + switch (_input.LA(1)) { + case BINARY: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + { + setState(4855); + charsetName(); + setState(4858); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLLATE) { + { + setState(4856); + match(COLLATE); + setState(4857); + collationName(); + } + } + + } + break; + case DEFAULT: + { + setState(4860); + match(DEFAULT); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 4: + _localctx = new SetPasswordContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(4863); + setPasswordStatement(); + } + break; + case 5: + _localctx = new SetTransactionContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(4864); + setTransactionStatement(); + } + break; + case 6: + _localctx = new SetAutocommitContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(4865); + setAutocommitStatement(); + } + break; + case 7: + _localctx = new SetNewValueInsideTriggerContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(4866); + match(SET); + setState(4867); + fullId(); + setState(4868); + _la = _input.LA(1); + if ( !(_la==VAR_ASSIGN || _la==EQUAL_SYMBOL) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4869); + expression(0); + setState(4877); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(4870); + match(COMMA); + setState(4871); + fullId(); + setState(4872); + _la = _input.LA(1); + if ( !(_la==VAR_ASSIGN || _la==EQUAL_SYMBOL) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4873); + expression(0); + } + } + setState(4879); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ShowStatementContext extends ParserRuleContext { + public ShowStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_showStatement; } + + public ShowStatementContext() { } + public void copyFrom(ShowStatementContext ctx) { + super.copyFrom(ctx); + } + } + public static class ShowOpenTablesContext extends ShowStatementContext { + public Token schemaFormat; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode OPEN() { return getToken(MySqlParser.OPEN, 0); } + public TerminalNode TABLES() { return getToken(MySqlParser.TABLES, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public ShowFilterContext showFilter() { + return getRuleContext(ShowFilterContext.class,0); + } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public TerminalNode IN() { return getToken(MySqlParser.IN, 0); } + public ShowOpenTablesContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowOpenTables(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowOpenTables(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowOpenTables(this); + else return visitor.visitChildren(this); + } + } + public static class ShowGlobalInfoContext extends ShowStatementContext { + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public ShowGlobalInfoClauseContext showGlobalInfoClause() { + return getRuleContext(ShowGlobalInfoClauseContext.class,0); + } + public ShowGlobalInfoContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowGlobalInfo(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowGlobalInfo(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowGlobalInfo(this); + else return visitor.visitChildren(this); + } + } + public static class ShowCreateFullIdObjectContext extends ShowStatementContext { + public Token namedEntity; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public TerminalNode EVENT() { return getToken(MySqlParser.EVENT, 0); } + public TerminalNode FUNCTION() { return getToken(MySqlParser.FUNCTION, 0); } + public TerminalNode PROCEDURE() { return getToken(MySqlParser.PROCEDURE, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TerminalNode TRIGGER() { return getToken(MySqlParser.TRIGGER, 0); } + public TerminalNode VIEW() { return getToken(MySqlParser.VIEW, 0); } + public ShowCreateFullIdObjectContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowCreateFullIdObject(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowCreateFullIdObject(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowCreateFullIdObject(this); + else return visitor.visitChildren(this); + } + } + public static class ShowCreateUserContext extends ShowStatementContext { + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public TerminalNode USER() { return getToken(MySqlParser.USER, 0); } + public UserNameContext userName() { + return getRuleContext(UserNameContext.class,0); + } + public ShowCreateUserContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowCreateUser(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowCreateUser(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowCreateUser(this); + else return visitor.visitChildren(this); + } + } + public static class ShowErrorsContext extends ShowStatementContext { + public Token errorFormat; + public DecimalLiteralContext offset; + public DecimalLiteralContext rowCount; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode ERRORS() { return getToken(MySqlParser.ERRORS, 0); } + public TerminalNode WARNINGS() { return getToken(MySqlParser.WARNINGS, 0); } + public TerminalNode LIMIT() { return getToken(MySqlParser.LIMIT, 0); } + public List decimalLiteral() { + return getRuleContexts(DecimalLiteralContext.class); + } + public DecimalLiteralContext decimalLiteral(int i) { + return getRuleContext(DecimalLiteralContext.class,i); + } + public TerminalNode COMMA() { return getToken(MySqlParser.COMMA, 0); } + public ShowErrorsContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowErrors(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowErrors(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowErrors(this); + else return visitor.visitChildren(this); + } + } + public static class ShowCountErrorsContext extends ShowStatementContext { + public Token errorFormat; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode COUNT() { return getToken(MySqlParser.COUNT, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode STAR() { return getToken(MySqlParser.STAR, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode ERRORS() { return getToken(MySqlParser.ERRORS, 0); } + public TerminalNode WARNINGS() { return getToken(MySqlParser.WARNINGS, 0); } + public ShowCountErrorsContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowCountErrors(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowCountErrors(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowCountErrors(this); + else return visitor.visitChildren(this); + } + } + public static class ShowObjectFilterContext extends ShowStatementContext { + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public ShowCommonEntityContext showCommonEntity() { + return getRuleContext(ShowCommonEntityContext.class,0); + } + public ShowFilterContext showFilter() { + return getRuleContext(ShowFilterContext.class,0); + } + public ShowObjectFilterContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowObjectFilter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowObjectFilter(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowObjectFilter(this); + else return visitor.visitChildren(this); + } + } + public static class ShowCreateDbContext extends ShowStatementContext { + public Token schemaFormat; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode CREATE() { return getToken(MySqlParser.CREATE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode DATABASE() { return getToken(MySqlParser.DATABASE, 0); } + public TerminalNode SCHEMA() { return getToken(MySqlParser.SCHEMA, 0); } + public IfNotExistsContext ifNotExists() { + return getRuleContext(IfNotExistsContext.class,0); + } + public ShowCreateDbContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowCreateDb(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowCreateDb(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowCreateDb(this); + else return visitor.visitChildren(this); + } + } + public static class ShowEngineContext extends ShowStatementContext { + public Token engineOption; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode ENGINE() { return getToken(MySqlParser.ENGINE, 0); } + public EngineNameContext engineName() { + return getRuleContext(EngineNameContext.class,0); + } + public TerminalNode STATUS() { return getToken(MySqlParser.STATUS, 0); } + public TerminalNode MUTEX() { return getToken(MySqlParser.MUTEX, 0); } + public ShowEngineContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowEngine(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowEngine(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowEngine(this); + else return visitor.visitChildren(this); + } + } + public static class ShowSchemaFilterContext extends ShowStatementContext { + public Token schemaFormat; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public ShowSchemaEntityContext showSchemaEntity() { + return getRuleContext(ShowSchemaEntityContext.class,0); + } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public ShowFilterContext showFilter() { + return getRuleContext(ShowFilterContext.class,0); + } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public TerminalNode IN() { return getToken(MySqlParser.IN, 0); } + public ShowSchemaFilterContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowSchemaFilter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowSchemaFilter(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowSchemaFilter(this); + else return visitor.visitChildren(this); + } + } + public static class ShowIndexesContext extends ShowStatementContext { + public Token indexFormat; + public Token tableFormat; + public Token schemaFormat; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode INDEXES() { return getToken(MySqlParser.INDEXES, 0); } + public TerminalNode KEYS() { return getToken(MySqlParser.KEYS, 0); } + public List FROM() { return getTokens(MySqlParser.FROM); } + public TerminalNode FROM(int i) { + return getToken(MySqlParser.FROM, i); + } + public List IN() { return getTokens(MySqlParser.IN); } + public TerminalNode IN(int i) { + return getToken(MySqlParser.IN, i); + } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode WHERE() { return getToken(MySqlParser.WHERE, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ShowIndexesContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowIndexes(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowIndexes(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowIndexes(this); + else return visitor.visitChildren(this); + } + } + public static class ShowLogEventsContext extends ShowStatementContext { + public Token logFormat; + public Token filename; + public DecimalLiteralContext fromPosition; + public DecimalLiteralContext offset; + public DecimalLiteralContext rowCount; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode EVENTS() { return getToken(MySqlParser.EVENTS, 0); } + public TerminalNode BINLOG() { return getToken(MySqlParser.BINLOG, 0); } + public TerminalNode RELAYLOG() { return getToken(MySqlParser.RELAYLOG, 0); } + public TerminalNode IN() { return getToken(MySqlParser.IN, 0); } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public TerminalNode LIMIT() { return getToken(MySqlParser.LIMIT, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public List decimalLiteral() { + return getRuleContexts(DecimalLiteralContext.class); + } + public DecimalLiteralContext decimalLiteral(int i) { + return getRuleContext(DecimalLiteralContext.class,i); + } + public TerminalNode COMMA() { return getToken(MySqlParser.COMMA, 0); } + public ShowLogEventsContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowLogEvents(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowLogEvents(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowLogEvents(this); + else return visitor.visitChildren(this); + } + } + public static class ShowMasterLogsContext extends ShowStatementContext { + public Token logFormat; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode LOGS() { return getToken(MySqlParser.LOGS, 0); } + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public TerminalNode MASTER() { return getToken(MySqlParser.MASTER, 0); } + public ShowMasterLogsContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowMasterLogs(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowMasterLogs(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowMasterLogs(this); + else return visitor.visitChildren(this); + } + } + public static class ShowGrantsContext extends ShowStatementContext { + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode GRANTS() { return getToken(MySqlParser.GRANTS, 0); } + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public UserNameContext userName() { + return getRuleContext(UserNameContext.class,0); + } + public ShowGrantsContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowGrants(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowGrants(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowGrants(this); + else return visitor.visitChildren(this); + } + } + public static class ShowSlaveStatusContext extends ShowStatementContext { + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode SLAVE() { return getToken(MySqlParser.SLAVE, 0); } + public TerminalNode STATUS() { return getToken(MySqlParser.STATUS, 0); } + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public TerminalNode CHANNEL() { return getToken(MySqlParser.CHANNEL, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public ShowSlaveStatusContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowSlaveStatus(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowSlaveStatus(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowSlaveStatus(this); + else return visitor.visitChildren(this); + } + } + public static class ShowRoutineContext extends ShowStatementContext { + public Token routine; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode CODE() { return getToken(MySqlParser.CODE, 0); } + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public TerminalNode FUNCTION() { return getToken(MySqlParser.FUNCTION, 0); } + public TerminalNode PROCEDURE() { return getToken(MySqlParser.PROCEDURE, 0); } + public ShowRoutineContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowRoutine(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowRoutine(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowRoutine(this); + else return visitor.visitChildren(this); + } + } + public static class ShowProfileContext extends ShowStatementContext { + public DecimalLiteralContext queryCount; + public DecimalLiteralContext offset; + public DecimalLiteralContext rowCount; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TerminalNode PROFILE() { return getToken(MySqlParser.PROFILE, 0); } + public List showProfileType() { + return getRuleContexts(ShowProfileTypeContext.class); + } + public ShowProfileTypeContext showProfileType(int i) { + return getRuleContext(ShowProfileTypeContext.class,i); + } + public TerminalNode LIMIT() { return getToken(MySqlParser.LIMIT, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public TerminalNode QUERY() { return getToken(MySqlParser.QUERY, 0); } + public List decimalLiteral() { + return getRuleContexts(DecimalLiteralContext.class); + } + public DecimalLiteralContext decimalLiteral(int i) { + return getRuleContext(DecimalLiteralContext.class,i); + } + public ShowProfileContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowProfile(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowProfile(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowProfile(this); + else return visitor.visitChildren(this); + } + } + public static class ShowColumnsContext extends ShowStatementContext { + public Token columnsFormat; + public Token tableFormat; + public Token schemaFormat; + public TerminalNode SHOW() { return getToken(MySqlParser.SHOW, 0); } + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode COLUMNS() { return getToken(MySqlParser.COLUMNS, 0); } + public TerminalNode FIELDS() { return getToken(MySqlParser.FIELDS, 0); } + public List FROM() { return getTokens(MySqlParser.FROM); } + public TerminalNode FROM(int i) { + return getToken(MySqlParser.FROM, i); + } + public List IN() { return getTokens(MySqlParser.IN); } + public TerminalNode IN(int i) { + return getToken(MySqlParser.IN, i); + } + public TerminalNode FULL() { return getToken(MySqlParser.FULL, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public ShowFilterContext showFilter() { + return getRuleContext(ShowFilterContext.class,0); + } + public ShowColumnsContext(ShowStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowColumns(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowColumns(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowColumns(this); + else return visitor.visitChildren(this); + } + } + + public final ShowStatementContext showStatement() throws RecognitionException { + ShowStatementContext _localctx = new ShowStatementContext(_ctx, getState()); + enterRule(_localctx, 440, RULE_showStatement); + int _la; + try { + setState(5033); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,724,_ctx) ) { + case 1: + _localctx = new ShowMasterLogsContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(4882); + match(SHOW); + setState(4883); + ((ShowMasterLogsContext)_localctx).logFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==BINARY || _la==MASTER) ) { + ((ShowMasterLogsContext)_localctx).logFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4884); + match(LOGS); + } + break; + case 2: + _localctx = new ShowLogEventsContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(4885); + match(SHOW); + setState(4886); + ((ShowLogEventsContext)_localctx).logFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==BINLOG || _la==RELAYLOG) ) { + ((ShowLogEventsContext)_localctx).logFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4887); + match(EVENTS); + setState(4890); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IN) { + { + setState(4888); + match(IN); + setState(4889); + ((ShowLogEventsContext)_localctx).filename = match(STRING_LITERAL); + } + } + + setState(4894); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FROM) { + { + setState(4892); + match(FROM); + setState(4893); + ((ShowLogEventsContext)_localctx).fromPosition = decimalLiteral(); + } + } + + setState(4903); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LIMIT) { + { + setState(4896); + match(LIMIT); + setState(4900); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,705,_ctx) ) { + case 1: + { + setState(4897); + ((ShowLogEventsContext)_localctx).offset = decimalLiteral(); + setState(4898); + match(COMMA); + } + break; + } + setState(4902); + ((ShowLogEventsContext)_localctx).rowCount = decimalLiteral(); + } + } + + } + break; + case 3: + _localctx = new ShowObjectFilterContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(4905); + match(SHOW); + setState(4906); + showCommonEntity(); + setState(4908); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LIKE || _la==WHERE) { + { + setState(4907); + showFilter(); + } + } + + } + break; + case 4: + _localctx = new ShowColumnsContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(4910); + match(SHOW); + setState(4912); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FULL) { + { + setState(4911); + match(FULL); + } + } + + setState(4914); + ((ShowColumnsContext)_localctx).columnsFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==COLUMNS || _la==FIELDS) ) { + ((ShowColumnsContext)_localctx).columnsFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4915); + ((ShowColumnsContext)_localctx).tableFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FROM || _la==IN) ) { + ((ShowColumnsContext)_localctx).tableFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4916); + tableName(); + setState(4919); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FROM || _la==IN) { + { + setState(4917); + ((ShowColumnsContext)_localctx).schemaFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FROM || _la==IN) ) { + ((ShowColumnsContext)_localctx).schemaFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4918); + uid(); + } + } + + setState(4922); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LIKE || _la==WHERE) { + { + setState(4921); + showFilter(); + } + } + + } + break; + case 5: + _localctx = new ShowCreateDbContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(4924); + match(SHOW); + setState(4925); + match(CREATE); + setState(4926); + ((ShowCreateDbContext)_localctx).schemaFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==DATABASE || _la==SCHEMA) ) { + ((ShowCreateDbContext)_localctx).schemaFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4928); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(4927); + ifNotExists(); + } + } + + setState(4930); + uid(); + } + break; + case 6: + _localctx = new ShowCreateFullIdObjectContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(4931); + match(SHOW); + setState(4932); + match(CREATE); + setState(4933); + ((ShowCreateFullIdObjectContext)_localctx).namedEntity = _input.LT(1); + _la = _input.LA(1); + if ( !(((((_la - 117)) & ~0x3f) == 0 && ((1L << (_la - 117)) & ((1L << (PROCEDURE - 117)) | (1L << (TABLE - 117)) | (1L << (TRIGGER - 117)))) != 0) || _la==EVENT || _la==FUNCTION || _la==VIEW) ) { + ((ShowCreateFullIdObjectContext)_localctx).namedEntity = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4934); + fullId(); + } + break; + case 7: + _localctx = new ShowCreateUserContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(4935); + match(SHOW); + setState(4936); + match(CREATE); + setState(4937); + match(USER); + setState(4938); + userName(); + } + break; + case 8: + _localctx = new ShowEngineContext(_localctx); + enterOuterAlt(_localctx, 8); + { + setState(4939); + match(SHOW); + setState(4940); + match(ENGINE); + setState(4941); + engineName(); + setState(4942); + ((ShowEngineContext)_localctx).engineOption = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==MUTEX || _la==STATUS) ) { + ((ShowEngineContext)_localctx).engineOption = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 9: + _localctx = new ShowGlobalInfoContext(_localctx); + enterOuterAlt(_localctx, 9); + { + setState(4944); + match(SHOW); + setState(4945); + showGlobalInfoClause(); + } + break; + case 10: + _localctx = new ShowErrorsContext(_localctx); + enterOuterAlt(_localctx, 10); + { + setState(4946); + match(SHOW); + setState(4947); + ((ShowErrorsContext)_localctx).errorFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ERRORS || _la==WARNINGS) ) { + ((ShowErrorsContext)_localctx).errorFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + { + setState(4948); + match(LIMIT); + setState(4952); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,712,_ctx) ) { + case 1: + { + setState(4949); + ((ShowErrorsContext)_localctx).offset = decimalLiteral(); + setState(4950); + match(COMMA); + } + break; + } + setState(4954); + ((ShowErrorsContext)_localctx).rowCount = decimalLiteral(); + } + } + break; + case 11: + _localctx = new ShowCountErrorsContext(_localctx); + enterOuterAlt(_localctx, 11); + { + setState(4955); + match(SHOW); + setState(4956); + match(COUNT); + setState(4957); + match(LR_BRACKET); + setState(4958); + match(STAR); + setState(4959); + match(RR_BRACKET); + setState(4960); + ((ShowCountErrorsContext)_localctx).errorFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ERRORS || _la==WARNINGS) ) { + ((ShowCountErrorsContext)_localctx).errorFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 12: + _localctx = new ShowSchemaFilterContext(_localctx); + enterOuterAlt(_localctx, 12); + { + setState(4961); + match(SHOW); + setState(4962); + showSchemaEntity(); + setState(4965); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FROM || _la==IN) { + { + setState(4963); + ((ShowSchemaFilterContext)_localctx).schemaFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FROM || _la==IN) ) { + ((ShowSchemaFilterContext)_localctx).schemaFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4964); + uid(); + } + } + + setState(4968); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LIKE || _la==WHERE) { + { + setState(4967); + showFilter(); + } + } + + } + break; + case 13: + _localctx = new ShowRoutineContext(_localctx); + enterOuterAlt(_localctx, 13); + { + setState(4970); + match(SHOW); + setState(4971); + ((ShowRoutineContext)_localctx).routine = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==PROCEDURE || _la==FUNCTION) ) { + ((ShowRoutineContext)_localctx).routine = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4972); + match(CODE); + setState(4973); + fullId(); + } + break; + case 14: + _localctx = new ShowGrantsContext(_localctx); + enterOuterAlt(_localctx, 14); + { + setState(4974); + match(SHOW); + setState(4975); + match(GRANTS); + setState(4978); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FOR) { + { + setState(4976); + match(FOR); + setState(4977); + userName(); + } + } + + } + break; + case 15: + _localctx = new ShowIndexesContext(_localctx); + enterOuterAlt(_localctx, 15); + { + setState(4980); + match(SHOW); + setState(4981); + ((ShowIndexesContext)_localctx).indexFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==INDEX || _la==KEYS || _la==INDEXES) ) { + ((ShowIndexesContext)_localctx).indexFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4982); + ((ShowIndexesContext)_localctx).tableFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FROM || _la==IN) ) { + ((ShowIndexesContext)_localctx).tableFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4983); + tableName(); + setState(4986); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FROM || _la==IN) { + { + setState(4984); + ((ShowIndexesContext)_localctx).schemaFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FROM || _la==IN) ) { + ((ShowIndexesContext)_localctx).schemaFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4985); + uid(); + } + } + + setState(4990); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(4988); + match(WHERE); + setState(4989); + expression(0); + } + } + + } + break; + case 16: + _localctx = new ShowOpenTablesContext(_localctx); + enterOuterAlt(_localctx, 16); + { + setState(4992); + match(SHOW); + setState(4993); + match(OPEN); + setState(4994); + match(TABLES); + setState(4997); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FROM || _la==IN) { + { + setState(4995); + ((ShowOpenTablesContext)_localctx).schemaFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FROM || _la==IN) ) { + ((ShowOpenTablesContext)_localctx).schemaFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(4996); + uid(); + } + } + + setState(5000); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LIKE || _la==WHERE) { + { + setState(4999); + showFilter(); + } + } + + } + break; + case 17: + _localctx = new ShowProfileContext(_localctx); + enterOuterAlt(_localctx, 17); + { + setState(5002); + match(SHOW); + setState(5003); + match(PROFILE); + setState(5004); + showProfileType(); + setState(5009); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5005); + match(COMMA); + setState(5006); + showProfileType(); + } + } + setState(5011); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(5015); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FOR) { + { + setState(5012); + match(FOR); + setState(5013); + match(QUERY); + setState(5014); + ((ShowProfileContext)_localctx).queryCount = decimalLiteral(); + } + } + + { + setState(5017); + match(LIMIT); + setState(5021); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,722,_ctx) ) { + case 1: + { + setState(5018); + ((ShowProfileContext)_localctx).offset = decimalLiteral(); + setState(5019); + match(COMMA); + } + break; + } + setState(5023); + ((ShowProfileContext)_localctx).rowCount = decimalLiteral(); + } + } + break; + case 18: + _localctx = new ShowSlaveStatusContext(_localctx); + enterOuterAlt(_localctx, 18); + { + setState(5025); + match(SHOW); + setState(5026); + match(SLAVE); + setState(5027); + match(STATUS); + setState(5031); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FOR) { + { + setState(5028); + match(FOR); + setState(5029); + match(CHANNEL); + setState(5030); + match(STRING_LITERAL); + } + } + + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class VariableClauseContext extends ParserRuleContext { + public TerminalNode LOCAL_ID() { return getToken(MySqlParser.LOCAL_ID, 0); } + public TerminalNode GLOBAL_ID() { return getToken(MySqlParser.GLOBAL_ID, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode GLOBAL() { return getToken(MySqlParser.GLOBAL, 0); } + public TerminalNode SESSION() { return getToken(MySqlParser.SESSION, 0); } + public TerminalNode LOCAL() { return getToken(MySqlParser.LOCAL, 0); } + public List AT_SIGN() { return getTokens(MySqlParser.AT_SIGN); } + public TerminalNode AT_SIGN(int i) { + return getToken(MySqlParser.AT_SIGN, i); + } + public VariableClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_variableClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterVariableClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitVariableClause(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitVariableClause(this); + else return visitor.visitChildren(this); + } + } + + public final VariableClauseContext variableClause() throws RecognitionException { + VariableClauseContext _localctx = new VariableClauseContext(_ctx, getState()); + enterRule(_localctx, 442, RULE_variableClause); + int _la; + try { + setState(5045); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LOCAL_ID: + enterOuterAlt(_localctx, 1); + { + setState(5035); + match(LOCAL_ID); + } + break; + case GLOBAL_ID: + enterOuterAlt(_localctx, 2); + { + setState(5036); + match(GLOBAL_ID); + } + break; + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case AT_SIGN: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + enterOuterAlt(_localctx, 3); + { + setState(5042); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,726,_ctx) ) { + case 1: + { + setState(5039); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT_SIGN) { + { + setState(5037); + match(AT_SIGN); + setState(5038); + match(AT_SIGN); + } + } + + setState(5041); + _la = _input.LA(1); + if ( !(_la==GLOBAL || _la==LOCAL || _la==SESSION) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + setState(5044); + uid(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ShowCommonEntityContext extends ParserRuleContext { + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode COLLATION() { return getToken(MySqlParser.COLLATION, 0); } + public TerminalNode DATABASES() { return getToken(MySqlParser.DATABASES, 0); } + public TerminalNode SCHEMAS() { return getToken(MySqlParser.SCHEMAS, 0); } + public TerminalNode FUNCTION() { return getToken(MySqlParser.FUNCTION, 0); } + public TerminalNode STATUS() { return getToken(MySqlParser.STATUS, 0); } + public TerminalNode PROCEDURE() { return getToken(MySqlParser.PROCEDURE, 0); } + public TerminalNode VARIABLES() { return getToken(MySqlParser.VARIABLES, 0); } + public TerminalNode GLOBAL() { return getToken(MySqlParser.GLOBAL, 0); } + public TerminalNode SESSION() { return getToken(MySqlParser.SESSION, 0); } + public ShowCommonEntityContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_showCommonEntity; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowCommonEntity(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowCommonEntity(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowCommonEntity(this); + else return visitor.visitChildren(this); + } + } + + public final ShowCommonEntityContext showCommonEntity() throws RecognitionException { + ShowCommonEntityContext _localctx = new ShowCommonEntityContext(_ctx, getState()); + enterRule(_localctx, 444, RULE_showCommonEntity); + int _la; + try { + setState(5060); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CHARACTER: + enterOuterAlt(_localctx, 1); + { + setState(5047); + match(CHARACTER); + setState(5048); + match(SET); + } + break; + case COLLATION: + enterOuterAlt(_localctx, 2); + { + setState(5049); + match(COLLATION); + } + break; + case DATABASES: + enterOuterAlt(_localctx, 3); + { + setState(5050); + match(DATABASES); + } + break; + case SCHEMAS: + enterOuterAlt(_localctx, 4); + { + setState(5051); + match(SCHEMAS); + } + break; + case FUNCTION: + enterOuterAlt(_localctx, 5); + { + setState(5052); + match(FUNCTION); + setState(5053); + match(STATUS); + } + break; + case PROCEDURE: + enterOuterAlt(_localctx, 6); + { + setState(5054); + match(PROCEDURE); + setState(5055); + match(STATUS); + } + break; + case GLOBAL: + case SESSION: + case STATUS: + case VARIABLES: + enterOuterAlt(_localctx, 7); + { + setState(5057); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==GLOBAL || _la==SESSION) { + { + setState(5056); + _la = _input.LA(1); + if ( !(_la==GLOBAL || _la==SESSION) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(5059); + _la = _input.LA(1); + if ( !(_la==STATUS || _la==VARIABLES) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ShowFilterContext extends ParserRuleContext { + public TerminalNode LIKE() { return getToken(MySqlParser.LIKE, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode WHERE() { return getToken(MySqlParser.WHERE, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ShowFilterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_showFilter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowFilter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowFilter(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowFilter(this); + else return visitor.visitChildren(this); + } + } + + public final ShowFilterContext showFilter() throws RecognitionException { + ShowFilterContext _localctx = new ShowFilterContext(_ctx, getState()); + enterRule(_localctx, 446, RULE_showFilter); + try { + setState(5066); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LIKE: + enterOuterAlt(_localctx, 1); + { + setState(5062); + match(LIKE); + setState(5063); + match(STRING_LITERAL); + } + break; + case WHERE: + enterOuterAlt(_localctx, 2); + { + setState(5064); + match(WHERE); + setState(5065); + expression(0); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ShowGlobalInfoClauseContext extends ParserRuleContext { + public TerminalNode ENGINES() { return getToken(MySqlParser.ENGINES, 0); } + public TerminalNode STORAGE() { return getToken(MySqlParser.STORAGE, 0); } + public TerminalNode MASTER() { return getToken(MySqlParser.MASTER, 0); } + public TerminalNode STATUS() { return getToken(MySqlParser.STATUS, 0); } + public TerminalNode PLUGINS() { return getToken(MySqlParser.PLUGINS, 0); } + public TerminalNode PRIVILEGES() { return getToken(MySqlParser.PRIVILEGES, 0); } + public TerminalNode PROCESSLIST() { return getToken(MySqlParser.PROCESSLIST, 0); } + public TerminalNode FULL() { return getToken(MySqlParser.FULL, 0); } + public TerminalNode PROFILES() { return getToken(MySqlParser.PROFILES, 0); } + public TerminalNode SLAVE() { return getToken(MySqlParser.SLAVE, 0); } + public TerminalNode HOSTS() { return getToken(MySqlParser.HOSTS, 0); } + public TerminalNode AUTHORS() { return getToken(MySqlParser.AUTHORS, 0); } + public TerminalNode CONTRIBUTORS() { return getToken(MySqlParser.CONTRIBUTORS, 0); } + public ShowGlobalInfoClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_showGlobalInfoClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowGlobalInfoClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowGlobalInfoClause(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowGlobalInfoClause(this); + else return visitor.visitChildren(this); + } + } + + public final ShowGlobalInfoClauseContext showGlobalInfoClause() throws RecognitionException { + ShowGlobalInfoClauseContext _localctx = new ShowGlobalInfoClauseContext(_ctx, getState()); + enterRule(_localctx, 448, RULE_showGlobalInfoClause); + int _la; + try { + setState(5085); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ENGINES: + case STORAGE: + enterOuterAlt(_localctx, 1); + { + setState(5069); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==STORAGE) { + { + setState(5068); + match(STORAGE); + } + } + + setState(5071); + match(ENGINES); + } + break; + case MASTER: + enterOuterAlt(_localctx, 2); + { + setState(5072); + match(MASTER); + setState(5073); + match(STATUS); + } + break; + case PLUGINS: + enterOuterAlt(_localctx, 3); + { + setState(5074); + match(PLUGINS); + } + break; + case PRIVILEGES: + enterOuterAlt(_localctx, 4); + { + setState(5075); + match(PRIVILEGES); + } + break; + case FULL: + case PROCESSLIST: + enterOuterAlt(_localctx, 5); + { + setState(5077); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FULL) { + { + setState(5076); + match(FULL); + } + } + + setState(5079); + match(PROCESSLIST); + } + break; + case PROFILES: + enterOuterAlt(_localctx, 6); + { + setState(5080); + match(PROFILES); + } + break; + case SLAVE: + enterOuterAlt(_localctx, 7); + { + setState(5081); + match(SLAVE); + setState(5082); + match(HOSTS); + } + break; + case AUTHORS: + enterOuterAlt(_localctx, 8); + { + setState(5083); + match(AUTHORS); + } + break; + case CONTRIBUTORS: + enterOuterAlt(_localctx, 9); + { + setState(5084); + match(CONTRIBUTORS); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ShowSchemaEntityContext extends ParserRuleContext { + public TerminalNode EVENTS() { return getToken(MySqlParser.EVENTS, 0); } + public TerminalNode TABLE() { return getToken(MySqlParser.TABLE, 0); } + public TerminalNode STATUS() { return getToken(MySqlParser.STATUS, 0); } + public TerminalNode TABLES() { return getToken(MySqlParser.TABLES, 0); } + public TerminalNode FULL() { return getToken(MySqlParser.FULL, 0); } + public TerminalNode TRIGGERS() { return getToken(MySqlParser.TRIGGERS, 0); } + public ShowSchemaEntityContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_showSchemaEntity; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowSchemaEntity(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowSchemaEntity(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowSchemaEntity(this); + else return visitor.visitChildren(this); + } + } + + public final ShowSchemaEntityContext showSchemaEntity() throws RecognitionException { + ShowSchemaEntityContext _localctx = new ShowSchemaEntityContext(_ctx, getState()); + enterRule(_localctx, 450, RULE_showSchemaEntity); + int _la; + try { + setState(5095); + _errHandler.sync(this); + switch (_input.LA(1)) { + case EVENTS: + enterOuterAlt(_localctx, 1); + { + setState(5087); + match(EVENTS); + } + break; + case TABLE: + enterOuterAlt(_localctx, 2); + { + setState(5088); + match(TABLE); + setState(5089); + match(STATUS); + } + break; + case FULL: + case TABLES: + enterOuterAlt(_localctx, 3); + { + setState(5091); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FULL) { + { + setState(5090); + match(FULL); + } + } + + setState(5093); + match(TABLES); + } + break; + case TRIGGERS: + enterOuterAlt(_localctx, 4); + { + setState(5094); + match(TRIGGERS); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ShowProfileTypeContext extends ParserRuleContext { + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public TerminalNode BLOCK() { return getToken(MySqlParser.BLOCK, 0); } + public TerminalNode IO() { return getToken(MySqlParser.IO, 0); } + public TerminalNode CONTEXT() { return getToken(MySqlParser.CONTEXT, 0); } + public TerminalNode SWITCHES() { return getToken(MySqlParser.SWITCHES, 0); } + public TerminalNode CPU() { return getToken(MySqlParser.CPU, 0); } + public TerminalNode IPC() { return getToken(MySqlParser.IPC, 0); } + public TerminalNode MEMORY() { return getToken(MySqlParser.MEMORY, 0); } + public TerminalNode PAGE() { return getToken(MySqlParser.PAGE, 0); } + public TerminalNode FAULTS() { return getToken(MySqlParser.FAULTS, 0); } + public TerminalNode SOURCE() { return getToken(MySqlParser.SOURCE, 0); } + public TerminalNode SWAPS() { return getToken(MySqlParser.SWAPS, 0); } + public ShowProfileTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_showProfileType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShowProfileType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShowProfileType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShowProfileType(this); + else return visitor.visitChildren(this); + } + } + + public final ShowProfileTypeContext showProfileType() throws RecognitionException { + ShowProfileTypeContext _localctx = new ShowProfileTypeContext(_ctx, getState()); + enterRule(_localctx, 452, RULE_showProfileType); + try { + setState(5109); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ALL: + enterOuterAlt(_localctx, 1); + { + setState(5097); + match(ALL); + } + break; + case BLOCK: + enterOuterAlt(_localctx, 2); + { + setState(5098); + match(BLOCK); + setState(5099); + match(IO); + } + break; + case CONTEXT: + enterOuterAlt(_localctx, 3); + { + setState(5100); + match(CONTEXT); + setState(5101); + match(SWITCHES); + } + break; + case CPU: + enterOuterAlt(_localctx, 4); + { + setState(5102); + match(CPU); + } + break; + case IPC: + enterOuterAlt(_localctx, 5); + { + setState(5103); + match(IPC); + } + break; + case MEMORY: + enterOuterAlt(_localctx, 6); + { + setState(5104); + match(MEMORY); + } + break; + case PAGE: + enterOuterAlt(_localctx, 7); + { + setState(5105); + match(PAGE); + setState(5106); + match(FAULTS); + } + break; + case SOURCE: + enterOuterAlt(_localctx, 8); + { + setState(5107); + match(SOURCE); + } + break; + case SWAPS: + enterOuterAlt(_localctx, 9); + { + setState(5108); + match(SWAPS); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BinlogStatementContext extends ParserRuleContext { + public TerminalNode BINLOG() { return getToken(MySqlParser.BINLOG, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public BinlogStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_binlogStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBinlogStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBinlogStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBinlogStatement(this); + else return visitor.visitChildren(this); + } + } + + public final BinlogStatementContext binlogStatement() throws RecognitionException { + BinlogStatementContext _localctx = new BinlogStatementContext(_ctx, getState()); + enterRule(_localctx, 454, RULE_binlogStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(5111); + match(BINLOG); + setState(5112); + match(STRING_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CacheIndexStatementContext extends ParserRuleContext { + public UidContext schema; + public TerminalNode CACHE() { return getToken(MySqlParser.CACHE, 0); } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public List tableIndexes() { + return getRuleContexts(TableIndexesContext.class); + } + public TableIndexesContext tableIndexes(int i) { + return getRuleContext(TableIndexesContext.class,i); + } + public TerminalNode IN() { return getToken(MySqlParser.IN, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public CacheIndexStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_cacheIndexStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCacheIndexStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCacheIndexStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCacheIndexStatement(this); + else return visitor.visitChildren(this); + } + } + + public final CacheIndexStatementContext cacheIndexStatement() throws RecognitionException { + CacheIndexStatementContext _localctx = new CacheIndexStatementContext(_ctx, getState()); + enterRule(_localctx, 456, RULE_cacheIndexStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5114); + match(CACHE); + setState(5115); + match(INDEX); + setState(5116); + tableIndexes(); + setState(5121); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5117); + match(COMMA); + setState(5118); + tableIndexes(); + } + } + setState(5123); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(5131); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PARTITION) { + { + setState(5124); + match(PARTITION); + setState(5125); + match(LR_BRACKET); + setState(5128); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + { + setState(5126); + uidList(); + } + break; + case ALL: + { + setState(5127); + match(ALL); + } + break; + default: + throw new NoViableAltException(this); + } + setState(5130); + match(RR_BRACKET); + } + } + + setState(5133); + match(IN); + setState(5134); + ((CacheIndexStatementContext)_localctx).schema = uid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FlushStatementContext extends ParserRuleContext { + public Token flushFormat; + public TerminalNode FLUSH() { return getToken(MySqlParser.FLUSH, 0); } + public List flushOption() { + return getRuleContexts(FlushOptionContext.class); + } + public FlushOptionContext flushOption(int i) { + return getRuleContext(FlushOptionContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode NO_WRITE_TO_BINLOG() { return getToken(MySqlParser.NO_WRITE_TO_BINLOG, 0); } + public TerminalNode LOCAL() { return getToken(MySqlParser.LOCAL, 0); } + public FlushStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_flushStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFlushStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFlushStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFlushStatement(this); + else return visitor.visitChildren(this); + } + } + + public final FlushStatementContext flushStatement() throws RecognitionException { + FlushStatementContext _localctx = new FlushStatementContext(_ctx, getState()); + enterRule(_localctx, 458, RULE_flushStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5136); + match(FLUSH); + setState(5138); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NO_WRITE_TO_BINLOG || _la==LOCAL) { + { + setState(5137); + ((FlushStatementContext)_localctx).flushFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==NO_WRITE_TO_BINLOG || _la==LOCAL) ) { + ((FlushStatementContext)_localctx).flushFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(5140); + flushOption(); + setState(5145); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5141); + match(COMMA); + setState(5142); + flushOption(); + } + } + setState(5147); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class KillStatementContext extends ParserRuleContext { + public Token connectionFormat; + public TerminalNode KILL() { return getToken(MySqlParser.KILL, 0); } + public List decimalLiteral() { + return getRuleContexts(DecimalLiteralContext.class); + } + public DecimalLiteralContext decimalLiteral(int i) { + return getRuleContext(DecimalLiteralContext.class,i); + } + public TerminalNode CONNECTION() { return getToken(MySqlParser.CONNECTION, 0); } + public TerminalNode QUERY() { return getToken(MySqlParser.QUERY, 0); } + public KillStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_killStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterKillStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitKillStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitKillStatement(this); + else return visitor.visitChildren(this); + } + } + + public final KillStatementContext killStatement() throws RecognitionException { + KillStatementContext _localctx = new KillStatementContext(_ctx, getState()); + enterRule(_localctx, 460, RULE_killStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5148); + match(KILL); + setState(5150); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CONNECTION || _la==QUERY) { + { + setState(5149); + ((KillStatementContext)_localctx).connectionFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==CONNECTION || _la==QUERY) ) { + ((KillStatementContext)_localctx).connectionFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(5153); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(5152); + decimalLiteral(); + } + } + setState(5155); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( ((((_la - 1027)) & ~0x3f) == 0 && ((1L << (_la - 1027)) & ((1L << (ZERO_DECIMAL - 1027)) | (1L << (ONE_DECIMAL - 1027)) | (1L << (TWO_DECIMAL - 1027)) | (1L << (DECIMAL_LITERAL - 1027)))) != 0) ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LoadIndexIntoCacheContext extends ParserRuleContext { + public TerminalNode LOAD() { return getToken(MySqlParser.LOAD, 0); } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode INTO() { return getToken(MySqlParser.INTO, 0); } + public TerminalNode CACHE() { return getToken(MySqlParser.CACHE, 0); } + public List loadedTableIndexes() { + return getRuleContexts(LoadedTableIndexesContext.class); + } + public LoadedTableIndexesContext loadedTableIndexes(int i) { + return getRuleContext(LoadedTableIndexesContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public LoadIndexIntoCacheContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_loadIndexIntoCache; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLoadIndexIntoCache(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLoadIndexIntoCache(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLoadIndexIntoCache(this); + else return visitor.visitChildren(this); + } + } + + public final LoadIndexIntoCacheContext loadIndexIntoCache() throws RecognitionException { + LoadIndexIntoCacheContext _localctx = new LoadIndexIntoCacheContext(_ctx, getState()); + enterRule(_localctx, 462, RULE_loadIndexIntoCache); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5157); + match(LOAD); + setState(5158); + match(INDEX); + setState(5159); + match(INTO); + setState(5160); + match(CACHE); + setState(5161); + loadedTableIndexes(); + setState(5166); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5162); + match(COMMA); + setState(5163); + loadedTableIndexes(); + } + } + setState(5168); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ResetStatementContext extends ParserRuleContext { + public TerminalNode RESET() { return getToken(MySqlParser.RESET, 0); } + public TerminalNode QUERY() { return getToken(MySqlParser.QUERY, 0); } + public TerminalNode CACHE() { return getToken(MySqlParser.CACHE, 0); } + public ResetStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_resetStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterResetStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitResetStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitResetStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ResetStatementContext resetStatement() throws RecognitionException { + ResetStatementContext _localctx = new ResetStatementContext(_ctx, getState()); + enterRule(_localctx, 464, RULE_resetStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(5169); + match(RESET); + setState(5170); + match(QUERY); + setState(5171); + match(CACHE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ShutdownStatementContext extends ParserRuleContext { + public TerminalNode SHUTDOWN() { return getToken(MySqlParser.SHUTDOWN, 0); } + public ShutdownStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_shutdownStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterShutdownStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitShutdownStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitShutdownStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ShutdownStatementContext shutdownStatement() throws RecognitionException { + ShutdownStatementContext _localctx = new ShutdownStatementContext(_ctx, getState()); + enterRule(_localctx, 466, RULE_shutdownStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(5173); + match(SHUTDOWN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TableIndexesContext extends ParserRuleContext { + public Token indexFormat; + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public UidListContext uidList() { + return getRuleContext(UidListContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public TableIndexesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tableIndexes; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableIndexes(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableIndexes(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableIndexes(this); + else return visitor.visitChildren(this); + } + } + + public final TableIndexesContext tableIndexes() throws RecognitionException { + TableIndexesContext _localctx = new TableIndexesContext(_ctx, getState()); + enterRule(_localctx, 468, RULE_tableIndexes); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5175); + tableName(); + setState(5183); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INDEX || _la==KEY || _la==LR_BRACKET) { + { + setState(5177); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INDEX || _la==KEY) { + { + setState(5176); + ((TableIndexesContext)_localctx).indexFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==INDEX || _la==KEY) ) { + ((TableIndexesContext)_localctx).indexFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(5179); + match(LR_BRACKET); + setState(5180); + uidList(); + setState(5181); + match(RR_BRACKET); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FlushOptionContext extends ParserRuleContext { + public FlushOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_flushOption; } + + public FlushOptionContext() { } + public void copyFrom(FlushOptionContext ctx) { + super.copyFrom(ctx); + } + } + public static class TableFlushOptionContext extends FlushOptionContext { + public TerminalNode TABLES() { return getToken(MySqlParser.TABLES, 0); } + public TablesContext tables() { + return getRuleContext(TablesContext.class,0); + } + public FlushTableOptionContext flushTableOption() { + return getRuleContext(FlushTableOptionContext.class,0); + } + public TableFlushOptionContext(FlushOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableFlushOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableFlushOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableFlushOption(this); + else return visitor.visitChildren(this); + } + } + public static class ChannelFlushOptionContext extends FlushOptionContext { + public TerminalNode RELAY() { return getToken(MySqlParser.RELAY, 0); } + public TerminalNode LOGS() { return getToken(MySqlParser.LOGS, 0); } + public ChannelOptionContext channelOption() { + return getRuleContext(ChannelOptionContext.class,0); + } + public ChannelFlushOptionContext(FlushOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterChannelFlushOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitChannelFlushOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitChannelFlushOption(this); + else return visitor.visitChildren(this); + } + } + public static class SimpleFlushOptionContext extends FlushOptionContext { + public TerminalNode DES_KEY_FILE() { return getToken(MySqlParser.DES_KEY_FILE, 0); } + public TerminalNode HOSTS() { return getToken(MySqlParser.HOSTS, 0); } + public TerminalNode LOGS() { return getToken(MySqlParser.LOGS, 0); } + public TerminalNode OPTIMIZER_COSTS() { return getToken(MySqlParser.OPTIMIZER_COSTS, 0); } + public TerminalNode PRIVILEGES() { return getToken(MySqlParser.PRIVILEGES, 0); } + public TerminalNode QUERY() { return getToken(MySqlParser.QUERY, 0); } + public TerminalNode CACHE() { return getToken(MySqlParser.CACHE, 0); } + public TerminalNode STATUS() { return getToken(MySqlParser.STATUS, 0); } + public TerminalNode USER_RESOURCES() { return getToken(MySqlParser.USER_RESOURCES, 0); } + public TerminalNode TABLES() { return getToken(MySqlParser.TABLES, 0); } + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public TerminalNode READ() { return getToken(MySqlParser.READ, 0); } + public TerminalNode LOCK() { return getToken(MySqlParser.LOCK, 0); } + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public TerminalNode ENGINE() { return getToken(MySqlParser.ENGINE, 0); } + public TerminalNode ERROR() { return getToken(MySqlParser.ERROR, 0); } + public TerminalNode GENERAL() { return getToken(MySqlParser.GENERAL, 0); } + public TerminalNode RELAY() { return getToken(MySqlParser.RELAY, 0); } + public TerminalNode SLOW() { return getToken(MySqlParser.SLOW, 0); } + public SimpleFlushOptionContext(FlushOptionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSimpleFlushOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSimpleFlushOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSimpleFlushOption(this); + else return visitor.visitChildren(this); + } + } + + public final FlushOptionContext flushOption() throws RecognitionException { + FlushOptionContext _localctx = new FlushOptionContext(_ctx, getState()); + enterRule(_localctx, 470, RULE_flushOption); + int _la; + try { + setState(5215); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,752,_ctx) ) { + case 1: + _localctx = new SimpleFlushOptionContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(5203); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DES_KEY_FILE: + { + setState(5185); + match(DES_KEY_FILE); + } + break; + case HOSTS: + { + setState(5186); + match(HOSTS); + } + break; + case BINARY: + case ENGINE: + case ERROR: + case GENERAL: + case LOGS: + case RELAY: + case SLOW: + { + setState(5188); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==BINARY || ((((_la - 342)) & ~0x3f) == 0 && ((1L << (_la - 342)) & ((1L << (ENGINE - 342)) | (1L << (ERROR - 342)) | (1L << (GENERAL - 342)))) != 0) || _la==RELAY || _la==SLOW) { + { + setState(5187); + _la = _input.LA(1); + if ( !(_la==BINARY || ((((_la - 342)) & ~0x3f) == 0 && ((1L << (_la - 342)) & ((1L << (ENGINE - 342)) | (1L << (ERROR - 342)) | (1L << (GENERAL - 342)))) != 0) || _la==RELAY || _la==SLOW) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(5190); + match(LOGS); + } + break; + case OPTIMIZER_COSTS: + { + setState(5191); + match(OPTIMIZER_COSTS); + } + break; + case PRIVILEGES: + { + setState(5192); + match(PRIVILEGES); + } + break; + case QUERY: + { + setState(5193); + match(QUERY); + setState(5194); + match(CACHE); + } + break; + case STATUS: + { + setState(5195); + match(STATUS); + } + break; + case USER_RESOURCES: + { + setState(5196); + match(USER_RESOURCES); + } + break; + case TABLES: + { + setState(5197); + match(TABLES); + setState(5201); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WITH) { + { + setState(5198); + match(WITH); + setState(5199); + match(READ); + setState(5200); + match(LOCK); + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 2: + _localctx = new ChannelFlushOptionContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(5205); + match(RELAY); + setState(5206); + match(LOGS); + setState(5208); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FOR) { + { + setState(5207); + channelOption(); + } + } + + } + break; + case 3: + _localctx = new TableFlushOptionContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(5210); + match(TABLES); + setState(5211); + tables(); + setState(5213); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FOR || _la==WITH) { + { + setState(5212); + flushTableOption(); + } + } + + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FlushTableOptionContext extends ParserRuleContext { + public TerminalNode WITH() { return getToken(MySqlParser.WITH, 0); } + public TerminalNode READ() { return getToken(MySqlParser.READ, 0); } + public TerminalNode LOCK() { return getToken(MySqlParser.LOCK, 0); } + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public TerminalNode EXPORT() { return getToken(MySqlParser.EXPORT, 0); } + public FlushTableOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_flushTableOption; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFlushTableOption(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFlushTableOption(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFlushTableOption(this); + else return visitor.visitChildren(this); + } + } + + public final FlushTableOptionContext flushTableOption() throws RecognitionException { + FlushTableOptionContext _localctx = new FlushTableOptionContext(_ctx, getState()); + enterRule(_localctx, 472, RULE_flushTableOption); + try { + setState(5222); + _errHandler.sync(this); + switch (_input.LA(1)) { + case WITH: + enterOuterAlt(_localctx, 1); + { + setState(5217); + match(WITH); + setState(5218); + match(READ); + setState(5219); + match(LOCK); + } + break; + case FOR: + enterOuterAlt(_localctx, 2); + { + setState(5220); + match(FOR); + setState(5221); + match(EXPORT); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LoadedTableIndexesContext extends ParserRuleContext { + public UidListContext partitionList; + public Token indexFormat; + public UidListContext indexList; + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode PARTITION() { return getToken(MySqlParser.PARTITION, 0); } + public List LR_BRACKET() { return getTokens(MySqlParser.LR_BRACKET); } + public TerminalNode LR_BRACKET(int i) { + return getToken(MySqlParser.LR_BRACKET, i); + } + public List RR_BRACKET() { return getTokens(MySqlParser.RR_BRACKET); } + public TerminalNode RR_BRACKET(int i) { + return getToken(MySqlParser.RR_BRACKET, i); + } + public TerminalNode IGNORE() { return getToken(MySqlParser.IGNORE, 0); } + public TerminalNode LEAVES() { return getToken(MySqlParser.LEAVES, 0); } + public List uidList() { + return getRuleContexts(UidListContext.class); + } + public UidListContext uidList(int i) { + return getRuleContext(UidListContext.class,i); + } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public TerminalNode INDEX() { return getToken(MySqlParser.INDEX, 0); } + public TerminalNode KEY() { return getToken(MySqlParser.KEY, 0); } + public LoadedTableIndexesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_loadedTableIndexes; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLoadedTableIndexes(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLoadedTableIndexes(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLoadedTableIndexes(this); + else return visitor.visitChildren(this); + } + } + + public final LoadedTableIndexesContext loadedTableIndexes() throws RecognitionException { + LoadedTableIndexesContext _localctx = new LoadedTableIndexesContext(_ctx, getState()); + enterRule(_localctx, 474, RULE_loadedTableIndexes); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5224); + tableName(); + setState(5232); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PARTITION) { + { + setState(5225); + match(PARTITION); + setState(5226); + match(LR_BRACKET); + setState(5229); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + { + setState(5227); + ((LoadedTableIndexesContext)_localctx).partitionList = uidList(); + } + break; + case ALL: + { + setState(5228); + match(ALL); + } + break; + default: + throw new NoViableAltException(this); + } + setState(5231); + match(RR_BRACKET); + } + } + + setState(5241); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,757,_ctx) ) { + case 1: + { + setState(5235); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INDEX || _la==KEY) { + { + setState(5234); + ((LoadedTableIndexesContext)_localctx).indexFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==INDEX || _la==KEY) ) { + ((LoadedTableIndexesContext)_localctx).indexFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(5237); + match(LR_BRACKET); + setState(5238); + ((LoadedTableIndexesContext)_localctx).indexList = uidList(); + setState(5239); + match(RR_BRACKET); + } + break; + } + setState(5245); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IGNORE) { + { + setState(5243); + match(IGNORE); + setState(5244); + match(LEAVES); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SimpleDescribeStatementContext extends ParserRuleContext { + public Token command; + public UidContext column; + public Token pattern; + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public TerminalNode EXPLAIN() { return getToken(MySqlParser.EXPLAIN, 0); } + public TerminalNode DESCRIBE() { return getToken(MySqlParser.DESCRIBE, 0); } + public TerminalNode DESC() { return getToken(MySqlParser.DESC, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public SimpleDescribeStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simpleDescribeStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSimpleDescribeStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSimpleDescribeStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSimpleDescribeStatement(this); + else return visitor.visitChildren(this); + } + } + + public final SimpleDescribeStatementContext simpleDescribeStatement() throws RecognitionException { + SimpleDescribeStatementContext _localctx = new SimpleDescribeStatementContext(_ctx, getState()); + enterRule(_localctx, 476, RULE_simpleDescribeStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5247); + ((SimpleDescribeStatementContext)_localctx).command = _input.LT(1); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << DESC) | (1L << DESCRIBE) | (1L << EXPLAIN))) != 0)) ) { + ((SimpleDescribeStatementContext)_localctx).command = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5248); + tableName(); + setState(5251); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,759,_ctx) ) { + case 1: + { + setState(5249); + ((SimpleDescribeStatementContext)_localctx).column = uid(); + } + break; + case 2: + { + setState(5250); + ((SimpleDescribeStatementContext)_localctx).pattern = match(STRING_LITERAL); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FullDescribeStatementContext extends ParserRuleContext { + public Token command; + public Token formatType; + public Token formatValue; + public DescribeObjectClauseContext describeObjectClause() { + return getRuleContext(DescribeObjectClauseContext.class,0); + } + public TerminalNode EXPLAIN() { return getToken(MySqlParser.EXPLAIN, 0); } + public TerminalNode DESCRIBE() { return getToken(MySqlParser.DESCRIBE, 0); } + public TerminalNode DESC() { return getToken(MySqlParser.DESC, 0); } + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode EXTENDED() { return getToken(MySqlParser.EXTENDED, 0); } + public TerminalNode PARTITIONS() { return getToken(MySqlParser.PARTITIONS, 0); } + public TerminalNode FORMAT() { return getToken(MySqlParser.FORMAT, 0); } + public TerminalNode TRADITIONAL() { return getToken(MySqlParser.TRADITIONAL, 0); } + public TerminalNode JSON() { return getToken(MySqlParser.JSON, 0); } + public FullDescribeStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fullDescribeStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFullDescribeStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFullDescribeStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFullDescribeStatement(this); + else return visitor.visitChildren(this); + } + } + + public final FullDescribeStatementContext fullDescribeStatement() throws RecognitionException { + FullDescribeStatementContext _localctx = new FullDescribeStatementContext(_ctx, getState()); + enterRule(_localctx, 478, RULE_fullDescribeStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5253); + ((FullDescribeStatementContext)_localctx).command = _input.LT(1); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << DESC) | (1L << DESCRIBE) | (1L << EXPLAIN))) != 0)) ) { + ((FullDescribeStatementContext)_localctx).command = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5257); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EXTENDED || _la==PARTITIONS || _la==FORMAT) { + { + setState(5254); + ((FullDescribeStatementContext)_localctx).formatType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==EXTENDED || _la==PARTITIONS || _la==FORMAT) ) { + ((FullDescribeStatementContext)_localctx).formatType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5255); + match(EQUAL_SYMBOL); + setState(5256); + ((FullDescribeStatementContext)_localctx).formatValue = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==JSON || _la==TRADITIONAL) ) { + ((FullDescribeStatementContext)_localctx).formatValue = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(5259); + describeObjectClause(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class HelpStatementContext extends ParserRuleContext { + public TerminalNode HELP() { return getToken(MySqlParser.HELP, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public HelpStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_helpStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHelpStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHelpStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHelpStatement(this); + else return visitor.visitChildren(this); + } + } + + public final HelpStatementContext helpStatement() throws RecognitionException { + HelpStatementContext _localctx = new HelpStatementContext(_ctx, getState()); + enterRule(_localctx, 480, RULE_helpStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(5261); + match(HELP); + setState(5262); + match(STRING_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UseStatementContext extends ParserRuleContext { + public TerminalNode USE() { return getToken(MySqlParser.USE, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public UseStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_useStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUseStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUseStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUseStatement(this); + else return visitor.visitChildren(this); + } + } + + public final UseStatementContext useStatement() throws RecognitionException { + UseStatementContext _localctx = new UseStatementContext(_ctx, getState()); + enterRule(_localctx, 482, RULE_useStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(5264); + match(USE); + setState(5265); + uid(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SignalStatementContext extends ParserRuleContext { + public TerminalNode SIGNAL() { return getToken(MySqlParser.SIGNAL, 0); } + public TerminalNode ID() { return getToken(MySqlParser.ID, 0); } + public TerminalNode REVERSE_QUOTE_ID() { return getToken(MySqlParser.REVERSE_QUOTE_ID, 0); } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public List signalConditionInformation() { + return getRuleContexts(SignalConditionInformationContext.class); + } + public SignalConditionInformationContext signalConditionInformation(int i) { + return getRuleContext(SignalConditionInformationContext.class,i); + } + public TerminalNode SQLSTATE() { return getToken(MySqlParser.SQLSTATE, 0); } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode VALUE() { return getToken(MySqlParser.VALUE, 0); } + public SignalStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_signalStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSignalStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSignalStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSignalStatement(this); + else return visitor.visitChildren(this); + } + } + + public final SignalStatementContext signalStatement() throws RecognitionException { + SignalStatementContext _localctx = new SignalStatementContext(_ctx, getState()); + enterRule(_localctx, 484, RULE_signalStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5267); + match(SIGNAL); + setState(5275); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SQLSTATE: + { + { + setState(5268); + match(SQLSTATE); + setState(5270); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VALUE) { + { + setState(5269); + match(VALUE); + } + } + + setState(5272); + stringLiteral(); + } + } + break; + case ID: + { + setState(5273); + match(ID); + } + break; + case REVERSE_QUOTE_ID: + { + setState(5274); + match(REVERSE_QUOTE_ID); + } + break; + default: + throw new NoViableAltException(this); + } + setState(5286); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,764,_ctx) ) { + case 1: + { + setState(5277); + match(SET); + setState(5278); + signalConditionInformation(); + setState(5283); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5279); + match(COMMA); + setState(5280); + signalConditionInformation(); + } + } + setState(5285); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ResignalStatementContext extends ParserRuleContext { + public TerminalNode RESIGNAL() { return getToken(MySqlParser.RESIGNAL, 0); } + public TerminalNode ID() { return getToken(MySqlParser.ID, 0); } + public TerminalNode REVERSE_QUOTE_ID() { return getToken(MySqlParser.REVERSE_QUOTE_ID, 0); } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public List signalConditionInformation() { + return getRuleContexts(SignalConditionInformationContext.class); + } + public SignalConditionInformationContext signalConditionInformation(int i) { + return getRuleContext(SignalConditionInformationContext.class,i); + } + public TerminalNode SQLSTATE() { return getToken(MySqlParser.SQLSTATE, 0); } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TerminalNode VALUE() { return getToken(MySqlParser.VALUE, 0); } + public ResignalStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_resignalStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterResignalStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitResignalStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitResignalStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ResignalStatementContext resignalStatement() throws RecognitionException { + ResignalStatementContext _localctx = new ResignalStatementContext(_ctx, getState()); + enterRule(_localctx, 486, RULE_resignalStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5288); + match(RESIGNAL); + setState(5296); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SQLSTATE: + { + { + setState(5289); + match(SQLSTATE); + setState(5291); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VALUE) { + { + setState(5290); + match(VALUE); + } + } + + setState(5293); + stringLiteral(); + } + } + break; + case ID: + { + setState(5294); + match(ID); + } + break; + case REVERSE_QUOTE_ID: + { + setState(5295); + match(REVERSE_QUOTE_ID); + } + break; + case EOF: + case ALTER: + case ANALYZE: + case CALL: + case CHANGE: + case CHECK: + case CREATE: + case DELETE: + case DESC: + case DESCRIBE: + case DROP: + case EXPLAIN: + case GET: + case GRANT: + case INSERT: + case KILL: + case LOAD: + case LOCK: + case OPTIMIZE: + case PURGE: + case RELEASE: + case RENAME: + case REPLACE: + case RESIGNAL: + case REVOKE: + case SELECT: + case SET: + case SHOW: + case SIGNAL: + case UNLOCK: + case UPDATE: + case USE: + case BEGIN: + case BINLOG: + case CACHE: + case CHECKSUM: + case COMMIT: + case DEALLOCATE: + case DO: + case FLUSH: + case HANDLER: + case HELP: + case INSTALL: + case PREPARE: + case REPAIR: + case RESET: + case ROLLBACK: + case SAVEPOINT: + case START: + case STOP: + case TRUNCATE: + case UNINSTALL: + case XA: + case EXECUTE: + case SHUTDOWN: + case MINUSMINUS: + case LR_BRACKET: + case SEMI: + break; + default: + break; + } + setState(5307); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,768,_ctx) ) { + case 1: + { + setState(5298); + match(SET); + setState(5299); + signalConditionInformation(); + setState(5304); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5300); + match(COMMA); + setState(5301); + signalConditionInformation(); + } + } + setState(5306); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SignalConditionInformationContext extends ParserRuleContext { + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode CLASS_ORIGIN() { return getToken(MySqlParser.CLASS_ORIGIN, 0); } + public TerminalNode SUBCLASS_ORIGIN() { return getToken(MySqlParser.SUBCLASS_ORIGIN, 0); } + public TerminalNode MESSAGE_TEXT() { return getToken(MySqlParser.MESSAGE_TEXT, 0); } + public TerminalNode MYSQL_ERRNO() { return getToken(MySqlParser.MYSQL_ERRNO, 0); } + public TerminalNode CONSTRAINT_CATALOG() { return getToken(MySqlParser.CONSTRAINT_CATALOG, 0); } + public TerminalNode CONSTRAINT_SCHEMA() { return getToken(MySqlParser.CONSTRAINT_SCHEMA, 0); } + public TerminalNode CONSTRAINT_NAME() { return getToken(MySqlParser.CONSTRAINT_NAME, 0); } + public TerminalNode CATALOG_NAME() { return getToken(MySqlParser.CATALOG_NAME, 0); } + public TerminalNode SCHEMA_NAME() { return getToken(MySqlParser.SCHEMA_NAME, 0); } + public TerminalNode TABLE_NAME() { return getToken(MySqlParser.TABLE_NAME, 0); } + public TerminalNode COLUMN_NAME() { return getToken(MySqlParser.COLUMN_NAME, 0); } + public TerminalNode CURSOR_NAME() { return getToken(MySqlParser.CURSOR_NAME, 0); } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public TerminalNode DECIMAL_LITERAL() { return getToken(MySqlParser.DECIMAL_LITERAL, 0); } + public SignalConditionInformationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_signalConditionInformation; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSignalConditionInformation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSignalConditionInformation(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSignalConditionInformation(this); + else return visitor.visitChildren(this); + } + } + + public final SignalConditionInformationContext signalConditionInformation() throws RecognitionException { + SignalConditionInformationContext _localctx = new SignalConditionInformationContext(_ctx, getState()); + enterRule(_localctx, 488, RULE_signalConditionInformation); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5309); + _la = _input.LA(1); + if ( !(((((_la - 297)) & ~0x3f) == 0 && ((1L << (_la - 297)) & ((1L << (CLASS_ORIGIN - 297)) | (1L << (COLUMN_NAME - 297)) | (1L << (CONSTRAINT_CATALOG - 297)) | (1L << (CONSTRAINT_SCHEMA - 297)) | (1L << (CONSTRAINT_NAME - 297)) | (1L << (CURSOR_NAME - 297)))) != 0) || _la==MESSAGE_TEXT || _la==MYSQL_ERRNO || _la==SUBCLASS_ORIGIN || _la==TABLE_NAME || _la==CATALOG_NAME || _la==SCHEMA_NAME) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5310); + match(EQUAL_SYMBOL); + setState(5313); + _errHandler.sync(this); + switch (_input.LA(1)) { + case START_NATIONAL_STRING_LITERAL: + case STRING_LITERAL: + case STRING_CHARSET_NAME: + { + setState(5311); + stringLiteral(); + } + break; + case DECIMAL_LITERAL: + { + setState(5312); + match(DECIMAL_LITERAL); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DiagnosticsStatementContext extends ParserRuleContext { + public TerminalNode GET() { return getToken(MySqlParser.GET, 0); } + public TerminalNode DIAGNOSTICS() { return getToken(MySqlParser.DIAGNOSTICS, 0); } + public TerminalNode CURRENT() { return getToken(MySqlParser.CURRENT, 0); } + public TerminalNode STACKED() { return getToken(MySqlParser.STACKED, 0); } + public List variableClause() { + return getRuleContexts(VariableClauseContext.class); + } + public VariableClauseContext variableClause(int i) { + return getRuleContext(VariableClauseContext.class,i); + } + public List EQUAL_SYMBOL() { return getTokens(MySqlParser.EQUAL_SYMBOL); } + public TerminalNode EQUAL_SYMBOL(int i) { + return getToken(MySqlParser.EQUAL_SYMBOL, i); + } + public TerminalNode CONDITION() { return getToken(MySqlParser.CONDITION, 0); } + public List diagnosticsConditionInformationName() { + return getRuleContexts(DiagnosticsConditionInformationNameContext.class); + } + public DiagnosticsConditionInformationNameContext diagnosticsConditionInformationName(int i) { + return getRuleContext(DiagnosticsConditionInformationNameContext.class,i); + } + public List NUMBER() { return getTokens(MySqlParser.NUMBER); } + public TerminalNode NUMBER(int i) { + return getToken(MySqlParser.NUMBER, i); + } + public List ROW_COUNT() { return getTokens(MySqlParser.ROW_COUNT); } + public TerminalNode ROW_COUNT(int i) { + return getToken(MySqlParser.ROW_COUNT, i); + } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public DiagnosticsStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_diagnosticsStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDiagnosticsStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDiagnosticsStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDiagnosticsStatement(this); + else return visitor.visitChildren(this); + } + } + + public final DiagnosticsStatementContext diagnosticsStatement() throws RecognitionException { + DiagnosticsStatementContext _localctx = new DiagnosticsStatementContext(_ctx, getState()); + enterRule(_localctx, 490, RULE_diagnosticsStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5315); + match(GET); + setState(5317); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CURRENT || _la==STACKED) { + { + setState(5316); + _la = _input.LA(1); + if ( !(_la==CURRENT || _la==STACKED) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(5319); + match(DIAGNOSTICS); + setState(5351); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case AT_SIGN: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + case LOCAL_ID: + case GLOBAL_ID: + { + { + setState(5320); + variableClause(); + setState(5321); + match(EQUAL_SYMBOL); + setState(5322); + _la = _input.LA(1); + if ( !(_la==NUMBER || _la==ROW_COUNT) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5330); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5323); + match(COMMA); + setState(5324); + variableClause(); + setState(5325); + match(EQUAL_SYMBOL); + setState(5326); + _la = _input.LA(1); + if ( !(_la==NUMBER || _la==ROW_COUNT) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + setState(5332); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + break; + case CONDITION: + { + { + setState(5333); + match(CONDITION); + setState(5336); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case DECIMAL_LITERAL: + { + setState(5334); + decimalLiteral(); + } + break; + case CURRENT: + case DATABASE: + case DIAGNOSTICS: + case LEFT: + case NUMBER: + case RIGHT: + case STACKED: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case TEXT: + case ENUM: + case SERIAL: + case COUNT: + case POSITION: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case AT_SIGN: + case CHARSET_REVERSE_QOUTE_STRING: + case STRING_LITERAL: + case ID: + case REVERSE_QUOTE_ID: + case LOCAL_ID: + case GLOBAL_ID: + { + setState(5335); + variableClause(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(5338); + variableClause(); + setState(5339); + match(EQUAL_SYMBOL); + setState(5340); + diagnosticsConditionInformationName(); + setState(5348); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5341); + match(COMMA); + setState(5342); + variableClause(); + setState(5343); + match(EQUAL_SYMBOL); + setState(5344); + diagnosticsConditionInformationName(); + } + } + setState(5350); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DiagnosticsConditionInformationNameContext extends ParserRuleContext { + public TerminalNode CLASS_ORIGIN() { return getToken(MySqlParser.CLASS_ORIGIN, 0); } + public TerminalNode SUBCLASS_ORIGIN() { return getToken(MySqlParser.SUBCLASS_ORIGIN, 0); } + public TerminalNode RETURNED_SQLSTATE() { return getToken(MySqlParser.RETURNED_SQLSTATE, 0); } + public TerminalNode MESSAGE_TEXT() { return getToken(MySqlParser.MESSAGE_TEXT, 0); } + public TerminalNode MYSQL_ERRNO() { return getToken(MySqlParser.MYSQL_ERRNO, 0); } + public TerminalNode CONSTRAINT_CATALOG() { return getToken(MySqlParser.CONSTRAINT_CATALOG, 0); } + public TerminalNode CONSTRAINT_SCHEMA() { return getToken(MySqlParser.CONSTRAINT_SCHEMA, 0); } + public TerminalNode CONSTRAINT_NAME() { return getToken(MySqlParser.CONSTRAINT_NAME, 0); } + public TerminalNode CATALOG_NAME() { return getToken(MySqlParser.CATALOG_NAME, 0); } + public TerminalNode SCHEMA_NAME() { return getToken(MySqlParser.SCHEMA_NAME, 0); } + public TerminalNode TABLE_NAME() { return getToken(MySqlParser.TABLE_NAME, 0); } + public TerminalNode COLUMN_NAME() { return getToken(MySqlParser.COLUMN_NAME, 0); } + public TerminalNode CURSOR_NAME() { return getToken(MySqlParser.CURSOR_NAME, 0); } + public DiagnosticsConditionInformationNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_diagnosticsConditionInformationName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDiagnosticsConditionInformationName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDiagnosticsConditionInformationName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDiagnosticsConditionInformationName(this); + else return visitor.visitChildren(this); + } + } + + public final DiagnosticsConditionInformationNameContext diagnosticsConditionInformationName() throws RecognitionException { + DiagnosticsConditionInformationNameContext _localctx = new DiagnosticsConditionInformationNameContext(_ctx, getState()); + enterRule(_localctx, 492, RULE_diagnosticsConditionInformationName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5353); + _la = _input.LA(1); + if ( !(((((_la - 297)) & ~0x3f) == 0 && ((1L << (_la - 297)) & ((1L << (CLASS_ORIGIN - 297)) | (1L << (COLUMN_NAME - 297)) | (1L << (CONSTRAINT_CATALOG - 297)) | (1L << (CONSTRAINT_SCHEMA - 297)) | (1L << (CONSTRAINT_NAME - 297)) | (1L << (CURSOR_NAME - 297)))) != 0) || _la==MESSAGE_TEXT || _la==MYSQL_ERRNO || ((((_la - 507)) & ~0x3f) == 0 && ((1L << (_la - 507)) & ((1L << (RETURNED_SQLSTATE - 507)) | (1L << (SUBCLASS_ORIGIN - 507)) | (1L << (TABLE_NAME - 507)))) != 0) || _la==CATALOG_NAME || _la==SCHEMA_NAME) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DescribeObjectClauseContext extends ParserRuleContext { + public DescribeObjectClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_describeObjectClause; } + + public DescribeObjectClauseContext() { } + public void copyFrom(DescribeObjectClauseContext ctx) { + super.copyFrom(ctx); + } + } + public static class DescribeStatementsContext extends DescribeObjectClauseContext { + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public DeleteStatementContext deleteStatement() { + return getRuleContext(DeleteStatementContext.class,0); + } + public InsertStatementContext insertStatement() { + return getRuleContext(InsertStatementContext.class,0); + } + public ReplaceStatementContext replaceStatement() { + return getRuleContext(ReplaceStatementContext.class,0); + } + public UpdateStatementContext updateStatement() { + return getRuleContext(UpdateStatementContext.class,0); + } + public DescribeStatementsContext(DescribeObjectClauseContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDescribeStatements(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDescribeStatements(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDescribeStatements(this); + else return visitor.visitChildren(this); + } + } + public static class DescribeConnectionContext extends DescribeObjectClauseContext { + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public TerminalNode CONNECTION() { return getToken(MySqlParser.CONNECTION, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public DescribeConnectionContext(DescribeObjectClauseContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDescribeConnection(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDescribeConnection(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDescribeConnection(this); + else return visitor.visitChildren(this); + } + } + + public final DescribeObjectClauseContext describeObjectClause() throws RecognitionException { + DescribeObjectClauseContext _localctx = new DescribeObjectClauseContext(_ctx, getState()); + enterRule(_localctx, 494, RULE_describeObjectClause); + try { + setState(5365); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DELETE: + case INSERT: + case REPLACE: + case SELECT: + case UPDATE: + case LR_BRACKET: + _localctx = new DescribeStatementsContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(5360); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SELECT: + case LR_BRACKET: + { + setState(5355); + selectStatement(); + } + break; + case DELETE: + { + setState(5356); + deleteStatement(); + } + break; + case INSERT: + { + setState(5357); + insertStatement(); + } + break; + case REPLACE: + { + setState(5358); + replaceStatement(); + } + break; + case UPDATE: + { + setState(5359); + updateStatement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case FOR: + _localctx = new DescribeConnectionContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(5362); + match(FOR); + setState(5363); + match(CONNECTION); + setState(5364); + uid(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FullIdContext extends ParserRuleContext { + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public TerminalNode DOT_ID() { return getToken(MySqlParser.DOT_ID, 0); } + public TerminalNode DOT() { return getToken(MySqlParser.DOT, 0); } + public FullIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fullId; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFullId(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFullId(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFullId(this); + else return visitor.visitChildren(this); + } + } + + public final FullIdContext fullId() throws RecognitionException { + FullIdContext _localctx = new FullIdContext(_ctx, getState()); + enterRule(_localctx, 496, RULE_fullId); + try { + enterOuterAlt(_localctx, 1); + { + setState(5367); + uid(); + setState(5371); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,777,_ctx) ) { + case 1: + { + setState(5368); + match(DOT_ID); + } + break; + case 2: + { + setState(5369); + match(DOT); + setState(5370); + uid(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TableNameContext extends ParserRuleContext { + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public TableNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tableName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTableName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTableName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTableName(this); + else return visitor.visitChildren(this); + } + } + + public final TableNameContext tableName() throws RecognitionException { + TableNameContext _localctx = new TableNameContext(_ctx, getState()); + enterRule(_localctx, 498, RULE_tableName); + try { + enterOuterAlt(_localctx, 1); + { + setState(5373); + fullId(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FullColumnNameContext extends ParserRuleContext { + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public List dottedId() { + return getRuleContexts(DottedIdContext.class); + } + public DottedIdContext dottedId(int i) { + return getRuleContext(DottedIdContext.class,i); + } + public FullColumnNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fullColumnName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFullColumnName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFullColumnName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFullColumnName(this); + else return visitor.visitChildren(this); + } + } + + public final FullColumnNameContext fullColumnName() throws RecognitionException { + FullColumnNameContext _localctx = new FullColumnNameContext(_ctx, getState()); + enterRule(_localctx, 500, RULE_fullColumnName); + try { + enterOuterAlt(_localctx, 1); + { + setState(5375); + uid(); + setState(5380); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,779,_ctx) ) { + case 1: + { + setState(5376); + dottedId(); + setState(5378); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,778,_ctx) ) { + case 1: + { + setState(5377); + dottedId(); + } + break; + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IndexColumnNameContext extends ParserRuleContext { + public Token sortType; + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode ASC() { return getToken(MySqlParser.ASC, 0); } + public TerminalNode DESC() { return getToken(MySqlParser.DESC, 0); } + public IndexColumnNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_indexColumnName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIndexColumnName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIndexColumnName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIndexColumnName(this); + else return visitor.visitChildren(this); + } + } + + public final IndexColumnNameContext indexColumnName() throws RecognitionException { + IndexColumnNameContext _localctx = new IndexColumnNameContext(_ctx, getState()); + enterRule(_localctx, 502, RULE_indexColumnName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5384); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,780,_ctx) ) { + case 1: + { + setState(5382); + uid(); + } + break; + case 2: + { + setState(5383); + match(STRING_LITERAL); + } + break; + } + setState(5390); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LR_BRACKET) { + { + setState(5386); + match(LR_BRACKET); + setState(5387); + decimalLiteral(); + setState(5388); + match(RR_BRACKET); + } + } + + setState(5393); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ASC || _la==DESC) { + { + setState(5392); + ((IndexColumnNameContext)_localctx).sortType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ASC || _la==DESC) ) { + ((IndexColumnNameContext)_localctx).sortType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UserNameContext extends ParserRuleContext { + public TerminalNode STRING_USER_NAME() { return getToken(MySqlParser.STRING_USER_NAME, 0); } + public TerminalNode ID() { return getToken(MySqlParser.ID, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public UserNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_userName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUserName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUserName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUserName(this); + else return visitor.visitChildren(this); + } + } + + public final UserNameContext userName() throws RecognitionException { + UserNameContext _localctx = new UserNameContext(_ctx, getState()); + enterRule(_localctx, 504, RULE_userName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5395); + _la = _input.LA(1); + if ( !(((((_la - 1037)) & ~0x3f) == 0 && ((1L << (_la - 1037)) & ((1L << (STRING_LITERAL - 1037)) | (1L << (ID - 1037)) | (1L << (STRING_USER_NAME - 1037)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MysqlVariableContext extends ParserRuleContext { + public TerminalNode LOCAL_ID() { return getToken(MySqlParser.LOCAL_ID, 0); } + public TerminalNode GLOBAL_ID() { return getToken(MySqlParser.GLOBAL_ID, 0); } + public MysqlVariableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_mysqlVariable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMysqlVariable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMysqlVariable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMysqlVariable(this); + else return visitor.visitChildren(this); + } + } + + public final MysqlVariableContext mysqlVariable() throws RecognitionException { + MysqlVariableContext _localctx = new MysqlVariableContext(_ctx, getState()); + enterRule(_localctx, 506, RULE_mysqlVariable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5397); + _la = _input.LA(1); + if ( !(_la==LOCAL_ID || _la==GLOBAL_ID) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CharsetNameContext extends ParserRuleContext { + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public CharsetNameBaseContext charsetNameBase() { + return getRuleContext(CharsetNameBaseContext.class,0); + } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode CHARSET_REVERSE_QOUTE_STRING() { return getToken(MySqlParser.CHARSET_REVERSE_QOUTE_STRING, 0); } + public CharsetNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_charsetName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCharsetName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCharsetName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCharsetName(this); + else return visitor.visitChildren(this); + } + } + + public final CharsetNameContext charsetName() throws RecognitionException { + CharsetNameContext _localctx = new CharsetNameContext(_ctx, getState()); + enterRule(_localctx, 508, RULE_charsetName); + try { + setState(5403); + _errHandler.sync(this); + switch (_input.LA(1)) { + case BINARY: + enterOuterAlt(_localctx, 1); + { + setState(5399); + match(BINARY); + } + break; + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + enterOuterAlt(_localctx, 2); + { + setState(5400); + charsetNameBase(); + } + break; + case STRING_LITERAL: + enterOuterAlt(_localctx, 3); + { + setState(5401); + match(STRING_LITERAL); + } + break; + case CHARSET_REVERSE_QOUTE_STRING: + enterOuterAlt(_localctx, 4); + { + setState(5402); + match(CHARSET_REVERSE_QOUTE_STRING); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CollationNameContext extends ParserRuleContext { + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public CollationNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_collationName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCollationName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCollationName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCollationName(this); + else return visitor.visitChildren(this); + } + } + + public final CollationNameContext collationName() throws RecognitionException { + CollationNameContext _localctx = new CollationNameContext(_ctx, getState()); + enterRule(_localctx, 510, RULE_collationName); + try { + setState(5407); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,784,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(5405); + uid(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(5406); + match(STRING_LITERAL); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EngineNameContext extends ParserRuleContext { + public TerminalNode ARCHIVE() { return getToken(MySqlParser.ARCHIVE, 0); } + public TerminalNode BLACKHOLE() { return getToken(MySqlParser.BLACKHOLE, 0); } + public TerminalNode CSV() { return getToken(MySqlParser.CSV, 0); } + public TerminalNode FEDERATED() { return getToken(MySqlParser.FEDERATED, 0); } + public TerminalNode INNODB() { return getToken(MySqlParser.INNODB, 0); } + public TerminalNode MEMORY() { return getToken(MySqlParser.MEMORY, 0); } + public TerminalNode MRG_MYISAM() { return getToken(MySqlParser.MRG_MYISAM, 0); } + public TerminalNode MYISAM() { return getToken(MySqlParser.MYISAM, 0); } + public TerminalNode NDB() { return getToken(MySqlParser.NDB, 0); } + public TerminalNode NDBCLUSTER() { return getToken(MySqlParser.NDBCLUSTER, 0); } + public TerminalNode PERFORMANCE_SCHEMA() { return getToken(MySqlParser.PERFORMANCE_SCHEMA, 0); } + public TerminalNode TOKUDB() { return getToken(MySqlParser.TOKUDB, 0); } + public TerminalNode ID() { return getToken(MySqlParser.ID, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode REVERSE_QUOTE_ID() { return getToken(MySqlParser.REVERSE_QUOTE_ID, 0); } + public EngineNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_engineName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterEngineName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitEngineName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitEngineName(this); + else return visitor.visitChildren(this); + } + } + + public final EngineNameContext engineName() throws RecognitionException { + EngineNameContext _localctx = new EngineNameContext(_ctx, getState()); + enterRule(_localctx, 512, RULE_engineName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5409); + _la = _input.LA(1); + if ( !(((((_la - 679)) & ~0x3f) == 0 && ((1L << (_la - 679)) & ((1L << (ARCHIVE - 679)) | (1L << (BLACKHOLE - 679)) | (1L << (CSV - 679)) | (1L << (FEDERATED - 679)) | (1L << (INNODB - 679)) | (1L << (MEMORY - 679)) | (1L << (MRG_MYISAM - 679)) | (1L << (MYISAM - 679)) | (1L << (NDB - 679)) | (1L << (NDBCLUSTER - 679)) | (1L << (PERFORMANCE_SCHEMA - 679)) | (1L << (TOKUDB - 679)))) != 0) || ((((_la - 1037)) & ~0x3f) == 0 && ((1L << (_la - 1037)) & ((1L << (STRING_LITERAL - 1037)) | (1L << (ID - 1037)) | (1L << (REVERSE_QUOTE_ID - 1037)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UuidSetContext extends ParserRuleContext { + public List decimalLiteral() { + return getRuleContexts(DecimalLiteralContext.class); + } + public DecimalLiteralContext decimalLiteral(int i) { + return getRuleContext(DecimalLiteralContext.class,i); + } + public List MINUS() { return getTokens(MySqlParser.MINUS); } + public TerminalNode MINUS(int i) { + return getToken(MySqlParser.MINUS, i); + } + public List COLON_SYMB() { return getTokens(MySqlParser.COLON_SYMB); } + public TerminalNode COLON_SYMB(int i) { + return getToken(MySqlParser.COLON_SYMB, i); + } + public UuidSetContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_uuidSet; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUuidSet(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUuidSet(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUuidSet(this); + else return visitor.visitChildren(this); + } + } + + public final UuidSetContext uuidSet() throws RecognitionException { + UuidSetContext _localctx = new UuidSetContext(_ctx, getState()); + enterRule(_localctx, 514, RULE_uuidSet); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5411); + decimalLiteral(); + setState(5412); + match(MINUS); + setState(5413); + decimalLiteral(); + setState(5414); + match(MINUS); + setState(5415); + decimalLiteral(); + setState(5416); + match(MINUS); + setState(5417); + decimalLiteral(); + setState(5418); + match(MINUS); + setState(5419); + decimalLiteral(); + setState(5425); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(5420); + match(COLON_SYMB); + setState(5421); + decimalLiteral(); + setState(5422); + match(MINUS); + setState(5423); + decimalLiteral(); + } + } + setState(5427); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==COLON_SYMB ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class XidContext extends ParserRuleContext { + public XuidStringIdContext globalTableUid; + public XuidStringIdContext qualifier; + public DecimalLiteralContext idFormat; + public List xuidStringId() { + return getRuleContexts(XuidStringIdContext.class); + } + public XuidStringIdContext xuidStringId(int i) { + return getRuleContext(XuidStringIdContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public XidContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_xid; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterXid(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitXid(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitXid(this); + else return visitor.visitChildren(this); + } + } + + public final XidContext xid() throws RecognitionException { + XidContext _localctx = new XidContext(_ctx, getState()); + enterRule(_localctx, 516, RULE_xid); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5429); + ((XidContext)_localctx).globalTableUid = xuidStringId(); + setState(5436); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(5430); + match(COMMA); + setState(5431); + ((XidContext)_localctx).qualifier = xuidStringId(); + setState(5434); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(5432); + match(COMMA); + setState(5433); + ((XidContext)_localctx).idFormat = decimalLiteral(); + } + } + + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class XuidStringIdContext extends ParserRuleContext { + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public TerminalNode BIT_STRING() { return getToken(MySqlParser.BIT_STRING, 0); } + public List HEXADECIMAL_LITERAL() { return getTokens(MySqlParser.HEXADECIMAL_LITERAL); } + public TerminalNode HEXADECIMAL_LITERAL(int i) { + return getToken(MySqlParser.HEXADECIMAL_LITERAL, i); + } + public XuidStringIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_xuidStringId; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterXuidStringId(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitXuidStringId(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitXuidStringId(this); + else return visitor.visitChildren(this); + } + } + + public final XuidStringIdContext xuidStringId() throws RecognitionException { + XuidStringIdContext _localctx = new XuidStringIdContext(_ctx, getState()); + enterRule(_localctx, 518, RULE_xuidStringId); + int _la; + try { + setState(5445); + _errHandler.sync(this); + switch (_input.LA(1)) { + case STRING_LITERAL: + enterOuterAlt(_localctx, 1); + { + setState(5438); + match(STRING_LITERAL); + } + break; + case BIT_STRING: + enterOuterAlt(_localctx, 2); + { + setState(5439); + match(BIT_STRING); + } + break; + case HEXADECIMAL_LITERAL: + enterOuterAlt(_localctx, 3); + { + setState(5441); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(5440); + match(HEXADECIMAL_LITERAL); + } + } + setState(5443); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==HEXADECIMAL_LITERAL ); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AuthPluginContext extends ParserRuleContext { + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public AuthPluginContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_authPlugin; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAuthPlugin(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAuthPlugin(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAuthPlugin(this); + else return visitor.visitChildren(this); + } + } + + public final AuthPluginContext authPlugin() throws RecognitionException { + AuthPluginContext _localctx = new AuthPluginContext(_ctx, getState()); + enterRule(_localctx, 520, RULE_authPlugin); + try { + setState(5449); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,790,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(5447); + uid(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(5448); + match(STRING_LITERAL); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UidContext extends ParserRuleContext { + public SimpleIdContext simpleId() { + return getRuleContext(SimpleIdContext.class,0); + } + public TerminalNode REVERSE_QUOTE_ID() { return getToken(MySqlParser.REVERSE_QUOTE_ID, 0); } + public TerminalNode CHARSET_REVERSE_QOUTE_STRING() { return getToken(MySqlParser.CHARSET_REVERSE_QOUTE_STRING, 0); } + public UidContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_uid; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUid(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUid(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUid(this); + else return visitor.visitChildren(this); + } + } + + public final UidContext uid() throws RecognitionException { + UidContext _localctx = new UidContext(_ctx, getState()); + enterRule(_localctx, 522, RULE_uid); + try { + setState(5454); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,791,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(5451); + simpleId(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(5452); + match(REVERSE_QUOTE_ID); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(5453); + match(CHARSET_REVERSE_QOUTE_STRING); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SimpleIdContext extends ParserRuleContext { + public TerminalNode ID() { return getToken(MySqlParser.ID, 0); } + public CharsetNameBaseContext charsetNameBase() { + return getRuleContext(CharsetNameBaseContext.class,0); + } + public TransactionLevelBaseContext transactionLevelBase() { + return getRuleContext(TransactionLevelBaseContext.class,0); + } + public EngineNameContext engineName() { + return getRuleContext(EngineNameContext.class,0); + } + public PrivilegesBaseContext privilegesBase() { + return getRuleContext(PrivilegesBaseContext.class,0); + } + public IntervalTypeBaseContext intervalTypeBase() { + return getRuleContext(IntervalTypeBaseContext.class,0); + } + public DataTypeBaseContext dataTypeBase() { + return getRuleContext(DataTypeBaseContext.class,0); + } + public KeywordsCanBeIdContext keywordsCanBeId() { + return getRuleContext(KeywordsCanBeIdContext.class,0); + } + public FunctionNameBaseContext functionNameBase() { + return getRuleContext(FunctionNameBaseContext.class,0); + } + public SimpleIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simpleId; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSimpleId(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSimpleId(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSimpleId(this); + else return visitor.visitChildren(this); + } + } + + public final SimpleIdContext simpleId() throws RecognitionException { + SimpleIdContext _localctx = new SimpleIdContext(_ctx, getState()); + enterRule(_localctx, 524, RULE_simpleId); + try { + setState(5465); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,792,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(5456); + match(ID); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(5457); + charsetNameBase(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(5458); + transactionLevelBase(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(5459); + engineName(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(5460); + privilegesBase(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(5461); + intervalTypeBase(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(5462); + dataTypeBase(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(5463); + keywordsCanBeId(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(5464); + functionNameBase(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DottedIdContext extends ParserRuleContext { + public TerminalNode DOT_ID() { return getToken(MySqlParser.DOT_ID, 0); } + public TerminalNode DOT() { return getToken(MySqlParser.DOT, 0); } + public UidContext uid() { + return getRuleContext(UidContext.class,0); + } + public DottedIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dottedId; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDottedId(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDottedId(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDottedId(this); + else return visitor.visitChildren(this); + } + } + + public final DottedIdContext dottedId() throws RecognitionException { + DottedIdContext _localctx = new DottedIdContext(_ctx, getState()); + enterRule(_localctx, 526, RULE_dottedId); + try { + setState(5470); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DOT_ID: + enterOuterAlt(_localctx, 1); + { + setState(5467); + match(DOT_ID); + } + break; + case DOT: + enterOuterAlt(_localctx, 2); + { + setState(5468); + match(DOT); + setState(5469); + uid(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DecimalLiteralContext extends ParserRuleContext { + public TerminalNode DECIMAL_LITERAL() { return getToken(MySqlParser.DECIMAL_LITERAL, 0); } + public TerminalNode ZERO_DECIMAL() { return getToken(MySqlParser.ZERO_DECIMAL, 0); } + public TerminalNode ONE_DECIMAL() { return getToken(MySqlParser.ONE_DECIMAL, 0); } + public TerminalNode TWO_DECIMAL() { return getToken(MySqlParser.TWO_DECIMAL, 0); } + public DecimalLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_decimalLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDecimalLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDecimalLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDecimalLiteral(this); + else return visitor.visitChildren(this); + } + } + + public final DecimalLiteralContext decimalLiteral() throws RecognitionException { + DecimalLiteralContext _localctx = new DecimalLiteralContext(_ctx, getState()); + enterRule(_localctx, 528, RULE_decimalLiteral); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5472); + _la = _input.LA(1); + if ( !(((((_la - 1027)) & ~0x3f) == 0 && ((1L << (_la - 1027)) & ((1L << (ZERO_DECIMAL - 1027)) | (1L << (ONE_DECIMAL - 1027)) | (1L << (TWO_DECIMAL - 1027)) | (1L << (DECIMAL_LITERAL - 1027)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FileSizeLiteralContext extends ParserRuleContext { + public TerminalNode FILESIZE_LITERAL() { return getToken(MySqlParser.FILESIZE_LITERAL, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public FileSizeLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fileSizeLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFileSizeLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFileSizeLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFileSizeLiteral(this); + else return visitor.visitChildren(this); + } + } + + public final FileSizeLiteralContext fileSizeLiteral() throws RecognitionException { + FileSizeLiteralContext _localctx = new FileSizeLiteralContext(_ctx, getState()); + enterRule(_localctx, 530, RULE_fileSizeLiteral); + try { + setState(5476); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FILESIZE_LITERAL: + enterOuterAlt(_localctx, 1); + { + setState(5474); + match(FILESIZE_LITERAL); + } + break; + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case DECIMAL_LITERAL: + enterOuterAlt(_localctx, 2); + { + setState(5475); + decimalLiteral(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StringLiteralContext extends ParserRuleContext { + public List STRING_LITERAL() { return getTokens(MySqlParser.STRING_LITERAL); } + public TerminalNode STRING_LITERAL(int i) { + return getToken(MySqlParser.STRING_LITERAL, i); + } + public TerminalNode START_NATIONAL_STRING_LITERAL() { return getToken(MySqlParser.START_NATIONAL_STRING_LITERAL, 0); } + public TerminalNode STRING_CHARSET_NAME() { return getToken(MySqlParser.STRING_CHARSET_NAME, 0); } + public TerminalNode COLLATE() { return getToken(MySqlParser.COLLATE, 0); } + public CollationNameContext collationName() { + return getRuleContext(CollationNameContext.class,0); + } + public StringLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_stringLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterStringLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitStringLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitStringLiteral(this); + else return visitor.visitChildren(this); + } + } + + public final StringLiteralContext stringLiteral() throws RecognitionException { + StringLiteralContext _localctx = new StringLiteralContext(_ctx, getState()); + enterRule(_localctx, 532, RULE_stringLiteral); + int _la; + try { + int _alt; + setState(5501); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,801,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(5483); + _errHandler.sync(this); + switch (_input.LA(1)) { + case STRING_LITERAL: + case STRING_CHARSET_NAME: + { + setState(5479); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==STRING_CHARSET_NAME) { + { + setState(5478); + match(STRING_CHARSET_NAME); + } + } + + setState(5481); + match(STRING_LITERAL); + } + break; + case START_NATIONAL_STRING_LITERAL: + { + setState(5482); + match(START_NATIONAL_STRING_LITERAL); + } + break; + default: + throw new NoViableAltException(this); + } + setState(5486); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(5485); + match(STRING_LITERAL); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(5488); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,797,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(5495); + _errHandler.sync(this); + switch (_input.LA(1)) { + case STRING_LITERAL: + case STRING_CHARSET_NAME: + { + setState(5491); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==STRING_CHARSET_NAME) { + { + setState(5490); + match(STRING_CHARSET_NAME); + } + } + + setState(5493); + match(STRING_LITERAL); + } + break; + case START_NATIONAL_STRING_LITERAL: + { + setState(5494); + match(START_NATIONAL_STRING_LITERAL); + } + break; + default: + throw new NoViableAltException(this); + } + setState(5499); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,800,_ctx) ) { + case 1: + { + setState(5497); + match(COLLATE); + setState(5498); + collationName(); + } + break; + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BooleanLiteralContext extends ParserRuleContext { + public TerminalNode TRUE() { return getToken(MySqlParser.TRUE, 0); } + public TerminalNode FALSE() { return getToken(MySqlParser.FALSE, 0); } + public BooleanLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_booleanLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBooleanLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBooleanLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBooleanLiteral(this); + else return visitor.visitChildren(this); + } + } + + public final BooleanLiteralContext booleanLiteral() throws RecognitionException { + BooleanLiteralContext _localctx = new BooleanLiteralContext(_ctx, getState()); + enterRule(_localctx, 534, RULE_booleanLiteral); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5503); + _la = _input.LA(1); + if ( !(_la==FALSE || _la==TRUE) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class HexadecimalLiteralContext extends ParserRuleContext { + public TerminalNode HEXADECIMAL_LITERAL() { return getToken(MySqlParser.HEXADECIMAL_LITERAL, 0); } + public TerminalNode STRING_CHARSET_NAME() { return getToken(MySqlParser.STRING_CHARSET_NAME, 0); } + public HexadecimalLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_hexadecimalLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterHexadecimalLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitHexadecimalLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitHexadecimalLiteral(this); + else return visitor.visitChildren(this); + } + } + + public final HexadecimalLiteralContext hexadecimalLiteral() throws RecognitionException { + HexadecimalLiteralContext _localctx = new HexadecimalLiteralContext(_ctx, getState()); + enterRule(_localctx, 536, RULE_hexadecimalLiteral); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5506); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==STRING_CHARSET_NAME) { + { + setState(5505); + match(STRING_CHARSET_NAME); + } + } + + setState(5508); + match(HEXADECIMAL_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NullNotnullContext extends ParserRuleContext { + public TerminalNode NULL_LITERAL() { return getToken(MySqlParser.NULL_LITERAL, 0); } + public TerminalNode NULL_SPEC_LITERAL() { return getToken(MySqlParser.NULL_SPEC_LITERAL, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public NullNotnullContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_nullNotnull; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterNullNotnull(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitNullNotnull(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitNullNotnull(this); + else return visitor.visitChildren(this); + } + } + + public final NullNotnullContext nullNotnull() throws RecognitionException { + NullNotnullContext _localctx = new NullNotnullContext(_ctx, getState()); + enterRule(_localctx, 538, RULE_nullNotnull); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5511); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(5510); + match(NOT); + } + } + + setState(5513); + _la = _input.LA(1); + if ( !(_la==NULL_LITERAL || _la==NULL_SPEC_LITERAL) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConstantContext extends ParserRuleContext { + public Token nullLiteral; + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode MINUS() { return getToken(MySqlParser.MINUS, 0); } + public HexadecimalLiteralContext hexadecimalLiteral() { + return getRuleContext(HexadecimalLiteralContext.class,0); + } + public BooleanLiteralContext booleanLiteral() { + return getRuleContext(BooleanLiteralContext.class,0); + } + public TerminalNode REAL_LITERAL() { return getToken(MySqlParser.REAL_LITERAL, 0); } + public TerminalNode BIT_STRING() { return getToken(MySqlParser.BIT_STRING, 0); } + public TerminalNode NULL_LITERAL() { return getToken(MySqlParser.NULL_LITERAL, 0); } + public TerminalNode NULL_SPEC_LITERAL() { return getToken(MySqlParser.NULL_SPEC_LITERAL, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public ConstantContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constant; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterConstant(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitConstant(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitConstant(this); + else return visitor.visitChildren(this); + } + } + + public final ConstantContext constant() throws RecognitionException { + ConstantContext _localctx = new ConstantContext(_ctx, getState()); + enterRule(_localctx, 540, RULE_constant); + int _la; + try { + setState(5527); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,805,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(5515); + stringLiteral(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(5516); + decimalLiteral(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(5517); + match(MINUS); + setState(5518); + decimalLiteral(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(5519); + hexadecimalLiteral(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(5520); + booleanLiteral(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(5521); + match(REAL_LITERAL); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(5522); + match(BIT_STRING); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(5524); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(5523); + match(NOT); + } + } + + setState(5526); + ((ConstantContext)_localctx).nullLiteral = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==NULL_LITERAL || _la==NULL_SPEC_LITERAL) ) { + ((ConstantContext)_localctx).nullLiteral = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DataTypeContext extends ParserRuleContext { + public DataTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dataType; } + + public DataTypeContext() { } + public void copyFrom(DataTypeContext ctx) { + super.copyFrom(ctx); + } + } + public static class SpatialDataTypeContext extends DataTypeContext { + public Token typeName; + public TerminalNode GEOMETRYCOLLECTION() { return getToken(MySqlParser.GEOMETRYCOLLECTION, 0); } + public TerminalNode GEOMCOLLECTION() { return getToken(MySqlParser.GEOMCOLLECTION, 0); } + public TerminalNode LINESTRING() { return getToken(MySqlParser.LINESTRING, 0); } + public TerminalNode MULTILINESTRING() { return getToken(MySqlParser.MULTILINESTRING, 0); } + public TerminalNode MULTIPOINT() { return getToken(MySqlParser.MULTIPOINT, 0); } + public TerminalNode MULTIPOLYGON() { return getToken(MySqlParser.MULTIPOLYGON, 0); } + public TerminalNode POINT() { return getToken(MySqlParser.POINT, 0); } + public TerminalNode POLYGON() { return getToken(MySqlParser.POLYGON, 0); } + public TerminalNode JSON() { return getToken(MySqlParser.JSON, 0); } + public TerminalNode GEOMETRY() { return getToken(MySqlParser.GEOMETRY, 0); } + public SpatialDataTypeContext(DataTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSpatialDataType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSpatialDataType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSpatialDataType(this); + else return visitor.visitChildren(this); + } + } + public static class CollectionDataTypeContext extends DataTypeContext { + public Token typeName; + public CollectionOptionsContext collectionOptions() { + return getRuleContext(CollectionOptionsContext.class,0); + } + public TerminalNode ENUM() { return getToken(MySqlParser.ENUM, 0); } + public List SET() { return getTokens(MySqlParser.SET); } + public TerminalNode SET(int i) { + return getToken(MySqlParser.SET, i); + } + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public TerminalNode CHARSET() { return getToken(MySqlParser.CHARSET, 0); } + public CollectionDataTypeContext(DataTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCollectionDataType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCollectionDataType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCollectionDataType(this); + else return visitor.visitChildren(this); + } + } + public static class NationalVaryingStringDataTypeContext extends DataTypeContext { + public Token typeName; + public TerminalNode NATIONAL() { return getToken(MySqlParser.NATIONAL, 0); } + public TerminalNode VARYING() { return getToken(MySqlParser.VARYING, 0); } + public TerminalNode CHAR() { return getToken(MySqlParser.CHAR, 0); } + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public LengthOneDimensionContext lengthOneDimension() { + return getRuleContext(LengthOneDimensionContext.class,0); + } + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public NationalVaryingStringDataTypeContext(DataTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterNationalVaryingStringDataType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitNationalVaryingStringDataType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitNationalVaryingStringDataType(this); + else return visitor.visitChildren(this); + } + } + public static class DimensionDataTypeContext extends DataTypeContext { + public Token typeName; + public TerminalNode TINYINT() { return getToken(MySqlParser.TINYINT, 0); } + public TerminalNode SMALLINT() { return getToken(MySqlParser.SMALLINT, 0); } + public TerminalNode MEDIUMINT() { return getToken(MySqlParser.MEDIUMINT, 0); } + public TerminalNode INT() { return getToken(MySqlParser.INT, 0); } + public TerminalNode INTEGER() { return getToken(MySqlParser.INTEGER, 0); } + public TerminalNode BIGINT() { return getToken(MySqlParser.BIGINT, 0); } + public LengthOneDimensionContext lengthOneDimension() { + return getRuleContext(LengthOneDimensionContext.class,0); + } + public TerminalNode ZEROFILL() { return getToken(MySqlParser.ZEROFILL, 0); } + public TerminalNode SIGNED() { return getToken(MySqlParser.SIGNED, 0); } + public TerminalNode UNSIGNED() { return getToken(MySqlParser.UNSIGNED, 0); } + public TerminalNode REAL() { return getToken(MySqlParser.REAL, 0); } + public LengthTwoDimensionContext lengthTwoDimension() { + return getRuleContext(LengthTwoDimensionContext.class,0); + } + public TerminalNode DOUBLE() { return getToken(MySqlParser.DOUBLE, 0); } + public TerminalNode PRECISION() { return getToken(MySqlParser.PRECISION, 0); } + public TerminalNode DECIMAL() { return getToken(MySqlParser.DECIMAL, 0); } + public TerminalNode DEC() { return getToken(MySqlParser.DEC, 0); } + public TerminalNode FIXED() { return getToken(MySqlParser.FIXED, 0); } + public TerminalNode NUMERIC() { return getToken(MySqlParser.NUMERIC, 0); } + public TerminalNode FLOAT() { return getToken(MySqlParser.FLOAT, 0); } + public LengthTwoOptionalDimensionContext lengthTwoOptionalDimension() { + return getRuleContext(LengthTwoOptionalDimensionContext.class,0); + } + public TerminalNode BIT() { return getToken(MySqlParser.BIT, 0); } + public TerminalNode TIME() { return getToken(MySqlParser.TIME, 0); } + public TerminalNode TIMESTAMP() { return getToken(MySqlParser.TIMESTAMP, 0); } + public TerminalNode DATETIME() { return getToken(MySqlParser.DATETIME, 0); } + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public TerminalNode VARBINARY() { return getToken(MySqlParser.VARBINARY, 0); } + public TerminalNode YEAR() { return getToken(MySqlParser.YEAR, 0); } + public DimensionDataTypeContext(DataTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDimensionDataType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDimensionDataType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDimensionDataType(this); + else return visitor.visitChildren(this); + } + } + public static class StringDataTypeContext extends DataTypeContext { + public Token typeName; + public TerminalNode CHAR() { return getToken(MySqlParser.CHAR, 0); } + public List CHARACTER() { return getTokens(MySqlParser.CHARACTER); } + public TerminalNode CHARACTER(int i) { + return getToken(MySqlParser.CHARACTER, i); + } + public TerminalNode VARCHAR() { return getToken(MySqlParser.VARCHAR, 0); } + public TerminalNode TINYTEXT() { return getToken(MySqlParser.TINYTEXT, 0); } + public TerminalNode TEXT() { return getToken(MySqlParser.TEXT, 0); } + public TerminalNode MEDIUMTEXT() { return getToken(MySqlParser.MEDIUMTEXT, 0); } + public TerminalNode LONGTEXT() { return getToken(MySqlParser.LONGTEXT, 0); } + public TerminalNode NCHAR() { return getToken(MySqlParser.NCHAR, 0); } + public TerminalNode NVARCHAR() { return getToken(MySqlParser.NVARCHAR, 0); } + public LengthOneDimensionContext lengthOneDimension() { + return getRuleContext(LengthOneDimensionContext.class,0); + } + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public TerminalNode COLLATE() { return getToken(MySqlParser.COLLATE, 0); } + public CollationNameContext collationName() { + return getRuleContext(CollationNameContext.class,0); + } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode CHARSET() { return getToken(MySqlParser.CHARSET, 0); } + public StringDataTypeContext(DataTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterStringDataType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitStringDataType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitStringDataType(this); + else return visitor.visitChildren(this); + } + } + public static class NationalStringDataTypeContext extends DataTypeContext { + public Token typeName; + public TerminalNode NATIONAL() { return getToken(MySqlParser.NATIONAL, 0); } + public TerminalNode VARCHAR() { return getToken(MySqlParser.VARCHAR, 0); } + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public LengthOneDimensionContext lengthOneDimension() { + return getRuleContext(LengthOneDimensionContext.class,0); + } + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public TerminalNode NCHAR() { return getToken(MySqlParser.NCHAR, 0); } + public NationalStringDataTypeContext(DataTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterNationalStringDataType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitNationalStringDataType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitNationalStringDataType(this); + else return visitor.visitChildren(this); + } + } + public static class SimpleDataTypeContext extends DataTypeContext { + public Token typeName; + public TerminalNode DATE() { return getToken(MySqlParser.DATE, 0); } + public TerminalNode TINYBLOB() { return getToken(MySqlParser.TINYBLOB, 0); } + public TerminalNode BLOB() { return getToken(MySqlParser.BLOB, 0); } + public TerminalNode MEDIUMBLOB() { return getToken(MySqlParser.MEDIUMBLOB, 0); } + public TerminalNode LONGBLOB() { return getToken(MySqlParser.LONGBLOB, 0); } + public TerminalNode BOOL() { return getToken(MySqlParser.BOOL, 0); } + public TerminalNode BOOLEAN() { return getToken(MySqlParser.BOOLEAN, 0); } + public TerminalNode SERIAL() { return getToken(MySqlParser.SERIAL, 0); } + public SimpleDataTypeContext(DataTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSimpleDataType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSimpleDataType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSimpleDataType(this); + else return visitor.visitChildren(this); + } + } + + public final DataTypeContext dataType() throws RecognitionException { + DataTypeContext _localctx = new DataTypeContext(_ctx, getState()); + enterRule(_localctx, 542, RULE_dataType); + int _la; + try { + setState(5635); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,834,_ctx) ) { + case 1: + _localctx = new StringDataTypeContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(5529); + ((StringDataTypeContext)_localctx).typeName = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==CHARACTER || ((((_la - 204)) & ~0x3f) == 0 && ((1L << (_la - 204)) & ((1L << (CHAR - 204)) | (1L << (VARCHAR - 204)) | (1L << (NVARCHAR - 204)) | (1L << (TINYTEXT - 204)) | (1L << (TEXT - 204)) | (1L << (MEDIUMTEXT - 204)) | (1L << (LONGTEXT - 204)))) != 0) || _la==NCHAR) ) { + ((StringDataTypeContext)_localctx).typeName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5531); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,806,_ctx) ) { + case 1: + { + setState(5530); + lengthOneDimension(); + } + break; + } + setState(5534); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==BINARY) { + { + setState(5533); + match(BINARY); + } + } + + setState(5542); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,809,_ctx) ) { + case 1: + { + setState(5539); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CHARACTER: + { + setState(5536); + match(CHARACTER); + setState(5537); + match(SET); + } + break; + case CHARSET: + { + setState(5538); + match(CHARSET); + } + break; + default: + throw new NoViableAltException(this); + } + setState(5541); + charsetName(); + } + break; + } + setState(5546); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,810,_ctx) ) { + case 1: + { + setState(5544); + match(COLLATE); + setState(5545); + collationName(); + } + break; + } + } + break; + case 2: + _localctx = new NationalStringDataTypeContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(5548); + match(NATIONAL); + setState(5549); + ((NationalStringDataTypeContext)_localctx).typeName = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==CHARACTER || _la==VARCHAR) ) { + ((NationalStringDataTypeContext)_localctx).typeName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5551); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,811,_ctx) ) { + case 1: + { + setState(5550); + lengthOneDimension(); + } + break; + } + setState(5554); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==BINARY) { + { + setState(5553); + match(BINARY); + } + } + + } + break; + case 3: + _localctx = new NationalStringDataTypeContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(5556); + match(NCHAR); + setState(5557); + ((NationalStringDataTypeContext)_localctx).typeName = match(VARCHAR); + setState(5559); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,813,_ctx) ) { + case 1: + { + setState(5558); + lengthOneDimension(); + } + break; + } + setState(5562); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==BINARY) { + { + setState(5561); + match(BINARY); + } + } + + } + break; + case 4: + _localctx = new NationalVaryingStringDataTypeContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(5564); + match(NATIONAL); + setState(5565); + ((NationalVaryingStringDataTypeContext)_localctx).typeName = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==CHARACTER || _la==CHAR) ) { + ((NationalVaryingStringDataTypeContext)_localctx).typeName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5566); + match(VARYING); + setState(5568); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,815,_ctx) ) { + case 1: + { + setState(5567); + lengthOneDimension(); + } + break; + } + setState(5571); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==BINARY) { + { + setState(5570); + match(BINARY); + } + } + + } + break; + case 5: + _localctx = new DimensionDataTypeContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(5573); + ((DimensionDataTypeContext)_localctx).typeName = _input.LT(1); + _la = _input.LA(1); + if ( !(((((_la - 178)) & ~0x3f) == 0 && ((1L << (_la - 178)) & ((1L << (TINYINT - 178)) | (1L << (SMALLINT - 178)) | (1L << (MEDIUMINT - 178)) | (1L << (INT - 178)) | (1L << (INTEGER - 178)) | (1L << (BIGINT - 178)))) != 0)) ) { + ((DimensionDataTypeContext)_localctx).typeName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5575); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,817,_ctx) ) { + case 1: + { + setState(5574); + lengthOneDimension(); + } + break; + } + setState(5578); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,818,_ctx) ) { + case 1: + { + setState(5577); + _la = _input.LA(1); + if ( !(_la==UNSIGNED || _la==SIGNED) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + setState(5581); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ZEROFILL) { + { + setState(5580); + match(ZEROFILL); + } + } + + } + break; + case 6: + _localctx = new DimensionDataTypeContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(5583); + ((DimensionDataTypeContext)_localctx).typeName = match(REAL); + setState(5585); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,820,_ctx) ) { + case 1: + { + setState(5584); + lengthTwoDimension(); + } + break; + } + setState(5588); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,821,_ctx) ) { + case 1: + { + setState(5587); + _la = _input.LA(1); + if ( !(_la==UNSIGNED || _la==SIGNED) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + setState(5591); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ZEROFILL) { + { + setState(5590); + match(ZEROFILL); + } + } + + } + break; + case 7: + _localctx = new DimensionDataTypeContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(5593); + ((DimensionDataTypeContext)_localctx).typeName = match(DOUBLE); + setState(5595); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PRECISION) { + { + setState(5594); + match(PRECISION); + } + } + + setState(5598); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,824,_ctx) ) { + case 1: + { + setState(5597); + lengthTwoDimension(); + } + break; + } + setState(5601); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,825,_ctx) ) { + case 1: + { + setState(5600); + _la = _input.LA(1); + if ( !(_la==UNSIGNED || _la==SIGNED) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + setState(5604); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ZEROFILL) { + { + setState(5603); + match(ZEROFILL); + } + } + + } + break; + case 8: + _localctx = new DimensionDataTypeContext(_localctx); + enterOuterAlt(_localctx, 8); + { + setState(5606); + ((DimensionDataTypeContext)_localctx).typeName = _input.LT(1); + _la = _input.LA(1); + if ( !(((((_la - 193)) & ~0x3f) == 0 && ((1L << (_la - 193)) & ((1L << (FLOAT - 193)) | (1L << (DECIMAL - 193)) | (1L << (DEC - 193)) | (1L << (NUMERIC - 193)))) != 0) || _la==FIXED) ) { + ((DimensionDataTypeContext)_localctx).typeName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5608); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,827,_ctx) ) { + case 1: + { + setState(5607); + lengthTwoOptionalDimension(); + } + break; + } + setState(5611); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,828,_ctx) ) { + case 1: + { + setState(5610); + _la = _input.LA(1); + if ( !(_la==UNSIGNED || _la==SIGNED) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + setState(5614); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ZEROFILL) { + { + setState(5613); + match(ZEROFILL); + } + } + + } + break; + case 9: + _localctx = new SimpleDataTypeContext(_localctx); + enterOuterAlt(_localctx, 9); + { + setState(5616); + ((SimpleDataTypeContext)_localctx).typeName = _input.LT(1); + _la = _input.LA(1); + if ( !(((((_la - 199)) & ~0x3f) == 0 && ((1L << (_la - 199)) & ((1L << (DATE - 199)) | (1L << (TINYBLOB - 199)) | (1L << (BLOB - 199)) | (1L << (MEDIUMBLOB - 199)) | (1L << (LONGBLOB - 199)) | (1L << (SERIAL - 199)))) != 0) || _la==BOOL || _la==BOOLEAN) ) { + ((SimpleDataTypeContext)_localctx).typeName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 10: + _localctx = new DimensionDataTypeContext(_localctx); + enterOuterAlt(_localctx, 10); + { + setState(5617); + ((DimensionDataTypeContext)_localctx).typeName = _input.LT(1); + _la = _input.LA(1); + if ( !(((((_la - 200)) & ~0x3f) == 0 && ((1L << (_la - 200)) & ((1L << (TIME - 200)) | (1L << (TIMESTAMP - 200)) | (1L << (DATETIME - 200)) | (1L << (YEAR - 200)) | (1L << (BINARY - 200)) | (1L << (VARBINARY - 200)))) != 0) || _la==BIT) ) { + ((DimensionDataTypeContext)_localctx).typeName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5619); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,830,_ctx) ) { + case 1: + { + setState(5618); + lengthOneDimension(); + } + break; + } + } + break; + case 11: + _localctx = new CollectionDataTypeContext(_localctx); + enterOuterAlt(_localctx, 11); + { + setState(5621); + ((CollectionDataTypeContext)_localctx).typeName = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==SET || _la==ENUM) ) { + ((CollectionDataTypeContext)_localctx).typeName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5622); + collectionOptions(); + setState(5624); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==BINARY) { + { + setState(5623); + match(BINARY); + } + } + + setState(5632); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,833,_ctx) ) { + case 1: + { + setState(5629); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CHARACTER: + { + setState(5626); + match(CHARACTER); + setState(5627); + match(SET); + } + break; + case CHARSET: + { + setState(5628); + match(CHARSET); + } + break; + default: + throw new NoViableAltException(this); + } + setState(5631); + charsetName(); + } + break; + } + } + break; + case 12: + _localctx = new SpatialDataTypeContext(_localctx); + enterOuterAlt(_localctx, 12); + { + setState(5634); + ((SpatialDataTypeContext)_localctx).typeName = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==JSON || ((((_la - 695)) & ~0x3f) == 0 && ((1L << (_la - 695)) & ((1L << (GEOMETRYCOLLECTION - 695)) | (1L << (GEOMCOLLECTION - 695)) | (1L << (GEOMETRY - 695)) | (1L << (LINESTRING - 695)) | (1L << (MULTILINESTRING - 695)) | (1L << (MULTIPOINT - 695)) | (1L << (MULTIPOLYGON - 695)) | (1L << (POINT - 695)) | (1L << (POLYGON - 695)))) != 0)) ) { + ((SpatialDataTypeContext)_localctx).typeName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CollectionOptionsContext extends ParserRuleContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List STRING_LITERAL() { return getTokens(MySqlParser.STRING_LITERAL); } + public TerminalNode STRING_LITERAL(int i) { + return getToken(MySqlParser.STRING_LITERAL, i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public CollectionOptionsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_collectionOptions; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCollectionOptions(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCollectionOptions(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCollectionOptions(this); + else return visitor.visitChildren(this); + } + } + + public final CollectionOptionsContext collectionOptions() throws RecognitionException { + CollectionOptionsContext _localctx = new CollectionOptionsContext(_ctx, getState()); + enterRule(_localctx, 544, RULE_collectionOptions); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5637); + match(LR_BRACKET); + setState(5638); + match(STRING_LITERAL); + setState(5643); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5639); + match(COMMA); + setState(5640); + match(STRING_LITERAL); + } + } + setState(5645); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(5646); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConvertedDataTypeContext extends ParserRuleContext { + public Token typeName; + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public TerminalNode NCHAR() { return getToken(MySqlParser.NCHAR, 0); } + public LengthOneDimensionContext lengthOneDimension() { + return getRuleContext(LengthOneDimensionContext.class,0); + } + public TerminalNode CHAR() { return getToken(MySqlParser.CHAR, 0); } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public TerminalNode CHARACTER() { return getToken(MySqlParser.CHARACTER, 0); } + public TerminalNode SET() { return getToken(MySqlParser.SET, 0); } + public TerminalNode CHARSET() { return getToken(MySqlParser.CHARSET, 0); } + public TerminalNode DATE() { return getToken(MySqlParser.DATE, 0); } + public TerminalNode DATETIME() { return getToken(MySqlParser.DATETIME, 0); } + public TerminalNode TIME() { return getToken(MySqlParser.TIME, 0); } + public TerminalNode JSON() { return getToken(MySqlParser.JSON, 0); } + public TerminalNode DECIMAL() { return getToken(MySqlParser.DECIMAL, 0); } + public LengthTwoDimensionContext lengthTwoDimension() { + return getRuleContext(LengthTwoDimensionContext.class,0); + } + public TerminalNode SIGNED() { return getToken(MySqlParser.SIGNED, 0); } + public TerminalNode UNSIGNED() { return getToken(MySqlParser.UNSIGNED, 0); } + public TerminalNode INTEGER() { return getToken(MySqlParser.INTEGER, 0); } + public ConvertedDataTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_convertedDataType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterConvertedDataType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitConvertedDataType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitConvertedDataType(this); + else return visitor.visitChildren(this); + } + } + + public final ConvertedDataTypeContext convertedDataType() throws RecognitionException { + ConvertedDataTypeContext _localctx = new ConvertedDataTypeContext(_ctx, getState()); + enterRule(_localctx, 546, RULE_convertedDataType); + int _la; + try { + setState(5673); + _errHandler.sync(this); + switch (_input.LA(1)) { + case BINARY: + case NCHAR: + enterOuterAlt(_localctx, 1); + { + setState(5648); + ((ConvertedDataTypeContext)_localctx).typeName = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==BINARY || _la==NCHAR) ) { + ((ConvertedDataTypeContext)_localctx).typeName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5650); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LR_BRACKET) { + { + setState(5649); + lengthOneDimension(); + } + } + + } + break; + case CHAR: + enterOuterAlt(_localctx, 2); + { + setState(5652); + ((ConvertedDataTypeContext)_localctx).typeName = match(CHAR); + setState(5654); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LR_BRACKET) { + { + setState(5653); + lengthOneDimension(); + } + } + + setState(5662); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==CHARACTER || _la==CHARSET) { + { + setState(5659); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CHARACTER: + { + setState(5656); + match(CHARACTER); + setState(5657); + match(SET); + } + break; + case CHARSET: + { + setState(5658); + match(CHARSET); + } + break; + default: + throw new NoViableAltException(this); + } + setState(5661); + charsetName(); + } + } + + } + break; + case DATE: + case TIME: + case DATETIME: + case JSON: + enterOuterAlt(_localctx, 3); + { + setState(5664); + ((ConvertedDataTypeContext)_localctx).typeName = _input.LT(1); + _la = _input.LA(1); + if ( !(((((_la - 199)) & ~0x3f) == 0 && ((1L << (_la - 199)) & ((1L << (DATE - 199)) | (1L << (TIME - 199)) | (1L << (DATETIME - 199)))) != 0) || _la==JSON) ) { + ((ConvertedDataTypeContext)_localctx).typeName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case DECIMAL: + enterOuterAlt(_localctx, 4); + { + setState(5665); + ((ConvertedDataTypeContext)_localctx).typeName = match(DECIMAL); + setState(5667); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LR_BRACKET) { + { + setState(5666); + lengthTwoDimension(); + } + } + + } + break; + case UNSIGNED: + case SIGNED: + enterOuterAlt(_localctx, 5); + { + setState(5669); + _la = _input.LA(1); + if ( !(_la==UNSIGNED || _la==SIGNED) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5671); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==INTEGER) { + { + setState(5670); + match(INTEGER); + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LengthOneDimensionContext extends ParserRuleContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public LengthOneDimensionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lengthOneDimension; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLengthOneDimension(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLengthOneDimension(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLengthOneDimension(this); + else return visitor.visitChildren(this); + } + } + + public final LengthOneDimensionContext lengthOneDimension() throws RecognitionException { + LengthOneDimensionContext _localctx = new LengthOneDimensionContext(_ctx, getState()); + enterRule(_localctx, 548, RULE_lengthOneDimension); + try { + enterOuterAlt(_localctx, 1); + { + setState(5675); + match(LR_BRACKET); + setState(5676); + decimalLiteral(); + setState(5677); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LengthTwoDimensionContext extends ParserRuleContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List decimalLiteral() { + return getRuleContexts(DecimalLiteralContext.class); + } + public DecimalLiteralContext decimalLiteral(int i) { + return getRuleContext(DecimalLiteralContext.class,i); + } + public TerminalNode COMMA() { return getToken(MySqlParser.COMMA, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public LengthTwoDimensionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lengthTwoDimension; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLengthTwoDimension(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLengthTwoDimension(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLengthTwoDimension(this); + else return visitor.visitChildren(this); + } + } + + public final LengthTwoDimensionContext lengthTwoDimension() throws RecognitionException { + LengthTwoDimensionContext _localctx = new LengthTwoDimensionContext(_ctx, getState()); + enterRule(_localctx, 550, RULE_lengthTwoDimension); + try { + enterOuterAlt(_localctx, 1); + { + setState(5679); + match(LR_BRACKET); + setState(5680); + decimalLiteral(); + setState(5681); + match(COMMA); + setState(5682); + decimalLiteral(); + setState(5683); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LengthTwoOptionalDimensionContext extends ParserRuleContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List decimalLiteral() { + return getRuleContexts(DecimalLiteralContext.class); + } + public DecimalLiteralContext decimalLiteral(int i) { + return getRuleContext(DecimalLiteralContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode COMMA() { return getToken(MySqlParser.COMMA, 0); } + public LengthTwoOptionalDimensionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lengthTwoOptionalDimension; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLengthTwoOptionalDimension(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLengthTwoOptionalDimension(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLengthTwoOptionalDimension(this); + else return visitor.visitChildren(this); + } + } + + public final LengthTwoOptionalDimensionContext lengthTwoOptionalDimension() throws RecognitionException { + LengthTwoOptionalDimensionContext _localctx = new LengthTwoOptionalDimensionContext(_ctx, getState()); + enterRule(_localctx, 552, RULE_lengthTwoOptionalDimension); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5685); + match(LR_BRACKET); + setState(5686); + decimalLiteral(); + setState(5689); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(5687); + match(COMMA); + setState(5688); + decimalLiteral(); + } + } + + setState(5691); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UidListContext extends ParserRuleContext { + public List uid() { + return getRuleContexts(UidContext.class); + } + public UidContext uid(int i) { + return getRuleContext(UidContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public UidListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_uidList; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUidList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUidList(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUidList(this); + else return visitor.visitChildren(this); + } + } + + public final UidListContext uidList() throws RecognitionException { + UidListContext _localctx = new UidListContext(_ctx, getState()); + enterRule(_localctx, 554, RULE_uidList); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(5693); + uid(); + setState(5698); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,844,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(5694); + match(COMMA); + setState(5695); + uid(); + } + } + } + setState(5700); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,844,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TablesContext extends ParserRuleContext { + public List tableName() { + return getRuleContexts(TableNameContext.class); + } + public TableNameContext tableName(int i) { + return getRuleContext(TableNameContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public TablesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tables; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTables(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTables(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTables(this); + else return visitor.visitChildren(this); + } + } + + public final TablesContext tables() throws RecognitionException { + TablesContext _localctx = new TablesContext(_ctx, getState()); + enterRule(_localctx, 556, RULE_tables); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(5701); + tableName(); + setState(5706); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,845,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(5702); + match(COMMA); + setState(5703); + tableName(); + } + } + } + setState(5708); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,845,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IndexColumnNamesContext extends ParserRuleContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List indexColumnName() { + return getRuleContexts(IndexColumnNameContext.class); + } + public IndexColumnNameContext indexColumnName(int i) { + return getRuleContext(IndexColumnNameContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public IndexColumnNamesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_indexColumnNames; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIndexColumnNames(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIndexColumnNames(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIndexColumnNames(this); + else return visitor.visitChildren(this); + } + } + + public final IndexColumnNamesContext indexColumnNames() throws RecognitionException { + IndexColumnNamesContext _localctx = new IndexColumnNamesContext(_ctx, getState()); + enterRule(_localctx, 558, RULE_indexColumnNames); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5709); + match(LR_BRACKET); + setState(5710); + indexColumnName(); + setState(5715); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5711); + match(COMMA); + setState(5712); + indexColumnName(); + } + } + setState(5717); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(5718); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExpressionsContext extends ParserRuleContext { + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public ExpressionsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressions; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterExpressions(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitExpressions(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitExpressions(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionsContext expressions() throws RecognitionException { + ExpressionsContext _localctx = new ExpressionsContext(_ctx, getState()); + enterRule(_localctx, 560, RULE_expressions); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5720); + expression(0); + setState(5725); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5721); + match(COMMA); + setState(5722); + expression(0); + } + } + setState(5727); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExpressionsForUpdateContext extends ParserRuleContext { + public List expressionForUpdate() { + return getRuleContexts(ExpressionForUpdateContext.class); + } + public ExpressionForUpdateContext expressionForUpdate(int i) { + return getRuleContext(ExpressionForUpdateContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public ExpressionsForUpdateContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionsForUpdate; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterExpressionsForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitExpressionsForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitExpressionsForUpdate(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionsForUpdateContext expressionsForUpdate() throws RecognitionException { + ExpressionsForUpdateContext _localctx = new ExpressionsForUpdateContext(_ctx, getState()); + enterRule(_localctx, 562, RULE_expressionsForUpdate); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5728); + expressionForUpdate(0); + setState(5733); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5729); + match(COMMA); + setState(5730); + expressionForUpdate(0); + } + } + setState(5735); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExpressionsWithDefaultsContext extends ParserRuleContext { + public List expressionOrDefault() { + return getRuleContexts(ExpressionOrDefaultContext.class); + } + public ExpressionOrDefaultContext expressionOrDefault(int i) { + return getRuleContext(ExpressionOrDefaultContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public ExpressionsWithDefaultsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionsWithDefaults; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterExpressionsWithDefaults(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitExpressionsWithDefaults(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitExpressionsWithDefaults(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionsWithDefaultsContext expressionsWithDefaults() throws RecognitionException { + ExpressionsWithDefaultsContext _localctx = new ExpressionsWithDefaultsContext(_ctx, getState()); + enterRule(_localctx, 564, RULE_expressionsWithDefaults); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5736); + expressionOrDefault(); + setState(5741); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5737); + match(COMMA); + setState(5738); + expressionOrDefault(); + } + } + setState(5743); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConstantsContext extends ParserRuleContext { + public List constant() { + return getRuleContexts(ConstantContext.class); + } + public ConstantContext constant(int i) { + return getRuleContext(ConstantContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public ConstantsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constants; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterConstants(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitConstants(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitConstants(this); + else return visitor.visitChildren(this); + } + } + + public final ConstantsContext constants() throws RecognitionException { + ConstantsContext _localctx = new ConstantsContext(_ctx, getState()); + enterRule(_localctx, 566, RULE_constants); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5744); + constant(); + setState(5749); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5745); + match(COMMA); + setState(5746); + constant(); + } + } + setState(5751); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SimpleStringsContext extends ParserRuleContext { + public List STRING_LITERAL() { return getTokens(MySqlParser.STRING_LITERAL); } + public TerminalNode STRING_LITERAL(int i) { + return getToken(MySqlParser.STRING_LITERAL, i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public SimpleStringsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simpleStrings; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSimpleStrings(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSimpleStrings(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSimpleStrings(this); + else return visitor.visitChildren(this); + } + } + + public final SimpleStringsContext simpleStrings() throws RecognitionException { + SimpleStringsContext _localctx = new SimpleStringsContext(_ctx, getState()); + enterRule(_localctx, 568, RULE_simpleStrings); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5752); + match(STRING_LITERAL); + setState(5757); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5753); + match(COMMA); + setState(5754); + match(STRING_LITERAL); + } + } + setState(5759); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UserVariablesContext extends ParserRuleContext { + public List LOCAL_ID() { return getTokens(MySqlParser.LOCAL_ID); } + public TerminalNode LOCAL_ID(int i) { + return getToken(MySqlParser.LOCAL_ID, i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public UserVariablesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_userVariables; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUserVariables(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUserVariables(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUserVariables(this); + else return visitor.visitChildren(this); + } + } + + public final UserVariablesContext userVariables() throws RecognitionException { + UserVariablesContext _localctx = new UserVariablesContext(_ctx, getState()); + enterRule(_localctx, 570, RULE_userVariables); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5760); + match(LOCAL_ID); + setState(5765); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5761); + match(COMMA); + setState(5762); + match(LOCAL_ID); + } + } + setState(5767); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DefaultValueContext extends ParserRuleContext { + public TerminalNode NULL_LITERAL() { return getToken(MySqlParser.NULL_LITERAL, 0); } + public ConstantContext constant() { + return getRuleContext(ConstantContext.class,0); + } + public UnaryOperatorContext unaryOperator() { + return getRuleContext(UnaryOperatorContext.class,0); + } + public List currentTimestamp() { + return getRuleContexts(CurrentTimestampContext.class); + } + public CurrentTimestampContext currentTimestamp(int i) { + return getRuleContext(CurrentTimestampContext.class,i); + } + public TerminalNode ON() { return getToken(MySqlParser.ON, 0); } + public TerminalNode UPDATE() { return getToken(MySqlParser.UPDATE, 0); } + public DefaultValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_defaultValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDefaultValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDefaultValue(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDefaultValue(this); + else return visitor.visitChildren(this); + } + } + + public final DefaultValueContext defaultValue() throws RecognitionException { + DefaultValueContext _localctx = new DefaultValueContext(_ctx, getState()); + enterRule(_localctx, 572, RULE_defaultValue); + try { + setState(5779); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,855,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(5768); + match(NULL_LITERAL); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(5770); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,853,_ctx) ) { + case 1: + { + setState(5769); + unaryOperator(); + } + break; + } + setState(5772); + constant(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(5773); + currentTimestamp(); + setState(5777); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,854,_ctx) ) { + case 1: + { + setState(5774); + match(ON); + setState(5775); + match(UPDATE); + setState(5776); + currentTimestamp(); + } + break; + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CurrentTimestampContext extends ParserRuleContext { + public TerminalNode NOW() { return getToken(MySqlParser.NOW, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode CURRENT_TIMESTAMP() { return getToken(MySqlParser.CURRENT_TIMESTAMP, 0); } + public TerminalNode LOCALTIME() { return getToken(MySqlParser.LOCALTIME, 0); } + public TerminalNode LOCALTIMESTAMP() { return getToken(MySqlParser.LOCALTIMESTAMP, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public CurrentTimestampContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_currentTimestamp; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCurrentTimestamp(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCurrentTimestamp(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCurrentTimestamp(this); + else return visitor.visitChildren(this); + } + } + + public final CurrentTimestampContext currentTimestamp() throws RecognitionException { + CurrentTimestampContext _localctx = new CurrentTimestampContext(_ctx, getState()); + enterRule(_localctx, 574, RULE_currentTimestamp); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(5795); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT_TIMESTAMP: + case LOCALTIME: + case LOCALTIMESTAMP: + { + setState(5781); + _la = _input.LA(1); + if ( !(((((_la - 253)) & ~0x3f) == 0 && ((1L << (_la - 253)) & ((1L << (CURRENT_TIMESTAMP - 253)) | (1L << (LOCALTIME - 253)) | (1L << (LOCALTIMESTAMP - 253)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5787); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,857,_ctx) ) { + case 1: + { + setState(5782); + match(LR_BRACKET); + setState(5784); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 1027)) & ~0x3f) == 0 && ((1L << (_la - 1027)) & ((1L << (ZERO_DECIMAL - 1027)) | (1L << (ONE_DECIMAL - 1027)) | (1L << (TWO_DECIMAL - 1027)) | (1L << (DECIMAL_LITERAL - 1027)))) != 0)) { + { + setState(5783); + decimalLiteral(); + } + } + + setState(5786); + match(RR_BRACKET); + } + break; + } + } + break; + case NOW: + { + setState(5789); + match(NOW); + setState(5790); + match(LR_BRACKET); + setState(5792); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 1027)) & ~0x3f) == 0 && ((1L << (_la - 1027)) & ((1L << (ZERO_DECIMAL - 1027)) | (1L << (ONE_DECIMAL - 1027)) | (1L << (TWO_DECIMAL - 1027)) | (1L << (DECIMAL_LITERAL - 1027)))) != 0)) { + { + setState(5791); + decimalLiteral(); + } + } + + setState(5794); + match(RR_BRACKET); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExpressionOrDefaultContext extends ParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode DEFAULT() { return getToken(MySqlParser.DEFAULT, 0); } + public ExpressionOrDefaultContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionOrDefault; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterExpressionOrDefault(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitExpressionOrDefault(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitExpressionOrDefault(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionOrDefaultContext expressionOrDefault() throws RecognitionException { + ExpressionOrDefaultContext _localctx = new ExpressionOrDefaultContext(_ctx, getState()); + enterRule(_localctx, 576, RULE_expressionOrDefault); + try { + setState(5799); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CASE: + case CAST: + case CONVERT: + case CURRENT: + case CURRENT_USER: + case DATABASE: + case DIAGNOSTICS: + case EXISTS: + case FALSE: + case IF: + case INSERT: + case INTERVAL: + case LEFT: + case NOT: + case NULL_LITERAL: + case NUMBER: + case REPLACE: + case RIGHT: + case STACKED: + case TRUE: + case VALUES: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case CHAR: + case BINARY: + case TEXT: + case ENUM: + case SERIAL: + case AVG: + case BIT_AND: + case BIT_OR: + case BIT_XOR: + case COUNT: + case GROUP_CONCAT: + case MAX: + case MIN: + case STD: + case STDDEV: + case STDDEV_POP: + case STDDEV_SAMP: + case SUM: + case VAR_POP: + case VAR_SAMP: + case VARIANCE: + case CURRENT_DATE: + case CURRENT_TIME: + case CURRENT_TIMESTAMP: + case LOCALTIME: + case CURDATE: + case CURTIME: + case DATE_ADD: + case DATE_SUB: + case EXTRACT: + case LOCALTIMESTAMP: + case NOW: + case POSITION: + case SUBSTR: + case SUBSTRING: + case SYSDATE: + case TRIM: + case UTC_DATE: + case UTC_TIME: + case UTC_TIMESTAMP: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case PLUS: + case MINUS: + case EXCLAMATION_SYMBOL: + case BIT_NOT_OP: + case LR_BRACKET: + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case CHARSET_REVERSE_QOUTE_STRING: + case START_NATIONAL_STRING_LITERAL: + case STRING_LITERAL: + case DECIMAL_LITERAL: + case HEXADECIMAL_LITERAL: + case REAL_LITERAL: + case NULL_SPEC_LITERAL: + case BIT_STRING: + case STRING_CHARSET_NAME: + case ID: + case REVERSE_QUOTE_ID: + case LOCAL_ID: + case GLOBAL_ID: + enterOuterAlt(_localctx, 1); + { + setState(5797); + expression(0); + } + break; + case DEFAULT: + enterOuterAlt(_localctx, 2); + { + setState(5798); + match(DEFAULT); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IfExistsContext extends ParserRuleContext { + public TerminalNode IF() { return getToken(MySqlParser.IF, 0); } + public TerminalNode EXISTS() { return getToken(MySqlParser.EXISTS, 0); } + public IfExistsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ifExists; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIfExists(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIfExists(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIfExists(this); + else return visitor.visitChildren(this); + } + } + + public final IfExistsContext ifExists() throws RecognitionException { + IfExistsContext _localctx = new IfExistsContext(_ctx, getState()); + enterRule(_localctx, 578, RULE_ifExists); + try { + enterOuterAlt(_localctx, 1); + { + setState(5801); + match(IF); + setState(5802); + match(EXISTS); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IfNotExistsContext extends ParserRuleContext { + public TerminalNode IF() { return getToken(MySqlParser.IF, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public TerminalNode EXISTS() { return getToken(MySqlParser.EXISTS, 0); } + public IfNotExistsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ifNotExists; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIfNotExists(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIfNotExists(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIfNotExists(this); + else return visitor.visitChildren(this); + } + } + + public final IfNotExistsContext ifNotExists() throws RecognitionException { + IfNotExistsContext _localctx = new IfNotExistsContext(_ctx, getState()); + enterRule(_localctx, 580, RULE_ifNotExists); + try { + enterOuterAlt(_localctx, 1); + { + setState(5804); + match(IF); + setState(5805); + match(NOT); + setState(5806); + match(EXISTS); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionCallContext extends ParserRuleContext { + public FunctionCallContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionCall; } + + public FunctionCallContext() { } + public void copyFrom(FunctionCallContext ctx) { + super.copyFrom(ctx); + } + } + public static class SpecificFunctionCallContext extends FunctionCallContext { + public SpecificFunctionContext specificFunction() { + return getRuleContext(SpecificFunctionContext.class,0); + } + public SpecificFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSpecificFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSpecificFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSpecificFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class PasswordFunctionCallContext extends FunctionCallContext { + public PasswordFunctionClauseContext passwordFunctionClause() { + return getRuleContext(PasswordFunctionClauseContext.class,0); + } + public PasswordFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPasswordFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPasswordFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPasswordFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class UdfFunctionCallContext extends FunctionCallContext { + public FullIdContext fullId() { + return getRuleContext(FullIdContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public FunctionArgsContext functionArgs() { + return getRuleContext(FunctionArgsContext.class,0); + } + public UdfFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUdfFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUdfFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUdfFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class AggregateFunctionCallContext extends FunctionCallContext { + public AggregateWindowedFunctionContext aggregateWindowedFunction() { + return getRuleContext(AggregateWindowedFunctionContext.class,0); + } + public AggregateFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAggregateFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAggregateFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAggregateFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class ScalarFunctionCallContext extends FunctionCallContext { + public ScalarFunctionNameContext scalarFunctionName() { + return getRuleContext(ScalarFunctionNameContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public FunctionArgsContext functionArgs() { + return getRuleContext(FunctionArgsContext.class,0); + } + public ScalarFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterScalarFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitScalarFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitScalarFunctionCall(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionCallContext functionCall() throws RecognitionException { + FunctionCallContext _localctx = new FunctionCallContext(_ctx, getState()); + enterRule(_localctx, 582, RULE_functionCall); + int _la; + try { + setState(5825); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,863,_ctx) ) { + case 1: + _localctx = new SpecificFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(5808); + specificFunction(); + } + break; + case 2: + _localctx = new AggregateFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(5809); + aggregateWindowedFunction(); + } + break; + case 3: + _localctx = new ScalarFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(5810); + scalarFunctionName(); + setState(5811); + match(LR_BRACKET); + setState(5813); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CASE) | (1L << CAST) | (1L << CONVERT) | (1L << CURRENT) | (1L << CURRENT_USER) | (1L << DATABASE) | (1L << DIAGNOSTICS) | (1L << EXISTS) | (1L << FALSE))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (IF - 69)) | (1L << (INSERT - 69)) | (1L << (INTERVAL - 69)) | (1L << (LEFT - 69)) | (1L << (NOT - 69)) | (1L << (NULL_LITERAL - 69)) | (1L << (NUMBER - 69)) | (1L << (REPLACE - 69)))) != 0) || ((((_la - 133)) & ~0x3f) == 0 && ((1L << (_la - 133)) & ((1L << (RIGHT - 133)) | (1L << (STACKED - 133)) | (1L << (TRUE - 133)) | (1L << (VALUES - 133)))) != 0) || ((((_la - 199)) & ~0x3f) == 0 && ((1L << (_la - 199)) & ((1L << (DATE - 199)) | (1L << (TIME - 199)) | (1L << (TIMESTAMP - 199)) | (1L << (DATETIME - 199)) | (1L << (YEAR - 199)) | (1L << (CHAR - 199)) | (1L << (BINARY - 199)) | (1L << (TEXT - 199)) | (1L << (ENUM - 199)) | (1L << (SERIAL - 199)) | (1L << (AVG - 199)) | (1L << (BIT_AND - 199)) | (1L << (BIT_OR - 199)) | (1L << (BIT_XOR - 199)) | (1L << (COUNT - 199)) | (1L << (GROUP_CONCAT - 199)) | (1L << (MAX - 199)) | (1L << (MIN - 199)) | (1L << (STD - 199)) | (1L << (STDDEV - 199)) | (1L << (STDDEV_POP - 199)) | (1L << (STDDEV_SAMP - 199)) | (1L << (SUM - 199)) | (1L << (VAR_POP - 199)) | (1L << (VAR_SAMP - 199)) | (1L << (VARIANCE - 199)) | (1L << (CURRENT_DATE - 199)) | (1L << (CURRENT_TIME - 199)) | (1L << (CURRENT_TIMESTAMP - 199)) | (1L << (LOCALTIME - 199)) | (1L << (CURDATE - 199)) | (1L << (CURTIME - 199)) | (1L << (DATE_ADD - 199)) | (1L << (DATE_SUB - 199)) | (1L << (EXTRACT - 199)) | (1L << (LOCALTIMESTAMP - 199)) | (1L << (NOW - 199)) | (1L << (POSITION - 199)))) != 0) || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & ((1L << (SUBSTR - 263)) | (1L << (SUBSTRING - 263)) | (1L << (SYSDATE - 263)) | (1L << (TRIM - 263)) | (1L << (UTC_DATE - 263)) | (1L << (UTC_TIME - 263)) | (1L << (UTC_TIMESTAMP - 263)) | (1L << (ACCOUNT - 263)) | (1L << (ACTION - 263)) | (1L << (AFTER - 263)) | (1L << (AGGREGATE - 263)) | (1L << (ALGORITHM - 263)) | (1L << (ANY - 263)) | (1L << (AT - 263)) | (1L << (AUTHORS - 263)) | (1L << (AUTOCOMMIT - 263)) | (1L << (AUTOEXTEND_SIZE - 263)) | (1L << (AUTO_INCREMENT - 263)) | (1L << (AVG_ROW_LENGTH - 263)) | (1L << (BEGIN - 263)) | (1L << (BINLOG - 263)) | (1L << (BIT - 263)) | (1L << (BLOCK - 263)) | (1L << (BOOL - 263)) | (1L << (BOOLEAN - 263)) | (1L << (BTREE - 263)) | (1L << (CACHE - 263)) | (1L << (CASCADED - 263)) | (1L << (CHAIN - 263)) | (1L << (CHANGED - 263)) | (1L << (CHANNEL - 263)) | (1L << (CHECKSUM - 263)) | (1L << (PAGE_CHECKSUM - 263)) | (1L << (CIPHER - 263)) | (1L << (CLASS_ORIGIN - 263)) | (1L << (CLIENT - 263)) | (1L << (CLOSE - 263)) | (1L << (COALESCE - 263)) | (1L << (CODE - 263)) | (1L << (COLUMNS - 263)) | (1L << (COLUMN_FORMAT - 263)) | (1L << (COLUMN_NAME - 263)) | (1L << (COMMENT - 263)) | (1L << (COMMIT - 263)) | (1L << (COMPACT - 263)) | (1L << (COMPLETION - 263)) | (1L << (COMPRESSED - 263)) | (1L << (COMPRESSION - 263)) | (1L << (CONCURRENT - 263)) | (1L << (CONNECTION - 263)) | (1L << (CONSISTENT - 263)) | (1L << (CONSTRAINT_CATALOG - 263)) | (1L << (CONSTRAINT_SCHEMA - 263)) | (1L << (CONSTRAINT_NAME - 263)) | (1L << (CONTAINS - 263)) | (1L << (CONTEXT - 263)) | (1L << (CONTRIBUTORS - 263)) | (1L << (COPY - 263)) | (1L << (CPU - 263)) | (1L << (CURSOR_NAME - 263)) | (1L << (DATA - 263)) | (1L << (DATAFILE - 263)) | (1L << (DEALLOCATE - 263)) | (1L << (DEFAULT_AUTH - 263)))) != 0) || ((((_la - 327)) & ~0x3f) == 0 && ((1L << (_la - 327)) & ((1L << (DEFINER - 327)) | (1L << (DELAY_KEY_WRITE - 327)) | (1L << (DES_KEY_FILE - 327)) | (1L << (DIRECTORY - 327)) | (1L << (DISABLE - 327)) | (1L << (DISCARD - 327)) | (1L << (DISK - 327)) | (1L << (DO - 327)) | (1L << (DUMPFILE - 327)) | (1L << (DUPLICATE - 327)) | (1L << (DYNAMIC - 327)) | (1L << (ENABLE - 327)) | (1L << (ENCRYPTION - 327)) | (1L << (END - 327)) | (1L << (ENDS - 327)) | (1L << (ENGINE - 327)) | (1L << (ENGINES - 327)) | (1L << (ERROR - 327)) | (1L << (ERRORS - 327)) | (1L << (ESCAPE - 327)) | (1L << (EVEN - 327)) | (1L << (EVENT - 327)) | (1L << (EVENTS - 327)) | (1L << (EVERY - 327)) | (1L << (EXCHANGE - 327)) | (1L << (EXCLUSIVE - 327)) | (1L << (EXPIRE - 327)) | (1L << (EXPORT - 327)) | (1L << (EXTENDED - 327)) | (1L << (EXTENT_SIZE - 327)) | (1L << (FAST - 327)) | (1L << (FAULTS - 327)) | (1L << (FIELDS - 327)) | (1L << (FILE_BLOCK_SIZE - 327)) | (1L << (FILTER - 327)) | (1L << (FIRST - 327)) | (1L << (FIXED - 327)) | (1L << (FLUSH - 327)) | (1L << (FOLLOWS - 327)) | (1L << (FOUND - 327)) | (1L << (FULL - 327)) | (1L << (FUNCTION - 327)) | (1L << (GENERAL - 327)) | (1L << (GLOBAL - 327)) | (1L << (GRANTS - 327)) | (1L << (GROUP_REPLICATION - 327)) | (1L << (HANDLER - 327)) | (1L << (HASH - 327)) | (1L << (HELP - 327)) | (1L << (HOST - 327)) | (1L << (HOSTS - 327)) | (1L << (IDENTIFIED - 327)) | (1L << (IGNORE_SERVER_IDS - 327)) | (1L << (IMPORT - 327)) | (1L << (INDEXES - 327)) | (1L << (INITIAL_SIZE - 327)) | (1L << (INPLACE - 327)) | (1L << (INSERT_METHOD - 327)) | (1L << (INSTALL - 327)) | (1L << (INSTANCE - 327)) | (1L << (INVISIBLE - 327)) | (1L << (INVOKER - 327)) | (1L << (IO - 327)) | (1L << (IO_THREAD - 327)))) != 0) || ((((_la - 391)) & ~0x3f) == 0 && ((1L << (_la - 391)) & ((1L << (IPC - 391)) | (1L << (ISOLATION - 391)) | (1L << (ISSUER - 391)) | (1L << (JSON - 391)) | (1L << (KEY_BLOCK_SIZE - 391)) | (1L << (LANGUAGE - 391)) | (1L << (LAST - 391)) | (1L << (LEAVES - 391)) | (1L << (LESS - 391)) | (1L << (LEVEL - 391)) | (1L << (LIST - 391)) | (1L << (LOCAL - 391)) | (1L << (LOGFILE - 391)) | (1L << (LOGS - 391)) | (1L << (MASTER - 391)) | (1L << (MASTER_AUTO_POSITION - 391)) | (1L << (MASTER_CONNECT_RETRY - 391)) | (1L << (MASTER_DELAY - 391)) | (1L << (MASTER_HEARTBEAT_PERIOD - 391)) | (1L << (MASTER_HOST - 391)) | (1L << (MASTER_LOG_FILE - 391)) | (1L << (MASTER_LOG_POS - 391)) | (1L << (MASTER_PASSWORD - 391)) | (1L << (MASTER_PORT - 391)) | (1L << (MASTER_RETRY_COUNT - 391)) | (1L << (MASTER_SSL - 391)) | (1L << (MASTER_SSL_CA - 391)) | (1L << (MASTER_SSL_CAPATH - 391)) | (1L << (MASTER_SSL_CERT - 391)) | (1L << (MASTER_SSL_CIPHER - 391)) | (1L << (MASTER_SSL_CRL - 391)) | (1L << (MASTER_SSL_CRLPATH - 391)) | (1L << (MASTER_SSL_KEY - 391)) | (1L << (MASTER_TLS_VERSION - 391)) | (1L << (MASTER_USER - 391)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 391)) | (1L << (MAX_QUERIES_PER_HOUR - 391)) | (1L << (MAX_ROWS - 391)) | (1L << (MAX_SIZE - 391)) | (1L << (MAX_UPDATES_PER_HOUR - 391)) | (1L << (MAX_USER_CONNECTIONS - 391)) | (1L << (MEDIUM - 391)) | (1L << (MERGE - 391)) | (1L << (MESSAGE_TEXT - 391)) | (1L << (MID - 391)) | (1L << (MIGRATE - 391)) | (1L << (MIN_ROWS - 391)) | (1L << (MODE - 391)) | (1L << (MODIFY - 391)) | (1L << (MUTEX - 391)) | (1L << (MYSQL - 391)) | (1L << (MYSQL_ERRNO - 391)) | (1L << (NAME - 391)) | (1L << (NAMES - 391)) | (1L << (NCHAR - 391)) | (1L << (NEVER - 391)) | (1L << (NEXT - 391)) | (1L << (NO - 391)) | (1L << (NODEGROUP - 391)) | (1L << (NONE - 391)) | (1L << (OFFLINE - 391)) | (1L << (OFFSET - 391)))) != 0) || ((((_la - 455)) & ~0x3f) == 0 && ((1L << (_la - 455)) & ((1L << (OJ - 455)) | (1L << (OLD_PASSWORD - 455)) | (1L << (ONE - 455)) | (1L << (ONLINE - 455)) | (1L << (ONLY - 455)) | (1L << (OPEN - 455)) | (1L << (OPTIMIZER_COSTS - 455)) | (1L << (OPTIONS - 455)) | (1L << (OWNER - 455)) | (1L << (PACK_KEYS - 455)) | (1L << (PAGE - 455)) | (1L << (PARSER - 455)) | (1L << (PARTIAL - 455)) | (1L << (PARTITIONING - 455)) | (1L << (PARTITIONS - 455)) | (1L << (PASSWORD - 455)) | (1L << (PHASE - 455)) | (1L << (PLUGIN - 455)) | (1L << (PLUGIN_DIR - 455)) | (1L << (PLUGINS - 455)) | (1L << (PORT - 455)) | (1L << (PRECEDES - 455)) | (1L << (PREPARE - 455)) | (1L << (PRESERVE - 455)) | (1L << (PREV - 455)) | (1L << (PROCESSLIST - 455)) | (1L << (PROFILE - 455)) | (1L << (PROFILES - 455)) | (1L << (PROXY - 455)) | (1L << (QUERY - 455)) | (1L << (QUICK - 455)) | (1L << (REBUILD - 455)) | (1L << (RECOVER - 455)) | (1L << (REDO_BUFFER_SIZE - 455)) | (1L << (REDUNDANT - 455)) | (1L << (RELAY - 455)) | (1L << (RELAY_LOG_FILE - 455)) | (1L << (RELAY_LOG_POS - 455)) | (1L << (RELAYLOG - 455)) | (1L << (REMOVE - 455)) | (1L << (REORGANIZE - 455)) | (1L << (REPAIR - 455)) | (1L << (REPLICATE_DO_DB - 455)) | (1L << (REPLICATE_DO_TABLE - 455)) | (1L << (REPLICATE_IGNORE_DB - 455)) | (1L << (REPLICATE_IGNORE_TABLE - 455)) | (1L << (REPLICATE_REWRITE_DB - 455)) | (1L << (REPLICATE_WILD_DO_TABLE - 455)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 455)) | (1L << (REPLICATION - 455)) | (1L << (RESET - 455)) | (1L << (RESUME - 455)) | (1L << (RETURNED_SQLSTATE - 455)) | (1L << (RETURNS - 455)) | (1L << (ROLLBACK - 455)) | (1L << (ROLLUP - 455)) | (1L << (ROTATE - 455)) | (1L << (ROW - 455)) | (1L << (ROWS - 455)) | (1L << (ROW_FORMAT - 455)) | (1L << (SAVEPOINT - 455)) | (1L << (SCHEDULE - 455)) | (1L << (SECURITY - 455)))) != 0) || ((((_la - 519)) & ~0x3f) == 0 && ((1L << (_la - 519)) & ((1L << (SERVER - 519)) | (1L << (SESSION - 519)) | (1L << (SHARE - 519)) | (1L << (SHARED - 519)) | (1L << (SIGNED - 519)) | (1L << (SIMPLE - 519)) | (1L << (SLAVE - 519)) | (1L << (SLOW - 519)) | (1L << (SNAPSHOT - 519)) | (1L << (SOCKET - 519)) | (1L << (SOME - 519)) | (1L << (SONAME - 519)) | (1L << (SOUNDS - 519)) | (1L << (SOURCE - 519)) | (1L << (SQL_AFTER_GTIDS - 519)) | (1L << (SQL_AFTER_MTS_GAPS - 519)) | (1L << (SQL_BEFORE_GTIDS - 519)) | (1L << (SQL_BUFFER_RESULT - 519)) | (1L << (SQL_CACHE - 519)) | (1L << (SQL_NO_CACHE - 519)) | (1L << (SQL_THREAD - 519)) | (1L << (START - 519)) | (1L << (STARTS - 519)) | (1L << (STATS_AUTO_RECALC - 519)) | (1L << (STATS_PERSISTENT - 519)) | (1L << (STATS_SAMPLE_PAGES - 519)) | (1L << (STATUS - 519)) | (1L << (STOP - 519)) | (1L << (STORAGE - 519)) | (1L << (STRING - 519)) | (1L << (SUBCLASS_ORIGIN - 519)) | (1L << (SUBJECT - 519)) | (1L << (SUBPARTITION - 519)) | (1L << (SUBPARTITIONS - 519)) | (1L << (SUSPEND - 519)) | (1L << (SWAPS - 519)) | (1L << (SWITCHES - 519)) | (1L << (TABLE_NAME - 519)) | (1L << (TABLESPACE - 519)) | (1L << (TEMPORARY - 519)) | (1L << (TEMPTABLE - 519)) | (1L << (THAN - 519)) | (1L << (TRADITIONAL - 519)) | (1L << (TRANSACTION - 519)) | (1L << (TRIGGERS - 519)) | (1L << (TRUNCATE - 519)) | (1L << (UNDEFINED - 519)) | (1L << (UNDOFILE - 519)) | (1L << (UNDO_BUFFER_SIZE - 519)) | (1L << (UNINSTALL - 519)) | (1L << (UNKNOWN - 519)) | (1L << (UNTIL - 519)) | (1L << (UPGRADE - 519)) | (1L << (USER - 519)) | (1L << (USE_FRM - 519)) | (1L << (USER_RESOURCES - 519)) | (1L << (VALIDATION - 519)) | (1L << (VALUE - 519)) | (1L << (VARIABLES - 519)) | (1L << (VIEW - 519)) | (1L << (VISIBLE - 519)))) != 0) || ((((_la - 583)) & ~0x3f) == 0 && ((1L << (_la - 583)) & ((1L << (WAIT - 583)) | (1L << (WARNINGS - 583)) | (1L << (WITHOUT - 583)) | (1L << (WORK - 583)) | (1L << (WRAPPER - 583)) | (1L << (X509 - 583)) | (1L << (XA - 583)) | (1L << (XML - 583)) | (1L << (INTERNAL - 583)) | (1L << (QUARTER - 583)) | (1L << (MONTH - 583)) | (1L << (DAY - 583)) | (1L << (HOUR - 583)) | (1L << (MINUTE - 583)) | (1L << (WEEK - 583)) | (1L << (SECOND - 583)) | (1L << (MICROSECOND - 583)) | (1L << (TABLES - 583)) | (1L << (ROUTINE - 583)) | (1L << (EXECUTE - 583)) | (1L << (FILE - 583)) | (1L << (PROCESS - 583)) | (1L << (RELOAD - 583)) | (1L << (SHUTDOWN - 583)) | (1L << (SUPER - 583)) | (1L << (PRIVILEGES - 583)) | (1L << (SESSION_VARIABLES_ADMIN - 583)) | (1L << (ARMSCII8 - 583)) | (1L << (ASCII - 583)) | (1L << (BIG5 - 583)) | (1L << (CP1250 - 583)) | (1L << (CP1251 - 583)) | (1L << (CP1256 - 583)) | (1L << (CP1257 - 583)) | (1L << (CP850 - 583)))) != 0) || ((((_la - 647)) & ~0x3f) == 0 && ((1L << (_la - 647)) & ((1L << (CP852 - 647)) | (1L << (CP866 - 647)) | (1L << (CP932 - 647)) | (1L << (DEC8 - 647)) | (1L << (EUCJPMS - 647)) | (1L << (EUCKR - 647)) | (1L << (GB2312 - 647)) | (1L << (GBK - 647)) | (1L << (GEOSTD8 - 647)) | (1L << (GREEK - 647)) | (1L << (HEBREW - 647)) | (1L << (HP8 - 647)) | (1L << (KEYBCS2 - 647)) | (1L << (KOI8R - 647)) | (1L << (KOI8U - 647)) | (1L << (LATIN1 - 647)) | (1L << (LATIN2 - 647)) | (1L << (LATIN5 - 647)) | (1L << (LATIN7 - 647)) | (1L << (MACCE - 647)) | (1L << (MACROMAN - 647)) | (1L << (SJIS - 647)) | (1L << (SWE7 - 647)) | (1L << (TIS620 - 647)) | (1L << (UCS2 - 647)) | (1L << (UJIS - 647)) | (1L << (UTF16 - 647)) | (1L << (UTF16LE - 647)) | (1L << (UTF32 - 647)) | (1L << (UTF8 - 647)) | (1L << (UTF8MB3 - 647)) | (1L << (UTF8MB4 - 647)) | (1L << (ARCHIVE - 647)) | (1L << (BLACKHOLE - 647)) | (1L << (CSV - 647)) | (1L << (FEDERATED - 647)) | (1L << (INNODB - 647)) | (1L << (MEMORY - 647)) | (1L << (MRG_MYISAM - 647)) | (1L << (MYISAM - 647)) | (1L << (NDB - 647)) | (1L << (NDBCLUSTER - 647)) | (1L << (PERFORMANCE_SCHEMA - 647)) | (1L << (TOKUDB - 647)) | (1L << (REPEATABLE - 647)) | (1L << (COMMITTED - 647)) | (1L << (UNCOMMITTED - 647)) | (1L << (SERIALIZABLE - 647)) | (1L << (GEOMETRYCOLLECTION - 647)) | (1L << (LINESTRING - 647)) | (1L << (MULTILINESTRING - 647)) | (1L << (MULTIPOINT - 647)) | (1L << (MULTIPOLYGON - 647)) | (1L << (POINT - 647)) | (1L << (POLYGON - 647)) | (1L << (ABS - 647)) | (1L << (ACOS - 647)) | (1L << (ADDDATE - 647)) | (1L << (ADDTIME - 647)) | (1L << (AES_DECRYPT - 647)) | (1L << (AES_ENCRYPT - 647)) | (1L << (AREA - 647)))) != 0) || ((((_la - 711)) & ~0x3f) == 0 && ((1L << (_la - 711)) & ((1L << (ASBINARY - 711)) | (1L << (ASIN - 711)) | (1L << (ASTEXT - 711)) | (1L << (ASWKB - 711)) | (1L << (ASWKT - 711)) | (1L << (ASYMMETRIC_DECRYPT - 711)) | (1L << (ASYMMETRIC_DERIVE - 711)) | (1L << (ASYMMETRIC_ENCRYPT - 711)) | (1L << (ASYMMETRIC_SIGN - 711)) | (1L << (ASYMMETRIC_VERIFY - 711)) | (1L << (ATAN - 711)) | (1L << (ATAN2 - 711)) | (1L << (BENCHMARK - 711)) | (1L << (BIN - 711)) | (1L << (BIT_COUNT - 711)) | (1L << (BIT_LENGTH - 711)) | (1L << (BUFFER - 711)) | (1L << (CATALOG_NAME - 711)) | (1L << (CEIL - 711)) | (1L << (CEILING - 711)) | (1L << (CENTROID - 711)) | (1L << (CHARACTER_LENGTH - 711)) | (1L << (CHARSET - 711)) | (1L << (CHAR_LENGTH - 711)) | (1L << (COERCIBILITY - 711)) | (1L << (COLLATION - 711)) | (1L << (COMPRESS - 711)) | (1L << (CONCAT - 711)) | (1L << (CONCAT_WS - 711)) | (1L << (CONNECTION_ID - 711)) | (1L << (CONV - 711)) | (1L << (CONVERT_TZ - 711)) | (1L << (COS - 711)) | (1L << (COT - 711)) | (1L << (CRC32 - 711)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 711)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 711)) | (1L << (CREATE_DH_PARAMETERS - 711)) | (1L << (CREATE_DIGEST - 711)) | (1L << (CROSSES - 711)) | (1L << (DATEDIFF - 711)) | (1L << (DATE_FORMAT - 711)) | (1L << (DAYNAME - 711)) | (1L << (DAYOFMONTH - 711)) | (1L << (DAYOFWEEK - 711)) | (1L << (DAYOFYEAR - 711)) | (1L << (DECODE - 711)) | (1L << (DEGREES - 711)) | (1L << (DES_DECRYPT - 711)) | (1L << (DES_ENCRYPT - 711)) | (1L << (DIMENSION - 711)) | (1L << (DISJOINT - 711)) | (1L << (ELT - 711)) | (1L << (ENCODE - 711)) | (1L << (ENCRYPT - 711)) | (1L << (ENDPOINT - 711)) | (1L << (ENVELOPE - 711)) | (1L << (EQUALS - 711)) | (1L << (EXP - 711)) | (1L << (EXPORT_SET - 711)) | (1L << (EXTERIORRING - 711)) | (1L << (EXTRACTVALUE - 711)) | (1L << (FIELD - 711)) | (1L << (FIND_IN_SET - 711)))) != 0) || ((((_la - 775)) & ~0x3f) == 0 && ((1L << (_la - 775)) & ((1L << (FLOOR - 775)) | (1L << (FORMAT - 775)) | (1L << (FOUND_ROWS - 775)) | (1L << (FROM_BASE64 - 775)) | (1L << (FROM_DAYS - 775)) | (1L << (FROM_UNIXTIME - 775)) | (1L << (GEOMCOLLFROMTEXT - 775)) | (1L << (GEOMCOLLFROMWKB - 775)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 775)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 775)) | (1L << (GEOMETRYFROMTEXT - 775)) | (1L << (GEOMETRYFROMWKB - 775)) | (1L << (GEOMETRYN - 775)) | (1L << (GEOMETRYTYPE - 775)) | (1L << (GEOMFROMTEXT - 775)) | (1L << (GEOMFROMWKB - 775)) | (1L << (GET_FORMAT - 775)) | (1L << (GET_LOCK - 775)) | (1L << (GLENGTH - 775)) | (1L << (GREATEST - 775)) | (1L << (GTID_SUBSET - 775)) | (1L << (GTID_SUBTRACT - 775)) | (1L << (HEX - 775)) | (1L << (IFNULL - 775)) | (1L << (INET6_ATON - 775)) | (1L << (INET6_NTOA - 775)) | (1L << (INET_ATON - 775)) | (1L << (INET_NTOA - 775)) | (1L << (INSTR - 775)) | (1L << (INTERIORRINGN - 775)) | (1L << (INTERSECTS - 775)) | (1L << (ISCLOSED - 775)) | (1L << (ISEMPTY - 775)) | (1L << (ISNULL - 775)) | (1L << (ISSIMPLE - 775)) | (1L << (IS_FREE_LOCK - 775)) | (1L << (IS_IPV4 - 775)) | (1L << (IS_IPV4_COMPAT - 775)) | (1L << (IS_IPV4_MAPPED - 775)) | (1L << (IS_IPV6 - 775)) | (1L << (IS_USED_LOCK - 775)) | (1L << (LAST_INSERT_ID - 775)) | (1L << (LCASE - 775)) | (1L << (LEAST - 775)) | (1L << (LENGTH - 775)) | (1L << (LINEFROMTEXT - 775)) | (1L << (LINEFROMWKB - 775)) | (1L << (LINESTRINGFROMTEXT - 775)) | (1L << (LINESTRINGFROMWKB - 775)) | (1L << (LN - 775)) | (1L << (LOAD_FILE - 775)) | (1L << (LOCATE - 775)) | (1L << (LOG - 775)) | (1L << (LOG10 - 775)) | (1L << (LOG2 - 775)) | (1L << (LOWER - 775)) | (1L << (LPAD - 775)) | (1L << (LTRIM - 775)) | (1L << (MAKEDATE - 775)) | (1L << (MAKETIME - 775)) | (1L << (MAKE_SET - 775)) | (1L << (MASTER_POS_WAIT - 775)) | (1L << (MBRCONTAINS - 775)) | (1L << (MBRDISJOINT - 775)))) != 0) || ((((_la - 839)) & ~0x3f) == 0 && ((1L << (_la - 839)) & ((1L << (MBREQUAL - 839)) | (1L << (MBRINTERSECTS - 839)) | (1L << (MBROVERLAPS - 839)) | (1L << (MBRTOUCHES - 839)) | (1L << (MBRWITHIN - 839)) | (1L << (MD5 - 839)) | (1L << (MLINEFROMTEXT - 839)) | (1L << (MLINEFROMWKB - 839)) | (1L << (MONTHNAME - 839)) | (1L << (MPOINTFROMTEXT - 839)) | (1L << (MPOINTFROMWKB - 839)) | (1L << (MPOLYFROMTEXT - 839)) | (1L << (MPOLYFROMWKB - 839)) | (1L << (MULTILINESTRINGFROMTEXT - 839)) | (1L << (MULTILINESTRINGFROMWKB - 839)) | (1L << (MULTIPOINTFROMTEXT - 839)) | (1L << (MULTIPOINTFROMWKB - 839)) | (1L << (MULTIPOLYGONFROMTEXT - 839)) | (1L << (MULTIPOLYGONFROMWKB - 839)) | (1L << (NAME_CONST - 839)) | (1L << (NULLIF - 839)) | (1L << (NUMGEOMETRIES - 839)) | (1L << (NUMINTERIORRINGS - 839)) | (1L << (NUMPOINTS - 839)) | (1L << (OCT - 839)) | (1L << (OCTET_LENGTH - 839)) | (1L << (ORD - 839)) | (1L << (OVERLAPS - 839)) | (1L << (PERIOD_ADD - 839)) | (1L << (PERIOD_DIFF - 839)) | (1L << (PI - 839)) | (1L << (POINTFROMTEXT - 839)) | (1L << (POINTFROMWKB - 839)) | (1L << (POINTN - 839)) | (1L << (POLYFROMTEXT - 839)) | (1L << (POLYFROMWKB - 839)) | (1L << (POLYGONFROMTEXT - 839)) | (1L << (POLYGONFROMWKB - 839)) | (1L << (POW - 839)) | (1L << (POWER - 839)) | (1L << (QUOTE - 839)) | (1L << (RADIANS - 839)) | (1L << (RAND - 839)) | (1L << (RANDOM_BYTES - 839)) | (1L << (RELEASE_LOCK - 839)) | (1L << (REVERSE - 839)) | (1L << (ROUND - 839)) | (1L << (ROW_COUNT - 839)) | (1L << (RPAD - 839)) | (1L << (RTRIM - 839)) | (1L << (SEC_TO_TIME - 839)) | (1L << (SESSION_USER - 839)) | (1L << (SHA - 839)) | (1L << (SHA1 - 839)) | (1L << (SHA2 - 839)) | (1L << (SCHEMA_NAME - 839)) | (1L << (SIGN - 839)) | (1L << (SIN - 839)) | (1L << (SLEEP - 839)) | (1L << (SOUNDEX - 839)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 839)) | (1L << (SQRT - 839)) | (1L << (SRID - 839)) | (1L << (STARTPOINT - 839)))) != 0) || ((((_la - 903)) & ~0x3f) == 0 && ((1L << (_la - 903)) & ((1L << (STRCMP - 903)) | (1L << (STR_TO_DATE - 903)) | (1L << (ST_AREA - 903)) | (1L << (ST_ASBINARY - 903)) | (1L << (ST_ASTEXT - 903)) | (1L << (ST_ASWKB - 903)) | (1L << (ST_ASWKT - 903)) | (1L << (ST_BUFFER - 903)) | (1L << (ST_CENTROID - 903)) | (1L << (ST_CONTAINS - 903)) | (1L << (ST_CROSSES - 903)) | (1L << (ST_DIFFERENCE - 903)) | (1L << (ST_DIMENSION - 903)) | (1L << (ST_DISJOINT - 903)) | (1L << (ST_DISTANCE - 903)) | (1L << (ST_ENDPOINT - 903)) | (1L << (ST_ENVELOPE - 903)) | (1L << (ST_EQUALS - 903)) | (1L << (ST_EXTERIORRING - 903)) | (1L << (ST_GEOMCOLLFROMTEXT - 903)) | (1L << (ST_GEOMCOLLFROMTXT - 903)) | (1L << (ST_GEOMCOLLFROMWKB - 903)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 903)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 903)) | (1L << (ST_GEOMETRYFROMTEXT - 903)) | (1L << (ST_GEOMETRYFROMWKB - 903)) | (1L << (ST_GEOMETRYN - 903)) | (1L << (ST_GEOMETRYTYPE - 903)) | (1L << (ST_GEOMFROMTEXT - 903)) | (1L << (ST_GEOMFROMWKB - 903)) | (1L << (ST_INTERIORRINGN - 903)) | (1L << (ST_INTERSECTION - 903)) | (1L << (ST_INTERSECTS - 903)) | (1L << (ST_ISCLOSED - 903)) | (1L << (ST_ISEMPTY - 903)) | (1L << (ST_ISSIMPLE - 903)) | (1L << (ST_LINEFROMTEXT - 903)) | (1L << (ST_LINEFROMWKB - 903)) | (1L << (ST_LINESTRINGFROMTEXT - 903)) | (1L << (ST_LINESTRINGFROMWKB - 903)) | (1L << (ST_NUMGEOMETRIES - 903)) | (1L << (ST_NUMINTERIORRING - 903)) | (1L << (ST_NUMINTERIORRINGS - 903)) | (1L << (ST_NUMPOINTS - 903)) | (1L << (ST_OVERLAPS - 903)) | (1L << (ST_POINTFROMTEXT - 903)) | (1L << (ST_POINTFROMWKB - 903)) | (1L << (ST_POINTN - 903)) | (1L << (ST_POLYFROMTEXT - 903)) | (1L << (ST_POLYFROMWKB - 903)) | (1L << (ST_POLYGONFROMTEXT - 903)) | (1L << (ST_POLYGONFROMWKB - 903)) | (1L << (ST_SRID - 903)) | (1L << (ST_STARTPOINT - 903)) | (1L << (ST_SYMDIFFERENCE - 903)) | (1L << (ST_TOUCHES - 903)) | (1L << (ST_UNION - 903)) | (1L << (ST_WITHIN - 903)) | (1L << (ST_X - 903)) | (1L << (ST_Y - 903)) | (1L << (SUBDATE - 903)) | (1L << (SUBSTRING_INDEX - 903)) | (1L << (SUBTIME - 903)) | (1L << (SYSTEM_USER - 903)))) != 0) || ((((_la - 967)) & ~0x3f) == 0 && ((1L << (_la - 967)) & ((1L << (TAN - 967)) | (1L << (TIMEDIFF - 967)) | (1L << (TIMESTAMPADD - 967)) | (1L << (TIMESTAMPDIFF - 967)) | (1L << (TIME_FORMAT - 967)) | (1L << (TIME_TO_SEC - 967)) | (1L << (TOUCHES - 967)) | (1L << (TO_BASE64 - 967)) | (1L << (TO_DAYS - 967)) | (1L << (TO_SECONDS - 967)) | (1L << (UCASE - 967)) | (1L << (UNCOMPRESS - 967)) | (1L << (UNCOMPRESSED_LENGTH - 967)) | (1L << (UNHEX - 967)) | (1L << (UNIX_TIMESTAMP - 967)) | (1L << (UPDATEXML - 967)) | (1L << (UPPER - 967)) | (1L << (UUID - 967)) | (1L << (UUID_SHORT - 967)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 967)) | (1L << (VERSION - 967)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 967)) | (1L << (WEEKDAY - 967)) | (1L << (WEEKOFYEAR - 967)) | (1L << (WEIGHT_STRING - 967)) | (1L << (WITHIN - 967)) | (1L << (YEARWEEK - 967)) | (1L << (Y_FUNCTION - 967)) | (1L << (X_FUNCTION - 967)) | (1L << (PLUS - 967)) | (1L << (MINUS - 967)) | (1L << (EXCLAMATION_SYMBOL - 967)) | (1L << (BIT_NOT_OP - 967)) | (1L << (LR_BRACKET - 967)) | (1L << (ZERO_DECIMAL - 967)) | (1L << (ONE_DECIMAL - 967)) | (1L << (TWO_DECIMAL - 967)))) != 0) || ((((_la - 1034)) & ~0x3f) == 0 && ((1L << (_la - 1034)) & ((1L << (CHARSET_REVERSE_QOUTE_STRING - 1034)) | (1L << (START_NATIONAL_STRING_LITERAL - 1034)) | (1L << (STRING_LITERAL - 1034)) | (1L << (DECIMAL_LITERAL - 1034)) | (1L << (HEXADECIMAL_LITERAL - 1034)) | (1L << (REAL_LITERAL - 1034)) | (1L << (NULL_SPEC_LITERAL - 1034)) | (1L << (BIT_STRING - 1034)) | (1L << (STRING_CHARSET_NAME - 1034)) | (1L << (ID - 1034)) | (1L << (REVERSE_QUOTE_ID - 1034)) | (1L << (LOCAL_ID - 1034)) | (1L << (GLOBAL_ID - 1034)))) != 0)) { + { + setState(5812); + functionArgs(); + } + } + + setState(5815); + match(RR_BRACKET); + } + break; + case 4: + _localctx = new UdfFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(5817); + fullId(); + setState(5818); + match(LR_BRACKET); + setState(5820); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CASE) | (1L << CAST) | (1L << CONVERT) | (1L << CURRENT) | (1L << CURRENT_USER) | (1L << DATABASE) | (1L << DIAGNOSTICS) | (1L << EXISTS) | (1L << FALSE))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (IF - 69)) | (1L << (INSERT - 69)) | (1L << (INTERVAL - 69)) | (1L << (LEFT - 69)) | (1L << (NOT - 69)) | (1L << (NULL_LITERAL - 69)) | (1L << (NUMBER - 69)) | (1L << (REPLACE - 69)))) != 0) || ((((_la - 133)) & ~0x3f) == 0 && ((1L << (_la - 133)) & ((1L << (RIGHT - 133)) | (1L << (STACKED - 133)) | (1L << (TRUE - 133)) | (1L << (VALUES - 133)))) != 0) || ((((_la - 199)) & ~0x3f) == 0 && ((1L << (_la - 199)) & ((1L << (DATE - 199)) | (1L << (TIME - 199)) | (1L << (TIMESTAMP - 199)) | (1L << (DATETIME - 199)) | (1L << (YEAR - 199)) | (1L << (CHAR - 199)) | (1L << (BINARY - 199)) | (1L << (TEXT - 199)) | (1L << (ENUM - 199)) | (1L << (SERIAL - 199)) | (1L << (AVG - 199)) | (1L << (BIT_AND - 199)) | (1L << (BIT_OR - 199)) | (1L << (BIT_XOR - 199)) | (1L << (COUNT - 199)) | (1L << (GROUP_CONCAT - 199)) | (1L << (MAX - 199)) | (1L << (MIN - 199)) | (1L << (STD - 199)) | (1L << (STDDEV - 199)) | (1L << (STDDEV_POP - 199)) | (1L << (STDDEV_SAMP - 199)) | (1L << (SUM - 199)) | (1L << (VAR_POP - 199)) | (1L << (VAR_SAMP - 199)) | (1L << (VARIANCE - 199)) | (1L << (CURRENT_DATE - 199)) | (1L << (CURRENT_TIME - 199)) | (1L << (CURRENT_TIMESTAMP - 199)) | (1L << (LOCALTIME - 199)) | (1L << (CURDATE - 199)) | (1L << (CURTIME - 199)) | (1L << (DATE_ADD - 199)) | (1L << (DATE_SUB - 199)) | (1L << (EXTRACT - 199)) | (1L << (LOCALTIMESTAMP - 199)) | (1L << (NOW - 199)) | (1L << (POSITION - 199)))) != 0) || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & ((1L << (SUBSTR - 263)) | (1L << (SUBSTRING - 263)) | (1L << (SYSDATE - 263)) | (1L << (TRIM - 263)) | (1L << (UTC_DATE - 263)) | (1L << (UTC_TIME - 263)) | (1L << (UTC_TIMESTAMP - 263)) | (1L << (ACCOUNT - 263)) | (1L << (ACTION - 263)) | (1L << (AFTER - 263)) | (1L << (AGGREGATE - 263)) | (1L << (ALGORITHM - 263)) | (1L << (ANY - 263)) | (1L << (AT - 263)) | (1L << (AUTHORS - 263)) | (1L << (AUTOCOMMIT - 263)) | (1L << (AUTOEXTEND_SIZE - 263)) | (1L << (AUTO_INCREMENT - 263)) | (1L << (AVG_ROW_LENGTH - 263)) | (1L << (BEGIN - 263)) | (1L << (BINLOG - 263)) | (1L << (BIT - 263)) | (1L << (BLOCK - 263)) | (1L << (BOOL - 263)) | (1L << (BOOLEAN - 263)) | (1L << (BTREE - 263)) | (1L << (CACHE - 263)) | (1L << (CASCADED - 263)) | (1L << (CHAIN - 263)) | (1L << (CHANGED - 263)) | (1L << (CHANNEL - 263)) | (1L << (CHECKSUM - 263)) | (1L << (PAGE_CHECKSUM - 263)) | (1L << (CIPHER - 263)) | (1L << (CLASS_ORIGIN - 263)) | (1L << (CLIENT - 263)) | (1L << (CLOSE - 263)) | (1L << (COALESCE - 263)) | (1L << (CODE - 263)) | (1L << (COLUMNS - 263)) | (1L << (COLUMN_FORMAT - 263)) | (1L << (COLUMN_NAME - 263)) | (1L << (COMMENT - 263)) | (1L << (COMMIT - 263)) | (1L << (COMPACT - 263)) | (1L << (COMPLETION - 263)) | (1L << (COMPRESSED - 263)) | (1L << (COMPRESSION - 263)) | (1L << (CONCURRENT - 263)) | (1L << (CONNECTION - 263)) | (1L << (CONSISTENT - 263)) | (1L << (CONSTRAINT_CATALOG - 263)) | (1L << (CONSTRAINT_SCHEMA - 263)) | (1L << (CONSTRAINT_NAME - 263)) | (1L << (CONTAINS - 263)) | (1L << (CONTEXT - 263)) | (1L << (CONTRIBUTORS - 263)) | (1L << (COPY - 263)) | (1L << (CPU - 263)) | (1L << (CURSOR_NAME - 263)) | (1L << (DATA - 263)) | (1L << (DATAFILE - 263)) | (1L << (DEALLOCATE - 263)) | (1L << (DEFAULT_AUTH - 263)))) != 0) || ((((_la - 327)) & ~0x3f) == 0 && ((1L << (_la - 327)) & ((1L << (DEFINER - 327)) | (1L << (DELAY_KEY_WRITE - 327)) | (1L << (DES_KEY_FILE - 327)) | (1L << (DIRECTORY - 327)) | (1L << (DISABLE - 327)) | (1L << (DISCARD - 327)) | (1L << (DISK - 327)) | (1L << (DO - 327)) | (1L << (DUMPFILE - 327)) | (1L << (DUPLICATE - 327)) | (1L << (DYNAMIC - 327)) | (1L << (ENABLE - 327)) | (1L << (ENCRYPTION - 327)) | (1L << (END - 327)) | (1L << (ENDS - 327)) | (1L << (ENGINE - 327)) | (1L << (ENGINES - 327)) | (1L << (ERROR - 327)) | (1L << (ERRORS - 327)) | (1L << (ESCAPE - 327)) | (1L << (EVEN - 327)) | (1L << (EVENT - 327)) | (1L << (EVENTS - 327)) | (1L << (EVERY - 327)) | (1L << (EXCHANGE - 327)) | (1L << (EXCLUSIVE - 327)) | (1L << (EXPIRE - 327)) | (1L << (EXPORT - 327)) | (1L << (EXTENDED - 327)) | (1L << (EXTENT_SIZE - 327)) | (1L << (FAST - 327)) | (1L << (FAULTS - 327)) | (1L << (FIELDS - 327)) | (1L << (FILE_BLOCK_SIZE - 327)) | (1L << (FILTER - 327)) | (1L << (FIRST - 327)) | (1L << (FIXED - 327)) | (1L << (FLUSH - 327)) | (1L << (FOLLOWS - 327)) | (1L << (FOUND - 327)) | (1L << (FULL - 327)) | (1L << (FUNCTION - 327)) | (1L << (GENERAL - 327)) | (1L << (GLOBAL - 327)) | (1L << (GRANTS - 327)) | (1L << (GROUP_REPLICATION - 327)) | (1L << (HANDLER - 327)) | (1L << (HASH - 327)) | (1L << (HELP - 327)) | (1L << (HOST - 327)) | (1L << (HOSTS - 327)) | (1L << (IDENTIFIED - 327)) | (1L << (IGNORE_SERVER_IDS - 327)) | (1L << (IMPORT - 327)) | (1L << (INDEXES - 327)) | (1L << (INITIAL_SIZE - 327)) | (1L << (INPLACE - 327)) | (1L << (INSERT_METHOD - 327)) | (1L << (INSTALL - 327)) | (1L << (INSTANCE - 327)) | (1L << (INVISIBLE - 327)) | (1L << (INVOKER - 327)) | (1L << (IO - 327)) | (1L << (IO_THREAD - 327)))) != 0) || ((((_la - 391)) & ~0x3f) == 0 && ((1L << (_la - 391)) & ((1L << (IPC - 391)) | (1L << (ISOLATION - 391)) | (1L << (ISSUER - 391)) | (1L << (JSON - 391)) | (1L << (KEY_BLOCK_SIZE - 391)) | (1L << (LANGUAGE - 391)) | (1L << (LAST - 391)) | (1L << (LEAVES - 391)) | (1L << (LESS - 391)) | (1L << (LEVEL - 391)) | (1L << (LIST - 391)) | (1L << (LOCAL - 391)) | (1L << (LOGFILE - 391)) | (1L << (LOGS - 391)) | (1L << (MASTER - 391)) | (1L << (MASTER_AUTO_POSITION - 391)) | (1L << (MASTER_CONNECT_RETRY - 391)) | (1L << (MASTER_DELAY - 391)) | (1L << (MASTER_HEARTBEAT_PERIOD - 391)) | (1L << (MASTER_HOST - 391)) | (1L << (MASTER_LOG_FILE - 391)) | (1L << (MASTER_LOG_POS - 391)) | (1L << (MASTER_PASSWORD - 391)) | (1L << (MASTER_PORT - 391)) | (1L << (MASTER_RETRY_COUNT - 391)) | (1L << (MASTER_SSL - 391)) | (1L << (MASTER_SSL_CA - 391)) | (1L << (MASTER_SSL_CAPATH - 391)) | (1L << (MASTER_SSL_CERT - 391)) | (1L << (MASTER_SSL_CIPHER - 391)) | (1L << (MASTER_SSL_CRL - 391)) | (1L << (MASTER_SSL_CRLPATH - 391)) | (1L << (MASTER_SSL_KEY - 391)) | (1L << (MASTER_TLS_VERSION - 391)) | (1L << (MASTER_USER - 391)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 391)) | (1L << (MAX_QUERIES_PER_HOUR - 391)) | (1L << (MAX_ROWS - 391)) | (1L << (MAX_SIZE - 391)) | (1L << (MAX_UPDATES_PER_HOUR - 391)) | (1L << (MAX_USER_CONNECTIONS - 391)) | (1L << (MEDIUM - 391)) | (1L << (MERGE - 391)) | (1L << (MESSAGE_TEXT - 391)) | (1L << (MID - 391)) | (1L << (MIGRATE - 391)) | (1L << (MIN_ROWS - 391)) | (1L << (MODE - 391)) | (1L << (MODIFY - 391)) | (1L << (MUTEX - 391)) | (1L << (MYSQL - 391)) | (1L << (MYSQL_ERRNO - 391)) | (1L << (NAME - 391)) | (1L << (NAMES - 391)) | (1L << (NCHAR - 391)) | (1L << (NEVER - 391)) | (1L << (NEXT - 391)) | (1L << (NO - 391)) | (1L << (NODEGROUP - 391)) | (1L << (NONE - 391)) | (1L << (OFFLINE - 391)) | (1L << (OFFSET - 391)))) != 0) || ((((_la - 455)) & ~0x3f) == 0 && ((1L << (_la - 455)) & ((1L << (OJ - 455)) | (1L << (OLD_PASSWORD - 455)) | (1L << (ONE - 455)) | (1L << (ONLINE - 455)) | (1L << (ONLY - 455)) | (1L << (OPEN - 455)) | (1L << (OPTIMIZER_COSTS - 455)) | (1L << (OPTIONS - 455)) | (1L << (OWNER - 455)) | (1L << (PACK_KEYS - 455)) | (1L << (PAGE - 455)) | (1L << (PARSER - 455)) | (1L << (PARTIAL - 455)) | (1L << (PARTITIONING - 455)) | (1L << (PARTITIONS - 455)) | (1L << (PASSWORD - 455)) | (1L << (PHASE - 455)) | (1L << (PLUGIN - 455)) | (1L << (PLUGIN_DIR - 455)) | (1L << (PLUGINS - 455)) | (1L << (PORT - 455)) | (1L << (PRECEDES - 455)) | (1L << (PREPARE - 455)) | (1L << (PRESERVE - 455)) | (1L << (PREV - 455)) | (1L << (PROCESSLIST - 455)) | (1L << (PROFILE - 455)) | (1L << (PROFILES - 455)) | (1L << (PROXY - 455)) | (1L << (QUERY - 455)) | (1L << (QUICK - 455)) | (1L << (REBUILD - 455)) | (1L << (RECOVER - 455)) | (1L << (REDO_BUFFER_SIZE - 455)) | (1L << (REDUNDANT - 455)) | (1L << (RELAY - 455)) | (1L << (RELAY_LOG_FILE - 455)) | (1L << (RELAY_LOG_POS - 455)) | (1L << (RELAYLOG - 455)) | (1L << (REMOVE - 455)) | (1L << (REORGANIZE - 455)) | (1L << (REPAIR - 455)) | (1L << (REPLICATE_DO_DB - 455)) | (1L << (REPLICATE_DO_TABLE - 455)) | (1L << (REPLICATE_IGNORE_DB - 455)) | (1L << (REPLICATE_IGNORE_TABLE - 455)) | (1L << (REPLICATE_REWRITE_DB - 455)) | (1L << (REPLICATE_WILD_DO_TABLE - 455)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 455)) | (1L << (REPLICATION - 455)) | (1L << (RESET - 455)) | (1L << (RESUME - 455)) | (1L << (RETURNED_SQLSTATE - 455)) | (1L << (RETURNS - 455)) | (1L << (ROLLBACK - 455)) | (1L << (ROLLUP - 455)) | (1L << (ROTATE - 455)) | (1L << (ROW - 455)) | (1L << (ROWS - 455)) | (1L << (ROW_FORMAT - 455)) | (1L << (SAVEPOINT - 455)) | (1L << (SCHEDULE - 455)) | (1L << (SECURITY - 455)))) != 0) || ((((_la - 519)) & ~0x3f) == 0 && ((1L << (_la - 519)) & ((1L << (SERVER - 519)) | (1L << (SESSION - 519)) | (1L << (SHARE - 519)) | (1L << (SHARED - 519)) | (1L << (SIGNED - 519)) | (1L << (SIMPLE - 519)) | (1L << (SLAVE - 519)) | (1L << (SLOW - 519)) | (1L << (SNAPSHOT - 519)) | (1L << (SOCKET - 519)) | (1L << (SOME - 519)) | (1L << (SONAME - 519)) | (1L << (SOUNDS - 519)) | (1L << (SOURCE - 519)) | (1L << (SQL_AFTER_GTIDS - 519)) | (1L << (SQL_AFTER_MTS_GAPS - 519)) | (1L << (SQL_BEFORE_GTIDS - 519)) | (1L << (SQL_BUFFER_RESULT - 519)) | (1L << (SQL_CACHE - 519)) | (1L << (SQL_NO_CACHE - 519)) | (1L << (SQL_THREAD - 519)) | (1L << (START - 519)) | (1L << (STARTS - 519)) | (1L << (STATS_AUTO_RECALC - 519)) | (1L << (STATS_PERSISTENT - 519)) | (1L << (STATS_SAMPLE_PAGES - 519)) | (1L << (STATUS - 519)) | (1L << (STOP - 519)) | (1L << (STORAGE - 519)) | (1L << (STRING - 519)) | (1L << (SUBCLASS_ORIGIN - 519)) | (1L << (SUBJECT - 519)) | (1L << (SUBPARTITION - 519)) | (1L << (SUBPARTITIONS - 519)) | (1L << (SUSPEND - 519)) | (1L << (SWAPS - 519)) | (1L << (SWITCHES - 519)) | (1L << (TABLE_NAME - 519)) | (1L << (TABLESPACE - 519)) | (1L << (TEMPORARY - 519)) | (1L << (TEMPTABLE - 519)) | (1L << (THAN - 519)) | (1L << (TRADITIONAL - 519)) | (1L << (TRANSACTION - 519)) | (1L << (TRIGGERS - 519)) | (1L << (TRUNCATE - 519)) | (1L << (UNDEFINED - 519)) | (1L << (UNDOFILE - 519)) | (1L << (UNDO_BUFFER_SIZE - 519)) | (1L << (UNINSTALL - 519)) | (1L << (UNKNOWN - 519)) | (1L << (UNTIL - 519)) | (1L << (UPGRADE - 519)) | (1L << (USER - 519)) | (1L << (USE_FRM - 519)) | (1L << (USER_RESOURCES - 519)) | (1L << (VALIDATION - 519)) | (1L << (VALUE - 519)) | (1L << (VARIABLES - 519)) | (1L << (VIEW - 519)) | (1L << (VISIBLE - 519)))) != 0) || ((((_la - 583)) & ~0x3f) == 0 && ((1L << (_la - 583)) & ((1L << (WAIT - 583)) | (1L << (WARNINGS - 583)) | (1L << (WITHOUT - 583)) | (1L << (WORK - 583)) | (1L << (WRAPPER - 583)) | (1L << (X509 - 583)) | (1L << (XA - 583)) | (1L << (XML - 583)) | (1L << (INTERNAL - 583)) | (1L << (QUARTER - 583)) | (1L << (MONTH - 583)) | (1L << (DAY - 583)) | (1L << (HOUR - 583)) | (1L << (MINUTE - 583)) | (1L << (WEEK - 583)) | (1L << (SECOND - 583)) | (1L << (MICROSECOND - 583)) | (1L << (TABLES - 583)) | (1L << (ROUTINE - 583)) | (1L << (EXECUTE - 583)) | (1L << (FILE - 583)) | (1L << (PROCESS - 583)) | (1L << (RELOAD - 583)) | (1L << (SHUTDOWN - 583)) | (1L << (SUPER - 583)) | (1L << (PRIVILEGES - 583)) | (1L << (SESSION_VARIABLES_ADMIN - 583)) | (1L << (ARMSCII8 - 583)) | (1L << (ASCII - 583)) | (1L << (BIG5 - 583)) | (1L << (CP1250 - 583)) | (1L << (CP1251 - 583)) | (1L << (CP1256 - 583)) | (1L << (CP1257 - 583)) | (1L << (CP850 - 583)))) != 0) || ((((_la - 647)) & ~0x3f) == 0 && ((1L << (_la - 647)) & ((1L << (CP852 - 647)) | (1L << (CP866 - 647)) | (1L << (CP932 - 647)) | (1L << (DEC8 - 647)) | (1L << (EUCJPMS - 647)) | (1L << (EUCKR - 647)) | (1L << (GB2312 - 647)) | (1L << (GBK - 647)) | (1L << (GEOSTD8 - 647)) | (1L << (GREEK - 647)) | (1L << (HEBREW - 647)) | (1L << (HP8 - 647)) | (1L << (KEYBCS2 - 647)) | (1L << (KOI8R - 647)) | (1L << (KOI8U - 647)) | (1L << (LATIN1 - 647)) | (1L << (LATIN2 - 647)) | (1L << (LATIN5 - 647)) | (1L << (LATIN7 - 647)) | (1L << (MACCE - 647)) | (1L << (MACROMAN - 647)) | (1L << (SJIS - 647)) | (1L << (SWE7 - 647)) | (1L << (TIS620 - 647)) | (1L << (UCS2 - 647)) | (1L << (UJIS - 647)) | (1L << (UTF16 - 647)) | (1L << (UTF16LE - 647)) | (1L << (UTF32 - 647)) | (1L << (UTF8 - 647)) | (1L << (UTF8MB3 - 647)) | (1L << (UTF8MB4 - 647)) | (1L << (ARCHIVE - 647)) | (1L << (BLACKHOLE - 647)) | (1L << (CSV - 647)) | (1L << (FEDERATED - 647)) | (1L << (INNODB - 647)) | (1L << (MEMORY - 647)) | (1L << (MRG_MYISAM - 647)) | (1L << (MYISAM - 647)) | (1L << (NDB - 647)) | (1L << (NDBCLUSTER - 647)) | (1L << (PERFORMANCE_SCHEMA - 647)) | (1L << (TOKUDB - 647)) | (1L << (REPEATABLE - 647)) | (1L << (COMMITTED - 647)) | (1L << (UNCOMMITTED - 647)) | (1L << (SERIALIZABLE - 647)) | (1L << (GEOMETRYCOLLECTION - 647)) | (1L << (LINESTRING - 647)) | (1L << (MULTILINESTRING - 647)) | (1L << (MULTIPOINT - 647)) | (1L << (MULTIPOLYGON - 647)) | (1L << (POINT - 647)) | (1L << (POLYGON - 647)) | (1L << (ABS - 647)) | (1L << (ACOS - 647)) | (1L << (ADDDATE - 647)) | (1L << (ADDTIME - 647)) | (1L << (AES_DECRYPT - 647)) | (1L << (AES_ENCRYPT - 647)) | (1L << (AREA - 647)))) != 0) || ((((_la - 711)) & ~0x3f) == 0 && ((1L << (_la - 711)) & ((1L << (ASBINARY - 711)) | (1L << (ASIN - 711)) | (1L << (ASTEXT - 711)) | (1L << (ASWKB - 711)) | (1L << (ASWKT - 711)) | (1L << (ASYMMETRIC_DECRYPT - 711)) | (1L << (ASYMMETRIC_DERIVE - 711)) | (1L << (ASYMMETRIC_ENCRYPT - 711)) | (1L << (ASYMMETRIC_SIGN - 711)) | (1L << (ASYMMETRIC_VERIFY - 711)) | (1L << (ATAN - 711)) | (1L << (ATAN2 - 711)) | (1L << (BENCHMARK - 711)) | (1L << (BIN - 711)) | (1L << (BIT_COUNT - 711)) | (1L << (BIT_LENGTH - 711)) | (1L << (BUFFER - 711)) | (1L << (CATALOG_NAME - 711)) | (1L << (CEIL - 711)) | (1L << (CEILING - 711)) | (1L << (CENTROID - 711)) | (1L << (CHARACTER_LENGTH - 711)) | (1L << (CHARSET - 711)) | (1L << (CHAR_LENGTH - 711)) | (1L << (COERCIBILITY - 711)) | (1L << (COLLATION - 711)) | (1L << (COMPRESS - 711)) | (1L << (CONCAT - 711)) | (1L << (CONCAT_WS - 711)) | (1L << (CONNECTION_ID - 711)) | (1L << (CONV - 711)) | (1L << (CONVERT_TZ - 711)) | (1L << (COS - 711)) | (1L << (COT - 711)) | (1L << (CRC32 - 711)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 711)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 711)) | (1L << (CREATE_DH_PARAMETERS - 711)) | (1L << (CREATE_DIGEST - 711)) | (1L << (CROSSES - 711)) | (1L << (DATEDIFF - 711)) | (1L << (DATE_FORMAT - 711)) | (1L << (DAYNAME - 711)) | (1L << (DAYOFMONTH - 711)) | (1L << (DAYOFWEEK - 711)) | (1L << (DAYOFYEAR - 711)) | (1L << (DECODE - 711)) | (1L << (DEGREES - 711)) | (1L << (DES_DECRYPT - 711)) | (1L << (DES_ENCRYPT - 711)) | (1L << (DIMENSION - 711)) | (1L << (DISJOINT - 711)) | (1L << (ELT - 711)) | (1L << (ENCODE - 711)) | (1L << (ENCRYPT - 711)) | (1L << (ENDPOINT - 711)) | (1L << (ENVELOPE - 711)) | (1L << (EQUALS - 711)) | (1L << (EXP - 711)) | (1L << (EXPORT_SET - 711)) | (1L << (EXTERIORRING - 711)) | (1L << (EXTRACTVALUE - 711)) | (1L << (FIELD - 711)) | (1L << (FIND_IN_SET - 711)))) != 0) || ((((_la - 775)) & ~0x3f) == 0 && ((1L << (_la - 775)) & ((1L << (FLOOR - 775)) | (1L << (FORMAT - 775)) | (1L << (FOUND_ROWS - 775)) | (1L << (FROM_BASE64 - 775)) | (1L << (FROM_DAYS - 775)) | (1L << (FROM_UNIXTIME - 775)) | (1L << (GEOMCOLLFROMTEXT - 775)) | (1L << (GEOMCOLLFROMWKB - 775)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 775)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 775)) | (1L << (GEOMETRYFROMTEXT - 775)) | (1L << (GEOMETRYFROMWKB - 775)) | (1L << (GEOMETRYN - 775)) | (1L << (GEOMETRYTYPE - 775)) | (1L << (GEOMFROMTEXT - 775)) | (1L << (GEOMFROMWKB - 775)) | (1L << (GET_FORMAT - 775)) | (1L << (GET_LOCK - 775)) | (1L << (GLENGTH - 775)) | (1L << (GREATEST - 775)) | (1L << (GTID_SUBSET - 775)) | (1L << (GTID_SUBTRACT - 775)) | (1L << (HEX - 775)) | (1L << (IFNULL - 775)) | (1L << (INET6_ATON - 775)) | (1L << (INET6_NTOA - 775)) | (1L << (INET_ATON - 775)) | (1L << (INET_NTOA - 775)) | (1L << (INSTR - 775)) | (1L << (INTERIORRINGN - 775)) | (1L << (INTERSECTS - 775)) | (1L << (ISCLOSED - 775)) | (1L << (ISEMPTY - 775)) | (1L << (ISNULL - 775)) | (1L << (ISSIMPLE - 775)) | (1L << (IS_FREE_LOCK - 775)) | (1L << (IS_IPV4 - 775)) | (1L << (IS_IPV4_COMPAT - 775)) | (1L << (IS_IPV4_MAPPED - 775)) | (1L << (IS_IPV6 - 775)) | (1L << (IS_USED_LOCK - 775)) | (1L << (LAST_INSERT_ID - 775)) | (1L << (LCASE - 775)) | (1L << (LEAST - 775)) | (1L << (LENGTH - 775)) | (1L << (LINEFROMTEXT - 775)) | (1L << (LINEFROMWKB - 775)) | (1L << (LINESTRINGFROMTEXT - 775)) | (1L << (LINESTRINGFROMWKB - 775)) | (1L << (LN - 775)) | (1L << (LOAD_FILE - 775)) | (1L << (LOCATE - 775)) | (1L << (LOG - 775)) | (1L << (LOG10 - 775)) | (1L << (LOG2 - 775)) | (1L << (LOWER - 775)) | (1L << (LPAD - 775)) | (1L << (LTRIM - 775)) | (1L << (MAKEDATE - 775)) | (1L << (MAKETIME - 775)) | (1L << (MAKE_SET - 775)) | (1L << (MASTER_POS_WAIT - 775)) | (1L << (MBRCONTAINS - 775)) | (1L << (MBRDISJOINT - 775)))) != 0) || ((((_la - 839)) & ~0x3f) == 0 && ((1L << (_la - 839)) & ((1L << (MBREQUAL - 839)) | (1L << (MBRINTERSECTS - 839)) | (1L << (MBROVERLAPS - 839)) | (1L << (MBRTOUCHES - 839)) | (1L << (MBRWITHIN - 839)) | (1L << (MD5 - 839)) | (1L << (MLINEFROMTEXT - 839)) | (1L << (MLINEFROMWKB - 839)) | (1L << (MONTHNAME - 839)) | (1L << (MPOINTFROMTEXT - 839)) | (1L << (MPOINTFROMWKB - 839)) | (1L << (MPOLYFROMTEXT - 839)) | (1L << (MPOLYFROMWKB - 839)) | (1L << (MULTILINESTRINGFROMTEXT - 839)) | (1L << (MULTILINESTRINGFROMWKB - 839)) | (1L << (MULTIPOINTFROMTEXT - 839)) | (1L << (MULTIPOINTFROMWKB - 839)) | (1L << (MULTIPOLYGONFROMTEXT - 839)) | (1L << (MULTIPOLYGONFROMWKB - 839)) | (1L << (NAME_CONST - 839)) | (1L << (NULLIF - 839)) | (1L << (NUMGEOMETRIES - 839)) | (1L << (NUMINTERIORRINGS - 839)) | (1L << (NUMPOINTS - 839)) | (1L << (OCT - 839)) | (1L << (OCTET_LENGTH - 839)) | (1L << (ORD - 839)) | (1L << (OVERLAPS - 839)) | (1L << (PERIOD_ADD - 839)) | (1L << (PERIOD_DIFF - 839)) | (1L << (PI - 839)) | (1L << (POINTFROMTEXT - 839)) | (1L << (POINTFROMWKB - 839)) | (1L << (POINTN - 839)) | (1L << (POLYFROMTEXT - 839)) | (1L << (POLYFROMWKB - 839)) | (1L << (POLYGONFROMTEXT - 839)) | (1L << (POLYGONFROMWKB - 839)) | (1L << (POW - 839)) | (1L << (POWER - 839)) | (1L << (QUOTE - 839)) | (1L << (RADIANS - 839)) | (1L << (RAND - 839)) | (1L << (RANDOM_BYTES - 839)) | (1L << (RELEASE_LOCK - 839)) | (1L << (REVERSE - 839)) | (1L << (ROUND - 839)) | (1L << (ROW_COUNT - 839)) | (1L << (RPAD - 839)) | (1L << (RTRIM - 839)) | (1L << (SEC_TO_TIME - 839)) | (1L << (SESSION_USER - 839)) | (1L << (SHA - 839)) | (1L << (SHA1 - 839)) | (1L << (SHA2 - 839)) | (1L << (SCHEMA_NAME - 839)) | (1L << (SIGN - 839)) | (1L << (SIN - 839)) | (1L << (SLEEP - 839)) | (1L << (SOUNDEX - 839)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 839)) | (1L << (SQRT - 839)) | (1L << (SRID - 839)) | (1L << (STARTPOINT - 839)))) != 0) || ((((_la - 903)) & ~0x3f) == 0 && ((1L << (_la - 903)) & ((1L << (STRCMP - 903)) | (1L << (STR_TO_DATE - 903)) | (1L << (ST_AREA - 903)) | (1L << (ST_ASBINARY - 903)) | (1L << (ST_ASTEXT - 903)) | (1L << (ST_ASWKB - 903)) | (1L << (ST_ASWKT - 903)) | (1L << (ST_BUFFER - 903)) | (1L << (ST_CENTROID - 903)) | (1L << (ST_CONTAINS - 903)) | (1L << (ST_CROSSES - 903)) | (1L << (ST_DIFFERENCE - 903)) | (1L << (ST_DIMENSION - 903)) | (1L << (ST_DISJOINT - 903)) | (1L << (ST_DISTANCE - 903)) | (1L << (ST_ENDPOINT - 903)) | (1L << (ST_ENVELOPE - 903)) | (1L << (ST_EQUALS - 903)) | (1L << (ST_EXTERIORRING - 903)) | (1L << (ST_GEOMCOLLFROMTEXT - 903)) | (1L << (ST_GEOMCOLLFROMTXT - 903)) | (1L << (ST_GEOMCOLLFROMWKB - 903)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 903)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 903)) | (1L << (ST_GEOMETRYFROMTEXT - 903)) | (1L << (ST_GEOMETRYFROMWKB - 903)) | (1L << (ST_GEOMETRYN - 903)) | (1L << (ST_GEOMETRYTYPE - 903)) | (1L << (ST_GEOMFROMTEXT - 903)) | (1L << (ST_GEOMFROMWKB - 903)) | (1L << (ST_INTERIORRINGN - 903)) | (1L << (ST_INTERSECTION - 903)) | (1L << (ST_INTERSECTS - 903)) | (1L << (ST_ISCLOSED - 903)) | (1L << (ST_ISEMPTY - 903)) | (1L << (ST_ISSIMPLE - 903)) | (1L << (ST_LINEFROMTEXT - 903)) | (1L << (ST_LINEFROMWKB - 903)) | (1L << (ST_LINESTRINGFROMTEXT - 903)) | (1L << (ST_LINESTRINGFROMWKB - 903)) | (1L << (ST_NUMGEOMETRIES - 903)) | (1L << (ST_NUMINTERIORRING - 903)) | (1L << (ST_NUMINTERIORRINGS - 903)) | (1L << (ST_NUMPOINTS - 903)) | (1L << (ST_OVERLAPS - 903)) | (1L << (ST_POINTFROMTEXT - 903)) | (1L << (ST_POINTFROMWKB - 903)) | (1L << (ST_POINTN - 903)) | (1L << (ST_POLYFROMTEXT - 903)) | (1L << (ST_POLYFROMWKB - 903)) | (1L << (ST_POLYGONFROMTEXT - 903)) | (1L << (ST_POLYGONFROMWKB - 903)) | (1L << (ST_SRID - 903)) | (1L << (ST_STARTPOINT - 903)) | (1L << (ST_SYMDIFFERENCE - 903)) | (1L << (ST_TOUCHES - 903)) | (1L << (ST_UNION - 903)) | (1L << (ST_WITHIN - 903)) | (1L << (ST_X - 903)) | (1L << (ST_Y - 903)) | (1L << (SUBDATE - 903)) | (1L << (SUBSTRING_INDEX - 903)) | (1L << (SUBTIME - 903)) | (1L << (SYSTEM_USER - 903)))) != 0) || ((((_la - 967)) & ~0x3f) == 0 && ((1L << (_la - 967)) & ((1L << (TAN - 967)) | (1L << (TIMEDIFF - 967)) | (1L << (TIMESTAMPADD - 967)) | (1L << (TIMESTAMPDIFF - 967)) | (1L << (TIME_FORMAT - 967)) | (1L << (TIME_TO_SEC - 967)) | (1L << (TOUCHES - 967)) | (1L << (TO_BASE64 - 967)) | (1L << (TO_DAYS - 967)) | (1L << (TO_SECONDS - 967)) | (1L << (UCASE - 967)) | (1L << (UNCOMPRESS - 967)) | (1L << (UNCOMPRESSED_LENGTH - 967)) | (1L << (UNHEX - 967)) | (1L << (UNIX_TIMESTAMP - 967)) | (1L << (UPDATEXML - 967)) | (1L << (UPPER - 967)) | (1L << (UUID - 967)) | (1L << (UUID_SHORT - 967)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 967)) | (1L << (VERSION - 967)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 967)) | (1L << (WEEKDAY - 967)) | (1L << (WEEKOFYEAR - 967)) | (1L << (WEIGHT_STRING - 967)) | (1L << (WITHIN - 967)) | (1L << (YEARWEEK - 967)) | (1L << (Y_FUNCTION - 967)) | (1L << (X_FUNCTION - 967)) | (1L << (PLUS - 967)) | (1L << (MINUS - 967)) | (1L << (EXCLAMATION_SYMBOL - 967)) | (1L << (BIT_NOT_OP - 967)) | (1L << (LR_BRACKET - 967)) | (1L << (ZERO_DECIMAL - 967)) | (1L << (ONE_DECIMAL - 967)) | (1L << (TWO_DECIMAL - 967)))) != 0) || ((((_la - 1034)) & ~0x3f) == 0 && ((1L << (_la - 1034)) & ((1L << (CHARSET_REVERSE_QOUTE_STRING - 1034)) | (1L << (START_NATIONAL_STRING_LITERAL - 1034)) | (1L << (STRING_LITERAL - 1034)) | (1L << (DECIMAL_LITERAL - 1034)) | (1L << (HEXADECIMAL_LITERAL - 1034)) | (1L << (REAL_LITERAL - 1034)) | (1L << (NULL_SPEC_LITERAL - 1034)) | (1L << (BIT_STRING - 1034)) | (1L << (STRING_CHARSET_NAME - 1034)) | (1L << (ID - 1034)) | (1L << (REVERSE_QUOTE_ID - 1034)) | (1L << (LOCAL_ID - 1034)) | (1L << (GLOBAL_ID - 1034)))) != 0)) { + { + setState(5819); + functionArgs(); + } + } + + setState(5822); + match(RR_BRACKET); + } + break; + case 5: + _localctx = new PasswordFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(5824); + passwordFunctionClause(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SpecificFunctionContext extends ParserRuleContext { + public SpecificFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_specificFunction; } + + public SpecificFunctionContext() { } + public void copyFrom(SpecificFunctionContext ctx) { + super.copyFrom(ctx); + } + } + public static class PositionFunctionCallContext extends SpecificFunctionContext { + public StringLiteralContext positionString; + public ExpressionContext positionExpression; + public StringLiteralContext inString; + public ExpressionContext inExpression; + public TerminalNode POSITION() { return getToken(MySqlParser.POSITION, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode IN() { return getToken(MySqlParser.IN, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List stringLiteral() { + return getRuleContexts(StringLiteralContext.class); + } + public StringLiteralContext stringLiteral(int i) { + return getRuleContext(StringLiteralContext.class,i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public PositionFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPositionFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPositionFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPositionFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class TrimFunctionCallContext extends SpecificFunctionContext { + public Token positioinForm; + public StringLiteralContext sourceString; + public ExpressionContext sourceExpression; + public StringLiteralContext fromString; + public ExpressionContext fromExpression; + public TerminalNode TRIM() { return getToken(MySqlParser.TRIM, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode BOTH() { return getToken(MySqlParser.BOTH, 0); } + public TerminalNode LEADING() { return getToken(MySqlParser.LEADING, 0); } + public TerminalNode TRAILING() { return getToken(MySqlParser.TRAILING, 0); } + public List stringLiteral() { + return getRuleContexts(StringLiteralContext.class); + } + public StringLiteralContext stringLiteral(int i) { + return getRuleContext(StringLiteralContext.class,i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TrimFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTrimFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTrimFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTrimFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class SimpleFunctionCallContext extends SpecificFunctionContext { + public TerminalNode CURRENT_DATE() { return getToken(MySqlParser.CURRENT_DATE, 0); } + public TerminalNode CURRENT_TIME() { return getToken(MySqlParser.CURRENT_TIME, 0); } + public TerminalNode CURRENT_TIMESTAMP() { return getToken(MySqlParser.CURRENT_TIMESTAMP, 0); } + public TerminalNode CURRENT_USER() { return getToken(MySqlParser.CURRENT_USER, 0); } + public TerminalNode LOCALTIME() { return getToken(MySqlParser.LOCALTIME, 0); } + public SimpleFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSimpleFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSimpleFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSimpleFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class CharFunctionCallContext extends SpecificFunctionContext { + public TerminalNode CHAR() { return getToken(MySqlParser.CHAR, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public FunctionArgsContext functionArgs() { + return getRuleContext(FunctionArgsContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode USING() { return getToken(MySqlParser.USING, 0); } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public CharFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCharFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCharFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCharFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class WeightFunctionCallContext extends SpecificFunctionContext { + public Token stringFormat; + public TerminalNode WEIGHT_STRING() { return getToken(MySqlParser.WEIGHT_STRING, 0); } + public List LR_BRACKET() { return getTokens(MySqlParser.LR_BRACKET); } + public TerminalNode LR_BRACKET(int i) { + return getToken(MySqlParser.LR_BRACKET, i); + } + public List RR_BRACKET() { return getTokens(MySqlParser.RR_BRACKET); } + public TerminalNode RR_BRACKET(int i) { + return getToken(MySqlParser.RR_BRACKET, i); + } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public LevelsInWeightStringContext levelsInWeightString() { + return getRuleContext(LevelsInWeightStringContext.class,0); + } + public TerminalNode CHAR() { return getToken(MySqlParser.CHAR, 0); } + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public WeightFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterWeightFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitWeightFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitWeightFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class GetFormatFunctionCallContext extends SpecificFunctionContext { + public Token datetimeFormat; + public TerminalNode GET_FORMAT() { return getToken(MySqlParser.GET_FORMAT, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode COMMA() { return getToken(MySqlParser.COMMA, 0); } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode DATE() { return getToken(MySqlParser.DATE, 0); } + public TerminalNode TIME() { return getToken(MySqlParser.TIME, 0); } + public TerminalNode DATETIME() { return getToken(MySqlParser.DATETIME, 0); } + public GetFormatFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterGetFormatFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitGetFormatFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitGetFormatFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class CaseFunctionCallContext extends SpecificFunctionContext { + public FunctionArgContext elseArg; + public TerminalNode CASE() { return getToken(MySqlParser.CASE, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode END() { return getToken(MySqlParser.END, 0); } + public List caseFuncAlternative() { + return getRuleContexts(CaseFuncAlternativeContext.class); + } + public CaseFuncAlternativeContext caseFuncAlternative(int i) { + return getRuleContext(CaseFuncAlternativeContext.class,i); + } + public TerminalNode ELSE() { return getToken(MySqlParser.ELSE, 0); } + public FunctionArgContext functionArg() { + return getRuleContext(FunctionArgContext.class,0); + } + public CaseFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCaseFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCaseFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCaseFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class ExtractFunctionCallContext extends SpecificFunctionContext { + public StringLiteralContext sourceString; + public ExpressionContext sourceExpression; + public TerminalNode EXTRACT() { return getToken(MySqlParser.EXTRACT, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public IntervalTypeContext intervalType() { + return getRuleContext(IntervalTypeContext.class,0); + } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ExtractFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterExtractFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitExtractFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitExtractFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class DataTypeFunctionCallContext extends SpecificFunctionContext { + public Token separator; + public TerminalNode CONVERT() { return getToken(MySqlParser.CONVERT, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ConvertedDataTypeContext convertedDataType() { + return getRuleContext(ConvertedDataTypeContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode COMMA() { return getToken(MySqlParser.COMMA, 0); } + public TerminalNode USING() { return getToken(MySqlParser.USING, 0); } + public CharsetNameContext charsetName() { + return getRuleContext(CharsetNameContext.class,0); + } + public TerminalNode CAST() { return getToken(MySqlParser.CAST, 0); } + public TerminalNode AS() { return getToken(MySqlParser.AS, 0); } + public DataTypeFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDataTypeFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDataTypeFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDataTypeFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class ValuesFunctionCallContext extends SpecificFunctionContext { + public TerminalNode VALUES() { return getToken(MySqlParser.VALUES, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public FullColumnNameContext fullColumnName() { + return getRuleContext(FullColumnNameContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public ValuesFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterValuesFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitValuesFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitValuesFunctionCall(this); + else return visitor.visitChildren(this); + } + } + public static class SubstrFunctionCallContext extends SpecificFunctionContext { + public StringLiteralContext sourceString; + public ExpressionContext sourceExpression; + public DecimalLiteralContext fromDecimal; + public ExpressionContext fromExpression; + public DecimalLiteralContext forDecimal; + public ExpressionContext forExpression; + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode FROM() { return getToken(MySqlParser.FROM, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode SUBSTR() { return getToken(MySqlParser.SUBSTR, 0); } + public TerminalNode SUBSTRING() { return getToken(MySqlParser.SUBSTRING, 0); } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List decimalLiteral() { + return getRuleContexts(DecimalLiteralContext.class); + } + public DecimalLiteralContext decimalLiteral(int i) { + return getRuleContext(DecimalLiteralContext.class,i); + } + public TerminalNode FOR() { return getToken(MySqlParser.FOR, 0); } + public SubstrFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSubstrFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSubstrFunctionCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSubstrFunctionCall(this); + else return visitor.visitChildren(this); + } + } + + public final SpecificFunctionContext specificFunction() throws RecognitionException { + SpecificFunctionContext _localctx = new SpecificFunctionContext(_ctx, getState()); + enterRule(_localctx, 584, RULE_specificFunction); + int _la; + try { + setState(5984); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,883,_ctx) ) { + case 1: + _localctx = new SimpleFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(5827); + _la = _input.LA(1); + if ( !(_la==CURRENT_USER || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & ((1L << (CURRENT_DATE - 251)) | (1L << (CURRENT_TIME - 251)) | (1L << (CURRENT_TIMESTAMP - 251)) | (1L << (LOCALTIME - 251)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 2: + _localctx = new DataTypeFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(5828); + match(CONVERT); + setState(5829); + match(LR_BRACKET); + setState(5830); + expression(0); + setState(5831); + ((DataTypeFunctionCallContext)_localctx).separator = match(COMMA); + setState(5832); + convertedDataType(); + setState(5833); + match(RR_BRACKET); + } + break; + case 3: + _localctx = new DataTypeFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(5835); + match(CONVERT); + setState(5836); + match(LR_BRACKET); + setState(5837); + expression(0); + setState(5838); + match(USING); + setState(5839); + charsetName(); + setState(5840); + match(RR_BRACKET); + } + break; + case 4: + _localctx = new DataTypeFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(5842); + match(CAST); + setState(5843); + match(LR_BRACKET); + setState(5844); + expression(0); + setState(5845); + match(AS); + setState(5846); + convertedDataType(); + setState(5847); + match(RR_BRACKET); + } + break; + case 5: + _localctx = new ValuesFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(5849); + match(VALUES); + setState(5850); + match(LR_BRACKET); + setState(5851); + fullColumnName(); + setState(5852); + match(RR_BRACKET); + } + break; + case 6: + _localctx = new CaseFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(5854); + match(CASE); + setState(5855); + expression(0); + setState(5857); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(5856); + caseFuncAlternative(); + } + } + setState(5859); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==WHEN ); + setState(5863); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ELSE) { + { + setState(5861); + match(ELSE); + setState(5862); + ((CaseFunctionCallContext)_localctx).elseArg = functionArg(); + } + } + + setState(5865); + match(END); + } + break; + case 7: + _localctx = new CaseFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(5867); + match(CASE); + setState(5869); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(5868); + caseFuncAlternative(); + } + } + setState(5871); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==WHEN ); + setState(5875); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ELSE) { + { + setState(5873); + match(ELSE); + setState(5874); + ((CaseFunctionCallContext)_localctx).elseArg = functionArg(); + } + } + + setState(5877); + match(END); + } + break; + case 8: + _localctx = new CharFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 8); + { + setState(5879); + match(CHAR); + setState(5880); + match(LR_BRACKET); + setState(5881); + functionArgs(); + setState(5884); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==USING) { + { + setState(5882); + match(USING); + setState(5883); + charsetName(); + } + } + + setState(5886); + match(RR_BRACKET); + } + break; + case 9: + _localctx = new PositionFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 9); + { + setState(5888); + match(POSITION); + setState(5889); + match(LR_BRACKET); + setState(5892); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,869,_ctx) ) { + case 1: + { + setState(5890); + ((PositionFunctionCallContext)_localctx).positionString = stringLiteral(); + } + break; + case 2: + { + setState(5891); + ((PositionFunctionCallContext)_localctx).positionExpression = expression(0); + } + break; + } + setState(5894); + match(IN); + setState(5897); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,870,_ctx) ) { + case 1: + { + setState(5895); + ((PositionFunctionCallContext)_localctx).inString = stringLiteral(); + } + break; + case 2: + { + setState(5896); + ((PositionFunctionCallContext)_localctx).inExpression = expression(0); + } + break; + } + setState(5899); + match(RR_BRACKET); + } + break; + case 10: + _localctx = new SubstrFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 10); + { + setState(5901); + _la = _input.LA(1); + if ( !(_la==SUBSTR || _la==SUBSTRING) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5902); + match(LR_BRACKET); + setState(5905); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,871,_ctx) ) { + case 1: + { + setState(5903); + ((SubstrFunctionCallContext)_localctx).sourceString = stringLiteral(); + } + break; + case 2: + { + setState(5904); + ((SubstrFunctionCallContext)_localctx).sourceExpression = expression(0); + } + break; + } + setState(5907); + match(FROM); + setState(5910); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,872,_ctx) ) { + case 1: + { + setState(5908); + ((SubstrFunctionCallContext)_localctx).fromDecimal = decimalLiteral(); + } + break; + case 2: + { + setState(5909); + ((SubstrFunctionCallContext)_localctx).fromExpression = expression(0); + } + break; + } + setState(5917); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FOR) { + { + setState(5912); + match(FOR); + setState(5915); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,873,_ctx) ) { + case 1: + { + setState(5913); + ((SubstrFunctionCallContext)_localctx).forDecimal = decimalLiteral(); + } + break; + case 2: + { + setState(5914); + ((SubstrFunctionCallContext)_localctx).forExpression = expression(0); + } + break; + } + } + } + + setState(5919); + match(RR_BRACKET); + } + break; + case 11: + _localctx = new TrimFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 11); + { + setState(5921); + match(TRIM); + setState(5922); + match(LR_BRACKET); + setState(5923); + ((TrimFunctionCallContext)_localctx).positioinForm = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==BOTH || _la==LEADING || _la==TRAILING) ) { + ((TrimFunctionCallContext)_localctx).positioinForm = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5926); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,875,_ctx) ) { + case 1: + { + setState(5924); + ((TrimFunctionCallContext)_localctx).sourceString = stringLiteral(); + } + break; + case 2: + { + setState(5925); + ((TrimFunctionCallContext)_localctx).sourceExpression = expression(0); + } + break; + } + setState(5928); + match(FROM); + setState(5931); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,876,_ctx) ) { + case 1: + { + setState(5929); + ((TrimFunctionCallContext)_localctx).fromString = stringLiteral(); + } + break; + case 2: + { + setState(5930); + ((TrimFunctionCallContext)_localctx).fromExpression = expression(0); + } + break; + } + setState(5933); + match(RR_BRACKET); + } + break; + case 12: + _localctx = new TrimFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 12); + { + setState(5935); + match(TRIM); + setState(5936); + match(LR_BRACKET); + setState(5939); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,877,_ctx) ) { + case 1: + { + setState(5937); + ((TrimFunctionCallContext)_localctx).sourceString = stringLiteral(); + } + break; + case 2: + { + setState(5938); + ((TrimFunctionCallContext)_localctx).sourceExpression = expression(0); + } + break; + } + setState(5941); + match(FROM); + setState(5944); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,878,_ctx) ) { + case 1: + { + setState(5942); + ((TrimFunctionCallContext)_localctx).fromString = stringLiteral(); + } + break; + case 2: + { + setState(5943); + ((TrimFunctionCallContext)_localctx).fromExpression = expression(0); + } + break; + } + setState(5946); + match(RR_BRACKET); + } + break; + case 13: + _localctx = new WeightFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 13); + { + setState(5948); + match(WEIGHT_STRING); + setState(5949); + match(LR_BRACKET); + setState(5952); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,879,_ctx) ) { + case 1: + { + setState(5950); + stringLiteral(); + } + break; + case 2: + { + setState(5951); + expression(0); + } + break; + } + setState(5960); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(5954); + match(AS); + setState(5955); + ((WeightFunctionCallContext)_localctx).stringFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==CHAR || _la==BINARY) ) { + ((WeightFunctionCallContext)_localctx).stringFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5956); + match(LR_BRACKET); + setState(5957); + decimalLiteral(); + setState(5958); + match(RR_BRACKET); + } + } + + setState(5963); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LEVEL) { + { + setState(5962); + levelsInWeightString(); + } + } + + setState(5965); + match(RR_BRACKET); + } + break; + case 14: + _localctx = new ExtractFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 14); + { + setState(5967); + match(EXTRACT); + setState(5968); + match(LR_BRACKET); + setState(5969); + intervalType(); + setState(5970); + match(FROM); + setState(5973); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,882,_ctx) ) { + case 1: + { + setState(5971); + ((ExtractFunctionCallContext)_localctx).sourceString = stringLiteral(); + } + break; + case 2: + { + setState(5972); + ((ExtractFunctionCallContext)_localctx).sourceExpression = expression(0); + } + break; + } + setState(5975); + match(RR_BRACKET); + } + break; + case 15: + _localctx = new GetFormatFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 15); + { + setState(5977); + match(GET_FORMAT); + setState(5978); + match(LR_BRACKET); + setState(5979); + ((GetFormatFunctionCallContext)_localctx).datetimeFormat = _input.LT(1); + _la = _input.LA(1); + if ( !(((((_la - 199)) & ~0x3f) == 0 && ((1L << (_la - 199)) & ((1L << (DATE - 199)) | (1L << (TIME - 199)) | (1L << (DATETIME - 199)))) != 0)) ) { + ((GetFormatFunctionCallContext)_localctx).datetimeFormat = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(5980); + match(COMMA); + setState(5981); + stringLiteral(); + setState(5982); + match(RR_BRACKET); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CaseFuncAlternativeContext extends ParserRuleContext { + public FunctionArgContext condition; + public FunctionArgContext consequent; + public TerminalNode WHEN() { return getToken(MySqlParser.WHEN, 0); } + public TerminalNode THEN() { return getToken(MySqlParser.THEN, 0); } + public List functionArg() { + return getRuleContexts(FunctionArgContext.class); + } + public FunctionArgContext functionArg(int i) { + return getRuleContext(FunctionArgContext.class,i); + } + public CaseFuncAlternativeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_caseFuncAlternative; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCaseFuncAlternative(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCaseFuncAlternative(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCaseFuncAlternative(this); + else return visitor.visitChildren(this); + } + } + + public final CaseFuncAlternativeContext caseFuncAlternative() throws RecognitionException { + CaseFuncAlternativeContext _localctx = new CaseFuncAlternativeContext(_ctx, getState()); + enterRule(_localctx, 586, RULE_caseFuncAlternative); + try { + enterOuterAlt(_localctx, 1); + { + setState(5986); + match(WHEN); + setState(5987); + ((CaseFuncAlternativeContext)_localctx).condition = functionArg(); + setState(5988); + match(THEN); + setState(5989); + ((CaseFuncAlternativeContext)_localctx).consequent = functionArg(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LevelsInWeightStringContext extends ParserRuleContext { + public LevelsInWeightStringContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_levelsInWeightString; } + + public LevelsInWeightStringContext() { } + public void copyFrom(LevelsInWeightStringContext ctx) { + super.copyFrom(ctx); + } + } + public static class LevelWeightRangeContext extends LevelsInWeightStringContext { + public DecimalLiteralContext firstLevel; + public DecimalLiteralContext lastLevel; + public TerminalNode LEVEL() { return getToken(MySqlParser.LEVEL, 0); } + public TerminalNode MINUS() { return getToken(MySqlParser.MINUS, 0); } + public List decimalLiteral() { + return getRuleContexts(DecimalLiteralContext.class); + } + public DecimalLiteralContext decimalLiteral(int i) { + return getRuleContext(DecimalLiteralContext.class,i); + } + public LevelWeightRangeContext(LevelsInWeightStringContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLevelWeightRange(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLevelWeightRange(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLevelWeightRange(this); + else return visitor.visitChildren(this); + } + } + public static class LevelWeightListContext extends LevelsInWeightStringContext { + public TerminalNode LEVEL() { return getToken(MySqlParser.LEVEL, 0); } + public List levelInWeightListElement() { + return getRuleContexts(LevelInWeightListElementContext.class); + } + public LevelInWeightListElementContext levelInWeightListElement(int i) { + return getRuleContext(LevelInWeightListElementContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public LevelWeightListContext(LevelsInWeightStringContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLevelWeightList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLevelWeightList(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLevelWeightList(this); + else return visitor.visitChildren(this); + } + } + + public final LevelsInWeightStringContext levelsInWeightString() throws RecognitionException { + LevelsInWeightStringContext _localctx = new LevelsInWeightStringContext(_ctx, getState()); + enterRule(_localctx, 588, RULE_levelsInWeightString); + int _la; + try { + setState(6005); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,885,_ctx) ) { + case 1: + _localctx = new LevelWeightListContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(5991); + match(LEVEL); + setState(5992); + levelInWeightListElement(); + setState(5997); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(5993); + match(COMMA); + setState(5994); + levelInWeightListElement(); + } + } + setState(5999); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 2: + _localctx = new LevelWeightRangeContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(6000); + match(LEVEL); + setState(6001); + ((LevelWeightRangeContext)_localctx).firstLevel = decimalLiteral(); + setState(6002); + match(MINUS); + setState(6003); + ((LevelWeightRangeContext)_localctx).lastLevel = decimalLiteral(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LevelInWeightListElementContext extends ParserRuleContext { + public Token orderType; + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public TerminalNode ASC() { return getToken(MySqlParser.ASC, 0); } + public TerminalNode DESC() { return getToken(MySqlParser.DESC, 0); } + public TerminalNode REVERSE() { return getToken(MySqlParser.REVERSE, 0); } + public LevelInWeightListElementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_levelInWeightListElement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLevelInWeightListElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLevelInWeightListElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLevelInWeightListElement(this); + else return visitor.visitChildren(this); + } + } + + public final LevelInWeightListElementContext levelInWeightListElement() throws RecognitionException { + LevelInWeightListElementContext _localctx = new LevelInWeightListElementContext(_ctx, getState()); + enterRule(_localctx, 590, RULE_levelInWeightListElement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(6007); + decimalLiteral(); + setState(6009); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ASC || _la==DESC || _la==REVERSE) { + { + setState(6008); + ((LevelInWeightListElementContext)_localctx).orderType = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ASC || _la==DESC || _la==REVERSE) ) { + ((LevelInWeightListElementContext)_localctx).orderType = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AggregateWindowedFunctionContext extends ParserRuleContext { + public Token aggregator; + public Token starArg; + public Token separator; + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public FunctionArgContext functionArg() { + return getRuleContext(FunctionArgContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode AVG() { return getToken(MySqlParser.AVG, 0); } + public TerminalNode MAX() { return getToken(MySqlParser.MAX, 0); } + public TerminalNode MIN() { return getToken(MySqlParser.MIN, 0); } + public TerminalNode SUM() { return getToken(MySqlParser.SUM, 0); } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public TerminalNode DISTINCT() { return getToken(MySqlParser.DISTINCT, 0); } + public TerminalNode COUNT() { return getToken(MySqlParser.COUNT, 0); } + public TerminalNode STAR() { return getToken(MySqlParser.STAR, 0); } + public FunctionArgsContext functionArgs() { + return getRuleContext(FunctionArgsContext.class,0); + } + public TerminalNode BIT_AND() { return getToken(MySqlParser.BIT_AND, 0); } + public TerminalNode BIT_OR() { return getToken(MySqlParser.BIT_OR, 0); } + public TerminalNode BIT_XOR() { return getToken(MySqlParser.BIT_XOR, 0); } + public TerminalNode STD() { return getToken(MySqlParser.STD, 0); } + public TerminalNode STDDEV() { return getToken(MySqlParser.STDDEV, 0); } + public TerminalNode STDDEV_POP() { return getToken(MySqlParser.STDDEV_POP, 0); } + public TerminalNode STDDEV_SAMP() { return getToken(MySqlParser.STDDEV_SAMP, 0); } + public TerminalNode VAR_POP() { return getToken(MySqlParser.VAR_POP, 0); } + public TerminalNode VAR_SAMP() { return getToken(MySqlParser.VAR_SAMP, 0); } + public TerminalNode VARIANCE() { return getToken(MySqlParser.VARIANCE, 0); } + public TerminalNode GROUP_CONCAT() { return getToken(MySqlParser.GROUP_CONCAT, 0); } + public TerminalNode ORDER() { return getToken(MySqlParser.ORDER, 0); } + public TerminalNode BY() { return getToken(MySqlParser.BY, 0); } + public List orderByExpression() { + return getRuleContexts(OrderByExpressionContext.class); + } + public OrderByExpressionContext orderByExpression(int i) { + return getRuleContext(OrderByExpressionContext.class,i); + } + public TerminalNode SEPARATOR() { return getToken(MySqlParser.SEPARATOR, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public AggregateWindowedFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_aggregateWindowedFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterAggregateWindowedFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitAggregateWindowedFunction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitAggregateWindowedFunction(this); + else return visitor.visitChildren(this); + } + } + + public final AggregateWindowedFunctionContext aggregateWindowedFunction() throws RecognitionException { + AggregateWindowedFunctionContext _localctx = new AggregateWindowedFunctionContext(_ctx, getState()); + enterRule(_localctx, 592, RULE_aggregateWindowedFunction); + int _la; + try { + setState(6067); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,895,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(6011); + _la = _input.LA(1); + if ( !(((((_la - 235)) & ~0x3f) == 0 && ((1L << (_la - 235)) & ((1L << (AVG - 235)) | (1L << (MAX - 235)) | (1L << (MIN - 235)) | (1L << (SUM - 235)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(6012); + match(LR_BRACKET); + setState(6014); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALL || _la==DISTINCT) { + { + setState(6013); + ((AggregateWindowedFunctionContext)_localctx).aggregator = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ALL || _la==DISTINCT) ) { + ((AggregateWindowedFunctionContext)_localctx).aggregator = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(6016); + functionArg(); + setState(6017); + match(RR_BRACKET); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(6019); + match(COUNT); + setState(6020); + match(LR_BRACKET); + setState(6026); + _errHandler.sync(this); + switch (_input.LA(1)) { + case STAR: + { + setState(6021); + ((AggregateWindowedFunctionContext)_localctx).starArg = match(STAR); + } + break; + case ALL: + case CASE: + case CAST: + case CONVERT: + case CURRENT: + case CURRENT_USER: + case DATABASE: + case DIAGNOSTICS: + case EXISTS: + case FALSE: + case IF: + case INSERT: + case INTERVAL: + case LEFT: + case NOT: + case NULL_LITERAL: + case NUMBER: + case REPLACE: + case RIGHT: + case STACKED: + case TRUE: + case VALUES: + case DATE: + case TIME: + case TIMESTAMP: + case DATETIME: + case YEAR: + case CHAR: + case BINARY: + case TEXT: + case ENUM: + case SERIAL: + case AVG: + case BIT_AND: + case BIT_OR: + case BIT_XOR: + case COUNT: + case GROUP_CONCAT: + case MAX: + case MIN: + case STD: + case STDDEV: + case STDDEV_POP: + case STDDEV_SAMP: + case SUM: + case VAR_POP: + case VAR_SAMP: + case VARIANCE: + case CURRENT_DATE: + case CURRENT_TIME: + case CURRENT_TIMESTAMP: + case LOCALTIME: + case CURDATE: + case CURTIME: + case DATE_ADD: + case DATE_SUB: + case EXTRACT: + case LOCALTIMESTAMP: + case NOW: + case POSITION: + case SUBSTR: + case SUBSTRING: + case SYSDATE: + case TRIM: + case UTC_DATE: + case UTC_TIME: + case UTC_TIMESTAMP: + case ACCOUNT: + case ACTION: + case AFTER: + case AGGREGATE: + case ALGORITHM: + case ANY: + case AT: + case AUTHORS: + case AUTOCOMMIT: + case AUTOEXTEND_SIZE: + case AUTO_INCREMENT: + case AVG_ROW_LENGTH: + case BEGIN: + case BINLOG: + case BIT: + case BLOCK: + case BOOL: + case BOOLEAN: + case BTREE: + case CACHE: + case CASCADED: + case CHAIN: + case CHANGED: + case CHANNEL: + case CHECKSUM: + case PAGE_CHECKSUM: + case CIPHER: + case CLASS_ORIGIN: + case CLIENT: + case CLOSE: + case COALESCE: + case CODE: + case COLUMNS: + case COLUMN_FORMAT: + case COLUMN_NAME: + case COMMENT: + case COMMIT: + case COMPACT: + case COMPLETION: + case COMPRESSED: + case COMPRESSION: + case CONCURRENT: + case CONNECTION: + case CONSISTENT: + case CONSTRAINT_CATALOG: + case CONSTRAINT_SCHEMA: + case CONSTRAINT_NAME: + case CONTAINS: + case CONTEXT: + case CONTRIBUTORS: + case COPY: + case CPU: + case CURSOR_NAME: + case DATA: + case DATAFILE: + case DEALLOCATE: + case DEFAULT_AUTH: + case DEFINER: + case DELAY_KEY_WRITE: + case DES_KEY_FILE: + case DIRECTORY: + case DISABLE: + case DISCARD: + case DISK: + case DO: + case DUMPFILE: + case DUPLICATE: + case DYNAMIC: + case ENABLE: + case ENCRYPTION: + case END: + case ENDS: + case ENGINE: + case ENGINES: + case ERROR: + case ERRORS: + case ESCAPE: + case EVEN: + case EVENT: + case EVENTS: + case EVERY: + case EXCHANGE: + case EXCLUSIVE: + case EXPIRE: + case EXPORT: + case EXTENDED: + case EXTENT_SIZE: + case FAST: + case FAULTS: + case FIELDS: + case FILE_BLOCK_SIZE: + case FILTER: + case FIRST: + case FIXED: + case FLUSH: + case FOLLOWS: + case FOUND: + case FULL: + case FUNCTION: + case GENERAL: + case GLOBAL: + case GRANTS: + case GROUP_REPLICATION: + case HANDLER: + case HASH: + case HELP: + case HOST: + case HOSTS: + case IDENTIFIED: + case IGNORE_SERVER_IDS: + case IMPORT: + case INDEXES: + case INITIAL_SIZE: + case INPLACE: + case INSERT_METHOD: + case INSTALL: + case INSTANCE: + case INVISIBLE: + case INVOKER: + case IO: + case IO_THREAD: + case IPC: + case ISOLATION: + case ISSUER: + case JSON: + case KEY_BLOCK_SIZE: + case LANGUAGE: + case LAST: + case LEAVES: + case LESS: + case LEVEL: + case LIST: + case LOCAL: + case LOGFILE: + case LOGS: + case MASTER: + case MASTER_AUTO_POSITION: + case MASTER_CONNECT_RETRY: + case MASTER_DELAY: + case MASTER_HEARTBEAT_PERIOD: + case MASTER_HOST: + case MASTER_LOG_FILE: + case MASTER_LOG_POS: + case MASTER_PASSWORD: + case MASTER_PORT: + case MASTER_RETRY_COUNT: + case MASTER_SSL: + case MASTER_SSL_CA: + case MASTER_SSL_CAPATH: + case MASTER_SSL_CERT: + case MASTER_SSL_CIPHER: + case MASTER_SSL_CRL: + case MASTER_SSL_CRLPATH: + case MASTER_SSL_KEY: + case MASTER_TLS_VERSION: + case MASTER_USER: + case MAX_CONNECTIONS_PER_HOUR: + case MAX_QUERIES_PER_HOUR: + case MAX_ROWS: + case MAX_SIZE: + case MAX_UPDATES_PER_HOUR: + case MAX_USER_CONNECTIONS: + case MEDIUM: + case MERGE: + case MESSAGE_TEXT: + case MID: + case MIGRATE: + case MIN_ROWS: + case MODE: + case MODIFY: + case MUTEX: + case MYSQL: + case MYSQL_ERRNO: + case NAME: + case NAMES: + case NCHAR: + case NEVER: + case NEXT: + case NO: + case NODEGROUP: + case NONE: + case OFFLINE: + case OFFSET: + case OJ: + case OLD_PASSWORD: + case ONE: + case ONLINE: + case ONLY: + case OPEN: + case OPTIMIZER_COSTS: + case OPTIONS: + case OWNER: + case PACK_KEYS: + case PAGE: + case PARSER: + case PARTIAL: + case PARTITIONING: + case PARTITIONS: + case PASSWORD: + case PHASE: + case PLUGIN: + case PLUGIN_DIR: + case PLUGINS: + case PORT: + case PRECEDES: + case PREPARE: + case PRESERVE: + case PREV: + case PROCESSLIST: + case PROFILE: + case PROFILES: + case PROXY: + case QUERY: + case QUICK: + case REBUILD: + case RECOVER: + case REDO_BUFFER_SIZE: + case REDUNDANT: + case RELAY: + case RELAY_LOG_FILE: + case RELAY_LOG_POS: + case RELAYLOG: + case REMOVE: + case REORGANIZE: + case REPAIR: + case REPLICATE_DO_DB: + case REPLICATE_DO_TABLE: + case REPLICATE_IGNORE_DB: + case REPLICATE_IGNORE_TABLE: + case REPLICATE_REWRITE_DB: + case REPLICATE_WILD_DO_TABLE: + case REPLICATE_WILD_IGNORE_TABLE: + case REPLICATION: + case RESET: + case RESUME: + case RETURNED_SQLSTATE: + case RETURNS: + case ROLLBACK: + case ROLLUP: + case ROTATE: + case ROW: + case ROWS: + case ROW_FORMAT: + case SAVEPOINT: + case SCHEDULE: + case SECURITY: + case SERVER: + case SESSION: + case SHARE: + case SHARED: + case SIGNED: + case SIMPLE: + case SLAVE: + case SLOW: + case SNAPSHOT: + case SOCKET: + case SOME: + case SONAME: + case SOUNDS: + case SOURCE: + case SQL_AFTER_GTIDS: + case SQL_AFTER_MTS_GAPS: + case SQL_BEFORE_GTIDS: + case SQL_BUFFER_RESULT: + case SQL_CACHE: + case SQL_NO_CACHE: + case SQL_THREAD: + case START: + case STARTS: + case STATS_AUTO_RECALC: + case STATS_PERSISTENT: + case STATS_SAMPLE_PAGES: + case STATUS: + case STOP: + case STORAGE: + case STRING: + case SUBCLASS_ORIGIN: + case SUBJECT: + case SUBPARTITION: + case SUBPARTITIONS: + case SUSPEND: + case SWAPS: + case SWITCHES: + case TABLE_NAME: + case TABLESPACE: + case TEMPORARY: + case TEMPTABLE: + case THAN: + case TRADITIONAL: + case TRANSACTION: + case TRIGGERS: + case TRUNCATE: + case UNDEFINED: + case UNDOFILE: + case UNDO_BUFFER_SIZE: + case UNINSTALL: + case UNKNOWN: + case UNTIL: + case UPGRADE: + case USER: + case USE_FRM: + case USER_RESOURCES: + case VALIDATION: + case VALUE: + case VARIABLES: + case VIEW: + case VISIBLE: + case WAIT: + case WARNINGS: + case WITHOUT: + case WORK: + case WRAPPER: + case X509: + case XA: + case XML: + case INTERNAL: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case TABLES: + case ROUTINE: + case EXECUTE: + case FILE: + case PROCESS: + case RELOAD: + case SHUTDOWN: + case SUPER: + case PRIVILEGES: + case SESSION_VARIABLES_ADMIN: + case ARMSCII8: + case ASCII: + case BIG5: + case CP1250: + case CP1251: + case CP1256: + case CP1257: + case CP850: + case CP852: + case CP866: + case CP932: + case DEC8: + case EUCJPMS: + case EUCKR: + case GB2312: + case GBK: + case GEOSTD8: + case GREEK: + case HEBREW: + case HP8: + case KEYBCS2: + case KOI8R: + case KOI8U: + case LATIN1: + case LATIN2: + case LATIN5: + case LATIN7: + case MACCE: + case MACROMAN: + case SJIS: + case SWE7: + case TIS620: + case UCS2: + case UJIS: + case UTF16: + case UTF16LE: + case UTF32: + case UTF8: + case UTF8MB3: + case UTF8MB4: + case ARCHIVE: + case BLACKHOLE: + case CSV: + case FEDERATED: + case INNODB: + case MEMORY: + case MRG_MYISAM: + case MYISAM: + case NDB: + case NDBCLUSTER: + case PERFORMANCE_SCHEMA: + case TOKUDB: + case REPEATABLE: + case COMMITTED: + case UNCOMMITTED: + case SERIALIZABLE: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CATALOG_NAME: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SCHEMA_NAME: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + case PLUS: + case MINUS: + case EXCLAMATION_SYMBOL: + case BIT_NOT_OP: + case LR_BRACKET: + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case CHARSET_REVERSE_QOUTE_STRING: + case START_NATIONAL_STRING_LITERAL: + case STRING_LITERAL: + case DECIMAL_LITERAL: + case HEXADECIMAL_LITERAL: + case REAL_LITERAL: + case NULL_SPEC_LITERAL: + case BIT_STRING: + case STRING_CHARSET_NAME: + case ID: + case REVERSE_QUOTE_ID: + case LOCAL_ID: + case GLOBAL_ID: + { + setState(6023); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALL) { + { + setState(6022); + ((AggregateWindowedFunctionContext)_localctx).aggregator = match(ALL); + } + } + + setState(6025); + functionArg(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(6028); + match(RR_BRACKET); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(6029); + match(COUNT); + setState(6030); + match(LR_BRACKET); + setState(6031); + ((AggregateWindowedFunctionContext)_localctx).aggregator = match(DISTINCT); + setState(6032); + functionArgs(); + setState(6033); + match(RR_BRACKET); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(6035); + _la = _input.LA(1); + if ( !(((((_la - 236)) & ~0x3f) == 0 && ((1L << (_la - 236)) & ((1L << (BIT_AND - 236)) | (1L << (BIT_OR - 236)) | (1L << (BIT_XOR - 236)) | (1L << (STD - 236)) | (1L << (STDDEV - 236)) | (1L << (STDDEV_POP - 236)) | (1L << (STDDEV_SAMP - 236)) | (1L << (VAR_POP - 236)) | (1L << (VAR_SAMP - 236)) | (1L << (VARIANCE - 236)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(6036); + match(LR_BRACKET); + setState(6038); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALL) { + { + setState(6037); + ((AggregateWindowedFunctionContext)_localctx).aggregator = match(ALL); + } + } + + setState(6040); + functionArg(); + setState(6041); + match(RR_BRACKET); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(6043); + match(GROUP_CONCAT); + setState(6044); + match(LR_BRACKET); + setState(6046); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DISTINCT) { + { + setState(6045); + ((AggregateWindowedFunctionContext)_localctx).aggregator = match(DISTINCT); + } + } + + setState(6048); + functionArgs(); + setState(6059); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ORDER) { + { + setState(6049); + match(ORDER); + setState(6050); + match(BY); + setState(6051); + orderByExpression(); + setState(6056); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(6052); + match(COMMA); + setState(6053); + orderByExpression(); + } + } + setState(6058); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(6063); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SEPARATOR) { + { + setState(6061); + match(SEPARATOR); + setState(6062); + ((AggregateWindowedFunctionContext)_localctx).separator = match(STRING_LITERAL); + } + } + + setState(6065); + match(RR_BRACKET); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ScalarFunctionNameContext extends ParserRuleContext { + public FunctionNameBaseContext functionNameBase() { + return getRuleContext(FunctionNameBaseContext.class,0); + } + public TerminalNode ASCII() { return getToken(MySqlParser.ASCII, 0); } + public TerminalNode CURDATE() { return getToken(MySqlParser.CURDATE, 0); } + public TerminalNode CURRENT_DATE() { return getToken(MySqlParser.CURRENT_DATE, 0); } + public TerminalNode CURRENT_TIME() { return getToken(MySqlParser.CURRENT_TIME, 0); } + public TerminalNode CURRENT_TIMESTAMP() { return getToken(MySqlParser.CURRENT_TIMESTAMP, 0); } + public TerminalNode CURTIME() { return getToken(MySqlParser.CURTIME, 0); } + public TerminalNode DATE_ADD() { return getToken(MySqlParser.DATE_ADD, 0); } + public TerminalNode DATE_SUB() { return getToken(MySqlParser.DATE_SUB, 0); } + public TerminalNode IF() { return getToken(MySqlParser.IF, 0); } + public TerminalNode INSERT() { return getToken(MySqlParser.INSERT, 0); } + public TerminalNode LOCALTIME() { return getToken(MySqlParser.LOCALTIME, 0); } + public TerminalNode LOCALTIMESTAMP() { return getToken(MySqlParser.LOCALTIMESTAMP, 0); } + public TerminalNode MID() { return getToken(MySqlParser.MID, 0); } + public TerminalNode NOW() { return getToken(MySqlParser.NOW, 0); } + public TerminalNode REPLACE() { return getToken(MySqlParser.REPLACE, 0); } + public TerminalNode SUBSTR() { return getToken(MySqlParser.SUBSTR, 0); } + public TerminalNode SUBSTRING() { return getToken(MySqlParser.SUBSTRING, 0); } + public TerminalNode SYSDATE() { return getToken(MySqlParser.SYSDATE, 0); } + public TerminalNode TRIM() { return getToken(MySqlParser.TRIM, 0); } + public TerminalNode UTC_DATE() { return getToken(MySqlParser.UTC_DATE, 0); } + public TerminalNode UTC_TIME() { return getToken(MySqlParser.UTC_TIME, 0); } + public TerminalNode UTC_TIMESTAMP() { return getToken(MySqlParser.UTC_TIMESTAMP, 0); } + public ScalarFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_scalarFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterScalarFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitScalarFunctionName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitScalarFunctionName(this); + else return visitor.visitChildren(this); + } + } + + public final ScalarFunctionNameContext scalarFunctionName() throws RecognitionException { + ScalarFunctionNameContext _localctx = new ScalarFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 594, RULE_scalarFunctionName); + try { + setState(6092); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DATABASE: + case LEFT: + case RIGHT: + case DATE: + case TIME: + case TIMESTAMP: + case YEAR: + case COUNT: + case POSITION: + case INVISIBLE: + case VISIBLE: + case QUARTER: + case MONTH: + case DAY: + case HOUR: + case MINUTE: + case WEEK: + case SECOND: + case MICROSECOND: + case SESSION_VARIABLES_ADMIN: + case GEOMETRYCOLLECTION: + case LINESTRING: + case MULTILINESTRING: + case MULTIPOINT: + case MULTIPOLYGON: + case POINT: + case POLYGON: + case ABS: + case ACOS: + case ADDDATE: + case ADDTIME: + case AES_DECRYPT: + case AES_ENCRYPT: + case AREA: + case ASBINARY: + case ASIN: + case ASTEXT: + case ASWKB: + case ASWKT: + case ASYMMETRIC_DECRYPT: + case ASYMMETRIC_DERIVE: + case ASYMMETRIC_ENCRYPT: + case ASYMMETRIC_SIGN: + case ASYMMETRIC_VERIFY: + case ATAN: + case ATAN2: + case BENCHMARK: + case BIN: + case BIT_COUNT: + case BIT_LENGTH: + case BUFFER: + case CEIL: + case CEILING: + case CENTROID: + case CHARACTER_LENGTH: + case CHARSET: + case CHAR_LENGTH: + case COERCIBILITY: + case COLLATION: + case COMPRESS: + case CONCAT: + case CONCAT_WS: + case CONNECTION_ID: + case CONV: + case CONVERT_TZ: + case COS: + case COT: + case CRC32: + case CREATE_ASYMMETRIC_PRIV_KEY: + case CREATE_ASYMMETRIC_PUB_KEY: + case CREATE_DH_PARAMETERS: + case CREATE_DIGEST: + case CROSSES: + case DATEDIFF: + case DATE_FORMAT: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DECODE: + case DEGREES: + case DES_DECRYPT: + case DES_ENCRYPT: + case DIMENSION: + case DISJOINT: + case ELT: + case ENCODE: + case ENCRYPT: + case ENDPOINT: + case ENVELOPE: + case EQUALS: + case EXP: + case EXPORT_SET: + case EXTERIORRING: + case EXTRACTVALUE: + case FIELD: + case FIND_IN_SET: + case FLOOR: + case FORMAT: + case FOUND_ROWS: + case FROM_BASE64: + case FROM_DAYS: + case FROM_UNIXTIME: + case GEOMCOLLFROMTEXT: + case GEOMCOLLFROMWKB: + case GEOMETRYCOLLECTIONFROMTEXT: + case GEOMETRYCOLLECTIONFROMWKB: + case GEOMETRYFROMTEXT: + case GEOMETRYFROMWKB: + case GEOMETRYN: + case GEOMETRYTYPE: + case GEOMFROMTEXT: + case GEOMFROMWKB: + case GET_FORMAT: + case GET_LOCK: + case GLENGTH: + case GREATEST: + case GTID_SUBSET: + case GTID_SUBTRACT: + case HEX: + case IFNULL: + case INET6_ATON: + case INET6_NTOA: + case INET_ATON: + case INET_NTOA: + case INSTR: + case INTERIORRINGN: + case INTERSECTS: + case ISCLOSED: + case ISEMPTY: + case ISNULL: + case ISSIMPLE: + case IS_FREE_LOCK: + case IS_IPV4: + case IS_IPV4_COMPAT: + case IS_IPV4_MAPPED: + case IS_IPV6: + case IS_USED_LOCK: + case LAST_INSERT_ID: + case LCASE: + case LEAST: + case LENGTH: + case LINEFROMTEXT: + case LINEFROMWKB: + case LINESTRINGFROMTEXT: + case LINESTRINGFROMWKB: + case LN: + case LOAD_FILE: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LPAD: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MAKE_SET: + case MASTER_POS_WAIT: + case MBRCONTAINS: + case MBRDISJOINT: + case MBREQUAL: + case MBRINTERSECTS: + case MBROVERLAPS: + case MBRTOUCHES: + case MBRWITHIN: + case MD5: + case MLINEFROMTEXT: + case MLINEFROMWKB: + case MONTHNAME: + case MPOINTFROMTEXT: + case MPOINTFROMWKB: + case MPOLYFROMTEXT: + case MPOLYFROMWKB: + case MULTILINESTRINGFROMTEXT: + case MULTILINESTRINGFROMWKB: + case MULTIPOINTFROMTEXT: + case MULTIPOINTFROMWKB: + case MULTIPOLYGONFROMTEXT: + case MULTIPOLYGONFROMWKB: + case NAME_CONST: + case NULLIF: + case NUMGEOMETRIES: + case NUMINTERIORRINGS: + case NUMPOINTS: + case OCT: + case OCTET_LENGTH: + case ORD: + case OVERLAPS: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POINTFROMTEXT: + case POINTFROMWKB: + case POINTN: + case POLYFROMTEXT: + case POLYFROMWKB: + case POLYGONFROMTEXT: + case POLYGONFROMWKB: + case POW: + case POWER: + case QUOTE: + case RADIANS: + case RAND: + case RANDOM_BYTES: + case RELEASE_LOCK: + case REVERSE: + case ROUND: + case ROW_COUNT: + case RPAD: + case RTRIM: + case SEC_TO_TIME: + case SESSION_USER: + case SHA: + case SHA1: + case SHA2: + case SIGN: + case SIN: + case SLEEP: + case SOUNDEX: + case SQL_THREAD_WAIT_AFTER_GTIDS: + case SQRT: + case SRID: + case STARTPOINT: + case STRCMP: + case STR_TO_DATE: + case ST_AREA: + case ST_ASBINARY: + case ST_ASTEXT: + case ST_ASWKB: + case ST_ASWKT: + case ST_BUFFER: + case ST_CENTROID: + case ST_CONTAINS: + case ST_CROSSES: + case ST_DIFFERENCE: + case ST_DIMENSION: + case ST_DISJOINT: + case ST_DISTANCE: + case ST_ENDPOINT: + case ST_ENVELOPE: + case ST_EQUALS: + case ST_EXTERIORRING: + case ST_GEOMCOLLFROMTEXT: + case ST_GEOMCOLLFROMTXT: + case ST_GEOMCOLLFROMWKB: + case ST_GEOMETRYCOLLECTIONFROMTEXT: + case ST_GEOMETRYCOLLECTIONFROMWKB: + case ST_GEOMETRYFROMTEXT: + case ST_GEOMETRYFROMWKB: + case ST_GEOMETRYN: + case ST_GEOMETRYTYPE: + case ST_GEOMFROMTEXT: + case ST_GEOMFROMWKB: + case ST_INTERIORRINGN: + case ST_INTERSECTION: + case ST_INTERSECTS: + case ST_ISCLOSED: + case ST_ISEMPTY: + case ST_ISSIMPLE: + case ST_LINEFROMTEXT: + case ST_LINEFROMWKB: + case ST_LINESTRINGFROMTEXT: + case ST_LINESTRINGFROMWKB: + case ST_NUMGEOMETRIES: + case ST_NUMINTERIORRING: + case ST_NUMINTERIORRINGS: + case ST_NUMPOINTS: + case ST_OVERLAPS: + case ST_POINTFROMTEXT: + case ST_POINTFROMWKB: + case ST_POINTN: + case ST_POLYFROMTEXT: + case ST_POLYFROMWKB: + case ST_POLYGONFROMTEXT: + case ST_POLYGONFROMWKB: + case ST_SRID: + case ST_STARTPOINT: + case ST_SYMDIFFERENCE: + case ST_TOUCHES: + case ST_UNION: + case ST_WITHIN: + case ST_X: + case ST_Y: + case SUBDATE: + case SUBSTRING_INDEX: + case SUBTIME: + case SYSTEM_USER: + case TAN: + case TIMEDIFF: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TOUCHES: + case TO_BASE64: + case TO_DAYS: + case TO_SECONDS: + case UCASE: + case UNCOMPRESS: + case UNCOMPRESSED_LENGTH: + case UNHEX: + case UNIX_TIMESTAMP: + case UPDATEXML: + case UPPER: + case UUID: + case UUID_SHORT: + case VALIDATE_PASSWORD_STRENGTH: + case VERSION: + case WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: + case WEEKDAY: + case WEEKOFYEAR: + case WEIGHT_STRING: + case WITHIN: + case YEARWEEK: + case Y_FUNCTION: + case X_FUNCTION: + enterOuterAlt(_localctx, 1); + { + setState(6069); + functionNameBase(); + } + break; + case ASCII: + enterOuterAlt(_localctx, 2); + { + setState(6070); + match(ASCII); + } + break; + case CURDATE: + enterOuterAlt(_localctx, 3); + { + setState(6071); + match(CURDATE); + } + break; + case CURRENT_DATE: + enterOuterAlt(_localctx, 4); + { + setState(6072); + match(CURRENT_DATE); + } + break; + case CURRENT_TIME: + enterOuterAlt(_localctx, 5); + { + setState(6073); + match(CURRENT_TIME); + } + break; + case CURRENT_TIMESTAMP: + enterOuterAlt(_localctx, 6); + { + setState(6074); + match(CURRENT_TIMESTAMP); + } + break; + case CURTIME: + enterOuterAlt(_localctx, 7); + { + setState(6075); + match(CURTIME); + } + break; + case DATE_ADD: + enterOuterAlt(_localctx, 8); + { + setState(6076); + match(DATE_ADD); + } + break; + case DATE_SUB: + enterOuterAlt(_localctx, 9); + { + setState(6077); + match(DATE_SUB); + } + break; + case IF: + enterOuterAlt(_localctx, 10); + { + setState(6078); + match(IF); + } + break; + case INSERT: + enterOuterAlt(_localctx, 11); + { + setState(6079); + match(INSERT); + } + break; + case LOCALTIME: + enterOuterAlt(_localctx, 12); + { + setState(6080); + match(LOCALTIME); + } + break; + case LOCALTIMESTAMP: + enterOuterAlt(_localctx, 13); + { + setState(6081); + match(LOCALTIMESTAMP); + } + break; + case MID: + enterOuterAlt(_localctx, 14); + { + setState(6082); + match(MID); + } + break; + case NOW: + enterOuterAlt(_localctx, 15); + { + setState(6083); + match(NOW); + } + break; + case REPLACE: + enterOuterAlt(_localctx, 16); + { + setState(6084); + match(REPLACE); + } + break; + case SUBSTR: + enterOuterAlt(_localctx, 17); + { + setState(6085); + match(SUBSTR); + } + break; + case SUBSTRING: + enterOuterAlt(_localctx, 18); + { + setState(6086); + match(SUBSTRING); + } + break; + case SYSDATE: + enterOuterAlt(_localctx, 19); + { + setState(6087); + match(SYSDATE); + } + break; + case TRIM: + enterOuterAlt(_localctx, 20); + { + setState(6088); + match(TRIM); + } + break; + case UTC_DATE: + enterOuterAlt(_localctx, 21); + { + setState(6089); + match(UTC_DATE); + } + break; + case UTC_TIME: + enterOuterAlt(_localctx, 22); + { + setState(6090); + match(UTC_TIME); + } + break; + case UTC_TIMESTAMP: + enterOuterAlt(_localctx, 23); + { + setState(6091); + match(UTC_TIMESTAMP); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PasswordFunctionClauseContext extends ParserRuleContext { + public Token functionName; + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public FunctionArgContext functionArg() { + return getRuleContext(FunctionArgContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode PASSWORD() { return getToken(MySqlParser.PASSWORD, 0); } + public TerminalNode OLD_PASSWORD() { return getToken(MySqlParser.OLD_PASSWORD, 0); } + public PasswordFunctionClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_passwordFunctionClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPasswordFunctionClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPasswordFunctionClause(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPasswordFunctionClause(this); + else return visitor.visitChildren(this); + } + } + + public final PasswordFunctionClauseContext passwordFunctionClause() throws RecognitionException { + PasswordFunctionClauseContext _localctx = new PasswordFunctionClauseContext(_ctx, getState()); + enterRule(_localctx, 596, RULE_passwordFunctionClause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(6094); + ((PasswordFunctionClauseContext)_localctx).functionName = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==OLD_PASSWORD || _la==PASSWORD) ) { + ((PasswordFunctionClauseContext)_localctx).functionName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(6095); + match(LR_BRACKET); + setState(6096); + functionArg(); + setState(6097); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionArgsContext extends ParserRuleContext { + public List constant() { + return getRuleContexts(ConstantContext.class); + } + public ConstantContext constant(int i) { + return getRuleContext(ConstantContext.class,i); + } + public List fullColumnName() { + return getRuleContexts(FullColumnNameContext.class); + } + public FullColumnNameContext fullColumnName(int i) { + return getRuleContext(FullColumnNameContext.class,i); + } + public List functionCall() { + return getRuleContexts(FunctionCallContext.class); + } + public FunctionCallContext functionCall(int i) { + return getRuleContext(FunctionCallContext.class,i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public FunctionArgsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionArgs; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFunctionArgs(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFunctionArgs(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFunctionArgs(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionArgsContext functionArgs() throws RecognitionException { + FunctionArgsContext _localctx = new FunctionArgsContext(_ctx, getState()); + enterRule(_localctx, 598, RULE_functionArgs); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(6103); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,897,_ctx) ) { + case 1: + { + setState(6099); + constant(); + } + break; + case 2: + { + setState(6100); + fullColumnName(); + } + break; + case 3: + { + setState(6101); + functionCall(); + } + break; + case 4: + { + setState(6102); + expression(0); + } + break; + } + setState(6114); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(6105); + match(COMMA); + setState(6110); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,898,_ctx) ) { + case 1: + { + setState(6106); + constant(); + } + break; + case 2: + { + setState(6107); + fullColumnName(); + } + break; + case 3: + { + setState(6108); + functionCall(); + } + break; + case 4: + { + setState(6109); + expression(0); + } + break; + } + } + } + setState(6116); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionArgContext extends ParserRuleContext { + public ConstantContext constant() { + return getRuleContext(ConstantContext.class,0); + } + public FullColumnNameContext fullColumnName() { + return getRuleContext(FullColumnNameContext.class,0); + } + public FunctionCallContext functionCall() { + return getRuleContext(FunctionCallContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public FunctionArgContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionArg; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFunctionArg(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFunctionArg(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFunctionArg(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionArgContext functionArg() throws RecognitionException { + FunctionArgContext _localctx = new FunctionArgContext(_ctx, getState()); + enterRule(_localctx, 600, RULE_functionArg); + try { + setState(6121); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,900,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(6117); + constant(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(6118); + fullColumnName(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(6119); + functionCall(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(6120); + expression(0); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExpressionContext extends ParserRuleContext { + public ExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expression; } + + public ExpressionContext() { } + public void copyFrom(ExpressionContext ctx) { + super.copyFrom(ctx); + } + } + public static class IsExpressionContext extends ExpressionContext { + public Token testValue; + public PredicateContext predicate() { + return getRuleContext(PredicateContext.class,0); + } + public TerminalNode IS() { return getToken(MySqlParser.IS, 0); } + public TerminalNode TRUE() { return getToken(MySqlParser.TRUE, 0); } + public TerminalNode FALSE() { return getToken(MySqlParser.FALSE, 0); } + public TerminalNode UNKNOWN() { return getToken(MySqlParser.UNKNOWN, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public IsExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIsExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIsExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIsExpression(this); + else return visitor.visitChildren(this); + } + } + public static class NotExpressionContext extends ExpressionContext { + public Token notOperator; + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public TerminalNode EXCLAMATION_SYMBOL() { return getToken(MySqlParser.EXCLAMATION_SYMBOL, 0); } + public NotExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterNotExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitNotExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitNotExpression(this); + else return visitor.visitChildren(this); + } + } + public static class LogicalExpressionContext extends ExpressionContext { + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public LogicalOperatorContext logicalOperator() { + return getRuleContext(LogicalOperatorContext.class,0); + } + public LogicalExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLogicalExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLogicalExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLogicalExpression(this); + else return visitor.visitChildren(this); + } + } + public static class PredicateExpressionContext extends ExpressionContext { + public PredicateContext predicate() { + return getRuleContext(PredicateContext.class,0); + } + public PredicateExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPredicateExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPredicateExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPredicateExpression(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionContext expression() throws RecognitionException { + return expression(0); + } + + private ExpressionContext expression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState); + ExpressionContext _prevctx = _localctx; + int _startState = 602; + enterRecursionRule(_localctx, 602, RULE_expression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(6134); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,902,_ctx) ) { + case 1: + { + _localctx = new NotExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(6124); + ((NotExpressionContext)_localctx).notOperator = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==NOT || _la==EXCLAMATION_SYMBOL) ) { + ((NotExpressionContext)_localctx).notOperator = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(6125); + expression(4); + } + break; + case 2: + { + _localctx = new IsExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6126); + predicate(0); + setState(6127); + match(IS); + setState(6129); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(6128); + match(NOT); + } + } + + setState(6131); + ((IsExpressionContext)_localctx).testValue = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FALSE || _la==TRUE || _la==UNKNOWN) ) { + ((IsExpressionContext)_localctx).testValue = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + case 3: + { + _localctx = new PredicateExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6133); + predicate(0); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(6142); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,903,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new LogicalExpressionContext(new ExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expression); + setState(6136); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(6137); + logicalOperator(); + setState(6138); + expression(4); + } + } + } + setState(6144); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,903,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class PredicateContext extends ParserRuleContext { + public PredicateContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_predicate; } + + public PredicateContext() { } + public void copyFrom(PredicateContext ctx) { + super.copyFrom(ctx); + } + } + public static class SoundsLikePredicateContext extends PredicateContext { + public List predicate() { + return getRuleContexts(PredicateContext.class); + } + public PredicateContext predicate(int i) { + return getRuleContext(PredicateContext.class,i); + } + public TerminalNode SOUNDS() { return getToken(MySqlParser.SOUNDS, 0); } + public TerminalNode LIKE() { return getToken(MySqlParser.LIKE, 0); } + public SoundsLikePredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSoundsLikePredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSoundsLikePredicate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSoundsLikePredicate(this); + else return visitor.visitChildren(this); + } + } + public static class ExpressionAtomPredicateContext extends PredicateContext { + public ExpressionAtomContext expressionAtom() { + return getRuleContext(ExpressionAtomContext.class,0); + } + public TerminalNode LOCAL_ID() { return getToken(MySqlParser.LOCAL_ID, 0); } + public TerminalNode VAR_ASSIGN() { return getToken(MySqlParser.VAR_ASSIGN, 0); } + public ExpressionAtomPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterExpressionAtomPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitExpressionAtomPredicate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitExpressionAtomPredicate(this); + else return visitor.visitChildren(this); + } + } + public static class InPredicateContext extends PredicateContext { + public PredicateContext predicate() { + return getRuleContext(PredicateContext.class,0); + } + public TerminalNode IN() { return getToken(MySqlParser.IN, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public ExpressionsContext expressions() { + return getRuleContext(ExpressionsContext.class,0); + } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public InPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterInPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitInPredicate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitInPredicate(this); + else return visitor.visitChildren(this); + } + } + public static class SubqueryComparasionPredicateContext extends PredicateContext { + public Token quantifier; + public PredicateContext predicate() { + return getRuleContext(PredicateContext.class,0); + } + public ComparisonOperatorContext comparisonOperator() { + return getRuleContext(ComparisonOperatorContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public TerminalNode ANY() { return getToken(MySqlParser.ANY, 0); } + public TerminalNode SOME() { return getToken(MySqlParser.SOME, 0); } + public SubqueryComparasionPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSubqueryComparasionPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSubqueryComparasionPredicate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSubqueryComparasionPredicate(this); + else return visitor.visitChildren(this); + } + } + public static class BetweenPredicateContext extends PredicateContext { + public List predicate() { + return getRuleContexts(PredicateContext.class); + } + public PredicateContext predicate(int i) { + return getRuleContext(PredicateContext.class,i); + } + public TerminalNode BETWEEN() { return getToken(MySqlParser.BETWEEN, 0); } + public TerminalNode AND() { return getToken(MySqlParser.AND, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public BetweenPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBetweenPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBetweenPredicate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBetweenPredicate(this); + else return visitor.visitChildren(this); + } + } + public static class BinaryComparasionPredicateContext extends PredicateContext { + public PredicateContext left; + public PredicateContext right; + public ComparisonOperatorContext comparisonOperator() { + return getRuleContext(ComparisonOperatorContext.class,0); + } + public List predicate() { + return getRuleContexts(PredicateContext.class); + } + public PredicateContext predicate(int i) { + return getRuleContext(PredicateContext.class,i); + } + public BinaryComparasionPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBinaryComparasionPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBinaryComparasionPredicate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBinaryComparasionPredicate(this); + else return visitor.visitChildren(this); + } + } + public static class IsNullPredicateContext extends PredicateContext { + public PredicateContext predicate() { + return getRuleContext(PredicateContext.class,0); + } + public TerminalNode IS() { return getToken(MySqlParser.IS, 0); } + public NullNotnullContext nullNotnull() { + return getRuleContext(NullNotnullContext.class,0); + } + public IsNullPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIsNullPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIsNullPredicate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIsNullPredicate(this); + else return visitor.visitChildren(this); + } + } + public static class LikePredicateContext extends PredicateContext { + public List predicate() { + return getRuleContexts(PredicateContext.class); + } + public PredicateContext predicate(int i) { + return getRuleContext(PredicateContext.class,i); + } + public TerminalNode LIKE() { return getToken(MySqlParser.LIKE, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public TerminalNode ESCAPE() { return getToken(MySqlParser.ESCAPE, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public LikePredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLikePredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLikePredicate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLikePredicate(this); + else return visitor.visitChildren(this); + } + } + public static class RegexpPredicateContext extends PredicateContext { + public Token regex; + public List predicate() { + return getRuleContexts(PredicateContext.class); + } + public PredicateContext predicate(int i) { + return getRuleContext(PredicateContext.class,i); + } + public TerminalNode REGEXP() { return getToken(MySqlParser.REGEXP, 0); } + public TerminalNode RLIKE() { return getToken(MySqlParser.RLIKE, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public RegexpPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRegexpPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRegexpPredicate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRegexpPredicate(this); + else return visitor.visitChildren(this); + } + } + + public final PredicateContext predicate() throws RecognitionException { + return predicate(0); + } + + private PredicateContext predicate(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + PredicateContext _localctx = new PredicateContext(_ctx, _parentState); + PredicateContext _prevctx = _localctx; + int _startState = 604; + enterRecursionRule(_localctx, 604, RULE_predicate, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new ExpressionAtomPredicateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(6148); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,904,_ctx) ) { + case 1: + { + setState(6146); + match(LOCAL_ID); + setState(6147); + match(VAR_ASSIGN); + } + break; + } + setState(6150); + expressionAtom(0); + } + _ctx.stop = _input.LT(-1); + setState(6209); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,912,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(6207); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,911,_ctx) ) { + case 1: + { + _localctx = new BinaryComparasionPredicateContext(new PredicateContext(_parentctx, _parentState)); + ((BinaryComparasionPredicateContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(6152); + if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); + setState(6153); + comparisonOperator(); + setState(6154); + ((BinaryComparasionPredicateContext)_localctx).right = predicate(8); + } + break; + case 2: + { + _localctx = new BetweenPredicateContext(new PredicateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(6156); + if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); + setState(6158); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(6157); + match(NOT); + } + } + + setState(6160); + match(BETWEEN); + setState(6161); + predicate(0); + setState(6162); + match(AND); + setState(6163); + predicate(6); + } + break; + case 3: + { + _localctx = new SoundsLikePredicateContext(new PredicateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(6165); + if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); + setState(6166); + match(SOUNDS); + setState(6167); + match(LIKE); + setState(6168); + predicate(5); + } + break; + case 4: + { + _localctx = new RegexpPredicateContext(new PredicateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(6169); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(6171); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(6170); + match(NOT); + } + } + + setState(6173); + ((RegexpPredicateContext)_localctx).regex = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==REGEXP || _la==RLIKE) ) { + ((RegexpPredicateContext)_localctx).regex = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(6174); + predicate(3); + } + break; + case 5: + { + _localctx = new InPredicateContext(new PredicateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(6175); + if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); + setState(6177); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(6176); + match(NOT); + } + } + + setState(6179); + match(IN); + setState(6180); + match(LR_BRACKET); + setState(6183); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,908,_ctx) ) { + case 1: + { + setState(6181); + selectStatement(); + } + break; + case 2: + { + setState(6182); + expressions(); + } + break; + } + setState(6185); + match(RR_BRACKET); + } + break; + case 6: + { + _localctx = new IsNullPredicateContext(new PredicateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(6187); + if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); + setState(6188); + match(IS); + setState(6189); + nullNotnull(); + } + break; + case 7: + { + _localctx = new SubqueryComparasionPredicateContext(new PredicateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(6190); + if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); + setState(6191); + comparisonOperator(); + setState(6192); + ((SubqueryComparasionPredicateContext)_localctx).quantifier = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ALL || _la==ANY || _la==SOME) ) { + ((SubqueryComparasionPredicateContext)_localctx).quantifier = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(6193); + match(LR_BRACKET); + setState(6194); + selectStatement(); + setState(6195); + match(RR_BRACKET); + } + break; + case 8: + { + _localctx = new LikePredicateContext(new PredicateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(6197); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(6199); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(6198); + match(NOT); + } + } + + setState(6201); + match(LIKE); + setState(6202); + predicate(0); + setState(6205); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,910,_ctx) ) { + case 1: + { + setState(6203); + match(ESCAPE); + setState(6204); + match(STRING_LITERAL); + } + break; + } + } + break; + } + } + } + setState(6211); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,912,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class ExpressionForUpdateContext extends ParserRuleContext { + public ExpressionForUpdateContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionForUpdate; } + + public ExpressionForUpdateContext() { } + public void copyFrom(ExpressionForUpdateContext ctx) { + super.copyFrom(ctx); + } + } + public static class LogicalExpressionForUpdateContext extends ExpressionForUpdateContext { + public List expressionForUpdate() { + return getRuleContexts(ExpressionForUpdateContext.class); + } + public ExpressionForUpdateContext expressionForUpdate(int i) { + return getRuleContext(ExpressionForUpdateContext.class,i); + } + public LogicalOperatorContext logicalOperator() { + return getRuleContext(LogicalOperatorContext.class,0); + } + public LogicalExpressionForUpdateContext(ExpressionForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLogicalExpressionForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLogicalExpressionForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLogicalExpressionForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class PredicateExpressionForUpdateContext extends ExpressionForUpdateContext { + public PredicateForUpdateContext predicateForUpdate() { + return getRuleContext(PredicateForUpdateContext.class,0); + } + public PredicateExpressionForUpdateContext(ExpressionForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPredicateExpressionForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPredicateExpressionForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPredicateExpressionForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class IsExpressionForUpdateContext extends ExpressionForUpdateContext { + public Token testValue; + public ExpressionForUpdateContext expressionForUpdate() { + return getRuleContext(ExpressionForUpdateContext.class,0); + } + public TerminalNode IS() { return getToken(MySqlParser.IS, 0); } + public TerminalNode TRUE() { return getToken(MySqlParser.TRUE, 0); } + public TerminalNode FALSE() { return getToken(MySqlParser.FALSE, 0); } + public TerminalNode UNKNOWN() { return getToken(MySqlParser.UNKNOWN, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public IsExpressionForUpdateContext(ExpressionForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIsExpressionForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIsExpressionForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIsExpressionForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class NotExpressionForUpdateContext extends ExpressionForUpdateContext { + public Token notOperator; + public ExpressionForUpdateContext expressionForUpdate() { + return getRuleContext(ExpressionForUpdateContext.class,0); + } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public TerminalNode EXCLAMATION_SYMBOL() { return getToken(MySqlParser.EXCLAMATION_SYMBOL, 0); } + public NotExpressionForUpdateContext(ExpressionForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterNotExpressionForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitNotExpressionForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitNotExpressionForUpdate(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionForUpdateContext expressionForUpdate() throws RecognitionException { + return expressionForUpdate(0); + } + + private ExpressionForUpdateContext expressionForUpdate(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpressionForUpdateContext _localctx = new ExpressionForUpdateContext(_ctx, _parentState); + ExpressionForUpdateContext _prevctx = _localctx; + int _startState = 606; + enterRecursionRule(_localctx, 606, RULE_expressionForUpdate, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(6216); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,913,_ctx) ) { + case 1: + { + _localctx = new NotExpressionForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(6213); + ((NotExpressionForUpdateContext)_localctx).notOperator = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==NOT || _la==EXCLAMATION_SYMBOL) ) { + ((NotExpressionForUpdateContext)_localctx).notOperator = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(6214); + expressionForUpdate(4); + } + break; + case 2: + { + _localctx = new PredicateExpressionForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6215); + predicateForUpdate(0); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(6230); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,916,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(6228); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,915,_ctx) ) { + case 1: + { + _localctx = new LogicalExpressionForUpdateContext(new ExpressionForUpdateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expressionForUpdate); + setState(6218); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(6219); + logicalOperator(); + setState(6220); + expressionForUpdate(4); + } + break; + case 2: + { + _localctx = new IsExpressionForUpdateContext(new ExpressionForUpdateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expressionForUpdate); + setState(6222); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(6223); + match(IS); + setState(6225); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(6224); + match(NOT); + } + } + + setState(6227); + ((IsExpressionForUpdateContext)_localctx).testValue = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FALSE || _la==TRUE || _la==UNKNOWN) ) { + ((IsExpressionForUpdateContext)_localctx).testValue = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + } + } + setState(6232); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,916,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class PredicateForUpdateContext extends ParserRuleContext { + public PredicateForUpdateContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_predicateForUpdate; } + + public PredicateForUpdateContext() { } + public void copyFrom(PredicateForUpdateContext ctx) { + super.copyFrom(ctx); + } + } + public static class BinaryComparasionPredicateForUpdateContext extends PredicateForUpdateContext { + public PredicateForUpdateContext left; + public PredicateForUpdateContext right; + public ComparisonOperatorContext comparisonOperator() { + return getRuleContext(ComparisonOperatorContext.class,0); + } + public List predicateForUpdate() { + return getRuleContexts(PredicateForUpdateContext.class); + } + public PredicateForUpdateContext predicateForUpdate(int i) { + return getRuleContext(PredicateForUpdateContext.class,i); + } + public BinaryComparasionPredicateForUpdateContext(PredicateForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBinaryComparasionPredicateForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBinaryComparasionPredicateForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBinaryComparasionPredicateForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class LikePredicateForUpdateContext extends PredicateForUpdateContext { + public List predicateForUpdate() { + return getRuleContexts(PredicateForUpdateContext.class); + } + public PredicateForUpdateContext predicateForUpdate(int i) { + return getRuleContext(PredicateForUpdateContext.class,i); + } + public TerminalNode LIKE() { return getToken(MySqlParser.LIKE, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public TerminalNode ESCAPE() { return getToken(MySqlParser.ESCAPE, 0); } + public TerminalNode STRING_LITERAL() { return getToken(MySqlParser.STRING_LITERAL, 0); } + public LikePredicateForUpdateContext(PredicateForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLikePredicateForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLikePredicateForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLikePredicateForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class RegexpPredicateForUpdateContext extends PredicateForUpdateContext { + public Token regex; + public PredicateForUpdateContext predicateForUpdate() { + return getRuleContext(PredicateForUpdateContext.class,0); + } + public PredicateContext predicate() { + return getRuleContext(PredicateContext.class,0); + } + public TerminalNode REGEXP() { return getToken(MySqlParser.REGEXP, 0); } + public TerminalNode RLIKE() { return getToken(MySqlParser.RLIKE, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public RegexpPredicateForUpdateContext(PredicateForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterRegexpPredicateForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitRegexpPredicateForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitRegexpPredicateForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class IsNullPredicateForUpdateContext extends PredicateForUpdateContext { + public PredicateForUpdateContext predicateForUpdate() { + return getRuleContext(PredicateForUpdateContext.class,0); + } + public TerminalNode IS() { return getToken(MySqlParser.IS, 0); } + public NullNotnullContext nullNotnull() { + return getRuleContext(NullNotnullContext.class,0); + } + public IsNullPredicateForUpdateContext(PredicateForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIsNullPredicateForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIsNullPredicateForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIsNullPredicateForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class BetweenPredicateForUpdateContext extends PredicateForUpdateContext { + public List predicateForUpdate() { + return getRuleContexts(PredicateForUpdateContext.class); + } + public PredicateForUpdateContext predicateForUpdate(int i) { + return getRuleContext(PredicateForUpdateContext.class,i); + } + public TerminalNode BETWEEN() { return getToken(MySqlParser.BETWEEN, 0); } + public TerminalNode AND() { return getToken(MySqlParser.AND, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public BetweenPredicateForUpdateContext(PredicateForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBetweenPredicateForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBetweenPredicateForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBetweenPredicateForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class SoundsLikePredicateForUpdateContext extends PredicateForUpdateContext { + public List predicateForUpdate() { + return getRuleContexts(PredicateForUpdateContext.class); + } + public PredicateForUpdateContext predicateForUpdate(int i) { + return getRuleContext(PredicateForUpdateContext.class,i); + } + public TerminalNode SOUNDS() { return getToken(MySqlParser.SOUNDS, 0); } + public TerminalNode LIKE() { return getToken(MySqlParser.LIKE, 0); } + public SoundsLikePredicateForUpdateContext(PredicateForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSoundsLikePredicateForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSoundsLikePredicateForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSoundsLikePredicateForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class InPredicateForUpdateContext extends PredicateForUpdateContext { + public PredicateForUpdateContext predicateForUpdate() { + return getRuleContext(PredicateForUpdateContext.class,0); + } + public TerminalNode IN() { return getToken(MySqlParser.IN, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public ExpressionsForUpdateContext expressionsForUpdate() { + return getRuleContext(ExpressionsForUpdateContext.class,0); + } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public InPredicateForUpdateContext(PredicateForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterInPredicateForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitInPredicateForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitInPredicateForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class SubqueryComparasionPredicateForUpdateContext extends PredicateForUpdateContext { + public Token quantifier; + public PredicateForUpdateContext predicateForUpdate() { + return getRuleContext(PredicateForUpdateContext.class,0); + } + public ComparisonOperatorContext comparisonOperator() { + return getRuleContext(ComparisonOperatorContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public TerminalNode ALL() { return getToken(MySqlParser.ALL, 0); } + public TerminalNode ANY() { return getToken(MySqlParser.ANY, 0); } + public TerminalNode SOME() { return getToken(MySqlParser.SOME, 0); } + public SubqueryComparasionPredicateForUpdateContext(PredicateForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSubqueryComparasionPredicateForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSubqueryComparasionPredicateForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSubqueryComparasionPredicateForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class ExpressionAtomPredicateForUpdateContext extends PredicateForUpdateContext { + public ExpressionAtomForUpdateContext expressionAtomForUpdate() { + return getRuleContext(ExpressionAtomForUpdateContext.class,0); + } + public TerminalNode LOCAL_ID() { return getToken(MySqlParser.LOCAL_ID, 0); } + public TerminalNode VAR_ASSIGN() { return getToken(MySqlParser.VAR_ASSIGN, 0); } + public ExpressionAtomPredicateForUpdateContext(PredicateForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterExpressionAtomPredicateForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitExpressionAtomPredicateForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitExpressionAtomPredicateForUpdate(this); + else return visitor.visitChildren(this); + } + } + + public final PredicateForUpdateContext predicateForUpdate() throws RecognitionException { + return predicateForUpdate(0); + } + + private PredicateForUpdateContext predicateForUpdate(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + PredicateForUpdateContext _localctx = new PredicateForUpdateContext(_ctx, _parentState); + PredicateForUpdateContext _prevctx = _localctx; + int _startState = 608; + enterRecursionRule(_localctx, 608, RULE_predicateForUpdate, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new ExpressionAtomPredicateForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(6236); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,917,_ctx) ) { + case 1: + { + setState(6234); + match(LOCAL_ID); + setState(6235); + match(VAR_ASSIGN); + } + break; + } + setState(6238); + expressionAtomForUpdate(0); + } + _ctx.stop = _input.LT(-1); + setState(6297); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,925,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(6295); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,924,_ctx) ) { + case 1: + { + _localctx = new BinaryComparasionPredicateForUpdateContext(new PredicateForUpdateContext(_parentctx, _parentState)); + ((BinaryComparasionPredicateForUpdateContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_predicateForUpdate); + setState(6240); + if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); + setState(6241); + comparisonOperator(); + setState(6242); + ((BinaryComparasionPredicateForUpdateContext)_localctx).right = predicateForUpdate(8); + } + break; + case 2: + { + _localctx = new BetweenPredicateForUpdateContext(new PredicateForUpdateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicateForUpdate); + setState(6244); + if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); + setState(6246); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(6245); + match(NOT); + } + } + + setState(6248); + match(BETWEEN); + setState(6249); + predicateForUpdate(0); + setState(6250); + match(AND); + setState(6251); + predicateForUpdate(6); + } + break; + case 3: + { + _localctx = new SoundsLikePredicateForUpdateContext(new PredicateForUpdateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicateForUpdate); + setState(6253); + if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); + setState(6254); + match(SOUNDS); + setState(6255); + match(LIKE); + setState(6256); + predicateForUpdate(5); + } + break; + case 4: + { + _localctx = new InPredicateForUpdateContext(new PredicateForUpdateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicateForUpdate); + setState(6257); + if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); + setState(6259); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(6258); + match(NOT); + } + } + + setState(6261); + match(IN); + setState(6262); + match(LR_BRACKET); + setState(6265); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,920,_ctx) ) { + case 1: + { + setState(6263); + selectStatement(); + } + break; + case 2: + { + setState(6264); + expressionsForUpdate(); + } + break; + } + setState(6267); + match(RR_BRACKET); + } + break; + case 5: + { + _localctx = new IsNullPredicateForUpdateContext(new PredicateForUpdateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicateForUpdate); + setState(6269); + if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); + setState(6270); + match(IS); + setState(6271); + nullNotnull(); + } + break; + case 6: + { + _localctx = new SubqueryComparasionPredicateForUpdateContext(new PredicateForUpdateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicateForUpdate); + setState(6272); + if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); + setState(6273); + comparisonOperator(); + setState(6274); + ((SubqueryComparasionPredicateForUpdateContext)_localctx).quantifier = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ALL || _la==ANY || _la==SOME) ) { + ((SubqueryComparasionPredicateForUpdateContext)_localctx).quantifier = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(6275); + match(LR_BRACKET); + setState(6276); + selectStatement(); + setState(6277); + match(RR_BRACKET); + } + break; + case 7: + { + _localctx = new LikePredicateForUpdateContext(new PredicateForUpdateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicateForUpdate); + setState(6279); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(6281); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(6280); + match(NOT); + } + } + + setState(6283); + match(LIKE); + setState(6284); + predicateForUpdate(0); + setState(6287); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,922,_ctx) ) { + case 1: + { + setState(6285); + match(ESCAPE); + setState(6286); + match(STRING_LITERAL); + } + break; + } + } + break; + case 8: + { + _localctx = new RegexpPredicateForUpdateContext(new PredicateForUpdateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicateForUpdate); + setState(6289); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(6291); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(6290); + match(NOT); + } + } + + setState(6293); + ((RegexpPredicateForUpdateContext)_localctx).regex = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==REGEXP || _la==RLIKE) ) { + ((RegexpPredicateForUpdateContext)_localctx).regex = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(6294); + predicate(0); + } + break; + } + } + } + setState(6299); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,925,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class ExpressionAtomForUpdateContext extends ParserRuleContext { + public ExpressionAtomForUpdateContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionAtomForUpdate; } + + public ExpressionAtomForUpdateContext() { } + public void copyFrom(ExpressionAtomForUpdateContext ctx) { + super.copyFrom(ctx); + } + } + public static class IntervalExpressionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public TerminalNode INTERVAL() { return getToken(MySqlParser.INTERVAL, 0); } + public ExpressionForUpdateContext expressionForUpdate() { + return getRuleContext(ExpressionForUpdateContext.class,0); + } + public IntervalTypeContext intervalType() { + return getRuleContext(IntervalTypeContext.class,0); + } + public IntervalExpressionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIntervalExpressionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIntervalExpressionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIntervalExpressionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class FullColumnNameExpressionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public FullColumnNameContext fullColumnName() { + return getRuleContext(FullColumnNameContext.class,0); + } + public FullColumnNameExpressionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFullColumnNameExpressionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFullColumnNameExpressionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFullColumnNameExpressionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class MysqlVariableExpressionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public MysqlVariableContext mysqlVariable() { + return getRuleContext(MysqlVariableContext.class,0); + } + public MysqlVariableExpressionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMysqlVariableExpressionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMysqlVariableExpressionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMysqlVariableExpressionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class UnaryExpressionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public UnaryOperatorContext unaryOperator() { + return getRuleContext(UnaryOperatorContext.class,0); + } + public ExpressionAtomForUpdateContext expressionAtomForUpdate() { + return getRuleContext(ExpressionAtomForUpdateContext.class,0); + } + public UnaryExpressionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUnaryExpressionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUnaryExpressionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUnaryExpressionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class NestedRowExpressionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public TerminalNode ROW() { return getToken(MySqlParser.ROW, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List expressionForUpdate() { + return getRuleContexts(ExpressionForUpdateContext.class); + } + public ExpressionForUpdateContext expressionForUpdate(int i) { + return getRuleContext(ExpressionForUpdateContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public NestedRowExpressionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterNestedRowExpressionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitNestedRowExpressionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitNestedRowExpressionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class SubqueryExpessionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public SubqueryExpessionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSubqueryExpessionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSubqueryExpessionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSubqueryExpessionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class BitExpressionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public ExpressionAtomForUpdateContext left; + public ExpressionAtomForUpdateContext right; + public BitOperatorContext bitOperator() { + return getRuleContext(BitOperatorContext.class,0); + } + public List expressionAtomForUpdate() { + return getRuleContexts(ExpressionAtomForUpdateContext.class); + } + public ExpressionAtomForUpdateContext expressionAtomForUpdate(int i) { + return getRuleContext(ExpressionAtomForUpdateContext.class,i); + } + public BitExpressionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBitExpressionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBitExpressionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBitExpressionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class MathExpressionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public ExpressionAtomForUpdateContext left; + public ExpressionAtomForUpdateContext right; + public MathOperatorContext mathOperator() { + return getRuleContext(MathOperatorContext.class,0); + } + public List expressionAtomForUpdate() { + return getRuleContexts(ExpressionAtomForUpdateContext.class); + } + public ExpressionAtomForUpdateContext expressionAtomForUpdate(int i) { + return getRuleContext(ExpressionAtomForUpdateContext.class,i); + } + public MathExpressionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMathExpressionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMathExpressionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMathExpressionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class ConstantExpressionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public ConstantContext constant() { + return getRuleContext(ConstantContext.class,0); + } + public ConstantExpressionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterConstantExpressionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitConstantExpressionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitConstantExpressionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class CollateExpressionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public ExpressionAtomForUpdateContext expressionAtomForUpdate() { + return getRuleContext(ExpressionAtomForUpdateContext.class,0); + } + public TerminalNode COLLATE() { return getToken(MySqlParser.COLLATE, 0); } + public CollationNameContext collationName() { + return getRuleContext(CollationNameContext.class,0); + } + public CollateExpressionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCollateExpressionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCollateExpressionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCollateExpressionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class BinaryExpressionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public ExpressionAtomForUpdateContext expressionAtomForUpdate() { + return getRuleContext(ExpressionAtomForUpdateContext.class,0); + } + public BinaryExpressionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBinaryExpressionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBinaryExpressionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBinaryExpressionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class NestedExpressionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List expressionForUpdate() { + return getRuleContexts(ExpressionForUpdateContext.class); + } + public ExpressionForUpdateContext expressionForUpdate(int i) { + return getRuleContext(ExpressionForUpdateContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public NestedExpressionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterNestedExpressionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitNestedExpressionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitNestedExpressionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class ExistsExpessionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public TerminalNode EXISTS() { return getToken(MySqlParser.EXISTS, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public ExistsExpessionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterExistsExpessionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitExistsExpessionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitExistsExpessionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + public static class FunctionCallExpressionAtomForUpdateContext extends ExpressionAtomForUpdateContext { + public FunctionCallContext functionCall() { + return getRuleContext(FunctionCallContext.class,0); + } + public FunctionCallExpressionAtomForUpdateContext(ExpressionAtomForUpdateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFunctionCallExpressionAtomForUpdate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFunctionCallExpressionAtomForUpdate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFunctionCallExpressionAtomForUpdate(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionAtomForUpdateContext expressionAtomForUpdate() throws RecognitionException { + return expressionAtomForUpdate(0); + } + + private ExpressionAtomForUpdateContext expressionAtomForUpdate(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpressionAtomForUpdateContext _localctx = new ExpressionAtomForUpdateContext(_ctx, _parentState); + ExpressionAtomForUpdateContext _prevctx = _localctx; + int _startState = 610; + enterRecursionRule(_localctx, 610, RULE_expressionAtomForUpdate, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(6345); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,928,_ctx) ) { + case 1: + { + _localctx = new ConstantExpressionAtomForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(6301); + constant(); + } + break; + case 2: + { + _localctx = new FullColumnNameExpressionAtomForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6302); + fullColumnName(); + } + break; + case 3: + { + _localctx = new FunctionCallExpressionAtomForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6303); + functionCall(); + } + break; + case 4: + { + _localctx = new MysqlVariableExpressionAtomForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6304); + mysqlVariable(); + } + break; + case 5: + { + _localctx = new UnaryExpressionAtomForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6305); + unaryOperator(); + setState(6306); + expressionAtomForUpdate(9); + } + break; + case 6: + { + _localctx = new BinaryExpressionAtomForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6308); + match(BINARY); + setState(6309); + expressionAtomForUpdate(8); + } + break; + case 7: + { + _localctx = new NestedExpressionAtomForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6310); + match(LR_BRACKET); + setState(6311); + expressionForUpdate(0); + setState(6316); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(6312); + match(COMMA); + setState(6313); + expressionForUpdate(0); + } + } + setState(6318); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(6319); + match(RR_BRACKET); + } + break; + case 8: + { + _localctx = new NestedRowExpressionAtomForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6321); + match(ROW); + setState(6322); + match(LR_BRACKET); + setState(6323); + expressionForUpdate(0); + setState(6326); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(6324); + match(COMMA); + setState(6325); + expressionForUpdate(0); + } + } + setState(6328); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==COMMA ); + setState(6330); + match(RR_BRACKET); + } + break; + case 9: + { + _localctx = new ExistsExpessionAtomForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6332); + match(EXISTS); + setState(6333); + match(LR_BRACKET); + setState(6334); + selectStatement(); + setState(6335); + match(RR_BRACKET); + } + break; + case 10: + { + _localctx = new SubqueryExpessionAtomForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6337); + match(LR_BRACKET); + setState(6338); + selectStatement(); + setState(6339); + match(RR_BRACKET); + } + break; + case 11: + { + _localctx = new IntervalExpressionAtomForUpdateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6341); + match(INTERVAL); + setState(6342); + expressionForUpdate(0); + setState(6343); + intervalType(); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(6360); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,930,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(6358); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,929,_ctx) ) { + case 1: + { + _localctx = new BitExpressionAtomForUpdateContext(new ExpressionAtomForUpdateContext(_parentctx, _parentState)); + ((BitExpressionAtomForUpdateContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expressionAtomForUpdate); + setState(6347); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(6348); + bitOperator(); + setState(6349); + ((BitExpressionAtomForUpdateContext)_localctx).right = expressionAtomForUpdate(3); + } + break; + case 2: + { + _localctx = new MathExpressionAtomForUpdateContext(new ExpressionAtomForUpdateContext(_parentctx, _parentState)); + ((MathExpressionAtomForUpdateContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expressionAtomForUpdate); + setState(6351); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(6352); + mathOperator(); + setState(6353); + ((MathExpressionAtomForUpdateContext)_localctx).right = expressionAtomForUpdate(2); + } + break; + case 3: + { + _localctx = new CollateExpressionAtomForUpdateContext(new ExpressionAtomForUpdateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expressionAtomForUpdate); + setState(6355); + if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); + setState(6356); + match(COLLATE); + setState(6357); + collationName(); + } + break; + } + } + } + setState(6362); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,930,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class ExpressionAtomContext extends ParserRuleContext { + public ExpressionAtomContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionAtom; } + + public ExpressionAtomContext() { } + public void copyFrom(ExpressionAtomContext ctx) { + super.copyFrom(ctx); + } + } + public static class UnaryExpressionAtomContext extends ExpressionAtomContext { + public UnaryOperatorContext unaryOperator() { + return getRuleContext(UnaryOperatorContext.class,0); + } + public ExpressionAtomContext expressionAtom() { + return getRuleContext(ExpressionAtomContext.class,0); + } + public UnaryExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUnaryExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUnaryExpressionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUnaryExpressionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class CollateExpressionAtomContext extends ExpressionAtomContext { + public ExpressionAtomContext expressionAtom() { + return getRuleContext(ExpressionAtomContext.class,0); + } + public TerminalNode COLLATE() { return getToken(MySqlParser.COLLATE, 0); } + public CollationNameContext collationName() { + return getRuleContext(CollationNameContext.class,0); + } + public CollateExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCollateExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCollateExpressionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCollateExpressionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class SubqueryExpessionAtomContext extends ExpressionAtomContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public SubqueryExpessionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterSubqueryExpessionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitSubqueryExpessionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitSubqueryExpessionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class MysqlVariableExpressionAtomContext extends ExpressionAtomContext { + public MysqlVariableContext mysqlVariable() { + return getRuleContext(MysqlVariableContext.class,0); + } + public MysqlVariableExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMysqlVariableExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMysqlVariableExpressionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMysqlVariableExpressionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class NestedExpressionAtomContext extends ExpressionAtomContext { + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public NestedExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterNestedExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitNestedExpressionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitNestedExpressionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class NestedRowExpressionAtomContext extends ExpressionAtomContext { + public TerminalNode ROW() { return getToken(MySqlParser.ROW, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(MySqlParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(MySqlParser.COMMA, i); + } + public NestedRowExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterNestedRowExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitNestedRowExpressionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitNestedRowExpressionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class MathExpressionAtomContext extends ExpressionAtomContext { + public ExpressionAtomContext left; + public ExpressionAtomContext right; + public MathOperatorContext mathOperator() { + return getRuleContext(MathOperatorContext.class,0); + } + public List expressionAtom() { + return getRuleContexts(ExpressionAtomContext.class); + } + public ExpressionAtomContext expressionAtom(int i) { + return getRuleContext(ExpressionAtomContext.class,i); + } + public MathExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMathExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMathExpressionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMathExpressionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class IntervalExpressionAtomContext extends ExpressionAtomContext { + public TerminalNode INTERVAL() { return getToken(MySqlParser.INTERVAL, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public IntervalTypeContext intervalType() { + return getRuleContext(IntervalTypeContext.class,0); + } + public IntervalExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIntervalExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIntervalExpressionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIntervalExpressionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class ExistsExpessionAtomContext extends ExpressionAtomContext { + public TerminalNode EXISTS() { return getToken(MySqlParser.EXISTS, 0); } + public TerminalNode LR_BRACKET() { return getToken(MySqlParser.LR_BRACKET, 0); } + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(MySqlParser.RR_BRACKET, 0); } + public ExistsExpessionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterExistsExpessionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitExistsExpessionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitExistsExpessionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class ConstantExpressionAtomContext extends ExpressionAtomContext { + public ConstantContext constant() { + return getRuleContext(ConstantContext.class,0); + } + public ConstantExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterConstantExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitConstantExpressionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitConstantExpressionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class FunctionCallExpressionAtomContext extends ExpressionAtomContext { + public FunctionCallContext functionCall() { + return getRuleContext(FunctionCallContext.class,0); + } + public FunctionCallExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFunctionCallExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFunctionCallExpressionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFunctionCallExpressionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class BinaryExpressionAtomContext extends ExpressionAtomContext { + public TerminalNode BINARY() { return getToken(MySqlParser.BINARY, 0); } + public ExpressionAtomContext expressionAtom() { + return getRuleContext(ExpressionAtomContext.class,0); + } + public BinaryExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBinaryExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBinaryExpressionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBinaryExpressionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class FullColumnNameExpressionAtomContext extends ExpressionAtomContext { + public FullColumnNameContext fullColumnName() { + return getRuleContext(FullColumnNameContext.class,0); + } + public FullColumnNameExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFullColumnNameExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFullColumnNameExpressionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFullColumnNameExpressionAtom(this); + else return visitor.visitChildren(this); + } + } + public static class BitExpressionAtomContext extends ExpressionAtomContext { + public ExpressionAtomContext left; + public ExpressionAtomContext right; + public BitOperatorContext bitOperator() { + return getRuleContext(BitOperatorContext.class,0); + } + public List expressionAtom() { + return getRuleContexts(ExpressionAtomContext.class); + } + public ExpressionAtomContext expressionAtom(int i) { + return getRuleContext(ExpressionAtomContext.class,i); + } + public BitExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBitExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBitExpressionAtom(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBitExpressionAtom(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionAtomContext expressionAtom() throws RecognitionException { + return expressionAtom(0); + } + + private ExpressionAtomContext expressionAtom(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpressionAtomContext _localctx = new ExpressionAtomContext(_ctx, _parentState); + ExpressionAtomContext _prevctx = _localctx; + int _startState = 612; + enterRecursionRule(_localctx, 612, RULE_expressionAtom, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(6408); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,933,_ctx) ) { + case 1: + { + _localctx = new ConstantExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(6364); + constant(); + } + break; + case 2: + { + _localctx = new FullColumnNameExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6365); + fullColumnName(); + } + break; + case 3: + { + _localctx = new FunctionCallExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6366); + functionCall(); + } + break; + case 4: + { + _localctx = new MysqlVariableExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6367); + mysqlVariable(); + } + break; + case 5: + { + _localctx = new UnaryExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6368); + unaryOperator(); + setState(6369); + expressionAtom(9); + } + break; + case 6: + { + _localctx = new BinaryExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6371); + match(BINARY); + setState(6372); + expressionAtom(8); + } + break; + case 7: + { + _localctx = new NestedExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6373); + match(LR_BRACKET); + setState(6374); + expression(0); + setState(6379); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(6375); + match(COMMA); + setState(6376); + expression(0); + } + } + setState(6381); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(6382); + match(RR_BRACKET); + } + break; + case 8: + { + _localctx = new NestedRowExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6384); + match(ROW); + setState(6385); + match(LR_BRACKET); + setState(6386); + expression(0); + setState(6389); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(6387); + match(COMMA); + setState(6388); + expression(0); + } + } + setState(6391); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==COMMA ); + setState(6393); + match(RR_BRACKET); + } + break; + case 9: + { + _localctx = new ExistsExpessionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6395); + match(EXISTS); + setState(6396); + match(LR_BRACKET); + setState(6397); + selectStatement(); + setState(6398); + match(RR_BRACKET); + } + break; + case 10: + { + _localctx = new SubqueryExpessionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6400); + match(LR_BRACKET); + setState(6401); + selectStatement(); + setState(6402); + match(RR_BRACKET); + } + break; + case 11: + { + _localctx = new IntervalExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(6404); + match(INTERVAL); + setState(6405); + expression(0); + setState(6406); + intervalType(); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(6423); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,935,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(6421); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,934,_ctx) ) { + case 1: + { + _localctx = new BitExpressionAtomContext(new ExpressionAtomContext(_parentctx, _parentState)); + ((BitExpressionAtomContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expressionAtom); + setState(6410); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(6411); + bitOperator(); + setState(6412); + ((BitExpressionAtomContext)_localctx).right = expressionAtom(3); + } + break; + case 2: + { + _localctx = new MathExpressionAtomContext(new ExpressionAtomContext(_parentctx, _parentState)); + ((MathExpressionAtomContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expressionAtom); + setState(6414); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(6415); + mathOperator(); + setState(6416); + ((MathExpressionAtomContext)_localctx).right = expressionAtom(2); + } + break; + case 3: + { + _localctx = new CollateExpressionAtomContext(new ExpressionAtomContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expressionAtom); + setState(6418); + if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); + setState(6419); + match(COLLATE); + setState(6420); + collationName(); + } + break; + } + } + } + setState(6425); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,935,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class UnaryOperatorContext extends ParserRuleContext { + public TerminalNode EXCLAMATION_SYMBOL() { return getToken(MySqlParser.EXCLAMATION_SYMBOL, 0); } + public TerminalNode BIT_NOT_OP() { return getToken(MySqlParser.BIT_NOT_OP, 0); } + public TerminalNode PLUS() { return getToken(MySqlParser.PLUS, 0); } + public TerminalNode MINUS() { return getToken(MySqlParser.MINUS, 0); } + public TerminalNode NOT() { return getToken(MySqlParser.NOT, 0); } + public UnaryOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unaryOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterUnaryOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitUnaryOperator(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitUnaryOperator(this); + else return visitor.visitChildren(this); + } + } + + public final UnaryOperatorContext unaryOperator() throws RecognitionException { + UnaryOperatorContext _localctx = new UnaryOperatorContext(_ctx, getState()); + enterRule(_localctx, 614, RULE_unaryOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(6426); + _la = _input.LA(1); + if ( !(_la==NOT || ((((_la - 1008)) & ~0x3f) == 0 && ((1L << (_la - 1008)) & ((1L << (PLUS - 1008)) | (1L << (MINUS - 1008)) | (1L << (EXCLAMATION_SYMBOL - 1008)) | (1L << (BIT_NOT_OP - 1008)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ComparisonOperatorContext extends ParserRuleContext { + public TerminalNode EQUAL_SYMBOL() { return getToken(MySqlParser.EQUAL_SYMBOL, 0); } + public TerminalNode GREATER_SYMBOL() { return getToken(MySqlParser.GREATER_SYMBOL, 0); } + public TerminalNode LESS_SYMBOL() { return getToken(MySqlParser.LESS_SYMBOL, 0); } + public TerminalNode EXCLAMATION_SYMBOL() { return getToken(MySqlParser.EXCLAMATION_SYMBOL, 0); } + public ComparisonOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_comparisonOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterComparisonOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitComparisonOperator(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitComparisonOperator(this); + else return visitor.visitChildren(this); + } + } + + public final ComparisonOperatorContext comparisonOperator() throws RecognitionException { + ComparisonOperatorContext _localctx = new ComparisonOperatorContext(_ctx, getState()); + enterRule(_localctx, 616, RULE_comparisonOperator); + try { + setState(6442); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,936,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(6428); + match(EQUAL_SYMBOL); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(6429); + match(GREATER_SYMBOL); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(6430); + match(LESS_SYMBOL); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(6431); + match(LESS_SYMBOL); + setState(6432); + match(EQUAL_SYMBOL); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(6433); + match(GREATER_SYMBOL); + setState(6434); + match(EQUAL_SYMBOL); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(6435); + match(LESS_SYMBOL); + setState(6436); + match(GREATER_SYMBOL); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(6437); + match(EXCLAMATION_SYMBOL); + setState(6438); + match(EQUAL_SYMBOL); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(6439); + match(LESS_SYMBOL); + setState(6440); + match(EQUAL_SYMBOL); + setState(6441); + match(GREATER_SYMBOL); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LogicalOperatorContext extends ParserRuleContext { + public TerminalNode AND() { return getToken(MySqlParser.AND, 0); } + public List BIT_AND_OP() { return getTokens(MySqlParser.BIT_AND_OP); } + public TerminalNode BIT_AND_OP(int i) { + return getToken(MySqlParser.BIT_AND_OP, i); + } + public TerminalNode XOR() { return getToken(MySqlParser.XOR, 0); } + public TerminalNode OR() { return getToken(MySqlParser.OR, 0); } + public List BIT_OR_OP() { return getTokens(MySqlParser.BIT_OR_OP); } + public TerminalNode BIT_OR_OP(int i) { + return getToken(MySqlParser.BIT_OR_OP, i); + } + public LogicalOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_logicalOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterLogicalOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitLogicalOperator(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitLogicalOperator(this); + else return visitor.visitChildren(this); + } + } + + public final LogicalOperatorContext logicalOperator() throws RecognitionException { + LogicalOperatorContext _localctx = new LogicalOperatorContext(_ctx, getState()); + enterRule(_localctx, 618, RULE_logicalOperator); + try { + setState(6451); + _errHandler.sync(this); + switch (_input.LA(1)) { + case AND: + enterOuterAlt(_localctx, 1); + { + setState(6444); + match(AND); + } + break; + case BIT_AND_OP: + enterOuterAlt(_localctx, 2); + { + setState(6445); + match(BIT_AND_OP); + setState(6446); + match(BIT_AND_OP); + } + break; + case XOR: + enterOuterAlt(_localctx, 3); + { + setState(6447); + match(XOR); + } + break; + case OR: + enterOuterAlt(_localctx, 4); + { + setState(6448); + match(OR); + } + break; + case BIT_OR_OP: + enterOuterAlt(_localctx, 5); + { + setState(6449); + match(BIT_OR_OP); + setState(6450); + match(BIT_OR_OP); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BitOperatorContext extends ParserRuleContext { + public List LESS_SYMBOL() { return getTokens(MySqlParser.LESS_SYMBOL); } + public TerminalNode LESS_SYMBOL(int i) { + return getToken(MySqlParser.LESS_SYMBOL, i); + } + public List GREATER_SYMBOL() { return getTokens(MySqlParser.GREATER_SYMBOL); } + public TerminalNode GREATER_SYMBOL(int i) { + return getToken(MySqlParser.GREATER_SYMBOL, i); + } + public TerminalNode BIT_AND_OP() { return getToken(MySqlParser.BIT_AND_OP, 0); } + public TerminalNode BIT_XOR_OP() { return getToken(MySqlParser.BIT_XOR_OP, 0); } + public TerminalNode BIT_OR_OP() { return getToken(MySqlParser.BIT_OR_OP, 0); } + public BitOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bitOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterBitOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitBitOperator(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitBitOperator(this); + else return visitor.visitChildren(this); + } + } + + public final BitOperatorContext bitOperator() throws RecognitionException { + BitOperatorContext _localctx = new BitOperatorContext(_ctx, getState()); + enterRule(_localctx, 620, RULE_bitOperator); + try { + setState(6460); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LESS_SYMBOL: + enterOuterAlt(_localctx, 1); + { + setState(6453); + match(LESS_SYMBOL); + setState(6454); + match(LESS_SYMBOL); + } + break; + case GREATER_SYMBOL: + enterOuterAlt(_localctx, 2); + { + setState(6455); + match(GREATER_SYMBOL); + setState(6456); + match(GREATER_SYMBOL); + } + break; + case BIT_AND_OP: + enterOuterAlt(_localctx, 3); + { + setState(6457); + match(BIT_AND_OP); + } + break; + case BIT_XOR_OP: + enterOuterAlt(_localctx, 4); + { + setState(6458); + match(BIT_XOR_OP); + } + break; + case BIT_OR_OP: + enterOuterAlt(_localctx, 5); + { + setState(6459); + match(BIT_OR_OP); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MathOperatorContext extends ParserRuleContext { + public TerminalNode STAR() { return getToken(MySqlParser.STAR, 0); } + public TerminalNode DIVIDE() { return getToken(MySqlParser.DIVIDE, 0); } + public TerminalNode MODULE() { return getToken(MySqlParser.MODULE, 0); } + public TerminalNode DIV() { return getToken(MySqlParser.DIV, 0); } + public TerminalNode MOD() { return getToken(MySqlParser.MOD, 0); } + public TerminalNode PLUS() { return getToken(MySqlParser.PLUS, 0); } + public TerminalNode MINUS() { return getToken(MySqlParser.MINUS, 0); } + public TerminalNode MINUSMINUS() { return getToken(MySqlParser.MINUSMINUS, 0); } + public MathOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_mathOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterMathOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitMathOperator(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitMathOperator(this); + else return visitor.visitChildren(this); + } + } + + public final MathOperatorContext mathOperator() throws RecognitionException { + MathOperatorContext _localctx = new MathOperatorContext(_ctx, getState()); + enterRule(_localctx, 622, RULE_mathOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(6462); + _la = _input.LA(1); + if ( !(((((_la - 1005)) & ~0x3f) == 0 && ((1L << (_la - 1005)) & ((1L << (STAR - 1005)) | (1L << (DIVIDE - 1005)) | (1L << (MODULE - 1005)) | (1L << (PLUS - 1005)) | (1L << (MINUSMINUS - 1005)) | (1L << (MINUS - 1005)) | (1L << (DIV - 1005)) | (1L << (MOD - 1005)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CharsetNameBaseContext extends ParserRuleContext { + public TerminalNode ARMSCII8() { return getToken(MySqlParser.ARMSCII8, 0); } + public TerminalNode ASCII() { return getToken(MySqlParser.ASCII, 0); } + public TerminalNode BIG5() { return getToken(MySqlParser.BIG5, 0); } + public TerminalNode CP1250() { return getToken(MySqlParser.CP1250, 0); } + public TerminalNode CP1251() { return getToken(MySqlParser.CP1251, 0); } + public TerminalNode CP1256() { return getToken(MySqlParser.CP1256, 0); } + public TerminalNode CP1257() { return getToken(MySqlParser.CP1257, 0); } + public TerminalNode CP850() { return getToken(MySqlParser.CP850, 0); } + public TerminalNode CP852() { return getToken(MySqlParser.CP852, 0); } + public TerminalNode CP866() { return getToken(MySqlParser.CP866, 0); } + public TerminalNode CP932() { return getToken(MySqlParser.CP932, 0); } + public TerminalNode DEC8() { return getToken(MySqlParser.DEC8, 0); } + public TerminalNode EUCJPMS() { return getToken(MySqlParser.EUCJPMS, 0); } + public TerminalNode EUCKR() { return getToken(MySqlParser.EUCKR, 0); } + public TerminalNode GB2312() { return getToken(MySqlParser.GB2312, 0); } + public TerminalNode GBK() { return getToken(MySqlParser.GBK, 0); } + public TerminalNode GEOSTD8() { return getToken(MySqlParser.GEOSTD8, 0); } + public TerminalNode GREEK() { return getToken(MySqlParser.GREEK, 0); } + public TerminalNode HEBREW() { return getToken(MySqlParser.HEBREW, 0); } + public TerminalNode HP8() { return getToken(MySqlParser.HP8, 0); } + public TerminalNode KEYBCS2() { return getToken(MySqlParser.KEYBCS2, 0); } + public TerminalNode KOI8R() { return getToken(MySqlParser.KOI8R, 0); } + public TerminalNode KOI8U() { return getToken(MySqlParser.KOI8U, 0); } + public TerminalNode LATIN1() { return getToken(MySqlParser.LATIN1, 0); } + public TerminalNode LATIN2() { return getToken(MySqlParser.LATIN2, 0); } + public TerminalNode LATIN5() { return getToken(MySqlParser.LATIN5, 0); } + public TerminalNode LATIN7() { return getToken(MySqlParser.LATIN7, 0); } + public TerminalNode MACCE() { return getToken(MySqlParser.MACCE, 0); } + public TerminalNode MACROMAN() { return getToken(MySqlParser.MACROMAN, 0); } + public TerminalNode SJIS() { return getToken(MySqlParser.SJIS, 0); } + public TerminalNode SWE7() { return getToken(MySqlParser.SWE7, 0); } + public TerminalNode TIS620() { return getToken(MySqlParser.TIS620, 0); } + public TerminalNode UCS2() { return getToken(MySqlParser.UCS2, 0); } + public TerminalNode UJIS() { return getToken(MySqlParser.UJIS, 0); } + public TerminalNode UTF16() { return getToken(MySqlParser.UTF16, 0); } + public TerminalNode UTF16LE() { return getToken(MySqlParser.UTF16LE, 0); } + public TerminalNode UTF32() { return getToken(MySqlParser.UTF32, 0); } + public TerminalNode UTF8() { return getToken(MySqlParser.UTF8, 0); } + public TerminalNode UTF8MB3() { return getToken(MySqlParser.UTF8MB3, 0); } + public TerminalNode UTF8MB4() { return getToken(MySqlParser.UTF8MB4, 0); } + public CharsetNameBaseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_charsetNameBase; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterCharsetNameBase(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitCharsetNameBase(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitCharsetNameBase(this); + else return visitor.visitChildren(this); + } + } + + public final CharsetNameBaseContext charsetNameBase() throws RecognitionException { + CharsetNameBaseContext _localctx = new CharsetNameBaseContext(_ctx, getState()); + enterRule(_localctx, 624, RULE_charsetNameBase); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(6464); + _la = _input.LA(1); + if ( !(((((_la - 639)) & ~0x3f) == 0 && ((1L << (_la - 639)) & ((1L << (ARMSCII8 - 639)) | (1L << (ASCII - 639)) | (1L << (BIG5 - 639)) | (1L << (CP1250 - 639)) | (1L << (CP1251 - 639)) | (1L << (CP1256 - 639)) | (1L << (CP1257 - 639)) | (1L << (CP850 - 639)) | (1L << (CP852 - 639)) | (1L << (CP866 - 639)) | (1L << (CP932 - 639)) | (1L << (DEC8 - 639)) | (1L << (EUCJPMS - 639)) | (1L << (EUCKR - 639)) | (1L << (GB2312 - 639)) | (1L << (GBK - 639)) | (1L << (GEOSTD8 - 639)) | (1L << (GREEK - 639)) | (1L << (HEBREW - 639)) | (1L << (HP8 - 639)) | (1L << (KEYBCS2 - 639)) | (1L << (KOI8R - 639)) | (1L << (KOI8U - 639)) | (1L << (LATIN1 - 639)) | (1L << (LATIN2 - 639)) | (1L << (LATIN5 - 639)) | (1L << (LATIN7 - 639)) | (1L << (MACCE - 639)) | (1L << (MACROMAN - 639)) | (1L << (SJIS - 639)) | (1L << (SWE7 - 639)) | (1L << (TIS620 - 639)) | (1L << (UCS2 - 639)) | (1L << (UJIS - 639)) | (1L << (UTF16 - 639)) | (1L << (UTF16LE - 639)) | (1L << (UTF32 - 639)) | (1L << (UTF8 - 639)) | (1L << (UTF8MB3 - 639)) | (1L << (UTF8MB4 - 639)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TransactionLevelBaseContext extends ParserRuleContext { + public TerminalNode REPEATABLE() { return getToken(MySqlParser.REPEATABLE, 0); } + public TerminalNode COMMITTED() { return getToken(MySqlParser.COMMITTED, 0); } + public TerminalNode UNCOMMITTED() { return getToken(MySqlParser.UNCOMMITTED, 0); } + public TerminalNode SERIALIZABLE() { return getToken(MySqlParser.SERIALIZABLE, 0); } + public TransactionLevelBaseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_transactionLevelBase; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterTransactionLevelBase(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitTransactionLevelBase(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitTransactionLevelBase(this); + else return visitor.visitChildren(this); + } + } + + public final TransactionLevelBaseContext transactionLevelBase() throws RecognitionException { + TransactionLevelBaseContext _localctx = new TransactionLevelBaseContext(_ctx, getState()); + enterRule(_localctx, 626, RULE_transactionLevelBase); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(6466); + _la = _input.LA(1); + if ( !(((((_la - 691)) & ~0x3f) == 0 && ((1L << (_la - 691)) & ((1L << (REPEATABLE - 691)) | (1L << (COMMITTED - 691)) | (1L << (UNCOMMITTED - 691)) | (1L << (SERIALIZABLE - 691)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PrivilegesBaseContext extends ParserRuleContext { + public TerminalNode TABLES() { return getToken(MySqlParser.TABLES, 0); } + public TerminalNode ROUTINE() { return getToken(MySqlParser.ROUTINE, 0); } + public TerminalNode EXECUTE() { return getToken(MySqlParser.EXECUTE, 0); } + public TerminalNode FILE() { return getToken(MySqlParser.FILE, 0); } + public TerminalNode PROCESS() { return getToken(MySqlParser.PROCESS, 0); } + public TerminalNode RELOAD() { return getToken(MySqlParser.RELOAD, 0); } + public TerminalNode SHUTDOWN() { return getToken(MySqlParser.SHUTDOWN, 0); } + public TerminalNode SUPER() { return getToken(MySqlParser.SUPER, 0); } + public TerminalNode PRIVILEGES() { return getToken(MySqlParser.PRIVILEGES, 0); } + public PrivilegesBaseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_privilegesBase; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterPrivilegesBase(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitPrivilegesBase(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitPrivilegesBase(this); + else return visitor.visitChildren(this); + } + } + + public final PrivilegesBaseContext privilegesBase() throws RecognitionException { + PrivilegesBaseContext _localctx = new PrivilegesBaseContext(_ctx, getState()); + enterRule(_localctx, 628, RULE_privilegesBase); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(6468); + _la = _input.LA(1); + if ( !(((((_la - 604)) & ~0x3f) == 0 && ((1L << (_la - 604)) & ((1L << (TABLES - 604)) | (1L << (ROUTINE - 604)) | (1L << (EXECUTE - 604)) | (1L << (FILE - 604)) | (1L << (PROCESS - 604)) | (1L << (RELOAD - 604)) | (1L << (SHUTDOWN - 604)) | (1L << (SUPER - 604)) | (1L << (PRIVILEGES - 604)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IntervalTypeBaseContext extends ParserRuleContext { + public TerminalNode QUARTER() { return getToken(MySqlParser.QUARTER, 0); } + public TerminalNode MONTH() { return getToken(MySqlParser.MONTH, 0); } + public TerminalNode DAY() { return getToken(MySqlParser.DAY, 0); } + public TerminalNode HOUR() { return getToken(MySqlParser.HOUR, 0); } + public TerminalNode MINUTE() { return getToken(MySqlParser.MINUTE, 0); } + public TerminalNode WEEK() { return getToken(MySqlParser.WEEK, 0); } + public TerminalNode SECOND() { return getToken(MySqlParser.SECOND, 0); } + public TerminalNode MICROSECOND() { return getToken(MySqlParser.MICROSECOND, 0); } + public IntervalTypeBaseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_intervalTypeBase; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterIntervalTypeBase(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitIntervalTypeBase(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitIntervalTypeBase(this); + else return visitor.visitChildren(this); + } + } + + public final IntervalTypeBaseContext intervalTypeBase() throws RecognitionException { + IntervalTypeBaseContext _localctx = new IntervalTypeBaseContext(_ctx, getState()); + enterRule(_localctx, 630, RULE_intervalTypeBase); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(6470); + _la = _input.LA(1); + if ( !(((((_la - 596)) & ~0x3f) == 0 && ((1L << (_la - 596)) & ((1L << (QUARTER - 596)) | (1L << (MONTH - 596)) | (1L << (DAY - 596)) | (1L << (HOUR - 596)) | (1L << (MINUTE - 596)) | (1L << (WEEK - 596)) | (1L << (SECOND - 596)) | (1L << (MICROSECOND - 596)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DataTypeBaseContext extends ParserRuleContext { + public TerminalNode DATE() { return getToken(MySqlParser.DATE, 0); } + public TerminalNode TIME() { return getToken(MySqlParser.TIME, 0); } + public TerminalNode TIMESTAMP() { return getToken(MySqlParser.TIMESTAMP, 0); } + public TerminalNode DATETIME() { return getToken(MySqlParser.DATETIME, 0); } + public TerminalNode YEAR() { return getToken(MySqlParser.YEAR, 0); } + public TerminalNode ENUM() { return getToken(MySqlParser.ENUM, 0); } + public TerminalNode TEXT() { return getToken(MySqlParser.TEXT, 0); } + public DataTypeBaseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dataTypeBase; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterDataTypeBase(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitDataTypeBase(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitDataTypeBase(this); + else return visitor.visitChildren(this); + } + } + + public final DataTypeBaseContext dataTypeBase() throws RecognitionException { + DataTypeBaseContext _localctx = new DataTypeBaseContext(_ctx, getState()); + enterRule(_localctx, 632, RULE_dataTypeBase); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(6472); + _la = _input.LA(1); + if ( !(((((_la - 199)) & ~0x3f) == 0 && ((1L << (_la - 199)) & ((1L << (DATE - 199)) | (1L << (TIME - 199)) | (1L << (TIMESTAMP - 199)) | (1L << (DATETIME - 199)) | (1L << (YEAR - 199)) | (1L << (TEXT - 199)) | (1L << (ENUM - 199)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class KeywordsCanBeIdContext extends ParserRuleContext { + public TerminalNode ACCOUNT() { return getToken(MySqlParser.ACCOUNT, 0); } + public TerminalNode ACTION() { return getToken(MySqlParser.ACTION, 0); } + public TerminalNode AFTER() { return getToken(MySqlParser.AFTER, 0); } + public TerminalNode AGGREGATE() { return getToken(MySqlParser.AGGREGATE, 0); } + public TerminalNode ALGORITHM() { return getToken(MySqlParser.ALGORITHM, 0); } + public TerminalNode ANY() { return getToken(MySqlParser.ANY, 0); } + public TerminalNode AT() { return getToken(MySqlParser.AT, 0); } + public TerminalNode AUTHORS() { return getToken(MySqlParser.AUTHORS, 0); } + public TerminalNode AUTOCOMMIT() { return getToken(MySqlParser.AUTOCOMMIT, 0); } + public TerminalNode AUTOEXTEND_SIZE() { return getToken(MySqlParser.AUTOEXTEND_SIZE, 0); } + public TerminalNode AUTO_INCREMENT() { return getToken(MySqlParser.AUTO_INCREMENT, 0); } + public TerminalNode AVG_ROW_LENGTH() { return getToken(MySqlParser.AVG_ROW_LENGTH, 0); } + public TerminalNode BEGIN() { return getToken(MySqlParser.BEGIN, 0); } + public TerminalNode BINLOG() { return getToken(MySqlParser.BINLOG, 0); } + public TerminalNode BIT() { return getToken(MySqlParser.BIT, 0); } + public TerminalNode BLOCK() { return getToken(MySqlParser.BLOCK, 0); } + public TerminalNode BOOL() { return getToken(MySqlParser.BOOL, 0); } + public TerminalNode BOOLEAN() { return getToken(MySqlParser.BOOLEAN, 0); } + public TerminalNode BTREE() { return getToken(MySqlParser.BTREE, 0); } + public TerminalNode CACHE() { return getToken(MySqlParser.CACHE, 0); } + public TerminalNode CASCADED() { return getToken(MySqlParser.CASCADED, 0); } + public TerminalNode CHAIN() { return getToken(MySqlParser.CHAIN, 0); } + public TerminalNode CHANGED() { return getToken(MySqlParser.CHANGED, 0); } + public TerminalNode CHANNEL() { return getToken(MySqlParser.CHANNEL, 0); } + public TerminalNode CHECKSUM() { return getToken(MySqlParser.CHECKSUM, 0); } + public TerminalNode PAGE_CHECKSUM() { return getToken(MySqlParser.PAGE_CHECKSUM, 0); } + public TerminalNode CATALOG_NAME() { return getToken(MySqlParser.CATALOG_NAME, 0); } + public TerminalNode CIPHER() { return getToken(MySqlParser.CIPHER, 0); } + public TerminalNode CLASS_ORIGIN() { return getToken(MySqlParser.CLASS_ORIGIN, 0); } + public TerminalNode CLIENT() { return getToken(MySqlParser.CLIENT, 0); } + public TerminalNode CLOSE() { return getToken(MySqlParser.CLOSE, 0); } + public TerminalNode COALESCE() { return getToken(MySqlParser.COALESCE, 0); } + public TerminalNode CODE() { return getToken(MySqlParser.CODE, 0); } + public TerminalNode COLUMNS() { return getToken(MySqlParser.COLUMNS, 0); } + public TerminalNode COLUMN_FORMAT() { return getToken(MySqlParser.COLUMN_FORMAT, 0); } + public TerminalNode COLUMN_NAME() { return getToken(MySqlParser.COLUMN_NAME, 0); } + public TerminalNode COMMENT() { return getToken(MySqlParser.COMMENT, 0); } + public TerminalNode COMMIT() { return getToken(MySqlParser.COMMIT, 0); } + public TerminalNode COMPACT() { return getToken(MySqlParser.COMPACT, 0); } + public TerminalNode COMPLETION() { return getToken(MySqlParser.COMPLETION, 0); } + public TerminalNode COMPRESSED() { return getToken(MySqlParser.COMPRESSED, 0); } + public TerminalNode COMPRESSION() { return getToken(MySqlParser.COMPRESSION, 0); } + public TerminalNode CONCURRENT() { return getToken(MySqlParser.CONCURRENT, 0); } + public TerminalNode CONNECTION() { return getToken(MySqlParser.CONNECTION, 0); } + public TerminalNode CONSISTENT() { return getToken(MySqlParser.CONSISTENT, 0); } + public TerminalNode CONSTRAINT_CATALOG() { return getToken(MySqlParser.CONSTRAINT_CATALOG, 0); } + public TerminalNode CONSTRAINT_NAME() { return getToken(MySqlParser.CONSTRAINT_NAME, 0); } + public TerminalNode CONSTRAINT_SCHEMA() { return getToken(MySqlParser.CONSTRAINT_SCHEMA, 0); } + public TerminalNode CONTAINS() { return getToken(MySqlParser.CONTAINS, 0); } + public TerminalNode CONTEXT() { return getToken(MySqlParser.CONTEXT, 0); } + public TerminalNode CONTRIBUTORS() { return getToken(MySqlParser.CONTRIBUTORS, 0); } + public TerminalNode COPY() { return getToken(MySqlParser.COPY, 0); } + public TerminalNode CPU() { return getToken(MySqlParser.CPU, 0); } + public TerminalNode CURRENT() { return getToken(MySqlParser.CURRENT, 0); } + public TerminalNode CURSOR_NAME() { return getToken(MySqlParser.CURSOR_NAME, 0); } + public TerminalNode DATA() { return getToken(MySqlParser.DATA, 0); } + public TerminalNode DATAFILE() { return getToken(MySqlParser.DATAFILE, 0); } + public TerminalNode DEALLOCATE() { return getToken(MySqlParser.DEALLOCATE, 0); } + public TerminalNode DEFAULT_AUTH() { return getToken(MySqlParser.DEFAULT_AUTH, 0); } + public TerminalNode DEFINER() { return getToken(MySqlParser.DEFINER, 0); } + public TerminalNode DELAY_KEY_WRITE() { return getToken(MySqlParser.DELAY_KEY_WRITE, 0); } + public TerminalNode DES_KEY_FILE() { return getToken(MySqlParser.DES_KEY_FILE, 0); } + public TerminalNode DIAGNOSTICS() { return getToken(MySqlParser.DIAGNOSTICS, 0); } + public TerminalNode DIRECTORY() { return getToken(MySqlParser.DIRECTORY, 0); } + public TerminalNode DISABLE() { return getToken(MySqlParser.DISABLE, 0); } + public TerminalNode DISCARD() { return getToken(MySqlParser.DISCARD, 0); } + public TerminalNode DISK() { return getToken(MySqlParser.DISK, 0); } + public TerminalNode DO() { return getToken(MySqlParser.DO, 0); } + public TerminalNode DUMPFILE() { return getToken(MySqlParser.DUMPFILE, 0); } + public TerminalNode DUPLICATE() { return getToken(MySqlParser.DUPLICATE, 0); } + public TerminalNode DYNAMIC() { return getToken(MySqlParser.DYNAMIC, 0); } + public TerminalNode ENABLE() { return getToken(MySqlParser.ENABLE, 0); } + public TerminalNode ENCRYPTION() { return getToken(MySqlParser.ENCRYPTION, 0); } + public TerminalNode END() { return getToken(MySqlParser.END, 0); } + public TerminalNode ENDS() { return getToken(MySqlParser.ENDS, 0); } + public TerminalNode ENGINE() { return getToken(MySqlParser.ENGINE, 0); } + public TerminalNode ENGINES() { return getToken(MySqlParser.ENGINES, 0); } + public TerminalNode ERROR() { return getToken(MySqlParser.ERROR, 0); } + public TerminalNode ERRORS() { return getToken(MySqlParser.ERRORS, 0); } + public TerminalNode ESCAPE() { return getToken(MySqlParser.ESCAPE, 0); } + public TerminalNode EVEN() { return getToken(MySqlParser.EVEN, 0); } + public TerminalNode EVENT() { return getToken(MySqlParser.EVENT, 0); } + public TerminalNode EVENTS() { return getToken(MySqlParser.EVENTS, 0); } + public TerminalNode EVERY() { return getToken(MySqlParser.EVERY, 0); } + public TerminalNode EXCHANGE() { return getToken(MySqlParser.EXCHANGE, 0); } + public TerminalNode EXCLUSIVE() { return getToken(MySqlParser.EXCLUSIVE, 0); } + public TerminalNode EXPIRE() { return getToken(MySqlParser.EXPIRE, 0); } + public TerminalNode EXPORT() { return getToken(MySqlParser.EXPORT, 0); } + public TerminalNode EXTENDED() { return getToken(MySqlParser.EXTENDED, 0); } + public TerminalNode EXTENT_SIZE() { return getToken(MySqlParser.EXTENT_SIZE, 0); } + public TerminalNode FAST() { return getToken(MySqlParser.FAST, 0); } + public TerminalNode FAULTS() { return getToken(MySqlParser.FAULTS, 0); } + public TerminalNode FIELDS() { return getToken(MySqlParser.FIELDS, 0); } + public TerminalNode FILE_BLOCK_SIZE() { return getToken(MySqlParser.FILE_BLOCK_SIZE, 0); } + public TerminalNode FILTER() { return getToken(MySqlParser.FILTER, 0); } + public TerminalNode FIRST() { return getToken(MySqlParser.FIRST, 0); } + public TerminalNode FIXED() { return getToken(MySqlParser.FIXED, 0); } + public TerminalNode FLUSH() { return getToken(MySqlParser.FLUSH, 0); } + public TerminalNode FOLLOWS() { return getToken(MySqlParser.FOLLOWS, 0); } + public TerminalNode FOUND() { return getToken(MySqlParser.FOUND, 0); } + public TerminalNode FULL() { return getToken(MySqlParser.FULL, 0); } + public TerminalNode FUNCTION() { return getToken(MySqlParser.FUNCTION, 0); } + public TerminalNode GENERAL() { return getToken(MySqlParser.GENERAL, 0); } + public TerminalNode GLOBAL() { return getToken(MySqlParser.GLOBAL, 0); } + public TerminalNode GRANTS() { return getToken(MySqlParser.GRANTS, 0); } + public TerminalNode GROUP_REPLICATION() { return getToken(MySqlParser.GROUP_REPLICATION, 0); } + public TerminalNode HANDLER() { return getToken(MySqlParser.HANDLER, 0); } + public TerminalNode HASH() { return getToken(MySqlParser.HASH, 0); } + public TerminalNode HELP() { return getToken(MySqlParser.HELP, 0); } + public TerminalNode HOST() { return getToken(MySqlParser.HOST, 0); } + public TerminalNode HOSTS() { return getToken(MySqlParser.HOSTS, 0); } + public TerminalNode IDENTIFIED() { return getToken(MySqlParser.IDENTIFIED, 0); } + public TerminalNode IGNORE_SERVER_IDS() { return getToken(MySqlParser.IGNORE_SERVER_IDS, 0); } + public TerminalNode IMPORT() { return getToken(MySqlParser.IMPORT, 0); } + public TerminalNode INDEXES() { return getToken(MySqlParser.INDEXES, 0); } + public TerminalNode INITIAL_SIZE() { return getToken(MySqlParser.INITIAL_SIZE, 0); } + public TerminalNode INPLACE() { return getToken(MySqlParser.INPLACE, 0); } + public TerminalNode INSERT_METHOD() { return getToken(MySqlParser.INSERT_METHOD, 0); } + public TerminalNode INSTALL() { return getToken(MySqlParser.INSTALL, 0); } + public TerminalNode INSTANCE() { return getToken(MySqlParser.INSTANCE, 0); } + public TerminalNode INTERNAL() { return getToken(MySqlParser.INTERNAL, 0); } + public TerminalNode INVOKER() { return getToken(MySqlParser.INVOKER, 0); } + public TerminalNode IO() { return getToken(MySqlParser.IO, 0); } + public TerminalNode IO_THREAD() { return getToken(MySqlParser.IO_THREAD, 0); } + public TerminalNode IPC() { return getToken(MySqlParser.IPC, 0); } + public TerminalNode ISOLATION() { return getToken(MySqlParser.ISOLATION, 0); } + public TerminalNode ISSUER() { return getToken(MySqlParser.ISSUER, 0); } + public TerminalNode JSON() { return getToken(MySqlParser.JSON, 0); } + public TerminalNode KEY_BLOCK_SIZE() { return getToken(MySqlParser.KEY_BLOCK_SIZE, 0); } + public TerminalNode LANGUAGE() { return getToken(MySqlParser.LANGUAGE, 0); } + public TerminalNode LAST() { return getToken(MySqlParser.LAST, 0); } + public TerminalNode LEAVES() { return getToken(MySqlParser.LEAVES, 0); } + public TerminalNode LESS() { return getToken(MySqlParser.LESS, 0); } + public TerminalNode LEVEL() { return getToken(MySqlParser.LEVEL, 0); } + public TerminalNode LIST() { return getToken(MySqlParser.LIST, 0); } + public TerminalNode LOCAL() { return getToken(MySqlParser.LOCAL, 0); } + public TerminalNode LOGFILE() { return getToken(MySqlParser.LOGFILE, 0); } + public TerminalNode LOGS() { return getToken(MySqlParser.LOGS, 0); } + public TerminalNode MASTER() { return getToken(MySqlParser.MASTER, 0); } + public TerminalNode MASTER_AUTO_POSITION() { return getToken(MySqlParser.MASTER_AUTO_POSITION, 0); } + public TerminalNode MASTER_CONNECT_RETRY() { return getToken(MySqlParser.MASTER_CONNECT_RETRY, 0); } + public TerminalNode MASTER_DELAY() { return getToken(MySqlParser.MASTER_DELAY, 0); } + public TerminalNode MASTER_HEARTBEAT_PERIOD() { return getToken(MySqlParser.MASTER_HEARTBEAT_PERIOD, 0); } + public TerminalNode MASTER_HOST() { return getToken(MySqlParser.MASTER_HOST, 0); } + public TerminalNode MASTER_LOG_FILE() { return getToken(MySqlParser.MASTER_LOG_FILE, 0); } + public TerminalNode MASTER_LOG_POS() { return getToken(MySqlParser.MASTER_LOG_POS, 0); } + public TerminalNode MASTER_PASSWORD() { return getToken(MySqlParser.MASTER_PASSWORD, 0); } + public TerminalNode MASTER_PORT() { return getToken(MySqlParser.MASTER_PORT, 0); } + public TerminalNode MASTER_RETRY_COUNT() { return getToken(MySqlParser.MASTER_RETRY_COUNT, 0); } + public TerminalNode MASTER_SSL() { return getToken(MySqlParser.MASTER_SSL, 0); } + public TerminalNode MASTER_SSL_CA() { return getToken(MySqlParser.MASTER_SSL_CA, 0); } + public TerminalNode MASTER_SSL_CAPATH() { return getToken(MySqlParser.MASTER_SSL_CAPATH, 0); } + public TerminalNode MASTER_SSL_CERT() { return getToken(MySqlParser.MASTER_SSL_CERT, 0); } + public TerminalNode MASTER_SSL_CIPHER() { return getToken(MySqlParser.MASTER_SSL_CIPHER, 0); } + public TerminalNode MASTER_SSL_CRL() { return getToken(MySqlParser.MASTER_SSL_CRL, 0); } + public TerminalNode MASTER_SSL_CRLPATH() { return getToken(MySqlParser.MASTER_SSL_CRLPATH, 0); } + public TerminalNode MASTER_SSL_KEY() { return getToken(MySqlParser.MASTER_SSL_KEY, 0); } + public TerminalNode MASTER_TLS_VERSION() { return getToken(MySqlParser.MASTER_TLS_VERSION, 0); } + public TerminalNode MASTER_USER() { return getToken(MySqlParser.MASTER_USER, 0); } + public TerminalNode MAX_CONNECTIONS_PER_HOUR() { return getToken(MySqlParser.MAX_CONNECTIONS_PER_HOUR, 0); } + public TerminalNode MAX_QUERIES_PER_HOUR() { return getToken(MySqlParser.MAX_QUERIES_PER_HOUR, 0); } + public TerminalNode MAX_ROWS() { return getToken(MySqlParser.MAX_ROWS, 0); } + public TerminalNode MAX_SIZE() { return getToken(MySqlParser.MAX_SIZE, 0); } + public TerminalNode MAX_UPDATES_PER_HOUR() { return getToken(MySqlParser.MAX_UPDATES_PER_HOUR, 0); } + public TerminalNode MAX_USER_CONNECTIONS() { return getToken(MySqlParser.MAX_USER_CONNECTIONS, 0); } + public TerminalNode MEDIUM() { return getToken(MySqlParser.MEDIUM, 0); } + public TerminalNode MEMORY() { return getToken(MySqlParser.MEMORY, 0); } + public TerminalNode MERGE() { return getToken(MySqlParser.MERGE, 0); } + public TerminalNode MESSAGE_TEXT() { return getToken(MySqlParser.MESSAGE_TEXT, 0); } + public TerminalNode MID() { return getToken(MySqlParser.MID, 0); } + public TerminalNode MIGRATE() { return getToken(MySqlParser.MIGRATE, 0); } + public TerminalNode MIN_ROWS() { return getToken(MySqlParser.MIN_ROWS, 0); } + public TerminalNode MODE() { return getToken(MySqlParser.MODE, 0); } + public TerminalNode MODIFY() { return getToken(MySqlParser.MODIFY, 0); } + public TerminalNode MUTEX() { return getToken(MySqlParser.MUTEX, 0); } + public TerminalNode MYSQL() { return getToken(MySqlParser.MYSQL, 0); } + public TerminalNode MYSQL_ERRNO() { return getToken(MySqlParser.MYSQL_ERRNO, 0); } + public TerminalNode NAME() { return getToken(MySqlParser.NAME, 0); } + public TerminalNode NAMES() { return getToken(MySqlParser.NAMES, 0); } + public TerminalNode NCHAR() { return getToken(MySqlParser.NCHAR, 0); } + public TerminalNode NEVER() { return getToken(MySqlParser.NEVER, 0); } + public TerminalNode NEXT() { return getToken(MySqlParser.NEXT, 0); } + public TerminalNode NO() { return getToken(MySqlParser.NO, 0); } + public TerminalNode NODEGROUP() { return getToken(MySqlParser.NODEGROUP, 0); } + public TerminalNode NONE() { return getToken(MySqlParser.NONE, 0); } + public TerminalNode NUMBER() { return getToken(MySqlParser.NUMBER, 0); } + public TerminalNode OFFLINE() { return getToken(MySqlParser.OFFLINE, 0); } + public TerminalNode OFFSET() { return getToken(MySqlParser.OFFSET, 0); } + public TerminalNode OJ() { return getToken(MySqlParser.OJ, 0); } + public TerminalNode OLD_PASSWORD() { return getToken(MySqlParser.OLD_PASSWORD, 0); } + public TerminalNode ONE() { return getToken(MySqlParser.ONE, 0); } + public TerminalNode ONLINE() { return getToken(MySqlParser.ONLINE, 0); } + public TerminalNode ONLY() { return getToken(MySqlParser.ONLY, 0); } + public TerminalNode OPEN() { return getToken(MySqlParser.OPEN, 0); } + public TerminalNode OPTIMIZER_COSTS() { return getToken(MySqlParser.OPTIMIZER_COSTS, 0); } + public TerminalNode OPTIONS() { return getToken(MySqlParser.OPTIONS, 0); } + public TerminalNode OWNER() { return getToken(MySqlParser.OWNER, 0); } + public TerminalNode PACK_KEYS() { return getToken(MySqlParser.PACK_KEYS, 0); } + public TerminalNode PAGE() { return getToken(MySqlParser.PAGE, 0); } + public TerminalNode PARSER() { return getToken(MySqlParser.PARSER, 0); } + public TerminalNode PARTIAL() { return getToken(MySqlParser.PARTIAL, 0); } + public TerminalNode PARTITIONING() { return getToken(MySqlParser.PARTITIONING, 0); } + public TerminalNode PARTITIONS() { return getToken(MySqlParser.PARTITIONS, 0); } + public TerminalNode PASSWORD() { return getToken(MySqlParser.PASSWORD, 0); } + public TerminalNode PHASE() { return getToken(MySqlParser.PHASE, 0); } + public TerminalNode PLUGINS() { return getToken(MySqlParser.PLUGINS, 0); } + public TerminalNode PLUGIN_DIR() { return getToken(MySqlParser.PLUGIN_DIR, 0); } + public TerminalNode PLUGIN() { return getToken(MySqlParser.PLUGIN, 0); } + public TerminalNode PORT() { return getToken(MySqlParser.PORT, 0); } + public TerminalNode PRECEDES() { return getToken(MySqlParser.PRECEDES, 0); } + public TerminalNode PREPARE() { return getToken(MySqlParser.PREPARE, 0); } + public TerminalNode PRESERVE() { return getToken(MySqlParser.PRESERVE, 0); } + public TerminalNode PREV() { return getToken(MySqlParser.PREV, 0); } + public TerminalNode PROCESSLIST() { return getToken(MySqlParser.PROCESSLIST, 0); } + public TerminalNode PROFILE() { return getToken(MySqlParser.PROFILE, 0); } + public TerminalNode PROFILES() { return getToken(MySqlParser.PROFILES, 0); } + public TerminalNode PROXY() { return getToken(MySqlParser.PROXY, 0); } + public TerminalNode QUERY() { return getToken(MySqlParser.QUERY, 0); } + public TerminalNode QUICK() { return getToken(MySqlParser.QUICK, 0); } + public TerminalNode REBUILD() { return getToken(MySqlParser.REBUILD, 0); } + public TerminalNode RECOVER() { return getToken(MySqlParser.RECOVER, 0); } + public TerminalNode REDO_BUFFER_SIZE() { return getToken(MySqlParser.REDO_BUFFER_SIZE, 0); } + public TerminalNode REDUNDANT() { return getToken(MySqlParser.REDUNDANT, 0); } + public TerminalNode RELAY() { return getToken(MySqlParser.RELAY, 0); } + public TerminalNode RELAYLOG() { return getToken(MySqlParser.RELAYLOG, 0); } + public TerminalNode RELAY_LOG_FILE() { return getToken(MySqlParser.RELAY_LOG_FILE, 0); } + public TerminalNode RELAY_LOG_POS() { return getToken(MySqlParser.RELAY_LOG_POS, 0); } + public TerminalNode REMOVE() { return getToken(MySqlParser.REMOVE, 0); } + public TerminalNode REORGANIZE() { return getToken(MySqlParser.REORGANIZE, 0); } + public TerminalNode REPAIR() { return getToken(MySqlParser.REPAIR, 0); } + public TerminalNode REPLICATE_DO_DB() { return getToken(MySqlParser.REPLICATE_DO_DB, 0); } + public TerminalNode REPLICATE_DO_TABLE() { return getToken(MySqlParser.REPLICATE_DO_TABLE, 0); } + public TerminalNode REPLICATE_IGNORE_DB() { return getToken(MySqlParser.REPLICATE_IGNORE_DB, 0); } + public TerminalNode REPLICATE_IGNORE_TABLE() { return getToken(MySqlParser.REPLICATE_IGNORE_TABLE, 0); } + public TerminalNode REPLICATE_REWRITE_DB() { return getToken(MySqlParser.REPLICATE_REWRITE_DB, 0); } + public TerminalNode REPLICATE_WILD_DO_TABLE() { return getToken(MySqlParser.REPLICATE_WILD_DO_TABLE, 0); } + public TerminalNode REPLICATE_WILD_IGNORE_TABLE() { return getToken(MySqlParser.REPLICATE_WILD_IGNORE_TABLE, 0); } + public TerminalNode REPLICATION() { return getToken(MySqlParser.REPLICATION, 0); } + public TerminalNode RESET() { return getToken(MySqlParser.RESET, 0); } + public TerminalNode RESUME() { return getToken(MySqlParser.RESUME, 0); } + public TerminalNode RETURNED_SQLSTATE() { return getToken(MySqlParser.RETURNED_SQLSTATE, 0); } + public TerminalNode RETURNS() { return getToken(MySqlParser.RETURNS, 0); } + public TerminalNode ROLLBACK() { return getToken(MySqlParser.ROLLBACK, 0); } + public TerminalNode ROLLUP() { return getToken(MySqlParser.ROLLUP, 0); } + public TerminalNode ROTATE() { return getToken(MySqlParser.ROTATE, 0); } + public TerminalNode ROW() { return getToken(MySqlParser.ROW, 0); } + public TerminalNode ROWS() { return getToken(MySqlParser.ROWS, 0); } + public TerminalNode ROW_FORMAT() { return getToken(MySqlParser.ROW_FORMAT, 0); } + public TerminalNode SAVEPOINT() { return getToken(MySqlParser.SAVEPOINT, 0); } + public TerminalNode SCHEDULE() { return getToken(MySqlParser.SCHEDULE, 0); } + public TerminalNode SCHEMA_NAME() { return getToken(MySqlParser.SCHEMA_NAME, 0); } + public TerminalNode SECURITY() { return getToken(MySqlParser.SECURITY, 0); } + public TerminalNode SERIAL() { return getToken(MySqlParser.SERIAL, 0); } + public TerminalNode SERVER() { return getToken(MySqlParser.SERVER, 0); } + public TerminalNode SESSION() { return getToken(MySqlParser.SESSION, 0); } + public TerminalNode SHARE() { return getToken(MySqlParser.SHARE, 0); } + public TerminalNode SHARED() { return getToken(MySqlParser.SHARED, 0); } + public TerminalNode SIGNED() { return getToken(MySqlParser.SIGNED, 0); } + public TerminalNode SIMPLE() { return getToken(MySqlParser.SIMPLE, 0); } + public TerminalNode SLAVE() { return getToken(MySqlParser.SLAVE, 0); } + public TerminalNode SLOW() { return getToken(MySqlParser.SLOW, 0); } + public TerminalNode SNAPSHOT() { return getToken(MySqlParser.SNAPSHOT, 0); } + public TerminalNode SOCKET() { return getToken(MySqlParser.SOCKET, 0); } + public TerminalNode SOME() { return getToken(MySqlParser.SOME, 0); } + public TerminalNode SONAME() { return getToken(MySqlParser.SONAME, 0); } + public TerminalNode SOUNDS() { return getToken(MySqlParser.SOUNDS, 0); } + public TerminalNode SOURCE() { return getToken(MySqlParser.SOURCE, 0); } + public TerminalNode SQL_AFTER_GTIDS() { return getToken(MySqlParser.SQL_AFTER_GTIDS, 0); } + public TerminalNode SQL_AFTER_MTS_GAPS() { return getToken(MySqlParser.SQL_AFTER_MTS_GAPS, 0); } + public TerminalNode SQL_BEFORE_GTIDS() { return getToken(MySqlParser.SQL_BEFORE_GTIDS, 0); } + public TerminalNode SQL_BUFFER_RESULT() { return getToken(MySqlParser.SQL_BUFFER_RESULT, 0); } + public TerminalNode SQL_CACHE() { return getToken(MySqlParser.SQL_CACHE, 0); } + public TerminalNode SQL_NO_CACHE() { return getToken(MySqlParser.SQL_NO_CACHE, 0); } + public TerminalNode SQL_THREAD() { return getToken(MySqlParser.SQL_THREAD, 0); } + public TerminalNode STACKED() { return getToken(MySqlParser.STACKED, 0); } + public TerminalNode START() { return getToken(MySqlParser.START, 0); } + public TerminalNode STARTS() { return getToken(MySqlParser.STARTS, 0); } + public TerminalNode STATS_AUTO_RECALC() { return getToken(MySqlParser.STATS_AUTO_RECALC, 0); } + public TerminalNode STATS_PERSISTENT() { return getToken(MySqlParser.STATS_PERSISTENT, 0); } + public TerminalNode STATS_SAMPLE_PAGES() { return getToken(MySqlParser.STATS_SAMPLE_PAGES, 0); } + public TerminalNode STATUS() { return getToken(MySqlParser.STATUS, 0); } + public TerminalNode STOP() { return getToken(MySqlParser.STOP, 0); } + public TerminalNode STORAGE() { return getToken(MySqlParser.STORAGE, 0); } + public TerminalNode STRING() { return getToken(MySqlParser.STRING, 0); } + public TerminalNode SUBCLASS_ORIGIN() { return getToken(MySqlParser.SUBCLASS_ORIGIN, 0); } + public TerminalNode SUBJECT() { return getToken(MySqlParser.SUBJECT, 0); } + public TerminalNode SUBPARTITION() { return getToken(MySqlParser.SUBPARTITION, 0); } + public TerminalNode SUBPARTITIONS() { return getToken(MySqlParser.SUBPARTITIONS, 0); } + public TerminalNode SUSPEND() { return getToken(MySqlParser.SUSPEND, 0); } + public TerminalNode SWAPS() { return getToken(MySqlParser.SWAPS, 0); } + public TerminalNode SWITCHES() { return getToken(MySqlParser.SWITCHES, 0); } + public TerminalNode TABLE_NAME() { return getToken(MySqlParser.TABLE_NAME, 0); } + public TerminalNode TABLESPACE() { return getToken(MySqlParser.TABLESPACE, 0); } + public TerminalNode TEMPORARY() { return getToken(MySqlParser.TEMPORARY, 0); } + public TerminalNode TEMPTABLE() { return getToken(MySqlParser.TEMPTABLE, 0); } + public TerminalNode THAN() { return getToken(MySqlParser.THAN, 0); } + public TerminalNode TRADITIONAL() { return getToken(MySqlParser.TRADITIONAL, 0); } + public TerminalNode TRANSACTION() { return getToken(MySqlParser.TRANSACTION, 0); } + public TerminalNode TRIGGERS() { return getToken(MySqlParser.TRIGGERS, 0); } + public TerminalNode TRUNCATE() { return getToken(MySqlParser.TRUNCATE, 0); } + public TerminalNode UNDEFINED() { return getToken(MySqlParser.UNDEFINED, 0); } + public TerminalNode UNDOFILE() { return getToken(MySqlParser.UNDOFILE, 0); } + public TerminalNode UNDO_BUFFER_SIZE() { return getToken(MySqlParser.UNDO_BUFFER_SIZE, 0); } + public TerminalNode UNINSTALL() { return getToken(MySqlParser.UNINSTALL, 0); } + public TerminalNode UNKNOWN() { return getToken(MySqlParser.UNKNOWN, 0); } + public TerminalNode UNTIL() { return getToken(MySqlParser.UNTIL, 0); } + public TerminalNode UPGRADE() { return getToken(MySqlParser.UPGRADE, 0); } + public TerminalNode USER() { return getToken(MySqlParser.USER, 0); } + public TerminalNode USE_FRM() { return getToken(MySqlParser.USE_FRM, 0); } + public TerminalNode USER_RESOURCES() { return getToken(MySqlParser.USER_RESOURCES, 0); } + public TerminalNode VALIDATION() { return getToken(MySqlParser.VALIDATION, 0); } + public TerminalNode VALUE() { return getToken(MySqlParser.VALUE, 0); } + public TerminalNode VARIABLES() { return getToken(MySqlParser.VARIABLES, 0); } + public TerminalNode VIEW() { return getToken(MySqlParser.VIEW, 0); } + public TerminalNode WAIT() { return getToken(MySqlParser.WAIT, 0); } + public TerminalNode WARNINGS() { return getToken(MySqlParser.WARNINGS, 0); } + public TerminalNode WITHOUT() { return getToken(MySqlParser.WITHOUT, 0); } + public TerminalNode WORK() { return getToken(MySqlParser.WORK, 0); } + public TerminalNode WRAPPER() { return getToken(MySqlParser.WRAPPER, 0); } + public TerminalNode X509() { return getToken(MySqlParser.X509, 0); } + public TerminalNode XA() { return getToken(MySqlParser.XA, 0); } + public TerminalNode XML() { return getToken(MySqlParser.XML, 0); } + public KeywordsCanBeIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_keywordsCanBeId; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterKeywordsCanBeId(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitKeywordsCanBeId(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitKeywordsCanBeId(this); + else return visitor.visitChildren(this); + } + } + + public final KeywordsCanBeIdContext keywordsCanBeId() throws RecognitionException { + KeywordsCanBeIdContext _localctx = new KeywordsCanBeIdContext(_ctx, getState()); + enterRule(_localctx, 634, RULE_keywordsCanBeId); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(6474); + _la = _input.LA(1); + if ( !(_la==CURRENT || _la==DIAGNOSTICS || _la==NUMBER || _la==STACKED || ((((_la - 221)) & ~0x3f) == 0 && ((1L << (_la - 221)) & ((1L << (SERIAL - 221)) | (1L << (ACCOUNT - 221)) | (1L << (ACTION - 221)) | (1L << (AFTER - 221)) | (1L << (AGGREGATE - 221)) | (1L << (ALGORITHM - 221)) | (1L << (ANY - 221)) | (1L << (AT - 221)) | (1L << (AUTHORS - 221)) | (1L << (AUTOCOMMIT - 221)) | (1L << (AUTOEXTEND_SIZE - 221)) | (1L << (AUTO_INCREMENT - 221)) | (1L << (AVG_ROW_LENGTH - 221)) | (1L << (BEGIN - 221)) | (1L << (BINLOG - 221)) | (1L << (BIT - 221)))) != 0) || ((((_la - 285)) & ~0x3f) == 0 && ((1L << (_la - 285)) & ((1L << (BLOCK - 285)) | (1L << (BOOL - 285)) | (1L << (BOOLEAN - 285)) | (1L << (BTREE - 285)) | (1L << (CACHE - 285)) | (1L << (CASCADED - 285)) | (1L << (CHAIN - 285)) | (1L << (CHANGED - 285)) | (1L << (CHANNEL - 285)) | (1L << (CHECKSUM - 285)) | (1L << (PAGE_CHECKSUM - 285)) | (1L << (CIPHER - 285)) | (1L << (CLASS_ORIGIN - 285)) | (1L << (CLIENT - 285)) | (1L << (CLOSE - 285)) | (1L << (COALESCE - 285)) | (1L << (CODE - 285)) | (1L << (COLUMNS - 285)) | (1L << (COLUMN_FORMAT - 285)) | (1L << (COLUMN_NAME - 285)) | (1L << (COMMENT - 285)) | (1L << (COMMIT - 285)) | (1L << (COMPACT - 285)) | (1L << (COMPLETION - 285)) | (1L << (COMPRESSED - 285)) | (1L << (COMPRESSION - 285)) | (1L << (CONCURRENT - 285)) | (1L << (CONNECTION - 285)) | (1L << (CONSISTENT - 285)) | (1L << (CONSTRAINT_CATALOG - 285)) | (1L << (CONSTRAINT_SCHEMA - 285)) | (1L << (CONSTRAINT_NAME - 285)) | (1L << (CONTAINS - 285)) | (1L << (CONTEXT - 285)) | (1L << (CONTRIBUTORS - 285)) | (1L << (COPY - 285)) | (1L << (CPU - 285)) | (1L << (CURSOR_NAME - 285)) | (1L << (DATA - 285)) | (1L << (DATAFILE - 285)) | (1L << (DEALLOCATE - 285)) | (1L << (DEFAULT_AUTH - 285)) | (1L << (DEFINER - 285)) | (1L << (DELAY_KEY_WRITE - 285)) | (1L << (DES_KEY_FILE - 285)) | (1L << (DIRECTORY - 285)) | (1L << (DISABLE - 285)) | (1L << (DISCARD - 285)) | (1L << (DISK - 285)) | (1L << (DO - 285)) | (1L << (DUMPFILE - 285)) | (1L << (DUPLICATE - 285)) | (1L << (DYNAMIC - 285)) | (1L << (ENABLE - 285)) | (1L << (ENCRYPTION - 285)) | (1L << (END - 285)) | (1L << (ENDS - 285)) | (1L << (ENGINE - 285)) | (1L << (ENGINES - 285)) | (1L << (ERROR - 285)) | (1L << (ERRORS - 285)) | (1L << (ESCAPE - 285)) | (1L << (EVEN - 285)) | (1L << (EVENT - 285)))) != 0) || ((((_la - 349)) & ~0x3f) == 0 && ((1L << (_la - 349)) & ((1L << (EVENTS - 349)) | (1L << (EVERY - 349)) | (1L << (EXCHANGE - 349)) | (1L << (EXCLUSIVE - 349)) | (1L << (EXPIRE - 349)) | (1L << (EXPORT - 349)) | (1L << (EXTENDED - 349)) | (1L << (EXTENT_SIZE - 349)) | (1L << (FAST - 349)) | (1L << (FAULTS - 349)) | (1L << (FIELDS - 349)) | (1L << (FILE_BLOCK_SIZE - 349)) | (1L << (FILTER - 349)) | (1L << (FIRST - 349)) | (1L << (FIXED - 349)) | (1L << (FLUSH - 349)) | (1L << (FOLLOWS - 349)) | (1L << (FOUND - 349)) | (1L << (FULL - 349)) | (1L << (FUNCTION - 349)) | (1L << (GENERAL - 349)) | (1L << (GLOBAL - 349)) | (1L << (GRANTS - 349)) | (1L << (GROUP_REPLICATION - 349)) | (1L << (HANDLER - 349)) | (1L << (HASH - 349)) | (1L << (HELP - 349)) | (1L << (HOST - 349)) | (1L << (HOSTS - 349)) | (1L << (IDENTIFIED - 349)) | (1L << (IGNORE_SERVER_IDS - 349)) | (1L << (IMPORT - 349)) | (1L << (INDEXES - 349)) | (1L << (INITIAL_SIZE - 349)) | (1L << (INPLACE - 349)) | (1L << (INSERT_METHOD - 349)) | (1L << (INSTALL - 349)) | (1L << (INSTANCE - 349)) | (1L << (INVOKER - 349)) | (1L << (IO - 349)) | (1L << (IO_THREAD - 349)) | (1L << (IPC - 349)) | (1L << (ISOLATION - 349)) | (1L << (ISSUER - 349)) | (1L << (JSON - 349)) | (1L << (KEY_BLOCK_SIZE - 349)) | (1L << (LANGUAGE - 349)) | (1L << (LAST - 349)) | (1L << (LEAVES - 349)) | (1L << (LESS - 349)) | (1L << (LEVEL - 349)) | (1L << (LIST - 349)) | (1L << (LOCAL - 349)) | (1L << (LOGFILE - 349)) | (1L << (LOGS - 349)) | (1L << (MASTER - 349)) | (1L << (MASTER_AUTO_POSITION - 349)) | (1L << (MASTER_CONNECT_RETRY - 349)) | (1L << (MASTER_DELAY - 349)) | (1L << (MASTER_HEARTBEAT_PERIOD - 349)) | (1L << (MASTER_HOST - 349)) | (1L << (MASTER_LOG_FILE - 349)) | (1L << (MASTER_LOG_POS - 349)))) != 0) || ((((_la - 413)) & ~0x3f) == 0 && ((1L << (_la - 413)) & ((1L << (MASTER_PASSWORD - 413)) | (1L << (MASTER_PORT - 413)) | (1L << (MASTER_RETRY_COUNT - 413)) | (1L << (MASTER_SSL - 413)) | (1L << (MASTER_SSL_CA - 413)) | (1L << (MASTER_SSL_CAPATH - 413)) | (1L << (MASTER_SSL_CERT - 413)) | (1L << (MASTER_SSL_CIPHER - 413)) | (1L << (MASTER_SSL_CRL - 413)) | (1L << (MASTER_SSL_CRLPATH - 413)) | (1L << (MASTER_SSL_KEY - 413)) | (1L << (MASTER_TLS_VERSION - 413)) | (1L << (MASTER_USER - 413)) | (1L << (MAX_CONNECTIONS_PER_HOUR - 413)) | (1L << (MAX_QUERIES_PER_HOUR - 413)) | (1L << (MAX_ROWS - 413)) | (1L << (MAX_SIZE - 413)) | (1L << (MAX_UPDATES_PER_HOUR - 413)) | (1L << (MAX_USER_CONNECTIONS - 413)) | (1L << (MEDIUM - 413)) | (1L << (MERGE - 413)) | (1L << (MESSAGE_TEXT - 413)) | (1L << (MID - 413)) | (1L << (MIGRATE - 413)) | (1L << (MIN_ROWS - 413)) | (1L << (MODE - 413)) | (1L << (MODIFY - 413)) | (1L << (MUTEX - 413)) | (1L << (MYSQL - 413)) | (1L << (MYSQL_ERRNO - 413)) | (1L << (NAME - 413)) | (1L << (NAMES - 413)) | (1L << (NCHAR - 413)) | (1L << (NEVER - 413)) | (1L << (NEXT - 413)) | (1L << (NO - 413)) | (1L << (NODEGROUP - 413)) | (1L << (NONE - 413)) | (1L << (OFFLINE - 413)) | (1L << (OFFSET - 413)) | (1L << (OJ - 413)) | (1L << (OLD_PASSWORD - 413)) | (1L << (ONE - 413)) | (1L << (ONLINE - 413)) | (1L << (ONLY - 413)) | (1L << (OPEN - 413)) | (1L << (OPTIMIZER_COSTS - 413)) | (1L << (OPTIONS - 413)) | (1L << (OWNER - 413)) | (1L << (PACK_KEYS - 413)) | (1L << (PAGE - 413)) | (1L << (PARSER - 413)) | (1L << (PARTIAL - 413)) | (1L << (PARTITIONING - 413)) | (1L << (PARTITIONS - 413)) | (1L << (PASSWORD - 413)) | (1L << (PHASE - 413)) | (1L << (PLUGIN - 413)) | (1L << (PLUGIN_DIR - 413)) | (1L << (PLUGINS - 413)) | (1L << (PORT - 413)) | (1L << (PRECEDES - 413)))) != 0) || ((((_la - 477)) & ~0x3f) == 0 && ((1L << (_la - 477)) & ((1L << (PREPARE - 477)) | (1L << (PRESERVE - 477)) | (1L << (PREV - 477)) | (1L << (PROCESSLIST - 477)) | (1L << (PROFILE - 477)) | (1L << (PROFILES - 477)) | (1L << (PROXY - 477)) | (1L << (QUERY - 477)) | (1L << (QUICK - 477)) | (1L << (REBUILD - 477)) | (1L << (RECOVER - 477)) | (1L << (REDO_BUFFER_SIZE - 477)) | (1L << (REDUNDANT - 477)) | (1L << (RELAY - 477)) | (1L << (RELAY_LOG_FILE - 477)) | (1L << (RELAY_LOG_POS - 477)) | (1L << (RELAYLOG - 477)) | (1L << (REMOVE - 477)) | (1L << (REORGANIZE - 477)) | (1L << (REPAIR - 477)) | (1L << (REPLICATE_DO_DB - 477)) | (1L << (REPLICATE_DO_TABLE - 477)) | (1L << (REPLICATE_IGNORE_DB - 477)) | (1L << (REPLICATE_IGNORE_TABLE - 477)) | (1L << (REPLICATE_REWRITE_DB - 477)) | (1L << (REPLICATE_WILD_DO_TABLE - 477)) | (1L << (REPLICATE_WILD_IGNORE_TABLE - 477)) | (1L << (REPLICATION - 477)) | (1L << (RESET - 477)) | (1L << (RESUME - 477)) | (1L << (RETURNED_SQLSTATE - 477)) | (1L << (RETURNS - 477)) | (1L << (ROLLBACK - 477)) | (1L << (ROLLUP - 477)) | (1L << (ROTATE - 477)) | (1L << (ROW - 477)) | (1L << (ROWS - 477)) | (1L << (ROW_FORMAT - 477)) | (1L << (SAVEPOINT - 477)) | (1L << (SCHEDULE - 477)) | (1L << (SECURITY - 477)) | (1L << (SERVER - 477)) | (1L << (SESSION - 477)) | (1L << (SHARE - 477)) | (1L << (SHARED - 477)) | (1L << (SIGNED - 477)) | (1L << (SIMPLE - 477)) | (1L << (SLAVE - 477)) | (1L << (SLOW - 477)) | (1L << (SNAPSHOT - 477)) | (1L << (SOCKET - 477)) | (1L << (SOME - 477)) | (1L << (SONAME - 477)) | (1L << (SOUNDS - 477)) | (1L << (SOURCE - 477)) | (1L << (SQL_AFTER_GTIDS - 477)) | (1L << (SQL_AFTER_MTS_GAPS - 477)) | (1L << (SQL_BEFORE_GTIDS - 477)) | (1L << (SQL_BUFFER_RESULT - 477)) | (1L << (SQL_CACHE - 477)) | (1L << (SQL_NO_CACHE - 477)) | (1L << (SQL_THREAD - 477)) | (1L << (START - 477)))) != 0) || ((((_la - 541)) & ~0x3f) == 0 && ((1L << (_la - 541)) & ((1L << (STARTS - 541)) | (1L << (STATS_AUTO_RECALC - 541)) | (1L << (STATS_PERSISTENT - 541)) | (1L << (STATS_SAMPLE_PAGES - 541)) | (1L << (STATUS - 541)) | (1L << (STOP - 541)) | (1L << (STORAGE - 541)) | (1L << (STRING - 541)) | (1L << (SUBCLASS_ORIGIN - 541)) | (1L << (SUBJECT - 541)) | (1L << (SUBPARTITION - 541)) | (1L << (SUBPARTITIONS - 541)) | (1L << (SUSPEND - 541)) | (1L << (SWAPS - 541)) | (1L << (SWITCHES - 541)) | (1L << (TABLE_NAME - 541)) | (1L << (TABLESPACE - 541)) | (1L << (TEMPORARY - 541)) | (1L << (TEMPTABLE - 541)) | (1L << (THAN - 541)) | (1L << (TRADITIONAL - 541)) | (1L << (TRANSACTION - 541)) | (1L << (TRIGGERS - 541)) | (1L << (TRUNCATE - 541)) | (1L << (UNDEFINED - 541)) | (1L << (UNDOFILE - 541)) | (1L << (UNDO_BUFFER_SIZE - 541)) | (1L << (UNINSTALL - 541)) | (1L << (UNKNOWN - 541)) | (1L << (UNTIL - 541)) | (1L << (UPGRADE - 541)) | (1L << (USER - 541)) | (1L << (USE_FRM - 541)) | (1L << (USER_RESOURCES - 541)) | (1L << (VALIDATION - 541)) | (1L << (VALUE - 541)) | (1L << (VARIABLES - 541)) | (1L << (VIEW - 541)) | (1L << (WAIT - 541)) | (1L << (WARNINGS - 541)) | (1L << (WITHOUT - 541)) | (1L << (WORK - 541)) | (1L << (WRAPPER - 541)) | (1L << (X509 - 541)) | (1L << (XA - 541)) | (1L << (XML - 541)) | (1L << (INTERNAL - 541)))) != 0) || _la==MEMORY || _la==CATALOG_NAME || _la==SCHEMA_NAME) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionNameBaseContext extends ParserRuleContext { + public TerminalNode ABS() { return getToken(MySqlParser.ABS, 0); } + public TerminalNode ACOS() { return getToken(MySqlParser.ACOS, 0); } + public TerminalNode ADDDATE() { return getToken(MySqlParser.ADDDATE, 0); } + public TerminalNode ADDTIME() { return getToken(MySqlParser.ADDTIME, 0); } + public TerminalNode AES_DECRYPT() { return getToken(MySqlParser.AES_DECRYPT, 0); } + public TerminalNode AES_ENCRYPT() { return getToken(MySqlParser.AES_ENCRYPT, 0); } + public TerminalNode AREA() { return getToken(MySqlParser.AREA, 0); } + public TerminalNode ASBINARY() { return getToken(MySqlParser.ASBINARY, 0); } + public TerminalNode ASIN() { return getToken(MySqlParser.ASIN, 0); } + public TerminalNode ASTEXT() { return getToken(MySqlParser.ASTEXT, 0); } + public TerminalNode ASWKB() { return getToken(MySqlParser.ASWKB, 0); } + public TerminalNode ASWKT() { return getToken(MySqlParser.ASWKT, 0); } + public TerminalNode ASYMMETRIC_DECRYPT() { return getToken(MySqlParser.ASYMMETRIC_DECRYPT, 0); } + public TerminalNode ASYMMETRIC_DERIVE() { return getToken(MySqlParser.ASYMMETRIC_DERIVE, 0); } + public TerminalNode ASYMMETRIC_ENCRYPT() { return getToken(MySqlParser.ASYMMETRIC_ENCRYPT, 0); } + public TerminalNode ASYMMETRIC_SIGN() { return getToken(MySqlParser.ASYMMETRIC_SIGN, 0); } + public TerminalNode ASYMMETRIC_VERIFY() { return getToken(MySqlParser.ASYMMETRIC_VERIFY, 0); } + public TerminalNode ATAN() { return getToken(MySqlParser.ATAN, 0); } + public TerminalNode ATAN2() { return getToken(MySqlParser.ATAN2, 0); } + public TerminalNode BENCHMARK() { return getToken(MySqlParser.BENCHMARK, 0); } + public TerminalNode BIN() { return getToken(MySqlParser.BIN, 0); } + public TerminalNode BIT_COUNT() { return getToken(MySqlParser.BIT_COUNT, 0); } + public TerminalNode BIT_LENGTH() { return getToken(MySqlParser.BIT_LENGTH, 0); } + public TerminalNode BUFFER() { return getToken(MySqlParser.BUFFER, 0); } + public TerminalNode CEIL() { return getToken(MySqlParser.CEIL, 0); } + public TerminalNode CEILING() { return getToken(MySqlParser.CEILING, 0); } + public TerminalNode CENTROID() { return getToken(MySqlParser.CENTROID, 0); } + public TerminalNode CHARACTER_LENGTH() { return getToken(MySqlParser.CHARACTER_LENGTH, 0); } + public TerminalNode CHARSET() { return getToken(MySqlParser.CHARSET, 0); } + public TerminalNode CHAR_LENGTH() { return getToken(MySqlParser.CHAR_LENGTH, 0); } + public TerminalNode COERCIBILITY() { return getToken(MySqlParser.COERCIBILITY, 0); } + public TerminalNode COLLATION() { return getToken(MySqlParser.COLLATION, 0); } + public TerminalNode COMPRESS() { return getToken(MySqlParser.COMPRESS, 0); } + public TerminalNode CONCAT() { return getToken(MySqlParser.CONCAT, 0); } + public TerminalNode CONCAT_WS() { return getToken(MySqlParser.CONCAT_WS, 0); } + public TerminalNode CONNECTION_ID() { return getToken(MySqlParser.CONNECTION_ID, 0); } + public TerminalNode CONV() { return getToken(MySqlParser.CONV, 0); } + public TerminalNode CONVERT_TZ() { return getToken(MySqlParser.CONVERT_TZ, 0); } + public TerminalNode COS() { return getToken(MySqlParser.COS, 0); } + public TerminalNode COT() { return getToken(MySqlParser.COT, 0); } + public TerminalNode COUNT() { return getToken(MySqlParser.COUNT, 0); } + public TerminalNode CRC32() { return getToken(MySqlParser.CRC32, 0); } + public TerminalNode CREATE_ASYMMETRIC_PRIV_KEY() { return getToken(MySqlParser.CREATE_ASYMMETRIC_PRIV_KEY, 0); } + public TerminalNode CREATE_ASYMMETRIC_PUB_KEY() { return getToken(MySqlParser.CREATE_ASYMMETRIC_PUB_KEY, 0); } + public TerminalNode CREATE_DH_PARAMETERS() { return getToken(MySqlParser.CREATE_DH_PARAMETERS, 0); } + public TerminalNode CREATE_DIGEST() { return getToken(MySqlParser.CREATE_DIGEST, 0); } + public TerminalNode CROSSES() { return getToken(MySqlParser.CROSSES, 0); } + public TerminalNode DATABASE() { return getToken(MySqlParser.DATABASE, 0); } + public TerminalNode DATE() { return getToken(MySqlParser.DATE, 0); } + public TerminalNode DATEDIFF() { return getToken(MySqlParser.DATEDIFF, 0); } + public TerminalNode DATE_FORMAT() { return getToken(MySqlParser.DATE_FORMAT, 0); } + public TerminalNode DAY() { return getToken(MySqlParser.DAY, 0); } + public TerminalNode DAYNAME() { return getToken(MySqlParser.DAYNAME, 0); } + public TerminalNode DAYOFMONTH() { return getToken(MySqlParser.DAYOFMONTH, 0); } + public TerminalNode DAYOFWEEK() { return getToken(MySqlParser.DAYOFWEEK, 0); } + public TerminalNode DAYOFYEAR() { return getToken(MySqlParser.DAYOFYEAR, 0); } + public TerminalNode DECODE() { return getToken(MySqlParser.DECODE, 0); } + public TerminalNode DEGREES() { return getToken(MySqlParser.DEGREES, 0); } + public TerminalNode DES_DECRYPT() { return getToken(MySqlParser.DES_DECRYPT, 0); } + public TerminalNode DES_ENCRYPT() { return getToken(MySqlParser.DES_ENCRYPT, 0); } + public TerminalNode DIMENSION() { return getToken(MySqlParser.DIMENSION, 0); } + public TerminalNode DISJOINT() { return getToken(MySqlParser.DISJOINT, 0); } + public TerminalNode ELT() { return getToken(MySqlParser.ELT, 0); } + public TerminalNode ENCODE() { return getToken(MySqlParser.ENCODE, 0); } + public TerminalNode ENCRYPT() { return getToken(MySqlParser.ENCRYPT, 0); } + public TerminalNode ENDPOINT() { return getToken(MySqlParser.ENDPOINT, 0); } + public TerminalNode ENVELOPE() { return getToken(MySqlParser.ENVELOPE, 0); } + public TerminalNode EQUALS() { return getToken(MySqlParser.EQUALS, 0); } + public TerminalNode EXP() { return getToken(MySqlParser.EXP, 0); } + public TerminalNode EXPORT_SET() { return getToken(MySqlParser.EXPORT_SET, 0); } + public TerminalNode EXTERIORRING() { return getToken(MySqlParser.EXTERIORRING, 0); } + public TerminalNode EXTRACTVALUE() { return getToken(MySqlParser.EXTRACTVALUE, 0); } + public TerminalNode FIELD() { return getToken(MySqlParser.FIELD, 0); } + public TerminalNode FIND_IN_SET() { return getToken(MySqlParser.FIND_IN_SET, 0); } + public TerminalNode FLOOR() { return getToken(MySqlParser.FLOOR, 0); } + public TerminalNode FORMAT() { return getToken(MySqlParser.FORMAT, 0); } + public TerminalNode FOUND_ROWS() { return getToken(MySqlParser.FOUND_ROWS, 0); } + public TerminalNode FROM_BASE64() { return getToken(MySqlParser.FROM_BASE64, 0); } + public TerminalNode FROM_DAYS() { return getToken(MySqlParser.FROM_DAYS, 0); } + public TerminalNode FROM_UNIXTIME() { return getToken(MySqlParser.FROM_UNIXTIME, 0); } + public TerminalNode GEOMCOLLFROMTEXT() { return getToken(MySqlParser.GEOMCOLLFROMTEXT, 0); } + public TerminalNode GEOMCOLLFROMWKB() { return getToken(MySqlParser.GEOMCOLLFROMWKB, 0); } + public TerminalNode GEOMETRYCOLLECTION() { return getToken(MySqlParser.GEOMETRYCOLLECTION, 0); } + public TerminalNode GEOMETRYCOLLECTIONFROMTEXT() { return getToken(MySqlParser.GEOMETRYCOLLECTIONFROMTEXT, 0); } + public TerminalNode GEOMETRYCOLLECTIONFROMWKB() { return getToken(MySqlParser.GEOMETRYCOLLECTIONFROMWKB, 0); } + public TerminalNode GEOMETRYFROMTEXT() { return getToken(MySqlParser.GEOMETRYFROMTEXT, 0); } + public TerminalNode GEOMETRYFROMWKB() { return getToken(MySqlParser.GEOMETRYFROMWKB, 0); } + public TerminalNode GEOMETRYN() { return getToken(MySqlParser.GEOMETRYN, 0); } + public TerminalNode GEOMETRYTYPE() { return getToken(MySqlParser.GEOMETRYTYPE, 0); } + public TerminalNode GEOMFROMTEXT() { return getToken(MySqlParser.GEOMFROMTEXT, 0); } + public TerminalNode GEOMFROMWKB() { return getToken(MySqlParser.GEOMFROMWKB, 0); } + public TerminalNode GET_FORMAT() { return getToken(MySqlParser.GET_FORMAT, 0); } + public TerminalNode GET_LOCK() { return getToken(MySqlParser.GET_LOCK, 0); } + public TerminalNode GLENGTH() { return getToken(MySqlParser.GLENGTH, 0); } + public TerminalNode GREATEST() { return getToken(MySqlParser.GREATEST, 0); } + public TerminalNode GTID_SUBSET() { return getToken(MySqlParser.GTID_SUBSET, 0); } + public TerminalNode GTID_SUBTRACT() { return getToken(MySqlParser.GTID_SUBTRACT, 0); } + public TerminalNode HEX() { return getToken(MySqlParser.HEX, 0); } + public TerminalNode HOUR() { return getToken(MySqlParser.HOUR, 0); } + public TerminalNode IFNULL() { return getToken(MySqlParser.IFNULL, 0); } + public TerminalNode INET6_ATON() { return getToken(MySqlParser.INET6_ATON, 0); } + public TerminalNode INET6_NTOA() { return getToken(MySqlParser.INET6_NTOA, 0); } + public TerminalNode INET_ATON() { return getToken(MySqlParser.INET_ATON, 0); } + public TerminalNode INET_NTOA() { return getToken(MySqlParser.INET_NTOA, 0); } + public TerminalNode INSTR() { return getToken(MySqlParser.INSTR, 0); } + public TerminalNode INTERIORRINGN() { return getToken(MySqlParser.INTERIORRINGN, 0); } + public TerminalNode INTERSECTS() { return getToken(MySqlParser.INTERSECTS, 0); } + public TerminalNode INVISIBLE() { return getToken(MySqlParser.INVISIBLE, 0); } + public TerminalNode ISCLOSED() { return getToken(MySqlParser.ISCLOSED, 0); } + public TerminalNode ISEMPTY() { return getToken(MySqlParser.ISEMPTY, 0); } + public TerminalNode ISNULL() { return getToken(MySqlParser.ISNULL, 0); } + public TerminalNode ISSIMPLE() { return getToken(MySqlParser.ISSIMPLE, 0); } + public TerminalNode IS_FREE_LOCK() { return getToken(MySqlParser.IS_FREE_LOCK, 0); } + public TerminalNode IS_IPV4() { return getToken(MySqlParser.IS_IPV4, 0); } + public TerminalNode IS_IPV4_COMPAT() { return getToken(MySqlParser.IS_IPV4_COMPAT, 0); } + public TerminalNode IS_IPV4_MAPPED() { return getToken(MySqlParser.IS_IPV4_MAPPED, 0); } + public TerminalNode IS_IPV6() { return getToken(MySqlParser.IS_IPV6, 0); } + public TerminalNode IS_USED_LOCK() { return getToken(MySqlParser.IS_USED_LOCK, 0); } + public TerminalNode LAST_INSERT_ID() { return getToken(MySqlParser.LAST_INSERT_ID, 0); } + public TerminalNode LCASE() { return getToken(MySqlParser.LCASE, 0); } + public TerminalNode LEAST() { return getToken(MySqlParser.LEAST, 0); } + public TerminalNode LEFT() { return getToken(MySqlParser.LEFT, 0); } + public TerminalNode LENGTH() { return getToken(MySqlParser.LENGTH, 0); } + public TerminalNode LINEFROMTEXT() { return getToken(MySqlParser.LINEFROMTEXT, 0); } + public TerminalNode LINEFROMWKB() { return getToken(MySqlParser.LINEFROMWKB, 0); } + public TerminalNode LINESTRING() { return getToken(MySqlParser.LINESTRING, 0); } + public TerminalNode LINESTRINGFROMTEXT() { return getToken(MySqlParser.LINESTRINGFROMTEXT, 0); } + public TerminalNode LINESTRINGFROMWKB() { return getToken(MySqlParser.LINESTRINGFROMWKB, 0); } + public TerminalNode LN() { return getToken(MySqlParser.LN, 0); } + public TerminalNode LOAD_FILE() { return getToken(MySqlParser.LOAD_FILE, 0); } + public TerminalNode LOCATE() { return getToken(MySqlParser.LOCATE, 0); } + public TerminalNode LOG() { return getToken(MySqlParser.LOG, 0); } + public TerminalNode LOG10() { return getToken(MySqlParser.LOG10, 0); } + public TerminalNode LOG2() { return getToken(MySqlParser.LOG2, 0); } + public TerminalNode LOWER() { return getToken(MySqlParser.LOWER, 0); } + public TerminalNode LPAD() { return getToken(MySqlParser.LPAD, 0); } + public TerminalNode LTRIM() { return getToken(MySqlParser.LTRIM, 0); } + public TerminalNode MAKEDATE() { return getToken(MySqlParser.MAKEDATE, 0); } + public TerminalNode MAKETIME() { return getToken(MySqlParser.MAKETIME, 0); } + public TerminalNode MAKE_SET() { return getToken(MySqlParser.MAKE_SET, 0); } + public TerminalNode MASTER_POS_WAIT() { return getToken(MySqlParser.MASTER_POS_WAIT, 0); } + public TerminalNode MBRCONTAINS() { return getToken(MySqlParser.MBRCONTAINS, 0); } + public TerminalNode MBRDISJOINT() { return getToken(MySqlParser.MBRDISJOINT, 0); } + public TerminalNode MBREQUAL() { return getToken(MySqlParser.MBREQUAL, 0); } + public TerminalNode MBRINTERSECTS() { return getToken(MySqlParser.MBRINTERSECTS, 0); } + public TerminalNode MBROVERLAPS() { return getToken(MySqlParser.MBROVERLAPS, 0); } + public TerminalNode MBRTOUCHES() { return getToken(MySqlParser.MBRTOUCHES, 0); } + public TerminalNode MBRWITHIN() { return getToken(MySqlParser.MBRWITHIN, 0); } + public TerminalNode MD5() { return getToken(MySqlParser.MD5, 0); } + public TerminalNode MICROSECOND() { return getToken(MySqlParser.MICROSECOND, 0); } + public TerminalNode MINUTE() { return getToken(MySqlParser.MINUTE, 0); } + public TerminalNode MLINEFROMTEXT() { return getToken(MySqlParser.MLINEFROMTEXT, 0); } + public TerminalNode MLINEFROMWKB() { return getToken(MySqlParser.MLINEFROMWKB, 0); } + public TerminalNode MONTH() { return getToken(MySqlParser.MONTH, 0); } + public TerminalNode MONTHNAME() { return getToken(MySqlParser.MONTHNAME, 0); } + public TerminalNode MPOINTFROMTEXT() { return getToken(MySqlParser.MPOINTFROMTEXT, 0); } + public TerminalNode MPOINTFROMWKB() { return getToken(MySqlParser.MPOINTFROMWKB, 0); } + public TerminalNode MPOLYFROMTEXT() { return getToken(MySqlParser.MPOLYFROMTEXT, 0); } + public TerminalNode MPOLYFROMWKB() { return getToken(MySqlParser.MPOLYFROMWKB, 0); } + public TerminalNode MULTILINESTRING() { return getToken(MySqlParser.MULTILINESTRING, 0); } + public TerminalNode MULTILINESTRINGFROMTEXT() { return getToken(MySqlParser.MULTILINESTRINGFROMTEXT, 0); } + public TerminalNode MULTILINESTRINGFROMWKB() { return getToken(MySqlParser.MULTILINESTRINGFROMWKB, 0); } + public TerminalNode MULTIPOINT() { return getToken(MySqlParser.MULTIPOINT, 0); } + public TerminalNode MULTIPOINTFROMTEXT() { return getToken(MySqlParser.MULTIPOINTFROMTEXT, 0); } + public TerminalNode MULTIPOINTFROMWKB() { return getToken(MySqlParser.MULTIPOINTFROMWKB, 0); } + public TerminalNode MULTIPOLYGON() { return getToken(MySqlParser.MULTIPOLYGON, 0); } + public TerminalNode MULTIPOLYGONFROMTEXT() { return getToken(MySqlParser.MULTIPOLYGONFROMTEXT, 0); } + public TerminalNode MULTIPOLYGONFROMWKB() { return getToken(MySqlParser.MULTIPOLYGONFROMWKB, 0); } + public TerminalNode NAME_CONST() { return getToken(MySqlParser.NAME_CONST, 0); } + public TerminalNode NULLIF() { return getToken(MySqlParser.NULLIF, 0); } + public TerminalNode NUMGEOMETRIES() { return getToken(MySqlParser.NUMGEOMETRIES, 0); } + public TerminalNode NUMINTERIORRINGS() { return getToken(MySqlParser.NUMINTERIORRINGS, 0); } + public TerminalNode NUMPOINTS() { return getToken(MySqlParser.NUMPOINTS, 0); } + public TerminalNode OCT() { return getToken(MySqlParser.OCT, 0); } + public TerminalNode OCTET_LENGTH() { return getToken(MySqlParser.OCTET_LENGTH, 0); } + public TerminalNode ORD() { return getToken(MySqlParser.ORD, 0); } + public TerminalNode OVERLAPS() { return getToken(MySqlParser.OVERLAPS, 0); } + public TerminalNode PERIOD_ADD() { return getToken(MySqlParser.PERIOD_ADD, 0); } + public TerminalNode PERIOD_DIFF() { return getToken(MySqlParser.PERIOD_DIFF, 0); } + public TerminalNode PI() { return getToken(MySqlParser.PI, 0); } + public TerminalNode POINT() { return getToken(MySqlParser.POINT, 0); } + public TerminalNode POINTFROMTEXT() { return getToken(MySqlParser.POINTFROMTEXT, 0); } + public TerminalNode POINTFROMWKB() { return getToken(MySqlParser.POINTFROMWKB, 0); } + public TerminalNode POINTN() { return getToken(MySqlParser.POINTN, 0); } + public TerminalNode POLYFROMTEXT() { return getToken(MySqlParser.POLYFROMTEXT, 0); } + public TerminalNode POLYFROMWKB() { return getToken(MySqlParser.POLYFROMWKB, 0); } + public TerminalNode POLYGON() { return getToken(MySqlParser.POLYGON, 0); } + public TerminalNode POLYGONFROMTEXT() { return getToken(MySqlParser.POLYGONFROMTEXT, 0); } + public TerminalNode POLYGONFROMWKB() { return getToken(MySqlParser.POLYGONFROMWKB, 0); } + public TerminalNode POSITION() { return getToken(MySqlParser.POSITION, 0); } + public TerminalNode POW() { return getToken(MySqlParser.POW, 0); } + public TerminalNode POWER() { return getToken(MySqlParser.POWER, 0); } + public TerminalNode QUARTER() { return getToken(MySqlParser.QUARTER, 0); } + public TerminalNode QUOTE() { return getToken(MySqlParser.QUOTE, 0); } + public TerminalNode RADIANS() { return getToken(MySqlParser.RADIANS, 0); } + public TerminalNode RAND() { return getToken(MySqlParser.RAND, 0); } + public TerminalNode RANDOM_BYTES() { return getToken(MySqlParser.RANDOM_BYTES, 0); } + public TerminalNode RELEASE_LOCK() { return getToken(MySqlParser.RELEASE_LOCK, 0); } + public TerminalNode REVERSE() { return getToken(MySqlParser.REVERSE, 0); } + public TerminalNode RIGHT() { return getToken(MySqlParser.RIGHT, 0); } + public TerminalNode ROUND() { return getToken(MySqlParser.ROUND, 0); } + public TerminalNode ROW_COUNT() { return getToken(MySqlParser.ROW_COUNT, 0); } + public TerminalNode RPAD() { return getToken(MySqlParser.RPAD, 0); } + public TerminalNode RTRIM() { return getToken(MySqlParser.RTRIM, 0); } + public TerminalNode SECOND() { return getToken(MySqlParser.SECOND, 0); } + public TerminalNode SEC_TO_TIME() { return getToken(MySqlParser.SEC_TO_TIME, 0); } + public TerminalNode SESSION_USER() { return getToken(MySqlParser.SESSION_USER, 0); } + public TerminalNode SESSION_VARIABLES_ADMIN() { return getToken(MySqlParser.SESSION_VARIABLES_ADMIN, 0); } + public TerminalNode SHA() { return getToken(MySqlParser.SHA, 0); } + public TerminalNode SHA1() { return getToken(MySqlParser.SHA1, 0); } + public TerminalNode SHA2() { return getToken(MySqlParser.SHA2, 0); } + public TerminalNode SIGN() { return getToken(MySqlParser.SIGN, 0); } + public TerminalNode SIN() { return getToken(MySqlParser.SIN, 0); } + public TerminalNode SLEEP() { return getToken(MySqlParser.SLEEP, 0); } + public TerminalNode SOUNDEX() { return getToken(MySqlParser.SOUNDEX, 0); } + public TerminalNode SQL_THREAD_WAIT_AFTER_GTIDS() { return getToken(MySqlParser.SQL_THREAD_WAIT_AFTER_GTIDS, 0); } + public TerminalNode SQRT() { return getToken(MySqlParser.SQRT, 0); } + public TerminalNode SRID() { return getToken(MySqlParser.SRID, 0); } + public TerminalNode STARTPOINT() { return getToken(MySqlParser.STARTPOINT, 0); } + public TerminalNode STRCMP() { return getToken(MySqlParser.STRCMP, 0); } + public TerminalNode STR_TO_DATE() { return getToken(MySqlParser.STR_TO_DATE, 0); } + public TerminalNode ST_AREA() { return getToken(MySqlParser.ST_AREA, 0); } + public TerminalNode ST_ASBINARY() { return getToken(MySqlParser.ST_ASBINARY, 0); } + public TerminalNode ST_ASTEXT() { return getToken(MySqlParser.ST_ASTEXT, 0); } + public TerminalNode ST_ASWKB() { return getToken(MySqlParser.ST_ASWKB, 0); } + public TerminalNode ST_ASWKT() { return getToken(MySqlParser.ST_ASWKT, 0); } + public TerminalNode ST_BUFFER() { return getToken(MySqlParser.ST_BUFFER, 0); } + public TerminalNode ST_CENTROID() { return getToken(MySqlParser.ST_CENTROID, 0); } + public TerminalNode ST_CONTAINS() { return getToken(MySqlParser.ST_CONTAINS, 0); } + public TerminalNode ST_CROSSES() { return getToken(MySqlParser.ST_CROSSES, 0); } + public TerminalNode ST_DIFFERENCE() { return getToken(MySqlParser.ST_DIFFERENCE, 0); } + public TerminalNode ST_DIMENSION() { return getToken(MySqlParser.ST_DIMENSION, 0); } + public TerminalNode ST_DISJOINT() { return getToken(MySqlParser.ST_DISJOINT, 0); } + public TerminalNode ST_DISTANCE() { return getToken(MySqlParser.ST_DISTANCE, 0); } + public TerminalNode ST_ENDPOINT() { return getToken(MySqlParser.ST_ENDPOINT, 0); } + public TerminalNode ST_ENVELOPE() { return getToken(MySqlParser.ST_ENVELOPE, 0); } + public TerminalNode ST_EQUALS() { return getToken(MySqlParser.ST_EQUALS, 0); } + public TerminalNode ST_EXTERIORRING() { return getToken(MySqlParser.ST_EXTERIORRING, 0); } + public TerminalNode ST_GEOMCOLLFROMTEXT() { return getToken(MySqlParser.ST_GEOMCOLLFROMTEXT, 0); } + public TerminalNode ST_GEOMCOLLFROMTXT() { return getToken(MySqlParser.ST_GEOMCOLLFROMTXT, 0); } + public TerminalNode ST_GEOMCOLLFROMWKB() { return getToken(MySqlParser.ST_GEOMCOLLFROMWKB, 0); } + public TerminalNode ST_GEOMETRYCOLLECTIONFROMTEXT() { return getToken(MySqlParser.ST_GEOMETRYCOLLECTIONFROMTEXT, 0); } + public TerminalNode ST_GEOMETRYCOLLECTIONFROMWKB() { return getToken(MySqlParser.ST_GEOMETRYCOLLECTIONFROMWKB, 0); } + public TerminalNode ST_GEOMETRYFROMTEXT() { return getToken(MySqlParser.ST_GEOMETRYFROMTEXT, 0); } + public TerminalNode ST_GEOMETRYFROMWKB() { return getToken(MySqlParser.ST_GEOMETRYFROMWKB, 0); } + public TerminalNode ST_GEOMETRYN() { return getToken(MySqlParser.ST_GEOMETRYN, 0); } + public TerminalNode ST_GEOMETRYTYPE() { return getToken(MySqlParser.ST_GEOMETRYTYPE, 0); } + public TerminalNode ST_GEOMFROMTEXT() { return getToken(MySqlParser.ST_GEOMFROMTEXT, 0); } + public TerminalNode ST_GEOMFROMWKB() { return getToken(MySqlParser.ST_GEOMFROMWKB, 0); } + public TerminalNode ST_INTERIORRINGN() { return getToken(MySqlParser.ST_INTERIORRINGN, 0); } + public TerminalNode ST_INTERSECTION() { return getToken(MySqlParser.ST_INTERSECTION, 0); } + public TerminalNode ST_INTERSECTS() { return getToken(MySqlParser.ST_INTERSECTS, 0); } + public TerminalNode ST_ISCLOSED() { return getToken(MySqlParser.ST_ISCLOSED, 0); } + public TerminalNode ST_ISEMPTY() { return getToken(MySqlParser.ST_ISEMPTY, 0); } + public TerminalNode ST_ISSIMPLE() { return getToken(MySqlParser.ST_ISSIMPLE, 0); } + public TerminalNode ST_LINEFROMTEXT() { return getToken(MySqlParser.ST_LINEFROMTEXT, 0); } + public TerminalNode ST_LINEFROMWKB() { return getToken(MySqlParser.ST_LINEFROMWKB, 0); } + public TerminalNode ST_LINESTRINGFROMTEXT() { return getToken(MySqlParser.ST_LINESTRINGFROMTEXT, 0); } + public TerminalNode ST_LINESTRINGFROMWKB() { return getToken(MySqlParser.ST_LINESTRINGFROMWKB, 0); } + public TerminalNode ST_NUMGEOMETRIES() { return getToken(MySqlParser.ST_NUMGEOMETRIES, 0); } + public TerminalNode ST_NUMINTERIORRING() { return getToken(MySqlParser.ST_NUMINTERIORRING, 0); } + public TerminalNode ST_NUMINTERIORRINGS() { return getToken(MySqlParser.ST_NUMINTERIORRINGS, 0); } + public TerminalNode ST_NUMPOINTS() { return getToken(MySqlParser.ST_NUMPOINTS, 0); } + public TerminalNode ST_OVERLAPS() { return getToken(MySqlParser.ST_OVERLAPS, 0); } + public TerminalNode ST_POINTFROMTEXT() { return getToken(MySqlParser.ST_POINTFROMTEXT, 0); } + public TerminalNode ST_POINTFROMWKB() { return getToken(MySqlParser.ST_POINTFROMWKB, 0); } + public TerminalNode ST_POINTN() { return getToken(MySqlParser.ST_POINTN, 0); } + public TerminalNode ST_POLYFROMTEXT() { return getToken(MySqlParser.ST_POLYFROMTEXT, 0); } + public TerminalNode ST_POLYFROMWKB() { return getToken(MySqlParser.ST_POLYFROMWKB, 0); } + public TerminalNode ST_POLYGONFROMTEXT() { return getToken(MySqlParser.ST_POLYGONFROMTEXT, 0); } + public TerminalNode ST_POLYGONFROMWKB() { return getToken(MySqlParser.ST_POLYGONFROMWKB, 0); } + public TerminalNode ST_SRID() { return getToken(MySqlParser.ST_SRID, 0); } + public TerminalNode ST_STARTPOINT() { return getToken(MySqlParser.ST_STARTPOINT, 0); } + public TerminalNode ST_SYMDIFFERENCE() { return getToken(MySqlParser.ST_SYMDIFFERENCE, 0); } + public TerminalNode ST_TOUCHES() { return getToken(MySqlParser.ST_TOUCHES, 0); } + public TerminalNode ST_UNION() { return getToken(MySqlParser.ST_UNION, 0); } + public TerminalNode ST_WITHIN() { return getToken(MySqlParser.ST_WITHIN, 0); } + public TerminalNode ST_X() { return getToken(MySqlParser.ST_X, 0); } + public TerminalNode ST_Y() { return getToken(MySqlParser.ST_Y, 0); } + public TerminalNode SUBDATE() { return getToken(MySqlParser.SUBDATE, 0); } + public TerminalNode SUBSTRING_INDEX() { return getToken(MySqlParser.SUBSTRING_INDEX, 0); } + public TerminalNode SUBTIME() { return getToken(MySqlParser.SUBTIME, 0); } + public TerminalNode SYSTEM_USER() { return getToken(MySqlParser.SYSTEM_USER, 0); } + public TerminalNode TAN() { return getToken(MySqlParser.TAN, 0); } + public TerminalNode TIME() { return getToken(MySqlParser.TIME, 0); } + public TerminalNode TIMEDIFF() { return getToken(MySqlParser.TIMEDIFF, 0); } + public TerminalNode TIMESTAMP() { return getToken(MySqlParser.TIMESTAMP, 0); } + public TerminalNode TIMESTAMPADD() { return getToken(MySqlParser.TIMESTAMPADD, 0); } + public TerminalNode TIMESTAMPDIFF() { return getToken(MySqlParser.TIMESTAMPDIFF, 0); } + public TerminalNode TIME_FORMAT() { return getToken(MySqlParser.TIME_FORMAT, 0); } + public TerminalNode TIME_TO_SEC() { return getToken(MySqlParser.TIME_TO_SEC, 0); } + public TerminalNode TOUCHES() { return getToken(MySqlParser.TOUCHES, 0); } + public TerminalNode TO_BASE64() { return getToken(MySqlParser.TO_BASE64, 0); } + public TerminalNode TO_DAYS() { return getToken(MySqlParser.TO_DAYS, 0); } + public TerminalNode TO_SECONDS() { return getToken(MySqlParser.TO_SECONDS, 0); } + public TerminalNode UCASE() { return getToken(MySqlParser.UCASE, 0); } + public TerminalNode UNCOMPRESS() { return getToken(MySqlParser.UNCOMPRESS, 0); } + public TerminalNode UNCOMPRESSED_LENGTH() { return getToken(MySqlParser.UNCOMPRESSED_LENGTH, 0); } + public TerminalNode UNHEX() { return getToken(MySqlParser.UNHEX, 0); } + public TerminalNode UNIX_TIMESTAMP() { return getToken(MySqlParser.UNIX_TIMESTAMP, 0); } + public TerminalNode UPDATEXML() { return getToken(MySqlParser.UPDATEXML, 0); } + public TerminalNode UPPER() { return getToken(MySqlParser.UPPER, 0); } + public TerminalNode UUID() { return getToken(MySqlParser.UUID, 0); } + public TerminalNode UUID_SHORT() { return getToken(MySqlParser.UUID_SHORT, 0); } + public TerminalNode VALIDATE_PASSWORD_STRENGTH() { return getToken(MySqlParser.VALIDATE_PASSWORD_STRENGTH, 0); } + public TerminalNode VERSION() { return getToken(MySqlParser.VERSION, 0); } + public TerminalNode VISIBLE() { return getToken(MySqlParser.VISIBLE, 0); } + public TerminalNode WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() { return getToken(MySqlParser.WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS, 0); } + public TerminalNode WEEK() { return getToken(MySqlParser.WEEK, 0); } + public TerminalNode WEEKDAY() { return getToken(MySqlParser.WEEKDAY, 0); } + public TerminalNode WEEKOFYEAR() { return getToken(MySqlParser.WEEKOFYEAR, 0); } + public TerminalNode WEIGHT_STRING() { return getToken(MySqlParser.WEIGHT_STRING, 0); } + public TerminalNode WITHIN() { return getToken(MySqlParser.WITHIN, 0); } + public TerminalNode YEAR() { return getToken(MySqlParser.YEAR, 0); } + public TerminalNode YEARWEEK() { return getToken(MySqlParser.YEARWEEK, 0); } + public TerminalNode Y_FUNCTION() { return getToken(MySqlParser.Y_FUNCTION, 0); } + public TerminalNode X_FUNCTION() { return getToken(MySqlParser.X_FUNCTION, 0); } + public FunctionNameBaseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionNameBase; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).enterFunctionNameBase(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof MySqlParserListener ) ((MySqlParserListener)listener).exitFunctionNameBase(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof MySqlParserVisitor ) return ((MySqlParserVisitor)visitor).visitFunctionNameBase(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionNameBaseContext functionNameBase() throws RecognitionException { + FunctionNameBaseContext _localctx = new FunctionNameBaseContext(_ctx, getState()); + enterRule(_localctx, 636, RULE_functionNameBase); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(6476); + _la = _input.LA(1); + if ( !(_la==DATABASE || _la==LEFT || _la==RIGHT || ((((_la - 199)) & ~0x3f) == 0 && ((1L << (_la - 199)) & ((1L << (DATE - 199)) | (1L << (TIME - 199)) | (1L << (TIMESTAMP - 199)) | (1L << (YEAR - 199)) | (1L << (COUNT - 199)) | (1L << (POSITION - 199)))) != 0) || _la==INVISIBLE || ((((_la - 582)) & ~0x3f) == 0 && ((1L << (_la - 582)) & ((1L << (VISIBLE - 582)) | (1L << (QUARTER - 582)) | (1L << (MONTH - 582)) | (1L << (DAY - 582)) | (1L << (HOUR - 582)) | (1L << (MINUTE - 582)) | (1L << (WEEK - 582)) | (1L << (SECOND - 582)) | (1L << (MICROSECOND - 582)) | (1L << (SESSION_VARIABLES_ADMIN - 582)))) != 0) || ((((_la - 695)) & ~0x3f) == 0 && ((1L << (_la - 695)) & ((1L << (GEOMETRYCOLLECTION - 695)) | (1L << (LINESTRING - 695)) | (1L << (MULTILINESTRING - 695)) | (1L << (MULTIPOINT - 695)) | (1L << (MULTIPOLYGON - 695)) | (1L << (POINT - 695)) | (1L << (POLYGON - 695)) | (1L << (ABS - 695)) | (1L << (ACOS - 695)) | (1L << (ADDDATE - 695)) | (1L << (ADDTIME - 695)) | (1L << (AES_DECRYPT - 695)) | (1L << (AES_ENCRYPT - 695)) | (1L << (AREA - 695)) | (1L << (ASBINARY - 695)) | (1L << (ASIN - 695)) | (1L << (ASTEXT - 695)) | (1L << (ASWKB - 695)) | (1L << (ASWKT - 695)) | (1L << (ASYMMETRIC_DECRYPT - 695)) | (1L << (ASYMMETRIC_DERIVE - 695)) | (1L << (ASYMMETRIC_ENCRYPT - 695)) | (1L << (ASYMMETRIC_SIGN - 695)) | (1L << (ASYMMETRIC_VERIFY - 695)) | (1L << (ATAN - 695)) | (1L << (ATAN2 - 695)) | (1L << (BENCHMARK - 695)) | (1L << (BIN - 695)) | (1L << (BIT_COUNT - 695)) | (1L << (BIT_LENGTH - 695)) | (1L << (BUFFER - 695)) | (1L << (CEIL - 695)) | (1L << (CEILING - 695)) | (1L << (CENTROID - 695)) | (1L << (CHARACTER_LENGTH - 695)) | (1L << (CHARSET - 695)) | (1L << (CHAR_LENGTH - 695)) | (1L << (COERCIBILITY - 695)) | (1L << (COLLATION - 695)) | (1L << (COMPRESS - 695)) | (1L << (CONCAT - 695)) | (1L << (CONCAT_WS - 695)) | (1L << (CONNECTION_ID - 695)) | (1L << (CONV - 695)) | (1L << (CONVERT_TZ - 695)) | (1L << (COS - 695)) | (1L << (COT - 695)) | (1L << (CRC32 - 695)) | (1L << (CREATE_ASYMMETRIC_PRIV_KEY - 695)) | (1L << (CREATE_ASYMMETRIC_PUB_KEY - 695)) | (1L << (CREATE_DH_PARAMETERS - 695)) | (1L << (CREATE_DIGEST - 695)) | (1L << (CROSSES - 695)) | (1L << (DATEDIFF - 695)) | (1L << (DATE_FORMAT - 695)) | (1L << (DAYNAME - 695)) | (1L << (DAYOFMONTH - 695)) | (1L << (DAYOFWEEK - 695)) | (1L << (DAYOFYEAR - 695)) | (1L << (DECODE - 695)) | (1L << (DEGREES - 695)))) != 0) || ((((_la - 759)) & ~0x3f) == 0 && ((1L << (_la - 759)) & ((1L << (DES_DECRYPT - 759)) | (1L << (DES_ENCRYPT - 759)) | (1L << (DIMENSION - 759)) | (1L << (DISJOINT - 759)) | (1L << (ELT - 759)) | (1L << (ENCODE - 759)) | (1L << (ENCRYPT - 759)) | (1L << (ENDPOINT - 759)) | (1L << (ENVELOPE - 759)) | (1L << (EQUALS - 759)) | (1L << (EXP - 759)) | (1L << (EXPORT_SET - 759)) | (1L << (EXTERIORRING - 759)) | (1L << (EXTRACTVALUE - 759)) | (1L << (FIELD - 759)) | (1L << (FIND_IN_SET - 759)) | (1L << (FLOOR - 759)) | (1L << (FORMAT - 759)) | (1L << (FOUND_ROWS - 759)) | (1L << (FROM_BASE64 - 759)) | (1L << (FROM_DAYS - 759)) | (1L << (FROM_UNIXTIME - 759)) | (1L << (GEOMCOLLFROMTEXT - 759)) | (1L << (GEOMCOLLFROMWKB - 759)) | (1L << (GEOMETRYCOLLECTIONFROMTEXT - 759)) | (1L << (GEOMETRYCOLLECTIONFROMWKB - 759)) | (1L << (GEOMETRYFROMTEXT - 759)) | (1L << (GEOMETRYFROMWKB - 759)) | (1L << (GEOMETRYN - 759)) | (1L << (GEOMETRYTYPE - 759)) | (1L << (GEOMFROMTEXT - 759)) | (1L << (GEOMFROMWKB - 759)) | (1L << (GET_FORMAT - 759)) | (1L << (GET_LOCK - 759)) | (1L << (GLENGTH - 759)) | (1L << (GREATEST - 759)) | (1L << (GTID_SUBSET - 759)) | (1L << (GTID_SUBTRACT - 759)) | (1L << (HEX - 759)) | (1L << (IFNULL - 759)) | (1L << (INET6_ATON - 759)) | (1L << (INET6_NTOA - 759)) | (1L << (INET_ATON - 759)) | (1L << (INET_NTOA - 759)) | (1L << (INSTR - 759)) | (1L << (INTERIORRINGN - 759)) | (1L << (INTERSECTS - 759)) | (1L << (ISCLOSED - 759)) | (1L << (ISEMPTY - 759)) | (1L << (ISNULL - 759)) | (1L << (ISSIMPLE - 759)) | (1L << (IS_FREE_LOCK - 759)) | (1L << (IS_IPV4 - 759)) | (1L << (IS_IPV4_COMPAT - 759)) | (1L << (IS_IPV4_MAPPED - 759)) | (1L << (IS_IPV6 - 759)) | (1L << (IS_USED_LOCK - 759)) | (1L << (LAST_INSERT_ID - 759)) | (1L << (LCASE - 759)) | (1L << (LEAST - 759)) | (1L << (LENGTH - 759)) | (1L << (LINEFROMTEXT - 759)) | (1L << (LINEFROMWKB - 759)) | (1L << (LINESTRINGFROMTEXT - 759)))) != 0) || ((((_la - 823)) & ~0x3f) == 0 && ((1L << (_la - 823)) & ((1L << (LINESTRINGFROMWKB - 823)) | (1L << (LN - 823)) | (1L << (LOAD_FILE - 823)) | (1L << (LOCATE - 823)) | (1L << (LOG - 823)) | (1L << (LOG10 - 823)) | (1L << (LOG2 - 823)) | (1L << (LOWER - 823)) | (1L << (LPAD - 823)) | (1L << (LTRIM - 823)) | (1L << (MAKEDATE - 823)) | (1L << (MAKETIME - 823)) | (1L << (MAKE_SET - 823)) | (1L << (MASTER_POS_WAIT - 823)) | (1L << (MBRCONTAINS - 823)) | (1L << (MBRDISJOINT - 823)) | (1L << (MBREQUAL - 823)) | (1L << (MBRINTERSECTS - 823)) | (1L << (MBROVERLAPS - 823)) | (1L << (MBRTOUCHES - 823)) | (1L << (MBRWITHIN - 823)) | (1L << (MD5 - 823)) | (1L << (MLINEFROMTEXT - 823)) | (1L << (MLINEFROMWKB - 823)) | (1L << (MONTHNAME - 823)) | (1L << (MPOINTFROMTEXT - 823)) | (1L << (MPOINTFROMWKB - 823)) | (1L << (MPOLYFROMTEXT - 823)) | (1L << (MPOLYFROMWKB - 823)) | (1L << (MULTILINESTRINGFROMTEXT - 823)) | (1L << (MULTILINESTRINGFROMWKB - 823)) | (1L << (MULTIPOINTFROMTEXT - 823)) | (1L << (MULTIPOINTFROMWKB - 823)) | (1L << (MULTIPOLYGONFROMTEXT - 823)) | (1L << (MULTIPOLYGONFROMWKB - 823)) | (1L << (NAME_CONST - 823)) | (1L << (NULLIF - 823)) | (1L << (NUMGEOMETRIES - 823)) | (1L << (NUMINTERIORRINGS - 823)) | (1L << (NUMPOINTS - 823)) | (1L << (OCT - 823)) | (1L << (OCTET_LENGTH - 823)) | (1L << (ORD - 823)) | (1L << (OVERLAPS - 823)) | (1L << (PERIOD_ADD - 823)) | (1L << (PERIOD_DIFF - 823)) | (1L << (PI - 823)) | (1L << (POINTFROMTEXT - 823)) | (1L << (POINTFROMWKB - 823)) | (1L << (POINTN - 823)) | (1L << (POLYFROMTEXT - 823)) | (1L << (POLYFROMWKB - 823)) | (1L << (POLYGONFROMTEXT - 823)) | (1L << (POLYGONFROMWKB - 823)) | (1L << (POW - 823)) | (1L << (POWER - 823)) | (1L << (QUOTE - 823)) | (1L << (RADIANS - 823)) | (1L << (RAND - 823)) | (1L << (RANDOM_BYTES - 823)) | (1L << (RELEASE_LOCK - 823)) | (1L << (REVERSE - 823)) | (1L << (ROUND - 823)) | (1L << (ROW_COUNT - 823)))) != 0) || ((((_la - 887)) & ~0x3f) == 0 && ((1L << (_la - 887)) & ((1L << (RPAD - 887)) | (1L << (RTRIM - 887)) | (1L << (SEC_TO_TIME - 887)) | (1L << (SESSION_USER - 887)) | (1L << (SHA - 887)) | (1L << (SHA1 - 887)) | (1L << (SHA2 - 887)) | (1L << (SIGN - 887)) | (1L << (SIN - 887)) | (1L << (SLEEP - 887)) | (1L << (SOUNDEX - 887)) | (1L << (SQL_THREAD_WAIT_AFTER_GTIDS - 887)) | (1L << (SQRT - 887)) | (1L << (SRID - 887)) | (1L << (STARTPOINT - 887)) | (1L << (STRCMP - 887)) | (1L << (STR_TO_DATE - 887)) | (1L << (ST_AREA - 887)) | (1L << (ST_ASBINARY - 887)) | (1L << (ST_ASTEXT - 887)) | (1L << (ST_ASWKB - 887)) | (1L << (ST_ASWKT - 887)) | (1L << (ST_BUFFER - 887)) | (1L << (ST_CENTROID - 887)) | (1L << (ST_CONTAINS - 887)) | (1L << (ST_CROSSES - 887)) | (1L << (ST_DIFFERENCE - 887)) | (1L << (ST_DIMENSION - 887)) | (1L << (ST_DISJOINT - 887)) | (1L << (ST_DISTANCE - 887)) | (1L << (ST_ENDPOINT - 887)) | (1L << (ST_ENVELOPE - 887)) | (1L << (ST_EQUALS - 887)) | (1L << (ST_EXTERIORRING - 887)) | (1L << (ST_GEOMCOLLFROMTEXT - 887)) | (1L << (ST_GEOMCOLLFROMTXT - 887)) | (1L << (ST_GEOMCOLLFROMWKB - 887)) | (1L << (ST_GEOMETRYCOLLECTIONFROMTEXT - 887)) | (1L << (ST_GEOMETRYCOLLECTIONFROMWKB - 887)) | (1L << (ST_GEOMETRYFROMTEXT - 887)) | (1L << (ST_GEOMETRYFROMWKB - 887)) | (1L << (ST_GEOMETRYN - 887)) | (1L << (ST_GEOMETRYTYPE - 887)) | (1L << (ST_GEOMFROMTEXT - 887)) | (1L << (ST_GEOMFROMWKB - 887)) | (1L << (ST_INTERIORRINGN - 887)) | (1L << (ST_INTERSECTION - 887)) | (1L << (ST_INTERSECTS - 887)) | (1L << (ST_ISCLOSED - 887)) | (1L << (ST_ISEMPTY - 887)) | (1L << (ST_ISSIMPLE - 887)) | (1L << (ST_LINEFROMTEXT - 887)) | (1L << (ST_LINEFROMWKB - 887)) | (1L << (ST_LINESTRINGFROMTEXT - 887)) | (1L << (ST_LINESTRINGFROMWKB - 887)) | (1L << (ST_NUMGEOMETRIES - 887)) | (1L << (ST_NUMINTERIORRING - 887)) | (1L << (ST_NUMINTERIORRINGS - 887)) | (1L << (ST_NUMPOINTS - 887)) | (1L << (ST_OVERLAPS - 887)) | (1L << (ST_POINTFROMTEXT - 887)) | (1L << (ST_POINTFROMWKB - 887)) | (1L << (ST_POINTN - 887)))) != 0) || ((((_la - 951)) & ~0x3f) == 0 && ((1L << (_la - 951)) & ((1L << (ST_POLYFROMTEXT - 951)) | (1L << (ST_POLYFROMWKB - 951)) | (1L << (ST_POLYGONFROMTEXT - 951)) | (1L << (ST_POLYGONFROMWKB - 951)) | (1L << (ST_SRID - 951)) | (1L << (ST_STARTPOINT - 951)) | (1L << (ST_SYMDIFFERENCE - 951)) | (1L << (ST_TOUCHES - 951)) | (1L << (ST_UNION - 951)) | (1L << (ST_WITHIN - 951)) | (1L << (ST_X - 951)) | (1L << (ST_Y - 951)) | (1L << (SUBDATE - 951)) | (1L << (SUBSTRING_INDEX - 951)) | (1L << (SUBTIME - 951)) | (1L << (SYSTEM_USER - 951)) | (1L << (TAN - 951)) | (1L << (TIMEDIFF - 951)) | (1L << (TIMESTAMPADD - 951)) | (1L << (TIMESTAMPDIFF - 951)) | (1L << (TIME_FORMAT - 951)) | (1L << (TIME_TO_SEC - 951)) | (1L << (TOUCHES - 951)) | (1L << (TO_BASE64 - 951)) | (1L << (TO_DAYS - 951)) | (1L << (TO_SECONDS - 951)) | (1L << (UCASE - 951)) | (1L << (UNCOMPRESS - 951)) | (1L << (UNCOMPRESSED_LENGTH - 951)) | (1L << (UNHEX - 951)) | (1L << (UNIX_TIMESTAMP - 951)) | (1L << (UPDATEXML - 951)) | (1L << (UPPER - 951)) | (1L << (UUID - 951)) | (1L << (UUID_SHORT - 951)) | (1L << (VALIDATE_PASSWORD_STRENGTH - 951)) | (1L << (VERSION - 951)) | (1L << (WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS - 951)) | (1L << (WEEKDAY - 951)) | (1L << (WEEKOFYEAR - 951)) | (1L << (WEIGHT_STRING - 951)) | (1L << (WITHIN - 951)) | (1L << (YEARWEEK - 951)) | (1L << (Y_FUNCTION - 951)) | (1L << (X_FUNCTION - 951)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 301: + return expression_sempred((ExpressionContext)_localctx, predIndex); + case 302: + return predicate_sempred((PredicateContext)_localctx, predIndex); + case 303: + return expressionForUpdate_sempred((ExpressionForUpdateContext)_localctx, predIndex); + case 304: + return predicateForUpdate_sempred((PredicateForUpdateContext)_localctx, predIndex); + case 305: + return expressionAtomForUpdate_sempred((ExpressionAtomForUpdateContext)_localctx, predIndex); + case 306: + return expressionAtom_sempred((ExpressionAtomContext)_localctx, predIndex); + } + return true; + } + private boolean expression_sempred(ExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 3); + } + return true; + } + private boolean predicate_sempred(PredicateContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 7); + case 2: + return precpred(_ctx, 5); + case 3: + return precpred(_ctx, 4); + case 4: + return precpred(_ctx, 2); + case 5: + return precpred(_ctx, 9); + case 6: + return precpred(_ctx, 8); + case 7: + return precpred(_ctx, 6); + case 8: + return precpred(_ctx, 3); + } + return true; + } + private boolean expressionForUpdate_sempred(ExpressionForUpdateContext _localctx, int predIndex) { + switch (predIndex) { + case 9: + return precpred(_ctx, 3); + case 10: + return precpred(_ctx, 2); + } + return true; + } + private boolean predicateForUpdate_sempred(PredicateForUpdateContext _localctx, int predIndex) { + switch (predIndex) { + case 11: + return precpred(_ctx, 7); + case 12: + return precpred(_ctx, 5); + case 13: + return precpred(_ctx, 4); + case 14: + return precpred(_ctx, 9); + case 15: + return precpred(_ctx, 8); + case 16: + return precpred(_ctx, 6); + case 17: + return precpred(_ctx, 3); + case 18: + return precpred(_ctx, 2); + } + return true; + } + private boolean expressionAtomForUpdate_sempred(ExpressionAtomForUpdateContext _localctx, int predIndex) { + switch (predIndex) { + case 19: + return precpred(_ctx, 2); + case 20: + return precpred(_ctx, 1); + case 21: + return precpred(_ctx, 11); + } + return true; + } + private boolean expressionAtom_sempred(ExpressionAtomContext _localctx, int predIndex) { + switch (predIndex) { + case 22: + return precpred(_ctx, 2); + case 23: + return precpred(_ctx, 1); + case 24: + return precpred(_ctx, 11); + } + return true; + } + + private static final int _serializedATNSegments = 3; + private static final String _serializedATNSegment0 = + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u041c\u1951\4\2\t"+ + "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ + "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ + "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ + "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ + "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ + ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ + "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+ + "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+ + "\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+ + "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+ + "`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k\t"+ + "k\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4"+ + "w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t\u0080"+ + "\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084\4\u0085"+ + "\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089\t\u0089"+ + "\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d\4\u008e"+ + "\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092\t\u0092"+ + "\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095\4\u0096\t\u0096\4\u0097"+ + "\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\4\u009a\t\u009a\4\u009b\t\u009b"+ + "\4\u009c\t\u009c\4\u009d\t\u009d\4\u009e\t\u009e\4\u009f\t\u009f\4\u00a0"+ + "\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3\t\u00a3\4\u00a4\t\u00a4"+ + "\4\u00a5\t\u00a5\4\u00a6\t\u00a6\4\u00a7\t\u00a7\4\u00a8\t\u00a8\4\u00a9"+ + "\t\u00a9\4\u00aa\t\u00aa\4\u00ab\t\u00ab\4\u00ac\t\u00ac\4\u00ad\t\u00ad"+ + "\4\u00ae\t\u00ae\4\u00af\t\u00af\4\u00b0\t\u00b0\4\u00b1\t\u00b1\4\u00b2"+ + "\t\u00b2\4\u00b3\t\u00b3\4\u00b4\t\u00b4\4\u00b5\t\u00b5\4\u00b6\t\u00b6"+ + "\4\u00b7\t\u00b7\4\u00b8\t\u00b8\4\u00b9\t\u00b9\4\u00ba\t\u00ba\4\u00bb"+ + "\t\u00bb\4\u00bc\t\u00bc\4\u00bd\t\u00bd\4\u00be\t\u00be\4\u00bf\t\u00bf"+ + "\4\u00c0\t\u00c0\4\u00c1\t\u00c1\4\u00c2\t\u00c2\4\u00c3\t\u00c3\4\u00c4"+ + "\t\u00c4\4\u00c5\t\u00c5\4\u00c6\t\u00c6\4\u00c7\t\u00c7\4\u00c8\t\u00c8"+ + "\4\u00c9\t\u00c9\4\u00ca\t\u00ca\4\u00cb\t\u00cb\4\u00cc\t\u00cc\4\u00cd"+ + "\t\u00cd\4\u00ce\t\u00ce\4\u00cf\t\u00cf\4\u00d0\t\u00d0\4\u00d1\t\u00d1"+ + "\4\u00d2\t\u00d2\4\u00d3\t\u00d3\4\u00d4\t\u00d4\4\u00d5\t\u00d5\4\u00d6"+ + "\t\u00d6\4\u00d7\t\u00d7\4\u00d8\t\u00d8\4\u00d9\t\u00d9\4\u00da\t\u00da"+ + "\4\u00db\t\u00db\4\u00dc\t\u00dc\4\u00dd\t\u00dd\4\u00de\t\u00de\4\u00df"+ + "\t\u00df\4\u00e0\t\u00e0\4\u00e1\t\u00e1\4\u00e2\t\u00e2\4\u00e3\t\u00e3"+ + "\4\u00e4\t\u00e4\4\u00e5\t\u00e5\4\u00e6\t\u00e6\4\u00e7\t\u00e7\4\u00e8"+ + "\t\u00e8\4\u00e9\t\u00e9\4\u00ea\t\u00ea\4\u00eb\t\u00eb\4\u00ec\t\u00ec"+ + "\4\u00ed\t\u00ed\4\u00ee\t\u00ee\4\u00ef\t\u00ef\4\u00f0\t\u00f0\4\u00f1"+ + "\t\u00f1\4\u00f2\t\u00f2\4\u00f3\t\u00f3\4\u00f4\t\u00f4\4\u00f5\t\u00f5"+ + "\4\u00f6\t\u00f6\4\u00f7\t\u00f7\4\u00f8\t\u00f8\4\u00f9\t\u00f9\4\u00fa"+ + "\t\u00fa\4\u00fb\t\u00fb\4\u00fc\t\u00fc\4\u00fd\t\u00fd\4\u00fe\t\u00fe"+ + "\4\u00ff\t\u00ff\4\u0100\t\u0100\4\u0101\t\u0101\4\u0102\t\u0102\4\u0103"+ + "\t\u0103\4\u0104\t\u0104\4\u0105\t\u0105\4\u0106\t\u0106\4\u0107\t\u0107"+ + "\4\u0108\t\u0108\4\u0109\t\u0109\4\u010a\t\u010a\4\u010b\t\u010b\4\u010c"+ + "\t\u010c\4\u010d\t\u010d\4\u010e\t\u010e\4\u010f\t\u010f\4\u0110\t\u0110"+ + "\4\u0111\t\u0111\4\u0112\t\u0112\4\u0113\t\u0113\4\u0114\t\u0114\4\u0115"+ + "\t\u0115\4\u0116\t\u0116\4\u0117\t\u0117\4\u0118\t\u0118\4\u0119\t\u0119"+ + "\4\u011a\t\u011a\4\u011b\t\u011b\4\u011c\t\u011c\4\u011d\t\u011d\4\u011e"+ + "\t\u011e\4\u011f\t\u011f\4\u0120\t\u0120\4\u0121\t\u0121\4\u0122\t\u0122"+ + "\4\u0123\t\u0123\4\u0124\t\u0124\4\u0125\t\u0125\4\u0126\t\u0126\4\u0127"+ + "\t\u0127\4\u0128\t\u0128\4\u0129\t\u0129\4\u012a\t\u012a\4\u012b\t\u012b"+ + "\4\u012c\t\u012c\4\u012d\t\u012d\4\u012e\t\u012e\4\u012f\t\u012f\4\u0130"+ + "\t\u0130\4\u0131\t\u0131\4\u0132\t\u0132\4\u0133\t\u0133\4\u0134\t\u0134"+ + "\4\u0135\t\u0135\4\u0136\t\u0136\4\u0137\t\u0137\4\u0138\t\u0138\4\u0139"+ + "\t\u0139\4\u013a\t\u013a\4\u013b\t\u013b\4\u013c\t\u013c\4\u013d\t\u013d"+ + "\4\u013e\t\u013e\4\u013f\t\u013f\4\u0140\t\u0140\3\2\5\2\u0282\n\2\3\2"+ + "\5\2\u0285\n\2\3\2\3\2\3\3\3\3\5\3\u028b\n\3\3\3\5\3\u028e\n\3\3\3\7\3"+ + "\u0291\n\3\f\3\16\3\u0294\13\3\3\3\3\3\5\3\u0298\n\3\3\3\5\3\u029b\n\3"+ + "\3\3\5\3\u029e\n\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\u02a7\n\4\3\5\3\5\3"+ + "\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6"+ + "\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5"+ + "\6\u02ce\n\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\5\7\u02da\n\7\3\b"+ + "\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\5\b\u02e5\n\b\3\t\3\t\3\t\3\t\3\t\3\t"+ + "\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u02f6\n\t\3\n\3\n\3\n\5\n\u02fb"+ + "\n\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\5\13\u0307\n\13"+ + "\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3"+ + "\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u0322\n\f\3\r\3\r\3\r\3\r\3\r\3\r\3"+ + "\r\5\r\u032b\n\r\3\16\3\16\3\16\5\16\u0330\n\16\3\16\3\16\7\16\u0334\n"+ + "\16\f\16\16\16\u0337\13\16\3\17\3\17\5\17\u033b\n\17\3\17\3\17\5\17\u033f"+ + "\n\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u0348\n\17\3\17\5\17\u034b"+ + "\n\17\3\17\5\17\u034e\n\17\3\17\3\17\5\17\u0352\n\17\3\17\3\17\3\17\3"+ + "\20\3\20\5\20\u0359\n\20\3\20\5\20\u035c\n\20\3\20\3\20\3\20\5\20\u0361"+ + "\n\20\3\20\3\20\3\20\3\20\7\20\u0367\n\20\f\20\16\20\u036a\13\20\3\20"+ + "\3\20\5\20\u036e\n\20\3\20\3\20\3\20\5\20\u0373\n\20\3\20\7\20\u0376\n"+ + "\20\f\20\16\20\u0379\13\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+ + "\5\21\u0384\n\21\3\21\5\21\u0387\n\21\3\21\3\21\5\21\u038b\n\21\3\21\5"+ + "\21\u038e\n\21\3\21\3\21\5\21\u0392\n\21\3\21\5\21\u0395\n\21\3\21\3\21"+ + "\5\21\u0399\n\21\3\21\5\21\u039c\n\21\3\21\5\21\u039f\n\21\3\21\3\21\5"+ + "\21\u03a3\n\21\3\21\5\21\u03a6\n\21\3\21\3\21\5\21\u03aa\n\21\3\21\3\21"+ + "\3\22\3\22\5\22\u03b0\n\22\3\22\3\22\3\22\3\22\5\22\u03b6\n\22\3\22\3"+ + "\22\7\22\u03ba\n\22\f\22\16\22\u03bd\13\22\3\22\3\22\7\22\u03c1\n\22\f"+ + "\22\16\22\u03c4\13\22\3\22\3\22\3\23\3\23\5\23\u03ca\n\23\3\23\3\23\3"+ + "\23\3\23\5\23\u03d0\n\23\3\23\3\23\7\23\u03d4\n\23\f\23\16\23\u03d7\13"+ + "\23\3\23\3\23\3\23\3\23\7\23\u03dd\n\23\f\23\16\23\u03e0\13\23\3\23\3"+ + "\23\5\23\u03e4\n\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24"+ + "\3\24\3\24\7\24\u03f2\n\24\f\24\16\24\u03f5\13\24\3\24\3\24\3\25\3\25"+ + "\5\25\u03fb\n\25\3\25\3\25\5\25\u03ff\n\25\3\25\3\25\3\25\3\25\3\25\3"+ + "\25\3\25\3\25\5\25\u0409\n\25\3\25\3\25\5\25\u040d\n\25\3\25\3\25\5\25"+ + "\u0411\n\25\3\25\3\25\5\25\u0415\n\25\3\25\3\25\5\25\u0419\n\25\3\25\7"+ + "\25\u041c\n\25\f\25\16\25\u041f\13\25\5\25\u0421\n\25\3\25\5\25\u0424"+ + "\n\25\3\25\5\25\u0427\n\25\3\25\5\25\u042a\n\25\3\25\3\25\3\25\3\25\5"+ + "\25\u0430\n\25\3\25\3\25\5\25\u0434\n\25\3\25\3\25\3\25\3\25\5\25\u043a"+ + "\n\25\3\25\7\25\u043d\n\25\f\25\16\25\u0440\13\25\5\25\u0442\n\25\3\25"+ + "\5\25\u0445\n\25\5\25\u0447\n\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3"+ + "\26\3\26\5\26\u0452\n\26\3\26\3\26\5\26\u0456\n\26\3\26\5\26\u0459\n\26"+ + "\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\5\27\u0467"+ + "\n\27\3\27\5\27\u046a\n\27\3\27\3\27\5\27\u046e\n\27\3\27\5\27\u0471\n"+ + "\27\3\27\3\27\5\27\u0475\n\27\3\27\5\27\u0478\n\27\3\27\3\27\5\27\u047c"+ + "\n\27\3\27\5\27\u047f\n\27\3\27\3\27\5\27\u0483\n\27\3\27\5\27\u0486\n"+ + "\27\3\27\5\27\u0489\n\27\3\27\3\27\5\27\u048d\n\27\3\27\5\27\u0490\n\27"+ + "\3\27\3\27\5\27\u0494\n\27\3\27\3\27\3\30\3\30\5\30\u049a\n\30\3\30\3"+ + "\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\5\30\u04a7\n\30\3\30"+ + "\3\30\3\31\3\31\3\31\5\31\u04ae\n\31\3\31\3\31\3\31\5\31\u04b3\n\31\3"+ + "\31\5\31\u04b6\n\31\3\31\3\31\3\31\5\31\u04bb\n\31\3\31\3\31\3\31\3\31"+ + "\3\31\3\31\5\31\u04c3\n\31\3\31\3\31\3\31\3\31\5\31\u04c9\n\31\3\31\3"+ + "\31\5\31\u04cd\n\31\3\32\5\32\u04d0\n\32\3\32\3\32\3\32\5\32\u04d5\n\32"+ + "\3\32\5\32\u04d8\n\32\3\32\3\32\5\32\u04dc\n\32\3\32\5\32\u04df\n\32\3"+ + "\32\3\32\5\32\u04e3\n\32\3\32\5\32\u04e6\n\32\3\33\3\33\3\33\3\33\3\33"+ + "\3\33\5\33\u04ee\n\33\5\33\u04f0\n\33\3\34\3\34\3\34\7\34\u04f5\n\34\f"+ + "\34\16\34\u04f8\13\34\3\34\3\34\3\34\5\34\u04fd\n\34\3\34\3\34\3\34\3"+ + "\34\7\34\u0503\n\34\f\34\16\34\u0506\13\34\5\34\u0508\n\34\3\34\3\34\3"+ + "\34\7\34\u050d\n\34\f\34\16\34\u0510\13\34\5\34\u0512\n\34\5\34\u0514"+ + "\n\34\3\35\3\35\3\35\3\35\5\35\u051a\n\35\3\36\3\36\3\36\3\36\5\36\u0520"+ + "\n\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37"+ + "\3\37\3\37\5\37\u0531\n\37\3 \3 \3 \3 \3 \5 \u0538\n \3!\3!\3!\3\"\3\""+ + "\5\"\u053f\n\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\5\"\u054a\n\"\3#\5"+ + "#\u054d\n#\3#\3#\3#\3$\3$\3$\3%\3%\3%\3%\3%\5%\u055a\n%\3%\3%\3%\3%\3"+ + "%\3%\3%\3%\3%\3%\3%\5%\u0567\n%\3%\3%\3%\5%\u056c\n%\3&\3&\3&\3&\3&\3"+ + "&\3&\3&\3&\3&\3&\3&\3&\3&\5&\u057c\n&\3\'\3\'\3\'\3\'\7\'\u0582\n\'\f"+ + "\'\16\'\u0585\13\'\3\'\3\'\3(\3(\3(\3(\3(\5(\u058e\n(\3)\3)\7)\u0592\n"+ + ")\f)\16)\u0595\13)\3*\3*\3*\3*\3*\3*\3*\5*\u059e\n*\3*\5*\u05a1\n*\3*"+ + "\3*\3*\5*\u05a6\n*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\5*\u05b3\n*\3*\3*"+ + "\3*\3*\3*\5*\u05ba\n*\3*\3*\3*\5*\u05bf\n*\3+\3+\5+\u05c3\n+\5+\u05c5"+ + "\n+\3+\3+\3+\5+\u05ca\n+\3+\5+\u05cd\n+\3+\3+\7+\u05d1\n+\f+\16+\u05d4"+ + "\13+\3+\3+\5+\u05d8\n+\5+\u05da\n+\3+\3+\5+\u05de\n+\3+\5+\u05e1\n+\3"+ + "+\5+\u05e4\n+\3+\3+\7+\u05e8\n+\f+\16+\u05eb\13+\3+\3+\5+\u05ef\n+\5+"+ + "\u05f1\n+\3+\3+\3+\5+\u05f6\n+\3+\3+\3+\3+\3+\5+\u05fd\n+\5+\u05ff\n+"+ + "\3+\3+\3+\3+\3+\5+\u0606\n+\3,\3,\3,\5,\u060b\n,\3,\3,\5,\u060f\n,\3,"+ + "\5,\u0612\n,\3-\3-\3-\3-\3-\3-\5-\u061a\n-\3-\3-\3-\3-\3-\3-\5-\u0622"+ + "\n-\5-\u0624\n-\3.\3.\3.\3.\3.\3.\5.\u062c\n.\3/\3/\5/\u0630\n/\3/\5/"+ + "\u0633\n/\3/\3/\7/\u0637\n/\f/\16/\u063a\13/\3/\3/\5/\u063e\n/\3/\5/\u0641"+ + "\n/\3/\3/\7/\u0645\n/\f/\16/\u0648\13/\5/\u064a\n/\3\60\3\60\5\60\u064e"+ + "\n\60\3\60\3\60\3\60\5\60\u0653\n\60\3\60\3\60\3\60\5\60\u0658\n\60\3"+ + "\60\3\60\5\60\u065c\n\60\3\60\3\60\3\60\5\60\u0661\n\60\3\60\5\60\u0664"+ + "\n\60\3\60\3\60\5\60\u0668\n\60\3\60\3\60\5\60\u066c\n\60\3\60\3\60\5"+ + "\60\u0670\n\60\3\60\3\60\5\60\u0674\n\60\3\60\3\60\3\60\5\60\u0679\n\60"+ + "\3\60\3\60\3\60\5\60\u067e\n\60\3\60\3\60\3\60\5\60\u0683\n\60\3\60\3"+ + "\60\3\60\3\60\5\60\u0689\n\60\3\60\3\60\3\60\5\60\u068e\n\60\3\60\3\60"+ + "\3\60\5\60\u0693\n\60\3\60\3\60\3\60\3\60\5\60\u0699\n\60\3\60\3\60\3"+ + "\60\5\60\u069e\n\60\3\60\3\60\3\60\5\60\u06a3\n\60\3\60\3\60\3\60\5\60"+ + "\u06a8\n\60\3\60\3\60\3\60\5\60\u06ad\n\60\3\60\3\60\3\60\5\60\u06b2\n"+ + "\60\3\60\3\60\3\60\5\60\u06b7\n\60\3\60\3\60\3\60\5\60\u06bc\n\60\3\60"+ + "\3\60\3\60\5\60\u06c1\n\60\3\60\3\60\3\60\5\60\u06c6\n\60\3\60\3\60\3"+ + "\60\5\60\u06cb\n\60\3\60\3\60\3\60\3\60\5\60\u06d1\n\60\3\60\3\60\3\60"+ + "\5\60\u06d6\n\60\3\60\3\60\3\60\3\60\5\60\u06dc\n\60\3\61\3\61\3\61\3"+ + "\62\3\62\3\62\3\62\3\62\5\62\u06e6\n\62\3\62\3\62\3\62\3\62\3\62\5\62"+ + "\u06ed\n\62\5\62\u06ef\n\62\3\62\3\62\3\62\3\62\7\62\u06f5\n\62\f\62\16"+ + "\62\u06f8\13\62\3\62\3\62\5\62\u06fc\n\62\3\63\5\63\u06ff\n\63\3\63\3"+ + "\63\3\63\3\63\3\63\3\63\5\63\u0707\n\63\3\63\3\63\3\63\3\63\5\63\u070d"+ + "\n\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63"+ + "\3\63\5\63\u071d\n\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63"+ + "\5\63\u0729\n\63\5\63\u072b\n\63\3\64\5\64\u072e\n\64\3\64\3\64\3\64\3"+ + "\64\3\64\3\64\5\64\u0736\n\64\3\64\3\64\3\64\3\64\5\64\u073c\n\64\3\64"+ + "\3\64\3\64\3\64\5\64\u0742\n\64\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65"+ + "\3\65\7\65\u074d\n\65\f\65\16\65\u0750\13\65\3\65\3\65\7\65\u0754\n\65"+ + "\f\65\16\65\u0757\13\65\3\65\3\65\3\65\7\65\u075c\n\65\f\65\16\65\u075f"+ + "\13\65\5\65\u0761\n\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\7\65\u076a\n"+ + "\65\f\65\16\65\u076d\13\65\3\65\3\65\3\65\7\65\u0772\n\65\f\65\16\65\u0775"+ + "\13\65\5\65\u0777\n\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\7\65\u0781"+ + "\n\65\f\65\16\65\u0784\13\65\3\65\3\65\7\65\u0788\n\65\f\65\16\65\u078b"+ + "\13\65\3\65\3\65\3\65\7\65\u0790\n\65\f\65\16\65\u0793\13\65\5\65\u0795"+ + "\n\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\7\65\u079f\n\65\f\65\16"+ + "\65\u07a2\13\65\3\65\3\65\7\65\u07a6\n\65\f\65\16\65\u07a9\13\65\3\65"+ + "\3\65\3\65\7\65\u07ae\n\65\f\65\16\65\u07b1\13\65\5\65\u07b3\n\65\3\65"+ + "\3\65\3\65\7\65\u07b8\n\65\f\65\16\65\u07bb\13\65\3\65\3\65\3\65\7\65"+ + "\u07c0\n\65\f\65\16\65\u07c3\13\65\5\65\u07c5\n\65\5\65\u07c7\n\65\3\66"+ + "\3\66\3\66\5\66\u07cc\n\66\3\67\3\67\3\67\3\67\6\67\u07d2\n\67\r\67\16"+ + "\67\u07d3\3\67\3\67\38\38\38\78\u07db\n8\f8\168\u07de\138\39\59\u07e1"+ + "\n9\39\39\59\u07e5\n9\39\39\39\59\u07ea\n9\39\39\39\39\59\u07f0\n9\39"+ + "\39\39\39\59\u07f6\n9\39\39\39\59\u07fb\n9\39\39\39\59\u0800\n9\39\39"+ + "\39\59\u0805\n9\39\39\39\59\u080a\n9\39\59\u080d\n9\3:\3:\3:\5:\u0812"+ + "\n:\3:\6:\u0815\n:\r:\16:\u0816\3:\3:\3:\3:\3:\3:\3:\3:\5:\u0821\n:\3"+ + ";\3;\5;\u0825\n;\3;\3;\3;\3;\3;\5;\u082c\n;\3;\3;\3;\5;\u0831\n;\3;\5"+ + ";\u0834\n;\3;\3;\3;\5;\u0839\n;\3;\5;\u083c\n;\3;\3;\5;\u0840\n;\3;\3"+ + ";\5;\u0844\n;\3<\3<\3<\3<\7<\u084a\n<\f<\16<\u084d\13<\3=\3=\3=\3=\3="+ + "\3=\3=\3>\3>\3>\3>\3>\3>\3>\3>\3>\5>\u085f\n>\3>\5>\u0862\n>\3>\5>\u0865"+ + "\n>\3>\3>\5>\u0869\n>\3>\3>\3?\3?\3?\3?\7?\u0871\n?\f?\16?\u0874\13?\3"+ + "@\3@\3@\3@\3@\3@\3@\3@\7@\u087e\n@\f@\16@\u0881\13@\3@\3@\3A\3A\5A\u0887"+ + "\nA\3A\5A\u088a\nA\3A\3A\3A\3A\3A\7A\u0891\nA\fA\16A\u0894\13A\5A\u0896"+ + "\nA\3A\5A\u0899\nA\3B\3B\3B\3B\3B\3B\3B\3B\3B\5B\u08a4\nB\3B\5B\u08a7"+ + "\nB\3B\3B\5B\u08ab\nB\3B\3B\3C\3C\3C\3C\5C\u08b3\nC\3C\5C\u08b6\nC\3C"+ + "\3C\3C\5C\u08bb\nC\3C\3C\3C\3C\3C\3C\5C\u08c3\nC\3C\3C\3C\3C\5C\u08c9"+ + "\nC\3C\3C\5C\u08cd\nC\3D\3D\5D\u08d1\nD\3D\7D\u08d4\nD\fD\16D\u08d7\13"+ + "D\3D\3D\5D\u08db\nD\3D\3D\3D\3D\3D\5D\u08e2\nD\3D\3D\5D\u08e6\nD\3D\3"+ + "D\3D\3D\3D\3D\3D\7D\u08ef\nD\fD\16D\u08f2\13D\3D\3D\3D\3D\3D\5D\u08f9"+ + "\nD\3D\5D\u08fc\nD\3D\3D\7D\u0900\nD\fD\16D\u0903\13D\3D\3D\3D\5D\u0908"+ + "\nD\5D\u090a\nD\3D\3D\3D\5D\u090f\nD\3D\5D\u0912\nD\3D\3D\7D\u0916\nD"+ + "\fD\16D\u0919\13D\3D\3D\3D\5D\u091e\nD\5D\u0920\nD\3D\3D\5D\u0924\nD\3"+ + "D\5D\u0927\nD\3D\5D\u092a\nD\3D\3D\7D\u092e\nD\fD\16D\u0931\13D\3D\3D"+ + "\3D\5D\u0936\nD\3D\5D\u0939\nD\3D\3D\7D\u093d\nD\fD\16D\u0940\13D\3D\3"+ + "D\3D\5D\u0945\nD\5D\u0947\nD\3D\3D\3D\5D\u094c\nD\3D\3D\3D\3D\3D\3D\5"+ + "D\u0954\nD\5D\u0956\nD\3D\3D\3D\3D\3D\3D\3D\5D\u095f\nD\3D\3D\3D\5D\u0964"+ + "\nD\3D\3D\3D\3D\3D\3D\5D\u096c\nD\3D\3D\5D\u0970\nD\3D\3D\3D\3D\3D\3D"+ + "\5D\u0978\nD\3D\3D\3D\3D\3D\3D\3D\3D\5D\u0982\nD\3D\3D\3D\5D\u0987\nD"+ + "\3D\3D\3D\3D\3D\5D\u098e\nD\3D\3D\5D\u0992\nD\3D\3D\5D\u0996\nD\3D\3D"+ + "\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\5D\u09ae"+ + "\nD\3D\3D\5D\u09b2\nD\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\5D\u09be\nD\3D\5D"+ + "\u09c1\nD\3D\3D\3D\3D\3D\3D\3D\5D\u09ca\nD\3D\3D\3D\3D\3D\3D\3D\3D\3D"+ + "\3D\3D\3D\3D\7D\u09d9\nD\fD\16D\u09dc\13D\3D\3D\3D\3D\3D\3D\3D\3D\3D\5"+ + "D\u09e7\nD\3D\3D\3D\3D\3D\5D\u09ee\nD\3D\3D\3D\3D\3D\5D\u09f5\nD\3D\3"+ + "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\7D\u0a02\nD\fD\16D\u0a05\13D\3D\3D\3D\3D"+ + "\3D\3D\3D\3D\3D\3D\5D\u0a11\nD\3D\3D\3D\3D\5D\u0a17\nD\3D\3D\3D\3D\5D"+ + "\u0a1d\nD\3D\3D\3D\3D\5D\u0a23\nD\3D\3D\3D\3D\5D\u0a29\nD\3D\3D\3D\3D"+ + "\5D\u0a2f\nD\3D\3D\3D\3D\5D\u0a35\nD\3E\3E\3E\5E\u0a3a\nE\3E\3E\3F\3F"+ + "\3F\5F\u0a41\nF\3F\3F\3G\3G\3G\5G\u0a48\nG\3G\3G\3G\3G\3G\5G\u0a4f\nG"+ + "\3G\3G\3G\5G\u0a54\nG\3G\7G\u0a57\nG\fG\16G\u0a5a\13G\3H\3H\3H\3H\3H\3"+ + "H\3H\3H\3I\3I\3I\5I\u0a67\nI\3I\3I\3J\3J\3J\5J\u0a6e\nJ\3J\3J\3K\3K\3"+ + "K\5K\u0a75\nK\3K\3K\3L\3L\5L\u0a7b\nL\3L\3L\5L\u0a7f\nL\3L\3L\5L\u0a83"+ + "\nL\3M\3M\3M\3M\3M\5M\u0a8a\nM\3M\5M\u0a8d\nM\3N\3N\3N\5N\u0a92\nN\3N"+ + "\3N\3O\3O\3O\5O\u0a99\nO\3O\3O\3O\7O\u0a9e\nO\fO\16O\u0aa1\13O\3O\5O\u0aa4"+ + "\nO\3P\3P\3P\3P\3P\7P\u0aab\nP\fP\16P\u0aae\13P\3Q\3Q\3Q\3Q\3R\3R\5R\u0ab6"+ + "\nR\3R\3R\3S\3S\3S\3S\3S\5S\u0abf\nS\3S\5S\u0ac2\nS\3T\3T\5T\u0ac6\nT"+ + "\3U\3U\3U\3V\3V\3V\3V\5V\u0acf\nV\3W\3W\5W\u0ad3\nW\3W\5W\u0ad6\nW\3W"+ + "\5W\u0ad9\nW\3W\3W\3W\3W\5W\u0adf\nW\3W\5W\u0ae2\nW\3W\3W\3W\3W\5W\u0ae8"+ + "\nW\3W\3W\3W\3W\3W\7W\u0aef\nW\fW\16W\u0af2\13W\5W\u0af4\nW\3W\3W\3W\3"+ + "W\3W\3W\3W\7W\u0afd\nW\fW\16W\u0b00\13W\5W\u0b02\nW\3X\3X\3X\5X\u0b07"+ + "\nX\3X\5X\u0b0a\nX\3X\3X\3X\5X\u0b0f\nX\3X\3X\3X\3X\3X\3X\3X\3X\5X\u0b19"+ + "\nX\3X\3X\3X\5X\u0b1e\nX\3X\3X\6X\u0b22\nX\rX\16X\u0b23\5X\u0b26\nX\3"+ + "X\3X\6X\u0b2a\nX\rX\16X\u0b2b\5X\u0b2e\nX\3X\3X\3X\3X\5X\u0b34\nX\3X\3"+ + "X\3X\3X\7X\u0b3a\nX\fX\16X\u0b3d\13X\3X\3X\5X\u0b41\nX\3X\3X\3X\3X\7X"+ + "\u0b47\nX\fX\16X\u0b4a\13X\5X\u0b4c\nX\3Y\3Y\3Y\5Y\u0b51\nY\3Y\5Y\u0b54"+ + "\nY\3Y\3Y\3Y\5Y\u0b59\nY\3Y\3Y\3Y\3Y\3Y\3Y\5Y\u0b61\nY\3Y\3Y\3Y\3Y\3Y"+ + "\3Y\5Y\u0b69\nY\3Y\3Y\3Y\3Y\5Y\u0b6f\nY\3Y\3Y\3Y\3Y\7Y\u0b75\nY\fY\16"+ + "Y\u0b78\13Y\3Y\3Y\5Y\u0b7c\nY\3Y\3Y\3Y\3Y\7Y\u0b82\nY\fY\16Y\u0b85\13"+ + "Y\5Y\u0b87\nY\3Z\3Z\5Z\u0b8b\nZ\3Z\5Z\u0b8e\nZ\3Z\3Z\3Z\3Z\3Z\3Z\5Z\u0b96"+ + "\nZ\3Z\3Z\3Z\3Z\5Z\u0b9c\nZ\3Z\3Z\3Z\3Z\3Z\7Z\u0ba3\nZ\fZ\16Z\u0ba6\13"+ + "Z\5Z\u0ba8\nZ\3[\3[\5[\u0bac\n[\3[\3[\5[\u0bb0\n[\3[\3[\6[\u0bb4\n[\r"+ + "[\16[\u0bb5\3[\3[\5[\u0bba\n[\3[\3[\5[\u0bbe\n[\5[\u0bc0\n[\3[\5[\u0bc3"+ + "\n[\3[\5[\u0bc6\n[\3[\5[\u0bc9\n[\3[\3[\6[\u0bcd\n[\r[\16[\u0bce\3[\3"+ + "[\5[\u0bd3\n[\3[\5[\u0bd6\n[\3[\5[\u0bd9\n[\3[\5[\u0bdc\n[\3[\5[\u0bdf"+ + "\n[\5[\u0be1\n[\3\\\3\\\5\\\u0be5\n\\\3]\3]\3]\3]\5]\u0beb\n]\3]\3]\3"+ + "]\3]\5]\u0bf1\n]\3]\7]\u0bf4\n]\f]\16]\u0bf7\13]\5]\u0bf9\n]\3^\3^\3^"+ + "\3^\5^\u0bff\n^\3_\3_\5_\u0c03\n_\3`\3`\3`\3`\3`\3`\5`\u0c0b\n`\3a\3a"+ + "\5a\u0c0f\na\3a\5a\u0c12\na\3a\5a\u0c15\na\3a\3a\3a\3a\3a\3a\3a\5a\u0c1e"+ + "\na\3a\3a\5a\u0c22\na\3a\5a\u0c25\na\3a\3a\5a\u0c29\na\3b\3b\5b\u0c2d"+ + "\nb\3b\5b\u0c30\nb\3b\5b\u0c33\nb\3b\3b\3b\5b\u0c38\nb\3b\3b\3b\3b\5b"+ + "\u0c3e\nb\7b\u0c40\nb\fb\16b\u0c43\13b\3b\3b\3b\3b\3b\3b\3b\5b\u0c4c\n"+ + "b\3b\3b\3b\3b\5b\u0c52\nb\7b\u0c54\nb\fb\16b\u0c57\13b\3b\3b\3b\5b\u0c5c"+ + "\nb\3b\3b\5b\u0c60\nb\3c\3c\3c\3c\5c\u0c66\nc\3c\5c\u0c69\nc\3d\3d\3d"+ + "\3d\3d\3d\3d\3d\3d\3d\5d\u0c75\nd\3d\3d\5d\u0c79\nd\3d\3d\5d\u0c7d\nd"+ + "\3e\3e\3e\3e\3e\3e\5e\u0c85\ne\3e\3e\5e\u0c89\ne\3f\3f\3f\3f\3g\3g\5g"+ + "\u0c91\ng\3g\5g\u0c94\ng\3g\3g\5g\u0c98\ng\3g\5g\u0c9b\ng\3g\3g\3g\3g"+ + "\7g\u0ca1\ng\fg\16g\u0ca4\13g\3g\3g\5g\u0ca8\ng\3g\5g\u0cab\ng\3g\5g\u0cae"+ + "\ng\3h\3h\5h\u0cb2\nh\3h\5h\u0cb5\nh\3h\3h\3h\3h\3h\7h\u0cbc\nh\fh\16"+ + "h\u0cbf\13h\3h\3h\5h\u0cc3\nh\3i\3i\3i\3i\3i\7i\u0cca\ni\fi\16i\u0ccd"+ + "\13i\3j\3j\5j\u0cd1\nj\3k\3k\3k\7k\u0cd6\nk\fk\16k\u0cd9\13k\3l\3l\7l"+ + "\u0cdd\nl\fl\16l\u0ce0\13l\3l\3l\3l\7l\u0ce5\nl\fl\16l\u0ce8\13l\3l\3"+ + "l\5l\u0cec\nl\3m\3m\3m\3m\3m\3m\5m\u0cf4\nm\3m\5m\u0cf7\nm\3m\5m\u0cfa"+ + "\nm\3m\3m\3m\7m\u0cff\nm\fm\16m\u0d02\13m\5m\u0d04\nm\3m\3m\3m\3m\3m\5"+ + "m\u0d0b\nm\3m\5m\u0d0e\nm\3m\3m\3m\3m\3m\3m\5m\u0d16\nm\3n\3n\3n\3n\5"+ + "n\u0d1c\nn\3n\3n\3n\3n\3o\3o\3o\3o\3o\5o\u0d27\no\3p\5p\u0d2a\np\3p\3"+ + "p\3p\3p\3p\3p\3p\3p\3p\5p\u0d35\np\3p\3p\3p\3p\5p\u0d3b\np\3p\3p\5p\u0d3f"+ + "\np\3p\3p\3p\3p\3p\3p\3p\3p\3p\5p\u0d4a\np\3p\3p\3p\5p\u0d4f\np\5p\u0d51"+ + "\np\3p\3p\5p\u0d55\np\3q\3q\3q\3q\3q\3q\3q\3q\5q\u0d5f\nq\3r\3r\3r\3r"+ + "\3r\3r\3r\3r\5r\u0d69\nr\3s\3s\7s\u0d6d\ns\fs\16s\u0d70\13s\3s\3s\5s\u0d74"+ + "\ns\3s\5s\u0d77\ns\3s\5s\u0d7a\ns\3s\5s\u0d7d\ns\3s\3s\7s\u0d81\ns\fs"+ + "\16s\u0d84\13s\3s\3s\5s\u0d88\ns\3s\5s\u0d8b\ns\3s\5s\u0d8e\ns\3s\5s\u0d91"+ + "\ns\5s\u0d93\ns\3t\3t\7t\u0d97\nt\ft\16t\u0d9a\13t\3t\3t\5t\u0d9e\nt\3"+ + "t\5t\u0da1\nt\3t\5t\u0da4\nt\3u\3u\5u\u0da8\nu\3u\3u\3v\3v\5v\u0dae\n"+ + "v\3v\3v\5v\u0db2\nv\3w\3w\3w\3w\3w\3w\3w\3w\5w\u0dbc\nw\3x\3x\5x\u0dc0"+ + "\nx\3x\3x\7x\u0dc4\nx\fx\16x\u0dc7\13x\3y\3y\3y\3y\3y\3y\5y\u0dcf\ny\3"+ + "y\5y\u0dd2\ny\3y\3y\5y\u0dd6\ny\3y\5y\u0dd9\ny\3y\3y\5y\u0ddd\ny\3y\3"+ + "y\5y\u0de1\ny\3y\5y\u0de4\ny\5y\u0de6\ny\3z\3z\3z\3z\7z\u0dec\nz\fz\16"+ + "z\u0def\13z\3z\3z\3z\3z\3z\3z\3z\3z\3z\5z\u0dfa\nz\3z\3z\6z\u0dfe\nz\r"+ + "z\16z\u0dff\5z\u0e02\nz\3z\3z\6z\u0e06\nz\rz\16z\u0e07\5z\u0e0a\nz\5z"+ + "\u0e0c\nz\3{\3{\3{\3{\5{\u0e12\n{\3{\3{\3{\3{\3{\3{\5{\u0e1a\n{\3|\3|"+ + "\3|\3|\3|\3|\5|\u0e22\n|\3}\3}\3}\3}\5}\u0e28\n}\3}\3}\3}\3}\3}\7}\u0e2f"+ + "\n}\f}\16}\u0e32\13}\3}\3}\5}\u0e36\n}\5}\u0e38\n}\3}\3}\5}\u0e3c\n}\3"+ + "~\3~\5~\u0e40\n~\3\177\3\177\3\177\3\177\5\177\u0e46\n\177\3\177\3\177"+ + "\3\177\3\177\3\177\5\177\u0e4d\n\177\3\u0080\3\u0080\5\u0080\u0e51\n\u0080"+ + "\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\7\u0081\u0e58\n\u0081\f\u0081"+ + "\16\u0081\u0e5b\13\u0081\5\u0081\u0e5d\n\u0081\3\u0082\3\u0082\5\u0082"+ + "\u0e61\n\u0082\3\u0083\3\u0083\5\u0083\u0e65\n\u0083\3\u0083\3\u0083\5"+ + "\u0083\u0e69\n\u0083\3\u0083\5\u0083\u0e6c\n\u0083\3\u0083\5\u0083\u0e6f"+ + "\n\u0083\3\u0083\5\u0083\u0e72\n\u0083\3\u0084\3\u0084\5\u0084\u0e76\n"+ + "\u0084\3\u0084\3\u0084\5\u0084\u0e7a\n\u0084\3\u0084\5\u0084\u0e7d\n\u0084"+ + "\3\u0084\5\u0084\u0e80\n\u0084\3\u0084\5\u0084\u0e83\n\u0084\3\u0085\3"+ + "\u0085\3\u0085\3\u0086\3\u0086\5\u0086\u0e8a\n\u0086\3\u0086\3\u0086\5"+ + "\u0086\u0e8e\n\u0086\3\u0086\3\u0086\3\u0087\3\u0087\3\u0087\3\u0087\3"+ + "\u0088\3\u0088\3\u0088\3\u0088\3\u0088\7\u0088\u0e9b\n\u0088\f\u0088\16"+ + "\u0088\u0e9e\13\u0088\3\u0089\3\u0089\3\u0089\3\u008a\3\u008a\3\u008a"+ + "\3\u008a\3\u008a\3\u008b\3\u008b\5\u008b\u0eaa\n\u008b\3\u008b\3\u008b"+ + "\3\u008b\3\u008b\7\u008b\u0eb0\n\u008b\f\u008b\16\u008b\u0eb3\13\u008b"+ + "\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\5\u008c\u0ebc"+ + "\n\u008c\3\u008d\3\u008d\5\u008d\u0ec0\n\u008d\3\u008d\5\u008d\u0ec3\n"+ + "\u008d\3\u008d\3\u008d\3\u008e\3\u008e\5\u008e\u0ec9\n\u008e\3\u008e\5"+ + "\u008e\u0ecc\n\u008e\3\u008e\5\u008e\u0ecf\n\u008e\3\u008f\3\u008f\3\u008f"+ + "\3\u008f\3\u008f\3\u008f\3\u008f\5\u008f\u0ed8\n\u008f\3\u0090\3\u0090"+ + "\3\u0090\3\u0090\3\u0090\3\u0090\3\u0090\5\u0090\u0ee1\n\u0090\3\u0091"+ + "\3\u0091\3\u0091\3\u0091\3\u0091\3\u0091\7\u0091\u0ee9\n\u0091\f\u0091"+ + "\16\u0091\u0eec\13\u0091\3\u0091\5\u0091\u0eef\n\u0091\3\u0092\3\u0092"+ + "\3\u0092\3\u0092\3\u0092\3\u0092\7\u0092\u0ef7\n\u0092\f\u0092\16\u0092"+ + "\u0efa\13\u0092\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093"+ + "\5\u0093\u0f03\n\u0093\3\u0094\3\u0094\3\u0094\3\u0095\3\u0095\3\u0095"+ + "\5\u0095\u0f0b\n\u0095\3\u0095\5\u0095\u0f0e\n\u0095\3\u0096\3\u0096\3"+ + "\u0096\3\u0096\3\u0096\7\u0096\u0f15\n\u0096\f\u0096\16\u0096\u0f18\13"+ + "\u0096\5\u0096\u0f1a\n\u0096\3\u0096\3\u0096\5\u0096\u0f1e\n\u0096\3\u0096"+ + "\7\u0096\u0f21\n\u0096\f\u0096\16\u0096\u0f24\13\u0096\3\u0096\5\u0096"+ + "\u0f27\n\u0096\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\7\u0097\u0f2e\n"+ + "\u0097\f\u0097\16\u0097\u0f31\13\u0097\5\u0097\u0f33\n\u0097\3\u0098\3"+ + "\u0098\3\u0098\3\u0099\3\u0099\3\u0099\3\u009a\3\u009a\3\u009a\3\u009a"+ + "\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a"+ + "\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\7\u009a"+ + "\u0f50\n\u009a\f\u009a\16\u009a\u0f53\13\u009a\5\u009a\u0f55\n\u009a\3"+ + "\u009a\5\u009a\u0f58\n\u009a\3\u009b\3\u009b\3\u009c\3\u009c\3\u009d\3"+ + "\u009d\3\u009e\3\u009e\3\u009e\3\u009e\3\u009f\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\7\u009f\u0f8e\n\u009f\f\u009f\16\u009f\u0f91\13\u009f"+ + "\3\u009f\3\u009f\5\u009f\u0f95\n\u009f\3\u00a0\3\u00a0\3\u00a0\3\u00a0"+ + "\3\u00a0\3\u00a0\3\u00a1\3\u00a1\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2"+ + "\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2"+ + "\3\u00a2\3\u00a2\3\u00a2\3\u00a2\5\u00a2\u0fb1\n\u00a2\3\u00a3\3\u00a3"+ + "\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3"+ + "\3\u00a3\5\u00a3\u0fbf\n\u00a3\3\u00a4\3\u00a4\3\u00a4\7\u00a4\u0fc4\n"+ + "\u00a4\f\u00a4\16\u00a4\u0fc7\13\u00a4\3\u00a4\5\u00a4\u0fca\n\u00a4\3"+ + "\u00a5\3\u00a5\3\u00a5\3\u00a5\5\u00a5\u0fd0\n\u00a5\3\u00a6\3\u00a6\3"+ + "\u00a6\3\u00a6\3\u00a6\3\u00a6\5\u00a6\u0fd8\n\u00a6\5\u00a6\u0fda\n\u00a6"+ + "\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a8\3\u00a8\3\u00a8\3\u00a8\3\u00a8"+ + "\5\u00a8\u0fe5\n\u00a8\3\u00a9\3\u00a9\3\u00a9\3\u00a9\3\u00aa\3\u00aa"+ + "\3\u00aa\3\u00aa\5\u00aa\u0fef\n\u00aa\3\u00ab\3\u00ab\3\u00ab\3\u00ab"+ + "\3\u00ab\5\u00ab\u0ff6\n\u00ab\3\u00ac\3\u00ac\3\u00ac\3\u00ac\5\u00ac"+ + "\u0ffc\n\u00ac\3\u00ad\3\u00ad\3\u00ad\3\u00ad\3\u00ae\3\u00ae\5\u00ae"+ + "\u1004\n\u00ae\3\u00af\3\u00af\3\u00af\5\u00af\u1009\n\u00af\3\u00af\3"+ + "\u00af\3\u00af\3\u00af\7\u00af\u100f\n\u00af\f\u00af\16\u00af\u1012\13"+ + "\u00af\3\u00af\3\u00af\3\u00af\7\u00af\u1017\n\u00af\f\u00af\16\u00af"+ + "\u101a\13\u00af\3\u00af\3\u00af\3\u00af\7\u00af\u101f\n\u00af\f\u00af"+ + "\16\u00af\u1022\13\u00af\3\u00af\3\u00af\3\u00af\7\u00af\u1027\n\u00af"+ + "\f\u00af\16\u00af\u102a\13\u00af\3\u00af\7\u00af\u102d\n\u00af\f\u00af"+ + "\16\u00af\u1030\13\u00af\5\u00af\u1032\n\u00af\3\u00af\3\u00af\5\u00af"+ + "\u1036\n\u00af\3\u00b0\3\u00b0\3\u00b0\5\u00b0\u103b\n\u00b0\3\u00b0\6"+ + "\u00b0\u103e\n\u00b0\r\u00b0\16\u00b0\u103f\3\u00b0\3\u00b0\6\u00b0\u1044"+ + "\n\u00b0\r\u00b0\16\u00b0\u1045\5\u00b0\u1048\n\u00b0\3\u00b0\3\u00b0"+ + "\3\u00b0\3\u00b1\3\u00b1\3\u00b1\3\u00b1\6\u00b1\u1051\n\u00b1\r\u00b1"+ + "\16\u00b1\u1052\3\u00b1\7\u00b1\u1056\n\u00b1\f\u00b1\16\u00b1\u1059\13"+ + "\u00b1\3\u00b1\3\u00b1\6\u00b1\u105d\n\u00b1\r\u00b1\16\u00b1\u105e\5"+ + "\u00b1\u1061\n\u00b1\3\u00b1\3\u00b1\3\u00b1\3\u00b2\3\u00b2\3\u00b2\3"+ + "\u00b3\3\u00b3\3\u00b3\3\u00b4\3\u00b4\3\u00b4\5\u00b4\u106f\n\u00b4\3"+ + "\u00b4\3\u00b4\6\u00b4\u1073\n\u00b4\r\u00b4\16\u00b4\u1074\3\u00b4\3"+ + "\u00b4\3\u00b4\5\u00b4\u107a\n\u00b4\3\u00b5\3\u00b5\3\u00b5\5\u00b5\u107f"+ + "\n\u00b5\3\u00b5\3\u00b5\6\u00b5\u1083\n\u00b5\r\u00b5\16\u00b5\u1084"+ + "\3\u00b5\3\u00b5\3\u00b5\3\u00b5\3\u00b5\5\u00b5\u108c\n\u00b5\3\u00b6"+ + "\3\u00b6\3\u00b6\3\u00b7\3\u00b7\3\u00b7\5\u00b7\u1094\n\u00b7\3\u00b7"+ + "\3\u00b7\3\u00b7\3\u00b7\6\u00b7\u109a\n\u00b7\r\u00b7\16\u00b7\u109b"+ + "\3\u00b7\3\u00b7\3\u00b7\5\u00b7\u10a1\n\u00b7\3\u00b8\3\u00b8\3\u00b8"+ + "\3\u00b8\5\u00b8\u10a7\n\u00b8\3\u00b8\5\u00b8\u10aa\n\u00b8\3\u00b8\3"+ + "\u00b8\3\u00b8\3\u00b8\3\u00b8\3\u00b8\5\u00b8\u10b2\n\u00b8\3\u00b9\3"+ + "\u00b9\3\u00b9\3\u00b9\3\u00b9\5\u00b9\u10b9\n\u00b9\3\u00ba\3\u00ba\3"+ + "\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba\5\u00ba\u10c2\n\u00ba\3\u00ba\5"+ + "\u00ba\u10c5\n\u00ba\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3"+ + "\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bc\7\u00bc\u10d4\n"+ + "\u00bc\f\u00bc\16\u00bc\u10d7\13\u00bc\3\u00bc\3\u00bc\3\u00bd\3\u00bd"+ + "\3\u00bd\5\u00bd\u10de\n\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd"+ + "\3\u00bd\5\u00bd\u10e6\n\u00bd\3\u00be\3\u00be\5\u00be\u10ea\n\u00be\3"+ + "\u00be\3\u00be\3\u00bf\3\u00bf\3\u00bf\5\u00bf\u10f1\n\u00bf\3\u00bf\3"+ + "\u00bf\6\u00bf\u10f5\n\u00bf\r\u00bf\16\u00bf\u10f6\3\u00c0\3\u00c0\3"+ + "\u00c0\3\u00c0\6\u00c0\u10fd\n\u00c0\r\u00c0\16\u00c0\u10fe\3\u00c1\3"+ + "\u00c1\3\u00c1\3\u00c1\3\u00c1\7\u00c1\u1106\n\u00c1\f\u00c1\16\u00c1"+ + "\u1109\13\u00c1\3\u00c1\3\u00c1\3\u00c1\5\u00c1\u110e\n\u00c1\3\u00c1"+ + "\3\u00c1\3\u00c1\7\u00c1\u1113\n\u00c1\f\u00c1\16\u00c1\u1116\13\u00c1"+ + "\3\u00c1\3\u00c1\3\u00c1\3\u00c1\5\u00c1\u111c\n\u00c1\3\u00c1\7\u00c1"+ + "\u111f\n\u00c1\f\u00c1\16\u00c1\u1122\13\u00c1\5\u00c1\u1124\n\u00c1\5"+ + "\u00c1\u1126\n\u00c1\3\u00c1\3\u00c1\6\u00c1\u112a\n\u00c1\r\u00c1\16"+ + "\u00c1\u112b\5\u00c1\u112e\n\u00c1\3\u00c1\3\u00c1\7\u00c1\u1132\n\u00c1"+ + "\f\u00c1\16\u00c1\u1135\13\u00c1\5\u00c1\u1137\n\u00c1\3\u00c2\3\u00c2"+ + "\3\u00c2\3\u00c2\3\u00c2\7\u00c2\u113e\n\u00c2\f\u00c2\16\u00c2\u1141"+ + "\13\u00c2\3\u00c2\3\u00c2\3\u00c2\5\u00c2\u1146\n\u00c2\3\u00c2\3\u00c2"+ + "\3\u00c2\7\u00c2\u114b\n\u00c2\f\u00c2\16\u00c2\u114e\13\u00c2\3\u00c2"+ + "\3\u00c2\3\u00c2\3\u00c2\5\u00c2\u1154\n\u00c2\3\u00c2\7\u00c2\u1157\n"+ + "\u00c2\f\u00c2\16\u00c2\u115a\13\u00c2\5\u00c2\u115c\n\u00c2\5\u00c2\u115e"+ + "\n\u00c2\3\u00c2\3\u00c2\6\u00c2\u1162\n\u00c2\r\u00c2\16\u00c2\u1163"+ + "\5\u00c2\u1166\n\u00c2\3\u00c2\3\u00c2\7\u00c2\u116a\n\u00c2\f\u00c2\16"+ + "\u00c2\u116d\13\u00c2\5\u00c2\u116f\n\u00c2\3\u00c3\3\u00c3\3\u00c3\5"+ + "\u00c3\u1174\n\u00c3\3\u00c3\3\u00c3\3\u00c3\7\u00c3\u1179\n\u00c3\f\u00c3"+ + "\16\u00c3\u117c\13\u00c3\3\u00c4\3\u00c4\3\u00c4\3\u00c4\7\u00c4\u1182"+ + "\n\u00c4\f\u00c4\16\u00c4\u1185\13\u00c4\3\u00c4\3\u00c4\5\u00c4\u1189"+ + "\n\u00c4\3\u00c4\3\u00c4\3\u00c4\3\u00c4\3\u00c4\7\u00c4\u1190\n\u00c4"+ + "\f\u00c4\16\u00c4\u1193\13\u00c4\3\u00c4\3\u00c4\3\u00c4\3\u00c4\5\u00c4"+ + "\u1199\n\u00c4\3\u00c4\7\u00c4\u119c\n\u00c4\f\u00c4\16\u00c4\u119f\13"+ + "\u00c4\5\u00c4\u11a1\n\u00c4\5\u00c4\u11a3\n\u00c4\3\u00c4\3\u00c4\3\u00c4"+ + "\3\u00c4\7\u00c4\u11a9\n\u00c4\f\u00c4\16\u00c4\u11ac\13\u00c4\5\u00c4"+ + "\u11ae\n\u00c4\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5"+ + "\3\u00c5\7\u00c5\u11b8\n\u00c5\f\u00c5\16\u00c5\u11bb\13\u00c5\3\u00c5"+ + "\3\u00c5\3\u00c5\5\u00c5\u11c0\n\u00c5\3\u00c6\3\u00c6\3\u00c6\3\u00c6"+ + "\3\u00c6\7\u00c6\u11c7\n\u00c6\f\u00c6\16\u00c6\u11ca\13\u00c6\3\u00c7"+ + "\3\u00c7\3\u00c7\3\u00c7\7\u00c7\u11d0\n\u00c7\f\u00c7\16\u00c7\u11d3"+ + "\13\u00c7\3\u00c7\3\u00c7\5\u00c7\u11d7\n\u00c7\3\u00c7\3\u00c7\3\u00c7"+ + "\3\u00c7\3\u00c7\7\u00c7\u11de\n\u00c7\f\u00c7\16\u00c7\u11e1\13\u00c7"+ + "\3\u00c7\3\u00c7\3\u00c7\5\u00c7\u11e6\n\u00c7\3\u00c7\3\u00c7\3\u00c7"+ + "\3\u00c7\3\u00c7\3\u00c7\3\u00c7\7\u00c7\u11ef\n\u00c7\f\u00c7\16\u00c7"+ + "\u11f2\13\u00c7\5\u00c7\u11f4\n\u00c7\3\u00c8\3\u00c8\3\u00c8\3\u00c8"+ + "\3\u00c8\3\u00c8\3\u00c8\3\u00c8\7\u00c8\u11fe\n\u00c8\f\u00c8\16\u00c8"+ + "\u1201\13\u00c8\3\u00c9\3\u00c9\3\u00c9\3\u00c9\5\u00c9\u1207\n\u00c9"+ + "\3\u00c9\3\u00c9\3\u00c9\5\u00c9\u120c\n\u00c9\3\u00ca\3\u00ca\3\u00ca"+ + "\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb"+ + "\3\u00cb\5\u00cb\u121b\n\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb"+ + "\3\u00cb\3\u00cb\3\u00cb\3\u00cb\5\u00cb\u1226\n\u00cb\3\u00cb\5\u00cb"+ + "\u1229\n\u00cb\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cc"+ + "\3\u00cc\5\u00cc\u1233\n\u00cc\3\u00cd\3\u00cd\3\u00cd\3\u00cd\3\u00cd"+ + "\3\u00cd\3\u00cd\3\u00cd\5\u00cd\u123d\n\u00cd\3\u00ce\3\u00ce\3\u00ce"+ + "\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00ce\5\u00ce\u1247\n\u00ce\3\u00cf"+ + "\3\u00cf\3\u00cf\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\5\u00d0\u1251"+ + "\n\u00d0\3\u00d1\3\u00d1\5\u00d1\u1255\n\u00d1\3\u00d1\3\u00d1\5\u00d1"+ + "\u1259\n\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1"+ + "\5\u00d1\u1262\n\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1"+ + "\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1"+ + "\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1"+ + "\3\u00d1\3\u00d1\5\u00d1\u127e\n\u00d1\3\u00d2\3\u00d2\3\u00d2\3\u00d2"+ + "\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2"+ + "\3\u00d2\3\u00d2\3\u00d2\5\u00d2\u1290\n\u00d2\3\u00d3\3\u00d3\3\u00d3"+ + "\3\u00d3\3\u00d4\3\u00d4\5\u00d4\u1298\n\u00d4\3\u00d4\3\u00d4\3\u00d4"+ + "\3\u00d5\3\u00d5\3\u00d5\3\u00d5\7\u00d5\u12a1\n\u00d5\f\u00d5\16\u00d5"+ + "\u12a4\13\u00d5\3\u00d6\3\u00d6\3\u00d6\3\u00d6\5\u00d6\u12aa\n\u00d6"+ + "\3\u00d7\3\u00d7\5\u00d7\u12ae\n\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d8"+ + "\3\u00d8\5\u00d8\u12b5\n\u00d8\3\u00d8\3\u00d8\3\u00d8\5\u00d8\u12ba\n"+ + "\u00d8\3\u00d8\5\u00d8\u12bd\n\u00d8\3\u00d8\5\u00d8\u12c0\n\u00d8\3\u00d9"+ + "\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00d9\5\u00d9\u12c9\n\u00d9"+ + "\3\u00da\3\u00da\5\u00da\u12cd\n\u00da\3\u00da\3\u00da\3\u00da\3\u00da"+ + "\3\u00da\3\u00da\3\u00da\3\u00db\3\u00db\3\u00db\3\u00db\3\u00db\3\u00db"+ + "\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd"+ + "\3\u00dd\3\u00dd\3\u00dd\3\u00dd\7\u00dd\u12e9\n\u00dd\f\u00dd\16\u00dd"+ + "\u12ec\13\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\5\u00dd\u12f2\n\u00dd"+ + "\3\u00dd\3\u00dd\5\u00dd\u12f6\n\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd"+ + "\3\u00dd\5\u00dd\u12fd\n\u00dd\3\u00dd\5\u00dd\u1300\n\u00dd\3\u00dd\3"+ + "\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd"+ + "\3\u00dd\3\u00dd\7\u00dd\u130e\n\u00dd\f\u00dd\16\u00dd\u1311\13\u00dd"+ + "\5\u00dd\u1313\n\u00dd\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de"+ + "\3\u00de\3\u00de\5\u00de\u131d\n\u00de\3\u00de\3\u00de\5\u00de\u1321\n"+ + "\u00de\3\u00de\3\u00de\3\u00de\3\u00de\5\u00de\u1327\n\u00de\3\u00de\5"+ + "\u00de\u132a\n\u00de\3\u00de\3\u00de\3\u00de\5\u00de\u132f\n\u00de\3\u00de"+ + "\3\u00de\5\u00de\u1333\n\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de"+ + "\5\u00de\u133a\n\u00de\3\u00de\5\u00de\u133d\n\u00de\3\u00de\3\u00de\3"+ + "\u00de\3\u00de\5\u00de\u1343\n\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3"+ + "\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de"+ + "\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de"+ + "\5\u00de\u135b\n\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de"+ + "\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\5\u00de\u1368\n\u00de\3\u00de"+ + "\5\u00de\u136b\n\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de"+ + "\3\u00de\3\u00de\5\u00de\u1375\n\u00de\3\u00de\3\u00de\3\u00de\3\u00de"+ + "\3\u00de\3\u00de\5\u00de\u137d\n\u00de\3\u00de\3\u00de\5\u00de\u1381\n"+ + "\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\5\u00de\u1388\n\u00de\3"+ + "\u00de\5\u00de\u138b\n\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\7"+ + "\u00de\u1392\n\u00de\f\u00de\16\u00de\u1395\13\u00de\3\u00de\3\u00de\3"+ + "\u00de\5\u00de\u139a\n\u00de\3\u00de\3\u00de\3\u00de\3\u00de\5\u00de\u13a0"+ + "\n\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de"+ + "\5\u00de\u13aa\n\u00de\5\u00de\u13ac\n\u00de\3\u00df\3\u00df\3\u00df\3"+ + "\u00df\5\u00df\u13b2\n\u00df\3\u00df\5\u00df\u13b5\n\u00df\3\u00df\5\u00df"+ + "\u13b8\n\u00df\3\u00e0\3\u00e0\3\u00e0\3\u00e0\3\u00e0\3\u00e0\3\u00e0"+ + "\3\u00e0\3\u00e0\3\u00e0\5\u00e0\u13c4\n\u00e0\3\u00e0\5\u00e0\u13c7\n"+ + "\u00e0\3\u00e1\3\u00e1\3\u00e1\3\u00e1\5\u00e1\u13cd\n\u00e1\3\u00e2\5"+ + "\u00e2\u13d0\n\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2\5"+ + "\u00e2\u13d8\n\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2\5"+ + "\u00e2\u13e0\n\u00e2\3\u00e3\3\u00e3\3\u00e3\3\u00e3\5\u00e3\u13e6\n\u00e3"+ + "\3\u00e3\3\u00e3\5\u00e3\u13ea\n\u00e3\3\u00e4\3\u00e4\3\u00e4\3\u00e4"+ + "\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e4\5\u00e4"+ + "\u13f8\n\u00e4\3\u00e5\3\u00e5\3\u00e5\3\u00e6\3\u00e6\3\u00e6\3\u00e6"+ + "\3\u00e6\7\u00e6\u1402\n\u00e6\f\u00e6\16\u00e6\u1405\13\u00e6\3\u00e6"+ + "\3\u00e6\3\u00e6\3\u00e6\5\u00e6\u140b\n\u00e6\3\u00e6\5\u00e6\u140e\n"+ + "\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e7\3\u00e7\5\u00e7\u1415\n\u00e7\3"+ + "\u00e7\3\u00e7\3\u00e7\7\u00e7\u141a\n\u00e7\f\u00e7\16\u00e7\u141d\13"+ + "\u00e7\3\u00e8\3\u00e8\5\u00e8\u1421\n\u00e8\3\u00e8\6\u00e8\u1424\n\u00e8"+ + "\r\u00e8\16\u00e8\u1425\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9"+ + "\3\u00e9\7\u00e9\u142f\n\u00e9\f\u00e9\16\u00e9\u1432\13\u00e9\3\u00ea"+ + "\3\u00ea\3\u00ea\3\u00ea\3\u00eb\3\u00eb\3\u00ec\3\u00ec\5\u00ec\u143c"+ + "\n\u00ec\3\u00ec\3\u00ec\3\u00ec\3\u00ec\5\u00ec\u1442\n\u00ec\3\u00ed"+ + "\3\u00ed\3\u00ed\5\u00ed\u1447\n\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ed"+ + "\3\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ed\5\u00ed\u1454"+ + "\n\u00ed\5\u00ed\u1456\n\u00ed\3\u00ed\3\u00ed\3\u00ed\5\u00ed\u145b\n"+ + "\u00ed\3\u00ed\3\u00ed\3\u00ed\5\u00ed\u1460\n\u00ed\5\u00ed\u1462\n\u00ed"+ + "\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee\5\u00ee\u1469\n\u00ee\3\u00ef"+ + "\3\u00ef\3\u00ef\3\u00ef\3\u00ef\5\u00ef\u1470\n\u00ef\3\u00ef\5\u00ef"+ + "\u1473\n\u00ef\3\u00ef\5\u00ef\u1476\n\u00ef\3\u00ef\3\u00ef\3\u00ef\3"+ + "\u00ef\5\u00ef\u147c\n\u00ef\3\u00ef\3\u00ef\5\u00ef\u1480\n\u00ef\3\u00f0"+ + "\3\u00f0\3\u00f0\3\u00f0\5\u00f0\u1486\n\u00f0\3\u00f1\3\u00f1\3\u00f1"+ + "\3\u00f1\5\u00f1\u148c\n\u00f1\3\u00f1\3\u00f1\3\u00f2\3\u00f2\3\u00f2"+ + "\3\u00f3\3\u00f3\3\u00f3\3\u00f4\3\u00f4\3\u00f4\5\u00f4\u1499\n\u00f4"+ + "\3\u00f4\3\u00f4\3\u00f4\5\u00f4\u149e\n\u00f4\3\u00f4\3\u00f4\3\u00f4"+ + "\3\u00f4\7\u00f4\u14a4\n\u00f4\f\u00f4\16\u00f4\u14a7\13\u00f4\5\u00f4"+ + "\u14a9\n\u00f4\3\u00f5\3\u00f5\3\u00f5\5\u00f5\u14ae\n\u00f5\3\u00f5\3"+ + "\u00f5\3\u00f5\5\u00f5\u14b3\n\u00f5\3\u00f5\3\u00f5\3\u00f5\3\u00f5\7"+ + "\u00f5\u14b9\n\u00f5\f\u00f5\16\u00f5\u14bc\13\u00f5\5\u00f5\u14be\n\u00f5"+ + "\3\u00f6\3\u00f6\3\u00f6\3\u00f6\5\u00f6\u14c4\n\u00f6\3\u00f7\3\u00f7"+ + "\5\u00f7\u14c8\n\u00f7\3\u00f7\3\u00f7\3\u00f7\3\u00f7\3\u00f7\3\u00f7"+ + "\3\u00f7\3\u00f7\3\u00f7\7\u00f7\u14d3\n\u00f7\f\u00f7\16\u00f7\u14d6"+ + "\13\u00f7\3\u00f7\3\u00f7\3\u00f7\5\u00f7\u14db\n\u00f7\3\u00f7\3\u00f7"+ + "\3\u00f7\3\u00f7\3\u00f7\3\u00f7\3\u00f7\3\u00f7\7\u00f7\u14e5\n\u00f7"+ + "\f\u00f7\16\u00f7\u14e8\13\u00f7\5\u00f7\u14ea\n\u00f7\3\u00f8\3\u00f8"+ + "\3\u00f9\3\u00f9\3\u00f9\3\u00f9\3\u00f9\5\u00f9\u14f3\n\u00f9\3\u00f9"+ + "\3\u00f9\3\u00f9\5\u00f9\u14f8\n\u00f9\3\u00fa\3\u00fa\3\u00fa\3\u00fa"+ + "\5\u00fa\u14fe\n\u00fa\3\u00fb\3\u00fb\3\u00fc\3\u00fc\3\u00fc\5\u00fc"+ + "\u1505\n\u00fc\5\u00fc\u1507\n\u00fc\3\u00fd\3\u00fd\5\u00fd\u150b\n\u00fd"+ + "\3\u00fd\3\u00fd\3\u00fd\3\u00fd\5\u00fd\u1511\n\u00fd\3\u00fd\5\u00fd"+ + "\u1514\n\u00fd\3\u00fe\3\u00fe\3\u00ff\3\u00ff\3\u0100\3\u0100\3\u0100"+ + "\3\u0100\5\u0100\u151e\n\u0100\3\u0101\3\u0101\5\u0101\u1522\n\u0101\3"+ + "\u0102\3\u0102\3\u0103\3\u0103\3\u0103\3\u0103\3\u0103\3\u0103\3\u0103"+ + "\3\u0103\3\u0103\3\u0103\3\u0103\3\u0103\3\u0103\3\u0103\6\u0103\u1534"+ + "\n\u0103\r\u0103\16\u0103\u1535\3\u0104\3\u0104\3\u0104\3\u0104\3\u0104"+ + "\5\u0104\u153d\n\u0104\5\u0104\u153f\n\u0104\3\u0105\3\u0105\3\u0105\6"+ + "\u0105\u1544\n\u0105\r\u0105\16\u0105\u1545\5\u0105\u1548\n\u0105\3\u0106"+ + "\3\u0106\5\u0106\u154c\n\u0106\3\u0107\3\u0107\3\u0107\5\u0107\u1551\n"+ + "\u0107\3\u0108\3\u0108\3\u0108\3\u0108\3\u0108\3\u0108\3\u0108\3\u0108"+ + "\3\u0108\5\u0108\u155c\n\u0108\3\u0109\3\u0109\3\u0109\5\u0109\u1561\n"+ + "\u0109\3\u010a\3\u010a\3\u010b\3\u010b\5\u010b\u1567\n\u010b\3\u010c\5"+ + "\u010c\u156a\n\u010c\3\u010c\3\u010c\5\u010c\u156e\n\u010c\3\u010c\6\u010c"+ + "\u1571\n\u010c\r\u010c\16\u010c\u1572\3\u010c\5\u010c\u1576\n\u010c\3"+ + "\u010c\3\u010c\5\u010c\u157a\n\u010c\3\u010c\3\u010c\5\u010c\u157e\n\u010c"+ + "\5\u010c\u1580\n\u010c\3\u010d\3\u010d\3\u010e\5\u010e\u1585\n\u010e\3"+ + "\u010e\3\u010e\3\u010f\5\u010f\u158a\n\u010f\3\u010f\3\u010f\3\u0110\3"+ + "\u0110\3\u0110\3\u0110\3\u0110\3\u0110\3\u0110\3\u0110\3\u0110\5\u0110"+ + "\u1597\n\u0110\3\u0110\5\u0110\u159a\n\u0110\3\u0111\3\u0111\5\u0111\u159e"+ + "\n\u0111\3\u0111\5\u0111\u15a1\n\u0111\3\u0111\3\u0111\3\u0111\5\u0111"+ + "\u15a6\n\u0111\3\u0111\5\u0111\u15a9\n\u0111\3\u0111\3\u0111\5\u0111\u15ad"+ + "\n\u0111\3\u0111\3\u0111\3\u0111\5\u0111\u15b2\n\u0111\3\u0111\5\u0111"+ + "\u15b5\n\u0111\3\u0111\3\u0111\3\u0111\5\u0111\u15ba\n\u0111\3\u0111\5"+ + "\u0111\u15bd\n\u0111\3\u0111\3\u0111\3\u0111\3\u0111\5\u0111\u15c3\n\u0111"+ + "\3\u0111\5\u0111\u15c6\n\u0111\3\u0111\3\u0111\5\u0111\u15ca\n\u0111\3"+ + "\u0111\5\u0111\u15cd\n\u0111\3\u0111\5\u0111\u15d0\n\u0111\3\u0111\3\u0111"+ + "\5\u0111\u15d4\n\u0111\3\u0111\5\u0111\u15d7\n\u0111\3\u0111\5\u0111\u15da"+ + "\n\u0111\3\u0111\3\u0111\5\u0111\u15de\n\u0111\3\u0111\5\u0111\u15e1\n"+ + "\u0111\3\u0111\5\u0111\u15e4\n\u0111\3\u0111\5\u0111\u15e7\n\u0111\3\u0111"+ + "\3\u0111\5\u0111\u15eb\n\u0111\3\u0111\5\u0111\u15ee\n\u0111\3\u0111\5"+ + "\u0111\u15f1\n\u0111\3\u0111\3\u0111\3\u0111\5\u0111\u15f6\n\u0111\3\u0111"+ + "\3\u0111\3\u0111\5\u0111\u15fb\n\u0111\3\u0111\3\u0111\3\u0111\5\u0111"+ + "\u1600\n\u0111\3\u0111\5\u0111\u1603\n\u0111\3\u0111\5\u0111\u1606\n\u0111"+ + "\3\u0112\3\u0112\3\u0112\3\u0112\7\u0112\u160c\n\u0112\f\u0112\16\u0112"+ + "\u160f\13\u0112\3\u0112\3\u0112\3\u0113\3\u0113\5\u0113\u1615\n\u0113"+ + "\3\u0113\3\u0113\5\u0113\u1619\n\u0113\3\u0113\3\u0113\3\u0113\5\u0113"+ + "\u161e\n\u0113\3\u0113\5\u0113\u1621\n\u0113\3\u0113\3\u0113\3\u0113\5"+ + "\u0113\u1626\n\u0113\3\u0113\3\u0113\5\u0113\u162a\n\u0113\5\u0113\u162c"+ + "\n\u0113\3\u0114\3\u0114\3\u0114\3\u0114\3\u0115\3\u0115\3\u0115\3\u0115"+ + "\3\u0115\3\u0115\3\u0116\3\u0116\3\u0116\3\u0116\5\u0116\u163c\n\u0116"+ + "\3\u0116\3\u0116\3\u0117\3\u0117\3\u0117\7\u0117\u1643\n\u0117\f\u0117"+ + "\16\u0117\u1646\13\u0117\3\u0118\3\u0118\3\u0118\7\u0118\u164b\n\u0118"+ + "\f\u0118\16\u0118\u164e\13\u0118\3\u0119\3\u0119\3\u0119\3\u0119\7\u0119"+ + "\u1654\n\u0119\f\u0119\16\u0119\u1657\13\u0119\3\u0119\3\u0119\3\u011a"+ + "\3\u011a\3\u011a\7\u011a\u165e\n\u011a\f\u011a\16\u011a\u1661\13\u011a"+ + "\3\u011b\3\u011b\3\u011b\7\u011b\u1666\n\u011b\f\u011b\16\u011b\u1669"+ + "\13\u011b\3\u011c\3\u011c\3\u011c\7\u011c\u166e\n\u011c\f\u011c\16\u011c"+ + "\u1671\13\u011c\3\u011d\3\u011d\3\u011d\7\u011d\u1676\n\u011d\f\u011d"+ + "\16\u011d\u1679\13\u011d\3\u011e\3\u011e\3\u011e\7\u011e\u167e\n\u011e"+ + "\f\u011e\16\u011e\u1681\13\u011e\3\u011f\3\u011f\3\u011f\7\u011f\u1686"+ + "\n\u011f\f\u011f\16\u011f\u1689\13\u011f\3\u0120\3\u0120\5\u0120\u168d"+ + "\n\u0120\3\u0120\3\u0120\3\u0120\3\u0120\3\u0120\5\u0120\u1694\n\u0120"+ + "\5\u0120\u1696\n\u0120\3\u0121\3\u0121\3\u0121\5\u0121\u169b\n\u0121\3"+ + "\u0121\5\u0121\u169e\n\u0121\3\u0121\3\u0121\3\u0121\5\u0121\u16a3\n\u0121"+ + "\3\u0121\5\u0121\u16a6\n\u0121\3\u0122\3\u0122\5\u0122\u16aa\n\u0122\3"+ + "\u0123\3\u0123\3\u0123\3\u0124\3\u0124\3\u0124\3\u0124\3\u0125\3\u0125"+ + "\3\u0125\3\u0125\3\u0125\5\u0125\u16b8\n\u0125\3\u0125\3\u0125\3\u0125"+ + "\3\u0125\3\u0125\5\u0125\u16bf\n\u0125\3\u0125\3\u0125\3\u0125\5\u0125"+ + "\u16c4\n\u0125\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126"+ + "\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126"+ + "\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126"+ + "\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\6\u0126\u16e4\n\u0126\r\u0126"+ + "\16\u0126\u16e5\3\u0126\3\u0126\5\u0126\u16ea\n\u0126\3\u0126\3\u0126"+ + "\3\u0126\3\u0126\6\u0126\u16f0\n\u0126\r\u0126\16\u0126\u16f1\3\u0126"+ + "\3\u0126\5\u0126\u16f6\n\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126"+ + "\3\u0126\3\u0126\5\u0126\u16ff\n\u0126\3\u0126\3\u0126\3\u0126\3\u0126"+ + "\3\u0126\3\u0126\5\u0126\u1707\n\u0126\3\u0126\3\u0126\3\u0126\5\u0126"+ + "\u170c\n\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\5\u0126"+ + "\u1714\n\u0126\3\u0126\3\u0126\3\u0126\5\u0126\u1719\n\u0126\3\u0126\3"+ + "\u0126\3\u0126\5\u0126\u171e\n\u0126\5\u0126\u1720\n\u0126\3\u0126\3\u0126"+ + "\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\5\u0126\u1729\n\u0126\3\u0126"+ + "\3\u0126\3\u0126\5\u0126\u172e\n\u0126\3\u0126\3\u0126\3\u0126\3\u0126"+ + "\3\u0126\3\u0126\5\u0126\u1736\n\u0126\3\u0126\3\u0126\3\u0126\5\u0126"+ + "\u173b\n\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\5\u0126"+ + "\u1743\n\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\5\u0126"+ + "\u174b\n\u0126\3\u0126\5\u0126\u174e\n\u0126\3\u0126\3\u0126\3\u0126\3"+ + "\u0126\3\u0126\3\u0126\3\u0126\3\u0126\5\u0126\u1758\n\u0126\3\u0126\3"+ + "\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\3\u0126\5\u0126"+ + "\u1763\n\u0126\3\u0127\3\u0127\3\u0127\3\u0127\3\u0127\3\u0128\3\u0128"+ + "\3\u0128\3\u0128\7\u0128\u176e\n\u0128\f\u0128\16\u0128\u1771\13\u0128"+ + "\3\u0128\3\u0128\3\u0128\3\u0128\3\u0128\5\u0128\u1778\n\u0128\3\u0129"+ + "\3\u0129\5\u0129\u177c\n\u0129\3\u012a\3\u012a\3\u012a\5\u012a\u1781\n"+ + "\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\5\u012a"+ + "\u178a\n\u012a\3\u012a\5\u012a\u178d\n\u012a\3\u012a\3\u012a\3\u012a\3"+ + "\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\5\u012a\u1799\n"+ + "\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\5\u012a\u17a1\n"+ + "\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\3\u012a\7\u012a\u17a9\n"+ + "\u012a\f\u012a\16\u012a\u17ac\13\u012a\5\u012a\u17ae\n\u012a\3\u012a\3"+ + "\u012a\5\u012a\u17b2\n\u012a\3\u012a\3\u012a\5\u012a\u17b6\n\u012a\3\u012b"+ + "\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b"+ + "\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b\3\u012b"+ + "\3\u012b\3\u012b\3\u012b\3\u012b\5\u012b\u17cf\n\u012b\3\u012c\3\u012c"+ + "\3\u012c\3\u012c\3\u012c\3\u012d\3\u012d\3\u012d\3\u012d\5\u012d\u17da"+ + "\n\u012d\3\u012d\3\u012d\3\u012d\3\u012d\3\u012d\5\u012d\u17e1\n\u012d"+ + "\7\u012d\u17e3\n\u012d\f\u012d\16\u012d\u17e6\13\u012d\3\u012e\3\u012e"+ + "\3\u012e\3\u012e\5\u012e\u17ec\n\u012e\3\u012f\3\u012f\3\u012f\3\u012f"+ + "\3\u012f\3\u012f\5\u012f\u17f4\n\u012f\3\u012f\3\u012f\3\u012f\5\u012f"+ + "\u17f9\n\u012f\3\u012f\3\u012f\3\u012f\3\u012f\7\u012f\u17ff\n\u012f\f"+ + "\u012f\16\u012f\u1802\13\u012f\3\u0130\3\u0130\3\u0130\5\u0130\u1807\n"+ + "\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130"+ + "\5\u0130\u1811\n\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130"+ + "\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\5\u0130\u181e\n\u0130\3\u0130"+ + "\3\u0130\3\u0130\3\u0130\5\u0130\u1824\n\u0130\3\u0130\3\u0130\3\u0130"+ + "\3\u0130\5\u0130\u182a\n\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130"+ + "\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130\3\u0130"+ + "\5\u0130\u183a\n\u0130\3\u0130\3\u0130\3\u0130\3\u0130\5\u0130\u1840\n"+ + "\u0130\7\u0130\u1842\n\u0130\f\u0130\16\u0130\u1845\13\u0130\3\u0131\3"+ + "\u0131\3\u0131\3\u0131\5\u0131\u184b\n\u0131\3\u0131\3\u0131\3\u0131\3"+ + "\u0131\3\u0131\3\u0131\3\u0131\5\u0131\u1854\n\u0131\3\u0131\7\u0131\u1857"+ + "\n\u0131\f\u0131\16\u0131\u185a\13\u0131\3\u0132\3\u0132\3\u0132\5\u0132"+ + "\u185f\n\u0132\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132"+ + "\3\u0132\5\u0132\u1869\n\u0132\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132"+ + "\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132\5\u0132\u1876\n\u0132"+ + "\3\u0132\3\u0132\3\u0132\3\u0132\5\u0132\u187c\n\u0132\3\u0132\3\u0132"+ + "\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132\3\u0132"+ + "\3\u0132\3\u0132\3\u0132\5\u0132\u188c\n\u0132\3\u0132\3\u0132\3\u0132"+ + "\3\u0132\5\u0132\u1892\n\u0132\3\u0132\3\u0132\5\u0132\u1896\n\u0132\3"+ + "\u0132\3\u0132\7\u0132\u189a\n\u0132\f\u0132\16\u0132\u189d\13\u0132\3"+ + "\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133"+ + "\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\7\u0133\u18ad\n\u0133\f\u0133"+ + "\16\u0133\u18b0\13\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133"+ + "\3\u0133\6\u0133\u18b9\n\u0133\r\u0133\16\u0133\u18ba\3\u0133\3\u0133"+ + "\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133"+ + "\3\u0133\3\u0133\3\u0133\3\u0133\5\u0133\u18cc\n\u0133\3\u0133\3\u0133"+ + "\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133\3\u0133"+ + "\7\u0133\u18d9\n\u0133\f\u0133\16\u0133\u18dc\13\u0133\3\u0134\3\u0134"+ + "\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134"+ + "\3\u0134\3\u0134\3\u0134\7\u0134\u18ec\n\u0134\f\u0134\16\u0134\u18ef"+ + "\13\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\6\u0134"+ + "\u18f8\n\u0134\r\u0134\16\u0134\u18f9\3\u0134\3\u0134\3\u0134\3\u0134"+ + "\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134"+ + "\3\u0134\3\u0134\5\u0134\u190b\n\u0134\3\u0134\3\u0134\3\u0134\3\u0134"+ + "\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\3\u0134\7\u0134\u1918"+ + "\n\u0134\f\u0134\16\u0134\u191b\13\u0134\3\u0135\3\u0135\3\u0136\3\u0136"+ + "\3\u0136\3\u0136\3\u0136\3\u0136\3\u0136\3\u0136\3\u0136\3\u0136\3\u0136"+ + "\3\u0136\3\u0136\3\u0136\5\u0136\u192d\n\u0136\3\u0137\3\u0137\3\u0137"+ + "\3\u0137\3\u0137\3\u0137\3\u0137\5\u0137\u1936\n\u0137\3\u0138\3\u0138"+ + "\3\u0138\3\u0138\3\u0138\3\u0138\3\u0138\5\u0138\u193f\n\u0138\3\u0139"+ + "\3\u0139\3\u013a\3\u013a\3\u013b\3\u013b\3\u013c\3\u013c\3\u013d\3\u013d"+ + "\3\u013e\3\u013e\3\u013f\3\u013f\3\u0140\3\u0140\3\u0140\2\b\u025c\u025e"+ + "\u0260\u0262\u0264\u0266\u0141\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36"+ + " \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082"+ + "\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092\u0094\u0096\u0098\u009a"+ + "\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2"+ + "\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2\u00c4\u00c6\u00c8\u00ca"+ + "\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6\u00d8\u00da\u00dc\u00de\u00e0\u00e2"+ + "\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2\u00f4\u00f6\u00f8\u00fa"+ + "\u00fc\u00fe\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112"+ + "\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a"+ + "\u012c\u012e\u0130\u0132\u0134\u0136\u0138\u013a\u013c\u013e\u0140\u0142"+ + "\u0144\u0146\u0148\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a"+ + "\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172"+ + "\u0174\u0176\u0178\u017a\u017c\u017e\u0180\u0182\u0184\u0186\u0188\u018a"+ + "\u018c\u018e\u0190\u0192\u0194\u0196\u0198\u019a\u019c\u019e\u01a0\u01a2"+ + "\u01a4\u01a6\u01a8\u01aa\u01ac\u01ae\u01b0\u01b2\u01b4\u01b6\u01b8\u01ba"+ + "\u01bc\u01be\u01c0\u01c2\u01c4\u01c6\u01c8\u01ca\u01cc\u01ce\u01d0\u01d2"+ + "\u01d4\u01d6\u01d8\u01da\u01dc\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea"+ + "\u01ec\u01ee\u01f0\u01f2\u01f4\u01f6\u01f8\u01fa\u01fc\u01fe\u0200\u0202"+ + "\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a"+ + "\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232"+ + "\u0234\u0236\u0238\u023a\u023c\u023e\u0240\u0242\u0244\u0246\u0248\u024a"+ + "\u024c\u024e\u0250\u0252\u0254\u0256\u0258\u025a\u025c\u025e\u0260\u0262"+ + "\u0264\u0266\u0268\u026a\u026c\u026e\u0270\u0272\u0274\u0276\u0278\u027a"+ + "\u027c\u027e\2\177\4\2%%\u0089\u0089\4\2\u01c6\u01c6\u01cc\u01cc\5\2@"+ + "@\u0090\u0090\u00a5\u00a5\5\2((\u0142\u0142\u0181\u0181\6\2((\u0162\u0162"+ + "\u01c5\u01c5\u020c\u020c\4\2\u01bc\u01bc\u040f\u040f\4\2HH\u0081\u0081"+ + "\4\2\17\17\u0112\u0112\5\2**NN\u00a8\u00a8\4\2\u016f\u016f\u01de\u01de"+ + "\5\2\u01b4\u01b4\u0232\u0232\u0239\u0239\4\2\u0149\u0149\u0186\u0186\4"+ + "\2\u0124\u0124\u0194\u0194\4\2\u0122\u0122\u0178\u0178\5\2IIMMrr\5\2("+ + "(\u0153\u0153\u016d\u016d\5\2((\u014f\u014f\u02ae\u02ae\4\2\u0226\u0226"+ + "\u0247\u0247\4\2JJTT\5\2\u0171\u0171\u01d5\u01d5\u020e\u020e\4\2@@\u0090"+ + "\u0090\3\2\u0128\u0129\3\2\u0405\u0406\4\2\u040f\u040f\u0417\u0417\5\2"+ + "\u016c\u016c\u018f\u018f\u01c3\u01c3\4\2((\u0405\u0406\b\2((\u0135\u0135"+ + "\u0137\u0137\u0153\u0153\u016d\u016d\u01eb\u01eb\3\2\u0406\u0407\4\2\7"+ + "\7\61\61\4\2\r\r\u009f\u009f\4\2\u00b0\u00b0\u024b\u024b\4\2\24\24\u0084"+ + "\u0084\5\2))FFaa\4\2aa\u0139\u0139\4\2\u0130\u0130\u0169\u0169\4\2]]\u0204"+ + "\u0204\4\2))aa\4\2\b\b//\4\2\u00ac\u00ac\u0244\u0244\6\2\u016c\u016c\u018f"+ + "\u018f\u01c2\u01c2\u01e1\u01e1\4\2\u016c\u016c\u01c2\u01c2\4\2\16\16+"+ + "+\5\2==HH\u00aa\u00aa\4\2!!LL\4\2YY\u0087\u0087\4\2\b\b/\60\3\2\u021b"+ + "\u021c\4\2\u0174\u0174\u020a\u020a\4\2\u00d2\u00d2\u0197\u0197\7\2bb\u019c"+ + "\u019d\u019f\u019f\u01a3\u01ab\u01ed\u01ed\6\2\u0199\u019a\u019e\u019e"+ + "\u01a0\u01a1\u01ee\u01ee\5\2cc\u0198\u0198\u01a2\u01a2\4\2\u0188\u0188"+ + "\u021d\u021d\4\2\u0217\u0217\u0219\u0219\4\2\u011c\u011c\u021e\u021e\4"+ + "\2SS\u01fc\u01fc\4\2\61\61\u0147\u0147\5\2\36\3688\u00a3\u00a3\5\2ww\u009c"+ + "\u009c\u0172\u0172\4\2__\u00a6\u00a6\4\2\u012c\u012c\u020f\u020f\4\2&"+ + "&\u0246\u0246\4\2ii\u0194\u0194\4\2\u0165\u0165\u01e7\u01e7\6\2\u00be"+ + "\u00be\u00c0\u00c0\u00c6\u00c6\u0227\u0227\4\2\u03e6\u03e6\u03f7\u03f7"+ + "\4\2\u011d\u011d\u01ef\u01ef\4\2??II\b\2ww\u009c\u009c\u00a1\u00a1\u015e"+ + "\u015e\u0172\u0172\u0246\u0246\4\2\u01bb\u01bb\u0223\u0223\4\2\u015b\u015b"+ + "\u024a\u024a\4\2ww\u0172\u0172\5\2JJUU\u017f\u017f\5\2\u0174\u0174\u0194"+ + "\u0194\u020a\u020a\4\2\u0223\u0223\u0245\u0245\4\2\u013a\u013a\u01e6\u01e6"+ + "\b\2\u00d2\u00d2\u0158\u0158\u015a\u015a\u0173\u0173\u01ec\u01ec\u0210"+ + "\u0210\4\2+,99\5\2\u0165\u0165\u01d7\u01d7\u030a\u030a\4\2\u018c\u018c"+ + "\u0234\u0234\f\2\u012b\u012b\u0132\u0132\u013c\u013e\u0144\u0144\u01b5"+ + "\u01b5\u01bd\u01bd\u0228\u0228\u022f\u022f\u02da\u02da\u0380\u0380\4\2"+ + "\"\"\u0099\u0099\4\2kk\u0378\u0378\r\2\u012b\u012b\u0132\u0132\u013c\u013e"+ + "\u0144\u0144\u01b5\u01b5\u01bd\u01bd\u01fd\u01fd\u0228\u0228\u022f\u022f"+ + "\u02da\u02da\u0380\u0380\5\2\u040f\u040f\u0417\u0417\u0419\u0419\3\2\u041a"+ + "\u041b\5\2\u02a9\u02b4\u040f\u040f\u0417\u0418\4\2\u0405\u0407\u0410\u0410"+ + "\4\2::\u00a2\u00a2\4\2jj\u0413\u0413\6\2\30\30\u00ce\u00d0\u00d9\u00dc"+ + "\u01c0\u01c0\4\2\30\30\u00cf\u00cf\4\2\30\30\u00ce\u00ce\5\2\u00b4\u00b6"+ + "\u00b8\u00b8\u00be\u00bf\4\2\u00a7\u00a7\u020d\u020d\5\2\u00c3\u00c3\u00c6"+ + "\u00c8\u016d\u016d\7\2\u00c9\u00c9\u00d4\u00d6\u00d8\u00d8\u00df\u00df"+ + "\u0120\u0121\5\2\u00ca\u00cd\u00d2\u00d3\u011e\u011e\4\2\u008c\u008c\u00dd"+ + "\u00dd\4\2\u018c\u018c\u02b9\u02c1\4\2\u00d2\u00d2\u01c0\u01c0\5\2\u00c9"+ + "\u00ca\u00cc\u00cc\u018c\u018c\4\2\u00ff\u0100\u0106\u0106\4\2##\u00fd"+ + "\u0100\3\2\u0109\u010a\5\2\21\21WW\u00a0\u00a0\4\2\u00ce\u00ce\u00d2\u00d2"+ + "\4\2\u00c9\u00ca\u00cc\u00cc\5\2\16\16++\u0376\u0376\5\2\u00ed\u00ed\u00f3"+ + "\u00f4\u00f9\u00f9\5\2\u00ee\u00f0\u00f5\u00f8\u00fa\u00fc\4\2\u01ca\u01ca"+ + "\u01d8\u01d8\4\2hh\u03fa\u03fa\5\2::\u00a2\u00a2\u023d\u023d\4\2}}\u0088"+ + "\u0088\5\2\b\b\u0115\u0115\u0213\u0213\6\2hh\u03f2\u03f2\u03f4\u03f4\u03fa"+ + "\u03fb\3\2\u03ef\u03f6\3\2\u0281\u02a8\3\2\u02b5\u02b8\3\2\u025e\u0266"+ + "\3\2\u0256\u025d\5\2\u00c9\u00cd\u00da\u00da\u00dd\u00dd\23\2\"\"..kk"+ + "\u0099\u0099\u00df\u00df\u0110\u0184\u0186\u01b2\u01b4\u01c7\u01c9\u01fe"+ + "\u0200\u0225\u0227\u0235\u0237\u0246\u0249\u0250\u0255\u0255\u02ae\u02ae"+ + "\u02da\u02da\u0380\u0380\21\2%%YY\u0087\u0087\u00c9\u00cb\u00cd\u00cd"+ + "\u00f1\u00f1\u0108\u0108\u0185\u0185\u0248\u0248\u0256\u025d\u027a\u027a"+ + "\u02b9\u02b9\u02bc\u02d9\u02db\u037f\u0381\u03e5\2\u1dad\2\u0281\3\2\2"+ + "\2\4\u0292\3\2\2\2\6\u02a6\3\2\2\2\b\u02a8\3\2\2\2\n\u02cd\3\2\2\2\f\u02d9"+ + "\3\2\2\2\16\u02e4\3\2\2\2\20\u02f5\3\2\2\2\22\u02fa\3\2\2\2\24\u0306\3"+ + "\2\2\2\26\u0321\3\2\2\2\30\u032a\3\2\2\2\32\u032c\3\2\2\2\34\u0338\3\2"+ + "\2\2\36\u0356\3\2\2\2 \u037a\3\2\2\2\"\u03ad\3\2\2\2$\u03c7\3\2\2\2&\u03e5"+ + "\3\2\2\2(\u0446\3\2\2\2*\u0448\3\2\2\2,\u045a\3\2\2\2.\u0497\3\2\2\2\60"+ + "\u04aa\3\2\2\2\62\u04e5\3\2\2\2\64\u04e7\3\2\2\2\66\u0513\3\2\2\28\u0519"+ + "\3\2\2\2:\u051b\3\2\2\2<\u0530\3\2\2\2>\u0537\3\2\2\2@\u0539\3\2\2\2B"+ + "\u0549\3\2\2\2D\u054c\3\2\2\2F\u0551\3\2\2\2H\u056b\3\2\2\2J\u057b\3\2"+ + "\2\2L\u057d\3\2\2\2N\u058d\3\2\2\2P\u058f\3\2\2\2R\u05be\3\2\2\2T\u0605"+ + "\3\2\2\2V\u0607\3\2\2\2X\u0623\3\2\2\2Z\u062b\3\2\2\2\\\u0649\3\2\2\2"+ + "^\u06db\3\2\2\2`\u06dd\3\2\2\2b\u06e0\3\2\2\2d\u072a\3\2\2\2f\u0741\3"+ + "\2\2\2h\u07c6\3\2\2\2j\u07cb\3\2\2\2l\u07cd\3\2\2\2n\u07d7\3\2\2\2p\u080c"+ + "\3\2\2\2r\u0820\3\2\2\2t\u0822\3\2\2\2v\u0845\3\2\2\2x\u084e\3\2\2\2z"+ + "\u0855\3\2\2\2|\u086c\3\2\2\2~\u0875\3\2\2\2\u0080\u0884\3\2\2\2\u0082"+ + "\u089a\3\2\2\2\u0084\u08ae\3\2\2\2\u0086\u0a34\3\2\2\2\u0088\u0a36\3\2"+ + "\2\2\u008a\u0a3d\3\2\2\2\u008c\u0a44\3\2\2\2\u008e\u0a5b\3\2\2\2\u0090"+ + "\u0a63\3\2\2\2\u0092\u0a6a\3\2\2\2\u0094\u0a71\3\2\2\2\u0096\u0a78\3\2"+ + "\2\2\u0098\u0a84\3\2\2\2\u009a\u0a8e\3\2\2\2\u009c\u0a95\3\2\2\2\u009e"+ + "\u0aa5\3\2\2\2\u00a0\u0aaf\3\2\2\2\u00a2\u0ab3\3\2\2\2\u00a4\u0ab9\3\2"+ + "\2\2\u00a6\u0ac5\3\2\2\2\u00a8\u0ac7\3\2\2\2\u00aa\u0ace\3\2\2\2\u00ac"+ + "\u0ad0\3\2\2\2\u00ae\u0b03\3\2\2\2\u00b0\u0b4d\3\2\2\2\u00b2\u0b88\3\2"+ + "\2\2\u00b4\u0be0\3\2\2\2\u00b6\u0be4\3\2\2\2\u00b8\u0bf8\3\2\2\2\u00ba"+ + "\u0bfa\3\2\2\2\u00bc\u0c02\3\2\2\2\u00be\u0c0a\3\2\2\2\u00c0\u0c0c\3\2"+ + "\2\2\u00c2\u0c2a\3\2\2\2\u00c4\u0c61\3\2\2\2\u00c6\u0c6a\3\2\2\2\u00c8"+ + "\u0c7e\3\2\2\2\u00ca\u0c8a\3\2\2\2\u00cc\u0c8e\3\2\2\2\u00ce\u0caf\3\2"+ + "\2\2\u00d0\u0cc4\3\2\2\2\u00d2\u0cce\3\2\2\2\u00d4\u0cd2\3\2\2\2\u00d6"+ + "\u0ceb\3\2\2\2\u00d8\u0d15\3\2\2\2\u00da\u0d17\3\2\2\2\u00dc\u0d26\3\2"+ + "\2\2\u00de\u0d54\3\2\2\2\u00e0\u0d5e\3\2\2\2\u00e2\u0d68\3\2\2\2\u00e4"+ + "\u0d92\3\2\2\2\u00e6\u0d94\3\2\2\2\u00e8\u0da5\3\2\2\2\u00ea\u0dab\3\2"+ + "\2\2\u00ec\u0dbb\3\2\2\2\u00ee\u0dbf\3\2\2\2\u00f0\u0de5\3\2\2\2\u00f2"+ + "\u0e0b\3\2\2\2\u00f4\u0e19\3\2\2\2\u00f6\u0e21\3\2\2\2\u00f8\u0e23\3\2"+ + "\2\2\u00fa\u0e3d\3\2\2\2\u00fc\u0e41\3\2\2\2\u00fe\u0e50\3\2\2\2\u0100"+ + "\u0e52\3\2\2\2\u0102\u0e5e\3\2\2\2\u0104\u0e62\3\2\2\2\u0106\u0e73\3\2"+ + "\2\2\u0108\u0e84\3\2\2\2\u010a\u0e87\3\2\2\2\u010c\u0e91\3\2\2\2\u010e"+ + "\u0e95\3\2\2\2\u0110\u0e9f\3\2\2\2\u0112\u0ea2\3\2\2\2\u0114\u0ea7\3\2"+ + "\2\2\u0116\u0ebb\3\2\2\2\u0118\u0ebd\3\2\2\2\u011a\u0ece\3\2\2\2\u011c"+ + "\u0ed7\3\2\2\2\u011e\u0ee0\3\2\2\2\u0120\u0ee2\3\2\2\2\u0122\u0ef0\3\2"+ + "\2\2\u0124\u0efb\3\2\2\2\u0126\u0f04\3\2\2\2\u0128\u0f07\3\2\2\2\u012a"+ + "\u0f0f\3\2\2\2\u012c\u0f28\3\2\2\2\u012e\u0f34\3\2\2\2\u0130\u0f37\3\2"+ + "\2\2\u0132\u0f57\3\2\2\2\u0134\u0f59\3\2\2\2\u0136\u0f5b\3\2\2\2\u0138"+ + "\u0f5d\3\2\2\2\u013a\u0f5f\3\2\2\2\u013c\u0f94\3\2\2\2\u013e\u0f96\3\2"+ + "\2\2\u0140\u0f9c\3\2\2\2\u0142\u0fb0\3\2\2\2\u0144\u0fbe\3\2\2\2\u0146"+ + "\u0fc9\3\2\2\2\u0148\u0fcb\3\2\2\2\u014a\u0fd1\3\2\2\2\u014c\u0fdb\3\2"+ + "\2\2\u014e\u0fdf\3\2\2\2\u0150\u0fe6\3\2\2\2\u0152\u0fea\3\2\2\2\u0154"+ + "\u0ff0\3\2\2\2\u0156\u0ff7\3\2\2\2\u0158\u0ffd\3\2\2\2\u015a\u1003\3\2"+ + "\2\2\u015c\u1008\3\2\2\2\u015e\u1037\3\2\2\2\u0160\u104c\3\2\2\2\u0162"+ + "\u1065\3\2\2\2\u0164\u1068\3\2\2\2\u0166\u106e\3\2\2\2\u0168\u107e\3\2"+ + "\2\2\u016a\u108d\3\2\2\2\u016c\u1093\3\2\2\2\u016e\u10b1\3\2\2\2\u0170"+ + "\u10b3\3\2\2\2\u0172\u10ba\3\2\2\2\u0174\u10c6\3\2\2\2\u0176\u10cc\3\2"+ + "\2\2\u0178\u10e5\3\2\2\2\u017a\u10e9\3\2\2\2\u017c\u10ed\3\2\2\2\u017e"+ + "\u10f8\3\2\2\2\u0180\u1136\3\2\2\2\u0182\u116e\3\2\2\2\u0184\u1170\3\2"+ + "\2\2\u0186\u117d\3\2\2\2\u0188\u11af\3\2\2\2\u018a\u11c1\3\2\2\2\u018c"+ + "\u11f3\3\2\2\2\u018e\u11f5\3\2\2\2\u0190\u1202\3\2\2\2\u0192\u120d\3\2"+ + "\2\2\u0194\u1228\3\2\2\2\u0196\u1232\3\2\2\2\u0198\u123c\3\2\2\2\u019a"+ + "\u123e\3\2\2\2\u019c\u1248\3\2\2\2\u019e\u124b\3\2\2\2\u01a0\u127d\3\2"+ + "\2\2\u01a2\u128f\3\2\2\2\u01a4\u1291\3\2\2\2\u01a6\u1295\3\2\2\2\u01a8"+ + "\u129c\3\2\2\2\u01aa\u12a5\3\2\2\2\u01ac\u12ab\3\2\2\2\u01ae\u12b2\3\2"+ + "\2\2\u01b0\u12c8\3\2\2\2\u01b2\u12ca\3\2\2\2\u01b4\u12d5\3\2\2\2\u01b6"+ + "\u12db\3\2\2\2\u01b8\u1312\3\2\2\2\u01ba\u13ab\3\2\2\2\u01bc\u13b7\3\2"+ + "\2\2\u01be\u13c6\3\2\2\2\u01c0\u13cc\3\2\2\2\u01c2\u13df\3\2\2\2\u01c4"+ + "\u13e9\3\2\2\2\u01c6\u13f7\3\2\2\2\u01c8\u13f9\3\2\2\2\u01ca\u13fc\3\2"+ + "\2\2\u01cc\u1412\3\2\2\2\u01ce\u141e\3\2\2\2\u01d0\u1427\3\2\2\2\u01d2"+ + "\u1433\3\2\2\2\u01d4\u1437\3\2\2\2\u01d6\u1439\3\2\2\2\u01d8\u1461\3\2"+ + "\2\2\u01da\u1468\3\2\2\2\u01dc\u146a\3\2\2\2\u01de\u1481\3\2\2\2\u01e0"+ + "\u1487\3\2\2\2\u01e2\u148f\3\2\2\2\u01e4\u1492\3\2\2\2\u01e6\u1495\3\2"+ + "\2\2\u01e8\u14aa\3\2\2\2\u01ea\u14bf\3\2\2\2\u01ec\u14c5\3\2\2\2\u01ee"+ + "\u14eb\3\2\2\2\u01f0\u14f7\3\2\2\2\u01f2\u14f9\3\2\2\2\u01f4\u14ff\3\2"+ + "\2\2\u01f6\u1501\3\2\2\2\u01f8\u150a\3\2\2\2\u01fa\u1515\3\2\2\2\u01fc"+ + "\u1517\3\2\2\2\u01fe\u151d\3\2\2\2\u0200\u1521\3\2\2\2\u0202\u1523\3\2"+ + "\2\2\u0204\u1525\3\2\2\2\u0206\u1537\3\2\2\2\u0208\u1547\3\2\2\2\u020a"+ + "\u154b\3\2\2\2\u020c\u1550\3\2\2\2\u020e\u155b\3\2\2\2\u0210\u1560\3\2"+ + "\2\2\u0212\u1562\3\2\2\2\u0214\u1566\3\2\2\2\u0216\u157f\3\2\2\2\u0218"+ + "\u1581\3\2\2\2\u021a\u1584\3\2\2\2\u021c\u1589\3\2\2\2\u021e\u1599\3\2"+ + "\2\2\u0220\u1605\3\2\2\2\u0222\u1607\3\2\2\2\u0224\u162b\3\2\2\2\u0226"+ + "\u162d\3\2\2\2\u0228\u1631\3\2\2\2\u022a\u1637\3\2\2\2\u022c\u163f\3\2"+ + "\2\2\u022e\u1647\3\2\2\2\u0230\u164f\3\2\2\2\u0232\u165a\3\2\2\2\u0234"+ + "\u1662\3\2\2\2\u0236\u166a\3\2\2\2\u0238\u1672\3\2\2\2\u023a\u167a\3\2"+ + "\2\2\u023c\u1682\3\2\2\2\u023e\u1695\3\2\2\2\u0240\u16a5\3\2\2\2\u0242"+ + "\u16a9\3\2\2\2\u0244\u16ab\3\2\2\2\u0246\u16ae\3\2\2\2\u0248\u16c3\3\2"+ + "\2\2\u024a\u1762\3\2\2\2\u024c\u1764\3\2\2\2\u024e\u1777\3\2\2\2\u0250"+ + "\u1779\3\2\2\2\u0252\u17b5\3\2\2\2\u0254\u17ce\3\2\2\2\u0256\u17d0\3\2"+ + "\2\2\u0258\u17d9\3\2\2\2\u025a\u17eb\3\2\2\2\u025c\u17f8\3\2\2\2\u025e"+ + "\u1803\3\2\2\2\u0260\u184a\3\2\2\2\u0262\u185b\3\2\2\2\u0264\u18cb\3\2"+ + "\2\2\u0266\u190a\3\2\2\2\u0268\u191c\3\2\2\2\u026a\u192c\3\2\2\2\u026c"+ + "\u1935\3\2\2\2\u026e\u193e\3\2\2\2\u0270\u1940\3\2\2\2\u0272\u1942\3\2"+ + "\2\2\u0274\u1944\3\2\2\2\u0276\u1946\3\2\2\2\u0278\u1948\3\2\2\2\u027a"+ + "\u194a\3\2\2\2\u027c\u194c\3\2\2\2\u027e\u194e\3\2\2\2\u0280\u0282\5\4"+ + "\3\2\u0281\u0280\3\2\2\2\u0281\u0282\3\2\2\2\u0282\u0284\3\2\2\2\u0283"+ + "\u0285\7\u03f3\2\2\u0284\u0283\3\2\2\2\u0284\u0285\3\2\2\2\u0285\u0286"+ + "\3\2\2\2\u0286\u0287\7\2\2\3\u0287\3\3\2\2\2\u0288\u028a\5\6\4\2\u0289"+ + "\u028b\7\u03f3\2\2\u028a\u0289\3\2\2\2\u028a\u028b\3\2\2\2\u028b\u028d"+ + "\3\2\2\2\u028c\u028e\7\u0403\2\2\u028d\u028c\3\2\2\2\u028d\u028e\3\2\2"+ + "\2\u028e\u0291\3\2\2\2\u028f\u0291\5\b\5\2\u0290\u0288\3\2\2\2\u0290\u028f"+ + "\3\2\2\2\u0291\u0294\3\2\2\2\u0292\u0290\3\2\2\2\u0292\u0293\3\2\2\2\u0293"+ + "\u029d\3\2\2\2\u0294\u0292\3\2\2\2\u0295\u029a\5\6\4\2\u0296\u0298\7\u03f3"+ + "\2\2\u0297\u0296\3\2\2\2\u0297\u0298\3\2\2\2\u0298\u0299\3\2\2\2\u0299"+ + "\u029b\7\u0403\2\2\u029a\u0297\3\2\2\2\u029a\u029b\3\2\2\2\u029b\u029e"+ + "\3\2\2\2\u029c\u029e\5\b\5\2\u029d\u0295\3\2\2\2\u029d\u029c\3\2\2\2\u029e"+ + "\5\3\2\2\2\u029f\u02a7\5\n\6\2\u02a0\u02a7\5\f\7\2\u02a1\u02a7\5\16\b"+ + "\2\u02a2\u02a7\5\20\t\2\u02a3\u02a7\5\22\n\2\u02a4\u02a7\5\26\f\2\u02a5"+ + "\u02a7\5\30\r\2\u02a6\u029f\3\2\2\2\u02a6\u02a0\3\2\2\2\u02a6\u02a1\3"+ + "\2\2\2\u02a6\u02a2\3\2\2\2\u02a6\u02a3\3\2\2\2\u02a6\u02a4\3\2\2\2\u02a6"+ + "\u02a5\3\2\2\2\u02a7\7\3\2\2\2\u02a8\u02a9\7\u0403\2\2\u02a9\t\3\2\2\2"+ + "\u02aa\u02ce\5\32\16\2\u02ab\u02ce\5\34\17\2\u02ac\u02ce\5\36\20\2\u02ad"+ + "\u02ce\5 \21\2\u02ae\u02ce\5\"\22\2\u02af\u02ce\5$\23\2\u02b0\u02ce\5"+ + "&\24\2\u02b1\u02ce\5(\25\2\u02b2\u02ce\5*\26\2\u02b3\u02ce\5,\27\2\u02b4"+ + "\u02ce\5.\30\2\u02b5\u02ce\5\60\31\2\u02b6\u02ce\5r:\2\u02b7\u02ce\5t"+ + ";\2\u02b8\u02ce\5v<\2\u02b9\u02ce\5x=\2\u02ba\u02ce\5z>\2\u02bb\u02ce"+ + "\5|?\2\u02bc\u02ce\5~@\2\u02bd\u02ce\5\u0080A\2\u02be\u02ce\5\u0082B\2"+ + "\u02bf\u02ce\5\u0084C\2\u02c0\u02ce\5\u0088E\2\u02c1\u02ce\5\u008aF\2"+ + "\u02c2\u02ce\5\u008cG\2\u02c3\u02ce\5\u008eH\2\u02c4\u02ce\5\u0090I\2"+ + "\u02c5\u02ce\5\u0092J\2\u02c6\u02ce\5\u0094K\2\u02c7\u02ce\5\u0096L\2"+ + "\u02c8\u02ce\5\u0098M\2\u02c9\u02ce\5\u009aN\2\u02ca\u02ce\5\u009cO\2"+ + "\u02cb\u02ce\5\u009eP\2\u02cc\u02ce\5\u00a2R\2\u02cd\u02aa\3\2\2\2\u02cd"+ + "\u02ab\3\2\2\2\u02cd\u02ac\3\2\2\2\u02cd\u02ad\3\2\2\2\u02cd\u02ae\3\2"+ + "\2\2\u02cd\u02af\3\2\2\2\u02cd\u02b0\3\2\2\2\u02cd\u02b1\3\2\2\2\u02cd"+ + "\u02b2\3\2\2\2\u02cd\u02b3\3\2\2\2\u02cd\u02b4\3\2\2\2\u02cd\u02b5\3\2"+ + "\2\2\u02cd\u02b6\3\2\2\2\u02cd\u02b7\3\2\2\2\u02cd\u02b8\3\2\2\2\u02cd"+ + "\u02b9\3\2\2\2\u02cd\u02ba\3\2\2\2\u02cd\u02bb\3\2\2\2\u02cd\u02bc\3\2"+ + "\2\2\u02cd\u02bd\3\2\2\2\u02cd\u02be\3\2\2\2\u02cd\u02bf\3\2\2\2\u02cd"+ + "\u02c0\3\2\2\2\u02cd\u02c1\3\2\2\2\u02cd\u02c2\3\2\2\2\u02cd\u02c3\3\2"+ + "\2\2\u02cd\u02c4\3\2\2\2\u02cd\u02c5\3\2\2\2\u02cd\u02c6\3\2\2\2\u02cd"+ + "\u02c7\3\2\2\2\u02cd\u02c8\3\2\2\2\u02cd\u02c9\3\2\2\2\u02cd\u02ca\3\2"+ + "\2\2\u02cd\u02cb\3\2\2\2\u02cd\u02cc\3\2\2\2\u02ce\13\3\2\2\2\u02cf\u02da"+ + "\5\u00b4[\2\u02d0\u02da\5\u00acW\2\u02d1\u02da\5\u00b6\\\2\u02d2\u02da"+ + "\5\u00a6T\2\u02d3\u02da\5\u00b2Z\2\u02d4\u02da\5\u00a4S\2\u02d5\u02da"+ + "\5\u00aeX\2\u02d6\u02da\5\u00b0Y\2\u02d7\u02da\5\u00a8U\2\u02d8\u02da"+ + "\5\u00aaV\2\u02d9\u02cf\3\2\2\2\u02d9\u02d0\3\2\2\2\u02d9\u02d1\3\2\2"+ + "\2\u02d9\u02d2\3\2\2\2\u02d9\u02d3\3\2\2\2\u02d9\u02d4\3\2\2\2\u02d9\u02d5"+ + "\3\2\2\2\u02d9\u02d6\3\2\2\2\u02d9\u02d7\3\2\2\2\u02d9\u02d8\3\2\2\2\u02da"+ + "\r\3\2\2\2\u02db\u02e5\5\u0100\u0081\2\u02dc\u02e5\5\u0102\u0082\2\u02dd"+ + "\u02e5\5\u0104\u0083\2\u02de\u02e5\5\u0106\u0084\2\u02df\u02e5\5\u0108"+ + "\u0085\2\u02e0\u02e5\5\u010a\u0086\2\u02e1\u02e5\5\u010c\u0087\2\u02e2"+ + "\u02e5\5\u010e\u0088\2\u02e3\u02e5\5\u0110\u0089\2\u02e4\u02db\3\2\2\2"+ + "\u02e4\u02dc\3\2\2\2\u02e4\u02dd\3\2\2\2\u02e4\u02de\3\2\2\2\u02e4\u02df"+ + "\3\2\2\2\u02e4\u02e0\3\2\2\2\u02e4\u02e1\3\2\2\2\u02e4\u02e2\3\2\2\2\u02e4"+ + "\u02e3\3\2\2\2\u02e5\17\3\2\2\2\u02e6\u02f6\5\u0120\u0091\2\u02e7\u02f6"+ + "\5\u0122\u0092\2\u02e8\u02f6\5\u0124\u0093\2\u02e9\u02f6\5\u0126\u0094"+ + "\2\u02ea\u02f6\5\u0128\u0095\2\u02eb\u02f6\5\u012a\u0096\2\u02ec\u02f6"+ + "\5\u012c\u0097\2\u02ed\u02f6\5\u012e\u0098\2\u02ee\u02f6\5\u0130\u0099"+ + "\2\u02ef\u02f6\5\u0148\u00a5\2\u02f0\u02f6\5\u014a\u00a6\2\u02f1\u02f6"+ + "\5\u014c\u00a7\2\u02f2\u02f6\5\u014e\u00a8\2\u02f3\u02f6\5\u0150\u00a9"+ + "\2\u02f4\u02f6\5\u0152\u00aa\2\u02f5\u02e6\3\2\2\2\u02f5\u02e7\3\2\2\2"+ + "\u02f5\u02e8\3\2\2\2\u02f5\u02e9\3\2\2\2\u02f5\u02ea\3\2\2\2\u02f5\u02eb"+ + "\3\2\2\2\u02f5\u02ec\3\2\2\2\u02f5\u02ed\3\2\2\2\u02f5\u02ee\3\2\2\2\u02f5"+ + "\u02ef\3\2\2\2\u02f5\u02f0\3\2\2\2\u02f5\u02f1\3\2\2\2\u02f5\u02f2\3\2"+ + "\2\2\u02f5\u02f3\3\2\2\2\u02f5\u02f4\3\2\2\2\u02f6\21\3\2\2\2\u02f7\u02fb"+ + "\5\u0154\u00ab\2\u02f8\u02fb\5\u0156\u00ac\2\u02f9\u02fb\5\u0158\u00ad"+ + "\2\u02fa\u02f7\3\2\2\2\u02fa\u02f8\3\2\2\2\u02fa\u02f9\3\2\2\2\u02fb\23"+ + "\3\2\2\2\u02fc\u0307\5\u015c\u00af\2\u02fd\u0307\5\u015e\u00b0\2\u02fe"+ + "\u0307\5\u0160\u00b1\2\u02ff\u0307\5\u0164\u00b3\2\u0300\u0307\5\u0166"+ + "\u00b4\2\u0301\u0307\5\u0168\u00b5\2\u0302\u0307\5\u016c\u00b7\2\u0303"+ + "\u0307\5\u0162\u00b2\2\u0304\u0307\5\u016a\u00b6\2\u0305\u0307\5\u016e"+ + "\u00b8\2\u0306\u02fc\3\2\2\2\u0306\u02fd\3\2\2\2\u0306\u02fe\3\2\2\2\u0306"+ + "\u02ff\3\2\2\2\u0306\u0300\3\2\2\2\u0306\u0301\3\2\2\2\u0306\u0302\3\2"+ + "\2\2\u0306\u0303\3\2\2\2\u0306\u0304\3\2\2\2\u0306\u0305\3\2\2\2\u0307"+ + "\25\3\2\2\2\u0308\u0322\5\u0180\u00c1\2\u0309\u0322\5\u0182\u00c2\2\u030a"+ + "\u0322\5\u0184\u00c3\2\u030b\u0322\5\u0186\u00c4\2\u030c\u0322\5\u0188"+ + "\u00c5\2\u030d\u0322\5\u018a\u00c6\2\u030e\u0322\5\u018c\u00c7\2\u030f"+ + "\u0322\5\u018e\u00c8\2\u0310\u0322\5\u01a6\u00d4\2\u0311\u0322\5\u01a8"+ + "\u00d5\2\u0312\u0322\5\u01aa\u00d6\2\u0313\u0322\5\u01ac\u00d7\2\u0314"+ + "\u0322\5\u01ae\u00d8\2\u0315\u0322\5\u01b2\u00da\2\u0316\u0322\5\u01b4"+ + "\u00db\2\u0317\u0322\5\u01b6\u00dc\2\u0318\u0322\5\u01b8\u00dd\2\u0319"+ + "\u0322\5\u01ba\u00de\2\u031a\u0322\5\u01c8\u00e5\2\u031b\u0322\5\u01ca"+ + "\u00e6\2\u031c\u0322\5\u01cc\u00e7\2\u031d\u0322\5\u01ce\u00e8\2\u031e"+ + "\u0322\5\u01d0\u00e9\2\u031f\u0322\5\u01d2\u00ea\2\u0320\u0322\5\u01d4"+ + "\u00eb\2\u0321\u0308\3\2\2\2\u0321\u0309\3\2\2\2\u0321\u030a\3\2\2\2\u0321"+ + "\u030b\3\2\2\2\u0321\u030c\3\2\2\2\u0321\u030d\3\2\2\2\u0321\u030e\3\2"+ + "\2\2\u0321\u030f\3\2\2\2\u0321\u0310\3\2\2\2\u0321\u0311\3\2\2\2\u0321"+ + "\u0312\3\2\2\2\u0321\u0313\3\2\2\2\u0321\u0314\3\2\2\2\u0321\u0315\3\2"+ + "\2\2\u0321\u0316\3\2\2\2\u0321\u0317\3\2\2\2\u0321\u0318\3\2\2\2\u0321"+ + "\u0319\3\2\2\2\u0321\u031a\3\2\2\2\u0321\u031b\3\2\2\2\u0321\u031c\3\2"+ + "\2\2\u0321\u031d\3\2\2\2\u0321\u031e\3\2\2\2\u0321\u031f\3\2\2\2\u0321"+ + "\u0320\3\2\2\2\u0322\27\3\2\2\2\u0323\u032b\5\u01de\u00f0\2\u0324\u032b"+ + "\5\u01e0\u00f1\2\u0325\u032b\5\u01e2\u00f2\2\u0326\u032b\5\u01e4\u00f3"+ + "\2\u0327\u032b\5\u01e6\u00f4\2\u0328\u032b\5\u01e8\u00f5\2\u0329\u032b"+ + "\5\u01ec\u00f7\2\u032a\u0323\3\2\2\2\u032a\u0324\3\2\2\2\u032a\u0325\3"+ + "\2\2\2\u032a\u0326\3\2\2\2\u032a\u0327\3\2\2\2\u032a\u0328\3\2\2\2\u032a"+ + "\u0329\3\2\2\2\u032b\31\3\2\2\2\u032c\u032d\7 \2\2\u032d\u032f\t\2\2\2"+ + "\u032e\u0330\5\u0246\u0124\2\u032f\u032e\3\2\2\2\u032f\u0330\3\2\2\2\u0330"+ + "\u0331\3\2\2\2\u0331\u0335\5\u020c\u0107\2\u0332\u0334\5\62\32\2\u0333"+ + "\u0332\3\2\2\2\u0334\u0337\3\2\2\2\u0335\u0333\3\2\2\2\u0335\u0336\3\2"+ + "\2\2\u0336\33\3\2\2\2\u0337\u0335\3\2\2\2\u0338\u033a\7 \2\2\u0339\u033b"+ + "\5\64\33\2\u033a\u0339\3\2\2\2\u033a\u033b\3\2\2\2\u033b\u033c\3\2\2\2"+ + "\u033c\u033e\7\u015e\2\2\u033d\u033f\5\u0246\u0124\2\u033e\u033d\3\2\2"+ + "\2\u033e\u033f\3\2\2\2\u033f\u0340\3\2\2\2\u0340\u0341\5\u01f2\u00fa\2"+ + "\u0341\u0342\7l\2\2\u0342\u0343\7\u0207\2\2\u0343\u034a\5\66\34\2\u0344"+ + "\u0345\7l\2\2\u0345\u0347\7\u0136\2\2\u0346\u0348\7h\2\2\u0347\u0346\3"+ + "\2\2\2\u0347\u0348\3\2\2\2\u0348\u0349\3\2\2\2\u0349\u034b\7\u01e0\2\2"+ + "\u034a\u0344\3\2\2\2\u034a\u034b\3\2\2\2\u034b\u034d\3\2\2\2\u034c\u034e"+ + "\5> \2\u034d\u034c\3\2\2\2\u034d\u034e\3\2\2\2\u034e\u0351\3\2\2\2\u034f"+ + "\u0350\7\u0133\2\2\u0350\u0352\7\u040f\2\2\u0351\u034f\3\2\2\2\u0351\u0352"+ + "\3\2\2\2\u0352\u0353\3\2\2\2\u0353\u0354\7\u0150\2\2\u0354\u0355\5\u015a"+ + "\u00ae\2\u0355\35\3\2\2\2\u0356\u0358\7 \2\2\u0357\u0359\t\3\2\2\u0358"+ + "\u0357\3\2\2\2\u0358\u0359\3\2\2\2\u0359\u035b\3\2\2\2\u035a\u035c\t\4"+ + "\2\2\u035b\u035a\3\2\2\2\u035b\u035c\3\2\2\2\u035c\u035d\3\2\2\2\u035d"+ + "\u035e\7J\2\2\u035e\u0360\5\u020c\u0107\2\u035f\u0361\5@!\2\u0360\u035f"+ + "\3\2\2\2\u0360\u0361\3\2\2\2\u0361\u0362\3\2\2\2\u0362\u0363\7l\2\2\u0363"+ + "\u0364\5\u01f4\u00fb\2\u0364\u0368\5\u0230\u0119\2\u0365\u0367\5B\"\2"+ + "\u0366\u0365\3\2\2\2\u0367\u036a\3\2\2\2\u0368\u0366\3\2\2\2\u0368\u0369"+ + "\3\2\2\2\u0369\u0377\3\2\2\2\u036a\u0368\3\2\2\2\u036b\u036d\7\u0114\2"+ + "\2\u036c\u036e\7\u03f7\2\2\u036d\u036c\3\2\2\2\u036d\u036e\3\2\2\2\u036e"+ + "\u036f\3\2\2\2\u036f\u0376\t\5\2\2\u0370\u0372\7_\2\2\u0371\u0373\7\u03f7"+ + "\2\2\u0372\u0371\3\2\2\2\u0372\u0373\3\2\2\2\u0373\u0374\3\2\2\2\u0374"+ + "\u0376\t\6\2\2\u0375\u036b\3\2\2\2\u0375\u0370\3\2\2\2\u0376\u0379\3\2"+ + "\2\2\u0377\u0375\3\2\2\2\u0377\u0378\3\2\2\2\u0378\37\3\2\2\2\u0379\u0377"+ + "\3\2\2\2\u037a\u037b\7 \2\2\u037b\u037c\7\u0195\2\2\u037c\u037d\7D\2\2"+ + "\u037d\u037e\5\u020c\u0107\2\u037e\u037f\7\7\2\2\u037f\u0380\7\u023a\2"+ + "\2\u0380\u0386\7\u040f\2\2\u0381\u0383\7\u0180\2\2\u0382\u0384\7\u03f7"+ + "\2\2\u0383\u0382\3\2\2\2\u0383\u0384\3\2\2\2\u0384\u0385\3\2\2\2\u0385"+ + "\u0387\5\u0214\u010b\2\u0386\u0381\3\2\2\2\u0386\u0387\3\2\2\2\u0387\u038d"+ + "\3\2\2\2\u0388\u038a\7\u023b\2\2\u0389\u038b\7\u03f7\2\2\u038a\u0389\3"+ + "\2\2\2\u038a\u038b\3\2\2\2\u038b\u038c\3\2\2\2\u038c\u038e\5\u0214\u010b"+ + "\2\u038d\u0388\3\2\2\2\u038d\u038e\3\2\2\2\u038e\u0394\3\2\2\2\u038f\u0391"+ + "\7\u01ea\2\2\u0390\u0392\7\u03f7\2\2\u0391\u0390\3\2\2\2\u0391\u0392\3"+ + "\2\2\2\u0392\u0393\3\2\2\2\u0393\u0395\5\u0214\u010b\2\u0394\u038f\3\2"+ + "\2\2\u0394\u0395\3\2\2\2\u0395\u039b\3\2\2\2\u0396\u0398\7\u01c4\2\2\u0397"+ + "\u0399\7\u03f7\2\2\u0398\u0397\3\2\2\2\u0398\u0399\3\2\2\2\u0399\u039a"+ + "\3\2\2\2\u039a\u039c\5\u020c\u0107\2\u039b\u0396\3\2\2\2\u039b\u039c\3"+ + "\2\2\2\u039c\u039e\3\2\2\2\u039d\u039f\7\u0249\2\2\u039e\u039d\3\2\2\2"+ + "\u039e\u039f\3\2\2\2\u039f\u03a5\3\2\2\2\u03a0\u03a2\7\u0133\2\2\u03a1"+ + "\u03a3\7\u03f7\2\2\u03a2\u03a1\3\2\2\2\u03a2\u03a3\3\2\2\2\u03a3\u03a4"+ + "\3\2\2\2\u03a4\u03a6\7\u040f\2\2\u03a5\u03a0\3\2\2\2\u03a5\u03a6\3\2\2"+ + "\2\u03a6\u03a7\3\2\2\2\u03a7\u03a9\7\u0158\2\2\u03a8\u03aa\7\u03f7\2\2"+ + "\u03a9\u03a8\3\2\2\2\u03a9\u03aa\3\2\2\2\u03aa\u03ab\3\2\2\2\u03ab\u03ac"+ + "\5\u0202\u0102\2\u03ac!\3\2\2\2\u03ad\u03af\7 \2\2\u03ae\u03b0\5\64\33"+ + "\2\u03af\u03ae\3\2\2\2\u03af\u03b0\3\2\2\2\u03b0\u03b1\3\2\2\2\u03b1\u03b2"+ + "\7w\2\2\u03b2\u03b3\5\u01f2\u00fa\2\u03b3\u03b5\7\u0400\2\2\u03b4\u03b6"+ + "\5D#\2\u03b5\u03b4\3\2\2\2\u03b5\u03b6\3\2\2\2\u03b6\u03bb\3\2\2\2\u03b7"+ + "\u03b8\7\u0402\2\2\u03b8\u03ba\5D#\2\u03b9\u03b7\3\2\2\2\u03ba\u03bd\3"+ + "\2\2\2\u03bb\u03b9\3\2\2\2\u03bb\u03bc\3\2\2\2\u03bc\u03be\3\2\2\2\u03bd"+ + "\u03bb\3\2\2\2\u03be\u03c2\7\u0401\2\2\u03bf\u03c1\5H%\2\u03c0\u03bf\3"+ + "\2\2\2\u03c1\u03c4\3\2\2\2\u03c2\u03c0\3\2\2\2\u03c2\u03c3\3\2\2\2\u03c3"+ + "\u03c5\3\2\2\2\u03c4\u03c2\3\2\2\2\u03c5\u03c6\5\u015a\u00ae\2\u03c6#"+ + "\3\2\2\2\u03c7\u03c9\7 \2\2\u03c8\u03ca\5\64\33\2\u03c9\u03c8\3\2\2\2"+ + "\u03c9\u03ca\3\2\2\2\u03ca\u03cb\3\2\2\2\u03cb\u03cc\7\u0172\2\2\u03cc"+ + "\u03cd\5\u01f2\u00fa\2\u03cd\u03cf\7\u0400\2\2\u03ce\u03d0\5F$\2\u03cf"+ + "\u03ce\3\2\2\2\u03cf\u03d0\3\2\2\2\u03d0\u03d5\3\2\2\2\u03d1\u03d2\7\u0402"+ + "\2\2\u03d2\u03d4\5F$\2\u03d3\u03d1\3\2\2\2\u03d4\u03d7\3\2\2\2\u03d5\u03d3"+ + "\3\2\2\2\u03d5\u03d6\3\2\2\2\u03d6\u03d8\3\2\2\2\u03d7\u03d5\3\2\2\2\u03d8"+ + "\u03d9\7\u0401\2\2\u03d9\u03da\7\u01fe\2\2\u03da\u03de\5\u0220\u0111\2"+ + "\u03db\u03dd\5H%\2\u03dc\u03db\3\2\2\2\u03dd\u03e0\3\2\2\2\u03de\u03dc"+ + "\3\2\2\2\u03de\u03df\3\2\2\2\u03df\u03e3\3\2\2\2\u03e0\u03de\3\2\2\2\u03e1"+ + "\u03e4\5\u015a\u00ae\2\u03e2\u03e4\5\u016a\u00b6\2\u03e3\u03e1\3\2\2\2"+ + "\u03e3\u03e2\3\2\2\2\u03e4%\3\2\2\2\u03e5\u03e6\7 \2\2\u03e6\u03e7\7\u0209"+ + "\2\2\u03e7\u03e8\5\u020c\u0107\2\u03e8\u03e9\7>\2\2\u03e9\u03ea\7\u0145"+ + "\2\2\u03ea\u03eb\7\u024d\2\2\u03eb\u03ec\t\7\2\2\u03ec\u03ed\7\u01d0\2"+ + "\2\u03ed\u03ee\7\u0400\2\2\u03ee\u03f3\5J&\2\u03ef\u03f0\7\u0402\2\2\u03f0"+ + "\u03f2\5J&\2\u03f1\u03ef\3\2\2\2\u03f2\u03f5\3\2\2\2\u03f3\u03f1\3\2\2"+ + "\2\u03f3\u03f4\3\2\2\2\u03f4\u03f6\3\2\2\2\u03f5\u03f3\3\2\2\2\u03f6\u03f7"+ + "\7\u0401\2\2\u03f7\'\3\2\2\2\u03f8\u03fa\7 \2\2\u03f9\u03fb\7\u0231\2"+ + "\2\u03fa\u03f9\3\2\2\2\u03fa\u03fb\3\2\2\2\u03fb\u03fc\3\2\2\2\u03fc\u03fe"+ + "\7\u009c\2\2\u03fd\u03ff\5\u0246\u0124\2\u03fe\u03fd\3\2\2\2\u03fe\u03ff"+ + "\3\2\2\2\u03ff\u0400\3\2\2\2\u0400\u0408\5\u01f4\u00fb\2\u0401\u0402\7"+ + "Z\2\2\u0402\u0409\5\u01f4\u00fb\2\u0403\u0404\7\u0400\2\2\u0404\u0405"+ + "\7Z\2\2\u0405\u0406\5\u01f4\u00fb\2\u0406\u0407\7\u0401\2\2\u0407\u0409"+ + "\3\2\2\2\u0408\u0401\3\2\2\2\u0408\u0403\3\2\2\2\u0409\u0447\3\2\2\2\u040a"+ + "\u040c\7 \2\2\u040b\u040d\7\u0231\2\2\u040c\u040b\3\2\2\2\u040c\u040d"+ + "\3\2\2\2\u040d\u040e\3\2\2\2\u040e\u0410\7\u009c\2\2\u040f\u0411\5\u0246"+ + "\u0124\2\u0410\u040f\3\2\2\2\u0410\u0411\3\2\2\2\u0411\u0412\3\2\2\2\u0412"+ + "\u0414\5\u01f4\u00fb\2\u0413\u0415\5L\'\2\u0414\u0413\3\2\2\2\u0414\u0415"+ + "\3\2\2\2\u0415\u0420\3\2\2\2\u0416\u041d\5^\60\2\u0417\u0419\7\u0402\2"+ + "\2\u0418\u0417\3\2\2\2\u0418\u0419\3\2\2\2\u0419\u041a\3\2\2\2\u041a\u041c"+ + "\5^\60\2\u041b\u0418\3\2\2\2\u041c\u041f\3\2\2\2\u041d\u041b\3\2\2\2\u041d"+ + "\u041e\3\2\2\2\u041e\u0421\3\2\2\2\u041f\u041d\3\2\2\2\u0420\u0416\3\2"+ + "\2\2\u0420\u0421\3\2\2\2\u0421\u0423\3\2\2\2\u0422\u0424\5b\62\2\u0423"+ + "\u0422\3\2\2\2\u0423\u0424\3\2\2\2\u0424\u0426\3\2\2\2\u0425\u0427\t\b"+ + "\2\2\u0426\u0425\3\2\2\2\u0426\u0427\3\2\2\2\u0427\u0429\3\2\2\2\u0428"+ + "\u042a\7\r\2\2\u0429\u0428\3\2\2\2\u0429\u042a\3\2\2\2\u042a\u042b\3\2"+ + "\2\2\u042b\u042c\5\u00b4[\2\u042c\u0447\3\2\2\2\u042d\u042f\7 \2\2\u042e"+ + "\u0430\7\u0231\2\2\u042f\u042e\3\2\2\2\u042f\u0430\3\2\2\2\u0430\u0431"+ + "\3\2\2\2\u0431\u0433\7\u009c\2\2\u0432\u0434\5\u0246\u0124\2\u0433\u0432"+ + "\3\2\2\2\u0433\u0434\3\2\2\2\u0434\u0435\3\2\2\2\u0435\u0436\5\u01f4\u00fb"+ + "\2\u0436\u0441\5L\'\2\u0437\u043e\5^\60\2\u0438\u043a\7\u0402\2\2\u0439"+ + "\u0438\3\2\2\2\u0439\u043a\3\2\2\2\u043a\u043b\3\2\2\2\u043b\u043d\5^"+ + "\60\2\u043c\u0439\3\2\2\2\u043d\u0440\3\2\2\2\u043e\u043c\3\2\2\2\u043e"+ + "\u043f\3\2\2\2\u043f\u0442\3\2\2\2\u0440\u043e\3\2\2\2\u0441\u0437\3\2"+ + "\2\2\u0441\u0442\3\2\2\2\u0442\u0444\3\2\2\2\u0443\u0445\5b\62\2\u0444"+ + "\u0443\3\2\2\2\u0444\u0445\3\2\2\2\u0445\u0447\3\2\2\2\u0446\u03f8\3\2"+ + "\2\2\u0446\u040a\3\2\2\2\u0446\u042d\3\2\2\2\u0447)\3\2\2\2\u0448\u0449"+ + "\7 \2\2\u0449\u044a\7\u0230\2\2\u044a\u044b\5\u020c\u0107\2\u044b\u044c"+ + "\7\7\2\2\u044c\u044d\7\u0146\2\2\u044d\u0451\7\u040f\2\2\u044e\u044f\7"+ + "\u016a\2\2\u044f\u0450\7\u03f7\2\2\u0450\u0452\5\u0214\u010b\2\u0451\u044e"+ + "\3\2\2\2\u0451\u0452\3\2\2\2\u0452\u0458\3\2\2\2\u0453\u0455\7\u0158\2"+ + "\2\u0454\u0456\7\u03f7\2\2\u0455\u0454\3\2\2\2\u0455\u0456\3\2\2\2\u0456"+ + "\u0457\3\2\2\2\u0457\u0459\5\u0202\u0102\2\u0458\u0453\3\2\2\2\u0458\u0459"+ + "\3\2\2\2\u0459+\3\2\2\2\u045a\u045b\7 \2\2\u045b\u045c\7\u0230\2\2\u045c"+ + "\u045d\5\u020c\u0107\2\u045d\u045e\7\7\2\2\u045e\u045f\7\u0146\2\2\u045f"+ + "\u0460\7\u040f\2\2\u0460\u0461\7\u00aa\2\2\u0461\u0462\7\u0195\2\2\u0462"+ + "\u0463\7D\2\2\u0463\u0469\5\u020c\u0107\2\u0464\u0466\7\u0166\2\2\u0465"+ + "\u0467\7\u03f7\2\2\u0466\u0465\3\2\2\2\u0466\u0467\3\2\2\2\u0467\u0468"+ + "\3\2\2\2\u0468\u046a\5\u0214\u010b\2\u0469\u0464\3\2\2\2\u0469\u046a\3"+ + "\2\2\2\u046a\u0470\3\2\2\2\u046b\u046d\7\u0180\2\2\u046c\u046e\7\u03f7"+ + "\2\2\u046d\u046c\3\2\2\2\u046d\u046e\3\2\2\2\u046e\u046f\3\2\2\2\u046f"+ + "\u0471\5\u0214\u010b\2\u0470\u046b\3\2\2\2\u0470\u0471\3\2\2\2\u0471\u0477"+ + "\3\2\2\2\u0472\u0474\7\u0119\2\2\u0473\u0475\7\u03f7\2\2\u0474\u0473\3"+ + "\2\2\2\u0474\u0475\3\2\2\2\u0475\u0476\3\2\2\2\u0476\u0478\5\u0214\u010b"+ + "\2\u0477\u0472\3\2\2\2\u0477\u0478\3\2\2\2\u0478\u047e\3\2\2\2\u0479\u047b"+ + "\7\u01af\2\2\u047a\u047c\7\u03f7\2\2\u047b\u047a\3\2\2\2\u047b\u047c\3"+ + "\2\2\2\u047c\u047d\3\2\2\2\u047d\u047f\5\u0214\u010b\2\u047e\u0479\3\2"+ + "\2\2\u047e\u047f\3\2\2\2\u047f\u0485\3\2\2\2\u0480\u0482\7\u01c4\2\2\u0481"+ + "\u0483\7\u03f7\2\2\u0482\u0481\3\2\2\2\u0482\u0483\3\2\2\2\u0483\u0484"+ + "\3\2\2\2\u0484\u0486\5\u020c\u0107\2\u0485\u0480\3\2\2\2\u0485\u0486\3"+ + "\2\2\2\u0486\u0488\3\2\2\2\u0487\u0489\7\u0249\2\2\u0488\u0487\3\2\2\2"+ + "\u0488\u0489\3\2\2\2\u0489\u048f\3\2\2\2\u048a\u048c\7\u0133\2\2\u048b"+ + "\u048d\7\u03f7\2\2\u048c\u048b\3\2\2\2\u048c\u048d\3\2\2\2\u048d\u048e"+ + "\3\2\2\2\u048e\u0490\7\u040f\2\2\u048f\u048a\3\2\2\2\u048f\u0490\3\2\2"+ + "\2\u0490\u0491\3\2\2\2\u0491\u0493\7\u0158\2\2\u0492\u0494\7\u03f7\2\2"+ + "\u0493\u0492\3\2\2\2\u0493\u0494\3\2\2\2\u0494\u0495\3\2\2\2\u0495\u0496"+ + "\5\u0202\u0102\2\u0496-\3\2\2\2\u0497\u0499\7 \2\2\u0498\u049a\5\64\33"+ + "\2\u0499\u0498\3\2\2\2\u0499\u049a\3\2\2\2\u049a\u049b\3\2\2\2\u049b\u049c"+ + "\7\u00a1\2\2\u049c\u049d\5\u01f2\u00fa\2\u049d\u049e\t\t\2\2\u049e\u049f"+ + "\t\n\2\2\u049f\u04a0\7l\2\2\u04a0\u04a1\5\u01f4\u00fb\2\u04a1\u04a2\7"+ + "<\2\2\u04a2\u04a3\7\62\2\2\u04a3\u04a6\7\u0203\2\2\u04a4\u04a5\t\13\2"+ + "\2\u04a5\u04a7\5\u01f2\u00fa\2\u04a6\u04a4\3\2\2\2\u04a6\u04a7\3\2\2\2"+ + "\u04a7\u04a8\3\2\2\2\u04a8\u04a9\5\u015a\u00ae\2\u04a9/\3\2\2\2\u04aa"+ + "\u04ad\7 \2\2\u04ab\u04ac\7p\2\2\u04ac\u04ae\7\u0081\2\2\u04ad\u04ab\3"+ + "\2\2\2\u04ad\u04ae\3\2\2\2\u04ae\u04b2\3\2\2\2\u04af\u04b0\7\u0114\2\2"+ + "\u04b0\u04b1\7\u03f7\2\2\u04b1\u04b3\t\f\2\2\u04b2\u04af\3\2\2\2\u04b2"+ + "\u04b3\3\2\2\2\u04b3\u04b5\3\2\2\2\u04b4\u04b6\5\64\33\2\u04b5\u04b4\3"+ + "\2"; + private static final String _serializedATNSegment1 = + "\2\2\u04b5\u04b6\3\2\2\2\u04b6\u04ba\3\2\2\2\u04b7\u04b8\7\u0091\2\2\u04b8"+ + "\u04b9\7\u0208\2\2\u04b9\u04bb\t\r\2\2\u04ba\u04b7\3\2\2\2\u04ba\u04bb"+ + "\3\2\2\2\u04bb\u04bc\3\2\2\2\u04bc\u04bd\7\u0246\2\2\u04bd\u04c2\5\u01f2"+ + "\u00fa\2\u04be\u04bf\7\u0400\2\2\u04bf\u04c0\5\u022c\u0117\2\u04c0\u04c1"+ + "\7\u0401\2\2\u04c1\u04c3\3\2\2\2\u04c2\u04be\3\2\2\2\u04c2\u04c3\3\2\2"+ + "\2\u04c3\u04c4\3\2\2\2\u04c4\u04c5\7\r\2\2\u04c5\u04cc\5\u00b4[\2\u04c6"+ + "\u04c8\7\u00b0\2\2\u04c7\u04c9\t\16\2\2\u04c8\u04c7\3\2\2\2\u04c8\u04c9"+ + "\3\2\2\2\u04c9\u04ca\3\2\2\2\u04ca\u04cb\7\31\2\2\u04cb\u04cd\7n\2\2\u04cc"+ + "\u04c6\3\2\2\2\u04cc\u04cd\3\2\2\2\u04cd\61\3\2\2\2\u04ce\u04d0\7(\2\2"+ + "\u04cf\u04ce\3\2\2\2\u04cf\u04d0\3\2\2\2\u04d0\u04d4\3\2\2\2\u04d1\u04d2"+ + "\7\30\2\2\u04d2\u04d5\7\u008c\2\2\u04d3\u04d5\7\u02df\2\2\u04d4\u04d1"+ + "\3\2\2\2\u04d4\u04d3\3\2\2\2\u04d5\u04d7\3\2\2\2\u04d6\u04d8\7\u03f7\2"+ + "\2\u04d7\u04d6\3\2\2\2\u04d7\u04d8\3\2\2\2\u04d8\u04db\3\2\2\2\u04d9\u04dc"+ + "\5\u01fe\u0100\2\u04da\u04dc\7(\2\2\u04db\u04d9\3\2\2\2\u04db\u04da\3"+ + "\2\2\2\u04dc\u04e6\3\2\2\2\u04dd\u04df\7(\2\2\u04de\u04dd\3\2\2\2\u04de"+ + "\u04df\3\2\2\2\u04df\u04e0\3\2\2\2\u04e0\u04e2\7\32\2\2\u04e1\u04e3\7"+ + "\u03f7\2\2\u04e2\u04e1\3\2\2\2\u04e2\u04e3\3\2\2\2\u04e3\u04e4\3\2\2\2"+ + "\u04e4\u04e6\5\u0200\u0101\2\u04e5\u04cf\3\2\2\2\u04e5\u04de\3\2\2\2\u04e6"+ + "\63\3\2\2\2\u04e7\u04e8\7\u0149\2\2\u04e8\u04ef\7\u03f7\2\2\u04e9\u04f0"+ + "\5\u01fa\u00fe\2\u04ea\u04ed\7#\2\2\u04eb\u04ec\7\u0400\2\2\u04ec\u04ee"+ + "\7\u0401\2\2\u04ed\u04eb\3\2\2\2\u04ed\u04ee\3\2\2\2\u04ee\u04f0\3\2\2"+ + "\2\u04ef\u04e9\3\2\2\2\u04ef\u04ea\3\2\2\2\u04f0\65\3\2\2\2\u04f1\u04f2"+ + "\7\u0116\2\2\u04f2\u04f6\58\35\2\u04f3\u04f5\5:\36\2\u04f4\u04f3\3\2\2"+ + "\2\u04f5\u04f8\3\2\2\2\u04f6\u04f4\3\2\2\2\u04f6\u04f7\3\2\2\2\u04f7\u0514"+ + "\3\2\2\2\u04f8\u04f6\3\2\2\2\u04f9\u04fc\7\u0160\2\2\u04fa\u04fd\5\u0212"+ + "\u010a\2\u04fb\u04fd\5\u025c\u012f\2\u04fc\u04fa\3\2\2\2\u04fc\u04fb\3"+ + "\2\2\2\u04fd\u04fe\3\2\2\2\u04fe\u0507\5<\37\2\u04ff\u0500\7\u021f\2\2"+ + "\u0500\u0504\58\35\2\u0501\u0503\5:\36\2\u0502\u0501\3\2\2\2\u0503\u0506"+ + "\3\2\2\2\u0504\u0502\3\2\2\2\u0504\u0505\3\2\2\2\u0505\u0508\3\2\2\2\u0506"+ + "\u0504\3\2\2\2\u0507\u04ff\3\2\2\2\u0507\u0508\3\2\2\2\u0508\u0511\3\2"+ + "\2\2\u0509\u050a\7\u0157\2\2\u050a\u050e\58\35\2\u050b\u050d\5:\36\2\u050c"+ + "\u050b\3\2\2\2\u050d\u0510\3\2\2\2\u050e\u050c\3\2\2\2\u050e\u050f\3\2"+ + "\2\2\u050f\u0512\3\2\2\2\u0510\u050e\3\2\2\2\u0511\u0509\3\2\2\2\u0511"+ + "\u0512\3\2\2\2\u0512\u0514\3\2\2\2\u0513\u04f1\3\2\2\2\u0513\u04f9\3\2"+ + "\2\2\u0514\67\3\2\2\2\u0515\u051a\7\u00ff\2\2\u0516\u051a\5\u0216\u010c"+ + "\2\u0517\u051a\5\u0212\u010a\2\u0518\u051a\5\u025c\u012f\2\u0519\u0515"+ + "\3\2\2\2\u0519\u0516\3\2\2\2\u0519\u0517\3\2\2\2\u0519\u0518\3\2\2\2\u051a"+ + "9\3\2\2\2\u051b\u051c\7\u03f2\2\2\u051c\u051f\7O\2\2\u051d\u0520\5\u0212"+ + "\u010a\2\u051e\u0520\5\u025c\u012f\2\u051f\u051d\3\2\2\2\u051f\u051e\3"+ + "\2\2\2\u0520\u0521\3\2\2\2\u0521\u0522\5<\37\2\u0522;\3\2\2\2\u0523\u0531"+ + "\5\u0278\u013d\2\u0524\u0531\7\u00cd\2\2\u0525\u0531\7\u00e0\2\2\u0526"+ + "\u0531\7\u00e1\2\2\u0527\u0531\7\u00e2\2\2\u0528\u0531\7\u00e3\2\2\u0529"+ + "\u0531\7\u00e4\2\2\u052a\u0531\7\u00e5\2\2\u052b\u0531\7\u00e6\2\2\u052c"+ + "\u0531\7\u00e7\2\2\u052d\u0531\7\u00e8\2\2\u052e\u0531\7\u00e9\2\2\u052f"+ + "\u0531\7\u00ea\2\2\u0530\u0523\3\2\2\2\u0530\u0524\3\2\2\2\u0530\u0525"+ + "\3\2\2\2\u0530\u0526\3\2\2\2\u0530\u0527\3\2\2\2\u0530\u0528\3\2\2\2\u0530"+ + "\u0529\3\2\2\2\u0530\u052a\3\2\2\2\u0530\u052b\3\2\2\2\u0530\u052c\3\2"+ + "\2\2\u0530\u052d\3\2\2\2\u0530\u052e\3\2\2\2\u0530\u052f\3\2\2\2\u0531"+ + "=\3\2\2\2\u0532\u0538\7\u0154\2\2\u0533\u0538\7\u014d\2\2\u0534\u0535"+ + "\7\u014d\2\2\u0535\u0536\7l\2\2\u0536\u0538\7\u020f\2\2\u0537\u0532\3"+ + "\2\2\2\u0537\u0533\3\2\2\2\u0537\u0534\3\2\2\2\u0538?\3\2\2\2\u0539\u053a"+ + "\7\u00ab\2\2\u053a\u053b\t\17\2\2\u053bA\3\2\2\2\u053c\u053e\7\u018d\2"+ + "\2\u053d\u053f\7\u03f7\2\2\u053e\u053d\3\2\2\2\u053e\u053f\3\2\2\2\u053f"+ + "\u0540\3\2\2\2\u0540\u054a\5\u0214\u010b\2\u0541\u054a\5@!\2\u0542\u0543"+ + "\7\u00b0\2\2\u0543\u0544\7\u01d4\2\2\u0544\u054a\5\u020c\u0107\2\u0545"+ + "\u0546\7\u0133\2\2\u0546\u054a\7\u040f\2\2\u0547\u054a\7\u0185\2\2\u0548"+ + "\u054a\7\u0248\2\2\u0549\u053c\3\2\2\2\u0549\u0541\3\2\2\2\u0549\u0542"+ + "\3\2\2\2\u0549\u0545\3\2\2\2\u0549\u0547\3\2\2\2\u0549\u0548\3\2\2\2\u054a"+ + "C\3\2\2\2\u054b\u054d\t\20\2\2\u054c\u054b\3\2\2\2\u054c\u054d\3\2\2\2"+ + "\u054d\u054e\3\2\2\2\u054e\u054f\5\u020c\u0107\2\u054f\u0550\5\u0220\u0111"+ + "\2\u0550E\3\2\2\2\u0551\u0552\5\u020c\u0107\2\u0552\u0553\5\u0220\u0111"+ + "\2\u0553G\3\2\2\2\u0554\u0555\7\u0133\2\2\u0555\u056c\7\u040f\2\2\u0556"+ + "\u0557\7\u018e\2\2\u0557\u056c\7\u0091\2\2\u0558\u055a\7h\2\2\u0559\u0558"+ + "\3\2\2\2\u0559\u055a\3\2\2\2\u055a\u055b\3\2\2\2\u055b\u056c\7-\2\2\u055c"+ + "\u055d\7\u013f\2\2\u055d\u0567\7\u0091\2\2\u055e\u055f\7\u01c3\2\2\u055f"+ + "\u0567\7\u0091\2\2\u0560\u0561\7{\2\2\u0561\u0562\7\u0091\2\2\u0562\u0567"+ + "\7\u0145\2\2\u0563\u0564\7f\2\2\u0564\u0565\7\u0091\2\2\u0565\u0567\7"+ + "\u0145\2\2\u0566\u055c\3\2\2\2\u0566\u055e\3\2\2\2\u0566\u0560\3\2\2\2"+ + "\u0566\u0563\3\2\2\2\u0567\u056c\3\2\2\2\u0568\u0569\7\u0091\2\2\u0569"+ + "\u056a\7\u0208\2\2\u056a\u056c\t\r\2\2\u056b\u0554\3\2\2\2\u056b\u0556"+ + "\3\2\2\2\u056b\u0559\3\2\2\2\u056b\u0566\3\2\2\2\u056b\u0568\3\2\2\2\u056c"+ + "I\3\2\2\2\u056d\u056e\7\u017a\2\2\u056e\u057c\7\u040f\2\2\u056f\u0570"+ + "\7%\2\2\u0570\u057c\7\u040f\2\2\u0571\u0572\7\u0240\2\2\u0572\u057c\7"+ + "\u040f\2\2\u0573\u0574\7\u01d8\2\2\u0574\u057c\7\u040f\2\2\u0575\u0576"+ + "\7\u0212\2\2\u0576\u057c\7\u040f\2\2\u0577\u0578\7\u01d1\2\2\u0578\u057c"+ + "\7\u040f\2\2\u0579\u057a\7\u01dd\2\2\u057a\u057c\5\u0212\u010a\2\u057b"+ + "\u056d\3\2\2\2\u057b\u056f\3\2\2\2\u057b\u0571\3\2\2\2\u057b\u0573\3\2"+ + "\2\2\u057b\u0575\3\2\2\2\u057b\u0577\3\2\2\2\u057b\u0579\3\2\2\2\u057c"+ + "K\3\2\2\2\u057d\u057e\7\u0400\2\2\u057e\u0583\5N(\2\u057f\u0580\7\u0402"+ + "\2\2\u0580\u0582\5N(\2\u0581\u057f\3\2\2\2\u0582\u0585\3\2\2\2\u0583\u0581"+ + "\3\2\2\2\u0583\u0584\3\2\2\2\u0584\u0586\3\2\2\2\u0585\u0583\3\2\2\2\u0586"+ + "\u0587\7\u0401\2\2\u0587M\3\2\2\2\u0588\u0589\5\u020c\u0107\2\u0589\u058a"+ + "\5P)\2\u058a\u058e\3\2\2\2\u058b\u058e\5T+\2\u058c\u058e\5\\/\2\u058d"+ + "\u0588\3\2\2\2\u058d\u058b\3\2\2\2\u058d\u058c\3\2\2\2\u058eO\3\2\2\2"+ + "\u058f\u0593\5\u0220\u0111\2\u0590\u0592\5R*\2\u0591\u0590\3\2\2\2\u0592"+ + "\u0595\3\2\2\2\u0593\u0591\3\2\2\2\u0593\u0594\3\2\2\2\u0594Q\3\2\2\2"+ + "\u0595\u0593\3\2\2\2\u0596\u05bf\5\u021c\u010f\2\u0597\u0598\7(\2\2\u0598"+ + "\u05bf\5\u023e\u0120\2\u0599\u059e\7\u011a\2\2\u059a\u059b\7l\2\2\u059b"+ + "\u059c\7\u00a8\2\2\u059c\u059e\5\u0240\u0121\2\u059d\u0599\3\2\2\2\u059d"+ + "\u059a\3\2\2\2\u059e\u05bf\3\2\2\2\u059f\u05a1\7v\2\2\u05a0\u059f\3\2"+ + "\2\2\u05a0\u05a1\3\2\2\2\u05a1\u05a2\3\2\2\2\u05a2\u05bf\7T\2\2\u05a3"+ + "\u05a5\7\u00a5\2\2\u05a4\u05a6\7T\2\2\u05a5\u05a4\3\2\2\2\u05a5\u05a6"+ + "\3\2\2\2\u05a6\u05bf\3\2\2\2\u05a7\u05a8\7\u0133\2\2\u05a8\u05bf\7\u040f"+ + "\2\2\u05a9\u05aa\7\u0131\2\2\u05aa\u05bf\t\21\2\2\u05ab\u05ac\7\u0225"+ + "\2\2\u05ac\u05bf\t\22\2\2\u05ad\u05bf\5V,\2\u05ae\u05af\7\32\2\2\u05af"+ + "\u05bf\5\u0200\u0101\2\u05b0\u05b1\7A\2\2\u05b1\u05b3\7\n\2\2\u05b2\u05b0"+ + "\3\2\2\2\u05b2\u05b3\3\2\2\2\u05b3\u05b4\3\2\2\2\u05b4\u05b5\7\r\2\2\u05b5"+ + "\u05b6\7\u0400\2\2\u05b6\u05b7\5\u025c\u012f\2\u05b7\u05b9\7\u0401\2\2"+ + "\u05b8\u05ba\t\23\2\2\u05b9\u05b8\3\2\2\2\u05b9\u05ba\3\2\2\2\u05ba\u05bf"+ + "\3\2\2\2\u05bb\u05bc\7\u00df\2\2\u05bc\u05bd\7(\2\2\u05bd\u05bf\7\u0244"+ + "\2\2\u05be\u0596\3\2\2\2\u05be\u0597\3\2\2\2\u05be\u059d\3\2\2\2\u05be"+ + "\u05a0\3\2\2\2\u05be\u05a3\3\2\2\2\u05be\u05a7\3\2\2\2\u05be\u05a9\3\2"+ + "\2\2\u05be\u05ab\3\2\2\2\u05be\u05ad\3\2\2\2\u05be\u05ae\3\2\2\2\u05be"+ + "\u05b2\3\2\2\2\u05be\u05bb\3\2\2\2\u05bfS\3\2\2\2\u05c0\u05c2\7\35\2\2"+ + "\u05c1\u05c3\5\u020c\u0107\2\u05c2\u05c1\3\2\2\2\u05c2\u05c3\3\2\2\2\u05c3"+ + "\u05c5\3\2\2\2\u05c4\u05c0\3\2\2\2\u05c4\u05c5\3\2\2\2\u05c5\u05c6\3\2"+ + "\2\2\u05c6\u05c7\7v\2\2\u05c7\u05c9\7T\2\2\u05c8\u05ca\5\u020c\u0107\2"+ + "\u05c9\u05c8\3\2\2\2\u05c9\u05ca\3\2\2\2\u05ca\u05cc\3\2\2\2\u05cb\u05cd"+ + "\5@!\2\u05cc\u05cb\3\2\2\2\u05cc\u05cd\3\2\2\2\u05cd\u05ce\3\2\2\2\u05ce"+ + "\u05d2\5\u0230\u0119\2\u05cf\u05d1\5B\"\2\u05d0\u05cf\3\2\2\2\u05d1\u05d4"+ + "\3\2\2\2\u05d2\u05d0\3\2\2\2\u05d2\u05d3\3\2\2\2\u05d3\u0606\3\2\2\2\u05d4"+ + "\u05d2\3\2\2\2\u05d5\u05d7\7\35\2\2\u05d6\u05d8\5\u020c\u0107\2\u05d7"+ + "\u05d6\3\2\2\2\u05d7\u05d8\3\2\2\2\u05d8\u05da\3\2\2\2\u05d9\u05d5\3\2"+ + "\2\2\u05d9\u05da\3\2\2\2\u05da\u05db\3\2\2\2\u05db\u05dd\7\u00a5\2\2\u05dc"+ + "\u05de\t\24\2\2\u05dd\u05dc\3\2\2\2\u05dd\u05de\3\2\2\2\u05de\u05e0\3"+ + "\2\2\2\u05df\u05e1\5\u020c\u0107\2\u05e0\u05df\3\2\2\2\u05e0\u05e1\3\2"+ + "\2\2\u05e1\u05e3\3\2\2\2\u05e2\u05e4\5@!\2\u05e3\u05e2\3\2\2\2\u05e3\u05e4"+ + "\3\2\2\2\u05e4\u05e5\3\2\2\2\u05e5\u05e9\5\u0230\u0119\2\u05e6\u05e8\5"+ + "B\"\2\u05e7\u05e6\3\2\2\2\u05e8\u05eb\3\2\2\2\u05e9\u05e7\3\2\2\2\u05e9"+ + "\u05ea\3\2\2\2\u05ea\u0606\3\2\2\2\u05eb\u05e9\3\2\2\2\u05ec\u05ee\7\35"+ + "\2\2\u05ed\u05ef\5\u020c\u0107\2\u05ee\u05ed\3\2\2\2\u05ee\u05ef\3\2\2"+ + "\2\u05ef\u05f1\3\2\2\2\u05f0\u05ec\3\2\2\2\u05f0\u05f1\3\2\2\2\u05f1\u05f2"+ + "\3\2\2\2\u05f2\u05f3\7>\2\2\u05f3\u05f5\7T\2\2\u05f4\u05f6\5\u020c\u0107"+ + "\2\u05f5\u05f4\3\2\2\2\u05f5\u05f6\3\2\2\2\u05f6\u05f7\3\2\2\2\u05f7\u05f8"+ + "\5\u0230\u0119\2\u05f8\u05f9\5V,\2\u05f9\u0606\3\2\2\2\u05fa\u05fc\7\35"+ + "\2\2\u05fb\u05fd\5\u020c\u0107\2\u05fc\u05fb\3\2\2\2\u05fc\u05fd\3\2\2"+ + "\2\u05fd\u05ff\3\2\2\2\u05fe\u05fa\3\2\2\2\u05fe\u05ff\3\2\2\2\u05ff\u0600"+ + "\3\2\2\2\u0600\u0601\7\31\2\2\u0601\u0602\7\u0400\2\2\u0602\u0603\5\u025c"+ + "\u012f\2\u0603\u0604\7\u0401\2\2\u0604\u0606\3\2\2\2\u0605\u05c4\3\2\2"+ + "\2\u0605\u05d9\3\2\2\2\u0605\u05f0\3\2\2\2\u0605\u05fe\3\2\2\2\u0606U"+ + "\3\2\2\2\u0607\u0608\7|\2\2\u0608\u060a\5\u01f4\u00fb\2\u0609\u060b\5"+ + "\u0230\u0119\2\u060a\u0609\3\2\2\2\u060a\u060b\3\2\2\2\u060b\u060e\3\2"+ + "\2\2\u060c\u060d\7d\2\2\u060d\u060f\t\25\2\2\u060e\u060c\3\2\2\2\u060e"+ + "\u060f\3\2\2\2\u060f\u0611\3\2\2\2\u0610\u0612\5X-\2\u0611\u0610\3\2\2"+ + "\2\u0611\u0612\3\2\2\2\u0612W\3\2\2\2\u0613\u0614\7l\2\2\u0614\u0615\7"+ + "*\2\2\u0615\u0619\5Z.\2\u0616\u0617\7l\2\2\u0617\u0618\7\u00a8\2\2\u0618"+ + "\u061a\5Z.\2\u0619\u0616\3\2\2\2\u0619\u061a\3\2\2\2\u061a\u0624\3\2\2"+ + "\2\u061b\u061c\7l\2\2\u061c\u061d\7\u00a8\2\2\u061d\u0621\5Z.\2\u061e"+ + "\u061f\7l\2\2\u061f\u0620\7*\2\2\u0620\u0622\5Z.\2\u0621\u061e\3\2\2\2"+ + "\u0621\u0622\3\2\2\2\u0622\u0624\3\2\2\2\u0623\u0613\3\2\2\2\u0623\u061b"+ + "\3\2\2\2\u0624Y\3\2\2\2\u0625\u062c\7\u0084\2\2\u0626\u062c\7\24\2\2\u0627"+ + "\u0628\7\u008c\2\2\u0628\u062c\7j\2\2\u0629\u062a\7\u01c3\2\2\u062a\u062c"+ + "\7\u0111\2\2\u062b\u0625\3\2\2\2\u062b\u0626\3\2\2\2\u062b\u0627\3\2\2"+ + "\2\u062b\u0629\3\2\2\2\u062c[\3\2\2\2\u062d\u062f\t\24\2\2\u062e\u0630"+ + "\5\u020c\u0107\2\u062f\u062e\3\2\2\2\u062f\u0630\3\2\2\2\u0630\u0632\3"+ + "\2\2\2\u0631\u0633\5@!\2\u0632\u0631\3\2\2\2\u0632\u0633\3\2\2\2\u0633"+ + "\u0634\3\2\2\2\u0634\u0638\5\u0230\u0119\2\u0635\u0637\5B\"\2\u0636\u0635"+ + "\3\2\2\2\u0637\u063a\3\2\2\2\u0638\u0636\3\2\2\2\u0638\u0639\3\2\2\2\u0639"+ + "\u064a\3\2\2\2\u063a\u0638\3\2\2\2\u063b\u063d\t\26\2\2\u063c\u063e\t"+ + "\24\2\2\u063d\u063c\3\2\2\2\u063d\u063e\3\2\2\2\u063e\u0640\3\2\2\2\u063f"+ + "\u0641\5\u020c\u0107\2\u0640\u063f\3\2\2\2\u0640\u0641\3\2\2\2\u0641\u0642"+ + "\3\2\2\2\u0642\u0646\5\u0230\u0119\2\u0643\u0645\5B\"\2\u0644\u0643\3"+ + "\2\2\2\u0645\u0648\3\2\2\2\u0646\u0644\3\2\2\2\u0646\u0647\3\2\2\2\u0647"+ + "\u064a\3\2\2\2\u0648\u0646\3\2\2\2\u0649\u062d\3\2\2\2\u0649\u063b\3\2"+ + "\2\2\u064a]\3\2\2\2\u064b\u064d\7\u0158\2\2\u064c\u064e\7\u03f7\2\2\u064d"+ + "\u064c\3\2\2\2\u064d\u064e\3\2\2\2\u064e\u064f\3\2\2\2\u064f\u06dc\5\u0202"+ + "\u0102\2\u0650\u0652\7\u011a\2\2\u0651\u0653\7\u03f7\2\2\u0652\u0651\3"+ + "\2\2\2\u0652\u0653\3\2\2\2\u0653\u0654\3\2\2\2\u0654\u06dc\5\u0212\u010a"+ + "\2\u0655\u0657\7\u011b\2\2\u0656\u0658\7\u03f7\2\2\u0657\u0656\3\2\2\2"+ + "\u0657\u0658\3\2\2\2\u0658\u0659\3\2\2\2\u0659\u06dc\5\u0212\u010a\2\u065a"+ + "\u065c\7(\2\2\u065b\u065a\3\2\2\2\u065b\u065c\3\2\2\2\u065c\u0660\3\2"+ + "\2\2\u065d\u065e\7\30\2\2\u065e\u0661\7\u008c\2\2\u065f\u0661\7\u02df"+ + "\2\2\u0660\u065d\3\2\2\2\u0660\u065f\3\2\2\2\u0661\u0663\3\2\2\2\u0662"+ + "\u0664\7\u03f7\2\2\u0663\u0662\3\2\2\2\u0663\u0664\3\2\2\2\u0664\u0667"+ + "\3\2\2\2\u0665\u0668\5\u01fe\u0100\2\u0666\u0668\7(\2\2\u0667\u0665\3"+ + "\2\2\2\u0667\u0666\3\2\2\2\u0668\u06dc\3\2\2\2\u0669\u066b\t\27\2\2\u066a"+ + "\u066c\7\u03f7\2\2\u066b\u066a\3\2\2\2\u066b\u066c\3\2\2\2\u066c\u066d"+ + "\3\2\2\2\u066d\u06dc\t\30\2\2\u066e\u0670\7(\2\2\u066f\u066e\3\2\2\2\u066f"+ + "\u0670\3\2\2\2\u0670\u0671\3\2\2\2\u0671\u0673\7\32\2\2\u0672\u0674\7"+ + "\u03f7\2\2\u0673\u0672\3\2\2\2\u0673\u0674\3\2\2\2\u0674\u0675\3\2\2\2"+ + "\u0675\u06dc\5\u0200\u0101\2\u0676\u0678\7\u0133\2\2\u0677\u0679\7\u03f7"+ + "\2\2\u0678\u0677\3\2\2\2\u0678\u0679\3\2\2\2\u0679\u067a\3\2\2\2\u067a"+ + "\u06dc\7\u040f\2\2\u067b\u067d\7\u0138\2\2\u067c\u067e\7\u03f7\2\2\u067d"+ + "\u067c\3\2\2\2\u067d\u067e\3\2\2\2\u067e\u067f\3\2\2\2\u067f\u06dc\t\31"+ + "\2\2\u0680\u0682\7\u013a\2\2\u0681\u0683\7\u03f7\2\2\u0682\u0681\3\2\2"+ + "\2\u0682\u0683\3\2\2\2\u0683\u0684\3\2\2\2\u0684\u06dc\7\u040f\2\2\u0685"+ + "\u0686\7\u0145\2\2\u0686\u0688\7\u014c\2\2\u0687\u0689\7\u03f7\2\2\u0688"+ + "\u0687\3\2\2\2\u0688\u0689\3\2\2\2\u0689\u068a\3\2\2\2\u068a\u06dc\7\u040f"+ + "\2\2\u068b\u068d\7\u014a\2\2\u068c\u068e\7\u03f7\2\2\u068d\u068c\3\2\2"+ + "\2\u068d\u068e\3\2\2\2\u068e\u068f\3\2\2\2\u068f\u06dc\t\30\2\2\u0690"+ + "\u0692\7\u0155\2\2\u0691\u0693\7\u03f7\2\2\u0692\u0691\3\2\2\2\u0692\u0693"+ + "\3\2\2\2\u0693\u0694\3\2\2\2\u0694\u06dc\7\u040f\2\2\u0695\u0696\7J\2"+ + "\2\u0696\u0698\7\u014c\2\2\u0697\u0699\7\u03f7\2\2\u0698\u0697\3\2\2\2"+ + "\u0698\u0699\3\2\2\2\u0699\u069a\3\2\2\2\u069a\u06dc\7\u040f\2\2\u069b"+ + "\u069d\7\u0182\2\2\u069c\u069e\7\u03f7\2\2\u069d\u069c\3\2\2\2\u069d\u069e"+ + "\3\2\2\2\u069e\u069f\3\2\2\2\u069f\u06dc\t\32\2\2\u06a0\u06a2\7\u018d"+ + "\2\2\u06a1\u06a3\7\u03f7\2\2\u06a2\u06a1\3\2\2\2\u06a2\u06a3\3\2\2\2\u06a3"+ + "\u06a4\3\2\2\2\u06a4\u06dc\5\u0214\u010b\2\u06a5\u06a7\7\u01ae\2\2\u06a6"+ + "\u06a8\7\u03f7\2\2\u06a7\u06a6\3\2\2\2\u06a7\u06a8\3\2\2\2\u06a8\u06a9"+ + "\3\2\2\2\u06a9\u06dc\5\u0212\u010a\2\u06aa\u06ac\7\u01b8\2\2\u06ab\u06ad"+ + "\7\u03f7\2\2\u06ac\u06ab\3\2\2\2\u06ac\u06ad\3\2\2\2\u06ad\u06ae\3\2\2"+ + "\2\u06ae\u06dc\5\u0212\u010a\2\u06af\u06b1\7\u01d2\2\2\u06b0\u06b2\7\u03f7"+ + "\2\2\u06b1\u06b0\3\2\2\2\u06b1\u06b2\3\2\2\2\u06b2\u06b3\3\2\2\2\u06b3"+ + "\u06dc\t\33\2\2\u06b4\u06b6\7\u01d8\2\2\u06b5\u06b7\7\u03f7\2\2\u06b6"+ + "\u06b5\3\2\2\2\u06b6\u06b7\3\2\2\2\u06b7\u06b8\3\2\2\2\u06b8\u06dc\7\u040f"+ + "\2\2\u06b9\u06bb\7\u0205\2\2\u06ba\u06bc\7\u03f7\2\2\u06bb\u06ba\3\2\2"+ + "\2\u06bb\u06bc\3\2\2\2\u06bc\u06bd\3\2\2\2\u06bd\u06dc\t\34\2\2\u06be"+ + "\u06c0\7\u0220\2\2\u06bf\u06c1\7\u03f7\2\2\u06c0\u06bf\3\2\2\2\u06c0\u06c1"+ + "\3\2\2\2\u06c1\u06c2\3\2\2\2\u06c2\u06dc\t\33\2\2\u06c3\u06c5\7\u0221"+ + "\2\2\u06c4\u06c6\7\u03f7\2\2\u06c5\u06c4\3\2\2\2\u06c5\u06c6\3\2\2\2\u06c6"+ + "\u06c7\3\2\2\2\u06c7\u06dc\t\33\2\2\u06c8\u06ca\7\u0222\2\2\u06c9\u06cb"+ + "\7\u03f7\2\2\u06ca\u06c9\3\2\2\2\u06ca\u06cb\3\2\2\2\u06cb\u06cc\3\2\2"+ + "\2\u06cc\u06dc\5\u0212\u010a\2\u06cd\u06ce\7\u0230\2\2\u06ce\u06d0\5\u020c"+ + "\u0107\2\u06cf\u06d1\5`\61\2\u06d0\u06cf\3\2\2\2\u06d0\u06d1\3\2\2\2\u06d1"+ + "\u06dc\3\2\2\2\u06d2\u06dc\5`\61\2\u06d3\u06d5\7\u00a4\2\2\u06d4\u06d6"+ + "\7\u03f7\2\2\u06d5\u06d4\3\2\2\2\u06d5\u06d6\3\2\2\2\u06d6\u06d7\3\2\2"+ + "\2\u06d7\u06d8\7\u0400\2\2\u06d8\u06d9\5\u022e\u0118\2\u06d9\u06da\7\u0401"+ + "\2\2\u06da\u06dc\3\2\2\2\u06db\u064b\3\2\2\2\u06db\u0650\3\2\2\2\u06db"+ + "\u0655\3\2\2\2\u06db\u065b\3\2\2\2\u06db\u0669\3\2\2\2\u06db\u066f\3\2"+ + "\2\2\u06db\u0676\3\2\2\2\u06db\u067b\3\2\2\2\u06db\u0680\3\2\2\2\u06db"+ + "\u0685\3\2\2\2\u06db\u068b\3\2\2\2\u06db\u0690\3\2\2\2\u06db\u0695\3\2"+ + "\2\2\u06db\u069b\3\2\2\2\u06db\u06a0\3\2\2\2\u06db\u06a5\3\2\2\2\u06db"+ + "\u06aa\3\2\2\2\u06db\u06af\3\2\2\2\u06db\u06b4\3\2\2\2\u06db\u06b9\3\2"+ + "\2\2\u06db\u06be\3\2\2\2\u06db\u06c3\3\2\2\2\u06db\u06c8\3\2\2\2\u06db"+ + "\u06cd\3\2\2\2\u06db\u06d2\3\2\2\2\u06db\u06d3\3\2\2\2\u06dc_\3\2\2\2"+ + "\u06dd\u06de\7\u0225\2\2\u06de\u06df\t\22\2\2\u06dfa\3\2\2\2\u06e0\u06e1"+ + "\7u\2\2\u06e1\u06e2\7\22\2\2\u06e2\u06e5\5d\63\2\u06e3\u06e4\7\u01d7\2"+ + "\2\u06e4\u06e6\5\u0212\u010a\2\u06e5\u06e3\3\2\2\2\u06e5\u06e6\3\2\2\2"+ + "\u06e6\u06ee\3\2\2\2\u06e7\u06e8\7\u022a\2\2\u06e8\u06e9\7\22\2\2\u06e9"+ + "\u06ec\5f\64\2\u06ea\u06eb\7\u022b\2\2\u06eb\u06ed\5\u0212\u010a\2\u06ec"+ + "\u06ea\3\2\2\2\u06ec\u06ed\3\2\2\2\u06ed\u06ef\3\2\2\2\u06ee\u06e7\3\2"+ + "\2\2\u06ee\u06ef\3\2\2\2\u06ef\u06fb\3\2\2\2\u06f0\u06f1\7\u0400\2\2\u06f1"+ + "\u06f6\5h\65\2\u06f2\u06f3\7\u0402\2\2\u06f3\u06f5\5h\65\2\u06f4\u06f2"+ + "\3\2\2\2\u06f5\u06f8\3\2\2\2\u06f6\u06f4\3\2\2\2\u06f6\u06f7\3\2\2\2\u06f7"+ + "\u06f9\3\2\2\2\u06f8\u06f6\3\2\2\2\u06f9\u06fa\7\u0401\2\2\u06fa\u06fc"+ + "\3\2\2\2\u06fb\u06f0\3\2\2\2\u06fb\u06fc\3\2\2\2\u06fcc\3\2\2\2\u06fd"+ + "\u06ff\7\\\2\2\u06fe\u06fd\3\2\2\2\u06fe\u06ff\3\2\2\2\u06ff\u0700\3\2"+ + "\2\2\u0700\u0701\7\u0178\2\2\u0701\u0702\7\u0400\2\2\u0702\u0703\5\u025c"+ + "\u012f\2\u0703\u0704\7\u0401\2\2\u0704\u072b\3\2\2\2\u0705\u0707\7\\\2"+ + "\2\u0706\u0705\3\2\2\2\u0706\u0707\3\2\2\2\u0707\u0708\3\2\2\2\u0708\u070c"+ + "\7T\2\2\u0709\u070a\7\u0114\2\2\u070a\u070b\7\u03f7\2\2\u070b\u070d\t"+ + "\35\2\2\u070c\u0709\3\2\2\2\u070c\u070d\3\2\2\2\u070d\u070e\3\2\2\2\u070e"+ + "\u070f\7\u0400\2\2\u070f\u0710\5\u022c\u0117\2\u0710\u0711\7\u0401\2\2"+ + "\u0711\u072b\3\2\2\2\u0712\u071c\7y\2\2\u0713\u0714\7\u0400\2\2\u0714"+ + "\u0715\5\u025c\u012f\2\u0715\u0716\7\u0401\2\2\u0716\u071d\3\2\2\2\u0717"+ + "\u0718\7\u0130\2\2\u0718\u0719\7\u0400\2\2\u0719\u071a\5\u022c\u0117\2"+ + "\u071a\u071b\7\u0401\2\2\u071b\u071d\3\2\2\2\u071c\u0713\3\2\2\2\u071c"+ + "\u0717\3\2\2\2\u071d\u072b\3\2\2\2\u071e\u0728\7\u0193\2\2\u071f\u0720"+ + "\7\u0400\2\2\u0720\u0721\5\u025c\u012f\2\u0721\u0722\7\u0401\2\2\u0722"+ + "\u0729\3\2\2\2\u0723\u0724\7\u0130\2\2\u0724\u0725\7\u0400\2\2\u0725\u0726"+ + "\5\u022c\u0117\2\u0726\u0727\7\u0401\2\2\u0727\u0729\3\2\2\2\u0728\u071f"+ + "\3\2\2\2\u0728\u0723\3\2\2\2\u0729\u072b\3\2\2\2\u072a\u06fe\3\2\2\2\u072a"+ + "\u0706\3\2\2\2\u072a\u0712\3\2\2\2\u072a\u071e\3\2\2\2\u072be\3\2\2\2"+ + "\u072c\u072e\7\\\2\2\u072d\u072c\3\2\2\2\u072d\u072e\3\2\2\2\u072e\u072f"+ + "\3\2\2\2\u072f\u0730\7\u0178\2\2\u0730\u0731\7\u0400\2\2\u0731\u0732\5"+ + "\u025c\u012f\2\u0732\u0733\7\u0401\2\2\u0733\u0742\3\2\2\2\u0734\u0736"+ + "\7\\\2\2\u0735\u0734\3\2\2\2\u0735\u0736\3\2\2\2\u0736\u0737\3\2\2\2\u0737"+ + "\u073b\7T\2\2\u0738\u0739\7\u0114\2\2\u0739\u073a\7\u03f7\2\2\u073a\u073c"+ + "\t\35\2\2\u073b\u0738\3\2\2\2\u073b\u073c\3\2\2\2\u073c\u073d\3\2\2\2"+ + "\u073d\u073e\7\u0400\2\2\u073e\u073f\5\u022c\u0117\2\u073f\u0740\7\u0401"+ + "\2\2\u0740\u0742\3\2\2\2\u0741\u072d\3\2\2\2\u0741\u0735\3\2\2\2\u0742"+ + "g\3\2\2\2\u0743\u0744\7u\2\2\u0744\u0745\5\u020c\u0107\2\u0745\u0746\7"+ + "\u00ac\2\2\u0746\u0747\7\u0191\2\2\u0747\u0748\7\u0233\2\2\u0748\u0749"+ + "\7\u0400\2\2\u0749\u074e\5j\66\2\u074a\u074b\7\u0402\2\2\u074b\u074d\5"+ + "j\66\2\u074c\u074a\3\2\2\2\u074d\u0750\3\2\2\2\u074e\u074c\3\2\2\2\u074e"+ + "\u074f\3\2\2\2\u074f\u0751\3\2\2\2\u0750\u074e\3\2\2\2\u0751\u0755\7\u0401"+ + "\2\2\u0752\u0754\5p9\2\u0753\u0752\3\2\2\2\u0754\u0757\3\2\2\2\u0755\u0753"+ + "\3\2\2\2\u0755\u0756\3\2\2\2\u0756\u0760\3\2\2\2\u0757\u0755\3\2\2\2\u0758"+ + "\u075d\5n8\2\u0759\u075a\7\u0402\2\2\u075a\u075c\5n8\2\u075b\u0759\3\2"+ + "\2\2\u075c\u075f\3\2\2\2\u075d\u075b\3\2\2\2\u075d\u075e\3\2\2\2\u075e"+ + "\u0761\3\2\2\2\u075f\u075d\3\2\2\2\u0760\u0758\3\2\2\2\u0760\u0761\3\2"+ + "\2\2\u0761\u07c7\3\2\2\2\u0762\u0763\7u\2\2\u0763\u0764\5\u020c\u0107"+ + "\2\u0764\u0765\7\u00ac\2\2\u0765\u0766\7\u0191\2\2\u0766\u0767\7\u0233"+ + "\2\2\u0767\u076b\5j\66\2\u0768\u076a\5p9\2\u0769\u0768\3\2\2\2\u076a\u076d"+ + "\3\2\2\2\u076b\u0769\3\2\2\2\u076b\u076c\3\2\2\2\u076c\u0776\3\2\2\2\u076d"+ + "\u076b\3\2\2\2\u076e\u0773\5n8\2\u076f\u0770\7\u0402\2\2\u0770\u0772\5"+ + "n8\2\u0771\u076f\3\2\2\2\u0772\u0775\3\2\2\2\u0773\u0771\3\2\2\2\u0773"+ + "\u0774\3\2\2\2\u0774\u0777\3\2\2\2\u0775\u0773\3\2\2\2\u0776\u076e\3\2"+ + "\2\2\u0776\u0777\3\2\2\2\u0777\u07c7\3\2\2\2\u0778\u0779\7u\2\2\u0779"+ + "\u077a\5\u020c\u0107\2\u077a\u077b\7\u00ac\2\2\u077b\u077c\7I\2\2\u077c"+ + "\u077d\7\u0400\2\2\u077d\u0782\5j\66\2\u077e\u077f\7\u0402\2\2\u077f\u0781"+ + "\5j\66\2\u0780\u077e\3\2\2\2\u0781\u0784\3\2\2\2\u0782\u0780\3\2\2\2\u0782"+ + "\u0783\3\2\2\2\u0783\u0785\3\2\2\2\u0784\u0782\3\2\2\2\u0785\u0789\7\u0401"+ + "\2\2\u0786\u0788\5p9\2\u0787\u0786\3\2\2\2\u0788\u078b\3\2\2\2\u0789\u0787"+ + "\3\2\2\2\u0789\u078a\3\2\2\2\u078a\u0794\3\2\2\2\u078b\u0789\3\2\2\2\u078c"+ + "\u0791\5n8\2\u078d\u078e\7\u0402\2\2\u078e\u0790\5n8\2\u078f\u078d\3\2"+ + "\2\2\u0790\u0793\3\2\2\2\u0791\u078f\3\2\2\2\u0791\u0792\3\2\2\2\u0792"+ + "\u0795\3\2\2\2\u0793\u0791\3\2\2\2\u0794\u078c\3\2\2\2\u0794\u0795\3\2"+ + "\2\2\u0795\u07c7\3\2\2\2\u0796\u0797\7u\2\2\u0797\u0798\5\u020c\u0107"+ + "\2\u0798\u0799\7\u00ac\2\2\u0799\u079a\7I\2\2\u079a\u079b\7\u0400\2\2"+ + "\u079b\u07a0\5l\67\2\u079c\u079d\7\u0402\2\2\u079d\u079f\5l\67\2\u079e"+ + "\u079c\3\2\2\2\u079f\u07a2\3\2\2\2\u07a0\u079e\3\2\2\2\u07a0\u07a1\3\2"+ + "\2\2\u07a1\u07a3\3\2\2\2\u07a2\u07a0\3\2\2\2\u07a3\u07a7\7\u0401\2\2\u07a4"+ + "\u07a6\5p9\2\u07a5\u07a4\3\2\2\2\u07a6\u07a9\3\2\2\2\u07a7\u07a5\3\2\2"+ + "\2\u07a7\u07a8\3\2\2\2\u07a8\u07b2\3\2\2\2\u07a9\u07a7\3\2\2\2\u07aa\u07af"+ + "\5n8\2\u07ab\u07ac\7\u0402\2\2\u07ac\u07ae\5n8\2\u07ad\u07ab\3\2\2\2\u07ae"+ + "\u07b1\3\2\2\2\u07af\u07ad\3\2\2\2\u07af\u07b0\3\2\2\2\u07b0\u07b3\3\2"+ + "\2\2\u07b1\u07af\3\2\2\2\u07b2\u07aa\3\2\2\2\u07b2\u07b3\3\2\2\2\u07b3"+ + "\u07c7\3\2\2\2\u07b4\u07b5\7u\2\2\u07b5\u07b9\5\u020c\u0107\2\u07b6\u07b8"+ + "\5p9\2\u07b7\u07b6\3\2\2\2\u07b8\u07bb\3\2\2\2\u07b9\u07b7\3\2\2\2\u07b9"+ + "\u07ba\3\2\2\2\u07ba\u07c4\3\2\2\2\u07bb\u07b9\3\2\2\2\u07bc\u07c1\5n"+ + "8\2\u07bd\u07be\7\u0402\2\2\u07be\u07c0\5n8\2\u07bf\u07bd\3\2\2\2\u07c0"+ + "\u07c3\3\2\2\2\u07c1\u07bf\3\2\2\2\u07c1\u07c2\3\2\2\2\u07c2\u07c5\3\2"+ + "\2\2\u07c3\u07c1\3\2\2\2\u07c4\u07bc\3\2\2\2\u07c4\u07c5\3\2\2\2\u07c5"+ + "\u07c7\3\2\2\2\u07c6\u0743\3\2\2\2\u07c6\u0762\3\2\2\2\u07c6\u0778\3\2"+ + "\2\2\u07c6\u0796\3\2\2\2\u07c6\u07b4\3\2\2\2\u07c7i\3\2\2\2\u07c8\u07cc"+ + "\5\u021e\u0110\2\u07c9\u07cc\5\u025c\u012f\2\u07ca\u07cc\7e\2\2\u07cb"+ + "\u07c8\3\2\2\2\u07cb\u07c9\3\2\2\2\u07cb\u07ca\3\2\2\2\u07cck\3\2\2\2"+ + "\u07cd\u07ce\7\u0400\2\2\u07ce\u07d1\5j\66\2\u07cf\u07d0\7\u0402\2\2\u07d0"+ + "\u07d2\5j\66\2\u07d1\u07cf\3\2\2\2\u07d2\u07d3\3\2\2\2\u07d3\u07d1\3\2"+ + "\2\2\u07d3\u07d4\3\2\2\2\u07d4\u07d5\3\2\2\2\u07d5\u07d6\7\u0401\2\2\u07d6"+ + "m\3\2\2\2\u07d7\u07d8\7\u022a\2\2\u07d8\u07dc\5\u020c\u0107\2\u07d9\u07db"+ + "\5p9\2\u07da\u07d9\3\2\2\2\u07db\u07de\3\2\2\2\u07dc\u07da\3\2\2\2\u07dc"+ + "\u07dd\3\2\2\2\u07ddo\3\2\2\2\u07de\u07dc\3\2\2\2\u07df\u07e1\7\u0225"+ + "\2\2\u07e0\u07df\3\2\2\2\u07e0\u07e1\3\2\2\2\u07e1\u07e2\3\2\2\2\u07e2"+ + "\u07e4\7\u0158\2\2\u07e3\u07e5\7\u03f7\2\2\u07e4\u07e3\3\2\2\2\u07e4\u07e5"+ + "\3\2\2\2\u07e5\u07e6\3\2\2\2\u07e6\u080d\5\u0202\u0102\2\u07e7\u07e9\7"+ + "\u0133\2\2\u07e8\u07ea\7\u03f7\2\2\u07e9\u07e8\3\2\2\2\u07e9\u07ea\3\2"+ + "\2\2\u07ea\u07eb\3\2\2\2\u07eb\u080d\7\u040f\2\2\u07ec\u07ed\7\u0145\2"+ + "\2\u07ed\u07ef\7\u014c\2\2\u07ee\u07f0\7\u03f7\2\2\u07ef\u07ee\3\2\2\2"+ + "\u07ef\u07f0\3\2\2\2\u07f0\u07f1\3\2\2\2\u07f1\u080d\7\u040f\2\2\u07f2"+ + "\u07f3\7J\2\2\u07f3\u07f5\7\u014c\2\2\u07f4\u07f6\7\u03f7\2\2\u07f5\u07f4"+ + "\3\2\2\2\u07f5\u07f6\3\2\2\2\u07f6\u07f7\3\2\2\2\u07f7\u080d\7\u040f\2"+ + "\2\u07f8\u07fa\7\u01ae\2\2\u07f9\u07fb\7\u03f7\2\2\u07fa\u07f9\3\2\2\2"+ + "\u07fa\u07fb\3\2\2\2\u07fb\u07fc\3\2\2\2\u07fc\u080d\5\u0212\u010a\2\u07fd"+ + "\u07ff\7\u01b8\2\2\u07fe\u0800\7\u03f7\2\2\u07ff\u07fe\3\2\2\2\u07ff\u0800"+ + "\3\2\2\2\u0800\u0801\3\2\2\2\u0801\u080d\5\u0212\u010a\2\u0802\u0804\7"+ + "\u0230\2\2\u0803\u0805\7\u03f7\2\2\u0804\u0803\3\2\2\2\u0804\u0805\3\2"+ + "\2\2\u0805\u0806\3\2\2\2\u0806\u080d\5\u020c\u0107\2\u0807\u0809\7\u01c4"+ + "\2\2\u0808\u080a\7\u03f7\2\2\u0809\u0808\3\2\2\2\u0809\u080a\3\2\2\2\u080a"+ + "\u080b\3\2\2\2\u080b\u080d\5\u020c\u0107\2\u080c\u07e0\3\2\2\2\u080c\u07e7"+ + "\3\2\2\2\u080c\u07ec\3\2\2\2\u080c\u07f2\3\2\2\2\u080c\u07f8\3\2\2\2\u080c"+ + "\u07fd\3\2\2\2\u080c\u0802\3\2\2\2\u080c\u0807\3\2\2\2\u080dq\3\2\2\2"+ + "\u080e\u080f\7\t\2\2\u080f\u0811\t\2\2\2\u0810\u0812\5\u020c\u0107\2\u0811"+ + "\u0810\3\2\2\2\u0811\u0812\3\2\2\2\u0812\u0814\3\2\2\2\u0813\u0815\5\62"+ + "\32\2\u0814\u0813\3\2\2\2\u0815\u0816\3\2\2\2\u0816\u0814\3\2\2\2\u0816"+ + "\u0817\3\2\2\2\u0817\u0821\3\2\2\2\u0818\u0819\7\t\2\2\u0819\u081a\t\2"+ + "\2\2\u081a\u081b\5\u020c\u0107\2\u081b\u081c\7\u023f\2\2\u081c\u081d\7"+ + "\u0145\2\2\u081d\u081e\7\u014c\2\2\u081e\u081f\7\u01be\2\2\u081f\u0821"+ + "\3\2\2\2\u0820\u080e\3\2\2\2\u0820\u0818\3\2\2\2\u0821s\3\2\2\2\u0822"+ + "\u0824\7\t\2\2\u0823\u0825\5\64\33\2\u0824\u0823\3\2\2\2\u0824\u0825\3"+ + "\2\2\2\u0825\u0826\3\2\2\2\u0826\u0827\7\u015e\2\2\u0827\u082b\5\u01f2"+ + "\u00fa\2\u0828\u0829\7l\2\2\u0829\u082a\7\u0207\2\2\u082a\u082c\5\66\34"+ + "\2\u082b\u0828\3\2\2\2\u082b\u082c\3\2\2\2\u082c\u0833\3\2\2\2\u082d\u082e"+ + "\7l\2\2\u082e\u0830\7\u0136\2\2\u082f\u0831\7h\2\2\u0830\u082f\3\2\2\2"+ + "\u0830\u0831\3\2\2\2\u0831\u0832\3\2\2\2\u0832\u0834\7\u01e0\2\2\u0833"+ + "\u082d\3\2\2\2\u0833\u0834\3\2\2\2\u0834\u0838\3\2\2\2\u0835\u0836\7\177"+ + "\2\2\u0836\u0837\7\u009f\2\2\u0837\u0839\5\u01f2\u00fa\2\u0838\u0835\3"+ + "\2\2\2\u0838\u0839\3\2\2\2\u0839\u083b\3\2\2\2\u083a\u083c\5> \2\u083b"+ + "\u083a\3\2\2\2\u083b\u083c\3\2\2\2\u083c\u083f\3\2\2\2\u083d\u083e\7\u0133"+ + "\2\2\u083e\u0840\7\u040f\2\2\u083f\u083d\3\2\2\2\u083f\u0840\3\2\2\2\u0840"+ + "\u0843\3\2\2\2\u0841\u0842\7\u0150\2\2\u0842\u0844\5\u015a\u00ae\2\u0843"+ + "\u0841\3\2\2\2\u0843\u0844\3\2\2\2\u0844u\3\2\2\2\u0845\u0846\7\t\2\2"+ + "\u0846\u0847\7\u0172\2\2\u0847\u084b\5\u01f2\u00fa\2\u0848\u084a\5H%\2"+ + "\u0849\u0848\3\2\2\2\u084a\u084d\3\2\2\2\u084b\u0849\3\2\2\2\u084b\u084c"+ + "\3\2\2\2\u084cw\3\2\2\2\u084d\u084b\3\2\2\2\u084e\u084f\7\t\2\2\u084f"+ + "\u0850\7\u0184\2\2\u0850\u0851\7\u0202\2\2\u0851\u0852\7\u02ad\2\2\u0852"+ + "\u0853\7\u0197\2\2\u0853\u0854\7T\2\2\u0854y\3\2\2\2\u0855\u0856\7\t\2"+ + "\2\u0856\u0857\7\u0195\2\2\u0857\u0858\7D\2\2\u0858\u0859\5\u020c\u0107"+ + "\2\u0859\u085a\7\7\2\2\u085a\u085b\7\u023a\2\2\u085b\u0861\7\u040f\2\2"+ + "\u085c\u085e\7\u0180\2\2\u085d\u085f\7\u03f7\2\2\u085e\u085d\3\2\2\2\u085e"+ + "\u085f\3\2\2\2\u085f\u0860\3\2\2\2\u0860\u0862\5\u0214\u010b\2\u0861\u085c"+ + "\3\2\2\2\u0861\u0862\3\2\2\2\u0862\u0864\3\2\2\2\u0863\u0865\7\u0249\2"+ + "\2\u0864\u0863\3\2\2\2\u0864\u0865\3\2\2\2\u0865\u0866\3\2\2\2\u0866\u0868"+ + "\7\u0158\2\2\u0867\u0869\7\u03f7\2\2\u0868\u0867\3\2\2\2\u0868\u0869\3"+ + "\2\2\2\u0869\u086a\3\2\2\2\u086a\u086b\5\u0202\u0102\2\u086b{\3\2\2\2"+ + "\u086c\u086d\7\t\2\2\u086d\u086e\7w\2\2\u086e\u0872\5\u01f2\u00fa\2\u086f"+ + "\u0871\5H%\2\u0870\u086f\3\2\2\2\u0871\u0874\3\2\2\2\u0872\u0870\3\2\2"+ + "\2\u0872\u0873\3\2\2\2\u0873}\3\2\2\2\u0874\u0872\3\2\2\2\u0875\u0876"+ + "\7\t\2\2\u0876\u0877\7\u0209\2\2\u0877\u0878\5\u020c\u0107\2\u0878\u0879"+ + "\7\u01d0\2\2\u0879\u087a\7\u0400\2\2\u087a\u087f\5J&\2\u087b\u087c\7\u0402"+ + "\2\2\u087c\u087e\5J&\2\u087d\u087b\3\2\2\2\u087e\u0881\3\2\2\2\u087f\u087d"+ + "\3\2\2\2\u087f\u0880\3\2\2\2\u0880\u0882\3\2\2\2\u0881\u087f\3\2\2\2\u0882"+ + "\u0883\7\u0401\2\2\u0883\177\3\2\2\2\u0884\u0886\7\t\2\2\u0885\u0887\t"+ + "\3\2\2\u0886\u0885\3\2\2\2\u0886\u0887\3\2\2\2\u0887\u0889\3\2\2\2\u0888"+ + "\u088a\7H\2\2\u0889\u0888\3\2\2\2\u0889\u088a\3\2\2\2\u088a\u088b\3\2"+ + "\2\2\u088b\u088c\7\u009c\2\2\u088c\u0895\5\u01f4\u00fb\2\u088d\u0892\5"+ + "\u0086D\2\u088e\u088f\7\u0402\2\2\u088f\u0891\5\u0086D\2\u0890\u088e\3"+ + "\2\2\2\u0891\u0894\3\2\2\2\u0892\u0890\3\2\2\2\u0892\u0893\3\2\2\2\u0893"+ + "\u0896\3\2\2\2\u0894\u0892\3\2\2\2\u0895\u088d\3\2\2\2\u0895\u0896\3\2"+ + "\2\2\u0896\u0898\3\2\2\2\u0897\u0899\5b\62\2\u0898\u0897\3\2\2\2\u0898"+ + "\u0899\3\2\2\2\u0899\u0081\3\2\2\2\u089a\u089b\7\t\2\2\u089b\u089c\7\u0230"+ + "\2\2\u089c\u089d\5\u020c\u0107\2\u089d\u089e\t\36\2\2\u089e\u089f\7\u0146"+ + "\2\2\u089f\u08a3\7\u040f\2\2\u08a0\u08a1\7\u0180\2\2\u08a1\u08a2\7\u03f7"+ + "\2\2\u08a2\u08a4\5\u0214\u010b\2\u08a3\u08a0\3\2\2\2\u08a3\u08a4\3\2\2"+ + "\2\u08a4\u08a6\3\2\2\2\u08a5\u08a7\7\u0249\2\2\u08a6\u08a5\3\2\2\2\u08a6"+ + "\u08a7\3\2\2\2\u08a7\u08a8\3\2\2\2\u08a8\u08aa\7\u0158\2\2\u08a9\u08ab"+ + "\7\u03f7\2\2\u08aa\u08a9\3\2\2\2\u08aa\u08ab\3\2\2\2\u08ab\u08ac\3\2\2"+ + "\2\u08ac\u08ad\5\u0202\u0102\2\u08ad\u0083\3\2\2\2\u08ae\u08b2\7\t\2\2"+ + "\u08af\u08b0\7\u0114\2\2\u08b0\u08b1\7\u03f7\2\2\u08b1\u08b3\t\f\2\2\u08b2"+ + "\u08af\3\2\2\2\u08b2\u08b3\3\2\2\2\u08b3\u08b5\3\2\2\2\u08b4\u08b6\5\64"+ + "\33\2\u08b5\u08b4\3\2\2\2\u08b5\u08b6\3\2\2\2\u08b6\u08ba\3\2\2\2\u08b7"+ + "\u08b8\7\u0091\2\2\u08b8\u08b9\7\u0208\2\2\u08b9\u08bb\t\r\2\2\u08ba\u08b7"+ + "\3\2\2\2\u08ba\u08bb\3\2\2\2\u08bb\u08bc\3\2\2\2\u08bc\u08bd\7\u0246\2"+ + "\2\u08bd\u08c2\5\u01f2\u00fa\2\u08be\u08bf\7\u0400\2\2\u08bf\u08c0\5\u022c"+ + "\u0117\2\u08c0\u08c1\7\u0401\2\2\u08c1\u08c3\3\2\2\2\u08c2\u08be\3\2\2"+ + "\2\u08c2\u08c3\3\2\2\2\u08c3\u08c4\3\2\2\2\u08c4\u08c5\7\r\2\2\u08c5\u08cc"+ + "\5\u00b4[\2\u08c6\u08c8\7\u00b0\2\2\u08c7\u08c9\t\16\2\2\u08c8\u08c7\3"+ + "\2\2\2\u08c8\u08c9\3\2\2\2\u08c9\u08ca\3\2\2\2\u08ca\u08cb\7\31\2\2\u08cb"+ + "\u08cd\7n\2\2\u08cc\u08c6\3\2\2\2\u08cc\u08cd\3\2\2\2\u08cd\u0085\3\2"+ + "\2\2\u08ce\u08d5\5^\60\2\u08cf\u08d1\7\u0402\2\2\u08d0\u08cf\3\2\2\2\u08d0"+ + "\u08d1\3\2\2\2\u08d1\u08d2\3\2\2\2\u08d2\u08d4\5^\60\2\u08d3\u08d0\3\2"+ + "\2\2\u08d4\u08d7\3\2\2\2\u08d5\u08d3\3\2\2\2\u08d5\u08d6\3\2\2\2\u08d6"+ + "\u0a35\3\2\2\2\u08d7\u08d5\3\2\2\2\u08d8\u08da\7\7\2\2\u08d9\u08db\7\33"+ + "\2\2\u08da\u08d9\3\2\2\2\u08da\u08db\3\2\2\2\u08db\u08dc\3\2\2\2\u08dc"+ + "\u08dd\5\u020c\u0107\2\u08dd\u08e1\5P)\2\u08de\u08e2\7\u016c\2\2\u08df"+ + "\u08e0\7\u0112\2\2\u08e0\u08e2\5\u020c\u0107\2\u08e1\u08de\3\2\2\2\u08e1"+ + "\u08df\3\2\2\2\u08e1\u08e2\3\2\2\2\u08e2\u0a35\3\2\2\2\u08e3\u08e5\7\7"+ + "\2\2\u08e4\u08e6\7\33\2\2\u08e5\u08e4\3\2\2\2\u08e5\u08e6\3\2\2\2\u08e6"+ + "\u08e7\3\2\2\2\u08e7\u08e8\7\u0400\2\2\u08e8\u08e9\5\u020c\u0107\2\u08e9"+ + "\u08f0\5P)\2\u08ea\u08eb\7\u0402\2\2\u08eb\u08ec\5\u020c\u0107\2\u08ec"+ + "\u08ed\5P)\2\u08ed\u08ef\3\2\2\2\u08ee\u08ea\3\2\2\2\u08ef\u08f2\3\2\2"+ + "\2\u08f0\u08ee\3\2\2\2\u08f0\u08f1\3\2\2\2\u08f1\u08f3\3\2\2\2\u08f2\u08f0"+ + "\3\2\2\2\u08f3\u08f4\7\u0401\2\2\u08f4\u0a35\3\2\2\2\u08f5\u08f6\7\7\2"+ + "\2\u08f6\u08f8\t\24\2\2\u08f7\u08f9\5\u020c\u0107\2\u08f8\u08f7\3\2\2"+ + "\2\u08f8\u08f9\3\2\2\2\u08f9\u08fb\3\2\2\2\u08fa\u08fc\5@!\2\u08fb\u08fa"+ + "\3\2\2\2\u08fb\u08fc\3\2\2\2\u08fc\u08fd\3\2\2\2\u08fd\u0901\5\u0230\u0119"+ + "\2\u08fe\u0900\5B\"\2\u08ff\u08fe\3\2\2\2\u0900\u0903\3\2\2\2\u0901\u08ff"+ + "\3\2\2\2\u0901\u0902\3\2\2\2\u0902\u0a35\3\2\2\2\u0903\u0901\3\2\2\2\u0904"+ + "\u0909\7\7\2\2\u0905\u0907\7\35\2\2\u0906\u0908\5\u020c\u0107\2\u0907"+ + "\u0906\3\2\2\2\u0907\u0908\3\2\2\2\u0908\u090a\3\2\2\2\u0909\u0905\3\2"+ + "\2\2\u0909\u090a\3\2\2\2\u090a\u090b\3\2\2\2\u090b\u090c\7v\2\2\u090c"+ + "\u090e\7T\2\2\u090d\u090f\5\u020c\u0107\2\u090e\u090d\3\2\2\2\u090e\u090f"+ + "\3\2\2\2\u090f\u0911\3\2\2\2\u0910\u0912\5@!\2\u0911\u0910\3\2\2\2\u0911"+ + "\u0912\3\2\2\2\u0912\u0913\3\2\2\2\u0913\u0917\5\u0230\u0119\2\u0914\u0916"+ + "\5B\"\2\u0915\u0914\3\2\2\2\u0916\u0919\3\2\2\2\u0917\u0915\3\2\2\2\u0917"+ + "\u0918\3\2\2\2\u0918\u0a35\3\2\2\2\u0919\u0917\3\2\2\2\u091a\u091f\7\7"+ + "\2\2\u091b\u091d\7\35\2\2\u091c\u091e\5\u020c\u0107\2\u091d\u091c\3\2"+ + "\2\2\u091d\u091e\3\2\2\2\u091e\u0920\3\2\2\2\u091f\u091b\3\2\2\2\u091f"+ + "\u0920\3\2\2\2\u0920\u0921\3\2\2\2\u0921\u0923\7\u00a5\2\2\u0922\u0924"+ + "\t\24\2\2\u0923\u0922\3\2\2\2\u0923\u0924\3\2\2\2\u0924\u0926\3\2\2\2"+ + "\u0925\u0927\5\u020c\u0107\2\u0926\u0925\3\2\2\2\u0926\u0927\3\2\2\2\u0927"+ + "\u0929\3\2\2\2\u0928\u092a\5@!\2\u0929\u0928\3\2\2\2\u0929\u092a\3\2\2"+ + "\2\u092a\u092b\3\2\2\2\u092b\u092f\5\u0230\u0119\2\u092c\u092e\5B\"\2"+ + "\u092d\u092c\3\2\2\2\u092e\u0931\3\2\2\2\u092f\u092d\3\2\2\2\u092f\u0930"+ + "\3\2\2\2\u0930\u0a35\3\2\2\2\u0931\u092f\3\2\2\2\u0932\u0933\7\7\2\2\u0933"+ + "\u0935\t\26\2\2\u0934\u0936\t\24\2\2\u0935\u0934\3\2\2\2\u0935\u0936\3"+ + "\2\2\2\u0936\u0938\3\2\2\2\u0937\u0939\5\u020c\u0107\2\u0938\u0937\3\2"+ + "\2\2\u0938\u0939\3\2\2\2\u0939\u093a\3\2\2\2\u093a\u093e\5\u0230\u0119"+ + "\2\u093b\u093d\5B\"\2\u093c\u093b\3\2\2\2\u093d\u0940\3\2\2\2\u093e\u093c"+ + "\3\2\2\2\u093e\u093f\3\2\2\2\u093f\u0a35\3\2\2\2\u0940\u093e\3\2\2\2\u0941"+ + "\u0946\7\7\2\2\u0942\u0944\7\35\2\2\u0943\u0945\5\u020c\u0107\2\u0944"+ + "\u0943\3\2\2\2\u0944\u0945\3\2\2\2\u0945\u0947\3\2\2\2\u0946\u0942\3\2"+ + "\2\2\u0946\u0947\3\2\2\2\u0947\u0948\3\2\2\2\u0948\u0949\7>\2\2\u0949"+ + "\u094b\7T\2\2\u094a\u094c\5\u020c\u0107\2\u094b\u094a\3\2\2\2\u094b\u094c"+ + "\3\2\2\2\u094c\u094d\3\2\2\2\u094d\u094e\5\u0230\u0119\2\u094e\u094f\5"+ + "V,\2\u094f\u0a35\3\2\2\2\u0950\u0955\7\7\2\2\u0951\u0953\7\35\2\2\u0952"+ + "\u0954\5\u020c\u0107\2\u0953\u0952\3\2\2\2\u0953\u0954\3\2\2\2\u0954\u0956"+ + "\3\2\2\2\u0955\u0951\3\2\2\2\u0955\u0956\3\2\2\2\u0956\u0957\3\2\2\2\u0957"+ + "\u0958\7\31\2\2\u0958\u0959\7\u0400\2\2\u0959\u095a\5\u025c\u012f\2\u095a"+ + "\u095b\7\u0401\2\2\u095b\u0a35\3\2\2\2\u095c\u095e\7\u0114\2\2\u095d\u095f"+ + "\7\u03f7\2\2\u095e\u095d\3\2\2\2\u095e\u095f\3\2\2\2\u095f\u0960\3\2\2"+ + "\2\u0960\u0a35\t\5\2\2\u0961\u0963\7\t\2\2\u0962\u0964\7\33\2\2\u0963"+ + "\u0962\3\2\2\2\u0963\u0964\3\2\2\2\u0964\u0965\3\2\2\2\u0965\u096b\5\u020c"+ + "\u0107\2\u0966\u0967\7\u008c\2\2\u0967\u0968\7(\2\2\u0968\u096c\5\u023e"+ + "\u0120\2\u0969\u096a\7\61\2\2\u096a\u096c\7(\2\2\u096b\u0966\3\2\2\2\u096b"+ + "\u0969\3\2\2\2\u096c\u0a35\3\2\2\2\u096d\u096f\7\27\2\2\u096e\u0970\7"+ + "\33\2\2\u096f\u096e\3\2\2\2\u096f\u0970\3\2\2\2\u0970\u0971\3\2\2\2\u0971"+ + "\u0972\5\u020c\u0107\2\u0972\u0973\5\u020c\u0107\2\u0973\u0977\5P)\2\u0974"+ + "\u0978\7\u016c\2\2\u0975\u0976\7\u0112\2\2\u0976\u0978\5\u020c\u0107\2"+ + "\u0977\u0974\3\2\2\2\u0977\u0975\3\2\2\2\u0977\u0978\3\2\2\2\u0978\u0a35"+ + "\3\2\2\2\u0979\u097a\7\177\2\2\u097a\u097b\7\33\2\2\u097b\u097c\5\u020c"+ + "\u0107\2\u097c\u097d\7\u009f\2\2\u097d\u097e\5\u020c\u0107\2\u097e\u0a35"+ + "\3\2\2\2\u097f\u0981\7_\2\2\u0980\u0982\7\u03f7\2\2\u0981\u0980\3\2\2"+ + "\2\u0981\u0982\3\2\2\2\u0982\u0983\3\2\2\2\u0983\u0a35\t\6\2\2\u0984\u0986"+ + "\7\u01ba\2\2\u0985\u0987\7\33\2\2\u0986\u0985\3\2\2\2\u0986\u0987\3\2"+ + "\2\2\u0987\u0988\3\2\2\2\u0988\u0989\5\u020c\u0107\2\u0989\u098d\5P)\2"+ + "\u098a\u098e\7\u016c\2\2\u098b\u098c\7\u0112\2\2\u098c\u098e\5\u020c\u0107"+ + "\2\u098d\u098a\3\2\2\2\u098d\u098b\3\2\2\2\u098d\u098e\3\2\2\2\u098e\u0a35"+ + "\3\2\2\2\u098f\u0991\7\61\2\2\u0990\u0992\7\33\2\2\u0991\u0990\3\2\2\2"+ + "\u0991\u0992\3\2\2\2\u0992\u0993\3\2\2\2\u0993\u0995\5\u020c\u0107\2\u0994"+ + "\u0996\7\u0084\2\2\u0995\u0994\3\2\2\2\u0995\u0996\3\2\2\2\u0996\u0a35"+ + "\3\2\2\2\u0997\u0998\7\61\2\2\u0998\u0999\7v\2\2\u0999\u0a35\7T\2\2\u099a"+ + "\u099b\7\177\2\2\u099b\u099c\t\24\2\2\u099c\u099d\5\u020c\u0107\2\u099d"+ + "\u099e\7\u009f\2\2\u099e\u099f\5\u020c\u0107\2\u099f\u0a35\3\2\2\2\u09a0"+ + "\u09a1\7\61\2\2\u09a1\u09a2\t\24\2\2\u09a2\u0a35\5\u020c\u0107\2\u09a3"+ + "\u09a4\7\61\2\2\u09a4\u09a5\7>\2\2\u09a5\u09a6\7T\2\2\u09a6\u0a35\5\u020c"+ + "\u0107\2\u09a7\u09a8\7\u014d\2\2\u09a8\u0a35\7U\2\2\u09a9\u09aa\7\u0154"+ + "\2\2\u09aa\u0a35\7U\2\2\u09ab\u09ad\7\177\2\2\u09ac\u09ae\t\37\2\2\u09ad"+ + "\u09ac\3\2\2\2\u09ad\u09ae\3\2\2\2\u09ae\u09b1\3\2\2\2\u09af\u09b2\5\u020c"+ + "\u0107\2\u09b0\u09b2\5\u01f2\u00fa\2\u09b1\u09af\3\2\2\2\u09b1\u09b0\3"+ + "\2\2\2\u09b2\u0a35\3\2\2\2\u09b3\u09b4\7q\2\2\u09b4\u09b5\7\22\2\2\u09b5"+ + "\u0a35\5\u022c\u0117\2\u09b6\u09b7\7\37\2\2\u09b7\u09b8\7\u009f\2\2\u09b8"+ + "\u09b9\7\30\2\2\u09b9\u09ba\7\u008c\2\2\u09ba\u09bd\5\u01fe\u0100\2\u09bb"+ + "\u09bc\7\32\2\2\u09bc\u09be\5\u0200\u0101\2\u09bd\u09bb\3\2\2\2\u09bd"+ + "\u09be\3\2\2\2\u09be\u0a35\3\2\2\2\u09bf\u09c1\7(\2\2\u09c0\u09bf\3\2"+ + "\2\2\u09c0\u09c1\3\2\2\2\u09c1\u09c2\3\2\2\2\u09c2\u09c3\7\30\2\2\u09c3"+ + "\u09c4\7\u008c\2\2\u09c4\u09c5\7\u03f7\2\2\u09c5\u09c9\5\u01fe\u0100\2"+ + "\u09c6\u09c7\7\32\2\2\u09c7\u09c8\7\u03f7\2\2\u09c8\u09ca\5\u0200\u0101"+ + "\2\u09c9\u09c6\3\2\2\2\u09c9\u09ca\3\2\2\2\u09ca\u0a35\3\2\2\2\u09cb\u09cc"+ + "\7\u014e\2\2\u09cc\u0a35\7\u0230\2\2\u09cd\u09ce\7\u017e\2\2\u09ce\u0a35"+ + "\7\u0230\2\2\u09cf\u0a35\7=\2\2\u09d0\u09d1\t \2\2\u09d1\u0a35\7\u0243"+ + "\2\2\u09d2\u09d3\7\7\2\2\u09d3\u09d4\7u\2\2\u09d4\u09d5\7\u0400\2\2\u09d5"+ + "\u09da\5h\65\2\u09d6\u09d7\7\u0402\2\2\u09d7\u09d9\5h\65\2\u09d8\u09d6"+ + "\3\2\2\2\u09d9\u09dc\3\2\2\2\u09da\u09d8\3\2\2\2\u09da\u09db\3\2\2\2\u09db"+ + "\u09dd\3\2\2\2\u09dc\u09da\3\2\2\2\u09dd\u09de\7\u0401\2\2\u09de\u0a35"+ + "\3\2\2\2\u09df\u09e0\7\61\2\2\u09e0\u09e1\7u\2\2\u09e1\u0a35\5\u022c\u0117"+ + "\2\u09e2\u09e3\7\u014e\2\2\u09e3\u09e6\7u\2\2\u09e4\u09e7\5\u022c\u0117"+ + "\2\u09e5\u09e7\7\b\2\2\u09e6\u09e4\3\2\2\2\u09e6\u09e5\3\2\2\2\u09e7\u09e8"+ + "\3\2\2\2\u09e8\u0a35\7\u0230\2\2\u09e9\u09ea\7\u017e\2\2\u09ea\u09ed\7"+ + "u\2\2\u09eb\u09ee\5\u022c\u0117\2\u09ec\u09ee\7\b\2\2\u09ed\u09eb\3\2"+ + "\2\2\u09ed\u09ec\3\2\2\2\u09ee\u09ef\3\2\2\2\u09ef\u0a35\7\u0230\2\2\u09f0"+ + "\u09f1\7\u0238\2\2\u09f1\u09f4\7u\2\2\u09f2\u09f5\5\u022c\u0117\2\u09f3"+ + "\u09f5\7\b\2\2\u09f4\u09f2\3\2\2\2\u09f4\u09f3\3\2\2\2\u09f5\u0a35\3\2"+ + "\2\2\u09f6\u09f7\7\u012e\2\2\u09f7\u09f8\7u\2\2\u09f8\u0a35\5\u0212\u010a"+ + "\2\u09f9\u09fa\7\u01f1\2\2\u09fa\u09fb\7u\2\2\u09fb\u09fc\5\u022c\u0117"+ + "\2\u09fc\u09fd\7P\2\2\u09fd\u09fe\7\u0400\2\2\u09fe\u0a03\5h\65\2\u09ff"+ + "\u0a00\7\u0402\2\2\u0a00\u0a02\5h\65\2\u0a01\u09ff\3\2\2\2\u0a02\u0a05"+ + "\3\2\2\2\u0a03\u0a01\3\2\2\2\u0a03\u0a04\3\2\2\2\u0a04\u0a06\3\2\2\2\u0a05"+ + "\u0a03\3\2\2\2\u0a06\u0a07\7\u0401\2\2\u0a07\u0a35\3\2\2\2\u0a08\u0a09"+ + "\7\u0161\2\2\u0a09\u0a0a\7u\2\2\u0a0a\u0a0b\5\u020c\u0107\2\u0a0b\u0a0c"+ + "\7\u00b0\2\2\u0a0c\u0a0d\7\u009c\2\2\u0a0d\u0a10\5\u01f4\u00fb\2\u0a0e"+ + "\u0a0f\t \2\2\u0a0f\u0a11\7\u0243\2\2\u0a10\u0a0e\3\2\2\2\u0a10\u0a11"+ + "\3\2\2\2\u0a11\u0a35\3\2\2\2\u0a12\u0a13\7\13\2\2\u0a13\u0a16\7u\2\2\u0a14"+ + "\u0a17\5\u022c\u0117\2\u0a15\u0a17\7\b\2\2\u0a16\u0a14\3\2\2\2\u0a16\u0a15"+ + "\3\2\2\2\u0a17\u0a35\3\2\2\2\u0a18\u0a19\7\31\2\2\u0a19\u0a1c\7u\2\2\u0a1a"+ + "\u0a1d\5\u022c\u0117\2\u0a1b\u0a1d\7\b\2\2\u0a1c\u0a1a\3\2\2\2\u0a1c\u0a1b"+ + "\3\2\2\2\u0a1d\u0a35\3\2\2\2\u0a1e\u0a1f\7m\2\2\u0a1f\u0a22\7u\2\2\u0a20"+ + "\u0a23\5\u022c\u0117\2\u0a21\u0a23\7\b\2\2\u0a22\u0a20\3\2\2\2\u0a22\u0a21"+ + "\3\2\2\2\u0a23\u0a35\3\2\2\2\u0a24\u0a25\7\u01e8\2\2\u0a25\u0a28\7u\2"+ + "\2\u0a26\u0a29\5\u022c\u0117\2\u0a27\u0a29\7\b\2\2\u0a28\u0a26\3\2\2\2"+ + "\u0a28\u0a27\3\2\2\2\u0a29\u0a35\3\2\2\2\u0a2a\u0a2b\7\u01f2\2\2\u0a2b"+ + "\u0a2e\7u\2\2\u0a2c\u0a2f\5\u022c\u0117\2\u0a2d\u0a2f\7\b\2\2\u0a2e\u0a2c"+ + "\3\2\2\2\u0a2e\u0a2d\3\2\2\2\u0a2f\u0a35\3\2\2\2\u0a30\u0a31\7\u01f0\2"+ + "\2\u0a31\u0a35\7\u01d6\2\2\u0a32\u0a33\7\u023f\2\2\u0a33\u0a35\7\u01d6"+ + "\2\2\u0a34\u08ce\3\2\2\2\u0a34\u08d8\3\2\2\2\u0a34\u08e3\3\2\2\2\u0a34"+ + "\u08f5\3\2\2\2\u0a34\u0904\3\2\2\2\u0a34\u091a\3\2\2\2\u0a34\u0932\3\2"+ + "\2\2\u0a34\u0941\3\2\2\2\u0a34\u0950\3\2\2\2\u0a34\u095c\3\2\2\2\u0a34"+ + "\u0961\3\2\2\2\u0a34\u096d\3\2\2\2\u0a34\u0979\3\2\2\2\u0a34\u097f\3\2"+ + "\2\2\u0a34\u0984\3\2\2\2\u0a34\u098f\3\2\2\2\u0a34\u0997\3\2\2\2\u0a34"+ + "\u099a\3\2\2\2\u0a34\u09a0\3\2\2\2\u0a34\u09a3\3\2\2\2\u0a34\u09a7\3\2"+ + "\2\2\u0a34\u09a9\3\2\2\2\u0a34\u09ab\3\2\2\2\u0a34\u09b3\3\2\2\2\u0a34"+ + "\u09b6\3\2\2\2\u0a34\u09c0\3\2\2\2\u0a34\u09cb\3\2\2\2\u0a34\u09cd\3\2"+ + "\2\2\u0a34\u09cf\3\2\2\2\u0a34\u09d0\3\2\2\2\u0a34\u09d2\3\2\2\2\u0a34"+ + "\u09df\3\2\2\2\u0a34\u09e2\3\2\2\2\u0a34\u09e9\3\2\2\2\u0a34\u09f0\3\2"+ + "\2\2\u0a34\u09f6\3\2\2\2\u0a34\u09f9\3\2\2\2\u0a34\u0a08\3\2\2\2\u0a34"+ + "\u0a12\3\2\2\2\u0a34\u0a18\3\2\2\2\u0a34\u0a1e\3\2\2\2\u0a34\u0a24\3\2"+ + "\2\2\u0a34\u0a2a\3\2\2\2\u0a34\u0a30\3\2\2\2\u0a34\u0a32\3\2\2\2\u0a35"+ + "\u0087\3\2\2\2\u0a36\u0a37\7\61\2\2\u0a37\u0a39\t\2\2\2\u0a38\u0a3a\5"+ + "\u0244\u0123\2\u0a39\u0a38\3\2\2\2\u0a39\u0a3a\3\2\2\2\u0a3a\u0a3b\3\2"+ + "\2\2\u0a3b\u0a3c\5\u020c\u0107\2\u0a3c\u0089\3\2\2\2\u0a3d\u0a3e\7\61"+ + "\2\2\u0a3e\u0a40\7\u015e\2\2\u0a3f\u0a41\5\u0244\u0123\2\u0a40\u0a3f\3"+ + "\2\2\2\u0a40\u0a41\3\2\2\2\u0a41\u0a42\3\2\2\2\u0a42\u0a43\5\u01f2\u00fa"+ + "\2\u0a43\u008b\3\2\2\2\u0a44\u0a45\7\61\2\2\u0a45\u0a47\7J\2\2\u0a46\u0a48"+ + "\t\3\2\2\u0a47\u0a46\3\2\2\2\u0a47\u0a48\3\2\2\2\u0a48\u0a49\3\2\2\2\u0a49"+ + "\u0a4a\5\u020c\u0107\2\u0a4a\u0a4b\7l\2\2\u0a4b\u0a58\5\u01f4\u00fb\2"+ + "\u0a4c\u0a4e\7\u0114\2\2\u0a4d\u0a4f\7\u03f7\2\2\u0a4e\u0a4d\3\2\2\2\u0a4e"+ + "\u0a4f\3\2\2\2\u0a4f\u0a50\3\2\2\2\u0a50\u0a57\t\5\2\2\u0a51\u0a53\7_"+ + "\2\2\u0a52\u0a54\7\u03f7\2\2\u0a53\u0a52\3\2\2\2\u0a53\u0a54\3\2\2\2\u0a54"+ + "\u0a55\3\2\2\2\u0a55\u0a57\t\6\2\2\u0a56\u0a4c\3\2\2\2\u0a56\u0a51\3\2"+ + "\2\2\u0a57\u0a5a\3\2\2\2\u0a58\u0a56\3\2\2\2\u0a58\u0a59\3\2\2\2\u0a59"+ + "\u008d\3\2\2\2\u0a5a\u0a58\3\2\2\2\u0a5b\u0a5c\7\61\2\2\u0a5c\u0a5d\7"+ + "\u0195\2\2\u0a5d\u0a5e\7D\2\2\u0a5e\u0a5f\5\u020c\u0107\2\u0a5f\u0a60"+ + "\7\u0158\2\2\u0a60\u0a61\7\u03f7\2\2\u0a61\u0a62\5\u0202\u0102\2\u0a62"+ + "\u008f\3\2\2\2\u0a63\u0a64\7\61\2\2\u0a64\u0a66\7w\2\2\u0a65\u0a67\5\u0244"+ + "\u0123\2\u0a66\u0a65\3\2\2\2\u0a66\u0a67\3\2\2\2\u0a67\u0a68\3\2\2\2\u0a68"+ + "\u0a69\5\u01f2\u00fa\2\u0a69\u0091\3\2\2\2\u0a6a\u0a6b\7\61\2\2\u0a6b"+ + "\u0a6d\7\u0172\2\2\u0a6c\u0a6e\5\u0244\u0123\2\u0a6d\u0a6c\3\2\2\2\u0a6d"+ + "\u0a6e\3\2\2\2\u0a6e\u0a6f\3\2\2\2\u0a6f\u0a70\5\u01f2\u00fa\2\u0a70\u0093"+ + "\3\2\2\2\u0a71\u0a72\7\61\2\2\u0a72\u0a74\7\u0209\2\2\u0a73\u0a75\5\u0244"+ + "\u0123\2\u0a74\u0a73\3\2\2\2\u0a74\u0a75\3\2\2\2\u0a75\u0a76\3\2\2\2\u0a76"+ + "\u0a77\5\u020c\u0107\2\u0a77\u0095\3\2\2\2\u0a78\u0a7a\7\61\2\2\u0a79"+ + "\u0a7b\7\u0231\2\2\u0a7a\u0a79\3\2\2\2\u0a7a\u0a7b\3\2\2\2\u0a7b\u0a7c"+ + "\3\2\2\2\u0a7c\u0a7e\7\u009c\2\2\u0a7d\u0a7f\5\u0244\u0123\2\u0a7e\u0a7d"+ + "\3\2\2\2\u0a7e\u0a7f\3\2\2\2\u0a7f\u0a80\3\2\2\2\u0a80\u0a82\5\u022e\u0118"+ + "\2\u0a81\u0a83\t!\2\2\u0a82\u0a81\3\2\2\2\u0a82\u0a83\3\2\2\2\u0a83\u0097"+ + "\3\2\2\2\u0a84\u0a85\7\61\2\2\u0a85\u0a86\7\u0230\2\2\u0a86\u0a8c\5\u020c"+ + "\u0107\2\u0a87\u0a89\7\u0158\2\2\u0a88\u0a8a\7\u03f7\2\2\u0a89\u0a88\3"+ + "\2\2\2\u0a89\u0a8a\3\2\2\2\u0a8a\u0a8b\3\2\2\2\u0a8b\u0a8d\5\u0202\u0102"+ + "\2\u0a8c\u0a87\3\2\2\2\u0a8c\u0a8d\3\2\2\2\u0a8d\u0099\3\2\2\2\u0a8e\u0a8f"+ + "\7\61\2\2\u0a8f\u0a91\7\u00a1\2\2\u0a90\u0a92\5\u0244\u0123\2\u0a91\u0a90"+ + "\3\2\2\2\u0a91\u0a92\3\2\2\2\u0a92\u0a93\3\2\2\2\u0a93\u0a94\5\u01f2\u00fa"+ + "\2\u0a94\u009b\3\2\2\2\u0a95\u0a96\7\61\2\2\u0a96\u0a98\7\u0246\2\2\u0a97"+ + "\u0a99\5\u0244\u0123\2\u0a98\u0a97\3\2\2\2\u0a98\u0a99\3\2\2\2\u0a99\u0a9a"+ + "\3\2\2\2\u0a9a\u0a9f\5\u01f2\u00fa\2\u0a9b\u0a9c\7\u0402\2\2\u0a9c\u0a9e"+ + "\5\u01f2\u00fa\2\u0a9d\u0a9b\3\2\2\2\u0a9e\u0aa1\3\2\2\2\u0a9f\u0a9d\3"+ + "\2\2\2\u0a9f\u0aa0\3\2\2\2\u0aa0\u0aa3\3\2\2\2\u0aa1\u0a9f\3\2\2\2\u0aa2"+ + "\u0aa4\t!\2\2\u0aa3\u0aa2\3\2\2\2\u0aa3\u0aa4\3\2\2\2\u0aa4\u009d\3\2"+ + "\2\2\u0aa5\u0aa6\7\177\2\2\u0aa6\u0aa7\7\u009c\2\2\u0aa7\u0aac\5\u00a0"+ + "Q\2\u0aa8\u0aa9\7\u0402\2\2\u0aa9\u0aab\5\u00a0Q\2\u0aaa\u0aa8\3\2\2\2"+ + "\u0aab\u0aae\3\2\2\2\u0aac\u0aaa\3\2\2\2\u0aac\u0aad\3\2\2\2\u0aad\u009f"+ + "\3\2\2\2\u0aae\u0aac\3\2\2\2\u0aaf\u0ab0\5\u01f4\u00fb\2\u0ab0\u0ab1\7"+ + "\u009f\2\2\u0ab1\u0ab2\5\u01f4\u00fb\2\u0ab2\u00a1\3\2\2\2\u0ab3\u0ab5"+ + "\7\u0238\2\2\u0ab4\u0ab6\7\u009c\2\2\u0ab5\u0ab4\3\2\2\2\u0ab5\u0ab6\3"+ + "\2\2\2\u0ab6\u0ab7\3\2\2\2\u0ab7\u0ab8\5\u01f4\u00fb\2\u0ab8\u00a3\3\2"+ + "\2\2\u0ab9\u0aba\7\23\2\2\u0aba\u0ac1\5\u01f2\u00fa\2\u0abb\u0abe\7\u0400"+ + "\2\2\u0abc\u0abf\5\u0238\u011d\2\u0abd\u0abf\5\u0232\u011a\2\u0abe\u0abc"+ + "\3\2\2\2\u0abe\u0abd\3\2\2\2\u0abe\u0abf\3\2\2\2\u0abf\u0ac0\3\2\2\2\u0ac0"+ + "\u0ac2\7\u0401\2\2\u0ac1\u0abb\3\2\2\2\u0ac1\u0ac2\3\2\2\2\u0ac2\u00a5"+ + "\3\2\2\2\u0ac3\u0ac6\5\u00c0a\2\u0ac4\u0ac6\5\u00c2b\2\u0ac5\u0ac3\3\2"+ + "\2\2\u0ac5\u0ac4\3\2\2\2\u0ac6\u00a7\3\2\2\2\u0ac7\u0ac8\7\u0150\2\2\u0ac8"+ + "\u0ac9\5\u0232\u011a\2\u0ac9\u00a9\3\2\2\2\u0aca\u0acf\5\u00c4c\2\u0acb"+ + "\u0acf\5\u00c6d\2\u0acc\u0acf\5\u00c8e\2\u0acd\u0acf\5\u00caf\2\u0ace"+ + "\u0aca\3\2\2\2\u0ace\u0acb\3\2\2\2\u0ace\u0acc\3\2\2\2\u0ace\u0acd\3\2"+ + "\2\2\u0acf\u00ab\3\2\2\2\u0ad0\u0ad2\7N\2\2\u0ad1\u0ad3\t\"\2\2\u0ad2"+ + "\u0ad1\3\2\2\2\u0ad2\u0ad3\3\2\2\2\u0ad3\u0ad5\3\2\2\2\u0ad4\u0ad6\7H"+ + "\2\2\u0ad5\u0ad4\3\2\2\2\u0ad5\u0ad6\3\2\2\2\u0ad6\u0ad8\3\2\2\2\u0ad7"+ + "\u0ad9\7P\2\2\u0ad8\u0ad7\3\2\2\2\u0ad8\u0ad9\3\2\2\2\u0ad9\u0ada\3\2"+ + "\2\2\u0ada\u0ae1\5\u01f4\u00fb\2\u0adb\u0adc\7u\2\2\u0adc\u0ade\7\u0400"+ + "\2\2\u0add\u0adf\5\u022c\u0117\2\u0ade\u0add\3\2\2\2\u0ade\u0adf\3\2\2"+ + "\2\u0adf\u0ae0\3\2\2\2\u0ae0\u0ae2\7\u0401\2\2\u0ae1\u0adb\3\2\2\2\u0ae1"+ + "\u0ae2\3\2\2\2\u0ae2\u0af3\3\2\2\2\u0ae3\u0ae4\7\u0400\2\2\u0ae4\u0ae5"+ + "\5\u022c\u0117\2\u0ae5\u0ae6\7\u0401\2\2\u0ae6\u0ae8\3\2\2\2\u0ae7\u0ae3"+ + "\3\2\2\2\u0ae7\u0ae8\3\2\2\2\u0ae8\u0ae9\3\2\2\2\u0ae9\u0af4\5\u00b8]"+ + "\2\u0aea\u0aeb\7\u008c\2\2\u0aeb\u0af0\5\u00ba^\2\u0aec\u0aed\7\u0402"+ + "\2\2\u0aed\u0aef\5\u00ba^\2\u0aee\u0aec\3\2\2\2\u0aef\u0af2\3\2\2\2\u0af0"+ + "\u0aee\3\2\2\2\u0af0\u0af1\3\2\2\2\u0af1\u0af4\3\2\2\2\u0af2\u0af0\3\2"+ + "\2\2\u0af3\u0ae7\3\2\2\2\u0af3\u0aea\3\2\2\2\u0af4\u0b01\3\2\2\2\u0af5"+ + "\u0af6\7l\2\2\u0af6\u0af7\7\u0152\2\2\u0af7\u0af8\7T\2\2\u0af8\u0af9\7"+ + "\u00a8\2\2\u0af9\u0afe\5\u00ba^\2\u0afa\u0afb\7\u0402\2\2\u0afb\u0afd"+ + "\5\u00ba^\2\u0afc\u0afa\3\2\2\2\u0afd\u0b00\3\2\2\2\u0afe\u0afc\3\2\2"+ + "\2\u0afe\u0aff\3\2\2\2\u0aff\u0b02\3\2\2\2\u0b00\u0afe\3\2\2\2\u0b01\u0af5"+ + "\3\2\2\2\u0b01\u0b02\3\2\2\2\u0b02\u00ad\3\2\2\2\u0b03\u0b04\7^\2\2\u0b04"+ + "\u0b06\7\u0145\2\2\u0b05\u0b07\t#\2\2\u0b06\u0b05\3\2\2\2\u0b06\u0b07"+ + "\3\2\2\2\u0b07\u0b09\3\2\2\2\u0b08\u0b0a\7\u0194\2\2\u0b09\u0b08\3\2\2"+ + "\2\u0b09\u0b0a\3\2\2\2\u0b0a\u0b0b\3\2\2\2\u0b0b\u0b0c\7K\2\2\u0b0c\u0b0e"+ + "\7\u040f\2\2\u0b0d\u0b0f\t\b\2\2\u0b0e\u0b0d\3\2\2\2\u0b0e\u0b0f\3\2\2"+ + "\2\u0b0f\u0b10\3\2\2\2\u0b10\u0b11\7P\2\2\u0b11\u0b12\7\u009c\2\2\u0b12"+ + "\u0b18\5\u01f4\u00fb\2\u0b13\u0b14\7u\2\2\u0b14\u0b15\7\u0400\2\2\u0b15"+ + "\u0b16\5\u022c\u0117\2\u0b16\u0b17\7\u0401\2\2\u0b17\u0b19\3\2\2\2\u0b18"+ + "\u0b13\3\2\2\2\u0b18\u0b19\3\2\2\2\u0b19\u0b1d\3\2\2\2\u0b1a\u0b1b\7\30"+ + "\2\2\u0b1b\u0b1c\7\u008c\2\2\u0b1c\u0b1e\5\u01fe\u0100\2\u0b1d\u0b1a\3"+ + "\2\2\2\u0b1d\u0b1e\3\2\2\2\u0b1e\u0b25\3\2\2\2\u0b1f\u0b21\t$\2\2\u0b20"+ + "\u0b22\5\u00f4{\2\u0b21\u0b20\3\2\2\2\u0b22\u0b23\3\2\2\2\u0b23\u0b21"+ + "\3\2\2\2\u0b23\u0b24\3\2\2\2\u0b24\u0b26\3\2\2\2\u0b25\u0b1f\3\2\2\2\u0b25"+ + "\u0b26\3\2\2\2\u0b26\u0b2d\3\2\2\2\u0b27\u0b29\7]\2\2\u0b28\u0b2a\5\u00f6"+ + "|\2\u0b29\u0b28\3\2\2\2\u0b2a\u0b2b\3\2\2\2\u0b2b\u0b29\3\2\2\2\u0b2b"+ + "\u0b2c\3\2\2\2\u0b2c\u0b2e\3\2\2\2\u0b2d\u0b27\3\2\2\2\u0b2d\u0b2e\3\2"+ + "\2\2\u0b2e\u0b33\3\2\2\2\u0b2f\u0b30\7H\2\2\u0b30\u0b31\5\u0212\u010a"+ + "\2\u0b31\u0b32\t%\2\2\u0b32\u0b34\3\2\2\2\u0b33\u0b2f\3\2\2\2\u0b33\u0b34"+ + "\3\2\2\2\u0b34\u0b40\3\2\2\2\u0b35\u0b36\7\u0400\2\2\u0b36\u0b3b\5\u00bc"+ + "_\2\u0b37\u0b38\7\u0402\2\2\u0b38\u0b3a\5\u00bc_\2\u0b39\u0b37\3\2\2\2"+ + "\u0b3a\u0b3d\3\2\2\2\u0b3b\u0b39\3\2\2\2\u0b3b\u0b3c\3\2\2\2\u0b3c\u0b3e"+ + "\3\2\2\2\u0b3d\u0b3b\3\2\2\2\u0b3e\u0b3f\7\u0401\2\2\u0b3f\u0b41\3\2\2"+ + "\2\u0b40\u0b35\3\2\2\2\u0b40\u0b41\3\2\2\2\u0b41\u0b4b\3\2\2\2\u0b42\u0b43"+ + "\7\u008c\2\2\u0b43\u0b48\5\u00ba^\2\u0b44\u0b45\7\u0402\2\2\u0b45\u0b47"+ + "\5\u00ba^\2\u0b46\u0b44\3\2\2\2\u0b47\u0b4a\3\2\2\2\u0b48\u0b46\3\2\2"+ + "\2\u0b48\u0b49\3\2\2\2\u0b49\u0b4c\3\2\2\2\u0b4a\u0b48\3\2\2\2\u0b4b\u0b42"+ + "\3\2\2\2\u0b4b\u0b4c\3\2\2\2\u0b4c\u00af\3\2\2\2\u0b4d\u0b4e\7^\2\2\u0b4e"+ + "\u0b50\7\u0250\2\2\u0b4f\u0b51\t#\2\2\u0b50\u0b4f\3\2\2\2\u0b50\u0b51"+ + "\3\2\2\2\u0b51\u0b53\3\2\2\2\u0b52\u0b54\7\u0194\2\2\u0b53\u0b52\3\2\2"+ + "\2\u0b53\u0b54\3\2\2\2\u0b54\u0b55\3\2\2\2\u0b55\u0b56\7K\2\2\u0b56\u0b58"+ + "\7\u040f\2\2\u0b57\u0b59\t\b\2\2\u0b58\u0b57\3\2\2\2\u0b58\u0b59\3\2\2"+ + "\2\u0b59\u0b5a\3\2\2\2\u0b5a\u0b5b\7P\2\2\u0b5b\u0b5c\7\u009c\2\2\u0b5c"+ + "\u0b60\5\u01f4\u00fb\2\u0b5d\u0b5e\7\30\2\2\u0b5e\u0b5f\7\u008c\2\2\u0b5f"+ + "\u0b61\5\u01fe\u0100\2\u0b60\u0b5d\3\2\2\2\u0b60\u0b61\3\2\2\2\u0b61\u0b68"+ + "\3\2\2\2\u0b62\u0b63\7\u0204\2\2\u0b63\u0b64\7\u017c\2\2\u0b64\u0b65\7"+ + "\22\2\2\u0b65\u0b66\7\u03f9\2\2\u0b66\u0b67\7\u040f\2\2\u0b67\u0b69\7"+ + "\u03f8\2\2\u0b68\u0b62\3\2\2\2\u0b68\u0b69\3\2\2\2\u0b69\u0b6e\3\2\2\2"+ + "\u0b6a\u0b6b\7H\2\2\u0b6b\u0b6c\5\u0212\u010a\2\u0b6c\u0b6d\t%\2\2\u0b6d"+ + "\u0b6f\3\2\2\2\u0b6e\u0b6a\3\2\2\2\u0b6e\u0b6f\3\2\2\2\u0b6f\u0b7b\3\2"+ + "\2\2\u0b70\u0b71\7\u0400\2\2\u0b71\u0b76\5\u00bc_\2\u0b72\u0b73\7\u0402"+ + "\2\2\u0b73\u0b75\5\u00bc_\2\u0b74\u0b72\3\2\2\2\u0b75\u0b78\3\2\2\2\u0b76"+ + "\u0b74\3\2\2\2\u0b76\u0b77\3\2\2\2\u0b77\u0b79\3\2\2\2\u0b78\u0b76\3\2"+ + "\2\2\u0b79\u0b7a\7\u0401\2\2\u0b7a\u0b7c\3\2\2\2\u0b7b\u0b70\3\2\2\2\u0b7b"+ + "\u0b7c\3\2\2\2\u0b7c\u0b86\3\2\2\2\u0b7d\u0b7e\7\u008c\2\2\u0b7e\u0b83"+ + "\5\u00ba^\2\u0b7f\u0b80\7\u0402\2\2\u0b80\u0b82\5\u00ba^\2\u0b81\u0b7f"+ + "\3\2\2\2\u0b82\u0b85\3\2\2\2\u0b83\u0b81\3\2\2\2\u0b83\u0b84\3\2\2\2\u0b84"+ + "\u0b87\3\2\2\2\u0b85\u0b83\3\2\2\2\u0b86\u0b7d\3\2\2\2\u0b86\u0b87\3\2"+ + "\2\2\u0b87\u00b1\3\2\2\2\u0b88\u0b8a\7\u0081\2\2\u0b89\u0b8b\t&\2\2\u0b8a"+ + "\u0b89\3\2\2\2\u0b8a\u0b8b\3\2\2\2\u0b8b\u0b8d\3\2\2\2\u0b8c\u0b8e\7P"+ + "\2\2\u0b8d\u0b8c\3\2\2\2\u0b8d\u0b8e\3\2\2\2\u0b8e\u0b8f\3\2\2\2\u0b8f"+ + "\u0b95\5\u01f4\u00fb\2\u0b90\u0b91\7u\2\2\u0b91\u0b92\7\u0400\2\2\u0b92"+ + "\u0b93\5\u022c\u0117\2\u0b93\u0b94\7\u0401\2\2\u0b94\u0b96\3\2\2\2\u0b95"+ + "\u0b90\3\2\2\2\u0b95\u0b96\3\2\2\2\u0b96\u0ba7\3\2\2\2\u0b97\u0b98\7\u0400"+ + "\2\2\u0b98\u0b99\5\u022c\u0117\2\u0b99\u0b9a\7\u0401\2\2\u0b9a\u0b9c\3"+ + "\2\2\2\u0b9b\u0b97\3\2\2\2\u0b9b\u0b9c\3\2\2\2\u0b9c\u0b9d\3\2\2\2\u0b9d"+ + "\u0ba8\5\u00b8]\2\u0b9e\u0b9f\7\u008c\2\2\u0b9f\u0ba4\5\u00ba^\2\u0ba0"+ + "\u0ba1\7\u0402\2\2\u0ba1\u0ba3\5\u00ba^\2\u0ba2\u0ba0\3\2\2\2\u0ba3\u0ba6"+ + "\3\2\2\2\u0ba4\u0ba2\3\2\2\2\u0ba4\u0ba5\3\2\2\2\u0ba5\u0ba8\3\2\2\2\u0ba6"+ + "\u0ba4\3\2\2\2\u0ba7\u0b9b\3\2\2\2\u0ba7\u0b9e\3\2\2\2\u0ba8\u00b3\3\2"+ + "\2\2\u0ba9\u0bab\5\u00e4s\2\u0baa\u0bac\5\u00be`\2\u0bab\u0baa\3\2\2\2"+ + "\u0bab\u0bac\3\2\2\2\u0bac\u0be1\3\2\2\2\u0bad\u0baf\5\u00e0q\2\u0bae"+ + "\u0bb0\5\u00be`\2\u0baf\u0bae\3\2\2\2\u0baf\u0bb0\3\2\2\2\u0bb0\u0be1"+ + "\3\2\2\2\u0bb1\u0bb3\5\u00e6t\2\u0bb2\u0bb4\5\u00eav\2\u0bb3\u0bb2\3\2"+ + "\2\2\u0bb4\u0bb5\3\2\2\2\u0bb5\u0bb3\3\2\2\2\u0bb5\u0bb6\3\2\2\2\u0bb6"+ + "\u0bbf\3\2\2\2\u0bb7\u0bb9\7\u00a4\2\2\u0bb8\u0bba\t\'\2\2\u0bb9\u0bb8"+ + "\3\2\2\2\u0bb9\u0bba\3\2\2\2\u0bba\u0bbd\3\2\2\2\u0bbb\u0bbe\5\u00e4s"+ + "\2\u0bbc\u0bbe\5\u00e0q\2\u0bbd\u0bbb\3\2\2\2\u0bbd\u0bbc\3\2\2\2\u0bbe"+ + "\u0bc0\3\2\2\2\u0bbf\u0bb7\3\2\2\2\u0bbf\u0bc0\3\2\2\2\u0bc0\u0bc2\3\2"+ + "\2\2\u0bc1\u0bc3\5\u00d0i\2\u0bc2\u0bc1\3\2\2\2\u0bc2\u0bc3\3\2\2\2\u0bc3"+ + "\u0bc5\3\2\2\2\u0bc4\u0bc6\5\u00fc\177\2\u0bc5\u0bc4\3\2\2\2\u0bc5\u0bc6"+ + "\3\2\2\2\u0bc6\u0bc8\3\2\2\2\u0bc7\u0bc9\5\u00be`\2\u0bc8\u0bc7\3\2\2"+ + "\2\u0bc8\u0bc9\3\2\2\2\u0bc9\u0be1\3\2\2\2\u0bca\u0bcc\5\u00e2r\2\u0bcb"+ + "\u0bcd\5\u00e8u\2\u0bcc\u0bcb\3\2\2\2\u0bcd\u0bce\3\2\2\2\u0bce\u0bcc"+ + "\3\2\2\2\u0bce\u0bcf\3\2\2\2\u0bcf\u0bd5\3\2\2\2\u0bd0\u0bd2\7\u00a4\2"+ + "\2\u0bd1\u0bd3\t\'\2\2\u0bd2\u0bd1\3\2\2\2\u0bd2\u0bd3\3\2\2\2\u0bd3\u0bd4"+ + "\3\2\2\2\u0bd4\u0bd6\5\u00e0q\2\u0bd5\u0bd0\3\2\2\2\u0bd5\u0bd6\3\2\2"+ + "\2\u0bd6\u0bd8\3\2\2\2\u0bd7\u0bd9\5\u00d0i\2\u0bd8\u0bd7\3\2\2\2\u0bd8"+ + "\u0bd9\3\2\2\2\u0bd9\u0bdb\3\2\2\2\u0bda\u0bdc\5\u00fc\177\2\u0bdb\u0bda"+ + "\3\2\2\2\u0bdb\u0bdc\3\2\2\2\u0bdc\u0bde\3\2\2\2\u0bdd\u0bdf\5\u00be`"+ + "\2\u0bde\u0bdd\3\2\2\2\u0bde\u0bdf\3\2\2\2\u0bdf\u0be1\3\2\2\2\u0be0\u0ba9"+ + "\3\2\2\2\u0be0\u0bad\3\2\2\2\u0be0\u0bb1\3\2\2\2\u0be0\u0bca\3\2\2\2\u0be1"+ + "\u00b5\3\2\2\2\u0be2\u0be5\5\u00ccg\2\u0be3\u0be5\5\u00ceh\2\u0be4\u0be2"+ + "\3\2\2\2\u0be4\u0be3\3\2\2\2\u0be5\u00b7\3\2\2\2\u0be6\u0bf9\5\u00b4["+ + "\2\u0be7\u0be8\t(\2\2\u0be8\u0bea\7\u0400\2\2\u0be9\u0beb\5\u0236\u011c"+ + "\2\u0bea\u0be9\3\2\2\2\u0bea\u0beb\3\2\2\2\u0beb\u0bec\3\2\2\2\u0bec\u0bf5"+ + "\7\u0401\2\2\u0bed\u0bee\7\u0402\2\2\u0bee\u0bf0\7\u0400\2\2\u0bef\u0bf1"+ + "\5\u0236\u011c\2\u0bf0\u0bef\3\2\2\2\u0bf0\u0bf1\3\2\2\2\u0bf1\u0bf2\3"+ + "\2\2\2\u0bf2\u0bf4\7\u0401\2\2\u0bf3\u0bed\3\2\2\2\u0bf4\u0bf7\3\2\2\2"+ + "\u0bf5\u0bf3\3\2\2\2\u0bf5\u0bf6\3\2\2\2\u0bf6\u0bf9\3\2\2\2\u0bf7\u0bf5"+ + "\3\2\2\2\u0bf8\u0be6\3\2\2\2\u0bf8\u0be7\3\2\2\2\u0bf9\u00b9\3\2\2\2\u0bfa"+ + "\u0bfb\5\u01f6\u00fc\2\u0bfb\u0bfe\7\u03f7\2\2\u0bfc\u0bff\5\u025c\u012f"+ + "\2\u0bfd\u0bff\7(\2\2\u0bfe\u0bfc\3\2\2\2\u0bfe\u0bfd\3\2\2\2\u0bff\u00bb"+ + "\3\2\2\2\u0c00\u0c03\5\u020c\u0107\2\u0c01\u0c03\7\u041a\2\2\u0c02\u0c00"+ + "\3\2\2\2\u0c02\u0c01\3\2\2\2\u0c03\u00bd\3\2\2\2\u0c04\u0c05\7<\2\2\u0c05"+ + "\u0c0b\7\u00a8\2\2\u0c06\u0c07\7_\2\2\u0c07\u0c08\7I\2\2\u0c08\u0c09\7"+ + "\u020b\2\2\u0c09\u0c0b\7\u01b9\2\2\u0c0a\u0c04\3\2\2\2\u0c0a\u0c06\3\2"+ + "\2\2\u0c0b\u00bf\3\2\2\2\u0c0c\u0c0e\7*\2\2\u0c0d\u0c0f\7a\2\2\u0c0e\u0c0d"+ + "\3\2\2\2\u0c0e\u0c0f\3\2\2\2\u0c0f\u0c11\3\2\2\2\u0c10\u0c12\7\u01e7\2"+ + "\2\u0c11\u0c10\3\2\2\2\u0c11\u0c12\3\2\2\2\u0c12\u0c14\3\2\2\2\u0c13\u0c15"+ + "\7H\2\2\u0c14\u0c13\3\2\2\2\u0c14\u0c15\3\2\2\2\u0c15\u0c16\3\2\2\2\u0c16"+ + "\u0c17\7?\2\2\u0c17\u0c1d\5\u01f4\u00fb\2\u0c18\u0c19\7u\2\2\u0c19\u0c1a"+ + "\7\u0400\2\2\u0c1a\u0c1b\5\u022c\u0117\2\u0c1b\u0c1c\7\u0401\2\2\u0c1c"+ + "\u0c1e\3\2\2\2\u0c1d\u0c18\3\2\2\2\u0c1d\u0c1e\3\2\2\2\u0c1e\u0c21\3\2"+ + "\2\2\u0c1f\u0c20\7\u00ae\2\2\u0c20\u0c22\5\u025c\u012f\2\u0c21\u0c1f\3"+ + "\2\2\2\u0c21\u0c22\3\2\2\2\u0c22\u0c24\3\2\2\2\u0c23\u0c25\5\u00d0i\2"+ + "\u0c24\u0c23\3\2\2\2\u0c24\u0c25\3\2\2\2\u0c25\u0c28\3\2\2\2\u0c26\u0c27"+ + "\7[\2\2\u0c27\u0c29\5\u00fe\u0080\2\u0c28\u0c26\3\2\2\2\u0c28\u0c29\3"+ + "\2\2\2\u0c29\u00c1\3\2\2\2\u0c2a\u0c2c\7*\2\2\u0c2b\u0c2d\7a\2\2\u0c2c"+ + "\u0c2b\3\2\2\2\u0c2c\u0c2d\3\2\2\2\u0c2d\u0c2f\3\2\2\2\u0c2e\u0c30\7\u01e7"+ + "\2\2\u0c2f\u0c2e\3\2\2\2\u0c2f\u0c30\3\2\2\2\u0c30\u0c32\3\2\2\2\u0c31"+ + "\u0c33\7H\2\2\u0c32\u0c31\3\2\2\2\u0c32\u0c33\3\2\2\2\u0c33\u0c5b\3\2"+ + "\2\2\u0c34\u0c37\5\u01f4\u00fb\2\u0c35\u0c36\7\u03ff\2\2\u0c36\u0c38\7"+ + "\u03ef\2\2\u0c37\u0c35\3\2\2\2\u0c37\u0c38\3\2\2\2\u0c38\u0c41\3\2\2\2"+ + "\u0c39\u0c3a\7\u0402\2\2\u0c3a\u0c3d\5\u01f4\u00fb\2\u0c3b\u0c3c\7\u03ff"+ + "\2\2\u0c3c\u0c3e\7\u03ef\2\2\u0c3d\u0c3b\3\2\2\2\u0c3d\u0c3e\3\2\2\2\u0c3e"+ + "\u0c40\3\2\2\2\u0c3f\u0c39\3\2\2\2\u0c40\u0c43\3\2\2\2\u0c41\u0c3f\3\2"+ + "\2\2\u0c41\u0c42\3\2\2\2\u0c42\u0c44\3\2\2\2\u0c43\u0c41\3\2\2\2\u0c44"+ + "\u0c45\7?\2\2\u0c45\u0c46\5\u00d4k\2\u0c46\u0c5c\3\2\2\2\u0c47\u0c48\7"+ + "?\2\2\u0c48\u0c4b\5\u01f4\u00fb\2\u0c49\u0c4a\7\u03ff\2\2\u0c4a\u0c4c"+ + "\7\u03ef\2\2\u0c4b\u0c49\3\2\2\2\u0c4b\u0c4c\3\2\2\2\u0c4c\u0c55\3\2\2"+ + "\2\u0c4d\u0c4e\7\u0402\2\2\u0c4e\u0c51\5\u01f4\u00fb\2\u0c4f\u0c50\7\u03ff"+ + "\2\2\u0c50\u0c52\7\u03ef\2\2\u0c51\u0c4f\3\2\2\2\u0c51\u0c52\3\2\2\2\u0c52"+ + "\u0c54\3\2\2\2\u0c53\u0c4d\3\2\2\2\u0c54\u0c57\3\2\2\2\u0c55\u0c53\3\2"+ + "\2\2\u0c55\u0c56\3\2\2\2\u0c56\u0c58\3\2\2\2\u0c57\u0c55\3\2\2\2\u0c58"+ + "\u0c59\7\u00ab\2\2\u0c59\u0c5a\5\u00d4k\2\u0c5a\u0c5c\3\2\2\2\u0c5b\u0c34"+ + "\3\2\2\2\u0c5b\u0c47\3\2\2\2\u0c5c\u0c5f\3\2\2\2\u0c5d\u0c5e\7\u00ae\2"+ + "\2\u0c5e\u0c60\5\u025c\u012f\2\u0c5f\u0c5d\3\2\2\2\u0c5f\u0c60\3\2\2\2"+ + "\u0c60\u00c3\3\2\2\2\u0c61\u0c62\7\u0177\2\2\u0c62\u0c63\5\u01f4\u00fb"+ + "\2\u0c63\u0c68\7\u01ce\2\2\u0c64\u0c66\7\r\2\2\u0c65\u0c64\3\2\2\2\u0c65"+ + "\u0c66\3\2\2\2\u0c66\u0c67\3\2\2\2\u0c67\u0c69\5\u020c\u0107\2\u0c68\u0c65"+ + "\3\2\2\2\u0c68\u0c69\3\2\2\2\u0c69\u00c5\3\2\2\2\u0c6a\u0c6b\7\u0177\2"+ + "\2\u0c6b\u0c6c\5\u01f4\u00fb\2\u0c6c\u0c6d\7z\2\2\u0c6d\u0c74\5\u020c"+ + "\u0107\2\u0c6e\u0c6f\5\u026a\u0136\2\u0c6f\u0c70\7\u0400\2\2\u0c70\u0c71"+ + "\5\u0238\u011d\2\u0c71\u0c72\7\u0401\2\2\u0c72\u0c75\3\2\2\2\u0c73\u0c75"+ + "\t)\2\2\u0c74\u0c6e\3\2\2\2\u0c74\u0c73\3\2\2\2\u0c75\u0c78\3\2\2\2\u0c76"+ + "\u0c77\7\u00ae\2\2\u0c77\u0c79\5\u025c\u012f\2\u0c78\u0c76\3\2\2\2\u0c78"+ + "\u0c79\3\2\2\2\u0c79\u0c7c\3\2\2\2\u0c7a\u0c7b\7[\2\2\u0c7b\u0c7d\5\u00fe"+ + "\u0080\2\u0c7c\u0c7a\3\2\2\2\u0c7c\u0c7d\3\2\2\2\u0c7d\u00c7\3\2\2\2\u0c7e"+ + "\u0c7f\7\u0177\2\2\u0c7f\u0c80\5\u01f4\u00fb\2\u0c80\u0c81\7z\2\2\u0c81"+ + "\u0c84\t*\2\2\u0c82\u0c83\7\u00ae\2\2\u0c83\u0c85\5\u025c\u012f\2\u0c84"+ + "\u0c82\3\2\2\2\u0c84\u0c85\3\2\2\2\u0c85\u0c88\3\2\2\2\u0c86\u0c87\7["+ + "\2\2\u0c87\u0c89\5\u00fe\u0080\2\u0c88\u0c86\3\2\2\2\u0c88\u0c89\3\2\2"+ + "\2\u0c89\u00c9\3\2\2\2\u0c8a\u0c8b\7\u0177\2\2\u0c8b\u0c8c\5\u01f4\u00fb"+ + "\2\u0c8c\u0c8d\7\u012d\2\2\u0c8d\u00cb\3\2\2\2\u0c8e\u0c90\7\u00a8\2\2"+ + "\u0c8f\u0c91\7a\2\2\u0c90\u0c8f\3\2\2\2\u0c90\u0c91\3\2\2\2\u0c91\u0c93"+ + "\3\2\2\2\u0c92\u0c94\7H\2\2\u0c93\u0c92\3\2\2\2\u0c93\u0c94\3\2\2\2\u0c94"+ + "\u0c95\3\2\2\2\u0c95\u0c9a\5\u01f4\u00fb\2\u0c96\u0c98\7\r\2\2\u0c97\u0c96"+ + "\3\2\2\2\u0c97\u0c98\3\2\2\2\u0c98\u0c99\3\2\2\2\u0c99\u0c9b\5\u020c\u0107"+ + "\2\u0c9a\u0c97\3\2\2\2\u0c9a\u0c9b\3\2\2\2\u0c9b\u0c9c\3\2\2\2\u0c9c\u0c9d"+ + "\7\u008c\2\2\u0c9d\u0ca2\5\u00ba^\2\u0c9e\u0c9f\7\u0402\2\2\u0c9f\u0ca1"+ + "\5\u00ba^\2\u0ca0\u0c9e\3\2\2\2\u0ca1\u0ca4\3\2\2\2\u0ca2\u0ca0\3\2\2"+ + "\2\u0ca2\u0ca3\3\2\2\2\u0ca3\u0ca7\3\2\2\2\u0ca4\u0ca2\3\2\2\2\u0ca5\u0ca6"+ + "\7\u00ae\2\2\u0ca6\u0ca8\5\u0260\u0131\2\u0ca7\u0ca5\3\2\2\2\u0ca7\u0ca8"+ + "\3\2\2\2\u0ca8\u0caa\3\2\2\2\u0ca9\u0cab\5\u00d0i\2\u0caa\u0ca9\3\2\2"+ + "\2\u0caa\u0cab\3\2\2\2\u0cab\u0cad\3\2\2\2\u0cac\u0cae\5\u00fc\177\2\u0cad"+ + "\u0cac\3\2\2\2\u0cad\u0cae\3\2\2\2\u0cae\u00cd\3\2\2\2\u0caf\u0cb1\7\u00a8"+ + "\2\2\u0cb0\u0cb2\7a\2\2\u0cb1\u0cb0\3\2\2\2\u0cb1\u0cb2\3\2\2\2\u0cb2"+ + "\u0cb4\3\2\2\2\u0cb3\u0cb5\7H\2\2\u0cb4\u0cb3\3\2\2\2\u0cb4\u0cb5\3\2"+ + "\2\2\u0cb5\u0cb6\3\2\2\2\u0cb6\u0cb7\5\u00d4k\2\u0cb7\u0cb8\7\u008c\2"+ + "\2\u0cb8\u0cbd\5\u00ba^\2\u0cb9\u0cba\7\u0402\2\2\u0cba\u0cbc\5\u00ba"+ + "^\2\u0cbb\u0cb9\3\2\2\2\u0cbc\u0cbf\3\2\2\2\u0cbd\u0cbb\3\2\2\2\u0cbd"+ + "\u0cbe\3\2\2\2\u0cbe\u0cc2\3\2\2\2\u0cbf\u0cbd\3\2\2\2\u0cc0\u0cc1\7\u00ae"+ + "\2\2\u0cc1\u0cc3\5\u025c\u012f\2\u0cc2\u0cc0\3\2\2\2\u0cc2\u0cc3\3\2\2"+ + "\2\u0cc3\u00cf\3\2\2\2\u0cc4\u0cc5\7q\2\2\u0cc5\u0cc6\7\22\2\2\u0cc6\u0ccb"+ + "\5\u00d2j\2\u0cc7\u0cc8\7\u0402\2\2\u0cc8\u0cca\5\u00d2j\2\u0cc9\u0cc7"+ + "\3\2\2\2\u0cca\u0ccd\3\2\2\2\u0ccb\u0cc9\3\2\2\2\u0ccb\u0ccc\3\2\2\2\u0ccc"+ + "\u00d1\3\2\2\2\u0ccd\u0ccb\3\2\2\2\u0cce\u0cd0\5\u025c\u012f\2\u0ccf\u0cd1"+ + "\t+\2\2\u0cd0\u0ccf\3\2\2\2\u0cd0\u0cd1\3\2\2\2\u0cd1\u00d3\3\2\2\2\u0cd2"+ + "\u0cd7\5\u00d6l\2\u0cd3\u0cd4\7\u0402\2\2\u0cd4\u0cd6\5\u00d6l\2\u0cd5"+ + "\u0cd3\3\2\2\2\u0cd6\u0cd9\3\2\2\2\u0cd7\u0cd5\3\2\2\2\u0cd7\u0cd8\3\2"+ + "\2\2\u0cd8\u00d5\3\2\2\2\u0cd9\u0cd7\3\2\2\2\u0cda\u0cde\5\u00d8m\2\u0cdb"+ + "\u0cdd\5\u00dep\2\u0cdc\u0cdb\3\2\2\2\u0cdd\u0ce0\3\2\2\2\u0cde\u0cdc"+ + "\3\2\2\2\u0cde\u0cdf\3\2\2\2\u0cdf\u0cec\3\2\2\2\u0ce0\u0cde\3\2\2\2\u0ce1"+ + "\u0ce2\7\u0400\2\2\u0ce2\u0ce6\5\u00d8m\2\u0ce3\u0ce5\5\u00dep\2\u0ce4"+ + "\u0ce3\3\2\2\2\u0ce5\u0ce8\3\2\2\2\u0ce6\u0ce4\3\2\2\2\u0ce6\u0ce7\3\2"+ + "\2\2\u0ce7\u0ce9\3\2\2\2\u0ce8\u0ce6\3\2\2\2\u0ce9\u0cea\7\u0401\2\2\u0cea"+ + "\u0cec\3\2\2\2\u0ceb\u0cda\3\2\2\2\u0ceb\u0ce1\3\2\2\2\u0cec\u00d7\3\2"+ + "\2\2\u0ced\u0cf3\5\u01f4\u00fb\2\u0cee\u0cef\7u\2\2\u0cef\u0cf0\7\u0400"+ + "\2\2\u0cf0\u0cf1\5\u022c\u0117\2\u0cf1\u0cf2\7\u0401\2\2\u0cf2\u0cf4\3"+ + "\2\2\2\u0cf3\u0cee\3\2\2\2\u0cf3\u0cf4\3\2\2\2\u0cf4\u0cf9\3\2\2\2\u0cf5"+ + "\u0cf7\7\r\2\2\u0cf6\u0cf5\3\2\2\2\u0cf6\u0cf7\3\2\2\2\u0cf7\u0cf8\3\2"+ + "\2\2\u0cf8\u0cfa\5\u020c\u0107\2\u0cf9\u0cf6\3\2\2\2\u0cf9\u0cfa\3\2\2"+ + "\2\u0cfa\u0d03\3\2\2\2\u0cfb\u0d00\5\u00dan\2\u0cfc\u0cfd\7\u0402\2\2"+ + "\u0cfd\u0cff\5\u00dan\2\u0cfe\u0cfc\3\2\2\2\u0cff\u0d02\3\2\2\2\u0d00"+ + "\u0cfe\3\2\2\2\u0d00\u0d01\3\2\2\2\u0d01\u0d04\3\2\2\2\u0d02\u0d00\3\2"+ + "\2\2\u0d03\u0cfb\3\2\2\2\u0d03\u0d04\3\2\2\2\u0d04\u0d16\3\2\2\2\u0d05"+ + "\u0d0b\5\u00b4[\2\u0d06\u0d07\7\u0400\2\2\u0d07\u0d08\5\u00b4[\2\u0d08"+ + "\u0d09\7\u0401\2\2\u0d09\u0d0b\3\2\2\2\u0d0a\u0d05\3\2\2\2\u0d0a\u0d06"+ + "\3\2\2\2\u0d0b\u0d0d\3\2\2\2\u0d0c\u0d0e\7\r\2\2\u0d0d\u0d0c\3\2\2\2\u0d0d"+ + "\u0d0e\3\2\2\2\u0d0e\u0d0f\3\2\2\2\u0d0f\u0d10\5\u020c\u0107\2\u0d10\u0d16"+ + "\3\2\2\2\u0d11\u0d12\7\u0400\2\2\u0d12\u0d13\5\u00d4k\2\u0d13\u0d14\7"+ + "\u0401\2\2\u0d14\u0d16\3\2\2\2\u0d15\u0ced\3\2\2\2\u0d15\u0d0a\3\2\2\2"+ + "\u0d15\u0d11\3\2\2\2\u0d16\u00d9\3\2\2\2\u0d17\u0d18\t,\2\2\u0d18\u0d1b"+ + "\t\24\2\2\u0d19\u0d1a\7<\2\2\u0d1a\u0d1c\5\u00dco\2\u0d1b\u0d19\3\2\2"+ + "\2\u0d1b\u0d1c\3\2\2\2\u0d1c\u0d1d\3\2\2\2\u0d1d\u0d1e\7\u0400\2\2\u0d1e"+ + "\u0d1f\5\u022c\u0117\2\u0d1f\u0d20\7\u0401\2\2\u0d20\u00db\3\2\2\2\u0d21"+ + "\u0d27\7S\2\2\u0d22\u0d23\7q\2\2\u0d23\u0d27\7\22\2\2\u0d24\u0d25\7D\2"+ + "\2\u0d25\u0d27\7\22\2\2\u0d26\u0d21\3\2\2\2\u0d26\u0d22\3\2\2\2\u0d26"+ + "\u0d24\3\2\2\2\u0d27\u00dd\3\2\2\2\u0d28\u0d2a\t-\2\2\u0d29\u0d28\3\2"+ + "\2\2\u0d29\u0d2a\3\2\2\2\u0d2a\u0d2b\3\2\2\2\u0d2b\u0d2c\7S\2\2\u0d2c"+ + "\u0d34\5\u00d8m\2\u0d2d\u0d2e\7l\2\2\u0d2e\u0d35\5\u025c\u012f\2\u0d2f"+ + "\u0d30\7\u00ab\2\2\u0d30\u0d31\7\u0400\2\2\u0d31\u0d32\5\u022c\u0117\2"+ + "\u0d32\u0d33\7\u0401\2\2\u0d33\u0d35\3\2\2\2\u0d34\u0d2d\3\2\2\2\u0d34"+ + "\u0d2f\3\2\2\2\u0d34\u0d35\3\2\2\2\u0d35\u0d55\3\2\2\2\u0d36\u0d37\7\u009b"+ + "\2\2\u0d37\u0d3a\5\u00d8m\2\u0d38\u0d39\7l\2\2\u0d39\u0d3b\5\u025c\u012f"+ + "\2\u0d3a\u0d38\3\2\2\2\u0d3a\u0d3b\3\2\2\2\u0d3b\u0d55\3\2\2\2\u0d3c\u0d3e"+ + "\t.\2\2\u0d3d\u0d3f\7s\2\2\u0d3e\u0d3d\3\2\2\2\u0d3e\u0d3f\3\2\2\2\u0d3f"+ + "\u0d40\3\2\2\2\u0d40\u0d41\7S\2\2\u0d41\u0d49\5\u00d8m\2\u0d42\u0d43\7"+ + "l\2\2\u0d43\u0d4a\5\u025c\u012f\2\u0d44\u0d45\7\u00ab\2\2\u0d45\u0d46"+ + "\7\u0400\2\2\u0d46\u0d47\5\u022c\u0117\2\u0d47\u0d48\7\u0401\2\2\u0d48"+ + "\u0d4a\3\2\2\2\u0d49\u0d42\3\2\2\2\u0d49\u0d44\3\2\2\2\u0d4a\u0d55\3\2"+ + "\2\2\u0d4b\u0d50\7g\2\2\u0d4c\u0d4e\t.\2\2\u0d4d\u0d4f\7s\2\2\u0d4e\u0d4d"+ + "\3\2\2\2\u0d4e\u0d4f\3\2\2\2\u0d4f\u0d51\3\2\2\2\u0d50\u0d4c\3\2\2\2\u0d50"+ + "\u0d51\3\2\2\2\u0d51\u0d52\3\2\2\2\u0d52\u0d53\7S\2\2\u0d53\u0d55\5\u00d8"+ + "m\2\u0d54\u0d29\3\2\2\2\u0d54\u0d36\3\2\2\2\u0d54\u0d3c\3\2\2\2\u0d54"+ + "\u0d4b\3\2\2\2\u0d55\u00df\3\2\2\2\u0d56\u0d57\7\u0400\2\2\u0d57\u0d58"+ + "\5\u00e4s\2\u0d58\u0d59\7\u0401\2\2\u0d59\u0d5f\3\2\2\2\u0d5a\u0d5b\7"+ + "\u0400\2\2\u0d5b\u0d5c\5\u00e0q\2\u0d5c\u0d5d\7\u0401\2\2\u0d5d\u0d5f"+ + "\3\2\2\2\u0d5e\u0d56\3\2\2\2\u0d5e\u0d5a\3\2\2\2\u0d5f\u00e1\3\2\2\2\u0d60"+ + "\u0d61\7\u0400\2\2\u0d61\u0d62\5\u00e6t\2\u0d62\u0d63\7\u0401\2\2\u0d63"+ + "\u0d69\3\2\2\2\u0d64\u0d65\7\u0400\2\2\u0d65\u0d66\5\u00e2r\2\u0d66\u0d67"+ + "\7\u0401\2\2\u0d67\u0d69\3\2\2\2\u0d68\u0d60\3\2\2\2\u0d68\u0d64\3\2\2"+ + "\2\u0d69\u00e3\3\2\2\2\u0d6a\u0d6e\7\u008b\2\2\u0d6b\u0d6d\5\u00ecw\2"+ + "\u0d6c\u0d6b\3\2\2\2\u0d6d\u0d70\3\2\2\2\u0d6e\u0d6c\3\2\2\2\u0d6e\u0d6f"+ + "\3\2\2\2\u0d6f\u0d71\3\2\2\2\u0d70\u0d6e\3\2\2\2\u0d71\u0d73\5\u00eex"+ + "\2\u0d72\u0d74\5\u00f2z\2\u0d73\u0d72\3\2\2\2\u0d73\u0d74\3\2\2\2\u0d74"+ + "\u0d76\3\2\2\2\u0d75\u0d77\5\u00f8}\2\u0d76\u0d75\3\2\2\2\u0d76\u0d77"+ + "\3\2\2\2\u0d77\u0d79\3\2\2\2\u0d78\u0d7a\5\u00d0i\2\u0d79\u0d78\3\2\2"+ + "\2\u0d79\u0d7a\3\2\2\2\u0d7a\u0d7c\3\2\2\2\u0d7b\u0d7d\5\u00fc\177\2\u0d7c"+ + "\u0d7b\3\2\2\2\u0d7c\u0d7d\3\2\2\2\u0d7d\u0d93\3\2\2\2\u0d7e\u0d82\7\u008b"+ + "\2\2\u0d7f\u0d81\5\u00ecw\2\u0d80\u0d7f\3\2\2\2\u0d81\u0d84\3\2\2\2\u0d82"+ + "\u0d80\3\2\2\2\u0d82\u0d83\3\2\2\2\u0d83\u0d85\3\2\2\2\u0d84\u0d82\3\2"+ + "\2\2\u0d85\u0d87\5\u00eex\2\u0d86\u0d88\5\u00f8}\2\u0d87\u0d86\3\2\2\2"+ + "\u0d87\u0d88\3\2\2\2\u0d88\u0d8a\3\2\2\2\u0d89\u0d8b\5\u00d0i\2\u0d8a"+ + "\u0d89\3\2\2\2\u0d8a\u0d8b\3\2\2\2\u0d8b\u0d8d\3\2\2\2\u0d8c\u0d8e\5\u00fc"+ + "\177\2\u0d8d\u0d8c\3\2\2\2\u0d8d\u0d8e\3\2\2\2\u0d8e\u0d90\3\2\2\2\u0d8f"+ + "\u0d91\5\u00f2z\2\u0d90\u0d8f\3\2\2\2\u0d90\u0d91\3\2\2\2\u0d91\u0d93"+ + "\3\2\2\2\u0d92\u0d6a\3\2\2\2\u0d92\u0d7e\3\2\2\2\u0d93\u00e5\3\2\2\2\u0d94"+ + "\u0d98\7\u008b\2\2\u0d95\u0d97\5\u00ecw\2\u0d96\u0d95\3\2\2\2\u0d97\u0d9a"+ + "\3\2\2\2\u0d98\u0d96\3\2\2\2\u0d98\u0d99\3\2\2\2\u0d99\u0d9b\3\2\2\2\u0d9a"+ + "\u0d98\3\2\2\2\u0d9b\u0d9d\5\u00eex\2\u0d9c\u0d9e\5\u00f8}\2\u0d9d\u0d9c"+ + "\3\2\2\2\u0d9d\u0d9e\3\2\2\2\u0d9e\u0da0\3\2\2\2\u0d9f\u0da1\5\u00d0i"+ + "\2\u0da0\u0d9f\3\2\2\2\u0da0\u0da1\3\2\2\2\u0da1\u0da3\3\2\2\2\u0da2\u0da4"+ + "\5\u00fc\177\2\u0da3\u0da2\3\2\2\2\u0da3\u0da4\3\2\2\2\u0da4\u00e7\3\2"+ + "\2\2\u0da5\u0da7\7\u00a4\2\2\u0da6\u0da8\t\'\2\2\u0da7\u0da6\3\2\2\2\u0da7"+ + "\u0da8\3\2\2\2\u0da8\u0da9\3\2\2\2\u0da9\u0daa\5\u00e2r\2\u0daa\u00e9"+ + "\3\2\2\2\u0dab\u0dad\7\u00a4\2\2\u0dac\u0dae\t\'\2\2\u0dad\u0dac\3\2\2"+ + "\2\u0dad\u0dae\3\2\2\2\u0dae\u0db1\3\2\2\2\u0daf\u0db2\5\u00e6t\2\u0db0"+ + "\u0db2\5\u00e2r\2\u0db1\u0daf\3\2\2\2\u0db1\u0db0\3\2\2\2\u0db2\u00eb"+ + "\3\2\2\2\u0db3\u0dbc\t/\2\2\u0db4\u0dbc\7F\2\2\u0db5\u0dbc\7\u009b\2\2"+ + "\u0db6\u0dbc\7\u0097\2\2\u0db7\u0dbc\7\u0095\2\2\u0db8\u0dbc\7\u021a\2"+ + "\2\u0db9\u0dbc\t\60\2\2\u0dba\u0dbc\7\u0096\2\2\u0dbb\u0db3\3\2\2\2\u0dbb"+ + "\u0db4\3\2\2\2\u0dbb\u0db5\3\2\2\2\u0dbb\u0db6\3\2\2\2\u0dbb\u0db7\3\2"+ + "\2\2\u0dbb\u0db8\3\2\2\2\u0dbb\u0db9\3\2\2\2\u0dbb\u0dba\3\2\2\2\u0dbc"+ + "\u00ed\3\2\2\2\u0dbd\u0dc0\7\u03ef\2\2\u0dbe\u0dc0\5\u00f0y\2\u0dbf\u0dbd"+ + "\3\2\2\2\u0dbf\u0dbe\3\2\2\2\u0dc0\u0dc5\3\2\2\2\u0dc1\u0dc2\7\u0402\2"+ + "\2\u0dc2\u0dc4\5\u00f0y\2\u0dc3\u0dc1\3\2\2\2\u0dc4\u0dc7\3\2\2\2\u0dc5"+ + "\u0dc3\3\2\2\2\u0dc5\u0dc6\3\2\2\2\u0dc6\u00ef\3\2\2\2\u0dc7\u0dc5\3\2"+ + "\2\2\u0dc8\u0dc9\5\u01f2\u00fa\2\u0dc9\u0dca\7\u03ff\2\2\u0dca\u0dcb\7"+ + "\u03ef\2\2\u0dcb\u0de6\3\2\2\2\u0dcc\u0dd1\5\u01f6\u00fc\2\u0dcd\u0dcf"+ + "\7\r\2\2\u0dce\u0dcd\3\2\2\2\u0dce\u0dcf\3\2\2\2\u0dcf\u0dd0\3\2\2\2\u0dd0"+ + "\u0dd2\5\u020c\u0107\2\u0dd1\u0dce\3\2\2\2\u0dd1\u0dd2\3\2\2\2\u0dd2\u0de6"+ + "\3\2\2\2\u0dd3\u0dd8\5\u0248\u0125\2\u0dd4\u0dd6\7\r\2\2\u0dd5\u0dd4\3"+ + "\2\2\2\u0dd5\u0dd6\3\2\2\2\u0dd6\u0dd7\3\2\2\2\u0dd7\u0dd9\5\u020c\u0107"+ + "\2\u0dd8\u0dd5\3\2\2\2\u0dd8\u0dd9\3\2\2\2\u0dd9\u0de6\3\2\2\2\u0dda\u0ddb"+ + "\7\u041a\2\2\u0ddb\u0ddd\7\u03e6\2\2\u0ddc\u0dda\3\2\2\2\u0ddc\u0ddd\3"+ + "\2\2\2\u0ddd\u0dde\3\2\2\2\u0dde\u0de3\5\u025c\u012f\2\u0ddf\u0de1\7\r"+ + "\2\2\u0de0\u0ddf\3\2\2\2\u0de0\u0de1\3\2\2\2\u0de1\u0de2\3\2\2\2\u0de2"+ + "\u0de4\5\u020c\u0107\2\u0de3\u0de0\3\2\2\2\u0de3\u0de4\3\2\2\2\u0de4\u0de6"+ + "\3\2\2\2\u0de5\u0dc8\3\2\2\2\u0de5\u0dcc\3\2\2\2\u0de5\u0dd3\3\2\2\2\u0de5"+ + "\u0ddc\3\2\2\2\u0de6\u00f1\3\2\2\2\u0de7\u0de8\7P\2\2\u0de8\u0ded\5\u00bc"+ + "_\2\u0de9\u0dea\7\u0402\2\2\u0dea\u0dec\5\u00bc_\2\u0deb\u0de9\3\2\2\2"+ + "\u0dec\u0def\3\2\2\2\u0ded\u0deb\3\2\2\2\u0ded\u0dee\3\2\2\2\u0dee\u0e0c"+ + "\3\2\2\2\u0def\u0ded\3\2\2\2\u0df0\u0df1\7P\2\2\u0df1\u0df2\7\u0151\2"+ + "\2\u0df2\u0e0c\7\u040f\2\2\u0df3\u0df4\7P\2\2\u0df4\u0df5\7t\2\2\u0df5"+ + "\u0df9\7\u040f\2\2\u0df6\u0df7\7\30\2\2\u0df7\u0df8\7\u008c\2\2\u0df8"+ + "\u0dfa\5\u01fe\u0100\2\u0df9\u0df6\3\2\2\2\u0df9\u0dfa\3\2\2\2\u0dfa\u0e01"+ + "\3\2\2\2\u0dfb\u0dfd\t$\2\2\u0dfc\u0dfe\5\u00f4{\2\u0dfd\u0dfc\3\2\2\2"+ + "\u0dfe\u0dff\3\2\2\2\u0dff\u0dfd\3\2\2\2\u0dff\u0e00\3\2\2\2\u0e00\u0e02"+ + "\3\2\2\2\u0e01\u0dfb\3\2\2\2\u0e01\u0e02\3\2\2\2\u0e02\u0e09\3\2\2\2\u0e03"+ + "\u0e05\7]\2\2\u0e04\u0e06\5\u00f6|\2\u0e05\u0e04\3\2\2\2\u0e06\u0e07\3"+ + "\2\2\2\u0e07\u0e05\3\2\2\2\u0e07\u0e08\3\2\2\2\u0e08\u0e0a\3\2\2\2\u0e09"+ + "\u0e03\3\2\2\2\u0e09\u0e0a\3\2\2\2\u0e0a\u0e0c\3\2\2\2\u0e0b\u0de7\3\2"+ + "\2\2\u0e0b\u0df0\3\2\2\2\u0e0b\u0df3\3\2\2\2\u0e0c\u00f3\3\2\2\2\u0e0d"+ + "\u0e0e\7\u009d\2\2\u0e0e\u0e0f\7\22\2\2\u0e0f\u0e1a\7\u040f\2\2\u0e10"+ + "\u0e12\7o\2\2\u0e11\u0e10\3\2\2\2\u0e11\u0e12\3\2\2\2\u0e12\u0e13\3\2"+ + "\2\2\u0e13\u0e14\7\65\2\2\u0e14\u0e15\7\22\2\2\u0e15\u0e1a\7\u040f\2\2"+ + "\u0e16\u0e17\7\66\2\2\u0e17\u0e18\7\22\2\2\u0e18\u0e1a\7\u040f\2\2\u0e19"+ + "\u0e0d\3\2\2\2\u0e19\u0e11\3\2\2\2\u0e19\u0e16\3\2\2\2\u0e1a\u00f5\3\2"+ + "\2\2\u0e1b\u0e1c\7\u009a\2\2\u0e1c\u0e1d\7\22\2\2\u0e1d\u0e22\7\u040f"+ + "\2\2\u0e1e\u0e1f\7\u009d\2\2\u0e1f\u0e20\7\22\2\2\u0e20\u0e22\7\u040f"+ + "\2\2\u0e21\u0e1b\3\2\2\2\u0e21\u0e1e\3\2\2\2\u0e22\u00f7\3\2\2\2\u0e23"+ + "\u0e24\7?\2\2\u0e24\u0e27\5\u00d4k\2\u0e25\u0e26\7\u00ae\2\2\u0e26\u0e28"+ + "\5\u025c\u012f\2\u0e27\u0e25\3\2\2\2\u0e27\u0e28\3\2\2\2\u0e28\u0e37\3"+ + "\2\2\2\u0e29\u0e2a\7D\2\2\u0e2a\u0e2b\7\22\2\2\u0e2b\u0e30\5\u00fa~\2"+ + "\u0e2c\u0e2d\7\u0402\2\2\u0e2d\u0e2f\5\u00fa~\2\u0e2e\u0e2c\3\2\2\2\u0e2f"+ + "\u0e32\3\2\2\2\u0e30\u0e2e\3\2\2\2\u0e30\u0e31\3\2\2\2\u0e31\u0e35\3\2"+ + "\2\2\u0e32\u0e30\3\2\2\2\u0e33\u0e34\7\u00b0\2\2\u0e34\u0e36\7\u0201\2"+ + "\2\u0e35\u0e33\3\2\2\2\u0e35\u0e36\3\2\2\2\u0e36\u0e38\3\2\2\2\u0e37\u0e29"+ + "\3\2\2\2\u0e37\u0e38\3\2\2\2\u0e38\u0e3b\3\2\2\2\u0e39\u0e3a\7E\2\2\u0e3a"+ + "\u0e3c\5\u025c\u012f\2\u0e3b\u0e39\3\2\2\2\u0e3b\u0e3c\3\2\2\2\u0e3c\u00f9"+ + "\3\2\2\2\u0e3d\u0e3f\5\u025c\u012f\2\u0e3e\u0e40\t+\2\2\u0e3f\u0e3e\3"+ + "\2\2\2\u0e3f\u0e40\3\2\2\2\u0e40\u00fb\3\2\2\2\u0e41\u0e4c\7[\2\2\u0e42"+ + "\u0e43\5\u00fe\u0080\2\u0e43\u0e44\7\u0402\2\2\u0e44\u0e46\3\2\2\2\u0e45"+ + "\u0e42\3\2\2\2\u0e45\u0e46\3\2\2\2\u0e46\u0e47\3\2\2\2\u0e47\u0e4d\5\u00fe"+ + "\u0080\2\u0e48\u0e49\5\u00fe\u0080\2\u0e49\u0e4a\7\u01c7\2\2\u0e4a\u0e4b"+ + "\5\u00fe\u0080\2\u0e4b\u0e4d\3\2\2\2\u0e4c\u0e45\3\2\2\2\u0e4c\u0e48\3"+ + "\2\2\2\u0e4d\u00fd\3\2\2\2\u0e4e\u0e51\5\u0212\u010a\2\u0e4f\u0e51\5\u01fc"+ + "\u00ff\2\u0e50\u0e4e\3\2\2\2\u0e50\u0e4f\3\2\2\2\u0e51\u00ff\3\2\2\2\u0e52"+ + "\u0e53\7\u021e\2\2\u0e53\u0e5c\7\u0235\2\2\u0e54\u0e59\5\u0116\u008c\2"+ + "\u0e55\u0e56\7\u0402\2\2\u0e56\u0e58\5\u0116\u008c\2\u0e57\u0e55\3\2\2"+ + "\2\u0e58\u0e5b\3\2\2\2\u0e59\u0e57\3\2\2\2\u0e59\u0e5a\3\2\2\2\u0e5a\u0e5d"+ + "\3\2\2\2\u0e5b\u0e59\3\2\2\2\u0e5c\u0e54\3\2\2\2\u0e5c\u0e5d\3\2\2\2\u0e5d"+ + "\u0101\3\2\2\2\u0e5e\u0e60\7\u011c\2\2\u0e5f\u0e61\7\u024c\2\2\u0e60\u0e5f"+ + "\3\2\2\2\u0e60\u0e61\3\2\2\2\u0e61\u0103\3\2\2\2\u0e62\u0e64\7\u0134\2"+ + "\2\u0e63\u0e65\7\u024c\2\2\u0e64\u0e63\3\2\2\2\u0e64\u0e65\3\2\2\2\u0e65"+ + "\u0e6b\3\2\2\2\u0e66\u0e68\7\f\2\2\u0e67\u0e69\7\u01c3\2\2\u0e68\u0e67"+ + "\3\2\2\2\u0e68\u0e69\3\2\2\2\u0e69\u0e6a\3\2\2\2\u0e6a\u0e6c\7\u0125\2"+ + "\2\u0e6b\u0e66\3\2\2\2\u0e6b\u0e6c\3\2\2\2\u0e6c\u0e71\3\2\2\2\u0e6d\u0e6f"+ + "\7\u01c3\2\2\u0e6e\u0e6d\3\2\2\2\u0e6e\u0e6f\3\2\2\2\u0e6f\u0e70\3\2\2"+ + "\2\u0e70\u0e72\7~\2\2\u0e71\u0e6e\3\2\2\2\u0e71\u0e72\3\2\2\2\u0e72\u0105"+ + "\3\2\2\2\u0e73\u0e75\7\u0200\2\2\u0e74\u0e76\7\u024c\2\2\u0e75\u0e74\3"+ + "\2\2\2\u0e75\u0e76\3\2\2\2\u0e76\u0e7c\3\2\2\2\u0e77\u0e79\7\f\2\2\u0e78"+ + "\u0e7a\7\u01c3\2\2\u0e79\u0e78\3\2\2\2\u0e79\u0e7a\3\2\2\2\u0e7a\u0e7b"+ + "\3\2\2\2\u0e7b\u0e7d\7\u0125\2\2\u0e7c\u0e77\3\2\2\2\u0e7c\u0e7d\3\2\2"+ + "\2\u0e7d\u0e82\3\2\2\2\u0e7e\u0e80\7\u01c3\2\2\u0e7f\u0e7e\3\2\2\2\u0e7f"+ + "\u0e80\3\2\2\2\u0e80\u0e81\3\2\2\2\u0e81\u0e83\7~\2\2\u0e82\u0e7f\3\2"+ + "\2\2\u0e82\u0e83\3\2\2\2\u0e83\u0107\3\2\2\2\u0e84\u0e85\7\u0206\2\2\u0e85"+ + "\u0e86\5\u020c\u0107\2\u0e86\u0109\3\2\2\2\u0e87\u0e89\7\u0200\2\2\u0e88"+ + "\u0e8a\7\u024c\2\2\u0e89\u0e88\3\2\2\2\u0e89\u0e8a\3\2\2\2\u0e8a\u0e8b"+ + "\3\2\2\2\u0e8b\u0e8d\7\u009f\2\2\u0e8c\u0e8e\7\u0206\2\2\u0e8d\u0e8c\3"+ + "\2\2\2\u0e8d\u0e8e\3\2\2\2\u0e8e\u0e8f\3\2\2\2\u0e8f\u0e90\5\u020c\u0107"+ + "\2\u0e90\u010b\3\2\2\2\u0e91\u0e92\7~\2\2\u0e92\u0e93\7\u0206\2\2\u0e93"+ + "\u0e94\5\u020c\u0107\2\u0e94\u010d\3\2\2\2\u0e95\u0e96\7_\2\2\u0e96\u0e97"+ + "\7\u025e\2\2\u0e97\u0e9c\5\u0118\u008d\2\u0e98\u0e99\7\u0402\2\2\u0e99"+ + "\u0e9b\5\u0118\u008d\2\u0e9a\u0e98\3\2\2\2\u0e9b\u0e9e\3\2\2\2\u0e9c\u0e9a"+ + "\3\2\2\2\u0e9c\u0e9d\3\2\2\2\u0e9d\u010f\3\2\2\2\u0e9e\u0e9c\3\2\2\2\u0e9f"+ + "\u0ea0\7\u00a6\2\2\u0ea0\u0ea1\7\u025e\2\2\u0ea1\u0111\3\2\2\2\u0ea2\u0ea3"+ + "\7\u008c\2\2\u0ea3\u0ea4\7\u0118\2\2\u0ea4\u0ea5\7\u03f7\2\2\u0ea5\u0ea6"+ + "\t\30\2\2\u0ea6\u0113\3\2\2\2\u0ea7\u0ea9\7\u008c\2\2\u0ea8\u0eaa\t\61"+ + "\2\2\u0ea9\u0ea8\3\2\2\2\u0ea9\u0eaa\3\2\2\2\u0eaa\u0eab\3\2\2\2\u0eab"+ + "\u0eac\7\u0235\2\2\u0eac\u0eb1\5\u011c\u008f\2\u0ead\u0eae\7\u0402\2\2"+ + "\u0eae\u0eb0\5\u011c\u008f\2\u0eaf\u0ead\3\2\2\2\u0eb0\u0eb3\3\2\2\2\u0eb1"+ + "\u0eaf\3\2\2\2\u0eb1\u0eb2\3\2\2\2\u0eb2\u0115\3\2\2\2\u0eb3\u0eb1\3\2"+ + "\2\2\u0eb4\u0eb5\7\u00b0\2\2\u0eb5\u0eb6\7\u013b\2\2\u0eb6\u0ebc\7\u0211"+ + "\2\2\u0eb7\u0eb8\7z\2\2\u0eb8\u0ebc\7\u00b1\2\2\u0eb9\u0eba\7z\2\2\u0eba"+ + "\u0ebc\7\u01cd\2\2\u0ebb\u0eb4\3\2\2\2\u0ebb\u0eb7\3\2\2\2\u0ebb\u0eb9"+ + "\3\2\2\2\u0ebc\u0117\3\2\2\2\u0ebd\u0ec2\5\u01f4\u00fb\2\u0ebe\u0ec0\7"+ + "\r\2\2\u0ebf\u0ebe\3\2\2\2\u0ebf\u0ec0\3\2\2\2\u0ec0\u0ec1\3\2\2\2\u0ec1"+ + "\u0ec3\5\u020c\u0107\2\u0ec2\u0ebf\3\2\2\2\u0ec2\u0ec3\3\2\2\2\u0ec3\u0ec4"+ + "\3\2\2\2\u0ec4\u0ec5\5\u011a\u008e\2\u0ec5\u0119\3\2\2\2\u0ec6\u0ec8\7"+ + "z\2\2\u0ec7\u0ec9\7\u0194\2\2\u0ec8\u0ec7\3\2\2\2\u0ec8\u0ec9\3\2\2\2"+ + "\u0ec9\u0ecf\3\2\2\2\u0eca\u0ecc\7a\2\2\u0ecb\u0eca\3\2\2\2\u0ecb\u0ecc"+ + "\3\2\2\2\u0ecc\u0ecd\3\2\2\2\u0ecd\u0ecf\7\u00b1\2\2\u0ece\u0ec6\3\2\2"+ + "\2\u0ece\u0ecb\3\2\2\2\u0ecf\u011b\3\2\2\2\u0ed0\u0ed1\7\u018a\2\2\u0ed1"+ + "\u0ed2\7\u0192\2\2\u0ed2\u0ed8\5\u011e\u0090\2\u0ed3\u0ed4\7z\2\2\u0ed4"+ + "\u0ed8\7\u00b1\2\2\u0ed5\u0ed6\7z\2\2\u0ed6\u0ed8\7\u01cd\2\2\u0ed7\u0ed0"+ + "\3\2\2\2\u0ed7\u0ed3\3\2\2\2\u0ed7\u0ed5\3\2\2\2\u0ed8\u011d\3\2\2\2\u0ed9"+ + "\u0eda\7\u02b5\2\2\u0eda\u0ee1\7z\2\2\u0edb\u0edc\7z\2\2\u0edc\u0ee1\7"+ + "\u02b6\2\2\u0edd\u0ede\7z\2\2\u0ede\u0ee1\7\u02b7\2\2\u0edf\u0ee1\7\u02b8"+ + "\2\2\u0ee0\u0ed9\3\2\2\2\u0ee0\u0edb\3\2\2\2\u0ee0\u0edd\3\2\2\2\u0ee0"+ + "\u0edf\3\2\2\2\u0ee1\u011f\3\2\2\2\u0ee2\u0ee3\7\27\2\2\u0ee3\u0ee4\7"+ + "\u0197\2\2\u0ee4\u0ee5\7\u009f\2\2\u0ee5\u0eea\5\u0132\u009a\2\u0ee6\u0ee7"+ + "\7\u0402\2\2\u0ee7\u0ee9\5\u0132\u009a\2\u0ee8\u0ee6\3\2\2\2\u0ee9\u0eec"+ + "\3\2\2\2\u0eea\u0ee8\3\2\2\2\u0eea\u0eeb\3\2\2\2\u0eeb\u0eee\3\2\2\2\u0eec"+ + "\u0eea\3\2\2\2\u0eed\u0eef\5\u013a\u009e\2\u0eee\u0eed\3\2\2\2\u0eee\u0eef"+ + "\3\2\2\2\u0eef\u0121\3\2\2\2\u0ef0\u0ef1\7\27\2\2\u0ef1\u0ef2\7\u01fa"+ + "\2\2\u0ef2\u0ef3\7\u016b\2\2\u0ef3\u0ef8\5\u013c\u009f\2\u0ef4\u0ef5\7"+ + "\u0402\2\2\u0ef5\u0ef7\5\u013c\u009f\2\u0ef6\u0ef4\3\2\2\2\u0ef7\u0efa"+ + "\3\2\2\2\u0ef8\u0ef6\3\2\2\2\u0ef8\u0ef9\3\2\2\2\u0ef9\u0123\3\2\2\2\u0efa"+ + "\u0ef8\3\2\2\2\u0efb\u0efc\7x\2\2\u0efc\u0efd\t\62\2\2\u0efd\u0f02\7\u0196"+ + "\2\2\u0efe\u0eff\7\u009f\2\2\u0eff\u0f03\7\u040f\2\2\u0f00\u0f01\7\17"+ + "\2\2\u0f01\u0f03\7\u040f\2\2\u0f02\u0efe\3\2\2\2\u0f02\u0f00\3\2\2\2\u0f03"+ + "\u0125\3\2\2\2\u0f04\u0f05\7\u01fb\2\2\u0f05\u0f06\7\u0197\2\2\u0f06\u0127"+ + "\3\2\2\2\u0f07\u0f08\7\u01fb\2\2\u0f08\u0f0a\7\u020f\2\2\u0f09\u0f0b\7"+ + "\b\2\2\u0f0a\u0f09\3\2\2\2\u0f0a\u0f0b\3\2\2\2\u0f0b\u0f0d\3\2\2\2\u0f0c"+ + "\u0f0e\5\u013a\u009e\2\u0f0d\u0f0c\3\2\2\2\u0f0d\u0f0e\3\2\2\2\u0f0e\u0129"+ + "\3\2\2\2\u0f0f\u0f10\7\u021e\2\2\u0f10\u0f19\7\u020f\2\2\u0f11\u0f16\5"+ + "\u0140\u00a1\2\u0f12\u0f13\7\u0402\2\2\u0f13\u0f15\5\u0140\u00a1\2\u0f14"+ + "\u0f12\3\2\2\2\u0f15\u0f18\3\2\2\2\u0f16\u0f14\3\2\2\2\u0f16\u0f17\3\2"+ + "\2\2\u0f17\u0f1a\3\2\2\2\u0f18\u0f16\3\2\2\2\u0f19\u0f11\3\2\2\2\u0f19"+ + "\u0f1a\3\2\2\2\u0f1a\u0f1d\3\2\2\2\u0f1b\u0f1c\7\u023e\2\2\u0f1c\u0f1e"+ + "\5\u0142\u00a2\2\u0f1d\u0f1b\3\2\2\2\u0f1d\u0f1e\3\2\2\2\u0f1e\u0f22\3"+ + "\2\2\2\u0f1f\u0f21\5\u0144\u00a3\2\u0f20\u0f1f\3\2\2\2\u0f21\u0f24\3\2"+ + "\2\2\u0f22\u0f20\3\2\2\2\u0f22\u0f23\3\2\2\2\u0f23\u0f26\3\2\2\2\u0f24"+ + "\u0f22\3\2\2\2\u0f25\u0f27\5\u013a\u009e\2\u0f26\u0f25\3\2\2\2\u0f26\u0f27"+ + "\3\2\2\2\u0f27\u012b\3\2\2\2\u0f28\u0f29\7\u0224\2\2\u0f29\u0f32\7\u020f"+ + "\2\2\u0f2a\u0f2f\5\u0140\u00a1\2\u0f2b\u0f2c\7\u0402\2\2\u0f2c\u0f2e\5"+ + "\u0140\u00a1\2\u0f2d\u0f2b\3\2\2\2\u0f2e\u0f31\3\2\2\2\u0f2f\u0f2d\3\2"+ + "\2\2\u0f2f\u0f30\3\2\2\2\u0f30\u0f33\3\2\2\2\u0f31\u0f2f\3\2\2\2\u0f32"+ + "\u0f2a\3\2\2\2\u0f32\u0f33\3\2\2\2\u0f33\u012d\3\2\2\2\u0f34\u0f35\7\u021e"+ + "\2\2\u0f35\u0f36\7\u0176\2\2\u0f36\u012f\3\2\2\2\u0f37\u0f38\7\u0224\2"+ + "\2\u0f38\u0f39\7\u0176\2\2\u0f39\u0131\3\2\2\2\u0f3a\u0f3b\5\u0134\u009b"+ + "\2\u0f3b\u0f3c\7\u03f7\2\2\u0f3c\u0f3d\7\u040f\2\2\u0f3d\u0f58\3\2\2\2"+ + "\u0f3e\u0f3f\5\u0136\u009c\2\u0f3f\u0f40\7\u03f7\2\2\u0f40\u0f41\5\u0212"+ + "\u010a\2\u0f41\u0f58\3\2\2\2\u0f42\u0f43\5\u0138\u009d\2\u0f43\u0f44\7"+ + "\u03f7\2\2\u0f44\u0f45\t\30\2\2\u0f45\u0f58\3\2\2\2\u0f46\u0f47\7\u019b"+ + "\2\2\u0f47\u0f48\7\u03f7\2\2\u0f48\u0f58\7\u0412\2\2\u0f49\u0f4a\7\u017d"+ + "\2\2\u0f4a\u0f4b\7\u03f7\2\2\u0f4b\u0f54\7\u0400\2\2\u0f4c\u0f51\5\u020c"+ + "\u0107\2\u0f4d\u0f4e\7\u0402\2\2\u0f4e\u0f50\5\u020c\u0107\2\u0f4f\u0f4d"+ + "\3\2\2\2\u0f50\u0f53\3\2\2\2\u0f51\u0f4f\3\2\2\2\u0f51\u0f52\3\2\2\2\u0f52"+ + "\u0f55\3\2\2\2\u0f53\u0f51\3\2\2\2\u0f54\u0f4c\3\2\2\2\u0f54\u0f55\3\2"+ + "\2\2\u0f55\u0f56\3\2\2\2\u0f56\u0f58\7\u0401\2\2\u0f57\u0f3a\3\2\2\2\u0f57"+ + "\u0f3e\3\2\2\2\u0f57\u0f42\3\2\2\2\u0f57\u0f46\3\2\2\2\u0f57\u0f49\3\2"+ + "\2\2\u0f58\u0133\3\2\2\2\u0f59\u0f5a\t\63\2\2\u0f5a\u0135\3\2\2\2\u0f5b"+ + "\u0f5c\t\64\2\2\u0f5c\u0137\3\2\2\2\u0f5d\u0f5e\t\65\2\2\u0f5e\u0139\3"+ + "\2\2\2\u0f5f\u0f60\7<\2\2\u0f60\u0f61\7\u0127\2\2\u0f61\u0f62\7\u040f"+ + "\2\2\u0f62\u013b\3\2\2\2\u0f63\u0f64\7\u01f3\2\2\u0f64\u0f65\7\u03f7\2"+ + "\2\u0f65\u0f66\7\u0400\2\2\u0f66\u0f67\5\u022c\u0117\2\u0f67\u0f68\7\u0401"+ + "\2\2\u0f68\u0f95\3\2\2\2\u0f69\u0f6a\7\u01f5\2\2\u0f6a\u0f6b\7\u03f7\2"+ + "\2\u0f6b\u0f6c\7\u0400\2\2\u0f6c\u0f6d\5\u022c\u0117\2\u0f6d\u0f6e\7\u0401"+ + "\2\2\u0f6e\u0f95\3\2\2\2\u0f6f\u0f70\7\u01f4\2\2\u0f70\u0f71\7\u03f7\2"+ + "\2\u0f71\u0f72\7\u0400\2\2\u0f72\u0f73\5\u022e\u0118\2\u0f73\u0f74\7\u0401"+ + "\2\2\u0f74\u0f95\3\2\2\2\u0f75\u0f76\7\u01f6\2\2\u0f76\u0f77\7\u03f7\2"+ + "\2\u0f77\u0f78\7\u0400\2\2\u0f78\u0f79\5\u022e\u0118\2\u0f79\u0f7a\7\u0401"+ + "\2\2\u0f7a\u0f95\3\2\2\2\u0f7b\u0f7c\7\u01f8\2\2\u0f7c\u0f7d\7\u03f7\2"+ + "\2\u0f7d\u0f7e\7\u0400\2\2\u0f7e\u0f7f\5\u023a\u011e\2\u0f7f\u0f80\7\u0401"+ + "\2\2\u0f80\u0f95\3\2\2\2\u0f81\u0f82\7\u01f9\2\2\u0f82\u0f83\7\u03f7\2"+ + "\2\u0f83\u0f84\7\u0400\2\2\u0f84\u0f85\5\u023a\u011e\2\u0f85\u0f86\7\u0401"+ + "\2\2\u0f86\u0f95\3\2\2\2\u0f87\u0f88\7\u01f7\2\2\u0f88\u0f89\7\u03f7\2"+ + "\2\u0f89\u0f8a\7\u0400\2\2\u0f8a\u0f8f\5\u013e\u00a0\2\u0f8b\u0f8c\7\u0402"+ + "\2\2\u0f8c\u0f8e\5\u013e\u00a0\2\u0f8d\u0f8b\3\2\2\2\u0f8e\u0f91\3\2\2"+ + "\2\u0f8f\u0f8d\3\2\2\2\u0f8f\u0f90\3\2\2\2\u0f90\u0f92\3\2\2\2\u0f91\u0f8f"+ + "\3\2\2\2\u0f92\u0f93\7\u0401\2\2\u0f93\u0f95\3\2\2\2\u0f94\u0f63\3\2\2"+ + "\2\u0f94\u0f69\3\2\2\2\u0f94\u0f6f\3\2\2\2\u0f94\u0f75\3\2\2\2\u0f94\u0f7b"+ + "\3\2\2\2\u0f94\u0f81\3\2\2\2\u0f94\u0f87\3\2\2\2\u0f95\u013d\3\2\2\2\u0f96"+ + "\u0f97\7\u0400\2\2\u0f97\u0f98\5\u01f4\u00fb\2\u0f98\u0f99\7\u0402\2\2"+ + "\u0f99\u0f9a\5\u01f4\u00fb\2\u0f9a\u0f9b\7\u0401\2\2\u0f9b\u013f\3\2\2"+ + "\2\u0f9c\u0f9d\t\66\2\2\u0f9d\u0141\3\2\2\2\u0f9e\u0f9f\t\67\2\2\u0f9f"+ + "\u0fa0\7\u03f7\2\2\u0fa0\u0fb1\5\u0146\u00a4\2\u0fa1\u0fa2\7\u019d\2\2"+ + "\u0fa2\u0fa3\7\u03f7\2\2\u0fa3\u0fa4\7\u040f\2\2\u0fa4\u0fa5\7\u0402\2"+ + "\2\u0fa5\u0fa6\7\u019e\2\2\u0fa6\u0fa7\7\u03f7\2\2\u0fa7\u0fb1\5\u0212"+ + "\u010a\2\u0fa8\u0fa9\7\u01ed\2\2\u0fa9\u0faa\7\u03f7\2\2\u0faa\u0fab\7"+ + "\u040f\2\2\u0fab\u0fac\7\u0402\2\2\u0fac\u0fad\7\u01ee\2\2\u0fad\u0fae"+ + "\7\u03f7\2\2\u0fae\u0fb1\5\u0212\u010a\2\u0faf\u0fb1\7\u0218\2\2\u0fb0"+ + "\u0f9e\3\2\2\2\u0fb0\u0fa1\3\2\2\2\u0fb0\u0fa8\3\2\2\2\u0fb0\u0faf\3\2"+ + "\2\2\u0fb1\u0143\3\2\2\2\u0fb2\u0fb3\7\u0240\2\2\u0fb3\u0fb4\7\u03f7\2"+ + "\2\u0fb4\u0fbf\7\u040f\2\2\u0fb5\u0fb6\7\u01d8\2\2\u0fb6\u0fb7\7\u03f7"+ + "\2\2\u0fb7\u0fbf\7\u040f\2\2\u0fb8\u0fb9\7\u0148\2\2\u0fb9\u0fba\7\u03f7"+ + "\2\2\u0fba\u0fbf\7\u040f\2\2\u0fbb\u0fbc\7\u01db\2\2\u0fbc\u0fbd\7\u03f7"+ + "\2\2\u0fbd\u0fbf\7\u040f\2\2\u0fbe\u0fb2\3\2\2\2\u0fbe\u0fb5\3\2\2\2\u0fbe"+ + "\u0fb8\3\2\2\2\u0fbe\u0fbb\3\2\2\2\u0fbf\u0145\3\2\2\2\u0fc0\u0fc5\5\u0204"+ + "\u0103\2\u0fc1\u0fc2\7\u0402\2\2\u0fc2\u0fc4\5\u0204\u0103\2\u0fc3\u0fc1"+ + "\3\2\2\2\u0fc4\u0fc7\3\2\2\2\u0fc5\u0fc3\3\2\2\2\u0fc5\u0fc6\3\2\2\2\u0fc6"+ + "\u0fca\3\2\2\2\u0fc7\u0fc5\3\2\2\2\u0fc8\u0fca\7\u040f\2\2\u0fc9\u0fc0"+ + "\3\2\2\2\u0fc9\u0fc8\3\2\2\2\u0fca\u0147\3\2\2\2\u0fcb\u0fcc\7\u024f\2"+ + "\2\u0fcc\u0fcd\t8\2\2\u0fcd\u0fcf\5\u0206\u0104\2\u0fce\u0fd0\t9\2\2\u0fcf"+ + "\u0fce\3\2\2\2\u0fcf\u0fd0\3\2\2\2\u0fd0\u0149\3\2\2\2\u0fd1\u0fd2\7\u024f"+ + "\2\2\u0fd2\u0fd3\7\u0156\2\2\u0fd3\u0fd9\5\u0206\u0104\2\u0fd4\u0fd7\7"+ + "\u022c\2\2\u0fd5\u0fd6\7<\2\2\u0fd6\u0fd8\7\u01b7\2\2\u0fd7\u0fd5\3\2"+ + "\2\2\u0fd7\u0fd8\3\2\2\2\u0fd8\u0fda\3\2\2\2\u0fd9\u0fd4\3\2\2\2\u0fd9"+ + "\u0fda\3\2\2\2\u0fda\u014b\3\2\2\2\u0fdb\u0fdc\7\u024f\2\2\u0fdc\u0fdd"+ + "\7\u01df\2\2\u0fdd\u0fde\5\u0206\u0104\2\u0fde\u014d\3\2\2\2\u0fdf\u0fe0"+ + "\7\u024f\2\2\u0fe0\u0fe1\7\u0134\2\2\u0fe1\u0fe4\5\u0206\u0104\2\u0fe2"+ + "\u0fe3\7\u01cb\2\2\u0fe3\u0fe5\7\u01d9\2\2\u0fe4\u0fe2\3\2\2\2\u0fe4\u0fe5"+ + "\3\2\2\2\u0fe5\u014f\3\2\2\2\u0fe6\u0fe7\7\u024f\2\2\u0fe7\u0fe8\7\u0200"+ + "\2\2\u0fe8\u0fe9\5\u0206\u0104\2\u0fe9\u0151\3\2\2\2\u0fea\u0feb\7\u024f"+ + "\2\2\u0feb\u0fee\7\u01e9\2\2\u0fec\u0fed\7\37\2\2\u0fed\u0fef\5\u0206"+ + "\u0104\2\u0fee\u0fec\3\2\2\2\u0fee\u0fef\3\2\2\2\u0fef\u0153\3\2\2\2\u0ff0"+ + "\u0ff1\7\u01df\2\2\u0ff1\u0ff2\5\u020c\u0107\2\u0ff2\u0ff5\7?\2\2\u0ff3"+ + "\u0ff6\7\u040f\2\2\u0ff4\u0ff6\7\u041a\2\2\u0ff5\u0ff3\3\2\2\2\u0ff5\u0ff4"+ + "\3\2\2\2\u0ff6\u0155\3\2\2\2\u0ff7\u0ff8\7\u0260\2\2\u0ff8\u0ffb\5\u020c"+ + "\u0107\2\u0ff9\u0ffa\7\u00ab\2\2\u0ffa\u0ffc\5\u023c\u011f\2\u0ffb\u0ff9"+ + "\3\2\2\2\u0ffb\u0ffc\3\2\2\2\u0ffc\u0157\3\2\2\2\u0ffd\u0ffe\t:\2\2\u0ffe"+ + "\u0fff\7\u01df\2\2\u0fff\u1000\5\u020c\u0107\2\u1000\u0159\3\2\2\2\u1001"+ + "\u1004\5\u015c\u00af\2\u1002\u1004\5\6\4\2\u1003\u1001\3\2\2\2\u1003\u1002"+ + "\3\2\2\2\u1004\u015b\3\2\2\2\u1005\u1006\5\u020c\u0107\2\u1006\u1007\7"+ + "\u040b\2\2\u1007\u1009\3\2\2\2\u1008\u1005\3\2\2\2\u1008\u1009\3\2\2\2"+ + "\u1009\u100a\3\2\2\2\u100a\u1031\7\u011c\2\2\u100b\u100c\5\u0170\u00b9"+ + "\2\u100c\u100d\7\u0403\2\2\u100d\u100f\3\2\2\2\u100e\u100b\3\2\2\2\u100f"+ + "\u1012\3\2\2\2\u1010\u100e\3\2\2\2\u1010\u1011\3\2\2\2\u1011\u1018\3\2"+ + "\2\2\u1012\u1010\3\2\2\2\u1013\u1014\5\u0172\u00ba\2\u1014\u1015\7\u0403"+ + "\2\2\u1015\u1017\3\2\2\2\u1016\u1013\3\2\2\2\u1017\u101a\3\2\2\2\u1018"+ + "\u1016\3\2\2\2\u1018\u1019\3\2\2\2\u1019\u1020\3\2\2\2\u101a\u1018\3\2"+ + "\2\2\u101b\u101c\5\u0174\u00bb\2\u101c\u101d\7\u0403\2\2\u101d\u101f\3"+ + "\2\2\2\u101e\u101b\3\2\2\2\u101f\u1022\3\2\2\2\u1020\u101e\3\2\2\2\u1020"+ + "\u1021\3\2\2\2\u1021\u1028\3\2\2\2\u1022\u1020\3\2\2\2\u1023\u1024\5\u0176"+ + "\u00bc\2\u1024\u1025\7\u0403\2\2\u1025\u1027\3\2\2\2\u1026\u1023\3\2\2"+ + "\2\u1027\u102a\3\2\2\2\u1028\u1026\3\2\2\2\u1028\u1029\3\2\2\2\u1029\u102e"+ + "\3\2\2\2\u102a\u1028\3\2\2\2\u102b\u102d\5\u017a\u00be\2\u102c\u102b\3"+ + "\2\2\2\u102d\u1030\3\2\2\2\u102e\u102c\3\2\2\2\u102e\u102f\3\2\2\2\u102f"+ + "\u1032\3\2\2\2\u1030\u102e\3\2\2\2\u1031\u1010\3\2\2\2\u1031\u1032\3\2"+ + "\2\2\u1032\u1033\3\2\2\2\u1033\u1035\7\u0156\2\2\u1034\u1036\5\u020c\u0107"+ + "\2\u1035\u1034\3\2\2\2\u1035\u1036\3\2\2\2\u1036\u015d\3\2\2\2\u1037\u103a"+ + "\7\25\2\2\u1038\u103b\5\u020c\u0107\2\u1039\u103b\5\u025c\u012f\2\u103a"+ + "\u1038\3\2\2\2\u103a\u1039\3\2\2\2\u103a\u103b\3\2\2\2\u103b\u103d\3\2"+ + "\2\2\u103c\u103e\5\u017c\u00bf\2\u103d\u103c\3\2\2\2\u103e\u103f\3\2\2"+ + "\2\u103f\u103d\3\2\2\2\u103f\u1040\3\2\2\2\u1040\u1047\3\2\2\2\u1041\u1043"+ + "\7\63\2\2\u1042\u1044\5\u017a\u00be\2\u1043\u1042\3\2\2\2\u1044\u1045"+ + "\3\2\2\2\u1045\u1043\3\2\2\2\u1045\u1046\3\2\2\2\u1046\u1048\3\2\2\2\u1047"+ + "\u1041\3\2\2\2\u1047\u1048\3\2\2\2\u1048\u1049\3\2\2\2\u1049\u104a\7\u0156"+ + "\2\2\u104a\u104b\7\25\2\2\u104b\u015f\3\2\2\2\u104c\u104d\7G\2\2\u104d"+ + "\u104e\5\u025c\u012f\2\u104e\u1050\7\u009e\2\2\u104f\u1051\5\u017a\u00be"+ + "\2\u1050\u104f\3\2\2\2\u1051\u1052\3\2\2\2\u1052\u1050\3\2\2\2\u1052\u1053"+ + "\3\2\2\2\u1053\u1057\3"; + private static final String _serializedATNSegment2 = + "\2\2\2\u1054\u1056\5\u017e\u00c0\2\u1055\u1054\3\2\2\2\u1056\u1059\3\2"+ + "\2\2\u1057\u1055\3\2\2\2\u1057\u1058\3\2\2\2\u1058\u1060\3\2\2\2\u1059"+ + "\u1057\3\2\2\2\u105a\u105c\7\63\2\2\u105b\u105d\5\u017a\u00be\2\u105c"+ + "\u105b\3\2\2\2\u105d\u105e\3\2\2\2\u105e\u105c\3\2\2\2\u105e\u105f\3\2"+ + "\2\2\u105f\u1061\3\2\2\2\u1060\u105a\3\2\2\2\u1060\u1061\3\2\2\2\u1061"+ + "\u1062\3\2\2\2\u1062\u1063\7\u0156\2\2\u1063\u1064\7G\2\2\u1064\u0161"+ + "\3\2\2\2\u1065\u1066\7R\2\2\u1066\u1067\5\u020c\u0107\2\u1067\u0163\3"+ + "\2\2\2\u1068\u1069\7X\2\2\u1069\u106a\5\u020c\u0107\2\u106a\u0165\3\2"+ + "\2\2\u106b\u106c\5\u020c\u0107\2\u106c\u106d\7\u040b\2\2\u106d\u106f\3"+ + "\2\2\2\u106e\u106b\3\2\2\2\u106e\u106f\3\2\2\2\u106f\u1070\3\2\2\2\u1070"+ + "\u1072\7`\2\2\u1071\u1073\5\u017a\u00be\2\u1072\u1071\3\2\2\2\u1073\u1074"+ + "\3\2\2\2\u1074\u1072\3\2\2\2\u1074\u1075\3\2\2\2\u1075\u1076\3\2\2\2\u1076"+ + "\u1077\7\u0156\2\2\u1077\u1079\7`\2\2\u1078\u107a\5\u020c\u0107\2\u1079"+ + "\u1078\3\2\2\2\u1079\u107a\3\2\2\2\u107a\u0167\3\2\2\2\u107b\u107c\5\u020c"+ + "\u0107\2\u107c\u107d\7\u040b\2\2\u107d\u107f\3\2\2\2\u107e\u107b\3\2\2"+ + "\2\u107e\u107f\3\2\2\2\u107f\u1080\3\2\2\2\u1080\u1082\7\u0080\2\2\u1081"+ + "\u1083\5\u017a\u00be\2\u1082\u1081\3\2\2\2\u1083\u1084\3\2\2\2\u1084\u1082"+ + "\3\2\2\2\u1084\u1085\3\2\2\2\u1085\u1086\3\2\2\2\u1086\u1087\7\u023e\2"+ + "\2\u1087\u1088\5\u025c\u012f\2\u1088\u1089\7\u0156\2\2\u1089\u108b\7\u0080"+ + "\2\2\u108a\u108c\5\u020c\u0107\2\u108b\u108a\3\2\2\2\u108b\u108c\3\2\2"+ + "\2\u108c\u0169\3\2\2\2\u108d\u108e\7\u0085\2\2\u108e\u108f\5\u025c\u012f"+ + "\2\u108f\u016b\3\2\2\2\u1090\u1091\5\u020c\u0107\2\u1091\u1092\7\u040b"+ + "\2\2\u1092\u1094\3\2\2\2\u1093\u1090\3\2\2\2\u1093\u1094\3\2\2\2\u1094"+ + "\u1095\3\2\2\2\u1095\u1096\7\u00af\2\2\u1096\u1097\5\u025c\u012f\2\u1097"+ + "\u1099\7\u0150\2\2\u1098\u109a\5\u017a\u00be\2\u1099\u1098\3\2\2\2\u109a"+ + "\u109b\3\2\2\2\u109b\u1099\3\2\2\2\u109b\u109c\3\2\2\2\u109c\u109d\3\2"+ + "\2\2\u109d\u109e\7\u0156\2\2\u109e\u10a0\7\u00af\2\2\u109f\u10a1\5\u020c"+ + "\u0107\2\u10a0\u109f\3\2\2\2\u10a0\u10a1\3\2\2\2\u10a1\u016d\3\2\2\2\u10a2"+ + "\u10a3\7\u012d\2\2\u10a3\u10b2\5\u020c\u0107\2\u10a4\u10a9\7;\2\2\u10a5"+ + "\u10a7\7\u01c2\2\2\u10a6\u10a5\3\2\2\2\u10a6\u10a7\3\2\2\2\u10a7\u10a8"+ + "\3\2\2\2\u10a8\u10aa\7?\2\2\u10a9\u10a6\3\2\2\2\u10a9\u10aa\3\2\2\2\u10aa"+ + "\u10ab\3\2\2\2\u10ab\u10ac\5\u020c\u0107\2\u10ac\u10ad\7P\2\2\u10ad\u10ae"+ + "\5\u022c\u0117\2\u10ae\u10b2\3\2\2\2\u10af\u10b0\7\u01ce\2\2\u10b0\u10b2"+ + "\5\u020c\u0107\2\u10b1\u10a2\3\2\2\2\u10b1\u10a4\3\2\2\2\u10b1\u10af\3"+ + "\2\2\2\u10b2\u016f\3\2\2\2\u10b3\u10b4\7\'\2\2\u10b4\u10b5\5\u022c\u0117"+ + "\2\u10b5\u10b8\5\u0220\u0111\2\u10b6\u10b7\7(\2\2\u10b7\u10b9\5\u023e"+ + "\u0120\2\u10b8\u10b6\3\2\2\2\u10b8\u10b9\3\2\2\2\u10b9\u0171\3\2\2\2\u10ba"+ + "\u10bb\7\'\2\2\u10bb\u10bc\5\u020c\u0107\2\u10bc\u10bd\7\34\2\2\u10bd"+ + "\u10c4\7<\2\2\u10be\u10c5\5\u0212\u010a\2\u10bf\u10c1\7\u0093\2\2\u10c0"+ + "\u10c2\7\u0244\2\2\u10c1\u10c0\3\2\2\2\u10c1\u10c2\3\2\2\2\u10c2\u10c3"+ + "\3\2\2\2\u10c3\u10c5\7\u040f\2\2\u10c4\u10be\3\2\2\2\u10c4\u10bf\3\2\2"+ + "\2\u10c5\u0173\3\2\2\2\u10c6\u10c7\7\'\2\2\u10c7\u10c8\5\u020c\u0107\2"+ + "\u10c8\u10c9\7$\2\2\u10c9\u10ca\7<\2\2\u10ca\u10cb\5\u00b4[\2\u10cb\u0175"+ + "\3\2\2\2\u10cc\u10cd\7\'\2\2\u10cd\u10ce\t;\2\2\u10ce\u10cf\7\u0177\2"+ + "\2\u10cf\u10d0\7<\2\2\u10d0\u10d5\5\u0178\u00bd\2\u10d1\u10d2\7\u0402"+ + "\2\2\u10d2\u10d4\5\u0178\u00bd\2\u10d3\u10d1\3\2\2\2\u10d4\u10d7\3\2\2"+ + "\2\u10d5\u10d3\3\2\2\2\u10d5\u10d6\3\2\2\2\u10d6\u10d8\3\2\2\2\u10d7\u10d5"+ + "\3\2\2\2\u10d8\u10d9\5\u015a\u00ae\2\u10d9\u0177\3\2\2\2\u10da\u10e6\5"+ + "\u0212\u010a\2\u10db\u10dd\7\u0093\2\2\u10dc\u10de\7\u0244\2\2\u10dd\u10dc"+ + "\3\2\2\2\u10dd\u10de\3\2\2\2\u10de\u10df\3\2\2\2\u10df\u10e6\7\u040f\2"+ + "\2\u10e0\u10e6\5\u020c\u0107\2\u10e1\u10e6\7\u0094\2\2\u10e2\u10e3\7h"+ + "\2\2\u10e3\u10e6\7\u0170\2\2\u10e4\u10e6\7\u0092\2\2\u10e5\u10da\3\2\2"+ + "\2\u10e5\u10db\3\2\2\2\u10e5\u10e0\3\2\2\2\u10e5\u10e1\3\2\2\2\u10e5\u10e2"+ + "\3\2\2\2\u10e5\u10e4\3\2\2\2\u10e6\u0179\3\2\2\2\u10e7\u10ea\5\24\13\2"+ + "\u10e8\u10ea\5\6\4\2\u10e9\u10e7\3\2\2\2\u10e9\u10e8\3\2\2\2\u10ea\u10eb"+ + "\3\2\2\2\u10eb\u10ec\7\u0403\2\2\u10ec\u017b\3\2\2\2\u10ed\u10f0\7\u00ad"+ + "\2\2\u10ee\u10f1\5\u021e\u0110\2\u10ef\u10f1\5\u025c\u012f\2\u10f0\u10ee"+ + "\3\2\2\2\u10f0\u10ef\3\2\2\2\u10f1\u10f2\3\2\2\2\u10f2\u10f4\7\u009e\2"+ + "\2\u10f3\u10f5\5\u017a\u00be\2\u10f4\u10f3\3\2\2\2\u10f5\u10f6\3\2\2\2"+ + "\u10f6\u10f4\3\2\2\2\u10f6\u10f7\3\2\2\2\u10f7\u017d\3\2\2\2\u10f8\u10f9"+ + "\7\64\2\2\u10f9\u10fa\5\u025c\u012f\2\u10fa\u10fc\7\u009e\2\2\u10fb\u10fd"+ + "\5\u017a\u00be\2\u10fc\u10fb\3\2\2\2\u10fd\u10fe\3\2\2\2\u10fe\u10fc\3"+ + "\2\2\2\u10fe\u10ff\3\2\2\2\u10ff\u017f\3\2\2\2\u1100\u1101\7\t\2\2\u1101"+ + "\u1102\7\u0240\2\2\u1102\u1107\5\u0192\u00ca\2\u1103\u1104\7\u0402\2\2"+ + "\u1104\u1106\5\u0192\u00ca\2\u1105\u1103\3\2\2\2\u1106\u1109\3\2\2\2\u1107"+ + "\u1105\3\2\2\2\u1107\u1108\3\2\2\2\u1108\u1137\3\2\2\2\u1109\u1107\3\2"+ + "\2\2\u110a\u110b\7\t\2\2\u110b\u110d\7\u0240\2\2\u110c\u110e\5\u0244\u0123"+ + "\2\u110d\u110c\3\2\2\2\u110d\u110e\3\2\2\2\u110e\u110f\3\2\2\2\u110f\u1114"+ + "\5\u0194\u00cb\2\u1110\u1111\7\u0402\2\2\u1111\u1113\5\u0194\u00cb\2\u1112"+ + "\u1110\3\2\2\2\u1113\u1116\3\2\2\2\u1114\u1112\3\2\2\2\u1114\u1115\3\2"+ + "\2\2\u1115\u1125\3\2\2\2\u1116\u1114\3\2\2\2\u1117\u1123\7\u0082\2\2\u1118"+ + "\u1124\7\u01c5\2\2\u1119\u1120\5\u0196\u00cc\2\u111a\u111c\7\f\2\2\u111b"+ + "\u111a\3\2\2\2\u111b\u111c\3\2\2\2\u111c\u111d\3\2\2\2\u111d\u111f\5\u0196"+ + "\u00cc\2\u111e\u111b\3\2\2\2\u111f\u1122\3\2\2\2\u1120\u111e\3\2\2\2\u1120"+ + "\u1121\3\2\2\2\u1121\u1124\3\2\2\2\u1122\u1120\3\2\2\2\u1123\u1118\3\2"+ + "\2\2\u1123\u1119\3\2\2\2\u1124\u1126\3\2\2\2\u1125\u1117\3\2\2\2\u1125"+ + "\u1126\3\2\2\2\u1126\u112d\3\2\2\2\u1127\u1129\7\u00b0\2\2\u1128\u112a"+ + "\5\u0198\u00cd\2\u1129\u1128\3\2\2\2\u112a\u112b\3\2\2\2\u112b\u1129\3"+ + "\2\2\2\u112b\u112c\3\2\2\2\u112c\u112e\3\2\2\2\u112d\u1127\3\2\2\2\u112d"+ + "\u112e\3\2\2\2\u112e\u1133\3\2\2\2\u112f\u1132\5\u019a\u00ce\2\u1130\u1132"+ + "\5\u019c\u00cf\2\u1131\u112f\3\2\2\2\u1131\u1130\3\2\2\2\u1132\u1135\3"+ + "\2\2\2\u1133\u1131\3\2\2\2\u1133\u1134\3\2\2\2\u1134\u1137\3\2\2\2\u1135"+ + "\u1133\3\2\2\2\u1136\u1100\3\2\2\2\u1136\u110a\3\2\2\2\u1137\u0181\3\2"+ + "\2\2\u1138\u1139\7 \2\2\u1139\u113a\7\u0240\2\2\u113a\u113f\5\u0194\u00cb"+ + "\2\u113b\u113c\7\u0402\2\2\u113c\u113e\5\u0194\u00cb\2\u113d\u113b\3\2"+ + "\2\2\u113e\u1141\3\2\2\2\u113f\u113d\3\2\2\2\u113f\u1140\3\2\2\2\u1140"+ + "\u116f\3\2\2\2\u1141\u113f\3\2\2\2\u1142\u1143\7 \2\2\u1143\u1145\7\u0240"+ + "\2\2\u1144\u1146\5\u0246\u0124\2\u1145\u1144\3\2\2\2\u1145\u1146\3\2\2"+ + "\2\u1146\u1147\3\2\2\2\u1147\u114c\5\u0194\u00cb\2\u1148\u1149\7\u0402"+ + "\2\2\u1149\u114b\5\u0194\u00cb\2\u114a\u1148\3\2\2\2\u114b\u114e\3\2\2"+ + "\2\u114c\u114a\3\2\2\2\u114c\u114d\3\2\2\2\u114d\u115d\3\2\2\2\u114e\u114c"+ + "\3\2\2\2\u114f\u115b\7\u0082\2\2\u1150\u115c\7\u01c5\2\2\u1151\u1158\5"+ + "\u0196\u00cc\2\u1152\u1154\7\f\2\2\u1153\u1152\3\2\2\2\u1153\u1154\3\2"+ + "\2\2\u1154\u1155\3\2\2\2\u1155\u1157\5\u0196\u00cc\2\u1156\u1153\3\2\2"+ + "\2\u1157\u115a\3\2\2\2\u1158\u1156\3\2\2\2\u1158\u1159\3\2\2\2\u1159\u115c"+ + "\3\2\2\2\u115a\u1158\3\2\2\2\u115b\u1150\3\2\2\2\u115b\u1151\3\2\2\2\u115c"+ + "\u115e\3\2\2\2\u115d\u114f\3\2\2\2\u115d\u115e\3\2\2\2\u115e\u1165\3\2"+ + "\2\2\u115f\u1161\7\u00b0\2\2\u1160\u1162\5\u0198\u00cd\2\u1161\u1160\3"+ + "\2\2\2\u1162\u1163\3\2\2\2\u1163\u1161\3\2\2\2\u1163\u1164\3\2\2\2\u1164"+ + "\u1166\3\2\2\2\u1165\u115f\3\2\2\2\u1165\u1166\3\2\2\2\u1166\u116b\3\2"+ + "\2\2\u1167\u116a\5\u019a\u00ce\2\u1168\u116a\5\u019c\u00cf\2\u1169\u1167"+ + "\3\2\2\2\u1169\u1168\3\2\2\2\u116a\u116d\3\2\2\2\u116b\u1169\3\2\2\2\u116b"+ + "\u116c\3\2\2\2\u116c\u116f\3\2\2\2\u116d\u116b\3\2\2\2\u116e\u1138\3\2"+ + "\2\2\u116e\u1142\3\2\2\2\u116f\u0183\3\2\2\2\u1170\u1171\7\61\2\2\u1171"+ + "\u1173\7\u0240\2\2\u1172\u1174\5\u0244\u0123\2\u1173\u1172\3\2\2\2\u1173"+ + "\u1174\3\2\2\2\u1174\u1175\3\2\2\2\u1175\u117a\5\u01fa\u00fe\2\u1176\u1177"+ + "\7\u0402\2\2\u1177\u1179\5\u01fa\u00fe\2\u1178\u1176\3\2\2\2\u1179\u117c"+ + "\3\2\2\2\u117a\u1178\3\2\2\2\u117a\u117b\3\2\2\2\u117b\u0185\3\2\2\2\u117c"+ + "\u117a\3\2\2\2\u117d\u117e\7C\2\2\u117e\u1183\5\u019e\u00d0\2\u117f\u1180"+ + "\7\u0402\2\2\u1180\u1182\5\u019e\u00d0\2\u1181\u117f\3\2\2\2\u1182\u1185"+ + "\3\2\2\2\u1183\u1181\3\2\2\2\u1183\u1184\3\2\2\2\u1184\u1186\3\2\2\2\u1185"+ + "\u1183\3\2\2\2\u1186\u1188\7l\2\2\u1187\u1189\t<\2\2\u1188\u1187\3\2\2"+ + "\2\u1188\u1189\3\2\2\2\u1189\u118a\3\2\2\2\u118a\u118b\5\u01a2\u00d2\2"+ + "\u118b\u118c\7\u009f\2\2\u118c\u1191\5\u0194\u00cb\2\u118d\u118e\7\u0402"+ + "\2\2\u118e\u1190\5\u0194\u00cb\2\u118f\u118d\3\2\2\2\u1190\u1193\3\2\2"+ + "\2\u1191\u118f\3\2\2\2\u1191\u1192\3\2\2\2\u1192\u11a2\3\2\2\2\u1193\u1191"+ + "\3\2\2\2\u1194\u11a0\7\u0082\2\2\u1195\u11a1\7\u01c5\2\2\u1196\u119d\5"+ + "\u0196\u00cc\2\u1197\u1199\7\f\2\2\u1198\u1197\3\2\2\2\u1198\u1199\3\2"+ + "\2\2\u1199\u119a\3\2\2\2\u119a\u119c\5\u0196\u00cc\2\u119b\u1198\3\2\2"+ + "\2\u119c\u119f\3\2\2\2\u119d\u119b\3\2\2\2\u119d\u119e\3\2\2\2\u119e\u11a1"+ + "\3\2\2\2\u119f\u119d\3\2\2\2\u11a0\u1195\3\2\2\2\u11a0\u1196\3\2\2\2\u11a1"+ + "\u11a3\3\2\2\2\u11a2\u1194\3\2\2\2\u11a2\u11a3\3\2\2\2\u11a3\u11ad\3\2"+ + "\2\2\u11a4\u11aa\7\u00b0\2\2\u11a5\u11a6\7C\2\2\u11a6\u11a9\7n\2\2\u11a7"+ + "\u11a9\5\u0198\u00cd\2\u11a8\u11a5\3\2\2\2\u11a8\u11a7\3\2\2\2\u11a9\u11ac"+ + "\3\2\2\2\u11aa\u11a8\3\2\2\2\u11aa\u11ab\3\2\2\2\u11ab\u11ae\3\2\2\2\u11ac"+ + "\u11aa\3\2\2\2\u11ad\u11a4\3\2\2\2\u11ad\u11ae\3\2\2\2\u11ae\u0187\3\2"+ + "\2\2\u11af\u11b0\7C\2\2\u11b0\u11b1\7\u01e5\2\2\u11b1\u11b2\7l\2\2\u11b2"+ + "\u11b3\5\u01fa\u00fe\2\u11b3\u11b4\7\u009f\2\2\u11b4\u11b9\5\u01fa\u00fe"+ + "\2\u11b5\u11b6\7\u0402\2\2\u11b6\u11b8\5\u01fa\u00fe\2\u11b7\u11b5\3\2"+ + "\2\2\u11b8\u11bb\3\2\2\2\u11b9\u11b7\3\2\2\2\u11b9\u11ba\3\2\2\2\u11ba"+ + "\u11bf\3\2\2\2\u11bb\u11b9\3\2\2\2\u11bc\u11bd\7\u00b0\2\2\u11bd\u11be"+ + "\7C\2\2\u11be\u11c0\7n\2\2\u11bf\u11bc\3\2\2\2\u11bf\u11c0\3\2\2\2\u11c0"+ + "\u0189\3\2\2\2\u11c1\u11c2\7\177\2\2\u11c2\u11c3\7\u0240\2\2\u11c3\u11c8"+ + "\5\u01a4\u00d3\2\u11c4\u11c5\7\u0402\2\2\u11c5\u11c7\5\u01a4\u00d3\2\u11c6"+ + "\u11c4\3\2\2\2\u11c7\u11ca\3\2\2\2\u11c8\u11c6\3\2\2\2\u11c8\u11c9\3\2"+ + "\2\2\u11c9\u018b\3\2\2\2\u11ca\u11c8\3\2\2\2\u11cb\u11cc\7\u0086\2\2\u11cc"+ + "\u11d1\5\u019e\u00d0\2\u11cd\u11ce\7\u0402\2\2\u11ce\u11d0\5\u019e\u00d0"+ + "\2\u11cf\u11cd\3\2\2\2\u11d0\u11d3\3\2\2\2\u11d1\u11cf\3\2\2\2\u11d1\u11d2"+ + "\3\2\2\2\u11d2\u11d4\3\2\2\2\u11d3\u11d1\3\2\2\2\u11d4\u11d6\7l\2\2\u11d5"+ + "\u11d7\t<\2\2\u11d6\u11d5\3\2\2\2\u11d6\u11d7\3\2\2\2\u11d7\u11d8\3\2"+ + "\2\2\u11d8\u11d9\5\u01a2\u00d2\2\u11d9\u11da\7?\2\2\u11da\u11df\5\u01fa"+ + "\u00fe\2\u11db\u11dc\7\u0402\2\2\u11dc\u11de\5\u01fa\u00fe\2\u11dd\u11db"+ + "\3\2\2\2\u11de\u11e1\3\2\2\2\u11df\u11dd\3\2\2\2\u11df\u11e0\3\2\2\2\u11e0"+ + "\u11f4\3\2\2\2\u11e1\u11df\3\2\2\2\u11e2\u11e3\7\u0086\2\2\u11e3\u11e5"+ + "\7\b\2\2\u11e4\u11e6\7\u0266\2\2\u11e5\u11e4\3\2\2\2\u11e5\u11e6\3\2\2"+ + "\2\u11e6\u11e7\3\2\2\2\u11e7\u11e8\7\u0402\2\2\u11e8\u11e9\7C\2\2\u11e9"+ + "\u11ea\7n\2\2\u11ea\u11eb\7?\2\2\u11eb\u11f0\5\u01fa\u00fe\2\u11ec\u11ed"+ + "\7\u0402\2\2\u11ed\u11ef\5\u01fa\u00fe\2\u11ee\u11ec\3\2\2\2\u11ef\u11f2"+ + "\3\2\2\2\u11f0\u11ee\3\2\2\2\u11f0\u11f1\3\2\2\2\u11f1\u11f4\3\2\2\2\u11f2"+ + "\u11f0\3\2\2\2\u11f3\u11cb\3\2\2\2\u11f3\u11e2\3\2\2\2\u11f4\u018d\3\2"+ + "\2\2\u11f5\u11f6\7\u0086\2\2\u11f6\u11f7\7\u01e5\2\2\u11f7\u11f8\7l\2"+ + "\2\u11f8\u11f9\5\u01fa\u00fe\2\u11f9\u11fa\7?\2\2\u11fa\u11ff\5\u01fa"+ + "\u00fe\2\u11fb\u11fc\7\u0402\2\2\u11fc\u11fe\5\u01fa\u00fe\2\u11fd\u11fb"+ + "\3\2\2\2\u11fe\u1201\3\2\2\2\u11ff\u11fd\3\2\2\2\u11ff\u1200\3\2\2\2\u1200"+ + "\u018f\3\2\2\2\u1201\u11ff\3\2\2\2\u1202\u1203\7\u008c\2\2\u1203\u1206"+ + "\7\u01d8\2\2\u1204\u1205\7<\2\2\u1205\u1207\5\u01fa\u00fe\2\u1206\u1204"+ + "\3\2\2\2\u1206\u1207\3\2\2\2\u1207\u1208\3\2\2\2\u1208\u120b\7\u03f7\2"+ + "\2\u1209\u120c\5\u0256\u012c\2\u120a\u120c\7\u040f\2\2\u120b\u1209\3\2"+ + "\2\2\u120b\u120a\3\2\2\2\u120c\u0191\3\2\2\2\u120d\u120e\5\u01fa\u00fe"+ + "\2\u120e\u120f\5\u019a\u00ce\2\u120f\u0193\3\2\2\2\u1210\u1211\5\u01fa"+ + "\u00fe\2\u1211\u1212\7\u017c\2\2\u1212\u1213\7\22\2\2\u1213\u1214\7\u01d8"+ + "\2\2\u1214\u1215\7\u040f\2\2\u1215\u1229\3\2\2\2\u1216\u1217\5\u01fa\u00fe"+ + "\2\u1217\u121a\7\u017c\2\2\u1218\u1219\7\u00b0\2\2\u1219\u121b\5\u020a"+ + "\u0106\2\u121a\u1218\3\2\2\2\u121a\u121b\3\2\2\2\u121b\u121c\3\2\2\2\u121c"+ + "\u121d\7\22\2\2\u121d\u121e\7\u040f\2\2\u121e\u1229\3\2\2\2\u121f\u1220"+ + "\5\u01fa\u00fe\2\u1220\u1221\7\u017c\2\2\u1221\u1222\7\u00b0\2\2\u1222"+ + "\u1225\5\u020a\u0106\2\u1223\u1224\7\r\2\2\u1224\u1226\7\u040f\2\2\u1225"+ + "\u1223\3\2\2\2\u1225\u1226\3\2\2\2\u1226\u1229\3\2\2\2\u1227\u1229\5\u01fa"+ + "\u00fe\2\u1228\u1210\3\2\2\2\u1228\u1216\3\2\2\2\u1228\u121f\3\2\2\2\u1228"+ + "\u1227\3\2\2\2\u1229\u0195\3\2\2\2\u122a\u1233\7\u0098\2\2\u122b\u1233"+ + "\7\u024e\2\2\u122c\u122d\7\u012a\2\2\u122d\u1233\7\u040f\2\2\u122e\u122f"+ + "\7\u018b\2\2\u122f\u1233\7\u040f\2\2\u1230\u1231\7\u0229\2\2\u1231\u1233"+ + "\7\u040f\2\2\u1232\u122a\3\2\2\2\u1232\u122b\3\2\2\2\u1232\u122c\3\2\2"+ + "\2\u1232\u122e\3\2\2\2\u1232\u1230\3\2\2\2\u1233\u0197\3\2\2\2\u1234\u1235"+ + "\7\u01ad\2\2\u1235\u123d\5\u0212\u010a\2\u1236\u1237\7\u01b0\2\2\u1237"+ + "\u123d\5\u0212\u010a\2\u1238\u1239\7\u01ac\2\2\u1239\u123d\5\u0212\u010a"+ + "\2\u123a\u123b\7\u01b1\2\2\u123b\u123d\5\u0212\u010a\2\u123c\u1234\3\2"+ + "\2\2\u123c\u1236\3\2\2\2\u123c\u1238\3\2\2\2\u123c\u123a\3\2\2\2\u123d"+ + "\u0199\3\2\2\2\u123e\u123f\7\u01d8\2\2\u123f\u1246\7\u0163\2\2\u1240\u1247"+ + "\7(\2\2\u1241\u1247\7\u01c1\2\2\u1242\u1243\7O\2\2\u1243\u1244\5\u0212"+ + "\u010a\2\u1244\u1245\7\u0258\2\2\u1245\u1247\3\2\2\2\u1246\u1240\3\2\2"+ + "\2\u1246\u1241\3\2\2\2\u1246\u1242\3\2\2\2\u1246\u1247\3\2\2\2\u1247\u019b"+ + "\3\2\2\2\u1248\u1249\7\u0110\2\2\u1249\u124a\t=\2\2\u124a\u019d\3\2\2"+ + "\2\u124b\u1250\5\u01a0\u00d1\2\u124c\u124d\7\u0400\2\2\u124d\u124e\5\u022c"+ + "\u0117\2\u124e\u124f\7\u0401\2\2\u124f\u1251\3\2\2\2\u1250\u124c\3\2\2"+ + "\2\u1250\u1251\3\2\2\2\u1251\u019f\3\2\2\2\u1252\u1254\7\b\2\2\u1253\u1255"+ + "\7\u0266\2\2\u1254\u1253\3\2\2\2\u1254\u1255\3\2\2\2\u1255\u127e\3\2\2"+ + "\2\u1256\u1258\7\t\2\2\u1257\u1259\7\u025f\2\2\u1258\u1257\3\2\2\2\u1258"+ + "\u1259\3\2\2\2\u1259\u127e\3\2\2\2\u125a\u1261\7 \2\2\u125b\u125c\7\u0231"+ + "\2\2\u125c\u1262\7\u025e\2\2\u125d\u1262\7\u025f\2\2\u125e\u1262\7\u0246"+ + "\2\2\u125f\u1262\7\u0240\2\2\u1260\u1262\7\u0230\2\2\u1261\u125b\3\2\2"+ + "\2\u1261\u125d\3\2\2\2\u1261\u125e\3\2\2\2\u1261\u125f\3\2\2\2\u1261\u1260"+ + "\3\2\2\2\u1261\u1262\3\2\2\2\u1262\u127e\3\2\2\2\u1263\u127e\7*\2\2\u1264"+ + "\u127e\7\61\2\2\u1265\u127e\7\u015e\2\2\u1266\u127e\7\u0260\2\2\u1267"+ + "\u127e\7\u0261\2\2\u1268\u1269\7C\2\2\u1269\u127e\7n\2\2\u126a\u127e\7"+ + "J\2\2\u126b\u127e\7N\2\2\u126c\u126d\7_\2\2\u126d\u127e\7\u025e\2\2\u126e"+ + "\u127e\7\u0262\2\2\u126f\u127e\7\u01e5\2\2\u1270\u127e\7|\2\2\u1271\u127e"+ + "\7\u0263\2\2\u1272\u1273\7\u01fa\2\2\u1273\u127e\t>\2\2\u1274\u127e\7"+ + "\u008b\2\2\u1275\u1276\7\u008e\2\2\u1276\u127e\t?\2\2\u1277\u127e\7\u0264"+ + "\2\2\u1278\u127e\7\u0265\2\2\u1279\u127e\7\u00a1\2\2\u127a\u127e\7\u00a8"+ + "\2\2\u127b\u127e\7\u00a9\2\2\u127c\u127e\7\u027a\2\2\u127d\u1252\3\2\2"+ + "\2\u127d\u1256\3\2\2\2\u127d\u125a\3\2\2\2\u127d\u1263\3\2\2\2\u127d\u1264"+ + "\3\2\2\2\u127d\u1265\3\2\2\2\u127d\u1266\3\2\2\2\u127d\u1267\3\2\2\2\u127d"+ + "\u1268\3\2\2\2\u127d\u126a\3\2\2\2\u127d\u126b\3\2\2\2\u127d\u126c\3\2"+ + "\2\2\u127d\u126e\3\2\2\2\u127d\u126f\3\2\2\2\u127d\u1270\3\2\2\2\u127d"+ + "\u1271\3\2\2\2\u127d\u1272\3\2\2\2\u127d\u1274\3\2\2\2\u127d\u1275\3\2"+ + "\2\2\u127d\u1277\3\2\2\2\u127d\u1278\3\2\2\2\u127d\u1279\3\2\2\2\u127d"+ + "\u127a\3\2\2\2\u127d\u127b\3\2\2\2\u127d\u127c\3\2\2\2\u127e\u01a1\3\2"+ + "\2\2\u127f\u1290\7\u03ef\2\2\u1280\u1281\7\u03ef\2\2\u1281\u1282\7\u03ff"+ + "\2\2\u1282\u1290\7\u03ef\2\2\u1283\u1284\5\u020c\u0107\2\u1284\u1285\7"+ + "\u03ff\2\2\u1285\u1286\7\u03ef\2\2\u1286\u1290\3\2\2\2\u1287\u1288\5\u020c"+ + "\u0107\2\u1288\u1289\7\u03ff\2\2\u1289\u128a\5\u020c\u0107\2\u128a\u1290"+ + "\3\2\2\2\u128b\u128c\5\u020c\u0107\2\u128c\u128d\5\u0210\u0109\2\u128d"+ + "\u1290\3\2\2\2\u128e\u1290\5\u020c\u0107\2\u128f\u127f\3\2\2\2\u128f\u1280"+ + "\3\2\2\2\u128f\u1283\3\2\2\2\u128f\u1287\3\2\2\2\u128f\u128b\3\2\2\2\u128f"+ + "\u128e\3\2\2\2\u1290\u01a3\3\2\2\2\u1291\u1292\5\u01fa\u00fe\2\u1292\u1293"+ + "\7\u009f\2\2\u1293\u1294\5\u01fa\u00fe\2\u1294\u01a5\3\2\2\2\u1295\u1297"+ + "\7\13\2\2\u1296\u1298\t@\2\2\u1297\u1296\3\2\2\2\u1297\u1298\3\2\2\2\u1298"+ + "\u1299\3\2\2\2\u1299\u129a\7\u009c\2\2\u129a\u129b\5\u022e\u0118\2\u129b"+ + "\u01a7\3\2\2\2\u129c\u129d\7\31\2\2\u129d\u129e\7\u009c\2\2\u129e\u12a2"+ + "\5\u022e\u0118\2\u129f\u12a1\5\u01b0\u00d9\2\u12a0\u129f\3\2\2\2\u12a1"+ + "\u12a4\3\2\2\2\u12a2\u12a0\3\2\2\2\u12a2\u12a3\3\2\2\2\u12a3\u01a9\3\2"+ + "\2\2\u12a4\u12a2\3\2\2\2\u12a5\u12a6\7\u0128\2\2\u12a6\u12a7\7\u009c\2"+ + "\2\u12a7\u12a9\5\u022e\u0118\2\u12a8\u12aa\tA\2\2\u12a9\u12a8\3\2\2\2"+ + "\u12a9\u12aa\3\2\2\2\u12aa\u01ab\3\2\2\2\u12ab\u12ad\7m\2\2\u12ac\u12ae"+ + "\t@\2\2\u12ad\u12ac\3\2\2\2\u12ad\u12ae\3\2\2\2\u12ae\u12af\3\2\2\2\u12af"+ + "\u12b0\7\u009c\2\2\u12b0\u12b1\5\u022e\u0118\2\u12b1\u01ad\3\2\2\2\u12b2"+ + "\u12b4\7\u01f2\2\2\u12b3\u12b5\t@\2\2\u12b4\u12b3\3\2\2\2\u12b4\u12b5"+ + "\3\2\2\2\u12b5\u12b6\3\2\2\2\u12b6\u12b7\7\u009c\2\2\u12b7\u12b9\5\u022e"+ + "\u0118\2\u12b8\u12ba\7\u01e7\2\2\u12b9\u12b8\3\2\2\2\u12b9\u12ba\3\2\2"+ + "\2\u12ba\u12bc\3\2\2\2\u12bb\u12bd\7\u0165\2\2\u12bc\u12bb\3\2\2\2\u12bc"+ + "\u12bd\3\2\2\2\u12bd\u12bf\3\2\2\2\u12be\u12c0\7\u0241\2\2\u12bf\u12be"+ + "\3\2\2\2\u12bf\u12c0\3\2\2\2\u12c0\u01af\3\2\2\2\u12c1\u12c2\7<\2\2\u12c2"+ + "\u12c9\7\u023f\2\2\u12c3\u12c9\7\u01e7\2\2\u12c4\u12c9\7\u0167\2\2\u12c5"+ + "\u12c9\7\u01b2\2\2\u12c6\u12c9\7\u0165\2\2\u12c7\u12c9\7\u0126\2\2\u12c8"+ + "\u12c1\3\2\2\2\u12c8\u12c3\3\2\2\2\u12c8\u12c4\3\2\2\2\u12c8\u12c5\3\2"+ + "\2\2\u12c8\u12c6\3\2\2\2\u12c8\u12c7\3\2\2\2\u12c9\u01b1\3\2\2\2\u12ca"+ + "\u12cc\7 \2\2\u12cb\u12cd\7\u0113\2\2\u12cc\u12cb\3\2\2\2\u12cc\u12cd"+ + "\3\2\2\2\u12cd\u12ce\3\2\2\2\u12ce\u12cf\7\u0172\2\2\u12cf\u12d0\5\u020c"+ + "\u0107\2\u12d0\u12d1\7\u01fe\2\2\u12d1\u12d2\tB\2\2\u12d2\u12d3\7\u0214"+ + "\2\2\u12d3\u12d4\7\u040f\2\2\u12d4\u01b3\3\2\2\2\u12d5\u12d6\7\u0183\2"+ + "\2\u12d6\u12d7\7\u01da\2\2\u12d7\u12d8\5\u020c\u0107\2\u12d8\u12d9\7\u0214"+ + "\2\2\u12d9\u12da\7\u040f\2\2\u12da\u01b5\3\2\2\2\u12db\u12dc\7\u023c\2"+ + "\2\u12dc\u12dd\7\u01da\2\2\u12dd\u12de\5\u020c\u0107\2\u12de\u01b7\3\2"+ + "\2\2\u12df\u12e0\7\u008c\2\2\u12e0\u12e1\5\u01bc\u00df\2\u12e1\u12e2\t"+ + "C\2\2\u12e2\u12ea\5\u025c\u012f\2\u12e3\u12e4\7\u0402\2\2\u12e4\u12e5"+ + "\5\u01bc\u00df\2\u12e5\u12e6\tC\2\2\u12e6\u12e7\5\u025c\u012f\2\u12e7"+ + "\u12e9\3\2\2\2\u12e8\u12e3\3\2\2\2\u12e9\u12ec\3\2\2\2\u12ea\u12e8\3\2"+ + "\2\2\u12ea\u12eb\3\2\2\2\u12eb\u1313\3\2\2\2\u12ec\u12ea\3\2\2\2\u12ed"+ + "\u12f1\7\u008c\2\2\u12ee\u12ef\7\30\2\2\u12ef\u12f2\7\u008c\2\2\u12f0"+ + "\u12f2\7\u02df\2\2\u12f1\u12ee\3\2\2\2\u12f1\u12f0\3\2\2\2\u12f2\u12f5"+ + "\3\2\2\2\u12f3\u12f6\5\u01fe\u0100\2\u12f4\u12f6\7(\2\2\u12f5\u12f3\3"+ + "\2\2\2\u12f5\u12f4\3\2\2\2\u12f6\u1313\3\2\2\2\u12f7\u12f8\7\u008c\2\2"+ + "\u12f8\u12ff\7\u01bf\2\2\u12f9\u12fc\5\u01fe\u0100\2\u12fa\u12fb\7\32"+ + "\2\2\u12fb\u12fd\5\u0200\u0101\2\u12fc\u12fa\3\2\2\2\u12fc\u12fd\3\2\2"+ + "\2\u12fd\u1300\3\2\2\2\u12fe\u1300\7(\2\2\u12ff\u12f9\3\2\2\2\u12ff\u12fe"+ + "\3\2\2\2\u1300\u1313\3\2\2\2\u1301\u1313\5\u0190\u00c9\2\u1302\u1313\5"+ + "\u0114\u008b\2\u1303\u1313\5\u0112\u008a\2\u1304\u1305\7\u008c\2\2\u1305"+ + "\u1306\5\u01f2\u00fa\2\u1306\u1307\tC\2\2\u1307\u130f\5\u025c\u012f\2"+ + "\u1308\u1309\7\u0402\2\2\u1309\u130a\5\u01f2\u00fa\2\u130a\u130b\tC\2"+ + "\2\u130b\u130c\5\u025c\u012f\2\u130c\u130e\3\2\2\2\u130d\u1308\3\2\2\2"+ + "\u130e\u1311\3\2\2\2\u130f\u130d\3\2\2\2\u130f\u1310\3\2\2\2\u1310\u1313"+ + "\3\2\2\2\u1311\u130f\3\2\2\2\u1312\u12df\3\2\2\2\u1312\u12ed\3\2\2\2\u1312"+ + "\u12f7\3\2\2\2\u1312\u1301\3\2\2\2\u1312\u1302\3\2\2\2\u1312\u1303\3\2"+ + "\2\2\u1312\u1304\3\2\2\2\u1313\u01b9\3\2\2\2\u1314\u1315\7\u008e\2\2\u1315"+ + "\u1316\t\62\2\2\u1316\u13ac\7\u0196\2\2\u1317\u1318\7\u008e\2\2\u1318"+ + "\u1319\tD\2\2\u1319\u131c\7\u015f\2\2\u131a\u131b\7I\2\2\u131b\u131d\7"+ + "\u040f\2\2\u131c\u131a\3\2\2\2\u131c\u131d\3\2\2\2\u131d\u1320\3\2\2\2"+ + "\u131e\u131f\7?\2\2\u131f\u1321\5\u0212\u010a\2\u1320\u131e\3\2\2\2\u1320"+ + "\u1321\3\2\2\2\u1321\u1329\3\2\2\2\u1322\u1326\7[\2\2\u1323\u1324\5\u0212"+ + "\u010a\2\u1324\u1325\7\u0402\2\2\u1325\u1327\3\2\2\2\u1326\u1323\3\2\2"+ + "\2\u1326\u1327\3\2\2\2\u1327\u1328\3\2\2\2\u1328\u132a\5\u0212\u010a\2"+ + "\u1329\u1322\3\2\2\2\u1329\u132a\3\2\2\2\u132a\u13ac\3\2\2\2\u132b\u132c"+ + "\7\u008e\2\2\u132c\u132e\5\u01be\u00e0\2\u132d\u132f\5\u01c0\u00e1\2\u132e"+ + "\u132d\3\2\2\2\u132e\u132f\3\2\2\2\u132f\u13ac\3\2\2\2\u1330\u1332\7\u008e"+ + "\2\2\u1331\u1333\7\u0171\2\2\u1332\u1331\3\2\2\2\u1332\u1333\3\2\2\2\u1333"+ + "\u1334\3\2\2\2\u1334\u1335\t$\2\2\u1335\u1336\tE\2\2\u1336\u1339\5\u01f4"+ + "\u00fb\2\u1337\u1338\tE\2\2\u1338\u133a\5\u020c\u0107\2\u1339\u1337\3"+ + "\2\2\2\u1339\u133a\3\2\2\2\u133a\u133c\3\2\2\2\u133b\u133d\5\u01c0\u00e1"+ + "\2\u133c\u133b\3\2\2\2\u133c\u133d\3\2\2\2\u133d\u13ac\3\2\2\2\u133e\u133f"+ + "\7\u008e\2\2\u133f\u1340\7 \2\2\u1340\u1342\t\2\2\2\u1341\u1343\5\u0246"+ + "\u0124\2\u1342\u1341\3\2\2\2\u1342\u1343\3\2\2\2\u1343\u1344\3\2\2\2\u1344"+ + "\u13ac\5\u020c\u0107\2\u1345\u1346\7\u008e\2\2\u1346\u1347\7 \2\2\u1347"+ + "\u1348\tF\2\2\u1348\u13ac\5\u01f2\u00fa\2\u1349\u134a\7\u008e\2\2\u134a"+ + "\u134b\7 \2\2\u134b\u134c\7\u0240\2\2\u134c\u13ac\5\u01fa\u00fe\2\u134d"+ + "\u134e\7\u008e\2\2\u134e\u134f\7\u0158\2\2\u134f\u1350\5\u0202\u0102\2"+ + "\u1350\u1351\tG\2\2\u1351\u13ac\3\2\2\2\u1352\u1353\7\u008e\2\2\u1353"+ + "\u13ac\5\u01c2\u00e2\2\u1354\u1355\7\u008e\2\2\u1355\u1356\tH\2\2\u1356"+ + "\u135a\7[\2\2\u1357\u1358\5\u0212\u010a\2\u1358\u1359\7\u0402\2\2\u1359"+ + "\u135b\3\2\2\2\u135a\u1357\3\2\2\2\u135a\u135b\3\2\2\2\u135b\u135c\3\2"+ + "\2\2\u135c\u13ac\5\u0212\u010a\2\u135d\u135e\7\u008e\2\2\u135e\u135f\7"+ + "\u00f1\2\2\u135f\u1360\7\u0400\2\2\u1360\u1361\7\u03ef\2\2\u1361\u1362"+ + "\7\u0401\2\2\u1362\u13ac\tH\2\2\u1363\u1364\7\u008e\2\2\u1364\u1367\5"+ + "\u01c4\u00e3\2\u1365\u1366\tE\2\2\u1366\u1368\5\u020c\u0107\2\u1367\u1365"+ + "\3\2\2\2\u1367\u1368\3\2\2\2\u1368\u136a\3\2\2\2\u1369\u136b\5\u01c0\u00e1"+ + "\2\u136a\u1369\3\2\2\2\u136a\u136b\3\2\2\2\u136b\u13ac\3\2\2\2\u136c\u136d"+ + "\7\u008e\2\2\u136d\u136e\tI\2\2\u136e\u136f\7\u012f\2\2\u136f\u13ac\5"+ + "\u01f2\u00fa\2\u1370\u1371\7\u008e\2\2\u1371\u1374\7\u0175\2\2\u1372\u1373"+ + "\7<\2\2\u1373\u1375\5\u01fa\u00fe\2\u1374\u1372\3\2\2\2\u1374\u1375\3"+ + "\2\2\2\u1375\u13ac\3\2\2\2\u1376\u1377\7\u008e\2\2\u1377\u1378\tJ\2\2"+ + "\u1378\u1379\tE\2\2\u1379\u137c\5\u01f4\u00fb\2\u137a\u137b\tE\2\2\u137b"+ + "\u137d\5\u020c\u0107\2\u137c\u137a\3\2\2\2\u137c\u137d\3\2\2\2\u137d\u1380"+ + "\3\2\2\2\u137e\u137f\7\u00ae\2\2\u137f\u1381\5\u025c\u012f\2\u1380\u137e"+ + "\3\2\2\2\u1380\u1381\3\2\2\2\u1381\u13ac\3\2\2\2\u1382\u1383\7\u008e\2"+ + "\2\u1383\u1384\7\u01ce\2\2\u1384\u1387\7\u025e\2\2\u1385\u1386\tE\2\2"+ + "\u1386\u1388\5\u020c\u0107\2\u1387\u1385\3\2\2\2\u1387\u1388\3\2\2\2\u1388"+ + "\u138a\3\2\2\2\u1389\u138b\5\u01c0\u00e1\2\u138a\u1389\3\2\2\2\u138a\u138b"+ + "\3\2\2\2\u138b\u13ac\3\2\2\2\u138c\u138d\7\u008e\2\2\u138d\u138e\7\u01e3"+ + "\2\2\u138e\u1393\5\u01c6\u00e4\2\u138f\u1390\7\u0402\2\2\u1390\u1392\5"+ + "\u01c6\u00e4\2\u1391\u138f\3\2\2\2\u1392\u1395\3\2\2\2\u1393\u1391\3\2"+ + "\2\2\u1393\u1394\3\2\2\2\u1394\u1399\3\2\2\2\u1395\u1393\3\2\2\2\u1396"+ + "\u1397\7<\2\2\u1397\u1398\7\u01e6\2\2\u1398\u139a\5\u0212\u010a\2\u1399"+ + "\u1396\3\2\2\2\u1399\u139a\3\2\2\2\u139a\u139b\3\2\2\2\u139b\u139f\7["+ + "\2\2\u139c\u139d\5\u0212\u010a\2\u139d\u139e\7\u0402\2\2\u139e\u13a0\3"+ + "\2\2\2\u139f\u139c\3\2\2\2\u139f\u13a0\3\2\2\2\u13a0\u13a1\3\2\2\2\u13a1"+ + "\u13a2\5\u0212\u010a\2\u13a2\u13ac\3\2\2\2\u13a3\u13a4\7\u008e\2\2\u13a4"+ + "\u13a5\7\u020f\2\2\u13a5\u13a9\7\u0223\2\2\u13a6\u13a7\7<\2\2\u13a7\u13a8"+ + "\7\u0127\2\2\u13a8\u13aa\7\u040f\2\2\u13a9\u13a6\3\2\2\2\u13a9\u13aa\3"+ + "\2\2\2\u13aa\u13ac\3\2\2\2\u13ab\u1314\3\2\2\2\u13ab\u1317\3\2\2\2\u13ab"+ + "\u132b\3\2\2\2\u13ab\u1330\3\2\2\2\u13ab\u133e\3\2\2\2\u13ab\u1345\3\2"+ + "\2\2\u13ab\u1349\3\2\2\2\u13ab\u134d\3\2\2\2\u13ab\u1352\3\2\2\2\u13ab"+ + "\u1354\3\2\2\2\u13ab\u135d\3\2\2\2\u13ab\u1363\3\2\2\2\u13ab\u136c\3\2"+ + "\2\2\u13ab\u1370\3\2\2\2\u13ab\u1376\3\2\2\2\u13ab\u1382\3\2\2\2\u13ab"+ + "\u138c\3\2\2\2\u13ab\u13a3\3\2\2\2\u13ac\u01bb\3\2\2\2\u13ad\u13b8\7\u041a"+ + "\2\2\u13ae\u13b8\7\u041b\2\2\u13af\u13b0\7\u0404\2\2\u13b0\u13b2\7\u0404"+ + "\2\2\u13b1\u13af\3\2\2\2\u13b1\u13b2\3\2\2\2\u13b2\u13b3\3\2\2\2\u13b3"+ + "\u13b5\tK\2\2\u13b4\u13b1\3\2\2\2\u13b4\u13b5\3\2\2\2\u13b5\u13b6\3\2"+ + "\2\2\u13b6\u13b8\5\u020c\u0107\2\u13b7\u13ad\3\2\2\2\u13b7\u13ae\3\2\2"+ + "\2\u13b7\u13b4\3\2\2\2\u13b8\u01bd\3\2\2\2\u13b9\u13ba\7\30\2\2\u13ba"+ + "\u13c7\7\u008c\2\2\u13bb\u13c7\7\u02e2\2\2\u13bc\u13c7\7&\2\2\u13bd\u13c7"+ + "\7\u008a\2\2\u13be\u13bf\7\u0172\2\2\u13bf\u13c7\7\u0223\2\2\u13c0\u13c1"+ + "\7w\2\2\u13c1\u13c7\7\u0223\2\2\u13c2\u13c4\t\61\2\2\u13c3\u13c2\3\2\2"+ + "\2\u13c3\u13c4\3\2\2\2\u13c4\u13c5\3\2\2\2\u13c5\u13c7\tL\2\2\u13c6\u13b9"+ + "\3\2\2\2\u13c6\u13bb\3\2\2\2\u13c6\u13bc\3\2\2\2\u13c6\u13bd\3\2\2\2\u13c6"+ + "\u13be\3\2\2\2\u13c6\u13c0\3\2\2\2\u13c6\u13c3\3\2\2\2\u13c7\u01bf\3\2"+ + "\2\2\u13c8\u13c9\7Z\2\2\u13c9\u13cd\7\u040f\2\2\u13ca\u13cb\7\u00ae\2"+ + "\2\u13cb\u13cd\5\u025c\u012f\2\u13cc\u13c8\3\2\2\2\u13cc\u13ca\3\2\2\2"+ + "\u13cd\u01c1\3\2\2\2\u13ce\u13d0\7\u0225\2\2\u13cf\u13ce\3\2\2\2\u13cf"+ + "\u13d0\3\2\2\2\u13d0\u13d1\3\2\2\2\u13d1\u13e0\7\u0159\2\2\u13d2\u13d3"+ + "\7\u0197\2\2\u13d3\u13e0\7\u0223\2\2\u13d4\u13e0\7\u01dc\2\2\u13d5\u13e0"+ + "\7\u0266\2\2\u13d6\u13d8\7\u0171\2\2\u13d7\u13d6\3\2\2\2\u13d7\u13d8\3"+ + "\2\2\2\u13d8\u13d9\3\2\2\2\u13d9\u13e0\7\u01e2\2\2\u13da\u13e0\7\u01e4"+ + "\2\2\u13db\u13dc\7\u020f\2\2\u13dc\u13e0\7\u017b\2\2\u13dd\u13e0\7\u0117"+ + "\2\2\u13de\u13e0\7\u0141\2\2\u13df\u13cf\3\2\2\2\u13df\u13d2\3\2\2\2\u13df"+ + "\u13d4\3\2\2\2\u13df\u13d5\3\2\2\2\u13df\u13d7\3\2\2\2\u13df\u13da\3\2"+ + "\2\2\u13df\u13db\3\2\2\2\u13df\u13dd\3\2\2\2\u13df\u13de\3\2\2\2\u13e0"+ + "\u01c3\3\2\2\2\u13e1\u13ea\7\u015f\2\2\u13e2\u13e3\7\u009c\2\2\u13e3\u13ea"+ + "\7\u0223\2\2\u13e4\u13e6\7\u0171\2\2\u13e5\u13e4\3\2\2\2\u13e5\u13e6\3"+ + "\2\2\2\u13e6\u13e7\3\2\2\2\u13e7\u13ea\7\u025e\2\2\u13e8\u13ea\7\u0237"+ + "\2\2\u13e9\u13e1\3\2\2\2\u13e9\u13e2\3\2\2\2\u13e9\u13e5\3\2\2\2\u13e9"+ + "\u13e8\3\2\2\2\u13ea\u01c5\3\2\2\2\u13eb\u13f8\7\b\2\2\u13ec\u13ed\7\u011f"+ + "\2\2\u13ed\u13f8\7\u0187\2\2\u13ee\u13ef\7\u0140\2\2\u13ef\u13f8\7\u022e"+ + "\2\2\u13f0\u13f8\7\u0143\2\2\u13f1\u13f8\7\u0189\2\2\u13f2\u13f8\7\u02ae"+ + "\2\2\u13f3\u13f4\7\u01d3\2\2\u13f4\u13f8\7\u0168\2\2\u13f5\u13f8\7\u0216"+ + "\2\2\u13f6\u13f8\7\u022d\2\2\u13f7\u13eb\3\2\2\2\u13f7\u13ec\3\2\2\2\u13f7"+ + "\u13ee\3\2\2\2\u13f7\u13f0\3\2\2\2\u13f7\u13f1\3\2\2\2\u13f7\u13f2\3\2"+ + "\2\2\u13f7\u13f3\3\2\2\2\u13f7\u13f5\3\2\2\2\u13f7\u13f6\3\2\2\2\u13f8"+ + "\u01c7\3\2\2\2\u13f9\u13fa\7\u011d\2\2\u13fa\u13fb\7\u040f\2\2\u13fb\u01c9"+ + "\3\2\2\2\u13fc\u13fd\7\u0123\2\2\u13fd\u13fe\7J\2\2\u13fe\u1403\5\u01d6"+ + "\u00ec\2\u13ff\u1400\7\u0402\2\2\u1400\u1402\5\u01d6\u00ec\2\u1401\u13ff"+ + "\3\2\2\2\u1402\u1405\3\2\2\2\u1403\u1401\3\2\2\2\u1403\u1404\3\2\2\2\u1404"+ + "\u140d\3\2\2\2\u1405\u1403\3\2\2\2\u1406\u1407\7u\2\2\u1407\u140a\7\u0400"+ + "\2\2\u1408\u140b\5\u022c\u0117\2\u1409\u140b\7\b\2\2\u140a\u1408\3\2\2"+ + "\2\u140a\u1409\3\2\2\2\u140b\u140c\3\2\2\2\u140c\u140e\7\u0401\2\2\u140d"+ + "\u1406\3\2\2\2\u140d\u140e\3\2\2\2\u140e\u140f\3\2\2\2\u140f\u1410\7I"+ + "\2\2\u1410\u1411\5\u020c\u0107\2\u1411\u01cb\3\2\2\2\u1412\u1414\7\u016e"+ + "\2\2\u1413\u1415\t@\2\2\u1414\u1413\3\2\2\2\u1414\u1415\3\2\2\2\u1415"+ + "\u1416\3\2\2\2\u1416\u141b\5\u01d8\u00ed\2\u1417\u1418\7\u0402\2\2\u1418"+ + "\u141a\5\u01d8\u00ed\2\u1419\u1417\3\2\2\2\u141a\u141d\3\2\2\2\u141b\u1419"+ + "\3\2\2\2\u141b\u141c\3\2\2\2\u141c\u01cd\3\2\2\2\u141d\u141b\3\2\2\2\u141e"+ + "\u1420\7V\2\2\u141f\u1421\tM\2\2\u1420\u141f\3\2\2\2\u1420\u1421\3\2\2"+ + "\2\u1421\u1423\3\2\2\2\u1422\u1424\5\u0212\u010a\2\u1423\u1422\3\2\2\2"+ + "\u1424\u1425\3\2\2\2\u1425\u1423\3\2\2\2\u1425\u1426\3\2\2\2\u1426\u01cf"+ + "\3\2\2\2\u1427\u1428\7^\2\2\u1428\u1429\7J\2\2\u1429\u142a\7P\2\2\u142a"+ + "\u142b\7\u0123\2\2\u142b\u1430\5\u01dc\u00ef\2\u142c\u142d\7\u0402\2\2"+ + "\u142d\u142f\5\u01dc\u00ef\2\u142e\u142c\3\2\2\2\u142f\u1432\3\2\2\2\u1430"+ + "\u142e\3\2\2\2\u1430\u1431\3\2\2\2\u1431\u01d1\3\2\2\2\u1432\u1430\3\2"+ + "\2\2\u1433\u1434\7\u01fb\2\2\u1434\u1435\7\u01e6\2\2\u1435\u1436\7\u0123"+ + "\2\2\u1436\u01d3\3\2\2\2\u1437\u1438\7\u0264\2\2\u1438\u01d5\3\2\2\2\u1439"+ + "\u1441\5\u01f4\u00fb\2\u143a\u143c\t\24\2\2\u143b\u143a\3\2\2\2\u143b"+ + "\u143c\3\2\2\2\u143c\u143d\3\2\2\2\u143d\u143e\7\u0400\2\2\u143e\u143f"+ + "\5\u022c\u0117\2\u143f\u1440\7\u0401\2\2\u1440\u1442\3\2\2\2\u1441\u143b"+ + "\3\2\2\2\u1441\u1442\3\2\2\2\u1442\u01d7\3\2\2\2\u1443\u1456\7\u014b\2"+ + "\2\u1444\u1456\7\u017b\2\2\u1445\u1447\tN\2\2\u1446\u1445\3\2\2\2\u1446"+ + "\u1447\3\2\2\2\u1447\u1448\3\2\2\2\u1448\u1456\7\u0196\2\2\u1449\u1456"+ + "\7\u01cf\2\2\u144a\u1456\7\u0266\2\2\u144b\u144c\7\u01e6\2\2\u144c\u1456"+ + "\7\u0123\2\2\u144d\u1456\7\u0223\2\2\u144e\u1456\7\u0242\2\2\u144f\u1453"+ + "\7\u025e\2\2\u1450\u1451\7\u00b0\2\2\u1451\u1452\7z\2\2\u1452\u1454\7"+ + "_\2\2\u1453\u1450\3\2\2\2\u1453\u1454\3\2\2\2\u1454\u1456\3\2\2\2\u1455"+ + "\u1443\3\2\2\2\u1455\u1444\3\2\2\2\u1455\u1446\3\2\2\2\u1455\u1449\3\2"+ + "\2\2\u1455\u144a\3\2\2\2\u1455\u144b\3\2\2\2\u1455\u144d\3\2\2\2\u1455"+ + "\u144e\3\2\2\2\u1455\u144f\3\2\2\2\u1456\u1462\3\2\2\2\u1457\u1458\7\u01ec"+ + "\2\2\u1458\u145a\7\u0196\2\2\u1459\u145b\5\u013a\u009e\2\u145a\u1459\3"+ + "\2\2\2\u145a\u145b\3\2\2\2\u145b\u1462\3\2\2\2\u145c\u145d\7\u025e\2\2"+ + "\u145d\u145f\5\u022e\u0118\2\u145e\u1460\5\u01da\u00ee\2\u145f\u145e\3"+ + "\2\2\2\u145f\u1460\3\2\2\2\u1460\u1462\3\2\2\2\u1461\u1455\3\2\2\2\u1461"+ + "\u1457\3\2\2\2\u1461\u145c\3\2\2\2\u1462\u01d9\3\2\2\2\u1463\u1464\7\u00b0"+ + "\2\2\u1464\u1465\7z\2\2\u1465\u1469\7_\2\2\u1466\u1467\7<\2\2\u1467\u1469"+ + "\7\u0164\2\2\u1468\u1463\3\2\2\2\u1468\u1466\3\2\2\2\u1469\u01db\3\2\2"+ + "\2\u146a\u1472\5\u01f4\u00fb\2\u146b\u146c\7u\2\2\u146c\u146f\7\u0400"+ + "\2\2\u146d\u1470\5\u022c\u0117\2\u146e\u1470\7\b\2\2\u146f\u146d\3\2\2"+ + "\2\u146f\u146e\3\2\2\2\u1470\u1471\3\2\2\2\u1471\u1473\7\u0401\2\2\u1472"+ + "\u146b\3\2\2\2\u1472\u1473\3\2\2\2\u1473\u147b\3\2\2\2\u1474\u1476\t\24"+ + "\2\2\u1475\u1474\3\2\2\2\u1475\u1476\3\2\2\2\u1476\u1477\3\2\2\2\u1477"+ + "\u1478\7\u0400\2\2\u1478\u1479\5\u022c\u0117\2\u1479\u147a\7\u0401\2\2"+ + "\u147a\u147c\3\2\2\2\u147b\u1475\3\2\2\2\u147b\u147c\3\2\2\2\u147c\u147f"+ + "\3\2\2\2\u147d\u147e\7H\2\2\u147e\u1480\7\u0190\2\2\u147f\u147d\3\2\2"+ + "\2\u147f\u1480\3\2\2\2\u1480\u01dd\3\2\2\2\u1481\u1482\tO\2\2\u1482\u1485"+ + "\5\u01f4\u00fb\2\u1483\u1486\5\u020c\u0107\2\u1484\u1486\7\u040f\2\2\u1485"+ + "\u1483\3\2\2\2\u1485\u1484\3\2\2\2\u1485\u1486\3\2\2\2\u1486\u01df\3\2"+ + "\2\2\u1487\u148b\tO\2\2\u1488\u1489\tP\2\2\u1489\u148a\7\u03f7\2\2\u148a"+ + "\u148c\tQ\2\2\u148b\u1488\3\2\2\2\u148b\u148c\3\2\2\2\u148c\u148d\3\2"+ + "\2\2\u148d\u148e\5\u01f0\u00f9\2\u148e\u01e1\3\2\2\2\u148f\u1490\7\u0179"+ + "\2\2\u1490\u1491\7\u040f\2\2\u1491\u01e3\3\2\2\2\u1492\u1493\7\u00aa\2"+ + "\2\u1493\u1494\5\u020c\u0107\2\u1494\u01e5\3\2\2\2\u1495\u149d\7\u008f"+ + "\2\2\u1496\u1498\7\u0093\2\2\u1497\u1499\7\u0244\2\2\u1498\u1497\3\2\2"+ + "\2\u1498\u1499\3\2\2\2\u1499\u149a\3\2\2\2\u149a\u149e\5\u0216\u010c\2"+ + "\u149b\u149e\7\u0417\2\2\u149c\u149e\7\u0418\2\2\u149d\u1496\3\2\2\2\u149d"+ + "\u149b\3\2\2\2\u149d\u149c\3\2\2\2\u149e\u14a8\3\2\2\2\u149f\u14a0\7\u008c"+ + "\2\2\u14a0\u14a5\5\u01ea\u00f6\2\u14a1\u14a2\7\u0402\2\2\u14a2\u14a4\5"+ + "\u01ea\u00f6\2\u14a3\u14a1\3\2\2\2\u14a4\u14a7\3\2\2\2\u14a5\u14a3\3\2"+ + "\2\2\u14a5\u14a6\3\2\2\2\u14a6\u14a9\3\2\2\2\u14a7\u14a5\3\2\2\2\u14a8"+ + "\u149f\3\2\2\2\u14a8\u14a9\3\2\2\2\u14a9\u01e7\3\2\2\2\u14aa\u14b2\7\u0083"+ + "\2\2\u14ab\u14ad\7\u0093\2\2\u14ac\u14ae\7\u0244\2\2\u14ad\u14ac\3\2\2"+ + "\2\u14ad\u14ae\3\2\2\2\u14ae\u14af\3\2\2\2\u14af\u14b3\5\u0216\u010c\2"+ + "\u14b0\u14b3\7\u0417\2\2\u14b1\u14b3\7\u0418\2\2\u14b2\u14ab\3\2\2\2\u14b2"+ + "\u14b0\3\2\2\2\u14b2\u14b1\3\2\2\2\u14b2\u14b3\3\2\2\2\u14b3\u14bd\3\2"+ + "\2\2\u14b4\u14b5\7\u008c\2\2\u14b5\u14ba\5\u01ea\u00f6\2\u14b6\u14b7\7"+ + "\u0402\2\2\u14b7\u14b9\5\u01ea\u00f6\2\u14b8\u14b6\3\2\2\2\u14b9\u14bc"+ + "\3\2\2\2\u14ba\u14b8\3\2\2\2\u14ba\u14bb\3\2\2\2\u14bb\u14be\3\2\2\2\u14bc"+ + "\u14ba\3\2\2\2\u14bd\u14b4\3\2\2\2\u14bd\u14be\3\2\2\2\u14be\u01e9\3\2"+ + "\2\2\u14bf\u14c0\tR\2\2\u14c0\u14c3\7\u03f7\2\2\u14c1\u14c4\5\u0216\u010c"+ + "\2\u14c2\u14c4\7\u0410\2\2\u14c3\u14c1\3\2\2\2\u14c3\u14c2\3\2\2\2\u14c4"+ + "\u01eb\3\2\2\2\u14c5\u14c7\7B\2\2\u14c6\u14c8\tS\2\2\u14c7\u14c6\3\2\2"+ + "\2\u14c7\u14c8\3\2\2\2\u14c8\u14c9\3\2\2\2\u14c9\u14e9\7.\2\2\u14ca\u14cb"+ + "\5\u01bc\u00df\2\u14cb\u14cc\7\u03f7\2\2\u14cc\u14d4\tT\2\2\u14cd\u14ce"+ + "\7\u0402\2\2\u14ce\u14cf\5\u01bc\u00df\2\u14cf\u14d0\7\u03f7\2\2\u14d0"+ + "\u14d1\tT\2\2\u14d1\u14d3\3\2\2\2\u14d2\u14cd\3\2\2\2\u14d3\u14d6\3\2"+ + "\2\2\u14d4\u14d2\3\2\2\2\u14d4\u14d5\3\2\2\2\u14d5\u14ea\3\2\2\2\u14d6"+ + "\u14d4\3\2\2\2\u14d7\u14da\7\34\2\2\u14d8\u14db\5\u0212\u010a\2\u14d9"+ + "\u14db\5\u01bc\u00df\2\u14da\u14d8\3\2\2\2\u14da\u14d9\3\2\2\2\u14db\u14dc"+ + "\3\2\2\2\u14dc\u14dd\5\u01bc\u00df\2\u14dd\u14de\7\u03f7\2\2\u14de\u14e6"+ + "\5\u01ee\u00f8\2\u14df\u14e0\7\u0402\2\2\u14e0\u14e1\5\u01bc\u00df\2\u14e1"+ + "\u14e2\7\u03f7\2\2\u14e2\u14e3\5\u01ee\u00f8\2\u14e3\u14e5\3\2\2\2\u14e4"+ + "\u14df\3\2\2\2\u14e5\u14e8\3\2\2\2\u14e6\u14e4\3\2\2\2\u14e6\u14e7\3\2"+ + "\2\2\u14e7\u14ea\3\2\2\2\u14e8\u14e6\3\2\2\2\u14e9\u14ca\3\2\2\2\u14e9"+ + "\u14d7\3\2\2\2\u14ea\u01ed\3\2\2\2\u14eb\u14ec\tU\2\2\u14ec\u01ef\3\2"+ + "\2\2\u14ed\u14f3\5\u00b4[\2\u14ee\u14f3\5\u00a6T\2\u14ef\u14f3\5\u00ac"+ + "W\2\u14f0\u14f3\5\u00b2Z\2\u14f1\u14f3\5\u00b6\\\2\u14f2\u14ed\3\2\2\2"+ + "\u14f2\u14ee\3\2\2\2\u14f2\u14ef\3\2\2\2\u14f2\u14f0\3\2\2\2\u14f2\u14f1"+ + "\3\2\2\2\u14f3\u14f8\3\2\2\2\u14f4\u14f5\7<\2\2\u14f5\u14f6\7\u013a\2"+ + "\2\u14f6\u14f8\5\u020c\u0107\2\u14f7\u14f2\3\2\2\2\u14f7\u14f4\3\2\2\2"+ + "\u14f8\u01f1\3\2\2\2\u14f9\u14fd\5\u020c\u0107\2\u14fa\u14fe\7\u0416\2"+ + "\2\u14fb\u14fc\7\u03ff\2\2\u14fc\u14fe\5\u020c\u0107\2\u14fd\u14fa\3\2"+ + "\2\2\u14fd\u14fb\3\2\2\2\u14fd\u14fe\3\2\2\2\u14fe\u01f3\3\2\2\2\u14ff"+ + "\u1500\5\u01f2\u00fa\2\u1500\u01f5\3\2\2\2\u1501\u1506\5\u020c\u0107\2"+ + "\u1502\u1504\5\u0210\u0109\2\u1503\u1505\5\u0210\u0109\2\u1504\u1503\3"+ + "\2\2\2\u1504\u1505\3\2\2\2\u1505\u1507\3\2\2\2\u1506\u1502\3\2\2\2\u1506"+ + "\u1507\3\2\2\2\u1507\u01f7\3\2\2\2\u1508\u150b\5\u020c\u0107\2\u1509\u150b"+ + "\7\u040f\2\2\u150a\u1508\3\2\2\2\u150a\u1509\3\2\2\2\u150b\u1510\3\2\2"+ + "\2\u150c\u150d\7\u0400\2\2\u150d\u150e\5\u0212\u010a\2\u150e\u150f\7\u0401"+ + "\2\2\u150f\u1511\3\2\2\2\u1510\u150c\3\2\2\2\u1510\u1511\3\2\2\2\u1511"+ + "\u1513\3\2\2\2\u1512\u1514\t+\2\2\u1513\u1512\3\2\2\2\u1513\u1514\3\2"+ + "\2\2\u1514\u01f9\3\2\2\2\u1515\u1516\tV\2\2\u1516\u01fb\3\2\2\2\u1517"+ + "\u1518\tW\2\2\u1518\u01fd\3\2\2\2\u1519\u151e\7\u00d2\2\2\u151a\u151e"+ + "\5\u0272\u013a\2\u151b\u151e\7\u040f\2\2\u151c\u151e\7\u040c\2\2\u151d"+ + "\u1519\3\2\2\2\u151d\u151a\3\2\2\2\u151d\u151b\3\2\2\2\u151d\u151c\3\2"+ + "\2\2\u151e\u01ff\3\2\2\2\u151f\u1522\5\u020c\u0107\2\u1520\u1522\7\u040f"+ + "\2\2\u1521\u151f\3\2\2\2\u1521\u1520\3\2\2\2\u1522\u0201\3\2\2\2\u1523"+ + "\u1524\tX\2\2\u1524\u0203\3\2\2\2\u1525\u1526\5\u0212\u010a\2\u1526\u1527"+ + "\7\u03f4\2\2\u1527\u1528\5\u0212\u010a\2\u1528\u1529\7\u03f4\2\2\u1529"+ + "\u152a\5\u0212\u010a\2\u152a\u152b\7\u03f4\2\2\u152b\u152c\5\u0212\u010a"+ + "\2\u152c\u152d\7\u03f4\2\2\u152d\u1533\5\u0212\u010a\2\u152e\u152f\7\u040b"+ + "\2\2\u152f\u1530\5\u0212\u010a\2\u1530\u1531\7\u03f4\2\2\u1531\u1532\5"+ + "\u0212\u010a\2\u1532\u1534\3\2\2\2\u1533\u152e\3\2\2\2\u1534\u1535\3\2"+ + "\2\2\u1535\u1533\3\2\2\2\u1535\u1536\3\2\2\2\u1536\u0205\3\2\2\2\u1537"+ + "\u153e\5\u0208\u0105\2\u1538\u1539\7\u0402\2\2\u1539\u153c\5\u0208\u0105"+ + "\2\u153a\u153b\7\u0402\2\2\u153b\u153d\5\u0212\u010a\2\u153c\u153a\3\2"+ + "\2\2\u153c\u153d\3\2\2\2\u153d\u153f\3\2\2\2\u153e\u1538\3\2\2\2\u153e"+ + "\u153f\3\2\2\2\u153f\u0207\3\2\2\2\u1540\u1548\7\u040f\2\2\u1541\u1548"+ + "\7\u0414\2\2\u1542\u1544\7\u0411\2\2\u1543\u1542\3\2\2\2\u1544\u1545\3"+ + "\2\2\2\u1545\u1543\3\2\2\2\u1545\u1546\3\2\2\2\u1546\u1548\3\2\2\2\u1547"+ + "\u1540\3\2\2\2\u1547\u1541\3\2\2\2\u1547\u1543\3\2\2\2\u1548\u0209\3\2"+ + "\2\2\u1549\u154c\5\u020c\u0107\2\u154a\u154c\7\u040f\2\2\u154b\u1549\3"+ + "\2\2\2\u154b\u154a\3\2\2\2\u154c\u020b\3\2\2\2\u154d\u1551\5\u020e\u0108"+ + "\2\u154e\u1551\7\u0418\2\2\u154f\u1551\7\u040c\2\2\u1550\u154d\3\2\2\2"+ + "\u1550\u154e\3\2\2\2\u1550\u154f\3\2\2\2\u1551\u020d\3\2\2\2\u1552\u155c"+ + "\7\u0417\2\2\u1553\u155c\5\u0272\u013a\2\u1554\u155c\5\u0274\u013b\2\u1555"+ + "\u155c\5\u0202\u0102\2\u1556\u155c\5\u0276\u013c\2\u1557\u155c\5\u0278"+ + "\u013d\2\u1558\u155c\5\u027a\u013e\2\u1559\u155c\5\u027c\u013f\2\u155a"+ + "\u155c\5\u027e\u0140\2\u155b\u1552\3\2\2\2\u155b\u1553\3\2\2\2\u155b\u1554"+ + "\3\2\2\2\u155b\u1555\3\2\2\2\u155b\u1556\3\2\2\2\u155b\u1557\3\2\2\2\u155b"+ + "\u1558\3\2\2\2\u155b\u1559\3\2\2\2\u155b\u155a\3\2\2\2\u155c\u020f\3\2"+ + "\2\2\u155d\u1561\7\u0416\2\2\u155e\u155f\7\u03ff\2\2\u155f\u1561\5\u020c"+ + "\u0107\2\u1560\u155d\3\2\2\2\u1560\u155e\3\2\2\2\u1561\u0211\3\2\2\2\u1562"+ + "\u1563\tY\2\2\u1563\u0213\3\2\2\2\u1564\u1567\7\u040d\2\2\u1565\u1567"+ + "\5\u0212\u010a\2\u1566\u1564\3\2\2\2\u1566\u1565\3\2\2\2\u1567\u0215\3"+ + "\2\2\2\u1568\u156a\7\u0415\2\2\u1569\u1568\3\2\2\2\u1569\u156a\3\2\2\2"+ + "\u156a\u156b\3\2\2\2\u156b\u156e\7\u040f\2\2\u156c\u156e\7\u040e\2\2\u156d"+ + "\u1569\3\2\2\2\u156d\u156c\3\2\2\2\u156e\u1570\3\2\2\2\u156f\u1571\7\u040f"+ + "\2\2\u1570\u156f\3\2\2\2\u1571\u1572\3\2\2\2\u1572\u1570\3\2\2\2\u1572"+ + "\u1573\3\2\2\2\u1573\u1580\3\2\2\2\u1574\u1576\7\u0415\2\2\u1575\u1574"+ + "\3\2\2\2\u1575\u1576\3\2\2\2\u1576\u1577\3\2\2\2\u1577\u157a\7\u040f\2"+ + "\2\u1578\u157a\7\u040e\2\2\u1579\u1575\3\2\2\2\u1579\u1578\3\2\2\2\u157a"+ + "\u157d\3\2\2\2\u157b\u157c\7\32\2\2\u157c\u157e\5\u0200\u0101\2\u157d"+ + "\u157b\3\2\2\2\u157d\u157e\3\2\2\2\u157e\u1580\3\2\2\2\u157f\u156d\3\2"+ + "\2\2\u157f\u1579\3\2\2\2\u1580\u0217\3\2\2\2\u1581\u1582\tZ\2\2\u1582"+ + "\u0219\3\2\2\2\u1583\u1585\7\u0415\2\2\u1584\u1583\3\2\2\2\u1584\u1585"+ + "\3\2\2\2\u1585\u1586\3\2\2\2\u1586\u1587\7\u0411\2\2\u1587\u021b\3\2\2"+ + "\2\u1588\u158a\7h\2\2\u1589\u1588\3\2\2\2\u1589\u158a\3\2\2\2\u158a\u158b"+ + "\3\2\2\2\u158b\u158c\t[\2\2\u158c\u021d\3\2\2\2\u158d\u159a\5\u0216\u010c"+ + "\2\u158e\u159a\5\u0212\u010a\2\u158f\u1590\7\u03f4\2\2\u1590\u159a\5\u0212"+ + "\u010a\2\u1591\u159a\5\u021a\u010e\2\u1592\u159a\5\u0218\u010d\2\u1593"+ + "\u159a\7\u0412\2\2\u1594\u159a\7\u0414\2\2\u1595\u1597\7h\2\2\u1596\u1595"+ + "\3\2\2\2\u1596\u1597\3\2\2\2\u1597\u1598\3\2\2\2\u1598\u159a\t[\2\2\u1599"+ + "\u158d\3\2\2\2\u1599\u158e\3\2\2\2\u1599\u158f\3\2\2\2\u1599\u1591\3\2"+ + "\2\2\u1599\u1592\3\2\2\2\u1599\u1593\3\2\2\2\u1599\u1594\3\2\2\2\u1599"+ + "\u1596\3\2\2\2\u159a\u021f\3\2\2\2\u159b\u159d\t\\\2\2\u159c\u159e\5\u0226"+ + "\u0114\2\u159d\u159c\3\2\2\2\u159d\u159e\3\2\2\2\u159e\u15a0\3\2\2\2\u159f"+ + "\u15a1\7\u00d2\2\2\u15a0\u159f\3\2\2\2\u15a0\u15a1\3\2\2\2\u15a1\u15a8"+ + "\3\2\2\2\u15a2\u15a3\7\30\2\2\u15a3\u15a6\7\u008c\2\2\u15a4\u15a6\7\u02df"+ + "\2\2\u15a5\u15a2\3\2\2\2\u15a5\u15a4\3\2\2\2\u15a6\u15a7\3\2\2\2\u15a7"+ + "\u15a9\5\u01fe\u0100\2\u15a8\u15a5\3\2\2\2\u15a8\u15a9\3\2\2\2\u15a9\u15ac"+ + "\3\2\2\2\u15aa\u15ab\7\32\2\2\u15ab\u15ad\5\u0200\u0101\2\u15ac\u15aa"+ + "\3\2\2\2\u15ac\u15ad\3\2\2\2\u15ad\u1606\3\2\2\2\u15ae\u15af\7\u00d1\2"+ + "\2\u15af\u15b1\t]\2\2\u15b0\u15b2\5\u0226\u0114\2\u15b1\u15b0\3\2\2\2"+ + "\u15b1\u15b2\3\2\2\2\u15b2\u15b4\3\2\2\2\u15b3\u15b5\7\u00d2\2\2\u15b4"+ + "\u15b3\3\2\2\2\u15b4\u15b5\3\2\2\2\u15b5\u1606\3\2\2\2\u15b6\u15b7\7\u01c0"+ + "\2\2\u15b7\u15b9\7\u00cf\2\2\u15b8\u15ba\5\u0226\u0114\2\u15b9\u15b8\3"+ + "\2\2\2\u15b9\u15ba\3\2\2\2\u15ba\u15bc\3\2\2\2\u15bb\u15bd\7\u00d2\2\2"+ + "\u15bc\u15bb\3\2\2\2\u15bc\u15bd\3\2\2\2\u15bd\u1606\3\2\2\2\u15be\u15bf"+ + "\7\u00d1\2\2\u15bf\u15c0\t^\2\2\u15c0\u15c2\7\u00de\2\2\u15c1\u15c3\5"+ + "\u0226\u0114\2\u15c2\u15c1\3\2\2\2\u15c2\u15c3\3\2\2\2\u15c3\u15c5\3\2"+ + "\2\2\u15c4\u15c6\7\u00d2\2\2\u15c5\u15c4\3\2\2\2\u15c5\u15c6\3\2\2\2\u15c6"+ + "\u1606\3\2\2\2\u15c7\u15c9\t_\2\2\u15c8\u15ca\5\u0226\u0114\2\u15c9\u15c8"+ + "\3\2\2\2\u15c9\u15ca\3\2\2\2\u15ca\u15cc\3\2\2\2\u15cb\u15cd\t`\2\2\u15cc"+ + "\u15cb\3\2\2\2\u15cc\u15cd\3\2\2\2\u15cd\u15cf\3\2\2\2\u15ce\u15d0\7\u00b3"+ + "\2\2\u15cf\u15ce\3\2\2\2\u15cf\u15d0\3\2\2\2\u15d0\u1606\3\2\2\2\u15d1"+ + "\u15d3\7\u00c0\2\2\u15d2\u15d4\5\u0228\u0115\2\u15d3\u15d2\3\2\2\2\u15d3"+ + "\u15d4\3\2\2\2\u15d4\u15d6\3\2\2\2\u15d5\u15d7\t`\2\2\u15d6\u15d5\3\2"+ + "\2\2\u15d6\u15d7\3\2\2\2\u15d7\u15d9\3\2\2\2\u15d8\u15da\7\u00b3\2\2\u15d9"+ + "\u15d8\3\2\2\2\u15d9\u15da\3\2\2\2\u15da\u1606\3\2\2\2\u15db\u15dd\7\u00c1"+ + "\2\2\u15dc\u15de\7\u00c2\2\2\u15dd\u15dc\3\2\2\2\u15dd\u15de\3\2\2\2\u15de"+ + "\u15e0\3\2\2\2\u15df\u15e1\5\u0228\u0115\2\u15e0\u15df\3\2\2\2\u15e0\u15e1"+ + "\3\2\2\2\u15e1\u15e3\3\2\2\2\u15e2\u15e4\t`\2\2\u15e3\u15e2\3\2\2\2\u15e3"+ + "\u15e4\3\2\2\2\u15e4\u15e6\3\2\2\2\u15e5\u15e7\7\u00b3\2\2\u15e6\u15e5"+ + "\3\2\2\2\u15e6\u15e7\3\2\2\2\u15e7\u1606\3\2\2\2\u15e8\u15ea\ta\2\2\u15e9"+ + "\u15eb\5\u022a\u0116\2\u15ea\u15e9\3\2\2\2\u15ea\u15eb\3\2\2\2\u15eb\u15ed"+ + "\3\2\2\2\u15ec\u15ee\t`\2\2\u15ed\u15ec\3\2\2\2\u15ed\u15ee\3\2\2\2\u15ee"+ + "\u15f0\3\2\2\2\u15ef\u15f1\7\u00b3\2\2\u15f0\u15ef\3\2\2\2\u15f0\u15f1"+ + "\3\2\2\2\u15f1\u1606\3\2\2\2\u15f2\u1606\tb\2\2\u15f3\u15f5\tc\2\2\u15f4"+ + "\u15f6\5\u0226\u0114\2\u15f5\u15f4\3\2\2\2\u15f5\u15f6\3\2\2\2\u15f6\u1606"+ + "\3\2\2\2\u15f7\u15f8\td\2\2\u15f8\u15fa\5\u0222\u0112\2\u15f9\u15fb\7"+ + "\u00d2\2\2\u15fa\u15f9\3\2\2\2\u15fa\u15fb\3\2\2\2\u15fb\u1602\3\2\2\2"+ + "\u15fc\u15fd\7\30\2\2\u15fd\u1600\7\u008c\2\2\u15fe\u1600\7\u02df\2\2"+ + "\u15ff\u15fc\3\2\2\2\u15ff\u15fe\3\2\2\2\u1600\u1601\3\2\2\2\u1601\u1603"+ + "\5\u01fe\u0100\2\u1602\u15ff\3\2\2\2\u1602\u1603\3\2\2\2\u1603\u1606\3"+ + "\2\2\2\u1604\u1606\te\2\2\u1605\u159b\3\2\2\2\u1605\u15ae\3\2\2\2\u1605"+ + "\u15b6\3\2\2\2\u1605\u15be\3\2\2\2\u1605\u15c7\3\2\2\2\u1605\u15d1\3\2"+ + "\2\2\u1605\u15db\3\2\2\2\u1605\u15e8\3\2\2\2\u1605\u15f2\3\2\2\2\u1605"+ + "\u15f3\3\2\2\2\u1605\u15f7\3\2\2\2\u1605\u1604\3\2\2\2\u1606\u0221\3\2"+ + "\2\2\u1607\u1608\7\u0400\2\2\u1608\u160d\7\u040f\2\2\u1609\u160a\7\u0402"+ + "\2\2\u160a\u160c\7\u040f\2\2\u160b\u1609\3\2\2\2\u160c\u160f\3\2\2\2\u160d"+ + "\u160b\3\2\2\2\u160d\u160e\3\2\2\2\u160e\u1610\3\2\2\2\u160f\u160d\3\2"+ + "\2\2\u1610\u1611\7\u0401\2\2\u1611\u0223\3\2\2\2\u1612\u1614\tf\2\2\u1613"+ + "\u1615\5\u0226\u0114\2\u1614\u1613\3\2\2\2\u1614\u1615\3\2\2\2\u1615\u162c"+ + "\3\2\2\2\u1616\u1618\7\u00ce\2\2\u1617\u1619\5\u0226\u0114\2\u1618\u1617"+ + "\3\2\2\2\u1618\u1619\3\2\2\2\u1619\u1620\3\2\2\2\u161a\u161b\7\30\2\2"+ + "\u161b\u161e\7\u008c\2\2\u161c\u161e\7\u02df\2\2\u161d\u161a\3\2\2\2\u161d"+ + "\u161c\3\2\2\2\u161e\u161f\3\2\2\2\u161f\u1621\5\u01fe\u0100\2\u1620\u161d"+ + "\3\2\2\2\u1620\u1621\3\2\2\2\u1621\u162c\3\2\2\2\u1622\u162c\tg\2\2\u1623"+ + "\u1625\7\u00c6\2\2\u1624\u1626\5\u0228\u0115\2\u1625\u1624\3\2\2\2\u1625"+ + "\u1626\3\2\2\2\u1626\u162c\3\2\2\2\u1627\u1629\t`\2\2\u1628\u162a\7\u00be"+ + "\2\2\u1629\u1628\3\2\2\2\u1629\u162a\3\2\2\2\u162a\u162c\3\2\2\2\u162b"+ + "\u1612\3\2\2\2\u162b\u1616\3\2\2\2\u162b\u1622\3\2\2\2\u162b\u1623\3\2"+ + "\2\2\u162b\u1627\3\2\2\2\u162c\u0225\3\2\2\2\u162d\u162e\7\u0400\2\2\u162e"+ + "\u162f\5\u0212\u010a\2\u162f\u1630\7\u0401\2\2\u1630\u0227\3\2\2\2\u1631"+ + "\u1632\7\u0400\2\2\u1632\u1633\5\u0212\u010a\2\u1633\u1634\7\u0402\2\2"+ + "\u1634\u1635\5\u0212\u010a\2\u1635\u1636\7\u0401\2\2\u1636\u0229\3\2\2"+ + "\2\u1637\u1638\7\u0400\2\2\u1638\u163b\5\u0212\u010a\2\u1639\u163a\7\u0402"+ + "\2\2\u163a\u163c\5\u0212\u010a\2\u163b\u1639\3\2\2\2\u163b\u163c\3\2\2"+ + "\2\u163c\u163d\3\2\2\2\u163d\u163e\7\u0401\2\2\u163e\u022b\3\2\2\2\u163f"+ + "\u1644\5\u020c\u0107\2\u1640\u1641\7\u0402\2\2\u1641\u1643\5\u020c\u0107"+ + "\2\u1642\u1640\3\2\2\2\u1643\u1646\3\2\2\2\u1644\u1642\3\2\2\2\u1644\u1645"+ + "\3\2\2\2\u1645\u022d\3\2\2\2\u1646\u1644\3\2\2\2\u1647\u164c\5\u01f4\u00fb"+ + "\2\u1648\u1649\7\u0402\2\2\u1649\u164b\5\u01f4\u00fb\2\u164a\u1648\3\2"+ + "\2\2\u164b\u164e\3\2\2\2\u164c\u164a\3\2\2\2\u164c\u164d\3\2\2\2\u164d"+ + "\u022f\3\2\2\2\u164e\u164c\3\2\2\2\u164f\u1650\7\u0400\2\2\u1650\u1655"+ + "\5\u01f8\u00fd\2\u1651\u1652\7\u0402\2\2\u1652\u1654\5\u01f8\u00fd\2\u1653"+ + "\u1651\3\2\2\2\u1654\u1657\3\2\2\2\u1655\u1653\3\2\2\2\u1655\u1656\3\2"+ + "\2\2\u1656\u1658\3\2\2\2\u1657\u1655\3\2\2\2\u1658\u1659\7\u0401\2\2\u1659"+ + "\u0231\3\2\2\2\u165a\u165f\5\u025c\u012f\2\u165b\u165c\7\u0402\2\2\u165c"+ + "\u165e\5\u025c\u012f\2\u165d\u165b\3\2\2\2\u165e\u1661\3\2\2\2\u165f\u165d"+ + "\3\2\2\2\u165f\u1660\3\2\2\2\u1660\u0233\3\2\2\2\u1661\u165f\3\2\2\2\u1662"+ + "\u1667\5\u0260\u0131\2\u1663\u1664\7\u0402\2\2\u1664\u1666\5\u0260\u0131"+ + "\2\u1665\u1663\3\2\2\2\u1666\u1669\3\2\2\2\u1667\u1665\3\2\2\2\u1667\u1668"+ + "\3\2\2\2\u1668\u0235\3\2\2\2\u1669\u1667\3\2\2\2\u166a\u166f\5\u0242\u0122"+ + "\2\u166b\u166c\7\u0402\2\2\u166c\u166e\5\u0242\u0122\2\u166d\u166b\3\2"+ + "\2\2\u166e\u1671\3\2\2\2\u166f\u166d\3\2\2\2\u166f\u1670\3\2\2\2\u1670"+ + "\u0237\3\2\2\2\u1671\u166f\3\2\2\2\u1672\u1677\5\u021e\u0110\2\u1673\u1674"+ + "\7\u0402\2\2\u1674\u1676\5\u021e\u0110\2\u1675\u1673\3\2\2\2\u1676\u1679"+ + "\3\2\2\2\u1677\u1675\3\2\2\2\u1677\u1678\3\2\2\2\u1678\u0239\3\2\2\2\u1679"+ + "\u1677\3\2\2\2\u167a\u167f\7\u040f\2\2\u167b\u167c\7\u0402\2\2\u167c\u167e"+ + "\7\u040f\2\2\u167d\u167b\3\2\2\2\u167e\u1681\3\2\2\2\u167f\u167d\3\2\2"+ + "\2\u167f\u1680\3\2\2\2\u1680\u023b\3\2\2\2\u1681\u167f\3\2\2\2\u1682\u1687"+ + "\7\u041a\2\2\u1683\u1684\7\u0402\2\2\u1684\u1686\7\u041a\2\2\u1685\u1683"+ + "\3\2\2\2\u1686\u1689\3\2\2\2\u1687\u1685\3\2\2\2\u1687\u1688\3\2\2\2\u1688"+ + "\u023d\3\2\2\2\u1689\u1687\3\2\2\2\u168a\u1696\7j\2\2\u168b\u168d\5\u0268"+ + "\u0135\2\u168c\u168b\3\2\2\2\u168c\u168d\3\2\2\2\u168d\u168e\3\2\2\2\u168e"+ + "\u1696\5\u021e\u0110\2\u168f\u1693\5\u0240\u0121\2\u1690\u1691\7l\2\2"+ + "\u1691\u1692\7\u00a8\2\2\u1692\u1694\5\u0240\u0121\2\u1693\u1690\3\2\2"+ + "\2\u1693\u1694\3\2\2\2\u1694\u1696\3\2\2\2\u1695\u168a\3\2\2\2\u1695\u168c"+ + "\3\2\2\2\u1695\u168f\3\2\2\2\u1696\u023f\3\2\2\2\u1697\u169d\th\2\2\u1698"+ + "\u169a\7\u0400\2\2\u1699\u169b\5\u0212\u010a\2\u169a\u1699\3\2\2\2\u169a"+ + "\u169b\3\2\2\2\u169b\u169c\3\2\2\2\u169c\u169e\7\u0401\2\2\u169d\u1698"+ + "\3\2\2\2\u169d\u169e\3\2\2\2\u169e\u16a6\3\2\2\2\u169f\u16a0\7\u0107\2"+ + "\2\u16a0\u16a2\7\u0400\2\2\u16a1\u16a3\5\u0212\u010a\2\u16a2\u16a1\3\2"+ + "\2\2\u16a2\u16a3\3\2\2\2\u16a3\u16a4\3\2\2\2\u16a4\u16a6\7\u0401\2\2\u16a5"+ + "\u1697\3\2\2\2\u16a5\u169f\3\2\2\2\u16a6\u0241\3\2\2\2\u16a7\u16aa\5\u025c"+ + "\u012f\2\u16a8\u16aa\7(\2\2\u16a9\u16a7\3\2\2\2\u16a9\u16a8\3\2\2\2\u16aa"+ + "\u0243\3\2\2\2\u16ab\u16ac\7G\2\2\u16ac\u16ad\7\67\2\2\u16ad\u0245\3\2"+ + "\2\2\u16ae\u16af\7G\2\2\u16af\u16b0\7h\2\2\u16b0\u16b1\7\67\2\2\u16b1"+ + "\u0247\3\2\2\2\u16b2\u16c4\5\u024a\u0126\2\u16b3\u16c4\5\u0252\u012a\2"+ + "\u16b4\u16b5\5\u0254\u012b\2\u16b5\u16b7\7\u0400\2\2\u16b6\u16b8\5\u0258"+ + "\u012d\2\u16b7\u16b6\3\2\2\2\u16b7\u16b8\3\2\2\2\u16b8\u16b9\3\2\2\2\u16b9"+ + "\u16ba\7\u0401\2\2\u16ba\u16c4\3\2\2\2\u16bb\u16bc\5\u01f2\u00fa\2\u16bc"+ + "\u16be\7\u0400\2\2\u16bd\u16bf\5\u0258\u012d\2\u16be\u16bd\3\2\2\2\u16be"+ + "\u16bf\3\2\2\2\u16bf\u16c0\3\2\2\2\u16c0\u16c1\7\u0401\2\2\u16c1\u16c4"+ + "\3\2\2\2\u16c2\u16c4\5\u0256\u012c\2\u16c3\u16b2\3\2\2\2\u16c3\u16b3\3"+ + "\2\2\2\u16c3\u16b4\3\2\2\2\u16c3\u16bb\3\2\2\2\u16c3\u16c2\3\2\2\2\u16c4"+ + "\u0249\3\2\2\2\u16c5\u1763\ti\2\2\u16c6\u16c7\7\37\2\2\u16c7\u16c8\7\u0400"+ + "\2\2\u16c8\u16c9\5\u025c\u012f\2\u16c9\u16ca\7\u0402\2\2\u16ca\u16cb\5"+ + "\u0224\u0113\2\u16cb\u16cc\7\u0401\2\2\u16cc\u1763\3\2\2\2\u16cd\u16ce"+ + "\7\37\2\2\u16ce\u16cf\7\u0400\2\2\u16cf\u16d0\5\u025c\u012f\2\u16d0\u16d1"+ + "\7\u00ab\2\2\u16d1\u16d2\5\u01fe\u0100\2\u16d2\u16d3\7\u0401\2\2\u16d3"+ + "\u1763\3\2\2\2\u16d4\u16d5\7\26\2\2\u16d5\u16d6\7\u0400\2\2\u16d6\u16d7"+ + "\5\u025c\u012f\2\u16d7\u16d8\7\r\2\2\u16d8\u16d9\5\u0224\u0113\2\u16d9"+ + "\u16da\7\u0401\2\2\u16da\u1763\3\2\2\2\u16db\u16dc\7\u00ac\2\2\u16dc\u16dd"+ + "\7\u0400\2\2\u16dd\u16de\5\u01f6\u00fc\2\u16de\u16df\7\u0401\2\2\u16df"+ + "\u1763\3\2\2\2\u16e0\u16e1\7\25\2\2\u16e1\u16e3\5\u025c\u012f\2\u16e2"+ + "\u16e4\5\u024c\u0127\2\u16e3\u16e2\3\2\2\2\u16e4\u16e5\3\2\2\2\u16e5\u16e3"+ + "\3\2\2\2\u16e5\u16e6\3\2\2\2\u16e6\u16e9\3\2\2\2\u16e7\u16e8\7\63\2\2"+ + "\u16e8\u16ea\5\u025a\u012e\2\u16e9\u16e7\3\2\2\2\u16e9\u16ea\3\2\2\2\u16ea"+ + "\u16eb\3\2\2\2\u16eb\u16ec\7\u0156\2\2\u16ec\u1763\3\2\2\2\u16ed\u16ef"+ + "\7\25\2\2\u16ee\u16f0\5\u024c\u0127\2\u16ef\u16ee\3\2\2\2\u16f0\u16f1"+ + "\3\2\2\2\u16f1\u16ef\3\2\2\2\u16f1\u16f2\3\2\2\2\u16f2\u16f5\3\2\2\2\u16f3"+ + "\u16f4\7\63\2\2\u16f4\u16f6\5\u025a\u012e\2\u16f5\u16f3\3\2\2\2\u16f5"+ + "\u16f6\3\2\2\2\u16f6\u16f7\3\2\2\2\u16f7\u16f8\7\u0156\2\2\u16f8\u1763"+ + "\3\2\2\2\u16f9\u16fa\7\u00ce\2\2\u16fa\u16fb\7\u0400\2\2\u16fb\u16fe\5"+ + "\u0258\u012d\2\u16fc\u16fd\7\u00ab\2\2\u16fd\u16ff\5\u01fe\u0100\2\u16fe"+ + "\u16fc\3\2\2\2\u16fe\u16ff\3\2\2\2\u16ff\u1700\3\2\2\2\u1700\u1701\7\u0401"+ + "\2\2\u1701\u1763\3\2\2\2\u1702\u1703\7\u0108\2\2\u1703\u1706\7\u0400\2"+ + "\2\u1704\u1707\5\u0216\u010c\2\u1705\u1707\5\u025c\u012f\2\u1706\u1704"+ + "\3\2\2\2\u1706\u1705\3\2\2\2\u1707\u1708\3\2\2\2\u1708\u170b\7I\2\2\u1709"+ + "\u170c\5\u0216\u010c\2\u170a\u170c\5\u025c\u012f\2\u170b\u1709\3\2\2\2"+ + "\u170b\u170a\3\2\2\2\u170c\u170d\3\2\2\2\u170d\u170e\7\u0401\2\2\u170e"+ + "\u1763\3\2\2\2\u170f\u1710\tj\2\2\u1710\u1713\7\u0400\2\2\u1711\u1714"+ + "\5\u0216\u010c\2\u1712\u1714\5\u025c\u012f\2\u1713\u1711\3\2\2\2\u1713"+ + "\u1712\3\2\2\2\u1714\u1715\3\2\2\2\u1715\u1718\7?\2\2\u1716\u1719\5\u0212"+ + "\u010a\2\u1717\u1719\5\u025c\u012f\2\u1718\u1716\3\2\2\2\u1718\u1717\3"+ + "\2\2\2\u1719\u171f\3\2\2\2\u171a\u171d\7<\2\2\u171b\u171e\5\u0212\u010a"+ + "\2\u171c\u171e\5\u025c\u012f\2\u171d\u171b\3\2\2\2\u171d\u171c\3\2\2\2"+ + "\u171e\u1720\3\2\2\2\u171f\u171a\3\2\2\2\u171f\u1720\3\2\2\2\u1720\u1721"+ + "\3\2\2\2\u1721\u1722\7\u0401\2\2\u1722\u1763\3\2\2\2\u1723\u1724\7\u010c"+ + "\2\2\u1724\u1725\7\u0400\2\2\u1725\u1728\tk\2\2\u1726\u1729\5\u0216\u010c"+ + "\2\u1727\u1729\5\u025c\u012f\2\u1728\u1726\3\2\2\2\u1728\u1727\3\2\2\2"+ + "\u1728\u1729\3\2\2\2\u1729\u172a\3\2\2\2\u172a\u172d\7?\2\2\u172b\u172e"+ + "\5\u0216\u010c\2\u172c\u172e\5\u025c\u012f\2\u172d\u172b\3\2\2\2\u172d"+ + "\u172c\3\2\2\2\u172e\u172f\3\2\2\2\u172f\u1730\7\u0401\2\2\u1730\u1763"+ + "\3\2\2\2\u1731\u1732\7\u010c\2\2\u1732\u1735\7\u0400\2\2\u1733\u1736\5"+ + "\u0216\u010c\2\u1734\u1736\5\u025c\u012f\2\u1735\u1733\3\2\2\2\u1735\u1734"+ + "\3\2\2\2\u1736\u1737\3\2\2\2\u1737\u173a\7?\2\2\u1738\u173b\5\u0216\u010c"+ + "\2\u1739\u173b\5\u025c\u012f\2\u173a\u1738\3\2\2\2\u173a\u1739\3\2\2\2"+ + "\u173b\u173c\3\2\2\2\u173c\u173d\7\u0401\2\2\u173d\u1763\3\2\2\2\u173e"+ + "\u173f\7\u03e1\2\2\u173f\u1742\7\u0400\2\2\u1740\u1743\5\u0216\u010c\2"+ + "\u1741\u1743\5\u025c\u012f\2\u1742\u1740\3\2\2\2\u1742\u1741\3\2\2\2\u1743"+ + "\u174a\3\2\2\2\u1744\u1745\7\r\2\2\u1745\u1746\tl\2\2\u1746\u1747\7\u0400"+ + "\2\2\u1747\u1748\5\u0212\u010a\2\u1748\u1749\7\u0401\2\2\u1749\u174b\3"+ + "\2\2\2\u174a\u1744\3\2\2\2\u174a\u174b\3\2\2\2\u174b\u174d\3\2\2\2\u174c"+ + "\u174e\5\u024e\u0128\2\u174d\u174c\3\2\2\2\u174d\u174e\3\2\2\2\u174e\u174f"+ + "\3\2\2\2\u174f\u1750\7\u0401\2\2\u1750\u1763\3\2\2\2\u1751\u1752\7\u0105"+ + "\2\2\u1752\u1753\7\u0400\2\2\u1753\u1754\5<\37\2\u1754\u1757\7?\2\2\u1755"+ + "\u1758\5\u0216\u010c\2\u1756\u1758\5\u025c\u012f\2\u1757\u1755\3\2\2\2"+ + "\u1757\u1756\3\2\2\2\u1758\u1759\3\2\2\2\u1759\u175a\7\u0401\2\2\u175a"+ + "\u1763\3\2\2\2\u175b\u175c\7\u0319\2\2\u175c\u175d\7\u0400\2\2\u175d\u175e"+ + "\tm\2\2\u175e\u175f\7\u0402\2\2\u175f\u1760\5\u0216\u010c\2\u1760\u1761"+ + "\7\u0401\2\2\u1761\u1763\3\2\2\2\u1762\u16c5\3\2\2\2\u1762\u16c6\3\2\2"+ + "\2\u1762\u16cd\3\2\2\2\u1762\u16d4\3\2\2\2\u1762\u16db\3\2\2\2\u1762\u16e0"+ + "\3\2\2\2\u1762\u16ed\3\2\2\2\u1762\u16f9\3\2\2\2\u1762\u1702\3\2\2\2\u1762"+ + "\u170f\3\2\2\2\u1762\u1723\3\2\2\2\u1762\u1731\3\2\2\2\u1762\u173e\3\2"+ + "\2\2\u1762\u1751\3\2\2\2\u1762\u175b\3\2\2\2\u1763\u024b\3\2\2\2\u1764"+ + "\u1765\7\u00ad\2\2\u1765\u1766\5\u025a\u012e\2\u1766\u1767\7\u009e\2\2"+ + "\u1767\u1768\5\u025a\u012e\2\u1768\u024d\3\2\2\2\u1769\u176a\7\u0192\2"+ + "\2\u176a\u176f\5\u0250\u0129\2\u176b\u176c\7\u0402\2\2\u176c\u176e\5\u0250"+ + "\u0129\2\u176d\u176b\3\2\2\2\u176e\u1771\3\2\2\2\u176f\u176d\3\2\2\2\u176f"+ + "\u1770\3\2\2\2\u1770\u1778\3\2\2\2\u1771\u176f\3\2\2\2\u1772\u1773\7\u0192"+ + "\2\2\u1773\u1774\5\u0212\u010a\2\u1774\u1775\7\u03f4\2\2\u1775\u1776\5"+ + "\u0212\u010a\2\u1776\u1778\3\2\2\2\u1777\u1769\3\2\2\2\u1777\u1772\3\2"+ + "\2\2\u1778\u024f\3\2\2\2\u1779\u177b\5\u0212\u010a\2\u177a\u177c\tn\2"+ + "\2\u177b\u177a\3\2\2\2\u177b\u177c\3\2\2\2\u177c\u0251\3\2\2\2\u177d\u177e"+ + "\to\2\2\u177e\u1780\7\u0400\2\2\u177f\u1781\t\'\2\2\u1780\u177f\3\2\2"+ + "\2\u1780\u1781\3\2\2\2\u1781\u1782\3\2\2\2\u1782\u1783\5\u025a\u012e\2"+ + "\u1783\u1784\7\u0401\2\2\u1784\u17b6\3\2\2\2\u1785\u1786\7\u00f1\2\2\u1786"+ + "\u178c\7\u0400\2\2\u1787\u178d\7\u03ef\2\2\u1788\u178a\7\b\2\2\u1789\u1788"+ + "\3\2\2\2\u1789\u178a\3\2\2\2\u178a\u178b\3\2\2\2\u178b\u178d\5\u025a\u012e"+ + "\2\u178c\u1787\3\2\2\2\u178c\u1789\3\2\2\2\u178d\u178e\3\2\2\2\u178e\u17b6"+ + "\7\u0401\2\2\u178f\u1790\7\u00f1\2\2\u1790\u1791\7\u0400\2\2\u1791\u1792"+ + "\7/\2\2\u1792\u1793\5\u0258\u012d\2\u1793\u1794\7\u0401\2\2\u1794\u17b6"+ + "\3\2\2\2\u1795\u1796\tp\2\2\u1796\u1798\7\u0400\2\2\u1797\u1799\7\b\2"+ + "\2\u1798\u1797\3\2\2\2\u1798\u1799\3\2\2\2\u1799\u179a\3\2\2\2\u179a\u179b"+ + "\5\u025a\u012e\2\u179b\u179c\7\u0401\2\2\u179c\u17b6\3\2\2\2\u179d\u179e"+ + "\7\u00f2\2\2\u179e\u17a0\7\u0400\2\2\u179f\u17a1\7/\2\2\u17a0\u179f\3"+ + "\2\2\2\u17a0\u17a1\3\2\2\2\u17a1\u17a2\3\2\2\2\u17a2\u17ad\5\u0258\u012d"+ + "\2\u17a3\u17a4\7q\2\2\u17a4\u17a5\7\22\2\2\u17a5\u17aa\5\u00d2j\2\u17a6"+ + "\u17a7\7\u0402\2\2\u17a7\u17a9\5\u00d2j\2\u17a8\u17a6\3\2\2\2\u17a9\u17ac"+ + "\3\2\2\2\u17aa\u17a8\3\2\2\2\u17aa\u17ab\3\2\2\2\u17ab\u17ae\3\2\2\2\u17ac"+ + "\u17aa\3\2\2\2\u17ad\u17a3\3\2\2\2\u17ad\u17ae\3\2\2\2\u17ae\u17b1\3\2"+ + "\2\2\u17af\u17b0\7\u008d\2\2\u17b0\u17b2\7\u040f\2\2\u17b1\u17af\3\2\2"+ + "\2\u17b1\u17b2\3\2\2\2\u17b2\u17b3\3\2\2\2\u17b3\u17b4\7\u0401\2\2\u17b4"+ + "\u17b6\3\2\2\2\u17b5\u177d\3\2\2\2\u17b5\u1785\3\2\2\2\u17b5\u178f\3\2"+ + "\2\2\u17b5\u1795\3\2\2\2\u17b5\u179d\3\2\2\2\u17b6\u0253\3\2\2\2\u17b7"+ + "\u17cf\5\u027e\u0140\2\u17b8\u17cf\7\u0282\2\2\u17b9\u17cf\7\u0101\2\2"+ + "\u17ba\u17cf\7\u00fd\2\2\u17bb\u17cf\7\u00fe\2\2\u17bc\u17cf\7\u00ff\2"+ + "\2\u17bd\u17cf\7\u0102\2\2\u17be\u17cf\7\u0103\2\2\u17bf\u17cf\7\u0104"+ + "\2\2\u17c0\u17cf\7G\2\2\u17c1\u17cf\7N\2\2\u17c2\u17cf\7\u0100\2\2\u17c3"+ + "\u17cf\7\u0106\2\2\u17c4\u17cf\7\u01b6\2\2\u17c5\u17cf\7\u0107\2\2\u17c6"+ + "\u17cf\7\u0081\2\2\u17c7\u17cf\7\u0109\2\2\u17c8\u17cf\7\u010a\2\2\u17c9"+ + "\u17cf\7\u010b\2\2\u17ca\u17cf\7\u010c\2\2\u17cb\u17cf\7\u010d\2\2\u17cc"+ + "\u17cf\7\u010e\2\2\u17cd\u17cf\7\u010f\2\2\u17ce\u17b7\3\2\2\2\u17ce\u17b8"+ + "\3\2\2\2\u17ce\u17b9\3\2\2\2\u17ce\u17ba\3\2\2\2\u17ce\u17bb\3\2\2\2\u17ce"+ + "\u17bc\3\2\2\2\u17ce\u17bd\3\2\2\2\u17ce\u17be\3\2\2\2\u17ce\u17bf\3\2"+ + "\2\2\u17ce\u17c0\3\2\2\2\u17ce\u17c1\3\2\2\2\u17ce\u17c2\3\2\2\2\u17ce"+ + "\u17c3\3\2\2\2\u17ce\u17c4\3\2\2\2\u17ce\u17c5\3\2\2\2\u17ce\u17c6\3\2"+ + "\2\2\u17ce\u17c7\3\2\2\2\u17ce\u17c8\3\2\2\2\u17ce\u17c9\3\2\2\2\u17ce"+ + "\u17ca\3\2\2\2\u17ce\u17cb\3\2\2\2\u17ce\u17cc\3\2\2\2\u17ce\u17cd\3\2"+ + "\2\2\u17cf\u0255\3\2\2\2\u17d0\u17d1\tq\2\2\u17d1\u17d2\7\u0400\2\2\u17d2"+ + "\u17d3\5\u025a\u012e\2\u17d3\u17d4\7\u0401\2\2\u17d4\u0257\3\2\2\2\u17d5"+ + "\u17da\5\u021e\u0110\2\u17d6\u17da\5\u01f6\u00fc\2\u17d7\u17da\5\u0248"+ + "\u0125\2\u17d8\u17da\5\u025c\u012f\2\u17d9\u17d5\3\2\2\2\u17d9\u17d6\3"+ + "\2\2\2\u17d9\u17d7\3\2\2\2\u17d9\u17d8\3\2\2\2\u17da\u17e4\3\2\2\2\u17db"+ + "\u17e0\7\u0402\2\2\u17dc\u17e1\5\u021e\u0110\2\u17dd\u17e1\5\u01f6\u00fc"+ + "\2\u17de\u17e1\5\u0248\u0125\2\u17df\u17e1\5\u025c\u012f\2\u17e0\u17dc"+ + "\3\2\2\2\u17e0\u17dd\3\2\2\2\u17e0\u17de\3\2\2\2\u17e0\u17df\3\2\2\2\u17e1"+ + "\u17e3\3\2\2\2\u17e2\u17db\3\2\2\2\u17e3\u17e6\3\2\2\2\u17e4\u17e2\3\2"+ + "\2\2\u17e4\u17e5\3\2\2\2\u17e5\u0259\3\2\2\2\u17e6\u17e4\3\2\2\2\u17e7"+ + "\u17ec\5\u021e\u0110\2\u17e8\u17ec\5\u01f6\u00fc\2\u17e9\u17ec\5\u0248"+ + "\u0125\2\u17ea\u17ec\5\u025c\u012f\2\u17eb\u17e7\3\2\2\2\u17eb\u17e8\3"+ + "\2\2\2\u17eb\u17e9\3\2\2\2\u17eb\u17ea\3\2\2\2\u17ec\u025b\3\2\2\2\u17ed"+ + "\u17ee\b\u012f\1\2\u17ee\u17ef\tr\2\2\u17ef\u17f9\5\u025c\u012f\6\u17f0"+ + "\u17f1\5\u025e\u0130\2\u17f1\u17f3\7Q\2\2\u17f2\u17f4\7h\2\2\u17f3\u17f2"+ + "\3\2\2\2\u17f3\u17f4\3\2\2\2\u17f4\u17f5\3\2\2\2\u17f5\u17f6\ts\2\2\u17f6"+ + "\u17f9\3\2\2\2\u17f7\u17f9\5\u025e\u0130\2\u17f8\u17ed\3\2\2\2\u17f8\u17f0"+ + "\3\2\2\2\u17f8\u17f7\3\2\2\2\u17f9\u1800\3\2\2\2\u17fa\u17fb\f\5\2\2\u17fb"+ + "\u17fc\5\u026c\u0137\2\u17fc\u17fd\5\u025c\u012f\6\u17fd\u17ff\3\2\2\2"+ + "\u17fe\u17fa\3\2\2\2\u17ff\u1802\3\2\2\2\u1800\u17fe\3\2\2\2\u1800\u1801"+ + "\3\2\2\2\u1801\u025d\3\2\2\2\u1802\u1800\3\2\2\2\u1803\u1806\b\u0130\1"+ + "\2\u1804\u1805\7\u041a\2\2\u1805\u1807\7\u03e6\2\2\u1806\u1804\3\2\2\2"+ + "\u1806\u1807\3\2\2\2\u1807\u1808\3\2\2\2\u1808\u1809\5\u0266\u0134\2\u1809"+ + "\u1843\3\2\2\2\u180a\u180b\f\t\2\2\u180b\u180c\5\u026a\u0136\2\u180c\u180d"+ + "\5\u025e\u0130\n\u180d\u1842\3\2\2\2\u180e\u1810\f\7\2\2\u180f\u1811\7"+ + "h\2\2\u1810\u180f\3\2\2\2\u1810\u1811\3\2\2\2\u1811\u1812\3\2\2\2\u1812"+ + "\u1813\7\20\2\2\u1813\u1814\5\u025e\u0130\2\u1814\u1815\7\f\2\2\u1815"+ + "\u1816\5\u025e\u0130\b\u1816\u1842\3\2\2\2\u1817\u1818\f\6\2\2\u1818\u1819"+ + "\7\u0215\2\2\u1819\u181a\7Z\2\2\u181a\u1842\5\u025e\u0130\7\u181b\u181d"+ + "\f\4\2\2\u181c\u181e\7h\2\2\u181d\u181c\3\2\2\2\u181d\u181e\3\2\2\2\u181e"+ + "\u181f\3\2\2\2\u181f\u1820\tt\2\2\u1820\u1842\5\u025e\u0130\5\u1821\u1823"+ + "\f\13\2\2\u1822\u1824\7h\2\2\u1823\u1822\3\2\2\2\u1823\u1824\3\2\2\2\u1824"+ + "\u1825\3\2\2\2\u1825\u1826\7I\2\2\u1826\u1829\7\u0400\2\2\u1827\u182a"+ + "\5\u00b4[\2\u1828\u182a\5\u0232\u011a\2\u1829\u1827\3\2\2\2\u1829\u1828"+ + "\3\2\2\2\u182a\u182b\3\2\2\2\u182b\u182c\7\u0401\2\2\u182c\u1842\3\2\2"+ + "\2\u182d\u182e\f\n\2\2\u182e\u182f\7Q\2\2\u182f\u1842\5\u021c\u010f\2"+ + "\u1830\u1831\f\b\2\2\u1831\u1832\5\u026a\u0136\2\u1832\u1833\tu\2\2\u1833"+ + "\u1834\7\u0400\2\2\u1834\u1835\5\u00b4[\2\u1835\u1836\7\u0401\2\2\u1836"+ + "\u1842\3\2\2\2\u1837\u1839\f\5\2\2\u1838\u183a\7h\2\2\u1839\u1838\3\2"+ + "\2\2\u1839\u183a\3\2\2\2\u183a\u183b\3\2\2\2\u183b\u183c\7Z\2\2\u183c"+ + "\u183f\5\u025e\u0130\2\u183d\u183e\7\u015c\2\2\u183e\u1840\7\u040f\2\2"+ + "\u183f\u183d\3\2\2\2\u183f\u1840\3\2\2\2\u1840\u1842\3\2\2\2\u1841\u180a"+ + "\3\2\2\2\u1841\u180e\3\2\2\2\u1841\u1817\3\2\2\2\u1841\u181b\3\2\2\2\u1841"+ + "\u1821\3\2\2\2\u1841\u182d\3\2\2\2\u1841\u1830\3\2\2\2\u1841\u1837\3\2"+ + "\2\2\u1842\u1845\3\2\2\2\u1843\u1841\3\2\2\2\u1843\u1844\3\2\2\2\u1844"+ + "\u025f\3\2\2\2\u1845\u1843\3\2\2\2\u1846\u1847\b\u0131\1\2\u1847\u1848"+ + "\tr\2\2\u1848\u184b\5\u0260\u0131\6\u1849\u184b\5\u0262\u0132\2\u184a"+ + "\u1846\3\2\2\2\u184a\u1849\3\2\2\2\u184b\u1858\3\2\2\2\u184c\u184d\f\5"+ + "\2\2\u184d\u184e\5\u026c\u0137\2\u184e\u184f\5\u0260\u0131\6\u184f\u1857"+ + "\3\2\2\2\u1850\u1851\f\4\2\2\u1851\u1853\7Q\2\2\u1852\u1854\7h\2\2\u1853"+ + "\u1852\3\2\2\2\u1853\u1854\3\2\2\2\u1854\u1855\3\2\2\2\u1855\u1857\ts"+ + "\2\2\u1856\u184c\3\2\2\2\u1856\u1850\3\2\2\2\u1857\u185a\3\2\2\2\u1858"+ + "\u1856\3\2\2\2\u1858\u1859\3\2\2\2\u1859\u0261\3\2\2\2\u185a\u1858\3\2"+ + "\2\2\u185b\u185e\b\u0132\1\2\u185c\u185d\7\u041a\2\2\u185d\u185f\7\u03e6"+ + "\2\2\u185e\u185c\3\2\2\2\u185e\u185f\3\2\2\2\u185f\u1860\3\2\2\2\u1860"+ + "\u1861\5\u0264\u0133\2\u1861\u189b\3\2\2\2\u1862\u1863\f\t\2\2\u1863\u1864"+ + "\5\u026a\u0136\2\u1864\u1865\5\u0262\u0132\n\u1865\u189a\3\2\2\2\u1866"+ + "\u1868\f\7\2\2\u1867\u1869\7h\2\2\u1868\u1867\3\2\2\2\u1868\u1869\3\2"+ + "\2\2\u1869\u186a\3\2\2\2\u186a\u186b\7\20\2\2\u186b\u186c\5\u0262\u0132"+ + "\2\u186c\u186d\7\f\2\2\u186d\u186e\5\u0262\u0132\b\u186e\u189a\3\2\2\2"+ + "\u186f\u1870\f\6\2\2\u1870\u1871\7\u0215\2\2\u1871\u1872\7Z\2\2\u1872"+ + "\u189a\5\u0262\u0132\7\u1873\u1875\f\13\2\2\u1874\u1876\7h\2\2\u1875\u1874"+ + "\3\2\2\2\u1875\u1876\3\2\2\2\u1876\u1877\3\2\2\2\u1877\u1878\7I\2\2\u1878"+ + "\u187b\7\u0400\2\2\u1879\u187c\5\u00b4[\2\u187a\u187c\5\u0234\u011b\2"+ + "\u187b\u1879\3\2\2\2\u187b\u187a\3\2\2\2\u187c\u187d\3\2\2\2\u187d\u187e"+ + "\7\u0401\2\2\u187e\u189a\3\2\2\2\u187f\u1880\f\n\2\2\u1880\u1881\7Q\2"+ + "\2\u1881\u189a\5\u021c\u010f\2\u1882\u1883\f\b\2\2\u1883\u1884\5\u026a"+ + "\u0136\2\u1884\u1885\tu\2\2\u1885\u1886\7\u0400\2\2\u1886\u1887\5\u00b4"+ + "[\2\u1887\u1888\7\u0401\2\2\u1888\u189a\3\2\2\2\u1889\u188b\f\5\2\2\u188a"+ + "\u188c\7h\2\2\u188b\u188a\3\2\2\2\u188b\u188c\3\2\2\2\u188c\u188d\3\2"+ + "\2\2\u188d\u188e\7Z\2\2\u188e\u1891\5\u0262\u0132\2\u188f\u1890\7\u015c"+ + "\2\2\u1890\u1892\7\u040f\2\2\u1891\u188f\3\2\2\2\u1891\u1892\3\2\2\2\u1892"+ + "\u189a\3\2\2\2\u1893\u1895\f\4\2\2\u1894\u1896\7h\2\2\u1895\u1894\3\2"+ + "\2\2\u1895\u1896\3\2\2\2\u1896\u1897\3\2\2\2\u1897\u1898\tt\2\2\u1898"+ + "\u189a\5\u025e\u0130\2\u1899\u1862\3\2\2\2\u1899\u1866\3\2\2\2\u1899\u186f"+ + "\3\2\2\2\u1899\u1873\3\2\2\2\u1899\u187f\3\2\2\2\u1899\u1882\3\2\2\2\u1899"+ + "\u1889\3\2\2\2\u1899\u1893\3\2\2\2\u189a\u189d\3\2\2\2\u189b\u1899\3\2"+ + "\2\2\u189b\u189c\3\2\2\2\u189c\u0263\3\2\2\2\u189d\u189b\3\2\2\2\u189e"+ + "\u189f\b\u0133\1\2\u189f\u18cc\5\u021e\u0110\2\u18a0\u18cc\5\u01f6\u00fc"+ + "\2\u18a1\u18cc\5\u0248\u0125\2\u18a2\u18cc\5\u01fc\u00ff\2\u18a3\u18a4"+ + "\5\u0268\u0135\2\u18a4\u18a5\5\u0264\u0133\13\u18a5\u18cc\3\2\2\2\u18a6"+ + "\u18a7\7\u00d2\2\2\u18a7\u18cc\5\u0264\u0133\n\u18a8\u18a9\7\u0400\2\2"+ + "\u18a9\u18ae\5\u0260\u0131\2\u18aa\u18ab\7\u0402\2\2\u18ab\u18ad\5\u0260"+ + "\u0131\2\u18ac\u18aa\3\2\2\2\u18ad\u18b0\3\2\2\2\u18ae\u18ac\3\2\2\2\u18ae"+ + "\u18af\3\2\2\2\u18af\u18b1\3\2\2\2\u18b0\u18ae\3\2\2\2\u18b1\u18b2\7\u0401"+ + "\2\2\u18b2\u18cc\3\2\2\2\u18b3\u18b4\7\u0203\2\2\u18b4\u18b5\7\u0400\2"+ + "\2\u18b5\u18b8\5\u0260\u0131\2\u18b6\u18b7\7\u0402\2\2\u18b7\u18b9\5\u0260"+ + "\u0131\2\u18b8\u18b6\3\2\2\2\u18b9\u18ba\3\2\2\2\u18ba\u18b8\3\2\2\2\u18ba"+ + "\u18bb\3\2\2\2\u18bb\u18bc\3\2\2\2\u18bc\u18bd\7\u0401\2\2\u18bd\u18cc"+ + "\3\2\2\2\u18be\u18bf\7\67\2\2\u18bf\u18c0\7\u0400\2\2\u18c0\u18c1\5\u00b4"+ + "[\2\u18c1\u18c2\7\u0401\2\2\u18c2\u18cc\3\2\2\2\u18c3\u18c4\7\u0400\2"+ + "\2\u18c4\u18c5\5\u00b4[\2\u18c5\u18c6\7\u0401\2\2\u18c6\u18cc\3\2\2\2"+ + "\u18c7\u18c8\7O\2\2\u18c8\u18c9\5\u0260\u0131\2\u18c9\u18ca\5<\37\2\u18ca"+ + "\u18cc\3\2\2\2\u18cb\u189e\3\2\2\2\u18cb\u18a0\3\2\2\2\u18cb\u18a1\3\2"+ + "\2\2\u18cb\u18a2\3\2\2\2\u18cb\u18a3\3\2\2\2\u18cb\u18a6\3\2\2\2\u18cb"+ + "\u18a8\3\2\2\2\u18cb\u18b3\3\2\2\2\u18cb\u18be\3\2\2\2\u18cb\u18c3\3\2"+ + "\2\2\u18cb\u18c7\3\2\2\2\u18cc\u18da\3\2\2\2\u18cd\u18ce\f\4\2\2\u18ce"+ + "\u18cf\5\u026e\u0138\2\u18cf\u18d0\5\u0264\u0133\5\u18d0\u18d9\3\2\2\2"+ + "\u18d1\u18d2\f\3\2\2\u18d2\u18d3\5\u0270\u0139\2\u18d3\u18d4\5\u0264\u0133"+ + "\4\u18d4\u18d9\3\2\2\2\u18d5\u18d6\f\r\2\2\u18d6\u18d7\7\32\2\2\u18d7"+ + "\u18d9\5\u0200\u0101\2\u18d8\u18cd\3\2\2\2\u18d8\u18d1\3\2\2\2\u18d8\u18d5"+ + "\3\2\2\2\u18d9\u18dc\3\2\2\2\u18da\u18d8\3\2\2\2\u18da\u18db\3\2\2\2\u18db"+ + "\u0265\3\2\2\2\u18dc\u18da\3\2\2\2\u18dd\u18de\b\u0134\1\2\u18de\u190b"+ + "\5\u021e\u0110\2\u18df\u190b\5\u01f6\u00fc\2\u18e0\u190b\5\u0248\u0125"+ + "\2\u18e1\u190b\5\u01fc\u00ff\2\u18e2\u18e3\5\u0268\u0135\2\u18e3\u18e4"+ + "\5\u0266\u0134\13\u18e4\u190b\3\2\2\2\u18e5\u18e6\7\u00d2\2\2\u18e6\u190b"+ + "\5\u0266\u0134\n\u18e7\u18e8\7\u0400\2\2\u18e8\u18ed\5\u025c\u012f\2\u18e9"+ + "\u18ea\7\u0402\2\2\u18ea\u18ec\5\u025c\u012f\2\u18eb\u18e9\3\2\2\2\u18ec"+ + "\u18ef\3\2\2\2\u18ed\u18eb\3\2\2\2\u18ed\u18ee\3\2\2\2\u18ee\u18f0\3\2"+ + "\2\2\u18ef\u18ed\3\2\2\2\u18f0\u18f1\7\u0401\2\2\u18f1\u190b\3\2\2\2\u18f2"+ + "\u18f3\7\u0203\2\2\u18f3\u18f4\7\u0400\2\2\u18f4\u18f7\5\u025c\u012f\2"+ + "\u18f5\u18f6\7\u0402\2\2\u18f6\u18f8\5\u025c\u012f\2\u18f7\u18f5\3\2\2"+ + "\2\u18f8\u18f9\3\2\2\2\u18f9\u18f7\3\2\2\2\u18f9\u18fa\3\2\2\2\u18fa\u18fb"+ + "\3\2\2\2\u18fb\u18fc\7\u0401\2\2\u18fc\u190b\3\2\2\2\u18fd\u18fe\7\67"+ + "\2\2\u18fe\u18ff\7\u0400\2\2\u18ff\u1900\5\u00b4[\2\u1900\u1901\7\u0401"+ + "\2\2\u1901\u190b\3\2\2\2\u1902\u1903\7\u0400\2\2\u1903\u1904\5\u00b4["+ + "\2\u1904\u1905\7\u0401\2\2\u1905\u190b\3\2\2\2\u1906\u1907\7O\2\2\u1907"+ + "\u1908\5\u025c\u012f\2\u1908\u1909\5<\37\2\u1909\u190b\3\2\2\2\u190a\u18dd"+ + "\3\2\2\2\u190a\u18df\3\2\2\2\u190a\u18e0\3\2\2\2\u190a\u18e1\3\2\2\2\u190a"+ + "\u18e2\3\2\2\2\u190a\u18e5\3\2\2\2\u190a\u18e7\3\2\2\2\u190a\u18f2\3\2"+ + "\2\2\u190a\u18fd\3\2\2\2\u190a\u1902\3\2\2\2\u190a\u1906\3\2\2\2\u190b"+ + "\u1919\3\2\2\2\u190c\u190d\f\4\2\2\u190d\u190e\5\u026e\u0138\2\u190e\u190f"+ + "\5\u0266\u0134\5\u190f\u1918\3\2\2\2\u1910\u1911\f\3\2\2\u1911\u1912\5"+ + "\u0270\u0139\2\u1912\u1913\5\u0266\u0134\4\u1913\u1918\3\2\2\2\u1914\u1915"+ + "\f\r\2\2\u1915\u1916\7\32\2\2\u1916\u1918\5\u0200\u0101\2\u1917\u190c"+ + "\3\2\2\2\u1917\u1910\3\2\2\2\u1917\u1914\3\2\2\2\u1918\u191b\3\2\2\2\u1919"+ + "\u1917\3\2\2\2\u1919\u191a\3\2\2\2\u191a\u0267\3\2\2\2\u191b\u1919\3\2"+ + "\2\2\u191c\u191d\tv\2\2\u191d\u0269\3\2\2\2\u191e\u192d\7\u03f7\2\2\u191f"+ + "\u192d\7\u03f8\2\2\u1920\u192d\7\u03f9\2\2\u1921\u1922\7\u03f9\2\2\u1922"+ + "\u192d\7\u03f7\2\2\u1923\u1924\7\u03f8\2\2\u1924\u192d\7\u03f7\2\2\u1925"+ + "\u1926\7\u03f9\2\2\u1926\u192d\7\u03f8\2\2\u1927\u1928\7\u03fa\2\2\u1928"+ + "\u192d\7\u03f7\2\2\u1929\u192a\7\u03f9\2\2\u192a\u192b\7\u03f7\2\2\u192b"+ + "\u192d\7\u03f8\2\2\u192c\u191e\3\2\2\2\u192c\u191f\3\2\2\2\u192c\u1920"+ + "\3\2\2\2\u192c\u1921\3\2\2\2\u192c\u1923\3\2\2\2\u192c\u1925\3\2\2\2\u192c"+ + "\u1927\3\2\2\2\u192c\u1929\3\2\2\2\u192d\u026b\3\2\2\2\u192e\u1936\7\f"+ + "\2\2\u192f\u1930\7\u03fd\2\2\u1930\u1936\7\u03fd\2\2\u1931\u1936\7\u00b2"+ + "\2\2\u1932\u1936\7p\2\2\u1933\u1934\7\u03fc\2\2\u1934\u1936\7\u03fc\2"+ + "\2\u1935\u192e\3\2\2\2\u1935\u192f\3\2\2\2\u1935\u1931\3\2\2\2\u1935\u1932"+ + "\3\2\2\2\u1935\u1933\3\2\2\2\u1936\u026d\3\2\2\2\u1937\u1938\7\u03f9\2"+ + "\2\u1938\u193f\7\u03f9\2\2\u1939\u193a\7\u03f8\2\2\u193a\u193f\7\u03f8"+ + "\2\2\u193b\u193f\7\u03fd\2\2\u193c\u193f\7\u03fe\2\2\u193d\u193f\7\u03fc"+ + "\2\2\u193e\u1937\3\2\2\2\u193e\u1939\3\2\2\2\u193e\u193b\3\2\2\2\u193e"+ + "\u193c\3\2\2\2\u193e\u193d\3\2\2\2\u193f\u026f\3\2\2\2\u1940\u1941\tw"+ + "\2\2\u1941\u0271\3\2\2\2\u1942\u1943\tx\2\2\u1943\u0273\3\2\2\2\u1944"+ + "\u1945\ty\2\2\u1945\u0275\3\2\2\2\u1946\u1947\tz\2\2\u1947\u0277\3\2\2"+ + "\2\u1948\u1949\t{\2\2\u1949\u0279\3\2\2\2\u194a\u194b\t|\2\2\u194b\u027b"+ + "\3\2\2\2\u194c\u194d\t}\2\2\u194d\u027d\3\2\2\2\u194e\u194f\t~\2\2\u194f"+ + "\u027f\3\2\2\2\u03ad\u0281\u0284\u028a\u028d\u0290\u0292\u0297\u029a\u029d"+ + "\u02a6\u02cd\u02d9\u02e4\u02f5\u02fa\u0306\u0321\u032a\u032f\u0335\u033a"+ + "\u033e\u0347\u034a\u034d\u0351\u0358\u035b\u0360\u0368\u036d\u0372\u0375"+ + "\u0377\u0383\u0386\u038a\u038d\u0391\u0394\u0398\u039b\u039e\u03a2\u03a5"+ + "\u03a9\u03af\u03b5\u03bb\u03c2\u03c9\u03cf\u03d5\u03de\u03e3\u03f3\u03fa"+ + "\u03fe\u0408\u040c\u0410\u0414\u0418\u041d\u0420\u0423\u0426\u0429\u042f"+ + "\u0433\u0439\u043e\u0441\u0444\u0446\u0451\u0455\u0458\u0466\u0469\u046d"+ + "\u0470\u0474\u0477\u047b\u047e\u0482\u0485\u0488\u048c\u048f\u0493\u0499"+ + "\u04a6\u04ad\u04b2\u04b5\u04ba\u04c2\u04c8\u04cc\u04cf\u04d4\u04d7\u04db"+ + "\u04de\u04e2\u04e5\u04ed\u04ef\u04f6\u04fc\u0504\u0507\u050e\u0511\u0513"+ + "\u0519\u051f\u0530\u0537\u053e\u0549\u054c\u0559\u0566\u056b\u057b\u0583"+ + "\u058d\u0593\u059d\u05a0\u05a5\u05b2\u05b9\u05be\u05c2\u05c4\u05c9\u05cc"+ + "\u05d2\u05d7\u05d9\u05dd\u05e0\u05e3\u05e9\u05ee\u05f0\u05f5\u05fc\u05fe"+ + "\u0605\u060a\u060e\u0611\u0619\u0621\u0623\u062b\u062f\u0632\u0638\u063d"+ + "\u0640\u0646\u0649\u064d\u0652\u0657\u065b\u0660\u0663\u0667\u066b\u066f"+ + "\u0673\u0678\u067d\u0682\u0688\u068d\u0692\u0698\u069d\u06a2\u06a7\u06ac"+ + "\u06b1\u06b6\u06bb\u06c0\u06c5\u06ca\u06d0\u06d5\u06db\u06e5\u06ec\u06ee"+ + "\u06f6\u06fb\u06fe\u0706\u070c\u071c\u0728\u072a\u072d\u0735\u073b\u0741"+ + "\u074e\u0755\u075d\u0760\u076b\u0773\u0776\u0782\u0789\u0791\u0794\u07a0"+ + "\u07a7\u07af\u07b2\u07b9\u07c1\u07c4\u07c6\u07cb\u07d3\u07dc\u07e0\u07e4"+ + "\u07e9\u07ef\u07f5\u07fa\u07ff\u0804\u0809\u080c\u0811\u0816\u0820\u0824"+ + "\u082b\u0830\u0833\u0838\u083b\u083f\u0843\u084b\u085e\u0861\u0864\u0868"+ + "\u0872\u087f\u0886\u0889\u0892\u0895\u0898\u08a3\u08a6\u08aa\u08b2\u08b5"+ + "\u08ba\u08c2\u08c8\u08cc\u08d0\u08d5\u08da\u08e1\u08e5\u08f0\u08f8\u08fb"+ + "\u0901\u0907\u0909\u090e\u0911\u0917\u091d\u091f\u0923\u0926\u0929\u092f"+ + "\u0935\u0938\u093e\u0944\u0946\u094b\u0953\u0955\u095e\u0963\u096b\u096f"+ + "\u0977\u0981\u0986\u098d\u0991\u0995\u09ad\u09b1\u09bd\u09c0\u09c9\u09da"+ + "\u09e6\u09ed\u09f4\u0a03\u0a10\u0a16\u0a1c\u0a22\u0a28\u0a2e\u0a34\u0a39"+ + "\u0a40\u0a47\u0a4e\u0a53\u0a56\u0a58\u0a66\u0a6d\u0a74\u0a7a\u0a7e\u0a82"+ + "\u0a89\u0a8c\u0a91\u0a98\u0a9f\u0aa3\u0aac\u0ab5\u0abe\u0ac1\u0ac5\u0ace"+ + "\u0ad2\u0ad5\u0ad8\u0ade\u0ae1\u0ae7\u0af0\u0af3\u0afe\u0b01\u0b06\u0b09"+ + "\u0b0e\u0b18\u0b1d\u0b23\u0b25\u0b2b\u0b2d\u0b33\u0b3b\u0b40\u0b48\u0b4b"+ + "\u0b50\u0b53\u0b58\u0b60\u0b68\u0b6e\u0b76\u0b7b\u0b83\u0b86\u0b8a\u0b8d"+ + "\u0b95\u0b9b\u0ba4\u0ba7\u0bab\u0baf\u0bb5\u0bb9\u0bbd\u0bbf\u0bc2\u0bc5"+ + "\u0bc8\u0bce\u0bd2\u0bd5\u0bd8\u0bdb\u0bde\u0be0\u0be4\u0bea\u0bf0\u0bf5"+ + "\u0bf8\u0bfe\u0c02\u0c0a\u0c0e\u0c11\u0c14\u0c1d\u0c21\u0c24\u0c28\u0c2c"+ + "\u0c2f\u0c32\u0c37\u0c3d\u0c41\u0c4b\u0c51\u0c55\u0c5b\u0c5f\u0c65\u0c68"+ + "\u0c74\u0c78\u0c7c\u0c84\u0c88\u0c90\u0c93\u0c97\u0c9a\u0ca2\u0ca7\u0caa"+ + "\u0cad\u0cb1\u0cb4\u0cbd\u0cc2\u0ccb\u0cd0\u0cd7\u0cde\u0ce6\u0ceb\u0cf3"+ + "\u0cf6\u0cf9\u0d00\u0d03\u0d0a\u0d0d\u0d15\u0d1b\u0d26\u0d29\u0d34\u0d3a"+ + "\u0d3e\u0d49\u0d4e\u0d50\u0d54\u0d5e\u0d68\u0d6e\u0d73\u0d76\u0d79\u0d7c"+ + "\u0d82\u0d87\u0d8a\u0d8d\u0d90\u0d92\u0d98\u0d9d\u0da0\u0da3\u0da7\u0dad"+ + "\u0db1\u0dbb\u0dbf\u0dc5\u0dce\u0dd1\u0dd5\u0dd8\u0ddc\u0de0\u0de3\u0de5"+ + "\u0ded\u0df9\u0dff\u0e01\u0e07\u0e09\u0e0b\u0e11\u0e19\u0e21\u0e27\u0e30"+ + "\u0e35\u0e37\u0e3b\u0e3f\u0e45\u0e4c\u0e50\u0e59\u0e5c\u0e60\u0e64\u0e68"+ + "\u0e6b\u0e6e\u0e71\u0e75\u0e79\u0e7c\u0e7f\u0e82\u0e89\u0e8d\u0e9c\u0ea9"+ + "\u0eb1\u0ebb\u0ebf\u0ec2\u0ec8\u0ecb\u0ece\u0ed7\u0ee0\u0eea\u0eee\u0ef8"+ + "\u0f02\u0f0a\u0f0d\u0f16\u0f19\u0f1d\u0f22\u0f26\u0f2f\u0f32\u0f51\u0f54"+ + "\u0f57\u0f8f\u0f94\u0fb0\u0fbe\u0fc5\u0fc9\u0fcf\u0fd7\u0fd9\u0fe4\u0fee"+ + "\u0ff5\u0ffb\u1003\u1008\u1010\u1018\u1020\u1028\u102e\u1031\u1035\u103a"+ + "\u103f\u1045\u1047\u1052\u1057\u105e\u1060\u106e\u1074\u1079\u107e\u1084"+ + "\u108b\u1093\u109b\u10a0\u10a6\u10a9\u10b1\u10b8\u10c1\u10c4\u10d5\u10dd"+ + "\u10e5\u10e9\u10f0\u10f6\u10fe\u1107\u110d\u1114\u111b\u1120\u1123\u1125"+ + "\u112b\u112d\u1131\u1133\u1136\u113f\u1145\u114c\u1153\u1158\u115b\u115d"+ + "\u1163\u1165\u1169\u116b\u116e\u1173\u117a\u1183\u1188\u1191\u1198\u119d"+ + "\u11a0\u11a2\u11a8\u11aa\u11ad\u11b9\u11bf\u11c8\u11d1\u11d6\u11df\u11e5"+ + "\u11f0\u11f3\u11ff\u1206\u120b\u121a\u1225\u1228\u1232\u123c\u1246\u1250"+ + "\u1254\u1258\u1261\u127d\u128f\u1297\u12a2\u12a9\u12ad\u12b4\u12b9\u12bc"+ + "\u12bf\u12c8\u12cc\u12ea\u12f1\u12f5\u12fc\u12ff\u130f\u1312\u131c\u1320"+ + "\u1326\u1329\u132e\u1332\u1339\u133c\u1342\u135a\u1367\u136a\u1374\u137c"+ + "\u1380\u1387\u138a\u1393\u1399\u139f\u13a9\u13ab\u13b1\u13b4\u13b7\u13c3"+ + "\u13c6\u13cc\u13cf\u13d7\u13df\u13e5\u13e9\u13f7\u1403\u140a\u140d\u1414"+ + "\u141b\u1420\u1425\u1430\u143b\u1441\u1446\u1453\u1455\u145a\u145f\u1461"+ + "\u1468\u146f\u1472\u1475\u147b\u147f\u1485\u148b\u1498\u149d\u14a5\u14a8"+ + "\u14ad\u14b2\u14ba\u14bd\u14c3\u14c7\u14d4\u14da\u14e6\u14e9\u14f2\u14f7"+ + "\u14fd\u1504\u1506\u150a\u1510\u1513\u151d\u1521\u1535\u153c\u153e\u1545"+ + "\u1547\u154b\u1550\u155b\u1560\u1566\u1569\u156d\u1572\u1575\u1579\u157d"+ + "\u157f\u1584\u1589\u1596\u1599\u159d\u15a0\u15a5\u15a8\u15ac\u15b1\u15b4"+ + "\u15b9\u15bc\u15c2\u15c5\u15c9\u15cc\u15cf\u15d3\u15d6\u15d9\u15dd\u15e0"+ + "\u15e3\u15e6\u15ea\u15ed\u15f0\u15f5\u15fa\u15ff\u1602\u1605\u160d\u1614"+ + "\u1618\u161d\u1620\u1625\u1629\u162b\u163b\u1644\u164c\u1655\u165f\u1667"+ + "\u166f\u1677\u167f\u1687\u168c\u1693\u1695\u169a\u169d\u16a2\u16a5\u16a9"+ + "\u16b7\u16be\u16c3\u16e5\u16e9\u16f1\u16f5\u16fe\u1706\u170b\u1713\u1718"+ + "\u171d\u171f\u1728\u172d\u1735\u173a\u1742\u174a\u174d\u1757\u1762\u176f"+ + "\u1777\u177b\u1780\u1789\u178c\u1798\u17a0\u17aa\u17ad\u17b1\u17b5\u17ce"+ + "\u17d9\u17e0\u17e4\u17eb\u17f3\u17f8\u1800\u1806\u1810\u181d\u1823\u1829"+ + "\u1839\u183f\u1841\u1843\u184a\u1853\u1856\u1858\u185e\u1868\u1875\u187b"+ + "\u188b\u1891\u1895\u1899\u189b\u18ae\u18ba\u18cb\u18d8\u18da\u18ed\u18f9"+ + "\u190a\u1917\u1919\u192c\u1935\u193e"; + public static final String _serializedATN = Utils.join( + new String[] { + _serializedATNSegment0, + _serializedATNSegment1, + _serializedATNSegment2 + }, + "" + ); + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParser.tokens b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParser.tokens new file mode 100644 index 00000000000..a3ce055f4fa --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParser.tokens @@ -0,0 +1,2078 @@ +SPACE=1 +SPEC_MYSQL_COMMENT=2 +COMMENT_INPUT=3 +LINE_COMMENT=4 +ADD=5 +ALL=6 +ALTER=7 +ALWAYS=8 +ANALYZE=9 +AND=10 +AS=11 +ASC=12 +BEFORE=13 +BETWEEN=14 +BOTH=15 +BY=16 +CALL=17 +CASCADE=18 +CASE=19 +CAST=20 +CHANGE=21 +CHARACTER=22 +CHECK=23 +COLLATE=24 +COLUMN=25 +CONDITION=26 +CONSTRAINT=27 +CONTINUE=28 +CONVERT=29 +CREATE=30 +CROSS=31 +CURRENT=32 +CURRENT_USER=33 +CURSOR=34 +DATABASE=35 +DATABASES=36 +DECLARE=37 +DEFAULT=38 +DELAYED=39 +DELETE=40 +DESC=41 +DESCRIBE=42 +DETERMINISTIC=43 +DIAGNOSTICS=44 +DISTINCT=45 +DISTINCTROW=46 +DROP=47 +EACH=48 +ELSE=49 +ELSEIF=50 +ENCLOSED=51 +ESCAPED=52 +EXISTS=53 +EXIT=54 +EXPLAIN=55 +FALSE=56 +FETCH=57 +FOR=58 +FORCE=59 +FOREIGN=60 +FROM=61 +FULLTEXT=62 +GENERATED=63 +GET=64 +GRANT=65 +GROUP=66 +HAVING=67 +HIGH_PRIORITY=68 +IF=69 +IGNORE=70 +IN=71 +INDEX=72 +INFILE=73 +INNER=74 +INOUT=75 +INSERT=76 +INTERVAL=77 +INTO=78 +IS=79 +ITERATE=80 +JOIN=81 +KEY=82 +KEYS=83 +KILL=84 +LEADING=85 +LEAVE=86 +LEFT=87 +LIKE=88 +LIMIT=89 +LINEAR=90 +LINES=91 +LOAD=92 +LOCK=93 +LOOP=94 +LOW_PRIORITY=95 +MASTER_BIND=96 +MASTER_SSL_VERIFY_SERVER_CERT=97 +MATCH=98 +MAXVALUE=99 +MODIFIES=100 +NATURAL=101 +NOT=102 +NO_WRITE_TO_BINLOG=103 +NULL_LITERAL=104 +NUMBER=105 +ON=106 +OPTIMIZE=107 +OPTION=108 +OPTIONALLY=109 +OR=110 +ORDER=111 +OUT=112 +OUTER=113 +OUTFILE=114 +PARTITION=115 +PRIMARY=116 +PROCEDURE=117 +PURGE=118 +RANGE=119 +READ=120 +READS=121 +REFERENCES=122 +REGEXP=123 +RELEASE=124 +RENAME=125 +REPEAT=126 +REPLACE=127 +REQUIRE=128 +RESIGNAL=129 +RESTRICT=130 +RETURN=131 +REVOKE=132 +RIGHT=133 +RLIKE=134 +SCHEMA=135 +SCHEMAS=136 +SELECT=137 +SET=138 +SEPARATOR=139 +SHOW=140 +SIGNAL=141 +SPATIAL=142 +SQL=143 +SQLEXCEPTION=144 +SQLSTATE=145 +SQLWARNING=146 +SQL_BIG_RESULT=147 +SQL_CALC_FOUND_ROWS=148 +SQL_SMALL_RESULT=149 +SSL=150 +STACKED=151 +STARTING=152 +STRAIGHT_JOIN=153 +TABLE=154 +TERMINATED=155 +THEN=156 +TO=157 +TRAILING=158 +TRIGGER=159 +TRUE=160 +UNDO=161 +UNION=162 +UNIQUE=163 +UNLOCK=164 +UNSIGNED=165 +UPDATE=166 +USAGE=167 +USE=168 +USING=169 +VALUES=170 +WHEN=171 +WHERE=172 +WHILE=173 +WITH=174 +WRITE=175 +XOR=176 +ZEROFILL=177 +TINYINT=178 +SMALLINT=179 +MEDIUMINT=180 +MIDDLEINT=181 +INT=182 +INT1=183 +INT2=184 +INT3=185 +INT4=186 +INT8=187 +INTEGER=188 +BIGINT=189 +REAL=190 +DOUBLE=191 +PRECISION=192 +FLOAT=193 +FLOAT4=194 +FLOAT8=195 +DECIMAL=196 +DEC=197 +NUMERIC=198 +DATE=199 +TIME=200 +TIMESTAMP=201 +DATETIME=202 +YEAR=203 +CHAR=204 +VARCHAR=205 +NVARCHAR=206 +NATIONAL=207 +BINARY=208 +VARBINARY=209 +TINYBLOB=210 +BLOB=211 +MEDIUMBLOB=212 +LONG=213 +LONGBLOB=214 +TINYTEXT=215 +TEXT=216 +MEDIUMTEXT=217 +LONGTEXT=218 +ENUM=219 +VARYING=220 +SERIAL=221 +YEAR_MONTH=222 +DAY_HOUR=223 +DAY_MINUTE=224 +DAY_SECOND=225 +HOUR_MINUTE=226 +HOUR_SECOND=227 +MINUTE_SECOND=228 +SECOND_MICROSECOND=229 +MINUTE_MICROSECOND=230 +HOUR_MICROSECOND=231 +DAY_MICROSECOND=232 +JSON_VALID=233 +JSON_SCHEMA_VALID=234 +AVG=235 +BIT_AND=236 +BIT_OR=237 +BIT_XOR=238 +COUNT=239 +GROUP_CONCAT=240 +MAX=241 +MIN=242 +STD=243 +STDDEV=244 +STDDEV_POP=245 +STDDEV_SAMP=246 +SUM=247 +VAR_POP=248 +VAR_SAMP=249 +VARIANCE=250 +CURRENT_DATE=251 +CURRENT_TIME=252 +CURRENT_TIMESTAMP=253 +LOCALTIME=254 +CURDATE=255 +CURTIME=256 +DATE_ADD=257 +DATE_SUB=258 +EXTRACT=259 +LOCALTIMESTAMP=260 +NOW=261 +POSITION=262 +SUBSTR=263 +SUBSTRING=264 +SYSDATE=265 +TRIM=266 +UTC_DATE=267 +UTC_TIME=268 +UTC_TIMESTAMP=269 +ACCOUNT=270 +ACTION=271 +AFTER=272 +AGGREGATE=273 +ALGORITHM=274 +ANY=275 +AT=276 +AUTHORS=277 +AUTOCOMMIT=278 +AUTOEXTEND_SIZE=279 +AUTO_INCREMENT=280 +AVG_ROW_LENGTH=281 +BEGIN=282 +BINLOG=283 +BIT=284 +BLOCK=285 +BOOL=286 +BOOLEAN=287 +BTREE=288 +CACHE=289 +CASCADED=290 +CHAIN=291 +CHANGED=292 +CHANNEL=293 +CHECKSUM=294 +PAGE_CHECKSUM=295 +CIPHER=296 +CLASS_ORIGIN=297 +CLIENT=298 +CLOSE=299 +COALESCE=300 +CODE=301 +COLUMNS=302 +COLUMN_FORMAT=303 +COLUMN_NAME=304 +COMMENT=305 +COMMIT=306 +COMPACT=307 +COMPLETION=308 +COMPRESSED=309 +COMPRESSION=310 +CONCURRENT=311 +CONNECTION=312 +CONSISTENT=313 +CONSTRAINT_CATALOG=314 +CONSTRAINT_SCHEMA=315 +CONSTRAINT_NAME=316 +CONTAINS=317 +CONTEXT=318 +CONTRIBUTORS=319 +COPY=320 +CPU=321 +CURSOR_NAME=322 +DATA=323 +DATAFILE=324 +DEALLOCATE=325 +DEFAULT_AUTH=326 +DEFINER=327 +DELAY_KEY_WRITE=328 +DES_KEY_FILE=329 +DIRECTORY=330 +DISABLE=331 +DISCARD=332 +DISK=333 +DO=334 +DUMPFILE=335 +DUPLICATE=336 +DYNAMIC=337 +ENABLE=338 +ENCRYPTION=339 +END=340 +ENDS=341 +ENGINE=342 +ENGINES=343 +ERROR=344 +ERRORS=345 +ESCAPE=346 +EVEN=347 +EVENT=348 +EVENTS=349 +EVERY=350 +EXCHANGE=351 +EXCLUSIVE=352 +EXPIRE=353 +EXPORT=354 +EXTENDED=355 +EXTENT_SIZE=356 +FAST=357 +FAULTS=358 +FIELDS=359 +FILE_BLOCK_SIZE=360 +FILTER=361 +FIRST=362 +FIXED=363 +FLUSH=364 +FOLLOWS=365 +FOUND=366 +FULL=367 +FUNCTION=368 +GENERAL=369 +GLOBAL=370 +GRANTS=371 +GROUP_REPLICATION=372 +HANDLER=373 +HASH=374 +HELP=375 +HOST=376 +HOSTS=377 +IDENTIFIED=378 +IGNORE_SERVER_IDS=379 +IMPORT=380 +INDEXES=381 +INITIAL_SIZE=382 +INPLACE=383 +INSERT_METHOD=384 +INSTALL=385 +INSTANCE=386 +INVISIBLE=387 +INVOKER=388 +IO=389 +IO_THREAD=390 +IPC=391 +ISOLATION=392 +ISSUER=393 +JSON=394 +KEY_BLOCK_SIZE=395 +LANGUAGE=396 +LAST=397 +LEAVES=398 +LESS=399 +LEVEL=400 +LIST=401 +LOCAL=402 +LOGFILE=403 +LOGS=404 +MASTER=405 +MASTER_AUTO_POSITION=406 +MASTER_CONNECT_RETRY=407 +MASTER_DELAY=408 +MASTER_HEARTBEAT_PERIOD=409 +MASTER_HOST=410 +MASTER_LOG_FILE=411 +MASTER_LOG_POS=412 +MASTER_PASSWORD=413 +MASTER_PORT=414 +MASTER_RETRY_COUNT=415 +MASTER_SSL=416 +MASTER_SSL_CA=417 +MASTER_SSL_CAPATH=418 +MASTER_SSL_CERT=419 +MASTER_SSL_CIPHER=420 +MASTER_SSL_CRL=421 +MASTER_SSL_CRLPATH=422 +MASTER_SSL_KEY=423 +MASTER_TLS_VERSION=424 +MASTER_USER=425 +MAX_CONNECTIONS_PER_HOUR=426 +MAX_QUERIES_PER_HOUR=427 +MAX_ROWS=428 +MAX_SIZE=429 +MAX_UPDATES_PER_HOUR=430 +MAX_USER_CONNECTIONS=431 +MEDIUM=432 +MEMBER=433 +MERGE=434 +MESSAGE_TEXT=435 +MID=436 +MIGRATE=437 +MIN_ROWS=438 +MODE=439 +MODIFY=440 +MUTEX=441 +MYSQL=442 +MYSQL_ERRNO=443 +NAME=444 +NAMES=445 +NCHAR=446 +NEVER=447 +NEXT=448 +NO=449 +NODEGROUP=450 +NONE=451 +OFFLINE=452 +OFFSET=453 +OF=454 +OJ=455 +OLD_PASSWORD=456 +ONE=457 +ONLINE=458 +ONLY=459 +OPEN=460 +OPTIMIZER_COSTS=461 +OPTIONS=462 +OWNER=463 +PACK_KEYS=464 +PAGE=465 +PARSER=466 +PARTIAL=467 +PARTITIONING=468 +PARTITIONS=469 +PASSWORD=470 +PHASE=471 +PLUGIN=472 +PLUGIN_DIR=473 +PLUGINS=474 +PORT=475 +PRECEDES=476 +PREPARE=477 +PRESERVE=478 +PREV=479 +PROCESSLIST=480 +PROFILE=481 +PROFILES=482 +PROXY=483 +QUERY=484 +QUICK=485 +REBUILD=486 +RECOVER=487 +REDO_BUFFER_SIZE=488 +REDUNDANT=489 +RELAY=490 +RELAY_LOG_FILE=491 +RELAY_LOG_POS=492 +RELAYLOG=493 +REMOVE=494 +REORGANIZE=495 +REPAIR=496 +REPLICATE_DO_DB=497 +REPLICATE_DO_TABLE=498 +REPLICATE_IGNORE_DB=499 +REPLICATE_IGNORE_TABLE=500 +REPLICATE_REWRITE_DB=501 +REPLICATE_WILD_DO_TABLE=502 +REPLICATE_WILD_IGNORE_TABLE=503 +REPLICATION=504 +RESET=505 +RESUME=506 +RETURNED_SQLSTATE=507 +RETURNS=508 +ROLE=509 +ROLLBACK=510 +ROLLUP=511 +ROTATE=512 +ROW=513 +ROWS=514 +ROW_FORMAT=515 +SAVEPOINT=516 +SCHEDULE=517 +SECURITY=518 +SERVER=519 +SESSION=520 +SHARE=521 +SHARED=522 +SIGNED=523 +SIMPLE=524 +SLAVE=525 +SLOW=526 +SNAPSHOT=527 +SOCKET=528 +SOME=529 +SONAME=530 +SOUNDS=531 +SOURCE=532 +SQL_AFTER_GTIDS=533 +SQL_AFTER_MTS_GAPS=534 +SQL_BEFORE_GTIDS=535 +SQL_BUFFER_RESULT=536 +SQL_CACHE=537 +SQL_NO_CACHE=538 +SQL_THREAD=539 +START=540 +STARTS=541 +STATS_AUTO_RECALC=542 +STATS_PERSISTENT=543 +STATS_SAMPLE_PAGES=544 +STATUS=545 +STOP=546 +STORAGE=547 +STORED=548 +STRING=549 +SUBCLASS_ORIGIN=550 +SUBJECT=551 +SUBPARTITION=552 +SUBPARTITIONS=553 +SUSPEND=554 +SWAPS=555 +SWITCHES=556 +TABLE_NAME=557 +TABLESPACE=558 +TEMPORARY=559 +TEMPTABLE=560 +THAN=561 +TRADITIONAL=562 +TRANSACTION=563 +TRANSACTIONAL=564 +TRIGGERS=565 +TRUNCATE=566 +UNDEFINED=567 +UNDOFILE=568 +UNDO_BUFFER_SIZE=569 +UNINSTALL=570 +UNKNOWN=571 +UNTIL=572 +UPGRADE=573 +USER=574 +USE_FRM=575 +USER_RESOURCES=576 +VALIDATION=577 +VALUE=578 +VARIABLES=579 +VIEW=580 +VIRTUAL=581 +VISIBLE=582 +WAIT=583 +WARNINGS=584 +WITHOUT=585 +WORK=586 +WRAPPER=587 +X509=588 +XA=589 +XML=590 +EUR=591 +USA=592 +JIS=593 +ISO=594 +INTERNAL=595 +QUARTER=596 +MONTH=597 +DAY=598 +HOUR=599 +MINUTE=600 +WEEK=601 +SECOND=602 +MICROSECOND=603 +TABLES=604 +ROUTINE=605 +EXECUTE=606 +FILE=607 +PROCESS=608 +RELOAD=609 +SHUTDOWN=610 +SUPER=611 +PRIVILEGES=612 +APPLICATION_PASSWORD_ADMIN=613 +AUDIT_ADMIN=614 +BACKUP_ADMIN=615 +BINLOG_ADMIN=616 +BINLOG_ENCRYPTION_ADMIN=617 +CLONE_ADMIN=618 +CONNECTION_ADMIN=619 +ENCRYPTION_KEY_ADMIN=620 +FIREWALL_ADMIN=621 +FIREWALL_USER=622 +GROUP_REPLICATION_ADMIN=623 +INNODB_REDO_LOG_ARCHIVE=624 +NDB_STORED_USER=625 +PERSIST_RO_VARIABLES_ADMIN=626 +REPLICATION_APPLIER=627 +REPLICATION_SLAVE_ADMIN=628 +RESOURCE_GROUP_ADMIN=629 +RESOURCE_GROUP_USER=630 +ROLE_ADMIN=631 +SESSION_VARIABLES_ADMIN=632 +SET_USER_ID=633 +SHOW_ROUTINE=634 +SYSTEM_VARIABLES_ADMIN=635 +TABLE_ENCRYPTION_ADMIN=636 +VERSION_TOKEN_ADMIN=637 +XA_RECOVER_ADMIN=638 +ARMSCII8=639 +ASCII=640 +BIG5=641 +CP1250=642 +CP1251=643 +CP1256=644 +CP1257=645 +CP850=646 +CP852=647 +CP866=648 +CP932=649 +DEC8=650 +EUCJPMS=651 +EUCKR=652 +GB2312=653 +GBK=654 +GEOSTD8=655 +GREEK=656 +HEBREW=657 +HP8=658 +KEYBCS2=659 +KOI8R=660 +KOI8U=661 +LATIN1=662 +LATIN2=663 +LATIN5=664 +LATIN7=665 +MACCE=666 +MACROMAN=667 +SJIS=668 +SWE7=669 +TIS620=670 +UCS2=671 +UJIS=672 +UTF16=673 +UTF16LE=674 +UTF32=675 +UTF8=676 +UTF8MB3=677 +UTF8MB4=678 +ARCHIVE=679 +BLACKHOLE=680 +CSV=681 +FEDERATED=682 +INNODB=683 +MEMORY=684 +MRG_MYISAM=685 +MYISAM=686 +NDB=687 +NDBCLUSTER=688 +PERFORMANCE_SCHEMA=689 +TOKUDB=690 +REPEATABLE=691 +COMMITTED=692 +UNCOMMITTED=693 +SERIALIZABLE=694 +GEOMETRYCOLLECTION=695 +GEOMCOLLECTION=696 +GEOMETRY=697 +LINESTRING=698 +MULTILINESTRING=699 +MULTIPOINT=700 +MULTIPOLYGON=701 +POINT=702 +POLYGON=703 +ABS=704 +ACOS=705 +ADDDATE=706 +ADDTIME=707 +AES_DECRYPT=708 +AES_ENCRYPT=709 +AREA=710 +ASBINARY=711 +ASIN=712 +ASTEXT=713 +ASWKB=714 +ASWKT=715 +ASYMMETRIC_DECRYPT=716 +ASYMMETRIC_DERIVE=717 +ASYMMETRIC_ENCRYPT=718 +ASYMMETRIC_SIGN=719 +ASYMMETRIC_VERIFY=720 +ATAN=721 +ATAN2=722 +BENCHMARK=723 +BIN=724 +BIT_COUNT=725 +BIT_LENGTH=726 +BUFFER=727 +CATALOG_NAME=728 +CEIL=729 +CEILING=730 +CENTROID=731 +CHARACTER_LENGTH=732 +CHARSET=733 +CHAR_LENGTH=734 +COERCIBILITY=735 +COLLATION=736 +COMPRESS=737 +CONCAT=738 +CONCAT_WS=739 +CONNECTION_ID=740 +CONV=741 +CONVERT_TZ=742 +COS=743 +COT=744 +CRC32=745 +CREATE_ASYMMETRIC_PRIV_KEY=746 +CREATE_ASYMMETRIC_PUB_KEY=747 +CREATE_DH_PARAMETERS=748 +CREATE_DIGEST=749 +CROSSES=750 +DATEDIFF=751 +DATE_FORMAT=752 +DAYNAME=753 +DAYOFMONTH=754 +DAYOFWEEK=755 +DAYOFYEAR=756 +DECODE=757 +DEGREES=758 +DES_DECRYPT=759 +DES_ENCRYPT=760 +DIMENSION=761 +DISJOINT=762 +ELT=763 +ENCODE=764 +ENCRYPT=765 +ENDPOINT=766 +ENVELOPE=767 +EQUALS=768 +EXP=769 +EXPORT_SET=770 +EXTERIORRING=771 +EXTRACTVALUE=772 +FIELD=773 +FIND_IN_SET=774 +FLOOR=775 +FORMAT=776 +FOUND_ROWS=777 +FROM_BASE64=778 +FROM_DAYS=779 +FROM_UNIXTIME=780 +GEOMCOLLFROMTEXT=781 +GEOMCOLLFROMWKB=782 +GEOMETRYCOLLECTIONFROMTEXT=783 +GEOMETRYCOLLECTIONFROMWKB=784 +GEOMETRYFROMTEXT=785 +GEOMETRYFROMWKB=786 +GEOMETRYN=787 +GEOMETRYTYPE=788 +GEOMFROMTEXT=789 +GEOMFROMWKB=790 +GET_FORMAT=791 +GET_LOCK=792 +GLENGTH=793 +GREATEST=794 +GTID_SUBSET=795 +GTID_SUBTRACT=796 +HEX=797 +IFNULL=798 +INET6_ATON=799 +INET6_NTOA=800 +INET_ATON=801 +INET_NTOA=802 +INSTR=803 +INTERIORRINGN=804 +INTERSECTS=805 +ISCLOSED=806 +ISEMPTY=807 +ISNULL=808 +ISSIMPLE=809 +IS_FREE_LOCK=810 +IS_IPV4=811 +IS_IPV4_COMPAT=812 +IS_IPV4_MAPPED=813 +IS_IPV6=814 +IS_USED_LOCK=815 +LAST_INSERT_ID=816 +LCASE=817 +LEAST=818 +LENGTH=819 +LINEFROMTEXT=820 +LINEFROMWKB=821 +LINESTRINGFROMTEXT=822 +LINESTRINGFROMWKB=823 +LN=824 +LOAD_FILE=825 +LOCATE=826 +LOG=827 +LOG10=828 +LOG2=829 +LOWER=830 +LPAD=831 +LTRIM=832 +MAKEDATE=833 +MAKETIME=834 +MAKE_SET=835 +MASTER_POS_WAIT=836 +MBRCONTAINS=837 +MBRDISJOINT=838 +MBREQUAL=839 +MBRINTERSECTS=840 +MBROVERLAPS=841 +MBRTOUCHES=842 +MBRWITHIN=843 +MD5=844 +MLINEFROMTEXT=845 +MLINEFROMWKB=846 +MONTHNAME=847 +MPOINTFROMTEXT=848 +MPOINTFROMWKB=849 +MPOLYFROMTEXT=850 +MPOLYFROMWKB=851 +MULTILINESTRINGFROMTEXT=852 +MULTILINESTRINGFROMWKB=853 +MULTIPOINTFROMTEXT=854 +MULTIPOINTFROMWKB=855 +MULTIPOLYGONFROMTEXT=856 +MULTIPOLYGONFROMWKB=857 +NAME_CONST=858 +NULLIF=859 +NUMGEOMETRIES=860 +NUMINTERIORRINGS=861 +NUMPOINTS=862 +OCT=863 +OCTET_LENGTH=864 +ORD=865 +OVERLAPS=866 +PERIOD_ADD=867 +PERIOD_DIFF=868 +PI=869 +POINTFROMTEXT=870 +POINTFROMWKB=871 +POINTN=872 +POLYFROMTEXT=873 +POLYFROMWKB=874 +POLYGONFROMTEXT=875 +POLYGONFROMWKB=876 +POW=877 +POWER=878 +QUOTE=879 +RADIANS=880 +RAND=881 +RANDOM_BYTES=882 +RELEASE_LOCK=883 +REVERSE=884 +ROUND=885 +ROW_COUNT=886 +RPAD=887 +RTRIM=888 +SEC_TO_TIME=889 +SESSION_USER=890 +SHA=891 +SHA1=892 +SHA2=893 +SCHEMA_NAME=894 +SIGN=895 +SIN=896 +SLEEP=897 +SOUNDEX=898 +SQL_THREAD_WAIT_AFTER_GTIDS=899 +SQRT=900 +SRID=901 +STARTPOINT=902 +STRCMP=903 +STR_TO_DATE=904 +ST_AREA=905 +ST_ASBINARY=906 +ST_ASTEXT=907 +ST_ASWKB=908 +ST_ASWKT=909 +ST_BUFFER=910 +ST_CENTROID=911 +ST_CONTAINS=912 +ST_CROSSES=913 +ST_DIFFERENCE=914 +ST_DIMENSION=915 +ST_DISJOINT=916 +ST_DISTANCE=917 +ST_ENDPOINT=918 +ST_ENVELOPE=919 +ST_EQUALS=920 +ST_EXTERIORRING=921 +ST_GEOMCOLLFROMTEXT=922 +ST_GEOMCOLLFROMTXT=923 +ST_GEOMCOLLFROMWKB=924 +ST_GEOMETRYCOLLECTIONFROMTEXT=925 +ST_GEOMETRYCOLLECTIONFROMWKB=926 +ST_GEOMETRYFROMTEXT=927 +ST_GEOMETRYFROMWKB=928 +ST_GEOMETRYN=929 +ST_GEOMETRYTYPE=930 +ST_GEOMFROMTEXT=931 +ST_GEOMFROMWKB=932 +ST_INTERIORRINGN=933 +ST_INTERSECTION=934 +ST_INTERSECTS=935 +ST_ISCLOSED=936 +ST_ISEMPTY=937 +ST_ISSIMPLE=938 +ST_LINEFROMTEXT=939 +ST_LINEFROMWKB=940 +ST_LINESTRINGFROMTEXT=941 +ST_LINESTRINGFROMWKB=942 +ST_NUMGEOMETRIES=943 +ST_NUMINTERIORRING=944 +ST_NUMINTERIORRINGS=945 +ST_NUMPOINTS=946 +ST_OVERLAPS=947 +ST_POINTFROMTEXT=948 +ST_POINTFROMWKB=949 +ST_POINTN=950 +ST_POLYFROMTEXT=951 +ST_POLYFROMWKB=952 +ST_POLYGONFROMTEXT=953 +ST_POLYGONFROMWKB=954 +ST_SRID=955 +ST_STARTPOINT=956 +ST_SYMDIFFERENCE=957 +ST_TOUCHES=958 +ST_UNION=959 +ST_WITHIN=960 +ST_X=961 +ST_Y=962 +SUBDATE=963 +SUBSTRING_INDEX=964 +SUBTIME=965 +SYSTEM_USER=966 +TAN=967 +TIMEDIFF=968 +TIMESTAMPADD=969 +TIMESTAMPDIFF=970 +TIME_FORMAT=971 +TIME_TO_SEC=972 +TOUCHES=973 +TO_BASE64=974 +TO_DAYS=975 +TO_SECONDS=976 +UCASE=977 +UNCOMPRESS=978 +UNCOMPRESSED_LENGTH=979 +UNHEX=980 +UNIX_TIMESTAMP=981 +UPDATEXML=982 +UPPER=983 +UUID=984 +UUID_SHORT=985 +VALIDATE_PASSWORD_STRENGTH=986 +VERSION=987 +WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS=988 +WEEKDAY=989 +WEEKOFYEAR=990 +WEIGHT_STRING=991 +WITHIN=992 +YEARWEEK=993 +Y_FUNCTION=994 +X_FUNCTION=995 +VAR_ASSIGN=996 +PLUS_ASSIGN=997 +MINUS_ASSIGN=998 +MULT_ASSIGN=999 +DIV_ASSIGN=1000 +MOD_ASSIGN=1001 +AND_ASSIGN=1002 +XOR_ASSIGN=1003 +OR_ASSIGN=1004 +STAR=1005 +DIVIDE=1006 +MODULE=1007 +PLUS=1008 +MINUSMINUS=1009 +MINUS=1010 +DIV=1011 +MOD=1012 +EQUAL_SYMBOL=1013 +GREATER_SYMBOL=1014 +LESS_SYMBOL=1015 +EXCLAMATION_SYMBOL=1016 +BIT_NOT_OP=1017 +BIT_OR_OP=1018 +BIT_AND_OP=1019 +BIT_XOR_OP=1020 +DOT=1021 +LR_BRACKET=1022 +RR_BRACKET=1023 +COMMA=1024 +SEMI=1025 +AT_SIGN=1026 +ZERO_DECIMAL=1027 +ONE_DECIMAL=1028 +TWO_DECIMAL=1029 +SINGLE_QUOTE_SYMB=1030 +DOUBLE_QUOTE_SYMB=1031 +REVERSE_QUOTE_SYMB=1032 +COLON_SYMB=1033 +CHARSET_REVERSE_QOUTE_STRING=1034 +FILESIZE_LITERAL=1035 +START_NATIONAL_STRING_LITERAL=1036 +STRING_LITERAL=1037 +DECIMAL_LITERAL=1038 +HEXADECIMAL_LITERAL=1039 +REAL_LITERAL=1040 +NULL_SPEC_LITERAL=1041 +BIT_STRING=1042 +STRING_CHARSET_NAME=1043 +DOT_ID=1044 +ID=1045 +REVERSE_QUOTE_ID=1046 +STRING_USER_NAME=1047 +LOCAL_ID=1048 +GLOBAL_ID=1049 +ERROR_RECONGNIGION=1050 +'ADD'=5 +'ALL'=6 +'ALTER'=7 +'ALWAYS'=8 +'ANALYZE'=9 +'AND'=10 +'AS'=11 +'ASC'=12 +'BEFORE'=13 +'BETWEEN'=14 +'BOTH'=15 +'BY'=16 +'CALL'=17 +'CASCADE'=18 +'CASE'=19 +'CAST'=20 +'CHANGE'=21 +'CHARACTER'=22 +'CHECK'=23 +'COLLATE'=24 +'COLUMN'=25 +'CONDITION'=26 +'CONSTRAINT'=27 +'CONTINUE'=28 +'CONVERT'=29 +'CREATE'=30 +'CROSS'=31 +'CURRENT'=32 +'CURRENT_USER'=33 +'CURSOR'=34 +'DATABASE'=35 +'DATABASES'=36 +'DECLARE'=37 +'DEFAULT'=38 +'DELAYED'=39 +'DELETE'=40 +'DESC'=41 +'DESCRIBE'=42 +'DETERMINISTIC'=43 +'DIAGNOSTICS'=44 +'DISTINCT'=45 +'DISTINCTROW'=46 +'DROP'=47 +'EACH'=48 +'ELSE'=49 +'ELSEIF'=50 +'ENCLOSED'=51 +'ESCAPED'=52 +'EXISTS'=53 +'EXIT'=54 +'EXPLAIN'=55 +'FALSE'=56 +'FETCH'=57 +'FOR'=58 +'FORCE'=59 +'FOREIGN'=60 +'FROM'=61 +'FULLTEXT'=62 +'GENERATED'=63 +'GET'=64 +'GRANT'=65 +'GROUP'=66 +'HAVING'=67 +'HIGH_PRIORITY'=68 +'IF'=69 +'IGNORE'=70 +'IN'=71 +'INDEX'=72 +'INFILE'=73 +'INNER'=74 +'INOUT'=75 +'INSERT'=76 +'INTERVAL'=77 +'INTO'=78 +'IS'=79 +'ITERATE'=80 +'JOIN'=81 +'KEY'=82 +'KEYS'=83 +'KILL'=84 +'LEADING'=85 +'LEAVE'=86 +'LEFT'=87 +'LIKE'=88 +'LIMIT'=89 +'LINEAR'=90 +'LINES'=91 +'LOAD'=92 +'LOCK'=93 +'LOOP'=94 +'LOW_PRIORITY'=95 +'MASTER_BIND'=96 +'MASTER_SSL_VERIFY_SERVER_CERT'=97 +'MATCH'=98 +'MAXVALUE'=99 +'MODIFIES'=100 +'NATURAL'=101 +'NOT'=102 +'NO_WRITE_TO_BINLOG'=103 +'NULL'=104 +'NUMBER'=105 +'ON'=106 +'OPTIMIZE'=107 +'OPTION'=108 +'OPTIONALLY'=109 +'OR'=110 +'ORDER'=111 +'OUT'=112 +'OUTER'=113 +'OUTFILE'=114 +'PARTITION'=115 +'PRIMARY'=116 +'PROCEDURE'=117 +'PURGE'=118 +'RANGE'=119 +'READ'=120 +'READS'=121 +'REFERENCES'=122 +'REGEXP'=123 +'RELEASE'=124 +'RENAME'=125 +'REPEAT'=126 +'REPLACE'=127 +'REQUIRE'=128 +'RESIGNAL'=129 +'RESTRICT'=130 +'RETURN'=131 +'REVOKE'=132 +'RIGHT'=133 +'RLIKE'=134 +'SCHEMA'=135 +'SCHEMAS'=136 +'SELECT'=137 +'SET'=138 +'SEPARATOR'=139 +'SHOW'=140 +'SIGNAL'=141 +'SPATIAL'=142 +'SQL'=143 +'SQLEXCEPTION'=144 +'SQLSTATE'=145 +'SQLWARNING'=146 +'SQL_BIG_RESULT'=147 +'SQL_CALC_FOUND_ROWS'=148 +'SQL_SMALL_RESULT'=149 +'SSL'=150 +'STACKED'=151 +'STARTING'=152 +'STRAIGHT_JOIN'=153 +'TABLE'=154 +'TERMINATED'=155 +'THEN'=156 +'TO'=157 +'TRAILING'=158 +'TRIGGER'=159 +'TRUE'=160 +'UNDO'=161 +'UNION'=162 +'UNIQUE'=163 +'UNLOCK'=164 +'UNSIGNED'=165 +'UPDATE'=166 +'USAGE'=167 +'USE'=168 +'USING'=169 +'VALUES'=170 +'WHEN'=171 +'WHERE'=172 +'WHILE'=173 +'WITH'=174 +'WRITE'=175 +'XOR'=176 +'ZEROFILL'=177 +'TINYINT'=178 +'SMALLINT'=179 +'MEDIUMINT'=180 +'MIDDLEINT'=181 +'INT'=182 +'INT1'=183 +'INT2'=184 +'INT3'=185 +'INT4'=186 +'INT8'=187 +'INTEGER'=188 +'BIGINT'=189 +'REAL'=190 +'DOUBLE'=191 +'PRECISION'=192 +'FLOAT'=193 +'FLOAT4'=194 +'FLOAT8'=195 +'DECIMAL'=196 +'DEC'=197 +'NUMERIC'=198 +'DATE'=199 +'TIME'=200 +'TIMESTAMP'=201 +'DATETIME'=202 +'YEAR'=203 +'CHAR'=204 +'VARCHAR'=205 +'NVARCHAR'=206 +'NATIONAL'=207 +'BINARY'=208 +'VARBINARY'=209 +'TINYBLOB'=210 +'BLOB'=211 +'MEDIUMBLOB'=212 +'LONG'=213 +'LONGBLOB'=214 +'TINYTEXT'=215 +'TEXT'=216 +'MEDIUMTEXT'=217 +'LONGTEXT'=218 +'ENUM'=219 +'VARYING'=220 +'SERIAL'=221 +'YEAR_MONTH'=222 +'DAY_HOUR'=223 +'DAY_MINUTE'=224 +'DAY_SECOND'=225 +'HOUR_MINUTE'=226 +'HOUR_SECOND'=227 +'MINUTE_SECOND'=228 +'SECOND_MICROSECOND'=229 +'MINUTE_MICROSECOND'=230 +'HOUR_MICROSECOND'=231 +'DAY_MICROSECOND'=232 +'JSON_VALID'=233 +'JSON_SCHEMA_VALID'=234 +'AVG'=235 +'BIT_AND'=236 +'BIT_OR'=237 +'BIT_XOR'=238 +'COUNT'=239 +'GROUP_CONCAT'=240 +'MAX'=241 +'MIN'=242 +'STD'=243 +'STDDEV'=244 +'STDDEV_POP'=245 +'STDDEV_SAMP'=246 +'SUM'=247 +'VAR_POP'=248 +'VAR_SAMP'=249 +'VARIANCE'=250 +'CURRENT_DATE'=251 +'CURRENT_TIME'=252 +'CURRENT_TIMESTAMP'=253 +'LOCALTIME'=254 +'CURDATE'=255 +'CURTIME'=256 +'DATE_ADD'=257 +'DATE_SUB'=258 +'EXTRACT'=259 +'LOCALTIMESTAMP'=260 +'NOW'=261 +'POSITION'=262 +'SUBSTR'=263 +'SUBSTRING'=264 +'SYSDATE'=265 +'TRIM'=266 +'UTC_DATE'=267 +'UTC_TIME'=268 +'UTC_TIMESTAMP'=269 +'ACCOUNT'=270 +'ACTION'=271 +'AFTER'=272 +'AGGREGATE'=273 +'ALGORITHM'=274 +'ANY'=275 +'AT'=276 +'AUTHORS'=277 +'AUTOCOMMIT'=278 +'AUTOEXTEND_SIZE'=279 +'AUTO_INCREMENT'=280 +'AVG_ROW_LENGTH'=281 +'BEGIN'=282 +'BINLOG'=283 +'BIT'=284 +'BLOCK'=285 +'BOOL'=286 +'BOOLEAN'=287 +'BTREE'=288 +'CACHE'=289 +'CASCADED'=290 +'CHAIN'=291 +'CHANGED'=292 +'CHANNEL'=293 +'CHECKSUM'=294 +'PAGE_CHECKSUM'=295 +'CIPHER'=296 +'CLASS_ORIGIN'=297 +'CLIENT'=298 +'CLOSE'=299 +'COALESCE'=300 +'CODE'=301 +'COLUMNS'=302 +'COLUMN_FORMAT'=303 +'COLUMN_NAME'=304 +'COMMENT'=305 +'COMMIT'=306 +'COMPACT'=307 +'COMPLETION'=308 +'COMPRESSED'=309 +'COMPRESSION'=310 +'CONCURRENT'=311 +'CONNECTION'=312 +'CONSISTENT'=313 +'CONSTRAINT_CATALOG'=314 +'CONSTRAINT_SCHEMA'=315 +'CONSTRAINT_NAME'=316 +'CONTAINS'=317 +'CONTEXT'=318 +'CONTRIBUTORS'=319 +'COPY'=320 +'CPU'=321 +'CURSOR_NAME'=322 +'DATA'=323 +'DATAFILE'=324 +'DEALLOCATE'=325 +'DEFAULT_AUTH'=326 +'DEFINER'=327 +'DELAY_KEY_WRITE'=328 +'DES_KEY_FILE'=329 +'DIRECTORY'=330 +'DISABLE'=331 +'DISCARD'=332 +'DISK'=333 +'DO'=334 +'DUMPFILE'=335 +'DUPLICATE'=336 +'DYNAMIC'=337 +'ENABLE'=338 +'ENCRYPTION'=339 +'END'=340 +'ENDS'=341 +'ENGINE'=342 +'ENGINES'=343 +'ERROR'=344 +'ERRORS'=345 +'ESCAPE'=346 +'EVEN'=347 +'EVENT'=348 +'EVENTS'=349 +'EVERY'=350 +'EXCHANGE'=351 +'EXCLUSIVE'=352 +'EXPIRE'=353 +'EXPORT'=354 +'EXTENDED'=355 +'EXTENT_SIZE'=356 +'FAST'=357 +'FAULTS'=358 +'FIELDS'=359 +'FILE_BLOCK_SIZE'=360 +'FILTER'=361 +'FIRST'=362 +'FIXED'=363 +'FLUSH'=364 +'FOLLOWS'=365 +'FOUND'=366 +'FULL'=367 +'FUNCTION'=368 +'GENERAL'=369 +'GLOBAL'=370 +'GRANTS'=371 +'GROUP_REPLICATION'=372 +'HANDLER'=373 +'HASH'=374 +'HELP'=375 +'HOST'=376 +'HOSTS'=377 +'IDENTIFIED'=378 +'IGNORE_SERVER_IDS'=379 +'IMPORT'=380 +'INDEXES'=381 +'INITIAL_SIZE'=382 +'INPLACE'=383 +'INSERT_METHOD'=384 +'INSTALL'=385 +'INSTANCE'=386 +'INVISIBLE'=387 +'INVOKER'=388 +'IO'=389 +'IO_THREAD'=390 +'IPC'=391 +'ISOLATION'=392 +'ISSUER'=393 +'JSON'=394 +'KEY_BLOCK_SIZE'=395 +'LANGUAGE'=396 +'LAST'=397 +'LEAVES'=398 +'LESS'=399 +'LEVEL'=400 +'LIST'=401 +'LOCAL'=402 +'LOGFILE'=403 +'LOGS'=404 +'MASTER'=405 +'MASTER_AUTO_POSITION'=406 +'MASTER_CONNECT_RETRY'=407 +'MASTER_DELAY'=408 +'MASTER_HEARTBEAT_PERIOD'=409 +'MASTER_HOST'=410 +'MASTER_LOG_FILE'=411 +'MASTER_LOG_POS'=412 +'MASTER_PASSWORD'=413 +'MASTER_PORT'=414 +'MASTER_RETRY_COUNT'=415 +'MASTER_SSL'=416 +'MASTER_SSL_CA'=417 +'MASTER_SSL_CAPATH'=418 +'MASTER_SSL_CERT'=419 +'MASTER_SSL_CIPHER'=420 +'MASTER_SSL_CRL'=421 +'MASTER_SSL_CRLPATH'=422 +'MASTER_SSL_KEY'=423 +'MASTER_TLS_VERSION'=424 +'MASTER_USER'=425 +'MAX_CONNECTIONS_PER_HOUR'=426 +'MAX_QUERIES_PER_HOUR'=427 +'MAX_ROWS'=428 +'MAX_SIZE'=429 +'MAX_UPDATES_PER_HOUR'=430 +'MAX_USER_CONNECTIONS'=431 +'MEDIUM'=432 +'MEMBER'=433 +'MERGE'=434 +'MESSAGE_TEXT'=435 +'MID'=436 +'MIGRATE'=437 +'MIN_ROWS'=438 +'MODE'=439 +'MODIFY'=440 +'MUTEX'=441 +'MYSQL'=442 +'MYSQL_ERRNO'=443 +'NAME'=444 +'NAMES'=445 +'NCHAR'=446 +'NEVER'=447 +'NEXT'=448 +'NO'=449 +'NODEGROUP'=450 +'NONE'=451 +'OFFLINE'=452 +'OFFSET'=453 +'OF'=454 +'OJ'=455 +'OLD_PASSWORD'=456 +'ONE'=457 +'ONLINE'=458 +'ONLY'=459 +'OPEN'=460 +'OPTIMIZER_COSTS'=461 +'OPTIONS'=462 +'OWNER'=463 +'PACK_KEYS'=464 +'PAGE'=465 +'PARSER'=466 +'PARTIAL'=467 +'PARTITIONING'=468 +'PARTITIONS'=469 +'PASSWORD'=470 +'PHASE'=471 +'PLUGIN'=472 +'PLUGIN_DIR'=473 +'PLUGINS'=474 +'PORT'=475 +'PRECEDES'=476 +'PREPARE'=477 +'PRESERVE'=478 +'PREV'=479 +'PROCESSLIST'=480 +'PROFILE'=481 +'PROFILES'=482 +'PROXY'=483 +'QUERY'=484 +'QUICK'=485 +'REBUILD'=486 +'RECOVER'=487 +'REDO_BUFFER_SIZE'=488 +'REDUNDANT'=489 +'RELAY'=490 +'RELAY_LOG_FILE'=491 +'RELAY_LOG_POS'=492 +'RELAYLOG'=493 +'REMOVE'=494 +'REORGANIZE'=495 +'REPAIR'=496 +'REPLICATE_DO_DB'=497 +'REPLICATE_DO_TABLE'=498 +'REPLICATE_IGNORE_DB'=499 +'REPLICATE_IGNORE_TABLE'=500 +'REPLICATE_REWRITE_DB'=501 +'REPLICATE_WILD_DO_TABLE'=502 +'REPLICATE_WILD_IGNORE_TABLE'=503 +'REPLICATION'=504 +'RESET'=505 +'RESUME'=506 +'RETURNED_SQLSTATE'=507 +'RETURNS'=508 +'ROLE'=509 +'ROLLBACK'=510 +'ROLLUP'=511 +'ROTATE'=512 +'ROW'=513 +'ROWS'=514 +'ROW_FORMAT'=515 +'SAVEPOINT'=516 +'SCHEDULE'=517 +'SECURITY'=518 +'SERVER'=519 +'SESSION'=520 +'SHARE'=521 +'SHARED'=522 +'SIGNED'=523 +'SIMPLE'=524 +'SLAVE'=525 +'SLOW'=526 +'SNAPSHOT'=527 +'SOCKET'=528 +'SOME'=529 +'SONAME'=530 +'SOUNDS'=531 +'SOURCE'=532 +'SQL_AFTER_GTIDS'=533 +'SQL_AFTER_MTS_GAPS'=534 +'SQL_BEFORE_GTIDS'=535 +'SQL_BUFFER_RESULT'=536 +'SQL_CACHE'=537 +'SQL_NO_CACHE'=538 +'SQL_THREAD'=539 +'START'=540 +'STARTS'=541 +'STATS_AUTO_RECALC'=542 +'STATS_PERSISTENT'=543 +'STATS_SAMPLE_PAGES'=544 +'STATUS'=545 +'STOP'=546 +'STORAGE'=547 +'STORED'=548 +'STRING'=549 +'SUBCLASS_ORIGIN'=550 +'SUBJECT'=551 +'SUBPARTITION'=552 +'SUBPARTITIONS'=553 +'SUSPEND'=554 +'SWAPS'=555 +'SWITCHES'=556 +'TABLE_NAME'=557 +'TABLESPACE'=558 +'TEMPORARY'=559 +'TEMPTABLE'=560 +'THAN'=561 +'TRADITIONAL'=562 +'TRANSACTION'=563 +'TRANSACTIONAL'=564 +'TRIGGERS'=565 +'TRUNCATE'=566 +'UNDEFINED'=567 +'UNDOFILE'=568 +'UNDO_BUFFER_SIZE'=569 +'UNINSTALL'=570 +'UNKNOWN'=571 +'UNTIL'=572 +'UPGRADE'=573 +'USER'=574 +'USE_FRM'=575 +'USER_RESOURCES'=576 +'VALIDATION'=577 +'VALUE'=578 +'VARIABLES'=579 +'VIEW'=580 +'VIRTUAL'=581 +'VISIBLE'=582 +'WAIT'=583 +'WARNINGS'=584 +'WITHOUT'=585 +'WORK'=586 +'WRAPPER'=587 +'X509'=588 +'XA'=589 +'XML'=590 +'EUR'=591 +'USA'=592 +'JIS'=593 +'ISO'=594 +'INTERNAL'=595 +'QUARTER'=596 +'MONTH'=597 +'DAY'=598 +'HOUR'=599 +'MINUTE'=600 +'WEEK'=601 +'SECOND'=602 +'MICROSECOND'=603 +'TABLES'=604 +'ROUTINE'=605 +'EXECUTE'=606 +'FILE'=607 +'PROCESS'=608 +'RELOAD'=609 +'SHUTDOWN'=610 +'SUPER'=611 +'PRIVILEGES'=612 +'APPLICATION_PASSWORD_ADMIN'=613 +'AUDIT_ADMIN'=614 +'BACKUP_ADMIN'=615 +'BINLOG_ADMIN'=616 +'BINLOG_ENCRYPTION_ADMIN'=617 +'CLONE_ADMIN'=618 +'CONNECTION_ADMIN'=619 +'ENCRYPTION_KEY_ADMIN'=620 +'FIREWALL_ADMIN'=621 +'FIREWALL_USER'=622 +'GROUP_REPLICATION_ADMIN'=623 +'INNODB_REDO_LOG_ARCHIVE'=624 +'NDB_STORED_USER'=625 +'PERSIST_RO_VARIABLES_ADMIN'=626 +'REPLICATION_APPLIER'=627 +'REPLICATION_SLAVE_ADMIN'=628 +'RESOURCE_GROUP_ADMIN'=629 +'RESOURCE_GROUP_USER'=630 +'ROLE_ADMIN'=631 +'SET_USER_ID'=633 +'SHOW_ROUTINE'=634 +'SYSTEM_VARIABLES_ADMIN'=635 +'TABLE_ENCRYPTION_ADMIN'=636 +'VERSION_TOKEN_ADMIN'=637 +'XA_RECOVER_ADMIN'=638 +'ARMSCII8'=639 +'ASCII'=640 +'BIG5'=641 +'CP1250'=642 +'CP1251'=643 +'CP1256'=644 +'CP1257'=645 +'CP850'=646 +'CP852'=647 +'CP866'=648 +'CP932'=649 +'DEC8'=650 +'EUCJPMS'=651 +'EUCKR'=652 +'GB2312'=653 +'GBK'=654 +'GEOSTD8'=655 +'GREEK'=656 +'HEBREW'=657 +'HP8'=658 +'KEYBCS2'=659 +'KOI8R'=660 +'KOI8U'=661 +'LATIN1'=662 +'LATIN2'=663 +'LATIN5'=664 +'LATIN7'=665 +'MACCE'=666 +'MACROMAN'=667 +'SJIS'=668 +'SWE7'=669 +'TIS620'=670 +'UCS2'=671 +'UJIS'=672 +'UTF16'=673 +'UTF16LE'=674 +'UTF32'=675 +'UTF8'=676 +'UTF8MB3'=677 +'UTF8MB4'=678 +'ARCHIVE'=679 +'BLACKHOLE'=680 +'CSV'=681 +'FEDERATED'=682 +'INNODB'=683 +'MEMORY'=684 +'MRG_MYISAM'=685 +'MYISAM'=686 +'NDB'=687 +'NDBCLUSTER'=688 +'PERFORMANCE_SCHEMA'=689 +'TOKUDB'=690 +'REPEATABLE'=691 +'COMMITTED'=692 +'UNCOMMITTED'=693 +'SERIALIZABLE'=694 +'GEOMETRYCOLLECTION'=695 +'GEOMCOLLECTION'=696 +'GEOMETRY'=697 +'LINESTRING'=698 +'MULTILINESTRING'=699 +'MULTIPOINT'=700 +'MULTIPOLYGON'=701 +'POINT'=702 +'POLYGON'=703 +'ABS'=704 +'ACOS'=705 +'ADDDATE'=706 +'ADDTIME'=707 +'AES_DECRYPT'=708 +'AES_ENCRYPT'=709 +'AREA'=710 +'ASBINARY'=711 +'ASIN'=712 +'ASTEXT'=713 +'ASWKB'=714 +'ASWKT'=715 +'ASYMMETRIC_DECRYPT'=716 +'ASYMMETRIC_DERIVE'=717 +'ASYMMETRIC_ENCRYPT'=718 +'ASYMMETRIC_SIGN'=719 +'ASYMMETRIC_VERIFY'=720 +'ATAN'=721 +'ATAN2'=722 +'BENCHMARK'=723 +'BIN'=724 +'BIT_COUNT'=725 +'BIT_LENGTH'=726 +'BUFFER'=727 +'CATALOG_NAME'=728 +'CEIL'=729 +'CEILING'=730 +'CENTROID'=731 +'CHARACTER_LENGTH'=732 +'CHARSET'=733 +'CHAR_LENGTH'=734 +'COERCIBILITY'=735 +'COLLATION'=736 +'COMPRESS'=737 +'CONCAT'=738 +'CONCAT_WS'=739 +'CONNECTION_ID'=740 +'CONV'=741 +'CONVERT_TZ'=742 +'COS'=743 +'COT'=744 +'CRC32'=745 +'CREATE_ASYMMETRIC_PRIV_KEY'=746 +'CREATE_ASYMMETRIC_PUB_KEY'=747 +'CREATE_DH_PARAMETERS'=748 +'CREATE_DIGEST'=749 +'CROSSES'=750 +'DATEDIFF'=751 +'DATE_FORMAT'=752 +'DAYNAME'=753 +'DAYOFMONTH'=754 +'DAYOFWEEK'=755 +'DAYOFYEAR'=756 +'DECODE'=757 +'DEGREES'=758 +'DES_DECRYPT'=759 +'DES_ENCRYPT'=760 +'DIMENSION'=761 +'DISJOINT'=762 +'ELT'=763 +'ENCODE'=764 +'ENCRYPT'=765 +'ENDPOINT'=766 +'ENVELOPE'=767 +'EQUALS'=768 +'EXP'=769 +'EXPORT_SET'=770 +'EXTERIORRING'=771 +'EXTRACTVALUE'=772 +'FIELD'=773 +'FIND_IN_SET'=774 +'FLOOR'=775 +'FORMAT'=776 +'FOUND_ROWS'=777 +'FROM_BASE64'=778 +'FROM_DAYS'=779 +'FROM_UNIXTIME'=780 +'GEOMCOLLFROMTEXT'=781 +'GEOMCOLLFROMWKB'=782 +'GEOMETRYCOLLECTIONFROMTEXT'=783 +'GEOMETRYCOLLECTIONFROMWKB'=784 +'GEOMETRYFROMTEXT'=785 +'GEOMETRYFROMWKB'=786 +'GEOMETRYN'=787 +'GEOMETRYTYPE'=788 +'GEOMFROMTEXT'=789 +'GEOMFROMWKB'=790 +'GET_FORMAT'=791 +'GET_LOCK'=792 +'GLENGTH'=793 +'GREATEST'=794 +'GTID_SUBSET'=795 +'GTID_SUBTRACT'=796 +'HEX'=797 +'IFNULL'=798 +'INET6_ATON'=799 +'INET6_NTOA'=800 +'INET_ATON'=801 +'INET_NTOA'=802 +'INSTR'=803 +'INTERIORRINGN'=804 +'INTERSECTS'=805 +'ISCLOSED'=806 +'ISEMPTY'=807 +'ISNULL'=808 +'ISSIMPLE'=809 +'IS_FREE_LOCK'=810 +'IS_IPV4'=811 +'IS_IPV4_COMPAT'=812 +'IS_IPV4_MAPPED'=813 +'IS_IPV6'=814 +'IS_USED_LOCK'=815 +'LAST_INSERT_ID'=816 +'LCASE'=817 +'LEAST'=818 +'LENGTH'=819 +'LINEFROMTEXT'=820 +'LINEFROMWKB'=821 +'LINESTRINGFROMTEXT'=822 +'LINESTRINGFROMWKB'=823 +'LN'=824 +'LOAD_FILE'=825 +'LOCATE'=826 +'LOG'=827 +'LOG10'=828 +'LOG2'=829 +'LOWER'=830 +'LPAD'=831 +'LTRIM'=832 +'MAKEDATE'=833 +'MAKETIME'=834 +'MAKE_SET'=835 +'MASTER_POS_WAIT'=836 +'MBRCONTAINS'=837 +'MBRDISJOINT'=838 +'MBREQUAL'=839 +'MBRINTERSECTS'=840 +'MBROVERLAPS'=841 +'MBRTOUCHES'=842 +'MBRWITHIN'=843 +'MD5'=844 +'MLINEFROMTEXT'=845 +'MLINEFROMWKB'=846 +'MONTHNAME'=847 +'MPOINTFROMTEXT'=848 +'MPOINTFROMWKB'=849 +'MPOLYFROMTEXT'=850 +'MPOLYFROMWKB'=851 +'MULTILINESTRINGFROMTEXT'=852 +'MULTILINESTRINGFROMWKB'=853 +'MULTIPOINTFROMTEXT'=854 +'MULTIPOINTFROMWKB'=855 +'MULTIPOLYGONFROMTEXT'=856 +'MULTIPOLYGONFROMWKB'=857 +'NAME_CONST'=858 +'NULLIF'=859 +'NUMGEOMETRIES'=860 +'NUMINTERIORRINGS'=861 +'NUMPOINTS'=862 +'OCT'=863 +'OCTET_LENGTH'=864 +'ORD'=865 +'OVERLAPS'=866 +'PERIOD_ADD'=867 +'PERIOD_DIFF'=868 +'PI'=869 +'POINTFROMTEXT'=870 +'POINTFROMWKB'=871 +'POINTN'=872 +'POLYFROMTEXT'=873 +'POLYFROMWKB'=874 +'POLYGONFROMTEXT'=875 +'POLYGONFROMWKB'=876 +'POW'=877 +'POWER'=878 +'QUOTE'=879 +'RADIANS'=880 +'RAND'=881 +'RANDOM_BYTES'=882 +'RELEASE_LOCK'=883 +'REVERSE'=884 +'ROUND'=885 +'ROW_COUNT'=886 +'RPAD'=887 +'RTRIM'=888 +'SEC_TO_TIME'=889 +'SESSION_USER'=890 +'SHA'=891 +'SHA1'=892 +'SHA2'=893 +'SCHEMA_NAME'=894 +'SIGN'=895 +'SIN'=896 +'SLEEP'=897 +'SOUNDEX'=898 +'SQL_THREAD_WAIT_AFTER_GTIDS'=899 +'SQRT'=900 +'SRID'=901 +'STARTPOINT'=902 +'STRCMP'=903 +'STR_TO_DATE'=904 +'ST_AREA'=905 +'ST_ASBINARY'=906 +'ST_ASTEXT'=907 +'ST_ASWKB'=908 +'ST_ASWKT'=909 +'ST_BUFFER'=910 +'ST_CENTROID'=911 +'ST_CONTAINS'=912 +'ST_CROSSES'=913 +'ST_DIFFERENCE'=914 +'ST_DIMENSION'=915 +'ST_DISJOINT'=916 +'ST_DISTANCE'=917 +'ST_ENDPOINT'=918 +'ST_ENVELOPE'=919 +'ST_EQUALS'=920 +'ST_EXTERIORRING'=921 +'ST_GEOMCOLLFROMTEXT'=922 +'ST_GEOMCOLLFROMTXT'=923 +'ST_GEOMCOLLFROMWKB'=924 +'ST_GEOMETRYCOLLECTIONFROMTEXT'=925 +'ST_GEOMETRYCOLLECTIONFROMWKB'=926 +'ST_GEOMETRYFROMTEXT'=927 +'ST_GEOMETRYFROMWKB'=928 +'ST_GEOMETRYN'=929 +'ST_GEOMETRYTYPE'=930 +'ST_GEOMFROMTEXT'=931 +'ST_GEOMFROMWKB'=932 +'ST_INTERIORRINGN'=933 +'ST_INTERSECTION'=934 +'ST_INTERSECTS'=935 +'ST_ISCLOSED'=936 +'ST_ISEMPTY'=937 +'ST_ISSIMPLE'=938 +'ST_LINEFROMTEXT'=939 +'ST_LINEFROMWKB'=940 +'ST_LINESTRINGFROMTEXT'=941 +'ST_LINESTRINGFROMWKB'=942 +'ST_NUMGEOMETRIES'=943 +'ST_NUMINTERIORRING'=944 +'ST_NUMINTERIORRINGS'=945 +'ST_NUMPOINTS'=946 +'ST_OVERLAPS'=947 +'ST_POINTFROMTEXT'=948 +'ST_POINTFROMWKB'=949 +'ST_POINTN'=950 +'ST_POLYFROMTEXT'=951 +'ST_POLYFROMWKB'=952 +'ST_POLYGONFROMTEXT'=953 +'ST_POLYGONFROMWKB'=954 +'ST_SRID'=955 +'ST_STARTPOINT'=956 +'ST_SYMDIFFERENCE'=957 +'ST_TOUCHES'=958 +'ST_UNION'=959 +'ST_WITHIN'=960 +'ST_X'=961 +'ST_Y'=962 +'SUBDATE'=963 +'SUBSTRING_INDEX'=964 +'SUBTIME'=965 +'SYSTEM_USER'=966 +'TAN'=967 +'TIMEDIFF'=968 +'TIMESTAMPADD'=969 +'TIMESTAMPDIFF'=970 +'TIME_FORMAT'=971 +'TIME_TO_SEC'=972 +'TOUCHES'=973 +'TO_BASE64'=974 +'TO_DAYS'=975 +'TO_SECONDS'=976 +'UCASE'=977 +'UNCOMPRESS'=978 +'UNCOMPRESSED_LENGTH'=979 +'UNHEX'=980 +'UNIX_TIMESTAMP'=981 +'UPDATEXML'=982 +'UPPER'=983 +'UUID'=984 +'UUID_SHORT'=985 +'VALIDATE_PASSWORD_STRENGTH'=986 +'VERSION'=987 +'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS'=988 +'WEEKDAY'=989 +'WEEKOFYEAR'=990 +'WEIGHT_STRING'=991 +'WITHIN'=992 +'YEARWEEK'=993 +'Y'=994 +'X'=995 +':='=996 +'+='=997 +'-='=998 +'*='=999 +'/='=1000 +'%='=1001 +'&='=1002 +'^='=1003 +'|='=1004 +'*'=1005 +'/'=1006 +'%'=1007 +'+'=1008 +'--'=1009 +'-'=1010 +'DIV'=1011 +'MOD'=1012 +'='=1013 +'>'=1014 +'<'=1015 +'!'=1016 +'~'=1017 +'|'=1018 +'&'=1019 +'^'=1020 +'.'=1021 +'('=1022 +')'=1023 +','=1024 +';'=1025 +'@'=1026 +'0'=1027 +'1'=1028 +'2'=1029 +'\''=1030 +'"'=1031 +'`'=1032 +':'=1033 diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserBaseListener.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserBaseListener.java new file mode 100644 index 00000000000..447b61b529e --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserBaseListener.java @@ -0,0 +1,6867 @@ +// Generated from E:/seata/seata/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr\MySqlParser.g4 by ANTLR 4.8 +package io.seata.sqlparser.antlr.mysql.parser; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link MySqlParserListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +public class MySqlParserBaseListener implements MySqlParserListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRoot(MySqlParser.RootContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRoot(MySqlParser.RootContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSqlStatements(MySqlParser.SqlStatementsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSqlStatements(MySqlParser.SqlStatementsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSqlStatement(MySqlParser.SqlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSqlStatement(MySqlParser.SqlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEmptyStatement(MySqlParser.EmptyStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEmptyStatement(MySqlParser.EmptyStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDdlStatement(MySqlParser.DdlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDdlStatement(MySqlParser.DdlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDmlStatement(MySqlParser.DmlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDmlStatement(MySqlParser.DmlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTransactionStatement(MySqlParser.TransactionStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTransactionStatement(MySqlParser.TransactionStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReplicationStatement(MySqlParser.ReplicationStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReplicationStatement(MySqlParser.ReplicationStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPreparedStatement(MySqlParser.PreparedStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPreparedStatement(MySqlParser.PreparedStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCompoundStatement(MySqlParser.CompoundStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCompoundStatement(MySqlParser.CompoundStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAdministrationStatement(MySqlParser.AdministrationStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAdministrationStatement(MySqlParser.AdministrationStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUtilityStatement(MySqlParser.UtilityStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUtilityStatement(MySqlParser.UtilityStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateDatabase(MySqlParser.CreateDatabaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateDatabase(MySqlParser.CreateDatabaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateEvent(MySqlParser.CreateEventContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateEvent(MySqlParser.CreateEventContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateIndex(MySqlParser.CreateIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateIndex(MySqlParser.CreateIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateLogfileGroup(MySqlParser.CreateLogfileGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateLogfileGroup(MySqlParser.CreateLogfileGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateProcedure(MySqlParser.CreateProcedureContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateProcedure(MySqlParser.CreateProcedureContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateFunction(MySqlParser.CreateFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateFunction(MySqlParser.CreateFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateServer(MySqlParser.CreateServerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateServer(MySqlParser.CreateServerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCopyCreateTable(MySqlParser.CopyCreateTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCopyCreateTable(MySqlParser.CopyCreateTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterQueryCreateTable(MySqlParser.QueryCreateTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitQueryCreateTable(MySqlParser.QueryCreateTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterColumnCreateTable(MySqlParser.ColumnCreateTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitColumnCreateTable(MySqlParser.ColumnCreateTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateTablespaceInnodb(MySqlParser.CreateTablespaceInnodbContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateTablespaceInnodb(MySqlParser.CreateTablespaceInnodbContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateTablespaceNdb(MySqlParser.CreateTablespaceNdbContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateTablespaceNdb(MySqlParser.CreateTablespaceNdbContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateTrigger(MySqlParser.CreateTriggerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateTrigger(MySqlParser.CreateTriggerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateView(MySqlParser.CreateViewContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateView(MySqlParser.CreateViewContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateDatabaseOption(MySqlParser.CreateDatabaseOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateDatabaseOption(MySqlParser.CreateDatabaseOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOwnerStatement(MySqlParser.OwnerStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOwnerStatement(MySqlParser.OwnerStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPreciseSchedule(MySqlParser.PreciseScheduleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPreciseSchedule(MySqlParser.PreciseScheduleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIntervalSchedule(MySqlParser.IntervalScheduleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIntervalSchedule(MySqlParser.IntervalScheduleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTimestampValue(MySqlParser.TimestampValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTimestampValue(MySqlParser.TimestampValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIntervalExpr(MySqlParser.IntervalExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIntervalExpr(MySqlParser.IntervalExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIntervalType(MySqlParser.IntervalTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIntervalType(MySqlParser.IntervalTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEnableType(MySqlParser.EnableTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEnableType(MySqlParser.EnableTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIndexType(MySqlParser.IndexTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIndexType(MySqlParser.IndexTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIndexOption(MySqlParser.IndexOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIndexOption(MySqlParser.IndexOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterProcedureParameter(MySqlParser.ProcedureParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitProcedureParameter(MySqlParser.ProcedureParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionParameter(MySqlParser.FunctionParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionParameter(MySqlParser.FunctionParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRoutineComment(MySqlParser.RoutineCommentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRoutineComment(MySqlParser.RoutineCommentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRoutineLanguage(MySqlParser.RoutineLanguageContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRoutineLanguage(MySqlParser.RoutineLanguageContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRoutineBehavior(MySqlParser.RoutineBehaviorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRoutineBehavior(MySqlParser.RoutineBehaviorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRoutineData(MySqlParser.RoutineDataContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRoutineData(MySqlParser.RoutineDataContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRoutineSecurity(MySqlParser.RoutineSecurityContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRoutineSecurity(MySqlParser.RoutineSecurityContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterServerOption(MySqlParser.ServerOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitServerOption(MySqlParser.ServerOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateDefinitions(MySqlParser.CreateDefinitionsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateDefinitions(MySqlParser.CreateDefinitionsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterColumnDeclaration(MySqlParser.ColumnDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitColumnDeclaration(MySqlParser.ColumnDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstraintDeclaration(MySqlParser.ConstraintDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstraintDeclaration(MySqlParser.ConstraintDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIndexDeclaration(MySqlParser.IndexDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIndexDeclaration(MySqlParser.IndexDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterColumnDefinition(MySqlParser.ColumnDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitColumnDefinition(MySqlParser.ColumnDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNullColumnConstraint(MySqlParser.NullColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNullColumnConstraint(MySqlParser.NullColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDefaultColumnConstraint(MySqlParser.DefaultColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDefaultColumnConstraint(MySqlParser.DefaultColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAutoIncrementColumnConstraint(MySqlParser.AutoIncrementColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAutoIncrementColumnConstraint(MySqlParser.AutoIncrementColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPrimaryKeyColumnConstraint(MySqlParser.PrimaryKeyColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPrimaryKeyColumnConstraint(MySqlParser.PrimaryKeyColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUniqueKeyColumnConstraint(MySqlParser.UniqueKeyColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUniqueKeyColumnConstraint(MySqlParser.UniqueKeyColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCommentColumnConstraint(MySqlParser.CommentColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCommentColumnConstraint(MySqlParser.CommentColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFormatColumnConstraint(MySqlParser.FormatColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFormatColumnConstraint(MySqlParser.FormatColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStorageColumnConstraint(MySqlParser.StorageColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStorageColumnConstraint(MySqlParser.StorageColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReferenceColumnConstraint(MySqlParser.ReferenceColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReferenceColumnConstraint(MySqlParser.ReferenceColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollateColumnConstraint(MySqlParser.CollateColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollateColumnConstraint(MySqlParser.CollateColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGeneratedColumnConstraint(MySqlParser.GeneratedColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGeneratedColumnConstraint(MySqlParser.GeneratedColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSerialDefaultColumnConstraint(MySqlParser.SerialDefaultColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSerialDefaultColumnConstraint(MySqlParser.SerialDefaultColumnConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPrimaryKeyTableConstraint(MySqlParser.PrimaryKeyTableConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPrimaryKeyTableConstraint(MySqlParser.PrimaryKeyTableConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUniqueKeyTableConstraint(MySqlParser.UniqueKeyTableConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUniqueKeyTableConstraint(MySqlParser.UniqueKeyTableConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterForeignKeyTableConstraint(MySqlParser.ForeignKeyTableConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitForeignKeyTableConstraint(MySqlParser.ForeignKeyTableConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCheckTableConstraint(MySqlParser.CheckTableConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCheckTableConstraint(MySqlParser.CheckTableConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReferenceDefinition(MySqlParser.ReferenceDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReferenceDefinition(MySqlParser.ReferenceDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReferenceAction(MySqlParser.ReferenceActionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReferenceAction(MySqlParser.ReferenceActionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReferenceControlType(MySqlParser.ReferenceControlTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReferenceControlType(MySqlParser.ReferenceControlTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleIndexDeclaration(MySqlParser.SimpleIndexDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleIndexDeclaration(MySqlParser.SimpleIndexDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSpecialIndexDeclaration(MySqlParser.SpecialIndexDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSpecialIndexDeclaration(MySqlParser.SpecialIndexDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionEngine(MySqlParser.TableOptionEngineContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionEngine(MySqlParser.TableOptionEngineContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionAutoIncrement(MySqlParser.TableOptionAutoIncrementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionAutoIncrement(MySqlParser.TableOptionAutoIncrementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionAverage(MySqlParser.TableOptionAverageContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionAverage(MySqlParser.TableOptionAverageContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionCharset(MySqlParser.TableOptionCharsetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionCharset(MySqlParser.TableOptionCharsetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionChecksum(MySqlParser.TableOptionChecksumContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionChecksum(MySqlParser.TableOptionChecksumContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionCollate(MySqlParser.TableOptionCollateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionCollate(MySqlParser.TableOptionCollateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionComment(MySqlParser.TableOptionCommentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionComment(MySqlParser.TableOptionCommentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionCompression(MySqlParser.TableOptionCompressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionCompression(MySqlParser.TableOptionCompressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionConnection(MySqlParser.TableOptionConnectionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionConnection(MySqlParser.TableOptionConnectionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionDataDirectory(MySqlParser.TableOptionDataDirectoryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionDataDirectory(MySqlParser.TableOptionDataDirectoryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionDelay(MySqlParser.TableOptionDelayContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionDelay(MySqlParser.TableOptionDelayContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionEncryption(MySqlParser.TableOptionEncryptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionEncryption(MySqlParser.TableOptionEncryptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionIndexDirectory(MySqlParser.TableOptionIndexDirectoryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionIndexDirectory(MySqlParser.TableOptionIndexDirectoryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionInsertMethod(MySqlParser.TableOptionInsertMethodContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionInsertMethod(MySqlParser.TableOptionInsertMethodContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionKeyBlockSize(MySqlParser.TableOptionKeyBlockSizeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionKeyBlockSize(MySqlParser.TableOptionKeyBlockSizeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionMaxRows(MySqlParser.TableOptionMaxRowsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionMaxRows(MySqlParser.TableOptionMaxRowsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionMinRows(MySqlParser.TableOptionMinRowsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionMinRows(MySqlParser.TableOptionMinRowsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionPackKeys(MySqlParser.TableOptionPackKeysContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionPackKeys(MySqlParser.TableOptionPackKeysContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionPassword(MySqlParser.TableOptionPasswordContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionPassword(MySqlParser.TableOptionPasswordContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionRowFormat(MySqlParser.TableOptionRowFormatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionRowFormat(MySqlParser.TableOptionRowFormatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionRecalculation(MySqlParser.TableOptionRecalculationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionRecalculation(MySqlParser.TableOptionRecalculationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionPersistent(MySqlParser.TableOptionPersistentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionPersistent(MySqlParser.TableOptionPersistentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionSamplePage(MySqlParser.TableOptionSamplePageContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionSamplePage(MySqlParser.TableOptionSamplePageContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionTablespace(MySqlParser.TableOptionTablespaceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionTablespace(MySqlParser.TableOptionTablespaceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableOptionUnion(MySqlParser.TableOptionUnionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableOptionUnion(MySqlParser.TableOptionUnionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTablespaceStorage(MySqlParser.TablespaceStorageContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTablespaceStorage(MySqlParser.TablespaceStorageContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionDefinitions(MySqlParser.PartitionDefinitionsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionDefinitions(MySqlParser.PartitionDefinitionsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionFunctionHash(MySqlParser.PartitionFunctionHashContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionFunctionHash(MySqlParser.PartitionFunctionHashContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionFunctionKey(MySqlParser.PartitionFunctionKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionFunctionKey(MySqlParser.PartitionFunctionKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionFunctionRange(MySqlParser.PartitionFunctionRangeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionFunctionRange(MySqlParser.PartitionFunctionRangeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionFunctionList(MySqlParser.PartitionFunctionListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionFunctionList(MySqlParser.PartitionFunctionListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubPartitionFunctionHash(MySqlParser.SubPartitionFunctionHashContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubPartitionFunctionHash(MySqlParser.SubPartitionFunctionHashContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubPartitionFunctionKey(MySqlParser.SubPartitionFunctionKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubPartitionFunctionKey(MySqlParser.SubPartitionFunctionKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionComparision(MySqlParser.PartitionComparisionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionComparision(MySqlParser.PartitionComparisionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionListAtom(MySqlParser.PartitionListAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionListAtom(MySqlParser.PartitionListAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionListVector(MySqlParser.PartitionListVectorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionListVector(MySqlParser.PartitionListVectorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionSimple(MySqlParser.PartitionSimpleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionSimple(MySqlParser.PartitionSimpleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionDefinerAtom(MySqlParser.PartitionDefinerAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionDefinerAtom(MySqlParser.PartitionDefinerAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionDefinerVector(MySqlParser.PartitionDefinerVectorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionDefinerVector(MySqlParser.PartitionDefinerVectorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubpartitionDefinition(MySqlParser.SubpartitionDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubpartitionDefinition(MySqlParser.SubpartitionDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionOptionEngine(MySqlParser.PartitionOptionEngineContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionOptionEngine(MySqlParser.PartitionOptionEngineContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionOptionComment(MySqlParser.PartitionOptionCommentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionOptionComment(MySqlParser.PartitionOptionCommentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionOptionDataDirectory(MySqlParser.PartitionOptionDataDirectoryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionOptionDataDirectory(MySqlParser.PartitionOptionDataDirectoryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionOptionIndexDirectory(MySqlParser.PartitionOptionIndexDirectoryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionOptionIndexDirectory(MySqlParser.PartitionOptionIndexDirectoryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionOptionMaxRows(MySqlParser.PartitionOptionMaxRowsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionOptionMaxRows(MySqlParser.PartitionOptionMaxRowsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionOptionMinRows(MySqlParser.PartitionOptionMinRowsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionOptionMinRows(MySqlParser.PartitionOptionMinRowsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionOptionTablespace(MySqlParser.PartitionOptionTablespaceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionOptionTablespace(MySqlParser.PartitionOptionTablespaceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionOptionNodeGroup(MySqlParser.PartitionOptionNodeGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionOptionNodeGroup(MySqlParser.PartitionOptionNodeGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterSimpleDatabase(MySqlParser.AlterSimpleDatabaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterSimpleDatabase(MySqlParser.AlterSimpleDatabaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterUpgradeName(MySqlParser.AlterUpgradeNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterUpgradeName(MySqlParser.AlterUpgradeNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterEvent(MySqlParser.AlterEventContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterEvent(MySqlParser.AlterEventContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterFunction(MySqlParser.AlterFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterFunction(MySqlParser.AlterFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterInstance(MySqlParser.AlterInstanceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterInstance(MySqlParser.AlterInstanceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterLogfileGroup(MySqlParser.AlterLogfileGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterLogfileGroup(MySqlParser.AlterLogfileGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterProcedure(MySqlParser.AlterProcedureContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterProcedure(MySqlParser.AlterProcedureContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterServer(MySqlParser.AlterServerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterServer(MySqlParser.AlterServerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterTable(MySqlParser.AlterTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterTable(MySqlParser.AlterTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterTablespace(MySqlParser.AlterTablespaceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterTablespace(MySqlParser.AlterTablespaceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterView(MySqlParser.AlterViewContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterView(MySqlParser.AlterViewContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByTableOption(MySqlParser.AlterByTableOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByTableOption(MySqlParser.AlterByTableOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByAddColumn(MySqlParser.AlterByAddColumnContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByAddColumn(MySqlParser.AlterByAddColumnContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByAddColumns(MySqlParser.AlterByAddColumnsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByAddColumns(MySqlParser.AlterByAddColumnsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByAddIndex(MySqlParser.AlterByAddIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByAddIndex(MySqlParser.AlterByAddIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByAddPrimaryKey(MySqlParser.AlterByAddPrimaryKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByAddPrimaryKey(MySqlParser.AlterByAddPrimaryKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByAddUniqueKey(MySqlParser.AlterByAddUniqueKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByAddUniqueKey(MySqlParser.AlterByAddUniqueKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByAddSpecialIndex(MySqlParser.AlterByAddSpecialIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByAddSpecialIndex(MySqlParser.AlterByAddSpecialIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByAddForeignKey(MySqlParser.AlterByAddForeignKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByAddForeignKey(MySqlParser.AlterByAddForeignKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByAddCheckTableConstraint(MySqlParser.AlterByAddCheckTableConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByAddCheckTableConstraint(MySqlParser.AlterByAddCheckTableConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterBySetAlgorithm(MySqlParser.AlterBySetAlgorithmContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterBySetAlgorithm(MySqlParser.AlterBySetAlgorithmContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByChangeDefault(MySqlParser.AlterByChangeDefaultContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByChangeDefault(MySqlParser.AlterByChangeDefaultContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByChangeColumn(MySqlParser.AlterByChangeColumnContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByChangeColumn(MySqlParser.AlterByChangeColumnContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByRenameColumn(MySqlParser.AlterByRenameColumnContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByRenameColumn(MySqlParser.AlterByRenameColumnContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByLock(MySqlParser.AlterByLockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByLock(MySqlParser.AlterByLockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByModifyColumn(MySqlParser.AlterByModifyColumnContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByModifyColumn(MySqlParser.AlterByModifyColumnContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByDropColumn(MySqlParser.AlterByDropColumnContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByDropColumn(MySqlParser.AlterByDropColumnContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByDropPrimaryKey(MySqlParser.AlterByDropPrimaryKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByDropPrimaryKey(MySqlParser.AlterByDropPrimaryKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByRenameIndex(MySqlParser.AlterByRenameIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByRenameIndex(MySqlParser.AlterByRenameIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByDropIndex(MySqlParser.AlterByDropIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByDropIndex(MySqlParser.AlterByDropIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByDropForeignKey(MySqlParser.AlterByDropForeignKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByDropForeignKey(MySqlParser.AlterByDropForeignKeyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByDisableKeys(MySqlParser.AlterByDisableKeysContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByDisableKeys(MySqlParser.AlterByDisableKeysContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByEnableKeys(MySqlParser.AlterByEnableKeysContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByEnableKeys(MySqlParser.AlterByEnableKeysContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByRename(MySqlParser.AlterByRenameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByRename(MySqlParser.AlterByRenameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByOrder(MySqlParser.AlterByOrderContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByOrder(MySqlParser.AlterByOrderContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByConvertCharset(MySqlParser.AlterByConvertCharsetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByConvertCharset(MySqlParser.AlterByConvertCharsetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByDefaultCharset(MySqlParser.AlterByDefaultCharsetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByDefaultCharset(MySqlParser.AlterByDefaultCharsetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByDiscardTablespace(MySqlParser.AlterByDiscardTablespaceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByDiscardTablespace(MySqlParser.AlterByDiscardTablespaceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByImportTablespace(MySqlParser.AlterByImportTablespaceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByImportTablespace(MySqlParser.AlterByImportTablespaceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByForce(MySqlParser.AlterByForceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByForce(MySqlParser.AlterByForceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByValidate(MySqlParser.AlterByValidateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByValidate(MySqlParser.AlterByValidateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByAddPartition(MySqlParser.AlterByAddPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByAddPartition(MySqlParser.AlterByAddPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByDropPartition(MySqlParser.AlterByDropPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByDropPartition(MySqlParser.AlterByDropPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByDiscardPartition(MySqlParser.AlterByDiscardPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByDiscardPartition(MySqlParser.AlterByDiscardPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByImportPartition(MySqlParser.AlterByImportPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByImportPartition(MySqlParser.AlterByImportPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByTruncatePartition(MySqlParser.AlterByTruncatePartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByTruncatePartition(MySqlParser.AlterByTruncatePartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByCoalescePartition(MySqlParser.AlterByCoalescePartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByCoalescePartition(MySqlParser.AlterByCoalescePartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByReorganizePartition(MySqlParser.AlterByReorganizePartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByReorganizePartition(MySqlParser.AlterByReorganizePartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByExchangePartition(MySqlParser.AlterByExchangePartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByExchangePartition(MySqlParser.AlterByExchangePartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByAnalyzePartition(MySqlParser.AlterByAnalyzePartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByAnalyzePartition(MySqlParser.AlterByAnalyzePartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByCheckPartition(MySqlParser.AlterByCheckPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByCheckPartition(MySqlParser.AlterByCheckPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByOptimizePartition(MySqlParser.AlterByOptimizePartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByOptimizePartition(MySqlParser.AlterByOptimizePartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByRebuildPartition(MySqlParser.AlterByRebuildPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByRebuildPartition(MySqlParser.AlterByRebuildPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByRepairPartition(MySqlParser.AlterByRepairPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByRepairPartition(MySqlParser.AlterByRepairPartitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByRemovePartitioning(MySqlParser.AlterByRemovePartitioningContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByRemovePartitioning(MySqlParser.AlterByRemovePartitioningContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterByUpgradePartitioning(MySqlParser.AlterByUpgradePartitioningContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterByUpgradePartitioning(MySqlParser.AlterByUpgradePartitioningContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDropDatabase(MySqlParser.DropDatabaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDropDatabase(MySqlParser.DropDatabaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDropEvent(MySqlParser.DropEventContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDropEvent(MySqlParser.DropEventContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDropIndex(MySqlParser.DropIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDropIndex(MySqlParser.DropIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDropLogfileGroup(MySqlParser.DropLogfileGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDropLogfileGroup(MySqlParser.DropLogfileGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDropProcedure(MySqlParser.DropProcedureContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDropProcedure(MySqlParser.DropProcedureContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDropFunction(MySqlParser.DropFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDropFunction(MySqlParser.DropFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDropServer(MySqlParser.DropServerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDropServer(MySqlParser.DropServerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDropTable(MySqlParser.DropTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDropTable(MySqlParser.DropTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDropTablespace(MySqlParser.DropTablespaceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDropTablespace(MySqlParser.DropTablespaceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDropTrigger(MySqlParser.DropTriggerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDropTrigger(MySqlParser.DropTriggerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDropView(MySqlParser.DropViewContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDropView(MySqlParser.DropViewContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRenameTable(MySqlParser.RenameTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRenameTable(MySqlParser.RenameTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRenameTableClause(MySqlParser.RenameTableClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRenameTableClause(MySqlParser.RenameTableClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTruncateTable(MySqlParser.TruncateTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTruncateTable(MySqlParser.TruncateTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCallStatement(MySqlParser.CallStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCallStatement(MySqlParser.CallStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDeleteStatement(MySqlParser.DeleteStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDeleteStatement(MySqlParser.DeleteStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDoStatement(MySqlParser.DoStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDoStatement(MySqlParser.DoStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHandlerStatement(MySqlParser.HandlerStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHandlerStatement(MySqlParser.HandlerStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInsertStatement(MySqlParser.InsertStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInsertStatement(MySqlParser.InsertStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLoadDataStatement(MySqlParser.LoadDataStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLoadDataStatement(MySqlParser.LoadDataStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLoadXmlStatement(MySqlParser.LoadXmlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLoadXmlStatement(MySqlParser.LoadXmlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReplaceStatement(MySqlParser.ReplaceStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReplaceStatement(MySqlParser.ReplaceStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleSelect(MySqlParser.SimpleSelectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleSelect(MySqlParser.SimpleSelectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParenthesisSelect(MySqlParser.ParenthesisSelectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParenthesisSelect(MySqlParser.ParenthesisSelectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUnionSelect(MySqlParser.UnionSelectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUnionSelect(MySqlParser.UnionSelectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUnionParenthesisSelect(MySqlParser.UnionParenthesisSelectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUnionParenthesisSelect(MySqlParser.UnionParenthesisSelectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUpdateStatement(MySqlParser.UpdateStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUpdateStatement(MySqlParser.UpdateStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInsertStatementValue(MySqlParser.InsertStatementValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInsertStatementValue(MySqlParser.InsertStatementValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUpdatedElement(MySqlParser.UpdatedElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUpdatedElement(MySqlParser.UpdatedElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAssignmentField(MySqlParser.AssignmentFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAssignmentField(MySqlParser.AssignmentFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLockClause(MySqlParser.LockClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLockClause(MySqlParser.LockClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSingleDeleteStatement(MySqlParser.SingleDeleteStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSingleDeleteStatement(MySqlParser.SingleDeleteStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultipleDeleteStatement(MySqlParser.MultipleDeleteStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultipleDeleteStatement(MySqlParser.MultipleDeleteStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHandlerOpenStatement(MySqlParser.HandlerOpenStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHandlerOpenStatement(MySqlParser.HandlerOpenStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHandlerReadIndexStatement(MySqlParser.HandlerReadIndexStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHandlerReadIndexStatement(MySqlParser.HandlerReadIndexStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHandlerReadStatement(MySqlParser.HandlerReadStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHandlerReadStatement(MySqlParser.HandlerReadStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHandlerCloseStatement(MySqlParser.HandlerCloseStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHandlerCloseStatement(MySqlParser.HandlerCloseStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSingleUpdateStatement(MySqlParser.SingleUpdateStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSingleUpdateStatement(MySqlParser.SingleUpdateStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultipleUpdateStatement(MySqlParser.MultipleUpdateStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultipleUpdateStatement(MySqlParser.MultipleUpdateStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOrderByClause(MySqlParser.OrderByClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOrderByClause(MySqlParser.OrderByClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOrderByExpression(MySqlParser.OrderByExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOrderByExpression(MySqlParser.OrderByExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableSources(MySqlParser.TableSourcesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableSources(MySqlParser.TableSourcesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableSourceBase(MySqlParser.TableSourceBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableSourceBase(MySqlParser.TableSourceBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableSourceNested(MySqlParser.TableSourceNestedContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableSourceNested(MySqlParser.TableSourceNestedContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAtomTableItem(MySqlParser.AtomTableItemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAtomTableItem(MySqlParser.AtomTableItemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubqueryTableItem(MySqlParser.SubqueryTableItemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubqueryTableItem(MySqlParser.SubqueryTableItemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableSourcesItem(MySqlParser.TableSourcesItemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableSourcesItem(MySqlParser.TableSourcesItemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIndexHint(MySqlParser.IndexHintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIndexHint(MySqlParser.IndexHintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIndexHintType(MySqlParser.IndexHintTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIndexHintType(MySqlParser.IndexHintTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInnerJoin(MySqlParser.InnerJoinContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInnerJoin(MySqlParser.InnerJoinContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStraightJoin(MySqlParser.StraightJoinContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStraightJoin(MySqlParser.StraightJoinContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOuterJoin(MySqlParser.OuterJoinContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOuterJoin(MySqlParser.OuterJoinContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNaturalJoin(MySqlParser.NaturalJoinContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNaturalJoin(MySqlParser.NaturalJoinContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterQueryExpression(MySqlParser.QueryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitQueryExpression(MySqlParser.QueryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterQueryExpressionNointo(MySqlParser.QueryExpressionNointoContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitQueryExpressionNointo(MySqlParser.QueryExpressionNointoContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterQuerySpecification(MySqlParser.QuerySpecificationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitQuerySpecification(MySqlParser.QuerySpecificationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterQuerySpecificationNointo(MySqlParser.QuerySpecificationNointoContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitQuerySpecificationNointo(MySqlParser.QuerySpecificationNointoContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUnionParenthesis(MySqlParser.UnionParenthesisContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUnionParenthesis(MySqlParser.UnionParenthesisContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUnionStatement(MySqlParser.UnionStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUnionStatement(MySqlParser.UnionStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectSpec(MySqlParser.SelectSpecContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectSpec(MySqlParser.SelectSpecContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectElements(MySqlParser.SelectElementsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectElements(MySqlParser.SelectElementsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectStarElement(MySqlParser.SelectStarElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectStarElement(MySqlParser.SelectStarElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectColumnElement(MySqlParser.SelectColumnElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectColumnElement(MySqlParser.SelectColumnElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectFunctionElement(MySqlParser.SelectFunctionElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectFunctionElement(MySqlParser.SelectFunctionElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectExpressionElement(MySqlParser.SelectExpressionElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectExpressionElement(MySqlParser.SelectExpressionElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectIntoVariables(MySqlParser.SelectIntoVariablesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectIntoVariables(MySqlParser.SelectIntoVariablesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectIntoDumpFile(MySqlParser.SelectIntoDumpFileContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectIntoDumpFile(MySqlParser.SelectIntoDumpFileContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectIntoTextFile(MySqlParser.SelectIntoTextFileContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectIntoTextFile(MySqlParser.SelectIntoTextFileContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectFieldsInto(MySqlParser.SelectFieldsIntoContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectFieldsInto(MySqlParser.SelectFieldsIntoContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectLinesInto(MySqlParser.SelectLinesIntoContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectLinesInto(MySqlParser.SelectLinesIntoContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFromClause(MySqlParser.FromClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFromClause(MySqlParser.FromClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGroupByItem(MySqlParser.GroupByItemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGroupByItem(MySqlParser.GroupByItemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLimitClause(MySqlParser.LimitClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLimitClause(MySqlParser.LimitClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLimitClauseAtom(MySqlParser.LimitClauseAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLimitClauseAtom(MySqlParser.LimitClauseAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStartTransaction(MySqlParser.StartTransactionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStartTransaction(MySqlParser.StartTransactionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBeginWork(MySqlParser.BeginWorkContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBeginWork(MySqlParser.BeginWorkContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCommitWork(MySqlParser.CommitWorkContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCommitWork(MySqlParser.CommitWorkContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRollbackWork(MySqlParser.RollbackWorkContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRollbackWork(MySqlParser.RollbackWorkContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSavepointStatement(MySqlParser.SavepointStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSavepointStatement(MySqlParser.SavepointStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRollbackStatement(MySqlParser.RollbackStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRollbackStatement(MySqlParser.RollbackStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReleaseStatement(MySqlParser.ReleaseStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReleaseStatement(MySqlParser.ReleaseStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLockTables(MySqlParser.LockTablesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLockTables(MySqlParser.LockTablesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUnlockTables(MySqlParser.UnlockTablesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUnlockTables(MySqlParser.UnlockTablesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSetAutocommitStatement(MySqlParser.SetAutocommitStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSetAutocommitStatement(MySqlParser.SetAutocommitStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSetTransactionStatement(MySqlParser.SetTransactionStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSetTransactionStatement(MySqlParser.SetTransactionStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTransactionMode(MySqlParser.TransactionModeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTransactionMode(MySqlParser.TransactionModeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLockTableElement(MySqlParser.LockTableElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLockTableElement(MySqlParser.LockTableElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLockAction(MySqlParser.LockActionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLockAction(MySqlParser.LockActionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTransactionOption(MySqlParser.TransactionOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTransactionOption(MySqlParser.TransactionOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTransactionLevel(MySqlParser.TransactionLevelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTransactionLevel(MySqlParser.TransactionLevelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterChangeMaster(MySqlParser.ChangeMasterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitChangeMaster(MySqlParser.ChangeMasterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterChangeReplicationFilter(MySqlParser.ChangeReplicationFilterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitChangeReplicationFilter(MySqlParser.ChangeReplicationFilterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPurgeBinaryLogs(MySqlParser.PurgeBinaryLogsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPurgeBinaryLogs(MySqlParser.PurgeBinaryLogsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterResetMaster(MySqlParser.ResetMasterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitResetMaster(MySqlParser.ResetMasterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterResetSlave(MySqlParser.ResetSlaveContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitResetSlave(MySqlParser.ResetSlaveContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStartSlave(MySqlParser.StartSlaveContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStartSlave(MySqlParser.StartSlaveContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStopSlave(MySqlParser.StopSlaveContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStopSlave(MySqlParser.StopSlaveContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStartGroupReplication(MySqlParser.StartGroupReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStartGroupReplication(MySqlParser.StartGroupReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStopGroupReplication(MySqlParser.StopGroupReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStopGroupReplication(MySqlParser.StopGroupReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMasterStringOption(MySqlParser.MasterStringOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMasterStringOption(MySqlParser.MasterStringOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMasterDecimalOption(MySqlParser.MasterDecimalOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMasterDecimalOption(MySqlParser.MasterDecimalOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMasterBoolOption(MySqlParser.MasterBoolOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMasterBoolOption(MySqlParser.MasterBoolOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMasterRealOption(MySqlParser.MasterRealOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMasterRealOption(MySqlParser.MasterRealOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMasterUidListOption(MySqlParser.MasterUidListOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMasterUidListOption(MySqlParser.MasterUidListOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStringMasterOption(MySqlParser.StringMasterOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStringMasterOption(MySqlParser.StringMasterOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDecimalMasterOption(MySqlParser.DecimalMasterOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDecimalMasterOption(MySqlParser.DecimalMasterOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBoolMasterOption(MySqlParser.BoolMasterOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBoolMasterOption(MySqlParser.BoolMasterOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterChannelOption(MySqlParser.ChannelOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitChannelOption(MySqlParser.ChannelOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDoDbReplication(MySqlParser.DoDbReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDoDbReplication(MySqlParser.DoDbReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIgnoreDbReplication(MySqlParser.IgnoreDbReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIgnoreDbReplication(MySqlParser.IgnoreDbReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDoTableReplication(MySqlParser.DoTableReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDoTableReplication(MySqlParser.DoTableReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIgnoreTableReplication(MySqlParser.IgnoreTableReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIgnoreTableReplication(MySqlParser.IgnoreTableReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWildDoTableReplication(MySqlParser.WildDoTableReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWildDoTableReplication(MySqlParser.WildDoTableReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWildIgnoreTableReplication(MySqlParser.WildIgnoreTableReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWildIgnoreTableReplication(MySqlParser.WildIgnoreTableReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRewriteDbReplication(MySqlParser.RewriteDbReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRewriteDbReplication(MySqlParser.RewriteDbReplicationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTablePair(MySqlParser.TablePairContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTablePair(MySqlParser.TablePairContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterThreadType(MySqlParser.ThreadTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitThreadType(MySqlParser.ThreadTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGtidsUntilOption(MySqlParser.GtidsUntilOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGtidsUntilOption(MySqlParser.GtidsUntilOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMasterLogUntilOption(MySqlParser.MasterLogUntilOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMasterLogUntilOption(MySqlParser.MasterLogUntilOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRelayLogUntilOption(MySqlParser.RelayLogUntilOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRelayLogUntilOption(MySqlParser.RelayLogUntilOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSqlGapsUntilOption(MySqlParser.SqlGapsUntilOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSqlGapsUntilOption(MySqlParser.SqlGapsUntilOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUserConnectionOption(MySqlParser.UserConnectionOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUserConnectionOption(MySqlParser.UserConnectionOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPasswordConnectionOption(MySqlParser.PasswordConnectionOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPasswordConnectionOption(MySqlParser.PasswordConnectionOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDefaultAuthConnectionOption(MySqlParser.DefaultAuthConnectionOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDefaultAuthConnectionOption(MySqlParser.DefaultAuthConnectionOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPluginDirConnectionOption(MySqlParser.PluginDirConnectionOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPluginDirConnectionOption(MySqlParser.PluginDirConnectionOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGtuidSet(MySqlParser.GtuidSetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGtuidSet(MySqlParser.GtuidSetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterXaStartTransaction(MySqlParser.XaStartTransactionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitXaStartTransaction(MySqlParser.XaStartTransactionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterXaEndTransaction(MySqlParser.XaEndTransactionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitXaEndTransaction(MySqlParser.XaEndTransactionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterXaPrepareStatement(MySqlParser.XaPrepareStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitXaPrepareStatement(MySqlParser.XaPrepareStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterXaCommitWork(MySqlParser.XaCommitWorkContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitXaCommitWork(MySqlParser.XaCommitWorkContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterXaRollbackWork(MySqlParser.XaRollbackWorkContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitXaRollbackWork(MySqlParser.XaRollbackWorkContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterXaRecoverWork(MySqlParser.XaRecoverWorkContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitXaRecoverWork(MySqlParser.XaRecoverWorkContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPrepareStatement(MySqlParser.PrepareStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPrepareStatement(MySqlParser.PrepareStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExecuteStatement(MySqlParser.ExecuteStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExecuteStatement(MySqlParser.ExecuteStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDeallocatePrepare(MySqlParser.DeallocatePrepareContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDeallocatePrepare(MySqlParser.DeallocatePrepareContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRoutineBody(MySqlParser.RoutineBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRoutineBody(MySqlParser.RoutineBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBlockStatement(MySqlParser.BlockStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBlockStatement(MySqlParser.BlockStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCaseStatement(MySqlParser.CaseStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCaseStatement(MySqlParser.CaseStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIfStatement(MySqlParser.IfStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIfStatement(MySqlParser.IfStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIterateStatement(MySqlParser.IterateStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIterateStatement(MySqlParser.IterateStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLeaveStatement(MySqlParser.LeaveStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLeaveStatement(MySqlParser.LeaveStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLoopStatement(MySqlParser.LoopStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLoopStatement(MySqlParser.LoopStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRepeatStatement(MySqlParser.RepeatStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRepeatStatement(MySqlParser.RepeatStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReturnStatement(MySqlParser.ReturnStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReturnStatement(MySqlParser.ReturnStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWhileStatement(MySqlParser.WhileStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWhileStatement(MySqlParser.WhileStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCloseCursor(MySqlParser.CloseCursorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCloseCursor(MySqlParser.CloseCursorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFetchCursor(MySqlParser.FetchCursorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFetchCursor(MySqlParser.FetchCursorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOpenCursor(MySqlParser.OpenCursorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOpenCursor(MySqlParser.OpenCursorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDeclareVariable(MySqlParser.DeclareVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDeclareVariable(MySqlParser.DeclareVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDeclareCondition(MySqlParser.DeclareConditionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDeclareCondition(MySqlParser.DeclareConditionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDeclareCursor(MySqlParser.DeclareCursorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDeclareCursor(MySqlParser.DeclareCursorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDeclareHandler(MySqlParser.DeclareHandlerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDeclareHandler(MySqlParser.DeclareHandlerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHandlerConditionCode(MySqlParser.HandlerConditionCodeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHandlerConditionCode(MySqlParser.HandlerConditionCodeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHandlerConditionState(MySqlParser.HandlerConditionStateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHandlerConditionState(MySqlParser.HandlerConditionStateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHandlerConditionName(MySqlParser.HandlerConditionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHandlerConditionName(MySqlParser.HandlerConditionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHandlerConditionWarning(MySqlParser.HandlerConditionWarningContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHandlerConditionWarning(MySqlParser.HandlerConditionWarningContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHandlerConditionNotfound(MySqlParser.HandlerConditionNotfoundContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHandlerConditionNotfound(MySqlParser.HandlerConditionNotfoundContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHandlerConditionException(MySqlParser.HandlerConditionExceptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHandlerConditionException(MySqlParser.HandlerConditionExceptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterProcedureSqlStatement(MySqlParser.ProcedureSqlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitProcedureSqlStatement(MySqlParser.ProcedureSqlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCaseAlternative(MySqlParser.CaseAlternativeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCaseAlternative(MySqlParser.CaseAlternativeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterElifAlternative(MySqlParser.ElifAlternativeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitElifAlternative(MySqlParser.ElifAlternativeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterUserMysqlV56(MySqlParser.AlterUserMysqlV56Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterUserMysqlV56(MySqlParser.AlterUserMysqlV56Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlterUserMysqlV57(MySqlParser.AlterUserMysqlV57Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlterUserMysqlV57(MySqlParser.AlterUserMysqlV57Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateUserMysqlV56(MySqlParser.CreateUserMysqlV56Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateUserMysqlV56(MySqlParser.CreateUserMysqlV56Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateUserMysqlV57(MySqlParser.CreateUserMysqlV57Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateUserMysqlV57(MySqlParser.CreateUserMysqlV57Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDropUser(MySqlParser.DropUserContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDropUser(MySqlParser.DropUserContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGrantStatement(MySqlParser.GrantStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGrantStatement(MySqlParser.GrantStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGrantProxy(MySqlParser.GrantProxyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGrantProxy(MySqlParser.GrantProxyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRenameUser(MySqlParser.RenameUserContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRenameUser(MySqlParser.RenameUserContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDetailRevoke(MySqlParser.DetailRevokeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDetailRevoke(MySqlParser.DetailRevokeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShortRevoke(MySqlParser.ShortRevokeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShortRevoke(MySqlParser.ShortRevokeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRevokeProxy(MySqlParser.RevokeProxyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRevokeProxy(MySqlParser.RevokeProxyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSetPasswordStatement(MySqlParser.SetPasswordStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSetPasswordStatement(MySqlParser.SetPasswordStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUserSpecification(MySqlParser.UserSpecificationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUserSpecification(MySqlParser.UserSpecificationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPasswordAuthOption(MySqlParser.PasswordAuthOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPasswordAuthOption(MySqlParser.PasswordAuthOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStringAuthOption(MySqlParser.StringAuthOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStringAuthOption(MySqlParser.StringAuthOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHashAuthOption(MySqlParser.HashAuthOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHashAuthOption(MySqlParser.HashAuthOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleAuthOption(MySqlParser.SimpleAuthOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleAuthOption(MySqlParser.SimpleAuthOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTlsOption(MySqlParser.TlsOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTlsOption(MySqlParser.TlsOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUserResourceOption(MySqlParser.UserResourceOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUserResourceOption(MySqlParser.UserResourceOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUserPasswordOption(MySqlParser.UserPasswordOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUserPasswordOption(MySqlParser.UserPasswordOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUserLockOption(MySqlParser.UserLockOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUserLockOption(MySqlParser.UserLockOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPrivelegeClause(MySqlParser.PrivelegeClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPrivelegeClause(MySqlParser.PrivelegeClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPrivilege(MySqlParser.PrivilegeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPrivilege(MySqlParser.PrivilegeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCurrentSchemaPriviLevel(MySqlParser.CurrentSchemaPriviLevelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCurrentSchemaPriviLevel(MySqlParser.CurrentSchemaPriviLevelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGlobalPrivLevel(MySqlParser.GlobalPrivLevelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGlobalPrivLevel(MySqlParser.GlobalPrivLevelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDefiniteSchemaPrivLevel(MySqlParser.DefiniteSchemaPrivLevelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDefiniteSchemaPrivLevel(MySqlParser.DefiniteSchemaPrivLevelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDefiniteFullTablePrivLevel(MySqlParser.DefiniteFullTablePrivLevelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDefiniteFullTablePrivLevel(MySqlParser.DefiniteFullTablePrivLevelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDefiniteFullTablePrivLevel2(MySqlParser.DefiniteFullTablePrivLevel2Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDefiniteFullTablePrivLevel2(MySqlParser.DefiniteFullTablePrivLevel2Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDefiniteTablePrivLevel(MySqlParser.DefiniteTablePrivLevelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDefiniteTablePrivLevel(MySqlParser.DefiniteTablePrivLevelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRenameUserClause(MySqlParser.RenameUserClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRenameUserClause(MySqlParser.RenameUserClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAnalyzeTable(MySqlParser.AnalyzeTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAnalyzeTable(MySqlParser.AnalyzeTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCheckTable(MySqlParser.CheckTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCheckTable(MySqlParser.CheckTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterChecksumTable(MySqlParser.ChecksumTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitChecksumTable(MySqlParser.ChecksumTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOptimizeTable(MySqlParser.OptimizeTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOptimizeTable(MySqlParser.OptimizeTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRepairTable(MySqlParser.RepairTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRepairTable(MySqlParser.RepairTableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCheckTableOption(MySqlParser.CheckTableOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCheckTableOption(MySqlParser.CheckTableOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateUdfunction(MySqlParser.CreateUdfunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateUdfunction(MySqlParser.CreateUdfunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInstallPlugin(MySqlParser.InstallPluginContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInstallPlugin(MySqlParser.InstallPluginContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUninstallPlugin(MySqlParser.UninstallPluginContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUninstallPlugin(MySqlParser.UninstallPluginContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSetVariable(MySqlParser.SetVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSetVariable(MySqlParser.SetVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSetCharset(MySqlParser.SetCharsetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSetCharset(MySqlParser.SetCharsetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSetNames(MySqlParser.SetNamesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSetNames(MySqlParser.SetNamesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSetPassword(MySqlParser.SetPasswordContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSetPassword(MySqlParser.SetPasswordContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSetTransaction(MySqlParser.SetTransactionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSetTransaction(MySqlParser.SetTransactionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSetAutocommit(MySqlParser.SetAutocommitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSetAutocommit(MySqlParser.SetAutocommitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSetNewValueInsideTrigger(MySqlParser.SetNewValueInsideTriggerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSetNewValueInsideTrigger(MySqlParser.SetNewValueInsideTriggerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowMasterLogs(MySqlParser.ShowMasterLogsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowMasterLogs(MySqlParser.ShowMasterLogsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowLogEvents(MySqlParser.ShowLogEventsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowLogEvents(MySqlParser.ShowLogEventsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowObjectFilter(MySqlParser.ShowObjectFilterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowObjectFilter(MySqlParser.ShowObjectFilterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowColumns(MySqlParser.ShowColumnsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowColumns(MySqlParser.ShowColumnsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowCreateDb(MySqlParser.ShowCreateDbContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowCreateDb(MySqlParser.ShowCreateDbContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowCreateFullIdObject(MySqlParser.ShowCreateFullIdObjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowCreateFullIdObject(MySqlParser.ShowCreateFullIdObjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowCreateUser(MySqlParser.ShowCreateUserContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowCreateUser(MySqlParser.ShowCreateUserContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowEngine(MySqlParser.ShowEngineContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowEngine(MySqlParser.ShowEngineContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowGlobalInfo(MySqlParser.ShowGlobalInfoContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowGlobalInfo(MySqlParser.ShowGlobalInfoContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowErrors(MySqlParser.ShowErrorsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowErrors(MySqlParser.ShowErrorsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowCountErrors(MySqlParser.ShowCountErrorsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowCountErrors(MySqlParser.ShowCountErrorsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowSchemaFilter(MySqlParser.ShowSchemaFilterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowSchemaFilter(MySqlParser.ShowSchemaFilterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowRoutine(MySqlParser.ShowRoutineContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowRoutine(MySqlParser.ShowRoutineContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowGrants(MySqlParser.ShowGrantsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowGrants(MySqlParser.ShowGrantsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowIndexes(MySqlParser.ShowIndexesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowIndexes(MySqlParser.ShowIndexesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowOpenTables(MySqlParser.ShowOpenTablesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowOpenTables(MySqlParser.ShowOpenTablesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowProfile(MySqlParser.ShowProfileContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowProfile(MySqlParser.ShowProfileContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowSlaveStatus(MySqlParser.ShowSlaveStatusContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowSlaveStatus(MySqlParser.ShowSlaveStatusContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVariableClause(MySqlParser.VariableClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVariableClause(MySqlParser.VariableClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowCommonEntity(MySqlParser.ShowCommonEntityContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowCommonEntity(MySqlParser.ShowCommonEntityContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowFilter(MySqlParser.ShowFilterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowFilter(MySqlParser.ShowFilterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowGlobalInfoClause(MySqlParser.ShowGlobalInfoClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowGlobalInfoClause(MySqlParser.ShowGlobalInfoClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowSchemaEntity(MySqlParser.ShowSchemaEntityContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowSchemaEntity(MySqlParser.ShowSchemaEntityContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowProfileType(MySqlParser.ShowProfileTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowProfileType(MySqlParser.ShowProfileTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBinlogStatement(MySqlParser.BinlogStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBinlogStatement(MySqlParser.BinlogStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCacheIndexStatement(MySqlParser.CacheIndexStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCacheIndexStatement(MySqlParser.CacheIndexStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFlushStatement(MySqlParser.FlushStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFlushStatement(MySqlParser.FlushStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterKillStatement(MySqlParser.KillStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitKillStatement(MySqlParser.KillStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLoadIndexIntoCache(MySqlParser.LoadIndexIntoCacheContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLoadIndexIntoCache(MySqlParser.LoadIndexIntoCacheContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterResetStatement(MySqlParser.ResetStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitResetStatement(MySqlParser.ResetStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShutdownStatement(MySqlParser.ShutdownStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShutdownStatement(MySqlParser.ShutdownStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableIndexes(MySqlParser.TableIndexesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableIndexes(MySqlParser.TableIndexesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleFlushOption(MySqlParser.SimpleFlushOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleFlushOption(MySqlParser.SimpleFlushOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterChannelFlushOption(MySqlParser.ChannelFlushOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitChannelFlushOption(MySqlParser.ChannelFlushOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableFlushOption(MySqlParser.TableFlushOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableFlushOption(MySqlParser.TableFlushOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFlushTableOption(MySqlParser.FlushTableOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFlushTableOption(MySqlParser.FlushTableOptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLoadedTableIndexes(MySqlParser.LoadedTableIndexesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLoadedTableIndexes(MySqlParser.LoadedTableIndexesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleDescribeStatement(MySqlParser.SimpleDescribeStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleDescribeStatement(MySqlParser.SimpleDescribeStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFullDescribeStatement(MySqlParser.FullDescribeStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFullDescribeStatement(MySqlParser.FullDescribeStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHelpStatement(MySqlParser.HelpStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHelpStatement(MySqlParser.HelpStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUseStatement(MySqlParser.UseStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUseStatement(MySqlParser.UseStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSignalStatement(MySqlParser.SignalStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSignalStatement(MySqlParser.SignalStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterResignalStatement(MySqlParser.ResignalStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitResignalStatement(MySqlParser.ResignalStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSignalConditionInformation(MySqlParser.SignalConditionInformationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSignalConditionInformation(MySqlParser.SignalConditionInformationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDiagnosticsStatement(MySqlParser.DiagnosticsStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDiagnosticsStatement(MySqlParser.DiagnosticsStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDiagnosticsConditionInformationName(MySqlParser.DiagnosticsConditionInformationNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDiagnosticsConditionInformationName(MySqlParser.DiagnosticsConditionInformationNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDescribeStatements(MySqlParser.DescribeStatementsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDescribeStatements(MySqlParser.DescribeStatementsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDescribeConnection(MySqlParser.DescribeConnectionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDescribeConnection(MySqlParser.DescribeConnectionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFullId(MySqlParser.FullIdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFullId(MySqlParser.FullIdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableName(MySqlParser.TableNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableName(MySqlParser.TableNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFullColumnName(MySqlParser.FullColumnNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFullColumnName(MySqlParser.FullColumnNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIndexColumnName(MySqlParser.IndexColumnNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIndexColumnName(MySqlParser.IndexColumnNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUserName(MySqlParser.UserNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUserName(MySqlParser.UserNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMysqlVariable(MySqlParser.MysqlVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMysqlVariable(MySqlParser.MysqlVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCharsetName(MySqlParser.CharsetNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCharsetName(MySqlParser.CharsetNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollationName(MySqlParser.CollationNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollationName(MySqlParser.CollationNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEngineName(MySqlParser.EngineNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEngineName(MySqlParser.EngineNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUuidSet(MySqlParser.UuidSetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUuidSet(MySqlParser.UuidSetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterXid(MySqlParser.XidContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitXid(MySqlParser.XidContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterXuidStringId(MySqlParser.XuidStringIdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitXuidStringId(MySqlParser.XuidStringIdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAuthPlugin(MySqlParser.AuthPluginContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAuthPlugin(MySqlParser.AuthPluginContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUid(MySqlParser.UidContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUid(MySqlParser.UidContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleId(MySqlParser.SimpleIdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleId(MySqlParser.SimpleIdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDottedId(MySqlParser.DottedIdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDottedId(MySqlParser.DottedIdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDecimalLiteral(MySqlParser.DecimalLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDecimalLiteral(MySqlParser.DecimalLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFileSizeLiteral(MySqlParser.FileSizeLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFileSizeLiteral(MySqlParser.FileSizeLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStringLiteral(MySqlParser.StringLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStringLiteral(MySqlParser.StringLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBooleanLiteral(MySqlParser.BooleanLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBooleanLiteral(MySqlParser.BooleanLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHexadecimalLiteral(MySqlParser.HexadecimalLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHexadecimalLiteral(MySqlParser.HexadecimalLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNullNotnull(MySqlParser.NullNotnullContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNullNotnull(MySqlParser.NullNotnullContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstant(MySqlParser.ConstantContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstant(MySqlParser.ConstantContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStringDataType(MySqlParser.StringDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStringDataType(MySqlParser.StringDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNationalStringDataType(MySqlParser.NationalStringDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNationalStringDataType(MySqlParser.NationalStringDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNationalVaryingStringDataType(MySqlParser.NationalVaryingStringDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNationalVaryingStringDataType(MySqlParser.NationalVaryingStringDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDimensionDataType(MySqlParser.DimensionDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDimensionDataType(MySqlParser.DimensionDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleDataType(MySqlParser.SimpleDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleDataType(MySqlParser.SimpleDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollectionDataType(MySqlParser.CollectionDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollectionDataType(MySqlParser.CollectionDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSpatialDataType(MySqlParser.SpatialDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSpatialDataType(MySqlParser.SpatialDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollectionOptions(MySqlParser.CollectionOptionsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollectionOptions(MySqlParser.CollectionOptionsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConvertedDataType(MySqlParser.ConvertedDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConvertedDataType(MySqlParser.ConvertedDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLengthOneDimension(MySqlParser.LengthOneDimensionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLengthOneDimension(MySqlParser.LengthOneDimensionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLengthTwoDimension(MySqlParser.LengthTwoDimensionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLengthTwoDimension(MySqlParser.LengthTwoDimensionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLengthTwoOptionalDimension(MySqlParser.LengthTwoOptionalDimensionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLengthTwoOptionalDimension(MySqlParser.LengthTwoOptionalDimensionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUidList(MySqlParser.UidListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUidList(MySqlParser.UidListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTables(MySqlParser.TablesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTables(MySqlParser.TablesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIndexColumnNames(MySqlParser.IndexColumnNamesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIndexColumnNames(MySqlParser.IndexColumnNamesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpressions(MySqlParser.ExpressionsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpressions(MySqlParser.ExpressionsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpressionsForUpdate(MySqlParser.ExpressionsForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpressionsForUpdate(MySqlParser.ExpressionsForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpressionsWithDefaults(MySqlParser.ExpressionsWithDefaultsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpressionsWithDefaults(MySqlParser.ExpressionsWithDefaultsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstants(MySqlParser.ConstantsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstants(MySqlParser.ConstantsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleStrings(MySqlParser.SimpleStringsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleStrings(MySqlParser.SimpleStringsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUserVariables(MySqlParser.UserVariablesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUserVariables(MySqlParser.UserVariablesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDefaultValue(MySqlParser.DefaultValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDefaultValue(MySqlParser.DefaultValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCurrentTimestamp(MySqlParser.CurrentTimestampContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCurrentTimestamp(MySqlParser.CurrentTimestampContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpressionOrDefault(MySqlParser.ExpressionOrDefaultContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpressionOrDefault(MySqlParser.ExpressionOrDefaultContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIfExists(MySqlParser.IfExistsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIfExists(MySqlParser.IfExistsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIfNotExists(MySqlParser.IfNotExistsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIfNotExists(MySqlParser.IfNotExistsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSpecificFunctionCall(MySqlParser.SpecificFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSpecificFunctionCall(MySqlParser.SpecificFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAggregateFunctionCall(MySqlParser.AggregateFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAggregateFunctionCall(MySqlParser.AggregateFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScalarFunctionCall(MySqlParser.ScalarFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScalarFunctionCall(MySqlParser.ScalarFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUdfFunctionCall(MySqlParser.UdfFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUdfFunctionCall(MySqlParser.UdfFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPasswordFunctionCall(MySqlParser.PasswordFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPasswordFunctionCall(MySqlParser.PasswordFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleFunctionCall(MySqlParser.SimpleFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleFunctionCall(MySqlParser.SimpleFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDataTypeFunctionCall(MySqlParser.DataTypeFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDataTypeFunctionCall(MySqlParser.DataTypeFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterValuesFunctionCall(MySqlParser.ValuesFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitValuesFunctionCall(MySqlParser.ValuesFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCaseFunctionCall(MySqlParser.CaseFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCaseFunctionCall(MySqlParser.CaseFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCharFunctionCall(MySqlParser.CharFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCharFunctionCall(MySqlParser.CharFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPositionFunctionCall(MySqlParser.PositionFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPositionFunctionCall(MySqlParser.PositionFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubstrFunctionCall(MySqlParser.SubstrFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubstrFunctionCall(MySqlParser.SubstrFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTrimFunctionCall(MySqlParser.TrimFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTrimFunctionCall(MySqlParser.TrimFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWeightFunctionCall(MySqlParser.WeightFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWeightFunctionCall(MySqlParser.WeightFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExtractFunctionCall(MySqlParser.ExtractFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExtractFunctionCall(MySqlParser.ExtractFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGetFormatFunctionCall(MySqlParser.GetFormatFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGetFormatFunctionCall(MySqlParser.GetFormatFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCaseFuncAlternative(MySqlParser.CaseFuncAlternativeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCaseFuncAlternative(MySqlParser.CaseFuncAlternativeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLevelWeightList(MySqlParser.LevelWeightListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLevelWeightList(MySqlParser.LevelWeightListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLevelWeightRange(MySqlParser.LevelWeightRangeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLevelWeightRange(MySqlParser.LevelWeightRangeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLevelInWeightListElement(MySqlParser.LevelInWeightListElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLevelInWeightListElement(MySqlParser.LevelInWeightListElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAggregateWindowedFunction(MySqlParser.AggregateWindowedFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAggregateWindowedFunction(MySqlParser.AggregateWindowedFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScalarFunctionName(MySqlParser.ScalarFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScalarFunctionName(MySqlParser.ScalarFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPasswordFunctionClause(MySqlParser.PasswordFunctionClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPasswordFunctionClause(MySqlParser.PasswordFunctionClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionArgs(MySqlParser.FunctionArgsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionArgs(MySqlParser.FunctionArgsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionArg(MySqlParser.FunctionArgContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionArg(MySqlParser.FunctionArgContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIsExpression(MySqlParser.IsExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIsExpression(MySqlParser.IsExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNotExpression(MySqlParser.NotExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNotExpression(MySqlParser.NotExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLogicalExpression(MySqlParser.LogicalExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLogicalExpression(MySqlParser.LogicalExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPredicateExpression(MySqlParser.PredicateExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPredicateExpression(MySqlParser.PredicateExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSoundsLikePredicate(MySqlParser.SoundsLikePredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSoundsLikePredicate(MySqlParser.SoundsLikePredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpressionAtomPredicate(MySqlParser.ExpressionAtomPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpressionAtomPredicate(MySqlParser.ExpressionAtomPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInPredicate(MySqlParser.InPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInPredicate(MySqlParser.InPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubqueryComparasionPredicate(MySqlParser.SubqueryComparasionPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubqueryComparasionPredicate(MySqlParser.SubqueryComparasionPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBetweenPredicate(MySqlParser.BetweenPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBetweenPredicate(MySqlParser.BetweenPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBinaryComparasionPredicate(MySqlParser.BinaryComparasionPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBinaryComparasionPredicate(MySqlParser.BinaryComparasionPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIsNullPredicate(MySqlParser.IsNullPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIsNullPredicate(MySqlParser.IsNullPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLikePredicate(MySqlParser.LikePredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLikePredicate(MySqlParser.LikePredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRegexpPredicate(MySqlParser.RegexpPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRegexpPredicate(MySqlParser.RegexpPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLogicalExpressionForUpdate(MySqlParser.LogicalExpressionForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLogicalExpressionForUpdate(MySqlParser.LogicalExpressionForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPredicateExpressionForUpdate(MySqlParser.PredicateExpressionForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPredicateExpressionForUpdate(MySqlParser.PredicateExpressionForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIsExpressionForUpdate(MySqlParser.IsExpressionForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIsExpressionForUpdate(MySqlParser.IsExpressionForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNotExpressionForUpdate(MySqlParser.NotExpressionForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNotExpressionForUpdate(MySqlParser.NotExpressionForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBinaryComparasionPredicateForUpdate(MySqlParser.BinaryComparasionPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBinaryComparasionPredicateForUpdate(MySqlParser.BinaryComparasionPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLikePredicateForUpdate(MySqlParser.LikePredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLikePredicateForUpdate(MySqlParser.LikePredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRegexpPredicateForUpdate(MySqlParser.RegexpPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRegexpPredicateForUpdate(MySqlParser.RegexpPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIsNullPredicateForUpdate(MySqlParser.IsNullPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIsNullPredicateForUpdate(MySqlParser.IsNullPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBetweenPredicateForUpdate(MySqlParser.BetweenPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBetweenPredicateForUpdate(MySqlParser.BetweenPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSoundsLikePredicateForUpdate(MySqlParser.SoundsLikePredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSoundsLikePredicateForUpdate(MySqlParser.SoundsLikePredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInPredicateForUpdate(MySqlParser.InPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInPredicateForUpdate(MySqlParser.InPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubqueryComparasionPredicateForUpdate(MySqlParser.SubqueryComparasionPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubqueryComparasionPredicateForUpdate(MySqlParser.SubqueryComparasionPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpressionAtomPredicateForUpdate(MySqlParser.ExpressionAtomPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpressionAtomPredicateForUpdate(MySqlParser.ExpressionAtomPredicateForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIntervalExpressionAtomForUpdate(MySqlParser.IntervalExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIntervalExpressionAtomForUpdate(MySqlParser.IntervalExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFullColumnNameExpressionAtomForUpdate(MySqlParser.FullColumnNameExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFullColumnNameExpressionAtomForUpdate(MySqlParser.FullColumnNameExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMysqlVariableExpressionAtomForUpdate(MySqlParser.MysqlVariableExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMysqlVariableExpressionAtomForUpdate(MySqlParser.MysqlVariableExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUnaryExpressionAtomForUpdate(MySqlParser.UnaryExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUnaryExpressionAtomForUpdate(MySqlParser.UnaryExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNestedRowExpressionAtomForUpdate(MySqlParser.NestedRowExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNestedRowExpressionAtomForUpdate(MySqlParser.NestedRowExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubqueryExpessionAtomForUpdate(MySqlParser.SubqueryExpessionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubqueryExpessionAtomForUpdate(MySqlParser.SubqueryExpessionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBitExpressionAtomForUpdate(MySqlParser.BitExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBitExpressionAtomForUpdate(MySqlParser.BitExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMathExpressionAtomForUpdate(MySqlParser.MathExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMathExpressionAtomForUpdate(MySqlParser.MathExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstantExpressionAtomForUpdate(MySqlParser.ConstantExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstantExpressionAtomForUpdate(MySqlParser.ConstantExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollateExpressionAtomForUpdate(MySqlParser.CollateExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollateExpressionAtomForUpdate(MySqlParser.CollateExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBinaryExpressionAtomForUpdate(MySqlParser.BinaryExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBinaryExpressionAtomForUpdate(MySqlParser.BinaryExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNestedExpressionAtomForUpdate(MySqlParser.NestedExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNestedExpressionAtomForUpdate(MySqlParser.NestedExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExistsExpessionAtomForUpdate(MySqlParser.ExistsExpessionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExistsExpessionAtomForUpdate(MySqlParser.ExistsExpessionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionCallExpressionAtomForUpdate(MySqlParser.FunctionCallExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionCallExpressionAtomForUpdate(MySqlParser.FunctionCallExpressionAtomForUpdateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUnaryExpressionAtom(MySqlParser.UnaryExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUnaryExpressionAtom(MySqlParser.UnaryExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollateExpressionAtom(MySqlParser.CollateExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollateExpressionAtom(MySqlParser.CollateExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubqueryExpessionAtom(MySqlParser.SubqueryExpessionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubqueryExpessionAtom(MySqlParser.SubqueryExpessionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMysqlVariableExpressionAtom(MySqlParser.MysqlVariableExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMysqlVariableExpressionAtom(MySqlParser.MysqlVariableExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNestedExpressionAtom(MySqlParser.NestedExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNestedExpressionAtom(MySqlParser.NestedExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNestedRowExpressionAtom(MySqlParser.NestedRowExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNestedRowExpressionAtom(MySqlParser.NestedRowExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMathExpressionAtom(MySqlParser.MathExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMathExpressionAtom(MySqlParser.MathExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIntervalExpressionAtom(MySqlParser.IntervalExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIntervalExpressionAtom(MySqlParser.IntervalExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExistsExpessionAtom(MySqlParser.ExistsExpessionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExistsExpessionAtom(MySqlParser.ExistsExpessionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstantExpressionAtom(MySqlParser.ConstantExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstantExpressionAtom(MySqlParser.ConstantExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionCallExpressionAtom(MySqlParser.FunctionCallExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionCallExpressionAtom(MySqlParser.FunctionCallExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBinaryExpressionAtom(MySqlParser.BinaryExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBinaryExpressionAtom(MySqlParser.BinaryExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFullColumnNameExpressionAtom(MySqlParser.FullColumnNameExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFullColumnNameExpressionAtom(MySqlParser.FullColumnNameExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBitExpressionAtom(MySqlParser.BitExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBitExpressionAtom(MySqlParser.BitExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUnaryOperator(MySqlParser.UnaryOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUnaryOperator(MySqlParser.UnaryOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterComparisonOperator(MySqlParser.ComparisonOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitComparisonOperator(MySqlParser.ComparisonOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLogicalOperator(MySqlParser.LogicalOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLogicalOperator(MySqlParser.LogicalOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBitOperator(MySqlParser.BitOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBitOperator(MySqlParser.BitOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMathOperator(MySqlParser.MathOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMathOperator(MySqlParser.MathOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCharsetNameBase(MySqlParser.CharsetNameBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCharsetNameBase(MySqlParser.CharsetNameBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTransactionLevelBase(MySqlParser.TransactionLevelBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTransactionLevelBase(MySqlParser.TransactionLevelBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPrivilegesBase(MySqlParser.PrivilegesBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPrivilegesBase(MySqlParser.PrivilegesBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIntervalTypeBase(MySqlParser.IntervalTypeBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIntervalTypeBase(MySqlParser.IntervalTypeBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDataTypeBase(MySqlParser.DataTypeBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDataTypeBase(MySqlParser.DataTypeBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterKeywordsCanBeId(MySqlParser.KeywordsCanBeIdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitKeywordsCanBeId(MySqlParser.KeywordsCanBeIdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionNameBase(MySqlParser.FunctionNameBaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionNameBase(MySqlParser.FunctionNameBaseContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserBaseVisitor.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserBaseVisitor.java new file mode 100644 index 00000000000..05ade94bc8a --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserBaseVisitor.java @@ -0,0 +1,3997 @@ +// Generated from E:/seata/seata/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr\MySqlParser.g4 by ANTLR 4.8 +package io.seata.sqlparser.antlr.mysql.parser; +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link MySqlParserVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public class MySqlParserBaseVisitor extends AbstractParseTreeVisitor implements MySqlParserVisitor { + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRoot(MySqlParser.RootContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSqlStatements(MySqlParser.SqlStatementsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSqlStatement(MySqlParser.SqlStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEmptyStatement(MySqlParser.EmptyStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDdlStatement(MySqlParser.DdlStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDmlStatement(MySqlParser.DmlStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTransactionStatement(MySqlParser.TransactionStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReplicationStatement(MySqlParser.ReplicationStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPreparedStatement(MySqlParser.PreparedStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCompoundStatement(MySqlParser.CompoundStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAdministrationStatement(MySqlParser.AdministrationStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUtilityStatement(MySqlParser.UtilityStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateDatabase(MySqlParser.CreateDatabaseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateEvent(MySqlParser.CreateEventContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateIndex(MySqlParser.CreateIndexContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateLogfileGroup(MySqlParser.CreateLogfileGroupContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateProcedure(MySqlParser.CreateProcedureContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateFunction(MySqlParser.CreateFunctionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateServer(MySqlParser.CreateServerContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCopyCreateTable(MySqlParser.CopyCreateTableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitQueryCreateTable(MySqlParser.QueryCreateTableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitColumnCreateTable(MySqlParser.ColumnCreateTableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateTablespaceInnodb(MySqlParser.CreateTablespaceInnodbContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateTablespaceNdb(MySqlParser.CreateTablespaceNdbContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateTrigger(MySqlParser.CreateTriggerContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateView(MySqlParser.CreateViewContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateDatabaseOption(MySqlParser.CreateDatabaseOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOwnerStatement(MySqlParser.OwnerStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPreciseSchedule(MySqlParser.PreciseScheduleContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIntervalSchedule(MySqlParser.IntervalScheduleContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTimestampValue(MySqlParser.TimestampValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIntervalExpr(MySqlParser.IntervalExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIntervalType(MySqlParser.IntervalTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEnableType(MySqlParser.EnableTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIndexType(MySqlParser.IndexTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIndexOption(MySqlParser.IndexOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitProcedureParameter(MySqlParser.ProcedureParameterContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionParameter(MySqlParser.FunctionParameterContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRoutineComment(MySqlParser.RoutineCommentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRoutineLanguage(MySqlParser.RoutineLanguageContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRoutineBehavior(MySqlParser.RoutineBehaviorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRoutineData(MySqlParser.RoutineDataContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRoutineSecurity(MySqlParser.RoutineSecurityContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitServerOption(MySqlParser.ServerOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateDefinitions(MySqlParser.CreateDefinitionsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitColumnDeclaration(MySqlParser.ColumnDeclarationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitConstraintDeclaration(MySqlParser.ConstraintDeclarationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIndexDeclaration(MySqlParser.IndexDeclarationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitColumnDefinition(MySqlParser.ColumnDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNullColumnConstraint(MySqlParser.NullColumnConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDefaultColumnConstraint(MySqlParser.DefaultColumnConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAutoIncrementColumnConstraint(MySqlParser.AutoIncrementColumnConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPrimaryKeyColumnConstraint(MySqlParser.PrimaryKeyColumnConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUniqueKeyColumnConstraint(MySqlParser.UniqueKeyColumnConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCommentColumnConstraint(MySqlParser.CommentColumnConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFormatColumnConstraint(MySqlParser.FormatColumnConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStorageColumnConstraint(MySqlParser.StorageColumnConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReferenceColumnConstraint(MySqlParser.ReferenceColumnConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCollateColumnConstraint(MySqlParser.CollateColumnConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGeneratedColumnConstraint(MySqlParser.GeneratedColumnConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSerialDefaultColumnConstraint(MySqlParser.SerialDefaultColumnConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPrimaryKeyTableConstraint(MySqlParser.PrimaryKeyTableConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUniqueKeyTableConstraint(MySqlParser.UniqueKeyTableConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitForeignKeyTableConstraint(MySqlParser.ForeignKeyTableConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCheckTableConstraint(MySqlParser.CheckTableConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReferenceDefinition(MySqlParser.ReferenceDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReferenceAction(MySqlParser.ReferenceActionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReferenceControlType(MySqlParser.ReferenceControlTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSimpleIndexDeclaration(MySqlParser.SimpleIndexDeclarationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSpecialIndexDeclaration(MySqlParser.SpecialIndexDeclarationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionEngine(MySqlParser.TableOptionEngineContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionAutoIncrement(MySqlParser.TableOptionAutoIncrementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionAverage(MySqlParser.TableOptionAverageContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionCharset(MySqlParser.TableOptionCharsetContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionChecksum(MySqlParser.TableOptionChecksumContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionCollate(MySqlParser.TableOptionCollateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionComment(MySqlParser.TableOptionCommentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionCompression(MySqlParser.TableOptionCompressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionConnection(MySqlParser.TableOptionConnectionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionDataDirectory(MySqlParser.TableOptionDataDirectoryContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionDelay(MySqlParser.TableOptionDelayContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionEncryption(MySqlParser.TableOptionEncryptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionIndexDirectory(MySqlParser.TableOptionIndexDirectoryContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionInsertMethod(MySqlParser.TableOptionInsertMethodContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionKeyBlockSize(MySqlParser.TableOptionKeyBlockSizeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionMaxRows(MySqlParser.TableOptionMaxRowsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionMinRows(MySqlParser.TableOptionMinRowsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionPackKeys(MySqlParser.TableOptionPackKeysContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionPassword(MySqlParser.TableOptionPasswordContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionRowFormat(MySqlParser.TableOptionRowFormatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionRecalculation(MySqlParser.TableOptionRecalculationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionPersistent(MySqlParser.TableOptionPersistentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionSamplePage(MySqlParser.TableOptionSamplePageContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionTablespace(MySqlParser.TableOptionTablespaceContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableOptionUnion(MySqlParser.TableOptionUnionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTablespaceStorage(MySqlParser.TablespaceStorageContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionDefinitions(MySqlParser.PartitionDefinitionsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionFunctionHash(MySqlParser.PartitionFunctionHashContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionFunctionKey(MySqlParser.PartitionFunctionKeyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionFunctionRange(MySqlParser.PartitionFunctionRangeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionFunctionList(MySqlParser.PartitionFunctionListContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSubPartitionFunctionHash(MySqlParser.SubPartitionFunctionHashContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSubPartitionFunctionKey(MySqlParser.SubPartitionFunctionKeyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionComparision(MySqlParser.PartitionComparisionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionListAtom(MySqlParser.PartitionListAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionListVector(MySqlParser.PartitionListVectorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionSimple(MySqlParser.PartitionSimpleContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionDefinerAtom(MySqlParser.PartitionDefinerAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionDefinerVector(MySqlParser.PartitionDefinerVectorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSubpartitionDefinition(MySqlParser.SubpartitionDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionOptionEngine(MySqlParser.PartitionOptionEngineContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionOptionComment(MySqlParser.PartitionOptionCommentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionOptionDataDirectory(MySqlParser.PartitionOptionDataDirectoryContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionOptionIndexDirectory(MySqlParser.PartitionOptionIndexDirectoryContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionOptionMaxRows(MySqlParser.PartitionOptionMaxRowsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionOptionMinRows(MySqlParser.PartitionOptionMinRowsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionOptionTablespace(MySqlParser.PartitionOptionTablespaceContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPartitionOptionNodeGroup(MySqlParser.PartitionOptionNodeGroupContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterSimpleDatabase(MySqlParser.AlterSimpleDatabaseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterUpgradeName(MySqlParser.AlterUpgradeNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterEvent(MySqlParser.AlterEventContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterFunction(MySqlParser.AlterFunctionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterInstance(MySqlParser.AlterInstanceContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterLogfileGroup(MySqlParser.AlterLogfileGroupContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterProcedure(MySqlParser.AlterProcedureContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterServer(MySqlParser.AlterServerContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterTable(MySqlParser.AlterTableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterTablespace(MySqlParser.AlterTablespaceContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterView(MySqlParser.AlterViewContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByTableOption(MySqlParser.AlterByTableOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByAddColumn(MySqlParser.AlterByAddColumnContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByAddColumns(MySqlParser.AlterByAddColumnsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByAddIndex(MySqlParser.AlterByAddIndexContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByAddPrimaryKey(MySqlParser.AlterByAddPrimaryKeyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByAddUniqueKey(MySqlParser.AlterByAddUniqueKeyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByAddSpecialIndex(MySqlParser.AlterByAddSpecialIndexContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByAddForeignKey(MySqlParser.AlterByAddForeignKeyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByAddCheckTableConstraint(MySqlParser.AlterByAddCheckTableConstraintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterBySetAlgorithm(MySqlParser.AlterBySetAlgorithmContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByChangeDefault(MySqlParser.AlterByChangeDefaultContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByChangeColumn(MySqlParser.AlterByChangeColumnContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByRenameColumn(MySqlParser.AlterByRenameColumnContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByLock(MySqlParser.AlterByLockContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByModifyColumn(MySqlParser.AlterByModifyColumnContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByDropColumn(MySqlParser.AlterByDropColumnContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByDropPrimaryKey(MySqlParser.AlterByDropPrimaryKeyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByRenameIndex(MySqlParser.AlterByRenameIndexContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByDropIndex(MySqlParser.AlterByDropIndexContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByDropForeignKey(MySqlParser.AlterByDropForeignKeyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByDisableKeys(MySqlParser.AlterByDisableKeysContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByEnableKeys(MySqlParser.AlterByEnableKeysContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByRename(MySqlParser.AlterByRenameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByOrder(MySqlParser.AlterByOrderContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByConvertCharset(MySqlParser.AlterByConvertCharsetContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByDefaultCharset(MySqlParser.AlterByDefaultCharsetContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByDiscardTablespace(MySqlParser.AlterByDiscardTablespaceContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByImportTablespace(MySqlParser.AlterByImportTablespaceContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByForce(MySqlParser.AlterByForceContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByValidate(MySqlParser.AlterByValidateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByAddPartition(MySqlParser.AlterByAddPartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByDropPartition(MySqlParser.AlterByDropPartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByDiscardPartition(MySqlParser.AlterByDiscardPartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByImportPartition(MySqlParser.AlterByImportPartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByTruncatePartition(MySqlParser.AlterByTruncatePartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByCoalescePartition(MySqlParser.AlterByCoalescePartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByReorganizePartition(MySqlParser.AlterByReorganizePartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByExchangePartition(MySqlParser.AlterByExchangePartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByAnalyzePartition(MySqlParser.AlterByAnalyzePartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByCheckPartition(MySqlParser.AlterByCheckPartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByOptimizePartition(MySqlParser.AlterByOptimizePartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByRebuildPartition(MySqlParser.AlterByRebuildPartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByRepairPartition(MySqlParser.AlterByRepairPartitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByRemovePartitioning(MySqlParser.AlterByRemovePartitioningContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterByUpgradePartitioning(MySqlParser.AlterByUpgradePartitioningContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDropDatabase(MySqlParser.DropDatabaseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDropEvent(MySqlParser.DropEventContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDropIndex(MySqlParser.DropIndexContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDropLogfileGroup(MySqlParser.DropLogfileGroupContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDropProcedure(MySqlParser.DropProcedureContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDropFunction(MySqlParser.DropFunctionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDropServer(MySqlParser.DropServerContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDropTable(MySqlParser.DropTableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDropTablespace(MySqlParser.DropTablespaceContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDropTrigger(MySqlParser.DropTriggerContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDropView(MySqlParser.DropViewContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRenameTable(MySqlParser.RenameTableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRenameTableClause(MySqlParser.RenameTableClauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTruncateTable(MySqlParser.TruncateTableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCallStatement(MySqlParser.CallStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeleteStatement(MySqlParser.DeleteStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDoStatement(MySqlParser.DoStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHandlerStatement(MySqlParser.HandlerStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInsertStatement(MySqlParser.InsertStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLoadDataStatement(MySqlParser.LoadDataStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLoadXmlStatement(MySqlParser.LoadXmlStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReplaceStatement(MySqlParser.ReplaceStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSimpleSelect(MySqlParser.SimpleSelectContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitParenthesisSelect(MySqlParser.ParenthesisSelectContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUnionSelect(MySqlParser.UnionSelectContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUnionParenthesisSelect(MySqlParser.UnionParenthesisSelectContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUpdateStatement(MySqlParser.UpdateStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInsertStatementValue(MySqlParser.InsertStatementValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUpdatedElement(MySqlParser.UpdatedElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAssignmentField(MySqlParser.AssignmentFieldContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLockClause(MySqlParser.LockClauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSingleDeleteStatement(MySqlParser.SingleDeleteStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMultipleDeleteStatement(MySqlParser.MultipleDeleteStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHandlerOpenStatement(MySqlParser.HandlerOpenStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHandlerReadIndexStatement(MySqlParser.HandlerReadIndexStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHandlerReadStatement(MySqlParser.HandlerReadStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHandlerCloseStatement(MySqlParser.HandlerCloseStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSingleUpdateStatement(MySqlParser.SingleUpdateStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMultipleUpdateStatement(MySqlParser.MultipleUpdateStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOrderByClause(MySqlParser.OrderByClauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOrderByExpression(MySqlParser.OrderByExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableSources(MySqlParser.TableSourcesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableSourceBase(MySqlParser.TableSourceBaseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableSourceNested(MySqlParser.TableSourceNestedContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAtomTableItem(MySqlParser.AtomTableItemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSubqueryTableItem(MySqlParser.SubqueryTableItemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableSourcesItem(MySqlParser.TableSourcesItemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIndexHint(MySqlParser.IndexHintContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIndexHintType(MySqlParser.IndexHintTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInnerJoin(MySqlParser.InnerJoinContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStraightJoin(MySqlParser.StraightJoinContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOuterJoin(MySqlParser.OuterJoinContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNaturalJoin(MySqlParser.NaturalJoinContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitQueryExpression(MySqlParser.QueryExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitQueryExpressionNointo(MySqlParser.QueryExpressionNointoContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitQuerySpecification(MySqlParser.QuerySpecificationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitQuerySpecificationNointo(MySqlParser.QuerySpecificationNointoContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUnionParenthesis(MySqlParser.UnionParenthesisContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUnionStatement(MySqlParser.UnionStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectSpec(MySqlParser.SelectSpecContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectElements(MySqlParser.SelectElementsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectStarElement(MySqlParser.SelectStarElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectColumnElement(MySqlParser.SelectColumnElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectFunctionElement(MySqlParser.SelectFunctionElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectExpressionElement(MySqlParser.SelectExpressionElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectIntoVariables(MySqlParser.SelectIntoVariablesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectIntoDumpFile(MySqlParser.SelectIntoDumpFileContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectIntoTextFile(MySqlParser.SelectIntoTextFileContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectFieldsInto(MySqlParser.SelectFieldsIntoContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectLinesInto(MySqlParser.SelectLinesIntoContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFromClause(MySqlParser.FromClauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGroupByItem(MySqlParser.GroupByItemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLimitClause(MySqlParser.LimitClauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLimitClauseAtom(MySqlParser.LimitClauseAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStartTransaction(MySqlParser.StartTransactionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBeginWork(MySqlParser.BeginWorkContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCommitWork(MySqlParser.CommitWorkContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRollbackWork(MySqlParser.RollbackWorkContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSavepointStatement(MySqlParser.SavepointStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRollbackStatement(MySqlParser.RollbackStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReleaseStatement(MySqlParser.ReleaseStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLockTables(MySqlParser.LockTablesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUnlockTables(MySqlParser.UnlockTablesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSetAutocommitStatement(MySqlParser.SetAutocommitStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSetTransactionStatement(MySqlParser.SetTransactionStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTransactionMode(MySqlParser.TransactionModeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLockTableElement(MySqlParser.LockTableElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLockAction(MySqlParser.LockActionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTransactionOption(MySqlParser.TransactionOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTransactionLevel(MySqlParser.TransactionLevelContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitChangeMaster(MySqlParser.ChangeMasterContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitChangeReplicationFilter(MySqlParser.ChangeReplicationFilterContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPurgeBinaryLogs(MySqlParser.PurgeBinaryLogsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitResetMaster(MySqlParser.ResetMasterContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitResetSlave(MySqlParser.ResetSlaveContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStartSlave(MySqlParser.StartSlaveContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStopSlave(MySqlParser.StopSlaveContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStartGroupReplication(MySqlParser.StartGroupReplicationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStopGroupReplication(MySqlParser.StopGroupReplicationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMasterStringOption(MySqlParser.MasterStringOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMasterDecimalOption(MySqlParser.MasterDecimalOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMasterBoolOption(MySqlParser.MasterBoolOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMasterRealOption(MySqlParser.MasterRealOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMasterUidListOption(MySqlParser.MasterUidListOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStringMasterOption(MySqlParser.StringMasterOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDecimalMasterOption(MySqlParser.DecimalMasterOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBoolMasterOption(MySqlParser.BoolMasterOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitChannelOption(MySqlParser.ChannelOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDoDbReplication(MySqlParser.DoDbReplicationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIgnoreDbReplication(MySqlParser.IgnoreDbReplicationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDoTableReplication(MySqlParser.DoTableReplicationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIgnoreTableReplication(MySqlParser.IgnoreTableReplicationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitWildDoTableReplication(MySqlParser.WildDoTableReplicationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitWildIgnoreTableReplication(MySqlParser.WildIgnoreTableReplicationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRewriteDbReplication(MySqlParser.RewriteDbReplicationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTablePair(MySqlParser.TablePairContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitThreadType(MySqlParser.ThreadTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGtidsUntilOption(MySqlParser.GtidsUntilOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMasterLogUntilOption(MySqlParser.MasterLogUntilOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRelayLogUntilOption(MySqlParser.RelayLogUntilOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSqlGapsUntilOption(MySqlParser.SqlGapsUntilOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUserConnectionOption(MySqlParser.UserConnectionOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPasswordConnectionOption(MySqlParser.PasswordConnectionOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDefaultAuthConnectionOption(MySqlParser.DefaultAuthConnectionOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPluginDirConnectionOption(MySqlParser.PluginDirConnectionOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGtuidSet(MySqlParser.GtuidSetContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitXaStartTransaction(MySqlParser.XaStartTransactionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitXaEndTransaction(MySqlParser.XaEndTransactionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitXaPrepareStatement(MySqlParser.XaPrepareStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitXaCommitWork(MySqlParser.XaCommitWorkContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitXaRollbackWork(MySqlParser.XaRollbackWorkContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitXaRecoverWork(MySqlParser.XaRecoverWorkContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPrepareStatement(MySqlParser.PrepareStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExecuteStatement(MySqlParser.ExecuteStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeallocatePrepare(MySqlParser.DeallocatePrepareContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRoutineBody(MySqlParser.RoutineBodyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBlockStatement(MySqlParser.BlockStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCaseStatement(MySqlParser.CaseStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIfStatement(MySqlParser.IfStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIterateStatement(MySqlParser.IterateStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLeaveStatement(MySqlParser.LeaveStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLoopStatement(MySqlParser.LoopStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRepeatStatement(MySqlParser.RepeatStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReturnStatement(MySqlParser.ReturnStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitWhileStatement(MySqlParser.WhileStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCloseCursor(MySqlParser.CloseCursorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFetchCursor(MySqlParser.FetchCursorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOpenCursor(MySqlParser.OpenCursorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclareVariable(MySqlParser.DeclareVariableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclareCondition(MySqlParser.DeclareConditionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclareCursor(MySqlParser.DeclareCursorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclareHandler(MySqlParser.DeclareHandlerContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHandlerConditionCode(MySqlParser.HandlerConditionCodeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHandlerConditionState(MySqlParser.HandlerConditionStateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHandlerConditionName(MySqlParser.HandlerConditionNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHandlerConditionWarning(MySqlParser.HandlerConditionWarningContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHandlerConditionNotfound(MySqlParser.HandlerConditionNotfoundContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHandlerConditionException(MySqlParser.HandlerConditionExceptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitProcedureSqlStatement(MySqlParser.ProcedureSqlStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCaseAlternative(MySqlParser.CaseAlternativeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitElifAlternative(MySqlParser.ElifAlternativeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterUserMysqlV56(MySqlParser.AlterUserMysqlV56Context ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlterUserMysqlV57(MySqlParser.AlterUserMysqlV57Context ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateUserMysqlV56(MySqlParser.CreateUserMysqlV56Context ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateUserMysqlV57(MySqlParser.CreateUserMysqlV57Context ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDropUser(MySqlParser.DropUserContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGrantStatement(MySqlParser.GrantStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGrantProxy(MySqlParser.GrantProxyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRenameUser(MySqlParser.RenameUserContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDetailRevoke(MySqlParser.DetailRevokeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShortRevoke(MySqlParser.ShortRevokeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRevokeProxy(MySqlParser.RevokeProxyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSetPasswordStatement(MySqlParser.SetPasswordStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUserSpecification(MySqlParser.UserSpecificationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPasswordAuthOption(MySqlParser.PasswordAuthOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStringAuthOption(MySqlParser.StringAuthOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHashAuthOption(MySqlParser.HashAuthOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSimpleAuthOption(MySqlParser.SimpleAuthOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTlsOption(MySqlParser.TlsOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUserResourceOption(MySqlParser.UserResourceOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUserPasswordOption(MySqlParser.UserPasswordOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUserLockOption(MySqlParser.UserLockOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPrivelegeClause(MySqlParser.PrivelegeClauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPrivilege(MySqlParser.PrivilegeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCurrentSchemaPriviLevel(MySqlParser.CurrentSchemaPriviLevelContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGlobalPrivLevel(MySqlParser.GlobalPrivLevelContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDefiniteSchemaPrivLevel(MySqlParser.DefiniteSchemaPrivLevelContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDefiniteFullTablePrivLevel(MySqlParser.DefiniteFullTablePrivLevelContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDefiniteFullTablePrivLevel2(MySqlParser.DefiniteFullTablePrivLevel2Context ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDefiniteTablePrivLevel(MySqlParser.DefiniteTablePrivLevelContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRenameUserClause(MySqlParser.RenameUserClauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAnalyzeTable(MySqlParser.AnalyzeTableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCheckTable(MySqlParser.CheckTableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitChecksumTable(MySqlParser.ChecksumTableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOptimizeTable(MySqlParser.OptimizeTableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRepairTable(MySqlParser.RepairTableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCheckTableOption(MySqlParser.CheckTableOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateUdfunction(MySqlParser.CreateUdfunctionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInstallPlugin(MySqlParser.InstallPluginContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUninstallPlugin(MySqlParser.UninstallPluginContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSetVariable(MySqlParser.SetVariableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSetCharset(MySqlParser.SetCharsetContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSetNames(MySqlParser.SetNamesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSetPassword(MySqlParser.SetPasswordContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSetTransaction(MySqlParser.SetTransactionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSetAutocommit(MySqlParser.SetAutocommitContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSetNewValueInsideTrigger(MySqlParser.SetNewValueInsideTriggerContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowMasterLogs(MySqlParser.ShowMasterLogsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowLogEvents(MySqlParser.ShowLogEventsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowObjectFilter(MySqlParser.ShowObjectFilterContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowColumns(MySqlParser.ShowColumnsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowCreateDb(MySqlParser.ShowCreateDbContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowCreateFullIdObject(MySqlParser.ShowCreateFullIdObjectContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowCreateUser(MySqlParser.ShowCreateUserContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowEngine(MySqlParser.ShowEngineContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowGlobalInfo(MySqlParser.ShowGlobalInfoContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowErrors(MySqlParser.ShowErrorsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowCountErrors(MySqlParser.ShowCountErrorsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowSchemaFilter(MySqlParser.ShowSchemaFilterContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowRoutine(MySqlParser.ShowRoutineContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowGrants(MySqlParser.ShowGrantsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowIndexes(MySqlParser.ShowIndexesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowOpenTables(MySqlParser.ShowOpenTablesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowProfile(MySqlParser.ShowProfileContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowSlaveStatus(MySqlParser.ShowSlaveStatusContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVariableClause(MySqlParser.VariableClauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowCommonEntity(MySqlParser.ShowCommonEntityContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowFilter(MySqlParser.ShowFilterContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowGlobalInfoClause(MySqlParser.ShowGlobalInfoClauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowSchemaEntity(MySqlParser.ShowSchemaEntityContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShowProfileType(MySqlParser.ShowProfileTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBinlogStatement(MySqlParser.BinlogStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCacheIndexStatement(MySqlParser.CacheIndexStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFlushStatement(MySqlParser.FlushStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitKillStatement(MySqlParser.KillStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLoadIndexIntoCache(MySqlParser.LoadIndexIntoCacheContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitResetStatement(MySqlParser.ResetStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitShutdownStatement(MySqlParser.ShutdownStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableIndexes(MySqlParser.TableIndexesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSimpleFlushOption(MySqlParser.SimpleFlushOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitChannelFlushOption(MySqlParser.ChannelFlushOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableFlushOption(MySqlParser.TableFlushOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFlushTableOption(MySqlParser.FlushTableOptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLoadedTableIndexes(MySqlParser.LoadedTableIndexesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSimpleDescribeStatement(MySqlParser.SimpleDescribeStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFullDescribeStatement(MySqlParser.FullDescribeStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHelpStatement(MySqlParser.HelpStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUseStatement(MySqlParser.UseStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSignalStatement(MySqlParser.SignalStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitResignalStatement(MySqlParser.ResignalStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSignalConditionInformation(MySqlParser.SignalConditionInformationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDiagnosticsStatement(MySqlParser.DiagnosticsStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDiagnosticsConditionInformationName(MySqlParser.DiagnosticsConditionInformationNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDescribeStatements(MySqlParser.DescribeStatementsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDescribeConnection(MySqlParser.DescribeConnectionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFullId(MySqlParser.FullIdContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableName(MySqlParser.TableNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFullColumnName(MySqlParser.FullColumnNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIndexColumnName(MySqlParser.IndexColumnNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUserName(MySqlParser.UserNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMysqlVariable(MySqlParser.MysqlVariableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCharsetName(MySqlParser.CharsetNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCollationName(MySqlParser.CollationNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEngineName(MySqlParser.EngineNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUuidSet(MySqlParser.UuidSetContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitXid(MySqlParser.XidContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitXuidStringId(MySqlParser.XuidStringIdContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAuthPlugin(MySqlParser.AuthPluginContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUid(MySqlParser.UidContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSimpleId(MySqlParser.SimpleIdContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDottedId(MySqlParser.DottedIdContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDecimalLiteral(MySqlParser.DecimalLiteralContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFileSizeLiteral(MySqlParser.FileSizeLiteralContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStringLiteral(MySqlParser.StringLiteralContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBooleanLiteral(MySqlParser.BooleanLiteralContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHexadecimalLiteral(MySqlParser.HexadecimalLiteralContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNullNotnull(MySqlParser.NullNotnullContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitConstant(MySqlParser.ConstantContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStringDataType(MySqlParser.StringDataTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNationalStringDataType(MySqlParser.NationalStringDataTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNationalVaryingStringDataType(MySqlParser.NationalVaryingStringDataTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDimensionDataType(MySqlParser.DimensionDataTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSimpleDataType(MySqlParser.SimpleDataTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCollectionDataType(MySqlParser.CollectionDataTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSpatialDataType(MySqlParser.SpatialDataTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCollectionOptions(MySqlParser.CollectionOptionsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitConvertedDataType(MySqlParser.ConvertedDataTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLengthOneDimension(MySqlParser.LengthOneDimensionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLengthTwoDimension(MySqlParser.LengthTwoDimensionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLengthTwoOptionalDimension(MySqlParser.LengthTwoOptionalDimensionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUidList(MySqlParser.UidListContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTables(MySqlParser.TablesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIndexColumnNames(MySqlParser.IndexColumnNamesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpressions(MySqlParser.ExpressionsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpressionsForUpdate(MySqlParser.ExpressionsForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpressionsWithDefaults(MySqlParser.ExpressionsWithDefaultsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitConstants(MySqlParser.ConstantsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSimpleStrings(MySqlParser.SimpleStringsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUserVariables(MySqlParser.UserVariablesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDefaultValue(MySqlParser.DefaultValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCurrentTimestamp(MySqlParser.CurrentTimestampContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpressionOrDefault(MySqlParser.ExpressionOrDefaultContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIfExists(MySqlParser.IfExistsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIfNotExists(MySqlParser.IfNotExistsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSpecificFunctionCall(MySqlParser.SpecificFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAggregateFunctionCall(MySqlParser.AggregateFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitScalarFunctionCall(MySqlParser.ScalarFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUdfFunctionCall(MySqlParser.UdfFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPasswordFunctionCall(MySqlParser.PasswordFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSimpleFunctionCall(MySqlParser.SimpleFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDataTypeFunctionCall(MySqlParser.DataTypeFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitValuesFunctionCall(MySqlParser.ValuesFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCaseFunctionCall(MySqlParser.CaseFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCharFunctionCall(MySqlParser.CharFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPositionFunctionCall(MySqlParser.PositionFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSubstrFunctionCall(MySqlParser.SubstrFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTrimFunctionCall(MySqlParser.TrimFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitWeightFunctionCall(MySqlParser.WeightFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExtractFunctionCall(MySqlParser.ExtractFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGetFormatFunctionCall(MySqlParser.GetFormatFunctionCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCaseFuncAlternative(MySqlParser.CaseFuncAlternativeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLevelWeightList(MySqlParser.LevelWeightListContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLevelWeightRange(MySqlParser.LevelWeightRangeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLevelInWeightListElement(MySqlParser.LevelInWeightListElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAggregateWindowedFunction(MySqlParser.AggregateWindowedFunctionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitScalarFunctionName(MySqlParser.ScalarFunctionNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPasswordFunctionClause(MySqlParser.PasswordFunctionClauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionArgs(MySqlParser.FunctionArgsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionArg(MySqlParser.FunctionArgContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIsExpression(MySqlParser.IsExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNotExpression(MySqlParser.NotExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLogicalExpression(MySqlParser.LogicalExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPredicateExpression(MySqlParser.PredicateExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSoundsLikePredicate(MySqlParser.SoundsLikePredicateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpressionAtomPredicate(MySqlParser.ExpressionAtomPredicateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInPredicate(MySqlParser.InPredicateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSubqueryComparasionPredicate(MySqlParser.SubqueryComparasionPredicateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBetweenPredicate(MySqlParser.BetweenPredicateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBinaryComparasionPredicate(MySqlParser.BinaryComparasionPredicateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIsNullPredicate(MySqlParser.IsNullPredicateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLikePredicate(MySqlParser.LikePredicateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRegexpPredicate(MySqlParser.RegexpPredicateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLogicalExpressionForUpdate(MySqlParser.LogicalExpressionForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPredicateExpressionForUpdate(MySqlParser.PredicateExpressionForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIsExpressionForUpdate(MySqlParser.IsExpressionForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNotExpressionForUpdate(MySqlParser.NotExpressionForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBinaryComparasionPredicateForUpdate(MySqlParser.BinaryComparasionPredicateForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLikePredicateForUpdate(MySqlParser.LikePredicateForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRegexpPredicateForUpdate(MySqlParser.RegexpPredicateForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIsNullPredicateForUpdate(MySqlParser.IsNullPredicateForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBetweenPredicateForUpdate(MySqlParser.BetweenPredicateForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSoundsLikePredicateForUpdate(MySqlParser.SoundsLikePredicateForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInPredicateForUpdate(MySqlParser.InPredicateForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSubqueryComparasionPredicateForUpdate(MySqlParser.SubqueryComparasionPredicateForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpressionAtomPredicateForUpdate(MySqlParser.ExpressionAtomPredicateForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIntervalExpressionAtomForUpdate(MySqlParser.IntervalExpressionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFullColumnNameExpressionAtomForUpdate(MySqlParser.FullColumnNameExpressionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMysqlVariableExpressionAtomForUpdate(MySqlParser.MysqlVariableExpressionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUnaryExpressionAtomForUpdate(MySqlParser.UnaryExpressionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNestedRowExpressionAtomForUpdate(MySqlParser.NestedRowExpressionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSubqueryExpessionAtomForUpdate(MySqlParser.SubqueryExpessionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBitExpressionAtomForUpdate(MySqlParser.BitExpressionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMathExpressionAtomForUpdate(MySqlParser.MathExpressionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitConstantExpressionAtomForUpdate(MySqlParser.ConstantExpressionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCollateExpressionAtomForUpdate(MySqlParser.CollateExpressionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBinaryExpressionAtomForUpdate(MySqlParser.BinaryExpressionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNestedExpressionAtomForUpdate(MySqlParser.NestedExpressionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExistsExpessionAtomForUpdate(MySqlParser.ExistsExpessionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionCallExpressionAtomForUpdate(MySqlParser.FunctionCallExpressionAtomForUpdateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUnaryExpressionAtom(MySqlParser.UnaryExpressionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCollateExpressionAtom(MySqlParser.CollateExpressionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSubqueryExpessionAtom(MySqlParser.SubqueryExpessionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMysqlVariableExpressionAtom(MySqlParser.MysqlVariableExpressionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNestedExpressionAtom(MySqlParser.NestedExpressionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNestedRowExpressionAtom(MySqlParser.NestedRowExpressionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMathExpressionAtom(MySqlParser.MathExpressionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIntervalExpressionAtom(MySqlParser.IntervalExpressionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExistsExpessionAtom(MySqlParser.ExistsExpessionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitConstantExpressionAtom(MySqlParser.ConstantExpressionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionCallExpressionAtom(MySqlParser.FunctionCallExpressionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBinaryExpressionAtom(MySqlParser.BinaryExpressionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFullColumnNameExpressionAtom(MySqlParser.FullColumnNameExpressionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBitExpressionAtom(MySqlParser.BitExpressionAtomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUnaryOperator(MySqlParser.UnaryOperatorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitComparisonOperator(MySqlParser.ComparisonOperatorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLogicalOperator(MySqlParser.LogicalOperatorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBitOperator(MySqlParser.BitOperatorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMathOperator(MySqlParser.MathOperatorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCharsetNameBase(MySqlParser.CharsetNameBaseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTransactionLevelBase(MySqlParser.TransactionLevelBaseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPrivilegesBase(MySqlParser.PrivilegesBaseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIntervalTypeBase(MySqlParser.IntervalTypeBaseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDataTypeBase(MySqlParser.DataTypeBaseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitKeywordsCanBeId(MySqlParser.KeywordsCanBeIdContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionNameBase(MySqlParser.FunctionNameBaseContext ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserListener.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserListener.java new file mode 100644 index 00000000000..04659ac563e --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserListener.java @@ -0,0 +1,6290 @@ +// Generated from E:/seata/seata/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr\MySqlParser.g4 by ANTLR 4.8 +package io.seata.sqlparser.antlr.mysql.parser; +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link MySqlParser}. + */ +public interface MySqlParserListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link MySqlParser#root}. + * @param ctx the parse tree + */ + void enterRoot(MySqlParser.RootContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#root}. + * @param ctx the parse tree + */ + void exitRoot(MySqlParser.RootContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#sqlStatements}. + * @param ctx the parse tree + */ + void enterSqlStatements(MySqlParser.SqlStatementsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#sqlStatements}. + * @param ctx the parse tree + */ + void exitSqlStatements(MySqlParser.SqlStatementsContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#sqlStatement}. + * @param ctx the parse tree + */ + void enterSqlStatement(MySqlParser.SqlStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#sqlStatement}. + * @param ctx the parse tree + */ + void exitSqlStatement(MySqlParser.SqlStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#emptyStatement}. + * @param ctx the parse tree + */ + void enterEmptyStatement(MySqlParser.EmptyStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#emptyStatement}. + * @param ctx the parse tree + */ + void exitEmptyStatement(MySqlParser.EmptyStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#ddlStatement}. + * @param ctx the parse tree + */ + void enterDdlStatement(MySqlParser.DdlStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#ddlStatement}. + * @param ctx the parse tree + */ + void exitDdlStatement(MySqlParser.DdlStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dmlStatement}. + * @param ctx the parse tree + */ + void enterDmlStatement(MySqlParser.DmlStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dmlStatement}. + * @param ctx the parse tree + */ + void exitDmlStatement(MySqlParser.DmlStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#transactionStatement}. + * @param ctx the parse tree + */ + void enterTransactionStatement(MySqlParser.TransactionStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#transactionStatement}. + * @param ctx the parse tree + */ + void exitTransactionStatement(MySqlParser.TransactionStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#replicationStatement}. + * @param ctx the parse tree + */ + void enterReplicationStatement(MySqlParser.ReplicationStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#replicationStatement}. + * @param ctx the parse tree + */ + void exitReplicationStatement(MySqlParser.ReplicationStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#preparedStatement}. + * @param ctx the parse tree + */ + void enterPreparedStatement(MySqlParser.PreparedStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#preparedStatement}. + * @param ctx the parse tree + */ + void exitPreparedStatement(MySqlParser.PreparedStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#compoundStatement}. + * @param ctx the parse tree + */ + void enterCompoundStatement(MySqlParser.CompoundStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#compoundStatement}. + * @param ctx the parse tree + */ + void exitCompoundStatement(MySqlParser.CompoundStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#administrationStatement}. + * @param ctx the parse tree + */ + void enterAdministrationStatement(MySqlParser.AdministrationStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#administrationStatement}. + * @param ctx the parse tree + */ + void exitAdministrationStatement(MySqlParser.AdministrationStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#utilityStatement}. + * @param ctx the parse tree + */ + void enterUtilityStatement(MySqlParser.UtilityStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#utilityStatement}. + * @param ctx the parse tree + */ + void exitUtilityStatement(MySqlParser.UtilityStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createDatabase}. + * @param ctx the parse tree + */ + void enterCreateDatabase(MySqlParser.CreateDatabaseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createDatabase}. + * @param ctx the parse tree + */ + void exitCreateDatabase(MySqlParser.CreateDatabaseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createEvent}. + * @param ctx the parse tree + */ + void enterCreateEvent(MySqlParser.CreateEventContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createEvent}. + * @param ctx the parse tree + */ + void exitCreateEvent(MySqlParser.CreateEventContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createIndex}. + * @param ctx the parse tree + */ + void enterCreateIndex(MySqlParser.CreateIndexContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createIndex}. + * @param ctx the parse tree + */ + void exitCreateIndex(MySqlParser.CreateIndexContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createLogfileGroup}. + * @param ctx the parse tree + */ + void enterCreateLogfileGroup(MySqlParser.CreateLogfileGroupContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createLogfileGroup}. + * @param ctx the parse tree + */ + void exitCreateLogfileGroup(MySqlParser.CreateLogfileGroupContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createProcedure}. + * @param ctx the parse tree + */ + void enterCreateProcedure(MySqlParser.CreateProcedureContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createProcedure}. + * @param ctx the parse tree + */ + void exitCreateProcedure(MySqlParser.CreateProcedureContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createFunction}. + * @param ctx the parse tree + */ + void enterCreateFunction(MySqlParser.CreateFunctionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createFunction}. + * @param ctx the parse tree + */ + void exitCreateFunction(MySqlParser.CreateFunctionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createServer}. + * @param ctx the parse tree + */ + void enterCreateServer(MySqlParser.CreateServerContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createServer}. + * @param ctx the parse tree + */ + void exitCreateServer(MySqlParser.CreateServerContext ctx); + /** + * Enter a parse tree produced by the {@code copyCreateTable} + * labeled alternative in {@link MySqlParser#createTable}. + * @param ctx the parse tree + */ + void enterCopyCreateTable(MySqlParser.CopyCreateTableContext ctx); + /** + * Exit a parse tree produced by the {@code copyCreateTable} + * labeled alternative in {@link MySqlParser#createTable}. + * @param ctx the parse tree + */ + void exitCopyCreateTable(MySqlParser.CopyCreateTableContext ctx); + /** + * Enter a parse tree produced by the {@code queryCreateTable} + * labeled alternative in {@link MySqlParser#createTable}. + * @param ctx the parse tree + */ + void enterQueryCreateTable(MySqlParser.QueryCreateTableContext ctx); + /** + * Exit a parse tree produced by the {@code queryCreateTable} + * labeled alternative in {@link MySqlParser#createTable}. + * @param ctx the parse tree + */ + void exitQueryCreateTable(MySqlParser.QueryCreateTableContext ctx); + /** + * Enter a parse tree produced by the {@code columnCreateTable} + * labeled alternative in {@link MySqlParser#createTable}. + * @param ctx the parse tree + */ + void enterColumnCreateTable(MySqlParser.ColumnCreateTableContext ctx); + /** + * Exit a parse tree produced by the {@code columnCreateTable} + * labeled alternative in {@link MySqlParser#createTable}. + * @param ctx the parse tree + */ + void exitColumnCreateTable(MySqlParser.ColumnCreateTableContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createTablespaceInnodb}. + * @param ctx the parse tree + */ + void enterCreateTablespaceInnodb(MySqlParser.CreateTablespaceInnodbContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createTablespaceInnodb}. + * @param ctx the parse tree + */ + void exitCreateTablespaceInnodb(MySqlParser.CreateTablespaceInnodbContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createTablespaceNdb}. + * @param ctx the parse tree + */ + void enterCreateTablespaceNdb(MySqlParser.CreateTablespaceNdbContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createTablespaceNdb}. + * @param ctx the parse tree + */ + void exitCreateTablespaceNdb(MySqlParser.CreateTablespaceNdbContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createTrigger}. + * @param ctx the parse tree + */ + void enterCreateTrigger(MySqlParser.CreateTriggerContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createTrigger}. + * @param ctx the parse tree + */ + void exitCreateTrigger(MySqlParser.CreateTriggerContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createView}. + * @param ctx the parse tree + */ + void enterCreateView(MySqlParser.CreateViewContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createView}. + * @param ctx the parse tree + */ + void exitCreateView(MySqlParser.CreateViewContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createDatabaseOption}. + * @param ctx the parse tree + */ + void enterCreateDatabaseOption(MySqlParser.CreateDatabaseOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createDatabaseOption}. + * @param ctx the parse tree + */ + void exitCreateDatabaseOption(MySqlParser.CreateDatabaseOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#ownerStatement}. + * @param ctx the parse tree + */ + void enterOwnerStatement(MySqlParser.OwnerStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#ownerStatement}. + * @param ctx the parse tree + */ + void exitOwnerStatement(MySqlParser.OwnerStatementContext ctx); + /** + * Enter a parse tree produced by the {@code preciseSchedule} + * labeled alternative in {@link MySqlParser#scheduleExpression}. + * @param ctx the parse tree + */ + void enterPreciseSchedule(MySqlParser.PreciseScheduleContext ctx); + /** + * Exit a parse tree produced by the {@code preciseSchedule} + * labeled alternative in {@link MySqlParser#scheduleExpression}. + * @param ctx the parse tree + */ + void exitPreciseSchedule(MySqlParser.PreciseScheduleContext ctx); + /** + * Enter a parse tree produced by the {@code intervalSchedule} + * labeled alternative in {@link MySqlParser#scheduleExpression}. + * @param ctx the parse tree + */ + void enterIntervalSchedule(MySqlParser.IntervalScheduleContext ctx); + /** + * Exit a parse tree produced by the {@code intervalSchedule} + * labeled alternative in {@link MySqlParser#scheduleExpression}. + * @param ctx the parse tree + */ + void exitIntervalSchedule(MySqlParser.IntervalScheduleContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#timestampValue}. + * @param ctx the parse tree + */ + void enterTimestampValue(MySqlParser.TimestampValueContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#timestampValue}. + * @param ctx the parse tree + */ + void exitTimestampValue(MySqlParser.TimestampValueContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#intervalExpr}. + * @param ctx the parse tree + */ + void enterIntervalExpr(MySqlParser.IntervalExprContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#intervalExpr}. + * @param ctx the parse tree + */ + void exitIntervalExpr(MySqlParser.IntervalExprContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#intervalType}. + * @param ctx the parse tree + */ + void enterIntervalType(MySqlParser.IntervalTypeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#intervalType}. + * @param ctx the parse tree + */ + void exitIntervalType(MySqlParser.IntervalTypeContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#enableType}. + * @param ctx the parse tree + */ + void enterEnableType(MySqlParser.EnableTypeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#enableType}. + * @param ctx the parse tree + */ + void exitEnableType(MySqlParser.EnableTypeContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#indexType}. + * @param ctx the parse tree + */ + void enterIndexType(MySqlParser.IndexTypeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#indexType}. + * @param ctx the parse tree + */ + void exitIndexType(MySqlParser.IndexTypeContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#indexOption}. + * @param ctx the parse tree + */ + void enterIndexOption(MySqlParser.IndexOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#indexOption}. + * @param ctx the parse tree + */ + void exitIndexOption(MySqlParser.IndexOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#procedureParameter}. + * @param ctx the parse tree + */ + void enterProcedureParameter(MySqlParser.ProcedureParameterContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#procedureParameter}. + * @param ctx the parse tree + */ + void exitProcedureParameter(MySqlParser.ProcedureParameterContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#functionParameter}. + * @param ctx the parse tree + */ + void enterFunctionParameter(MySqlParser.FunctionParameterContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#functionParameter}. + * @param ctx the parse tree + */ + void exitFunctionParameter(MySqlParser.FunctionParameterContext ctx); + /** + * Enter a parse tree produced by the {@code routineComment} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + */ + void enterRoutineComment(MySqlParser.RoutineCommentContext ctx); + /** + * Exit a parse tree produced by the {@code routineComment} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + */ + void exitRoutineComment(MySqlParser.RoutineCommentContext ctx); + /** + * Enter a parse tree produced by the {@code routineLanguage} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + */ + void enterRoutineLanguage(MySqlParser.RoutineLanguageContext ctx); + /** + * Exit a parse tree produced by the {@code routineLanguage} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + */ + void exitRoutineLanguage(MySqlParser.RoutineLanguageContext ctx); + /** + * Enter a parse tree produced by the {@code routineBehavior} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + */ + void enterRoutineBehavior(MySqlParser.RoutineBehaviorContext ctx); + /** + * Exit a parse tree produced by the {@code routineBehavior} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + */ + void exitRoutineBehavior(MySqlParser.RoutineBehaviorContext ctx); + /** + * Enter a parse tree produced by the {@code routineData} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + */ + void enterRoutineData(MySqlParser.RoutineDataContext ctx); + /** + * Exit a parse tree produced by the {@code routineData} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + */ + void exitRoutineData(MySqlParser.RoutineDataContext ctx); + /** + * Enter a parse tree produced by the {@code routineSecurity} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + */ + void enterRoutineSecurity(MySqlParser.RoutineSecurityContext ctx); + /** + * Exit a parse tree produced by the {@code routineSecurity} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + */ + void exitRoutineSecurity(MySqlParser.RoutineSecurityContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#serverOption}. + * @param ctx the parse tree + */ + void enterServerOption(MySqlParser.ServerOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#serverOption}. + * @param ctx the parse tree + */ + void exitServerOption(MySqlParser.ServerOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createDefinitions}. + * @param ctx the parse tree + */ + void enterCreateDefinitions(MySqlParser.CreateDefinitionsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createDefinitions}. + * @param ctx the parse tree + */ + void exitCreateDefinitions(MySqlParser.CreateDefinitionsContext ctx); + /** + * Enter a parse tree produced by the {@code columnDeclaration} + * labeled alternative in {@link MySqlParser#createDefinition}. + * @param ctx the parse tree + */ + void enterColumnDeclaration(MySqlParser.ColumnDeclarationContext ctx); + /** + * Exit a parse tree produced by the {@code columnDeclaration} + * labeled alternative in {@link MySqlParser#createDefinition}. + * @param ctx the parse tree + */ + void exitColumnDeclaration(MySqlParser.ColumnDeclarationContext ctx); + /** + * Enter a parse tree produced by the {@code constraintDeclaration} + * labeled alternative in {@link MySqlParser#createDefinition}. + * @param ctx the parse tree + */ + void enterConstraintDeclaration(MySqlParser.ConstraintDeclarationContext ctx); + /** + * Exit a parse tree produced by the {@code constraintDeclaration} + * labeled alternative in {@link MySqlParser#createDefinition}. + * @param ctx the parse tree + */ + void exitConstraintDeclaration(MySqlParser.ConstraintDeclarationContext ctx); + /** + * Enter a parse tree produced by the {@code indexDeclaration} + * labeled alternative in {@link MySqlParser#createDefinition}. + * @param ctx the parse tree + */ + void enterIndexDeclaration(MySqlParser.IndexDeclarationContext ctx); + /** + * Exit a parse tree produced by the {@code indexDeclaration} + * labeled alternative in {@link MySqlParser#createDefinition}. + * @param ctx the parse tree + */ + void exitIndexDeclaration(MySqlParser.IndexDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#columnDefinition}. + * @param ctx the parse tree + */ + void enterColumnDefinition(MySqlParser.ColumnDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#columnDefinition}. + * @param ctx the parse tree + */ + void exitColumnDefinition(MySqlParser.ColumnDefinitionContext ctx); + /** + * Enter a parse tree produced by the {@code nullColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void enterNullColumnConstraint(MySqlParser.NullColumnConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code nullColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void exitNullColumnConstraint(MySqlParser.NullColumnConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code defaultColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void enterDefaultColumnConstraint(MySqlParser.DefaultColumnConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code defaultColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void exitDefaultColumnConstraint(MySqlParser.DefaultColumnConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code autoIncrementColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void enterAutoIncrementColumnConstraint(MySqlParser.AutoIncrementColumnConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code autoIncrementColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void exitAutoIncrementColumnConstraint(MySqlParser.AutoIncrementColumnConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code primaryKeyColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void enterPrimaryKeyColumnConstraint(MySqlParser.PrimaryKeyColumnConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code primaryKeyColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void exitPrimaryKeyColumnConstraint(MySqlParser.PrimaryKeyColumnConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code uniqueKeyColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void enterUniqueKeyColumnConstraint(MySqlParser.UniqueKeyColumnConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code uniqueKeyColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void exitUniqueKeyColumnConstraint(MySqlParser.UniqueKeyColumnConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code commentColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void enterCommentColumnConstraint(MySqlParser.CommentColumnConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code commentColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void exitCommentColumnConstraint(MySqlParser.CommentColumnConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code formatColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void enterFormatColumnConstraint(MySqlParser.FormatColumnConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code formatColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void exitFormatColumnConstraint(MySqlParser.FormatColumnConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code storageColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void enterStorageColumnConstraint(MySqlParser.StorageColumnConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code storageColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void exitStorageColumnConstraint(MySqlParser.StorageColumnConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code referenceColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void enterReferenceColumnConstraint(MySqlParser.ReferenceColumnConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code referenceColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void exitReferenceColumnConstraint(MySqlParser.ReferenceColumnConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code collateColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void enterCollateColumnConstraint(MySqlParser.CollateColumnConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code collateColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void exitCollateColumnConstraint(MySqlParser.CollateColumnConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code generatedColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void enterGeneratedColumnConstraint(MySqlParser.GeneratedColumnConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code generatedColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void exitGeneratedColumnConstraint(MySqlParser.GeneratedColumnConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code serialDefaultColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void enterSerialDefaultColumnConstraint(MySqlParser.SerialDefaultColumnConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code serialDefaultColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + */ + void exitSerialDefaultColumnConstraint(MySqlParser.SerialDefaultColumnConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code primaryKeyTableConstraint} + * labeled alternative in {@link MySqlParser#tableConstraint}. + * @param ctx the parse tree + */ + void enterPrimaryKeyTableConstraint(MySqlParser.PrimaryKeyTableConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code primaryKeyTableConstraint} + * labeled alternative in {@link MySqlParser#tableConstraint}. + * @param ctx the parse tree + */ + void exitPrimaryKeyTableConstraint(MySqlParser.PrimaryKeyTableConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code uniqueKeyTableConstraint} + * labeled alternative in {@link MySqlParser#tableConstraint}. + * @param ctx the parse tree + */ + void enterUniqueKeyTableConstraint(MySqlParser.UniqueKeyTableConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code uniqueKeyTableConstraint} + * labeled alternative in {@link MySqlParser#tableConstraint}. + * @param ctx the parse tree + */ + void exitUniqueKeyTableConstraint(MySqlParser.UniqueKeyTableConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code foreignKeyTableConstraint} + * labeled alternative in {@link MySqlParser#tableConstraint}. + * @param ctx the parse tree + */ + void enterForeignKeyTableConstraint(MySqlParser.ForeignKeyTableConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code foreignKeyTableConstraint} + * labeled alternative in {@link MySqlParser#tableConstraint}. + * @param ctx the parse tree + */ + void exitForeignKeyTableConstraint(MySqlParser.ForeignKeyTableConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code checkTableConstraint} + * labeled alternative in {@link MySqlParser#tableConstraint}. + * @param ctx the parse tree + */ + void enterCheckTableConstraint(MySqlParser.CheckTableConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code checkTableConstraint} + * labeled alternative in {@link MySqlParser#tableConstraint}. + * @param ctx the parse tree + */ + void exitCheckTableConstraint(MySqlParser.CheckTableConstraintContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#referenceDefinition}. + * @param ctx the parse tree + */ + void enterReferenceDefinition(MySqlParser.ReferenceDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#referenceDefinition}. + * @param ctx the parse tree + */ + void exitReferenceDefinition(MySqlParser.ReferenceDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#referenceAction}. + * @param ctx the parse tree + */ + void enterReferenceAction(MySqlParser.ReferenceActionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#referenceAction}. + * @param ctx the parse tree + */ + void exitReferenceAction(MySqlParser.ReferenceActionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#referenceControlType}. + * @param ctx the parse tree + */ + void enterReferenceControlType(MySqlParser.ReferenceControlTypeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#referenceControlType}. + * @param ctx the parse tree + */ + void exitReferenceControlType(MySqlParser.ReferenceControlTypeContext ctx); + /** + * Enter a parse tree produced by the {@code simpleIndexDeclaration} + * labeled alternative in {@link MySqlParser#indexColumnDefinition}. + * @param ctx the parse tree + */ + void enterSimpleIndexDeclaration(MySqlParser.SimpleIndexDeclarationContext ctx); + /** + * Exit a parse tree produced by the {@code simpleIndexDeclaration} + * labeled alternative in {@link MySqlParser#indexColumnDefinition}. + * @param ctx the parse tree + */ + void exitSimpleIndexDeclaration(MySqlParser.SimpleIndexDeclarationContext ctx); + /** + * Enter a parse tree produced by the {@code specialIndexDeclaration} + * labeled alternative in {@link MySqlParser#indexColumnDefinition}. + * @param ctx the parse tree + */ + void enterSpecialIndexDeclaration(MySqlParser.SpecialIndexDeclarationContext ctx); + /** + * Exit a parse tree produced by the {@code specialIndexDeclaration} + * labeled alternative in {@link MySqlParser#indexColumnDefinition}. + * @param ctx the parse tree + */ + void exitSpecialIndexDeclaration(MySqlParser.SpecialIndexDeclarationContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionEngine} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionEngine(MySqlParser.TableOptionEngineContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionEngine} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionEngine(MySqlParser.TableOptionEngineContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionAutoIncrement} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionAutoIncrement(MySqlParser.TableOptionAutoIncrementContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionAutoIncrement} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionAutoIncrement(MySqlParser.TableOptionAutoIncrementContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionAverage} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionAverage(MySqlParser.TableOptionAverageContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionAverage} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionAverage(MySqlParser.TableOptionAverageContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionCharset} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionCharset(MySqlParser.TableOptionCharsetContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionCharset} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionCharset(MySqlParser.TableOptionCharsetContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionChecksum} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionChecksum(MySqlParser.TableOptionChecksumContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionChecksum} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionChecksum(MySqlParser.TableOptionChecksumContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionCollate} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionCollate(MySqlParser.TableOptionCollateContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionCollate} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionCollate(MySqlParser.TableOptionCollateContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionComment} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionComment(MySqlParser.TableOptionCommentContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionComment} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionComment(MySqlParser.TableOptionCommentContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionCompression} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionCompression(MySqlParser.TableOptionCompressionContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionCompression} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionCompression(MySqlParser.TableOptionCompressionContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionConnection} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionConnection(MySqlParser.TableOptionConnectionContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionConnection} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionConnection(MySqlParser.TableOptionConnectionContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionDataDirectory} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionDataDirectory(MySqlParser.TableOptionDataDirectoryContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionDataDirectory} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionDataDirectory(MySqlParser.TableOptionDataDirectoryContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionDelay} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionDelay(MySqlParser.TableOptionDelayContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionDelay} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionDelay(MySqlParser.TableOptionDelayContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionEncryption} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionEncryption(MySqlParser.TableOptionEncryptionContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionEncryption} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionEncryption(MySqlParser.TableOptionEncryptionContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionIndexDirectory} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionIndexDirectory(MySqlParser.TableOptionIndexDirectoryContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionIndexDirectory} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionIndexDirectory(MySqlParser.TableOptionIndexDirectoryContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionInsertMethod} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionInsertMethod(MySqlParser.TableOptionInsertMethodContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionInsertMethod} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionInsertMethod(MySqlParser.TableOptionInsertMethodContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionKeyBlockSize} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionKeyBlockSize(MySqlParser.TableOptionKeyBlockSizeContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionKeyBlockSize} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionKeyBlockSize(MySqlParser.TableOptionKeyBlockSizeContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionMaxRows} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionMaxRows(MySqlParser.TableOptionMaxRowsContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionMaxRows} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionMaxRows(MySqlParser.TableOptionMaxRowsContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionMinRows} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionMinRows(MySqlParser.TableOptionMinRowsContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionMinRows} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionMinRows(MySqlParser.TableOptionMinRowsContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionPackKeys} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionPackKeys(MySqlParser.TableOptionPackKeysContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionPackKeys} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionPackKeys(MySqlParser.TableOptionPackKeysContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionPassword} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionPassword(MySqlParser.TableOptionPasswordContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionPassword} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionPassword(MySqlParser.TableOptionPasswordContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionRowFormat} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionRowFormat(MySqlParser.TableOptionRowFormatContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionRowFormat} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionRowFormat(MySqlParser.TableOptionRowFormatContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionRecalculation} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionRecalculation(MySqlParser.TableOptionRecalculationContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionRecalculation} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionRecalculation(MySqlParser.TableOptionRecalculationContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionPersistent} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionPersistent(MySqlParser.TableOptionPersistentContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionPersistent} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionPersistent(MySqlParser.TableOptionPersistentContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionSamplePage} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionSamplePage(MySqlParser.TableOptionSamplePageContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionSamplePage} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionSamplePage(MySqlParser.TableOptionSamplePageContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionTablespace} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionTablespace(MySqlParser.TableOptionTablespaceContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionTablespace} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionTablespace(MySqlParser.TableOptionTablespaceContext ctx); + /** + * Enter a parse tree produced by the {@code tableOptionUnion} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void enterTableOptionUnion(MySqlParser.TableOptionUnionContext ctx); + /** + * Exit a parse tree produced by the {@code tableOptionUnion} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + */ + void exitTableOptionUnion(MySqlParser.TableOptionUnionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#tablespaceStorage}. + * @param ctx the parse tree + */ + void enterTablespaceStorage(MySqlParser.TablespaceStorageContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#tablespaceStorage}. + * @param ctx the parse tree + */ + void exitTablespaceStorage(MySqlParser.TablespaceStorageContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#partitionDefinitions}. + * @param ctx the parse tree + */ + void enterPartitionDefinitions(MySqlParser.PartitionDefinitionsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#partitionDefinitions}. + * @param ctx the parse tree + */ + void exitPartitionDefinitions(MySqlParser.PartitionDefinitionsContext ctx); + /** + * Enter a parse tree produced by the {@code partitionFunctionHash} + * labeled alternative in {@link MySqlParser#partitionFunctionDefinition}. + * @param ctx the parse tree + */ + void enterPartitionFunctionHash(MySqlParser.PartitionFunctionHashContext ctx); + /** + * Exit a parse tree produced by the {@code partitionFunctionHash} + * labeled alternative in {@link MySqlParser#partitionFunctionDefinition}. + * @param ctx the parse tree + */ + void exitPartitionFunctionHash(MySqlParser.PartitionFunctionHashContext ctx); + /** + * Enter a parse tree produced by the {@code partitionFunctionKey} + * labeled alternative in {@link MySqlParser#partitionFunctionDefinition}. + * @param ctx the parse tree + */ + void enterPartitionFunctionKey(MySqlParser.PartitionFunctionKeyContext ctx); + /** + * Exit a parse tree produced by the {@code partitionFunctionKey} + * labeled alternative in {@link MySqlParser#partitionFunctionDefinition}. + * @param ctx the parse tree + */ + void exitPartitionFunctionKey(MySqlParser.PartitionFunctionKeyContext ctx); + /** + * Enter a parse tree produced by the {@code partitionFunctionRange} + * labeled alternative in {@link MySqlParser#partitionFunctionDefinition}. + * @param ctx the parse tree + */ + void enterPartitionFunctionRange(MySqlParser.PartitionFunctionRangeContext ctx); + /** + * Exit a parse tree produced by the {@code partitionFunctionRange} + * labeled alternative in {@link MySqlParser#partitionFunctionDefinition}. + * @param ctx the parse tree + */ + void exitPartitionFunctionRange(MySqlParser.PartitionFunctionRangeContext ctx); + /** + * Enter a parse tree produced by the {@code partitionFunctionList} + * labeled alternative in {@link MySqlParser#partitionFunctionDefinition}. + * @param ctx the parse tree + */ + void enterPartitionFunctionList(MySqlParser.PartitionFunctionListContext ctx); + /** + * Exit a parse tree produced by the {@code partitionFunctionList} + * labeled alternative in {@link MySqlParser#partitionFunctionDefinition}. + * @param ctx the parse tree + */ + void exitPartitionFunctionList(MySqlParser.PartitionFunctionListContext ctx); + /** + * Enter a parse tree produced by the {@code subPartitionFunctionHash} + * labeled alternative in {@link MySqlParser#subpartitionFunctionDefinition}. + * @param ctx the parse tree + */ + void enterSubPartitionFunctionHash(MySqlParser.SubPartitionFunctionHashContext ctx); + /** + * Exit a parse tree produced by the {@code subPartitionFunctionHash} + * labeled alternative in {@link MySqlParser#subpartitionFunctionDefinition}. + * @param ctx the parse tree + */ + void exitSubPartitionFunctionHash(MySqlParser.SubPartitionFunctionHashContext ctx); + /** + * Enter a parse tree produced by the {@code subPartitionFunctionKey} + * labeled alternative in {@link MySqlParser#subpartitionFunctionDefinition}. + * @param ctx the parse tree + */ + void enterSubPartitionFunctionKey(MySqlParser.SubPartitionFunctionKeyContext ctx); + /** + * Exit a parse tree produced by the {@code subPartitionFunctionKey} + * labeled alternative in {@link MySqlParser#subpartitionFunctionDefinition}. + * @param ctx the parse tree + */ + void exitSubPartitionFunctionKey(MySqlParser.SubPartitionFunctionKeyContext ctx); + /** + * Enter a parse tree produced by the {@code partitionComparision} + * labeled alternative in {@link MySqlParser#partitionDefinition}. + * @param ctx the parse tree + */ + void enterPartitionComparision(MySqlParser.PartitionComparisionContext ctx); + /** + * Exit a parse tree produced by the {@code partitionComparision} + * labeled alternative in {@link MySqlParser#partitionDefinition}. + * @param ctx the parse tree + */ + void exitPartitionComparision(MySqlParser.PartitionComparisionContext ctx); + /** + * Enter a parse tree produced by the {@code partitionListAtom} + * labeled alternative in {@link MySqlParser#partitionDefinition}. + * @param ctx the parse tree + */ + void enterPartitionListAtom(MySqlParser.PartitionListAtomContext ctx); + /** + * Exit a parse tree produced by the {@code partitionListAtom} + * labeled alternative in {@link MySqlParser#partitionDefinition}. + * @param ctx the parse tree + */ + void exitPartitionListAtom(MySqlParser.PartitionListAtomContext ctx); + /** + * Enter a parse tree produced by the {@code partitionListVector} + * labeled alternative in {@link MySqlParser#partitionDefinition}. + * @param ctx the parse tree + */ + void enterPartitionListVector(MySqlParser.PartitionListVectorContext ctx); + /** + * Exit a parse tree produced by the {@code partitionListVector} + * labeled alternative in {@link MySqlParser#partitionDefinition}. + * @param ctx the parse tree + */ + void exitPartitionListVector(MySqlParser.PartitionListVectorContext ctx); + /** + * Enter a parse tree produced by the {@code partitionSimple} + * labeled alternative in {@link MySqlParser#partitionDefinition}. + * @param ctx the parse tree + */ + void enterPartitionSimple(MySqlParser.PartitionSimpleContext ctx); + /** + * Exit a parse tree produced by the {@code partitionSimple} + * labeled alternative in {@link MySqlParser#partitionDefinition}. + * @param ctx the parse tree + */ + void exitPartitionSimple(MySqlParser.PartitionSimpleContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#partitionDefinerAtom}. + * @param ctx the parse tree + */ + void enterPartitionDefinerAtom(MySqlParser.PartitionDefinerAtomContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#partitionDefinerAtom}. + * @param ctx the parse tree + */ + void exitPartitionDefinerAtom(MySqlParser.PartitionDefinerAtomContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#partitionDefinerVector}. + * @param ctx the parse tree + */ + void enterPartitionDefinerVector(MySqlParser.PartitionDefinerVectorContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#partitionDefinerVector}. + * @param ctx the parse tree + */ + void exitPartitionDefinerVector(MySqlParser.PartitionDefinerVectorContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#subpartitionDefinition}. + * @param ctx the parse tree + */ + void enterSubpartitionDefinition(MySqlParser.SubpartitionDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#subpartitionDefinition}. + * @param ctx the parse tree + */ + void exitSubpartitionDefinition(MySqlParser.SubpartitionDefinitionContext ctx); + /** + * Enter a parse tree produced by the {@code partitionOptionEngine} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void enterPartitionOptionEngine(MySqlParser.PartitionOptionEngineContext ctx); + /** + * Exit a parse tree produced by the {@code partitionOptionEngine} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void exitPartitionOptionEngine(MySqlParser.PartitionOptionEngineContext ctx); + /** + * Enter a parse tree produced by the {@code partitionOptionComment} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void enterPartitionOptionComment(MySqlParser.PartitionOptionCommentContext ctx); + /** + * Exit a parse tree produced by the {@code partitionOptionComment} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void exitPartitionOptionComment(MySqlParser.PartitionOptionCommentContext ctx); + /** + * Enter a parse tree produced by the {@code partitionOptionDataDirectory} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void enterPartitionOptionDataDirectory(MySqlParser.PartitionOptionDataDirectoryContext ctx); + /** + * Exit a parse tree produced by the {@code partitionOptionDataDirectory} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void exitPartitionOptionDataDirectory(MySqlParser.PartitionOptionDataDirectoryContext ctx); + /** + * Enter a parse tree produced by the {@code partitionOptionIndexDirectory} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void enterPartitionOptionIndexDirectory(MySqlParser.PartitionOptionIndexDirectoryContext ctx); + /** + * Exit a parse tree produced by the {@code partitionOptionIndexDirectory} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void exitPartitionOptionIndexDirectory(MySqlParser.PartitionOptionIndexDirectoryContext ctx); + /** + * Enter a parse tree produced by the {@code partitionOptionMaxRows} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void enterPartitionOptionMaxRows(MySqlParser.PartitionOptionMaxRowsContext ctx); + /** + * Exit a parse tree produced by the {@code partitionOptionMaxRows} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void exitPartitionOptionMaxRows(MySqlParser.PartitionOptionMaxRowsContext ctx); + /** + * Enter a parse tree produced by the {@code partitionOptionMinRows} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void enterPartitionOptionMinRows(MySqlParser.PartitionOptionMinRowsContext ctx); + /** + * Exit a parse tree produced by the {@code partitionOptionMinRows} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void exitPartitionOptionMinRows(MySqlParser.PartitionOptionMinRowsContext ctx); + /** + * Enter a parse tree produced by the {@code partitionOptionTablespace} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void enterPartitionOptionTablespace(MySqlParser.PartitionOptionTablespaceContext ctx); + /** + * Exit a parse tree produced by the {@code partitionOptionTablespace} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void exitPartitionOptionTablespace(MySqlParser.PartitionOptionTablespaceContext ctx); + /** + * Enter a parse tree produced by the {@code partitionOptionNodeGroup} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void enterPartitionOptionNodeGroup(MySqlParser.PartitionOptionNodeGroupContext ctx); + /** + * Exit a parse tree produced by the {@code partitionOptionNodeGroup} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + */ + void exitPartitionOptionNodeGroup(MySqlParser.PartitionOptionNodeGroupContext ctx); + /** + * Enter a parse tree produced by the {@code alterSimpleDatabase} + * labeled alternative in {@link MySqlParser#alterDatabase}. + * @param ctx the parse tree + */ + void enterAlterSimpleDatabase(MySqlParser.AlterSimpleDatabaseContext ctx); + /** + * Exit a parse tree produced by the {@code alterSimpleDatabase} + * labeled alternative in {@link MySqlParser#alterDatabase}. + * @param ctx the parse tree + */ + void exitAlterSimpleDatabase(MySqlParser.AlterSimpleDatabaseContext ctx); + /** + * Enter a parse tree produced by the {@code alterUpgradeName} + * labeled alternative in {@link MySqlParser#alterDatabase}. + * @param ctx the parse tree + */ + void enterAlterUpgradeName(MySqlParser.AlterUpgradeNameContext ctx); + /** + * Exit a parse tree produced by the {@code alterUpgradeName} + * labeled alternative in {@link MySqlParser#alterDatabase}. + * @param ctx the parse tree + */ + void exitAlterUpgradeName(MySqlParser.AlterUpgradeNameContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#alterEvent}. + * @param ctx the parse tree + */ + void enterAlterEvent(MySqlParser.AlterEventContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#alterEvent}. + * @param ctx the parse tree + */ + void exitAlterEvent(MySqlParser.AlterEventContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#alterFunction}. + * @param ctx the parse tree + */ + void enterAlterFunction(MySqlParser.AlterFunctionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#alterFunction}. + * @param ctx the parse tree + */ + void exitAlterFunction(MySqlParser.AlterFunctionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#alterInstance}. + * @param ctx the parse tree + */ + void enterAlterInstance(MySqlParser.AlterInstanceContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#alterInstance}. + * @param ctx the parse tree + */ + void exitAlterInstance(MySqlParser.AlterInstanceContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#alterLogfileGroup}. + * @param ctx the parse tree + */ + void enterAlterLogfileGroup(MySqlParser.AlterLogfileGroupContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#alterLogfileGroup}. + * @param ctx the parse tree + */ + void exitAlterLogfileGroup(MySqlParser.AlterLogfileGroupContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#alterProcedure}. + * @param ctx the parse tree + */ + void enterAlterProcedure(MySqlParser.AlterProcedureContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#alterProcedure}. + * @param ctx the parse tree + */ + void exitAlterProcedure(MySqlParser.AlterProcedureContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#alterServer}. + * @param ctx the parse tree + */ + void enterAlterServer(MySqlParser.AlterServerContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#alterServer}. + * @param ctx the parse tree + */ + void exitAlterServer(MySqlParser.AlterServerContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#alterTable}. + * @param ctx the parse tree + */ + void enterAlterTable(MySqlParser.AlterTableContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#alterTable}. + * @param ctx the parse tree + */ + void exitAlterTable(MySqlParser.AlterTableContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#alterTablespace}. + * @param ctx the parse tree + */ + void enterAlterTablespace(MySqlParser.AlterTablespaceContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#alterTablespace}. + * @param ctx the parse tree + */ + void exitAlterTablespace(MySqlParser.AlterTablespaceContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#alterView}. + * @param ctx the parse tree + */ + void enterAlterView(MySqlParser.AlterViewContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#alterView}. + * @param ctx the parse tree + */ + void exitAlterView(MySqlParser.AlterViewContext ctx); + /** + * Enter a parse tree produced by the {@code alterByTableOption} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByTableOption(MySqlParser.AlterByTableOptionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByTableOption} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByTableOption(MySqlParser.AlterByTableOptionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByAddColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByAddColumn(MySqlParser.AlterByAddColumnContext ctx); + /** + * Exit a parse tree produced by the {@code alterByAddColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByAddColumn(MySqlParser.AlterByAddColumnContext ctx); + /** + * Enter a parse tree produced by the {@code alterByAddColumns} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByAddColumns(MySqlParser.AlterByAddColumnsContext ctx); + /** + * Exit a parse tree produced by the {@code alterByAddColumns} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByAddColumns(MySqlParser.AlterByAddColumnsContext ctx); + /** + * Enter a parse tree produced by the {@code alterByAddIndex} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByAddIndex(MySqlParser.AlterByAddIndexContext ctx); + /** + * Exit a parse tree produced by the {@code alterByAddIndex} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByAddIndex(MySqlParser.AlterByAddIndexContext ctx); + /** + * Enter a parse tree produced by the {@code alterByAddPrimaryKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByAddPrimaryKey(MySqlParser.AlterByAddPrimaryKeyContext ctx); + /** + * Exit a parse tree produced by the {@code alterByAddPrimaryKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByAddPrimaryKey(MySqlParser.AlterByAddPrimaryKeyContext ctx); + /** + * Enter a parse tree produced by the {@code alterByAddUniqueKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByAddUniqueKey(MySqlParser.AlterByAddUniqueKeyContext ctx); + /** + * Exit a parse tree produced by the {@code alterByAddUniqueKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByAddUniqueKey(MySqlParser.AlterByAddUniqueKeyContext ctx); + /** + * Enter a parse tree produced by the {@code alterByAddSpecialIndex} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByAddSpecialIndex(MySqlParser.AlterByAddSpecialIndexContext ctx); + /** + * Exit a parse tree produced by the {@code alterByAddSpecialIndex} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByAddSpecialIndex(MySqlParser.AlterByAddSpecialIndexContext ctx); + /** + * Enter a parse tree produced by the {@code alterByAddForeignKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByAddForeignKey(MySqlParser.AlterByAddForeignKeyContext ctx); + /** + * Exit a parse tree produced by the {@code alterByAddForeignKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByAddForeignKey(MySqlParser.AlterByAddForeignKeyContext ctx); + /** + * Enter a parse tree produced by the {@code alterByAddCheckTableConstraint} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByAddCheckTableConstraint(MySqlParser.AlterByAddCheckTableConstraintContext ctx); + /** + * Exit a parse tree produced by the {@code alterByAddCheckTableConstraint} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByAddCheckTableConstraint(MySqlParser.AlterByAddCheckTableConstraintContext ctx); + /** + * Enter a parse tree produced by the {@code alterBySetAlgorithm} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterBySetAlgorithm(MySqlParser.AlterBySetAlgorithmContext ctx); + /** + * Exit a parse tree produced by the {@code alterBySetAlgorithm} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterBySetAlgorithm(MySqlParser.AlterBySetAlgorithmContext ctx); + /** + * Enter a parse tree produced by the {@code alterByChangeDefault} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByChangeDefault(MySqlParser.AlterByChangeDefaultContext ctx); + /** + * Exit a parse tree produced by the {@code alterByChangeDefault} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByChangeDefault(MySqlParser.AlterByChangeDefaultContext ctx); + /** + * Enter a parse tree produced by the {@code alterByChangeColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByChangeColumn(MySqlParser.AlterByChangeColumnContext ctx); + /** + * Exit a parse tree produced by the {@code alterByChangeColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByChangeColumn(MySqlParser.AlterByChangeColumnContext ctx); + /** + * Enter a parse tree produced by the {@code alterByRenameColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByRenameColumn(MySqlParser.AlterByRenameColumnContext ctx); + /** + * Exit a parse tree produced by the {@code alterByRenameColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByRenameColumn(MySqlParser.AlterByRenameColumnContext ctx); + /** + * Enter a parse tree produced by the {@code alterByLock} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByLock(MySqlParser.AlterByLockContext ctx); + /** + * Exit a parse tree produced by the {@code alterByLock} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByLock(MySqlParser.AlterByLockContext ctx); + /** + * Enter a parse tree produced by the {@code alterByModifyColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByModifyColumn(MySqlParser.AlterByModifyColumnContext ctx); + /** + * Exit a parse tree produced by the {@code alterByModifyColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByModifyColumn(MySqlParser.AlterByModifyColumnContext ctx); + /** + * Enter a parse tree produced by the {@code alterByDropColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByDropColumn(MySqlParser.AlterByDropColumnContext ctx); + /** + * Exit a parse tree produced by the {@code alterByDropColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByDropColumn(MySqlParser.AlterByDropColumnContext ctx); + /** + * Enter a parse tree produced by the {@code alterByDropPrimaryKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByDropPrimaryKey(MySqlParser.AlterByDropPrimaryKeyContext ctx); + /** + * Exit a parse tree produced by the {@code alterByDropPrimaryKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByDropPrimaryKey(MySqlParser.AlterByDropPrimaryKeyContext ctx); + /** + * Enter a parse tree produced by the {@code alterByRenameIndex} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByRenameIndex(MySqlParser.AlterByRenameIndexContext ctx); + /** + * Exit a parse tree produced by the {@code alterByRenameIndex} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByRenameIndex(MySqlParser.AlterByRenameIndexContext ctx); + /** + * Enter a parse tree produced by the {@code alterByDropIndex} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByDropIndex(MySqlParser.AlterByDropIndexContext ctx); + /** + * Exit a parse tree produced by the {@code alterByDropIndex} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByDropIndex(MySqlParser.AlterByDropIndexContext ctx); + /** + * Enter a parse tree produced by the {@code alterByDropForeignKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByDropForeignKey(MySqlParser.AlterByDropForeignKeyContext ctx); + /** + * Exit a parse tree produced by the {@code alterByDropForeignKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByDropForeignKey(MySqlParser.AlterByDropForeignKeyContext ctx); + /** + * Enter a parse tree produced by the {@code alterByDisableKeys} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByDisableKeys(MySqlParser.AlterByDisableKeysContext ctx); + /** + * Exit a parse tree produced by the {@code alterByDisableKeys} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByDisableKeys(MySqlParser.AlterByDisableKeysContext ctx); + /** + * Enter a parse tree produced by the {@code alterByEnableKeys} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByEnableKeys(MySqlParser.AlterByEnableKeysContext ctx); + /** + * Exit a parse tree produced by the {@code alterByEnableKeys} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByEnableKeys(MySqlParser.AlterByEnableKeysContext ctx); + /** + * Enter a parse tree produced by the {@code alterByRename} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByRename(MySqlParser.AlterByRenameContext ctx); + /** + * Exit a parse tree produced by the {@code alterByRename} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByRename(MySqlParser.AlterByRenameContext ctx); + /** + * Enter a parse tree produced by the {@code alterByOrder} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByOrder(MySqlParser.AlterByOrderContext ctx); + /** + * Exit a parse tree produced by the {@code alterByOrder} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByOrder(MySqlParser.AlterByOrderContext ctx); + /** + * Enter a parse tree produced by the {@code alterByConvertCharset} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByConvertCharset(MySqlParser.AlterByConvertCharsetContext ctx); + /** + * Exit a parse tree produced by the {@code alterByConvertCharset} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByConvertCharset(MySqlParser.AlterByConvertCharsetContext ctx); + /** + * Enter a parse tree produced by the {@code alterByDefaultCharset} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByDefaultCharset(MySqlParser.AlterByDefaultCharsetContext ctx); + /** + * Exit a parse tree produced by the {@code alterByDefaultCharset} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByDefaultCharset(MySqlParser.AlterByDefaultCharsetContext ctx); + /** + * Enter a parse tree produced by the {@code alterByDiscardTablespace} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByDiscardTablespace(MySqlParser.AlterByDiscardTablespaceContext ctx); + /** + * Exit a parse tree produced by the {@code alterByDiscardTablespace} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByDiscardTablespace(MySqlParser.AlterByDiscardTablespaceContext ctx); + /** + * Enter a parse tree produced by the {@code alterByImportTablespace} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByImportTablespace(MySqlParser.AlterByImportTablespaceContext ctx); + /** + * Exit a parse tree produced by the {@code alterByImportTablespace} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByImportTablespace(MySqlParser.AlterByImportTablespaceContext ctx); + /** + * Enter a parse tree produced by the {@code alterByForce} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByForce(MySqlParser.AlterByForceContext ctx); + /** + * Exit a parse tree produced by the {@code alterByForce} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByForce(MySqlParser.AlterByForceContext ctx); + /** + * Enter a parse tree produced by the {@code alterByValidate} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByValidate(MySqlParser.AlterByValidateContext ctx); + /** + * Exit a parse tree produced by the {@code alterByValidate} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByValidate(MySqlParser.AlterByValidateContext ctx); + /** + * Enter a parse tree produced by the {@code alterByAddPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByAddPartition(MySqlParser.AlterByAddPartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByAddPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByAddPartition(MySqlParser.AlterByAddPartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByDropPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByDropPartition(MySqlParser.AlterByDropPartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByDropPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByDropPartition(MySqlParser.AlterByDropPartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByDiscardPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByDiscardPartition(MySqlParser.AlterByDiscardPartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByDiscardPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByDiscardPartition(MySqlParser.AlterByDiscardPartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByImportPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByImportPartition(MySqlParser.AlterByImportPartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByImportPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByImportPartition(MySqlParser.AlterByImportPartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByTruncatePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByTruncatePartition(MySqlParser.AlterByTruncatePartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByTruncatePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByTruncatePartition(MySqlParser.AlterByTruncatePartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByCoalescePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByCoalescePartition(MySqlParser.AlterByCoalescePartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByCoalescePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByCoalescePartition(MySqlParser.AlterByCoalescePartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByReorganizePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByReorganizePartition(MySqlParser.AlterByReorganizePartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByReorganizePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByReorganizePartition(MySqlParser.AlterByReorganizePartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByExchangePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByExchangePartition(MySqlParser.AlterByExchangePartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByExchangePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByExchangePartition(MySqlParser.AlterByExchangePartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByAnalyzePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByAnalyzePartition(MySqlParser.AlterByAnalyzePartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByAnalyzePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByAnalyzePartition(MySqlParser.AlterByAnalyzePartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByCheckPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByCheckPartition(MySqlParser.AlterByCheckPartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByCheckPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByCheckPartition(MySqlParser.AlterByCheckPartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByOptimizePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByOptimizePartition(MySqlParser.AlterByOptimizePartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByOptimizePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByOptimizePartition(MySqlParser.AlterByOptimizePartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByRebuildPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByRebuildPartition(MySqlParser.AlterByRebuildPartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByRebuildPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByRebuildPartition(MySqlParser.AlterByRebuildPartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByRepairPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByRepairPartition(MySqlParser.AlterByRepairPartitionContext ctx); + /** + * Exit a parse tree produced by the {@code alterByRepairPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByRepairPartition(MySqlParser.AlterByRepairPartitionContext ctx); + /** + * Enter a parse tree produced by the {@code alterByRemovePartitioning} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByRemovePartitioning(MySqlParser.AlterByRemovePartitioningContext ctx); + /** + * Exit a parse tree produced by the {@code alterByRemovePartitioning} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByRemovePartitioning(MySqlParser.AlterByRemovePartitioningContext ctx); + /** + * Enter a parse tree produced by the {@code alterByUpgradePartitioning} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void enterAlterByUpgradePartitioning(MySqlParser.AlterByUpgradePartitioningContext ctx); + /** + * Exit a parse tree produced by the {@code alterByUpgradePartitioning} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + */ + void exitAlterByUpgradePartitioning(MySqlParser.AlterByUpgradePartitioningContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dropDatabase}. + * @param ctx the parse tree + */ + void enterDropDatabase(MySqlParser.DropDatabaseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dropDatabase}. + * @param ctx the parse tree + */ + void exitDropDatabase(MySqlParser.DropDatabaseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dropEvent}. + * @param ctx the parse tree + */ + void enterDropEvent(MySqlParser.DropEventContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dropEvent}. + * @param ctx the parse tree + */ + void exitDropEvent(MySqlParser.DropEventContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dropIndex}. + * @param ctx the parse tree + */ + void enterDropIndex(MySqlParser.DropIndexContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dropIndex}. + * @param ctx the parse tree + */ + void exitDropIndex(MySqlParser.DropIndexContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dropLogfileGroup}. + * @param ctx the parse tree + */ + void enterDropLogfileGroup(MySqlParser.DropLogfileGroupContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dropLogfileGroup}. + * @param ctx the parse tree + */ + void exitDropLogfileGroup(MySqlParser.DropLogfileGroupContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dropProcedure}. + * @param ctx the parse tree + */ + void enterDropProcedure(MySqlParser.DropProcedureContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dropProcedure}. + * @param ctx the parse tree + */ + void exitDropProcedure(MySqlParser.DropProcedureContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dropFunction}. + * @param ctx the parse tree + */ + void enterDropFunction(MySqlParser.DropFunctionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dropFunction}. + * @param ctx the parse tree + */ + void exitDropFunction(MySqlParser.DropFunctionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dropServer}. + * @param ctx the parse tree + */ + void enterDropServer(MySqlParser.DropServerContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dropServer}. + * @param ctx the parse tree + */ + void exitDropServer(MySqlParser.DropServerContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dropTable}. + * @param ctx the parse tree + */ + void enterDropTable(MySqlParser.DropTableContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dropTable}. + * @param ctx the parse tree + */ + void exitDropTable(MySqlParser.DropTableContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dropTablespace}. + * @param ctx the parse tree + */ + void enterDropTablespace(MySqlParser.DropTablespaceContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dropTablespace}. + * @param ctx the parse tree + */ + void exitDropTablespace(MySqlParser.DropTablespaceContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dropTrigger}. + * @param ctx the parse tree + */ + void enterDropTrigger(MySqlParser.DropTriggerContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dropTrigger}. + * @param ctx the parse tree + */ + void exitDropTrigger(MySqlParser.DropTriggerContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dropView}. + * @param ctx the parse tree + */ + void enterDropView(MySqlParser.DropViewContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dropView}. + * @param ctx the parse tree + */ + void exitDropView(MySqlParser.DropViewContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#renameTable}. + * @param ctx the parse tree + */ + void enterRenameTable(MySqlParser.RenameTableContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#renameTable}. + * @param ctx the parse tree + */ + void exitRenameTable(MySqlParser.RenameTableContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#renameTableClause}. + * @param ctx the parse tree + */ + void enterRenameTableClause(MySqlParser.RenameTableClauseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#renameTableClause}. + * @param ctx the parse tree + */ + void exitRenameTableClause(MySqlParser.RenameTableClauseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#truncateTable}. + * @param ctx the parse tree + */ + void enterTruncateTable(MySqlParser.TruncateTableContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#truncateTable}. + * @param ctx the parse tree + */ + void exitTruncateTable(MySqlParser.TruncateTableContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#callStatement}. + * @param ctx the parse tree + */ + void enterCallStatement(MySqlParser.CallStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#callStatement}. + * @param ctx the parse tree + */ + void exitCallStatement(MySqlParser.CallStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#deleteStatement}. + * @param ctx the parse tree + */ + void enterDeleteStatement(MySqlParser.DeleteStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#deleteStatement}. + * @param ctx the parse tree + */ + void exitDeleteStatement(MySqlParser.DeleteStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#doStatement}. + * @param ctx the parse tree + */ + void enterDoStatement(MySqlParser.DoStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#doStatement}. + * @param ctx the parse tree + */ + void exitDoStatement(MySqlParser.DoStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#handlerStatement}. + * @param ctx the parse tree + */ + void enterHandlerStatement(MySqlParser.HandlerStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#handlerStatement}. + * @param ctx the parse tree + */ + void exitHandlerStatement(MySqlParser.HandlerStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#insertStatement}. + * @param ctx the parse tree + */ + void enterInsertStatement(MySqlParser.InsertStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#insertStatement}. + * @param ctx the parse tree + */ + void exitInsertStatement(MySqlParser.InsertStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#loadDataStatement}. + * @param ctx the parse tree + */ + void enterLoadDataStatement(MySqlParser.LoadDataStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#loadDataStatement}. + * @param ctx the parse tree + */ + void exitLoadDataStatement(MySqlParser.LoadDataStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#loadXmlStatement}. + * @param ctx the parse tree + */ + void enterLoadXmlStatement(MySqlParser.LoadXmlStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#loadXmlStatement}. + * @param ctx the parse tree + */ + void exitLoadXmlStatement(MySqlParser.LoadXmlStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#replaceStatement}. + * @param ctx the parse tree + */ + void enterReplaceStatement(MySqlParser.ReplaceStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#replaceStatement}. + * @param ctx the parse tree + */ + void exitReplaceStatement(MySqlParser.ReplaceStatementContext ctx); + /** + * Enter a parse tree produced by the {@code simpleSelect} + * labeled alternative in {@link MySqlParser#selectStatement}. + * @param ctx the parse tree + */ + void enterSimpleSelect(MySqlParser.SimpleSelectContext ctx); + /** + * Exit a parse tree produced by the {@code simpleSelect} + * labeled alternative in {@link MySqlParser#selectStatement}. + * @param ctx the parse tree + */ + void exitSimpleSelect(MySqlParser.SimpleSelectContext ctx); + /** + * Enter a parse tree produced by the {@code parenthesisSelect} + * labeled alternative in {@link MySqlParser#selectStatement}. + * @param ctx the parse tree + */ + void enterParenthesisSelect(MySqlParser.ParenthesisSelectContext ctx); + /** + * Exit a parse tree produced by the {@code parenthesisSelect} + * labeled alternative in {@link MySqlParser#selectStatement}. + * @param ctx the parse tree + */ + void exitParenthesisSelect(MySqlParser.ParenthesisSelectContext ctx); + /** + * Enter a parse tree produced by the {@code unionSelect} + * labeled alternative in {@link MySqlParser#selectStatement}. + * @param ctx the parse tree + */ + void enterUnionSelect(MySqlParser.UnionSelectContext ctx); + /** + * Exit a parse tree produced by the {@code unionSelect} + * labeled alternative in {@link MySqlParser#selectStatement}. + * @param ctx the parse tree + */ + void exitUnionSelect(MySqlParser.UnionSelectContext ctx); + /** + * Enter a parse tree produced by the {@code unionParenthesisSelect} + * labeled alternative in {@link MySqlParser#selectStatement}. + * @param ctx the parse tree + */ + void enterUnionParenthesisSelect(MySqlParser.UnionParenthesisSelectContext ctx); + /** + * Exit a parse tree produced by the {@code unionParenthesisSelect} + * labeled alternative in {@link MySqlParser#selectStatement}. + * @param ctx the parse tree + */ + void exitUnionParenthesisSelect(MySqlParser.UnionParenthesisSelectContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#updateStatement}. + * @param ctx the parse tree + */ + void enterUpdateStatement(MySqlParser.UpdateStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#updateStatement}. + * @param ctx the parse tree + */ + void exitUpdateStatement(MySqlParser.UpdateStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#insertStatementValue}. + * @param ctx the parse tree + */ + void enterInsertStatementValue(MySqlParser.InsertStatementValueContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#insertStatementValue}. + * @param ctx the parse tree + */ + void exitInsertStatementValue(MySqlParser.InsertStatementValueContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#updatedElement}. + * @param ctx the parse tree + */ + void enterUpdatedElement(MySqlParser.UpdatedElementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#updatedElement}. + * @param ctx the parse tree + */ + void exitUpdatedElement(MySqlParser.UpdatedElementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#assignmentField}. + * @param ctx the parse tree + */ + void enterAssignmentField(MySqlParser.AssignmentFieldContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#assignmentField}. + * @param ctx the parse tree + */ + void exitAssignmentField(MySqlParser.AssignmentFieldContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#lockClause}. + * @param ctx the parse tree + */ + void enterLockClause(MySqlParser.LockClauseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#lockClause}. + * @param ctx the parse tree + */ + void exitLockClause(MySqlParser.LockClauseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#singleDeleteStatement}. + * @param ctx the parse tree + */ + void enterSingleDeleteStatement(MySqlParser.SingleDeleteStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#singleDeleteStatement}. + * @param ctx the parse tree + */ + void exitSingleDeleteStatement(MySqlParser.SingleDeleteStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#multipleDeleteStatement}. + * @param ctx the parse tree + */ + void enterMultipleDeleteStatement(MySqlParser.MultipleDeleteStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#multipleDeleteStatement}. + * @param ctx the parse tree + */ + void exitMultipleDeleteStatement(MySqlParser.MultipleDeleteStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#handlerOpenStatement}. + * @param ctx the parse tree + */ + void enterHandlerOpenStatement(MySqlParser.HandlerOpenStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#handlerOpenStatement}. + * @param ctx the parse tree + */ + void exitHandlerOpenStatement(MySqlParser.HandlerOpenStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#handlerReadIndexStatement}. + * @param ctx the parse tree + */ + void enterHandlerReadIndexStatement(MySqlParser.HandlerReadIndexStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#handlerReadIndexStatement}. + * @param ctx the parse tree + */ + void exitHandlerReadIndexStatement(MySqlParser.HandlerReadIndexStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#handlerReadStatement}. + * @param ctx the parse tree + */ + void enterHandlerReadStatement(MySqlParser.HandlerReadStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#handlerReadStatement}. + * @param ctx the parse tree + */ + void exitHandlerReadStatement(MySqlParser.HandlerReadStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#handlerCloseStatement}. + * @param ctx the parse tree + */ + void enterHandlerCloseStatement(MySqlParser.HandlerCloseStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#handlerCloseStatement}. + * @param ctx the parse tree + */ + void exitHandlerCloseStatement(MySqlParser.HandlerCloseStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#singleUpdateStatement}. + * @param ctx the parse tree + */ + void enterSingleUpdateStatement(MySqlParser.SingleUpdateStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#singleUpdateStatement}. + * @param ctx the parse tree + */ + void exitSingleUpdateStatement(MySqlParser.SingleUpdateStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#multipleUpdateStatement}. + * @param ctx the parse tree + */ + void enterMultipleUpdateStatement(MySqlParser.MultipleUpdateStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#multipleUpdateStatement}. + * @param ctx the parse tree + */ + void exitMultipleUpdateStatement(MySqlParser.MultipleUpdateStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#orderByClause}. + * @param ctx the parse tree + */ + void enterOrderByClause(MySqlParser.OrderByClauseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#orderByClause}. + * @param ctx the parse tree + */ + void exitOrderByClause(MySqlParser.OrderByClauseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#orderByExpression}. + * @param ctx the parse tree + */ + void enterOrderByExpression(MySqlParser.OrderByExpressionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#orderByExpression}. + * @param ctx the parse tree + */ + void exitOrderByExpression(MySqlParser.OrderByExpressionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#tableSources}. + * @param ctx the parse tree + */ + void enterTableSources(MySqlParser.TableSourcesContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#tableSources}. + * @param ctx the parse tree + */ + void exitTableSources(MySqlParser.TableSourcesContext ctx); + /** + * Enter a parse tree produced by the {@code tableSourceBase} + * labeled alternative in {@link MySqlParser#tableSource}. + * @param ctx the parse tree + */ + void enterTableSourceBase(MySqlParser.TableSourceBaseContext ctx); + /** + * Exit a parse tree produced by the {@code tableSourceBase} + * labeled alternative in {@link MySqlParser#tableSource}. + * @param ctx the parse tree + */ + void exitTableSourceBase(MySqlParser.TableSourceBaseContext ctx); + /** + * Enter a parse tree produced by the {@code tableSourceNested} + * labeled alternative in {@link MySqlParser#tableSource}. + * @param ctx the parse tree + */ + void enterTableSourceNested(MySqlParser.TableSourceNestedContext ctx); + /** + * Exit a parse tree produced by the {@code tableSourceNested} + * labeled alternative in {@link MySqlParser#tableSource}. + * @param ctx the parse tree + */ + void exitTableSourceNested(MySqlParser.TableSourceNestedContext ctx); + /** + * Enter a parse tree produced by the {@code atomTableItem} + * labeled alternative in {@link MySqlParser#tableSourceItem}. + * @param ctx the parse tree + */ + void enterAtomTableItem(MySqlParser.AtomTableItemContext ctx); + /** + * Exit a parse tree produced by the {@code atomTableItem} + * labeled alternative in {@link MySqlParser#tableSourceItem}. + * @param ctx the parse tree + */ + void exitAtomTableItem(MySqlParser.AtomTableItemContext ctx); + /** + * Enter a parse tree produced by the {@code subqueryTableItem} + * labeled alternative in {@link MySqlParser#tableSourceItem}. + * @param ctx the parse tree + */ + void enterSubqueryTableItem(MySqlParser.SubqueryTableItemContext ctx); + /** + * Exit a parse tree produced by the {@code subqueryTableItem} + * labeled alternative in {@link MySqlParser#tableSourceItem}. + * @param ctx the parse tree + */ + void exitSubqueryTableItem(MySqlParser.SubqueryTableItemContext ctx); + /** + * Enter a parse tree produced by the {@code tableSourcesItem} + * labeled alternative in {@link MySqlParser#tableSourceItem}. + * @param ctx the parse tree + */ + void enterTableSourcesItem(MySqlParser.TableSourcesItemContext ctx); + /** + * Exit a parse tree produced by the {@code tableSourcesItem} + * labeled alternative in {@link MySqlParser#tableSourceItem}. + * @param ctx the parse tree + */ + void exitTableSourcesItem(MySqlParser.TableSourcesItemContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#indexHint}. + * @param ctx the parse tree + */ + void enterIndexHint(MySqlParser.IndexHintContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#indexHint}. + * @param ctx the parse tree + */ + void exitIndexHint(MySqlParser.IndexHintContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#indexHintType}. + * @param ctx the parse tree + */ + void enterIndexHintType(MySqlParser.IndexHintTypeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#indexHintType}. + * @param ctx the parse tree + */ + void exitIndexHintType(MySqlParser.IndexHintTypeContext ctx); + /** + * Enter a parse tree produced by the {@code innerJoin} + * labeled alternative in {@link MySqlParser#joinPart}. + * @param ctx the parse tree + */ + void enterInnerJoin(MySqlParser.InnerJoinContext ctx); + /** + * Exit a parse tree produced by the {@code innerJoin} + * labeled alternative in {@link MySqlParser#joinPart}. + * @param ctx the parse tree + */ + void exitInnerJoin(MySqlParser.InnerJoinContext ctx); + /** + * Enter a parse tree produced by the {@code straightJoin} + * labeled alternative in {@link MySqlParser#joinPart}. + * @param ctx the parse tree + */ + void enterStraightJoin(MySqlParser.StraightJoinContext ctx); + /** + * Exit a parse tree produced by the {@code straightJoin} + * labeled alternative in {@link MySqlParser#joinPart}. + * @param ctx the parse tree + */ + void exitStraightJoin(MySqlParser.StraightJoinContext ctx); + /** + * Enter a parse tree produced by the {@code outerJoin} + * labeled alternative in {@link MySqlParser#joinPart}. + * @param ctx the parse tree + */ + void enterOuterJoin(MySqlParser.OuterJoinContext ctx); + /** + * Exit a parse tree produced by the {@code outerJoin} + * labeled alternative in {@link MySqlParser#joinPart}. + * @param ctx the parse tree + */ + void exitOuterJoin(MySqlParser.OuterJoinContext ctx); + /** + * Enter a parse tree produced by the {@code naturalJoin} + * labeled alternative in {@link MySqlParser#joinPart}. + * @param ctx the parse tree + */ + void enterNaturalJoin(MySqlParser.NaturalJoinContext ctx); + /** + * Exit a parse tree produced by the {@code naturalJoin} + * labeled alternative in {@link MySqlParser#joinPart}. + * @param ctx the parse tree + */ + void exitNaturalJoin(MySqlParser.NaturalJoinContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#queryExpression}. + * @param ctx the parse tree + */ + void enterQueryExpression(MySqlParser.QueryExpressionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#queryExpression}. + * @param ctx the parse tree + */ + void exitQueryExpression(MySqlParser.QueryExpressionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#queryExpressionNointo}. + * @param ctx the parse tree + */ + void enterQueryExpressionNointo(MySqlParser.QueryExpressionNointoContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#queryExpressionNointo}. + * @param ctx the parse tree + */ + void exitQueryExpressionNointo(MySqlParser.QueryExpressionNointoContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#querySpecification}. + * @param ctx the parse tree + */ + void enterQuerySpecification(MySqlParser.QuerySpecificationContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#querySpecification}. + * @param ctx the parse tree + */ + void exitQuerySpecification(MySqlParser.QuerySpecificationContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#querySpecificationNointo}. + * @param ctx the parse tree + */ + void enterQuerySpecificationNointo(MySqlParser.QuerySpecificationNointoContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#querySpecificationNointo}. + * @param ctx the parse tree + */ + void exitQuerySpecificationNointo(MySqlParser.QuerySpecificationNointoContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#unionParenthesis}. + * @param ctx the parse tree + */ + void enterUnionParenthesis(MySqlParser.UnionParenthesisContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#unionParenthesis}. + * @param ctx the parse tree + */ + void exitUnionParenthesis(MySqlParser.UnionParenthesisContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#unionStatement}. + * @param ctx the parse tree + */ + void enterUnionStatement(MySqlParser.UnionStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#unionStatement}. + * @param ctx the parse tree + */ + void exitUnionStatement(MySqlParser.UnionStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#selectSpec}. + * @param ctx the parse tree + */ + void enterSelectSpec(MySqlParser.SelectSpecContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#selectSpec}. + * @param ctx the parse tree + */ + void exitSelectSpec(MySqlParser.SelectSpecContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#selectElements}. + * @param ctx the parse tree + */ + void enterSelectElements(MySqlParser.SelectElementsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#selectElements}. + * @param ctx the parse tree + */ + void exitSelectElements(MySqlParser.SelectElementsContext ctx); + /** + * Enter a parse tree produced by the {@code selectStarElement} + * labeled alternative in {@link MySqlParser#selectElement}. + * @param ctx the parse tree + */ + void enterSelectStarElement(MySqlParser.SelectStarElementContext ctx); + /** + * Exit a parse tree produced by the {@code selectStarElement} + * labeled alternative in {@link MySqlParser#selectElement}. + * @param ctx the parse tree + */ + void exitSelectStarElement(MySqlParser.SelectStarElementContext ctx); + /** + * Enter a parse tree produced by the {@code selectColumnElement} + * labeled alternative in {@link MySqlParser#selectElement}. + * @param ctx the parse tree + */ + void enterSelectColumnElement(MySqlParser.SelectColumnElementContext ctx); + /** + * Exit a parse tree produced by the {@code selectColumnElement} + * labeled alternative in {@link MySqlParser#selectElement}. + * @param ctx the parse tree + */ + void exitSelectColumnElement(MySqlParser.SelectColumnElementContext ctx); + /** + * Enter a parse tree produced by the {@code selectFunctionElement} + * labeled alternative in {@link MySqlParser#selectElement}. + * @param ctx the parse tree + */ + void enterSelectFunctionElement(MySqlParser.SelectFunctionElementContext ctx); + /** + * Exit a parse tree produced by the {@code selectFunctionElement} + * labeled alternative in {@link MySqlParser#selectElement}. + * @param ctx the parse tree + */ + void exitSelectFunctionElement(MySqlParser.SelectFunctionElementContext ctx); + /** + * Enter a parse tree produced by the {@code selectExpressionElement} + * labeled alternative in {@link MySqlParser#selectElement}. + * @param ctx the parse tree + */ + void enterSelectExpressionElement(MySqlParser.SelectExpressionElementContext ctx); + /** + * Exit a parse tree produced by the {@code selectExpressionElement} + * labeled alternative in {@link MySqlParser#selectElement}. + * @param ctx the parse tree + */ + void exitSelectExpressionElement(MySqlParser.SelectExpressionElementContext ctx); + /** + * Enter a parse tree produced by the {@code selectIntoVariables} + * labeled alternative in {@link MySqlParser#selectIntoExpression}. + * @param ctx the parse tree + */ + void enterSelectIntoVariables(MySqlParser.SelectIntoVariablesContext ctx); + /** + * Exit a parse tree produced by the {@code selectIntoVariables} + * labeled alternative in {@link MySqlParser#selectIntoExpression}. + * @param ctx the parse tree + */ + void exitSelectIntoVariables(MySqlParser.SelectIntoVariablesContext ctx); + /** + * Enter a parse tree produced by the {@code selectIntoDumpFile} + * labeled alternative in {@link MySqlParser#selectIntoExpression}. + * @param ctx the parse tree + */ + void enterSelectIntoDumpFile(MySqlParser.SelectIntoDumpFileContext ctx); + /** + * Exit a parse tree produced by the {@code selectIntoDumpFile} + * labeled alternative in {@link MySqlParser#selectIntoExpression}. + * @param ctx the parse tree + */ + void exitSelectIntoDumpFile(MySqlParser.SelectIntoDumpFileContext ctx); + /** + * Enter a parse tree produced by the {@code selectIntoTextFile} + * labeled alternative in {@link MySqlParser#selectIntoExpression}. + * @param ctx the parse tree + */ + void enterSelectIntoTextFile(MySqlParser.SelectIntoTextFileContext ctx); + /** + * Exit a parse tree produced by the {@code selectIntoTextFile} + * labeled alternative in {@link MySqlParser#selectIntoExpression}. + * @param ctx the parse tree + */ + void exitSelectIntoTextFile(MySqlParser.SelectIntoTextFileContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#selectFieldsInto}. + * @param ctx the parse tree + */ + void enterSelectFieldsInto(MySqlParser.SelectFieldsIntoContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#selectFieldsInto}. + * @param ctx the parse tree + */ + void exitSelectFieldsInto(MySqlParser.SelectFieldsIntoContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#selectLinesInto}. + * @param ctx the parse tree + */ + void enterSelectLinesInto(MySqlParser.SelectLinesIntoContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#selectLinesInto}. + * @param ctx the parse tree + */ + void exitSelectLinesInto(MySqlParser.SelectLinesIntoContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#fromClause}. + * @param ctx the parse tree + */ + void enterFromClause(MySqlParser.FromClauseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#fromClause}. + * @param ctx the parse tree + */ + void exitFromClause(MySqlParser.FromClauseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#groupByItem}. + * @param ctx the parse tree + */ + void enterGroupByItem(MySqlParser.GroupByItemContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#groupByItem}. + * @param ctx the parse tree + */ + void exitGroupByItem(MySqlParser.GroupByItemContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#limitClause}. + * @param ctx the parse tree + */ + void enterLimitClause(MySqlParser.LimitClauseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#limitClause}. + * @param ctx the parse tree + */ + void exitLimitClause(MySqlParser.LimitClauseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#limitClauseAtom}. + * @param ctx the parse tree + */ + void enterLimitClauseAtom(MySqlParser.LimitClauseAtomContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#limitClauseAtom}. + * @param ctx the parse tree + */ + void exitLimitClauseAtom(MySqlParser.LimitClauseAtomContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#startTransaction}. + * @param ctx the parse tree + */ + void enterStartTransaction(MySqlParser.StartTransactionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#startTransaction}. + * @param ctx the parse tree + */ + void exitStartTransaction(MySqlParser.StartTransactionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#beginWork}. + * @param ctx the parse tree + */ + void enterBeginWork(MySqlParser.BeginWorkContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#beginWork}. + * @param ctx the parse tree + */ + void exitBeginWork(MySqlParser.BeginWorkContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#commitWork}. + * @param ctx the parse tree + */ + void enterCommitWork(MySqlParser.CommitWorkContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#commitWork}. + * @param ctx the parse tree + */ + void exitCommitWork(MySqlParser.CommitWorkContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#rollbackWork}. + * @param ctx the parse tree + */ + void enterRollbackWork(MySqlParser.RollbackWorkContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#rollbackWork}. + * @param ctx the parse tree + */ + void exitRollbackWork(MySqlParser.RollbackWorkContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#savepointStatement}. + * @param ctx the parse tree + */ + void enterSavepointStatement(MySqlParser.SavepointStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#savepointStatement}. + * @param ctx the parse tree + */ + void exitSavepointStatement(MySqlParser.SavepointStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#rollbackStatement}. + * @param ctx the parse tree + */ + void enterRollbackStatement(MySqlParser.RollbackStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#rollbackStatement}. + * @param ctx the parse tree + */ + void exitRollbackStatement(MySqlParser.RollbackStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#releaseStatement}. + * @param ctx the parse tree + */ + void enterReleaseStatement(MySqlParser.ReleaseStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#releaseStatement}. + * @param ctx the parse tree + */ + void exitReleaseStatement(MySqlParser.ReleaseStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#lockTables}. + * @param ctx the parse tree + */ + void enterLockTables(MySqlParser.LockTablesContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#lockTables}. + * @param ctx the parse tree + */ + void exitLockTables(MySqlParser.LockTablesContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#unlockTables}. + * @param ctx the parse tree + */ + void enterUnlockTables(MySqlParser.UnlockTablesContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#unlockTables}. + * @param ctx the parse tree + */ + void exitUnlockTables(MySqlParser.UnlockTablesContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#setAutocommitStatement}. + * @param ctx the parse tree + */ + void enterSetAutocommitStatement(MySqlParser.SetAutocommitStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#setAutocommitStatement}. + * @param ctx the parse tree + */ + void exitSetAutocommitStatement(MySqlParser.SetAutocommitStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#setTransactionStatement}. + * @param ctx the parse tree + */ + void enterSetTransactionStatement(MySqlParser.SetTransactionStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#setTransactionStatement}. + * @param ctx the parse tree + */ + void exitSetTransactionStatement(MySqlParser.SetTransactionStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#transactionMode}. + * @param ctx the parse tree + */ + void enterTransactionMode(MySqlParser.TransactionModeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#transactionMode}. + * @param ctx the parse tree + */ + void exitTransactionMode(MySqlParser.TransactionModeContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#lockTableElement}. + * @param ctx the parse tree + */ + void enterLockTableElement(MySqlParser.LockTableElementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#lockTableElement}. + * @param ctx the parse tree + */ + void exitLockTableElement(MySqlParser.LockTableElementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#lockAction}. + * @param ctx the parse tree + */ + void enterLockAction(MySqlParser.LockActionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#lockAction}. + * @param ctx the parse tree + */ + void exitLockAction(MySqlParser.LockActionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#transactionOption}. + * @param ctx the parse tree + */ + void enterTransactionOption(MySqlParser.TransactionOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#transactionOption}. + * @param ctx the parse tree + */ + void exitTransactionOption(MySqlParser.TransactionOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#transactionLevel}. + * @param ctx the parse tree + */ + void enterTransactionLevel(MySqlParser.TransactionLevelContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#transactionLevel}. + * @param ctx the parse tree + */ + void exitTransactionLevel(MySqlParser.TransactionLevelContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#changeMaster}. + * @param ctx the parse tree + */ + void enterChangeMaster(MySqlParser.ChangeMasterContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#changeMaster}. + * @param ctx the parse tree + */ + void exitChangeMaster(MySqlParser.ChangeMasterContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#changeReplicationFilter}. + * @param ctx the parse tree + */ + void enterChangeReplicationFilter(MySqlParser.ChangeReplicationFilterContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#changeReplicationFilter}. + * @param ctx the parse tree + */ + void exitChangeReplicationFilter(MySqlParser.ChangeReplicationFilterContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#purgeBinaryLogs}. + * @param ctx the parse tree + */ + void enterPurgeBinaryLogs(MySqlParser.PurgeBinaryLogsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#purgeBinaryLogs}. + * @param ctx the parse tree + */ + void exitPurgeBinaryLogs(MySqlParser.PurgeBinaryLogsContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#resetMaster}. + * @param ctx the parse tree + */ + void enterResetMaster(MySqlParser.ResetMasterContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#resetMaster}. + * @param ctx the parse tree + */ + void exitResetMaster(MySqlParser.ResetMasterContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#resetSlave}. + * @param ctx the parse tree + */ + void enterResetSlave(MySqlParser.ResetSlaveContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#resetSlave}. + * @param ctx the parse tree + */ + void exitResetSlave(MySqlParser.ResetSlaveContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#startSlave}. + * @param ctx the parse tree + */ + void enterStartSlave(MySqlParser.StartSlaveContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#startSlave}. + * @param ctx the parse tree + */ + void exitStartSlave(MySqlParser.StartSlaveContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#stopSlave}. + * @param ctx the parse tree + */ + void enterStopSlave(MySqlParser.StopSlaveContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#stopSlave}. + * @param ctx the parse tree + */ + void exitStopSlave(MySqlParser.StopSlaveContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#startGroupReplication}. + * @param ctx the parse tree + */ + void enterStartGroupReplication(MySqlParser.StartGroupReplicationContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#startGroupReplication}. + * @param ctx the parse tree + */ + void exitStartGroupReplication(MySqlParser.StartGroupReplicationContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#stopGroupReplication}. + * @param ctx the parse tree + */ + void enterStopGroupReplication(MySqlParser.StopGroupReplicationContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#stopGroupReplication}. + * @param ctx the parse tree + */ + void exitStopGroupReplication(MySqlParser.StopGroupReplicationContext ctx); + /** + * Enter a parse tree produced by the {@code masterStringOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + */ + void enterMasterStringOption(MySqlParser.MasterStringOptionContext ctx); + /** + * Exit a parse tree produced by the {@code masterStringOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + */ + void exitMasterStringOption(MySqlParser.MasterStringOptionContext ctx); + /** + * Enter a parse tree produced by the {@code masterDecimalOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + */ + void enterMasterDecimalOption(MySqlParser.MasterDecimalOptionContext ctx); + /** + * Exit a parse tree produced by the {@code masterDecimalOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + */ + void exitMasterDecimalOption(MySqlParser.MasterDecimalOptionContext ctx); + /** + * Enter a parse tree produced by the {@code masterBoolOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + */ + void enterMasterBoolOption(MySqlParser.MasterBoolOptionContext ctx); + /** + * Exit a parse tree produced by the {@code masterBoolOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + */ + void exitMasterBoolOption(MySqlParser.MasterBoolOptionContext ctx); + /** + * Enter a parse tree produced by the {@code masterRealOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + */ + void enterMasterRealOption(MySqlParser.MasterRealOptionContext ctx); + /** + * Exit a parse tree produced by the {@code masterRealOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + */ + void exitMasterRealOption(MySqlParser.MasterRealOptionContext ctx); + /** + * Enter a parse tree produced by the {@code masterUidListOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + */ + void enterMasterUidListOption(MySqlParser.MasterUidListOptionContext ctx); + /** + * Exit a parse tree produced by the {@code masterUidListOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + */ + void exitMasterUidListOption(MySqlParser.MasterUidListOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#stringMasterOption}. + * @param ctx the parse tree + */ + void enterStringMasterOption(MySqlParser.StringMasterOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#stringMasterOption}. + * @param ctx the parse tree + */ + void exitStringMasterOption(MySqlParser.StringMasterOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#decimalMasterOption}. + * @param ctx the parse tree + */ + void enterDecimalMasterOption(MySqlParser.DecimalMasterOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#decimalMasterOption}. + * @param ctx the parse tree + */ + void exitDecimalMasterOption(MySqlParser.DecimalMasterOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#boolMasterOption}. + * @param ctx the parse tree + */ + void enterBoolMasterOption(MySqlParser.BoolMasterOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#boolMasterOption}. + * @param ctx the parse tree + */ + void exitBoolMasterOption(MySqlParser.BoolMasterOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#channelOption}. + * @param ctx the parse tree + */ + void enterChannelOption(MySqlParser.ChannelOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#channelOption}. + * @param ctx the parse tree + */ + void exitChannelOption(MySqlParser.ChannelOptionContext ctx); + /** + * Enter a parse tree produced by the {@code doDbReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void enterDoDbReplication(MySqlParser.DoDbReplicationContext ctx); + /** + * Exit a parse tree produced by the {@code doDbReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void exitDoDbReplication(MySqlParser.DoDbReplicationContext ctx); + /** + * Enter a parse tree produced by the {@code ignoreDbReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void enterIgnoreDbReplication(MySqlParser.IgnoreDbReplicationContext ctx); + /** + * Exit a parse tree produced by the {@code ignoreDbReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void exitIgnoreDbReplication(MySqlParser.IgnoreDbReplicationContext ctx); + /** + * Enter a parse tree produced by the {@code doTableReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void enterDoTableReplication(MySqlParser.DoTableReplicationContext ctx); + /** + * Exit a parse tree produced by the {@code doTableReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void exitDoTableReplication(MySqlParser.DoTableReplicationContext ctx); + /** + * Enter a parse tree produced by the {@code ignoreTableReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void enterIgnoreTableReplication(MySqlParser.IgnoreTableReplicationContext ctx); + /** + * Exit a parse tree produced by the {@code ignoreTableReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void exitIgnoreTableReplication(MySqlParser.IgnoreTableReplicationContext ctx); + /** + * Enter a parse tree produced by the {@code wildDoTableReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void enterWildDoTableReplication(MySqlParser.WildDoTableReplicationContext ctx); + /** + * Exit a parse tree produced by the {@code wildDoTableReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void exitWildDoTableReplication(MySqlParser.WildDoTableReplicationContext ctx); + /** + * Enter a parse tree produced by the {@code wildIgnoreTableReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void enterWildIgnoreTableReplication(MySqlParser.WildIgnoreTableReplicationContext ctx); + /** + * Exit a parse tree produced by the {@code wildIgnoreTableReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void exitWildIgnoreTableReplication(MySqlParser.WildIgnoreTableReplicationContext ctx); + /** + * Enter a parse tree produced by the {@code rewriteDbReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void enterRewriteDbReplication(MySqlParser.RewriteDbReplicationContext ctx); + /** + * Exit a parse tree produced by the {@code rewriteDbReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + */ + void exitRewriteDbReplication(MySqlParser.RewriteDbReplicationContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#tablePair}. + * @param ctx the parse tree + */ + void enterTablePair(MySqlParser.TablePairContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#tablePair}. + * @param ctx the parse tree + */ + void exitTablePair(MySqlParser.TablePairContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#threadType}. + * @param ctx the parse tree + */ + void enterThreadType(MySqlParser.ThreadTypeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#threadType}. + * @param ctx the parse tree + */ + void exitThreadType(MySqlParser.ThreadTypeContext ctx); + /** + * Enter a parse tree produced by the {@code gtidsUntilOption} + * labeled alternative in {@link MySqlParser#untilOption}. + * @param ctx the parse tree + */ + void enterGtidsUntilOption(MySqlParser.GtidsUntilOptionContext ctx); + /** + * Exit a parse tree produced by the {@code gtidsUntilOption} + * labeled alternative in {@link MySqlParser#untilOption}. + * @param ctx the parse tree + */ + void exitGtidsUntilOption(MySqlParser.GtidsUntilOptionContext ctx); + /** + * Enter a parse tree produced by the {@code masterLogUntilOption} + * labeled alternative in {@link MySqlParser#untilOption}. + * @param ctx the parse tree + */ + void enterMasterLogUntilOption(MySqlParser.MasterLogUntilOptionContext ctx); + /** + * Exit a parse tree produced by the {@code masterLogUntilOption} + * labeled alternative in {@link MySqlParser#untilOption}. + * @param ctx the parse tree + */ + void exitMasterLogUntilOption(MySqlParser.MasterLogUntilOptionContext ctx); + /** + * Enter a parse tree produced by the {@code relayLogUntilOption} + * labeled alternative in {@link MySqlParser#untilOption}. + * @param ctx the parse tree + */ + void enterRelayLogUntilOption(MySqlParser.RelayLogUntilOptionContext ctx); + /** + * Exit a parse tree produced by the {@code relayLogUntilOption} + * labeled alternative in {@link MySqlParser#untilOption}. + * @param ctx the parse tree + */ + void exitRelayLogUntilOption(MySqlParser.RelayLogUntilOptionContext ctx); + /** + * Enter a parse tree produced by the {@code sqlGapsUntilOption} + * labeled alternative in {@link MySqlParser#untilOption}. + * @param ctx the parse tree + */ + void enterSqlGapsUntilOption(MySqlParser.SqlGapsUntilOptionContext ctx); + /** + * Exit a parse tree produced by the {@code sqlGapsUntilOption} + * labeled alternative in {@link MySqlParser#untilOption}. + * @param ctx the parse tree + */ + void exitSqlGapsUntilOption(MySqlParser.SqlGapsUntilOptionContext ctx); + /** + * Enter a parse tree produced by the {@code userConnectionOption} + * labeled alternative in {@link MySqlParser#connectionOption}. + * @param ctx the parse tree + */ + void enterUserConnectionOption(MySqlParser.UserConnectionOptionContext ctx); + /** + * Exit a parse tree produced by the {@code userConnectionOption} + * labeled alternative in {@link MySqlParser#connectionOption}. + * @param ctx the parse tree + */ + void exitUserConnectionOption(MySqlParser.UserConnectionOptionContext ctx); + /** + * Enter a parse tree produced by the {@code passwordConnectionOption} + * labeled alternative in {@link MySqlParser#connectionOption}. + * @param ctx the parse tree + */ + void enterPasswordConnectionOption(MySqlParser.PasswordConnectionOptionContext ctx); + /** + * Exit a parse tree produced by the {@code passwordConnectionOption} + * labeled alternative in {@link MySqlParser#connectionOption}. + * @param ctx the parse tree + */ + void exitPasswordConnectionOption(MySqlParser.PasswordConnectionOptionContext ctx); + /** + * Enter a parse tree produced by the {@code defaultAuthConnectionOption} + * labeled alternative in {@link MySqlParser#connectionOption}. + * @param ctx the parse tree + */ + void enterDefaultAuthConnectionOption(MySqlParser.DefaultAuthConnectionOptionContext ctx); + /** + * Exit a parse tree produced by the {@code defaultAuthConnectionOption} + * labeled alternative in {@link MySqlParser#connectionOption}. + * @param ctx the parse tree + */ + void exitDefaultAuthConnectionOption(MySqlParser.DefaultAuthConnectionOptionContext ctx); + /** + * Enter a parse tree produced by the {@code pluginDirConnectionOption} + * labeled alternative in {@link MySqlParser#connectionOption}. + * @param ctx the parse tree + */ + void enterPluginDirConnectionOption(MySqlParser.PluginDirConnectionOptionContext ctx); + /** + * Exit a parse tree produced by the {@code pluginDirConnectionOption} + * labeled alternative in {@link MySqlParser#connectionOption}. + * @param ctx the parse tree + */ + void exitPluginDirConnectionOption(MySqlParser.PluginDirConnectionOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#gtuidSet}. + * @param ctx the parse tree + */ + void enterGtuidSet(MySqlParser.GtuidSetContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#gtuidSet}. + * @param ctx the parse tree + */ + void exitGtuidSet(MySqlParser.GtuidSetContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#xaStartTransaction}. + * @param ctx the parse tree + */ + void enterXaStartTransaction(MySqlParser.XaStartTransactionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#xaStartTransaction}. + * @param ctx the parse tree + */ + void exitXaStartTransaction(MySqlParser.XaStartTransactionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#xaEndTransaction}. + * @param ctx the parse tree + */ + void enterXaEndTransaction(MySqlParser.XaEndTransactionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#xaEndTransaction}. + * @param ctx the parse tree + */ + void exitXaEndTransaction(MySqlParser.XaEndTransactionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#xaPrepareStatement}. + * @param ctx the parse tree + */ + void enterXaPrepareStatement(MySqlParser.XaPrepareStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#xaPrepareStatement}. + * @param ctx the parse tree + */ + void exitXaPrepareStatement(MySqlParser.XaPrepareStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#xaCommitWork}. + * @param ctx the parse tree + */ + void enterXaCommitWork(MySqlParser.XaCommitWorkContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#xaCommitWork}. + * @param ctx the parse tree + */ + void exitXaCommitWork(MySqlParser.XaCommitWorkContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#xaRollbackWork}. + * @param ctx the parse tree + */ + void enterXaRollbackWork(MySqlParser.XaRollbackWorkContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#xaRollbackWork}. + * @param ctx the parse tree + */ + void exitXaRollbackWork(MySqlParser.XaRollbackWorkContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#xaRecoverWork}. + * @param ctx the parse tree + */ + void enterXaRecoverWork(MySqlParser.XaRecoverWorkContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#xaRecoverWork}. + * @param ctx the parse tree + */ + void exitXaRecoverWork(MySqlParser.XaRecoverWorkContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#prepareStatement}. + * @param ctx the parse tree + */ + void enterPrepareStatement(MySqlParser.PrepareStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#prepareStatement}. + * @param ctx the parse tree + */ + void exitPrepareStatement(MySqlParser.PrepareStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#executeStatement}. + * @param ctx the parse tree + */ + void enterExecuteStatement(MySqlParser.ExecuteStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#executeStatement}. + * @param ctx the parse tree + */ + void exitExecuteStatement(MySqlParser.ExecuteStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#deallocatePrepare}. + * @param ctx the parse tree + */ + void enterDeallocatePrepare(MySqlParser.DeallocatePrepareContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#deallocatePrepare}. + * @param ctx the parse tree + */ + void exitDeallocatePrepare(MySqlParser.DeallocatePrepareContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#routineBody}. + * @param ctx the parse tree + */ + void enterRoutineBody(MySqlParser.RoutineBodyContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#routineBody}. + * @param ctx the parse tree + */ + void exitRoutineBody(MySqlParser.RoutineBodyContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#blockStatement}. + * @param ctx the parse tree + */ + void enterBlockStatement(MySqlParser.BlockStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#blockStatement}. + * @param ctx the parse tree + */ + void exitBlockStatement(MySqlParser.BlockStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#caseStatement}. + * @param ctx the parse tree + */ + void enterCaseStatement(MySqlParser.CaseStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#caseStatement}. + * @param ctx the parse tree + */ + void exitCaseStatement(MySqlParser.CaseStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#ifStatement}. + * @param ctx the parse tree + */ + void enterIfStatement(MySqlParser.IfStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#ifStatement}. + * @param ctx the parse tree + */ + void exitIfStatement(MySqlParser.IfStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#iterateStatement}. + * @param ctx the parse tree + */ + void enterIterateStatement(MySqlParser.IterateStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#iterateStatement}. + * @param ctx the parse tree + */ + void exitIterateStatement(MySqlParser.IterateStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#leaveStatement}. + * @param ctx the parse tree + */ + void enterLeaveStatement(MySqlParser.LeaveStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#leaveStatement}. + * @param ctx the parse tree + */ + void exitLeaveStatement(MySqlParser.LeaveStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#loopStatement}. + * @param ctx the parse tree + */ + void enterLoopStatement(MySqlParser.LoopStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#loopStatement}. + * @param ctx the parse tree + */ + void exitLoopStatement(MySqlParser.LoopStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#repeatStatement}. + * @param ctx the parse tree + */ + void enterRepeatStatement(MySqlParser.RepeatStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#repeatStatement}. + * @param ctx the parse tree + */ + void exitRepeatStatement(MySqlParser.RepeatStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#returnStatement}. + * @param ctx the parse tree + */ + void enterReturnStatement(MySqlParser.ReturnStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#returnStatement}. + * @param ctx the parse tree + */ + void exitReturnStatement(MySqlParser.ReturnStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#whileStatement}. + * @param ctx the parse tree + */ + void enterWhileStatement(MySqlParser.WhileStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#whileStatement}. + * @param ctx the parse tree + */ + void exitWhileStatement(MySqlParser.WhileStatementContext ctx); + /** + * Enter a parse tree produced by the {@code CloseCursor} + * labeled alternative in {@link MySqlParser#cursorStatement}. + * @param ctx the parse tree + */ + void enterCloseCursor(MySqlParser.CloseCursorContext ctx); + /** + * Exit a parse tree produced by the {@code CloseCursor} + * labeled alternative in {@link MySqlParser#cursorStatement}. + * @param ctx the parse tree + */ + void exitCloseCursor(MySqlParser.CloseCursorContext ctx); + /** + * Enter a parse tree produced by the {@code FetchCursor} + * labeled alternative in {@link MySqlParser#cursorStatement}. + * @param ctx the parse tree + */ + void enterFetchCursor(MySqlParser.FetchCursorContext ctx); + /** + * Exit a parse tree produced by the {@code FetchCursor} + * labeled alternative in {@link MySqlParser#cursorStatement}. + * @param ctx the parse tree + */ + void exitFetchCursor(MySqlParser.FetchCursorContext ctx); + /** + * Enter a parse tree produced by the {@code OpenCursor} + * labeled alternative in {@link MySqlParser#cursorStatement}. + * @param ctx the parse tree + */ + void enterOpenCursor(MySqlParser.OpenCursorContext ctx); + /** + * Exit a parse tree produced by the {@code OpenCursor} + * labeled alternative in {@link MySqlParser#cursorStatement}. + * @param ctx the parse tree + */ + void exitOpenCursor(MySqlParser.OpenCursorContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#declareVariable}. + * @param ctx the parse tree + */ + void enterDeclareVariable(MySqlParser.DeclareVariableContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#declareVariable}. + * @param ctx the parse tree + */ + void exitDeclareVariable(MySqlParser.DeclareVariableContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#declareCondition}. + * @param ctx the parse tree + */ + void enterDeclareCondition(MySqlParser.DeclareConditionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#declareCondition}. + * @param ctx the parse tree + */ + void exitDeclareCondition(MySqlParser.DeclareConditionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#declareCursor}. + * @param ctx the parse tree + */ + void enterDeclareCursor(MySqlParser.DeclareCursorContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#declareCursor}. + * @param ctx the parse tree + */ + void exitDeclareCursor(MySqlParser.DeclareCursorContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#declareHandler}. + * @param ctx the parse tree + */ + void enterDeclareHandler(MySqlParser.DeclareHandlerContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#declareHandler}. + * @param ctx the parse tree + */ + void exitDeclareHandler(MySqlParser.DeclareHandlerContext ctx); + /** + * Enter a parse tree produced by the {@code handlerConditionCode} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + */ + void enterHandlerConditionCode(MySqlParser.HandlerConditionCodeContext ctx); + /** + * Exit a parse tree produced by the {@code handlerConditionCode} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + */ + void exitHandlerConditionCode(MySqlParser.HandlerConditionCodeContext ctx); + /** + * Enter a parse tree produced by the {@code handlerConditionState} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + */ + void enterHandlerConditionState(MySqlParser.HandlerConditionStateContext ctx); + /** + * Exit a parse tree produced by the {@code handlerConditionState} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + */ + void exitHandlerConditionState(MySqlParser.HandlerConditionStateContext ctx); + /** + * Enter a parse tree produced by the {@code handlerConditionName} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + */ + void enterHandlerConditionName(MySqlParser.HandlerConditionNameContext ctx); + /** + * Exit a parse tree produced by the {@code handlerConditionName} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + */ + void exitHandlerConditionName(MySqlParser.HandlerConditionNameContext ctx); + /** + * Enter a parse tree produced by the {@code handlerConditionWarning} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + */ + void enterHandlerConditionWarning(MySqlParser.HandlerConditionWarningContext ctx); + /** + * Exit a parse tree produced by the {@code handlerConditionWarning} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + */ + void exitHandlerConditionWarning(MySqlParser.HandlerConditionWarningContext ctx); + /** + * Enter a parse tree produced by the {@code handlerConditionNotfound} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + */ + void enterHandlerConditionNotfound(MySqlParser.HandlerConditionNotfoundContext ctx); + /** + * Exit a parse tree produced by the {@code handlerConditionNotfound} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + */ + void exitHandlerConditionNotfound(MySqlParser.HandlerConditionNotfoundContext ctx); + /** + * Enter a parse tree produced by the {@code handlerConditionException} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + */ + void enterHandlerConditionException(MySqlParser.HandlerConditionExceptionContext ctx); + /** + * Exit a parse tree produced by the {@code handlerConditionException} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + */ + void exitHandlerConditionException(MySqlParser.HandlerConditionExceptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#procedureSqlStatement}. + * @param ctx the parse tree + */ + void enterProcedureSqlStatement(MySqlParser.ProcedureSqlStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#procedureSqlStatement}. + * @param ctx the parse tree + */ + void exitProcedureSqlStatement(MySqlParser.ProcedureSqlStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#caseAlternative}. + * @param ctx the parse tree + */ + void enterCaseAlternative(MySqlParser.CaseAlternativeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#caseAlternative}. + * @param ctx the parse tree + */ + void exitCaseAlternative(MySqlParser.CaseAlternativeContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#elifAlternative}. + * @param ctx the parse tree + */ + void enterElifAlternative(MySqlParser.ElifAlternativeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#elifAlternative}. + * @param ctx the parse tree + */ + void exitElifAlternative(MySqlParser.ElifAlternativeContext ctx); + /** + * Enter a parse tree produced by the {@code alterUserMysqlV56} + * labeled alternative in {@link MySqlParser#alterUser}. + * @param ctx the parse tree + */ + void enterAlterUserMysqlV56(MySqlParser.AlterUserMysqlV56Context ctx); + /** + * Exit a parse tree produced by the {@code alterUserMysqlV56} + * labeled alternative in {@link MySqlParser#alterUser}. + * @param ctx the parse tree + */ + void exitAlterUserMysqlV56(MySqlParser.AlterUserMysqlV56Context ctx); + /** + * Enter a parse tree produced by the {@code alterUserMysqlV57} + * labeled alternative in {@link MySqlParser#alterUser}. + * @param ctx the parse tree + */ + void enterAlterUserMysqlV57(MySqlParser.AlterUserMysqlV57Context ctx); + /** + * Exit a parse tree produced by the {@code alterUserMysqlV57} + * labeled alternative in {@link MySqlParser#alterUser}. + * @param ctx the parse tree + */ + void exitAlterUserMysqlV57(MySqlParser.AlterUserMysqlV57Context ctx); + /** + * Enter a parse tree produced by the {@code createUserMysqlV56} + * labeled alternative in {@link MySqlParser#createUser}. + * @param ctx the parse tree + */ + void enterCreateUserMysqlV56(MySqlParser.CreateUserMysqlV56Context ctx); + /** + * Exit a parse tree produced by the {@code createUserMysqlV56} + * labeled alternative in {@link MySqlParser#createUser}. + * @param ctx the parse tree + */ + void exitCreateUserMysqlV56(MySqlParser.CreateUserMysqlV56Context ctx); + /** + * Enter a parse tree produced by the {@code createUserMysqlV57} + * labeled alternative in {@link MySqlParser#createUser}. + * @param ctx the parse tree + */ + void enterCreateUserMysqlV57(MySqlParser.CreateUserMysqlV57Context ctx); + /** + * Exit a parse tree produced by the {@code createUserMysqlV57} + * labeled alternative in {@link MySqlParser#createUser}. + * @param ctx the parse tree + */ + void exitCreateUserMysqlV57(MySqlParser.CreateUserMysqlV57Context ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dropUser}. + * @param ctx the parse tree + */ + void enterDropUser(MySqlParser.DropUserContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dropUser}. + * @param ctx the parse tree + */ + void exitDropUser(MySqlParser.DropUserContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#grantStatement}. + * @param ctx the parse tree + */ + void enterGrantStatement(MySqlParser.GrantStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#grantStatement}. + * @param ctx the parse tree + */ + void exitGrantStatement(MySqlParser.GrantStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#grantProxy}. + * @param ctx the parse tree + */ + void enterGrantProxy(MySqlParser.GrantProxyContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#grantProxy}. + * @param ctx the parse tree + */ + void exitGrantProxy(MySqlParser.GrantProxyContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#renameUser}. + * @param ctx the parse tree + */ + void enterRenameUser(MySqlParser.RenameUserContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#renameUser}. + * @param ctx the parse tree + */ + void exitRenameUser(MySqlParser.RenameUserContext ctx); + /** + * Enter a parse tree produced by the {@code detailRevoke} + * labeled alternative in {@link MySqlParser#revokeStatement}. + * @param ctx the parse tree + */ + void enterDetailRevoke(MySqlParser.DetailRevokeContext ctx); + /** + * Exit a parse tree produced by the {@code detailRevoke} + * labeled alternative in {@link MySqlParser#revokeStatement}. + * @param ctx the parse tree + */ + void exitDetailRevoke(MySqlParser.DetailRevokeContext ctx); + /** + * Enter a parse tree produced by the {@code shortRevoke} + * labeled alternative in {@link MySqlParser#revokeStatement}. + * @param ctx the parse tree + */ + void enterShortRevoke(MySqlParser.ShortRevokeContext ctx); + /** + * Exit a parse tree produced by the {@code shortRevoke} + * labeled alternative in {@link MySqlParser#revokeStatement}. + * @param ctx the parse tree + */ + void exitShortRevoke(MySqlParser.ShortRevokeContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#revokeProxy}. + * @param ctx the parse tree + */ + void enterRevokeProxy(MySqlParser.RevokeProxyContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#revokeProxy}. + * @param ctx the parse tree + */ + void exitRevokeProxy(MySqlParser.RevokeProxyContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#setPasswordStatement}. + * @param ctx the parse tree + */ + void enterSetPasswordStatement(MySqlParser.SetPasswordStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#setPasswordStatement}. + * @param ctx the parse tree + */ + void exitSetPasswordStatement(MySqlParser.SetPasswordStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#userSpecification}. + * @param ctx the parse tree + */ + void enterUserSpecification(MySqlParser.UserSpecificationContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#userSpecification}. + * @param ctx the parse tree + */ + void exitUserSpecification(MySqlParser.UserSpecificationContext ctx); + /** + * Enter a parse tree produced by the {@code passwordAuthOption} + * labeled alternative in {@link MySqlParser#userAuthOption}. + * @param ctx the parse tree + */ + void enterPasswordAuthOption(MySqlParser.PasswordAuthOptionContext ctx); + /** + * Exit a parse tree produced by the {@code passwordAuthOption} + * labeled alternative in {@link MySqlParser#userAuthOption}. + * @param ctx the parse tree + */ + void exitPasswordAuthOption(MySqlParser.PasswordAuthOptionContext ctx); + /** + * Enter a parse tree produced by the {@code stringAuthOption} + * labeled alternative in {@link MySqlParser#userAuthOption}. + * @param ctx the parse tree + */ + void enterStringAuthOption(MySqlParser.StringAuthOptionContext ctx); + /** + * Exit a parse tree produced by the {@code stringAuthOption} + * labeled alternative in {@link MySqlParser#userAuthOption}. + * @param ctx the parse tree + */ + void exitStringAuthOption(MySqlParser.StringAuthOptionContext ctx); + /** + * Enter a parse tree produced by the {@code hashAuthOption} + * labeled alternative in {@link MySqlParser#userAuthOption}. + * @param ctx the parse tree + */ + void enterHashAuthOption(MySqlParser.HashAuthOptionContext ctx); + /** + * Exit a parse tree produced by the {@code hashAuthOption} + * labeled alternative in {@link MySqlParser#userAuthOption}. + * @param ctx the parse tree + */ + void exitHashAuthOption(MySqlParser.HashAuthOptionContext ctx); + /** + * Enter a parse tree produced by the {@code simpleAuthOption} + * labeled alternative in {@link MySqlParser#userAuthOption}. + * @param ctx the parse tree + */ + void enterSimpleAuthOption(MySqlParser.SimpleAuthOptionContext ctx); + /** + * Exit a parse tree produced by the {@code simpleAuthOption} + * labeled alternative in {@link MySqlParser#userAuthOption}. + * @param ctx the parse tree + */ + void exitSimpleAuthOption(MySqlParser.SimpleAuthOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#tlsOption}. + * @param ctx the parse tree + */ + void enterTlsOption(MySqlParser.TlsOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#tlsOption}. + * @param ctx the parse tree + */ + void exitTlsOption(MySqlParser.TlsOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#userResourceOption}. + * @param ctx the parse tree + */ + void enterUserResourceOption(MySqlParser.UserResourceOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#userResourceOption}. + * @param ctx the parse tree + */ + void exitUserResourceOption(MySqlParser.UserResourceOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#userPasswordOption}. + * @param ctx the parse tree + */ + void enterUserPasswordOption(MySqlParser.UserPasswordOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#userPasswordOption}. + * @param ctx the parse tree + */ + void exitUserPasswordOption(MySqlParser.UserPasswordOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#userLockOption}. + * @param ctx the parse tree + */ + void enterUserLockOption(MySqlParser.UserLockOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#userLockOption}. + * @param ctx the parse tree + */ + void exitUserLockOption(MySqlParser.UserLockOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#privelegeClause}. + * @param ctx the parse tree + */ + void enterPrivelegeClause(MySqlParser.PrivelegeClauseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#privelegeClause}. + * @param ctx the parse tree + */ + void exitPrivelegeClause(MySqlParser.PrivelegeClauseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#privilege}. + * @param ctx the parse tree + */ + void enterPrivilege(MySqlParser.PrivilegeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#privilege}. + * @param ctx the parse tree + */ + void exitPrivilege(MySqlParser.PrivilegeContext ctx); + /** + * Enter a parse tree produced by the {@code currentSchemaPriviLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + */ + void enterCurrentSchemaPriviLevel(MySqlParser.CurrentSchemaPriviLevelContext ctx); + /** + * Exit a parse tree produced by the {@code currentSchemaPriviLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + */ + void exitCurrentSchemaPriviLevel(MySqlParser.CurrentSchemaPriviLevelContext ctx); + /** + * Enter a parse tree produced by the {@code globalPrivLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + */ + void enterGlobalPrivLevel(MySqlParser.GlobalPrivLevelContext ctx); + /** + * Exit a parse tree produced by the {@code globalPrivLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + */ + void exitGlobalPrivLevel(MySqlParser.GlobalPrivLevelContext ctx); + /** + * Enter a parse tree produced by the {@code definiteSchemaPrivLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + */ + void enterDefiniteSchemaPrivLevel(MySqlParser.DefiniteSchemaPrivLevelContext ctx); + /** + * Exit a parse tree produced by the {@code definiteSchemaPrivLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + */ + void exitDefiniteSchemaPrivLevel(MySqlParser.DefiniteSchemaPrivLevelContext ctx); + /** + * Enter a parse tree produced by the {@code definiteFullTablePrivLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + */ + void enterDefiniteFullTablePrivLevel(MySqlParser.DefiniteFullTablePrivLevelContext ctx); + /** + * Exit a parse tree produced by the {@code definiteFullTablePrivLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + */ + void exitDefiniteFullTablePrivLevel(MySqlParser.DefiniteFullTablePrivLevelContext ctx); + /** + * Enter a parse tree produced by the {@code definiteFullTablePrivLevel2} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + */ + void enterDefiniteFullTablePrivLevel2(MySqlParser.DefiniteFullTablePrivLevel2Context ctx); + /** + * Exit a parse tree produced by the {@code definiteFullTablePrivLevel2} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + */ + void exitDefiniteFullTablePrivLevel2(MySqlParser.DefiniteFullTablePrivLevel2Context ctx); + /** + * Enter a parse tree produced by the {@code definiteTablePrivLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + */ + void enterDefiniteTablePrivLevel(MySqlParser.DefiniteTablePrivLevelContext ctx); + /** + * Exit a parse tree produced by the {@code definiteTablePrivLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + */ + void exitDefiniteTablePrivLevel(MySqlParser.DefiniteTablePrivLevelContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#renameUserClause}. + * @param ctx the parse tree + */ + void enterRenameUserClause(MySqlParser.RenameUserClauseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#renameUserClause}. + * @param ctx the parse tree + */ + void exitRenameUserClause(MySqlParser.RenameUserClauseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#analyzeTable}. + * @param ctx the parse tree + */ + void enterAnalyzeTable(MySqlParser.AnalyzeTableContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#analyzeTable}. + * @param ctx the parse tree + */ + void exitAnalyzeTable(MySqlParser.AnalyzeTableContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#checkTable}. + * @param ctx the parse tree + */ + void enterCheckTable(MySqlParser.CheckTableContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#checkTable}. + * @param ctx the parse tree + */ + void exitCheckTable(MySqlParser.CheckTableContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#checksumTable}. + * @param ctx the parse tree + */ + void enterChecksumTable(MySqlParser.ChecksumTableContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#checksumTable}. + * @param ctx the parse tree + */ + void exitChecksumTable(MySqlParser.ChecksumTableContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#optimizeTable}. + * @param ctx the parse tree + */ + void enterOptimizeTable(MySqlParser.OptimizeTableContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#optimizeTable}. + * @param ctx the parse tree + */ + void exitOptimizeTable(MySqlParser.OptimizeTableContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#repairTable}. + * @param ctx the parse tree + */ + void enterRepairTable(MySqlParser.RepairTableContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#repairTable}. + * @param ctx the parse tree + */ + void exitRepairTable(MySqlParser.RepairTableContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#checkTableOption}. + * @param ctx the parse tree + */ + void enterCheckTableOption(MySqlParser.CheckTableOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#checkTableOption}. + * @param ctx the parse tree + */ + void exitCheckTableOption(MySqlParser.CheckTableOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#createUdfunction}. + * @param ctx the parse tree + */ + void enterCreateUdfunction(MySqlParser.CreateUdfunctionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#createUdfunction}. + * @param ctx the parse tree + */ + void exitCreateUdfunction(MySqlParser.CreateUdfunctionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#installPlugin}. + * @param ctx the parse tree + */ + void enterInstallPlugin(MySqlParser.InstallPluginContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#installPlugin}. + * @param ctx the parse tree + */ + void exitInstallPlugin(MySqlParser.InstallPluginContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#uninstallPlugin}. + * @param ctx the parse tree + */ + void enterUninstallPlugin(MySqlParser.UninstallPluginContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#uninstallPlugin}. + * @param ctx the parse tree + */ + void exitUninstallPlugin(MySqlParser.UninstallPluginContext ctx); + /** + * Enter a parse tree produced by the {@code setVariable} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void enterSetVariable(MySqlParser.SetVariableContext ctx); + /** + * Exit a parse tree produced by the {@code setVariable} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void exitSetVariable(MySqlParser.SetVariableContext ctx); + /** + * Enter a parse tree produced by the {@code setCharset} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void enterSetCharset(MySqlParser.SetCharsetContext ctx); + /** + * Exit a parse tree produced by the {@code setCharset} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void exitSetCharset(MySqlParser.SetCharsetContext ctx); + /** + * Enter a parse tree produced by the {@code setNames} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void enterSetNames(MySqlParser.SetNamesContext ctx); + /** + * Exit a parse tree produced by the {@code setNames} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void exitSetNames(MySqlParser.SetNamesContext ctx); + /** + * Enter a parse tree produced by the {@code setPassword} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void enterSetPassword(MySqlParser.SetPasswordContext ctx); + /** + * Exit a parse tree produced by the {@code setPassword} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void exitSetPassword(MySqlParser.SetPasswordContext ctx); + /** + * Enter a parse tree produced by the {@code setTransaction} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void enterSetTransaction(MySqlParser.SetTransactionContext ctx); + /** + * Exit a parse tree produced by the {@code setTransaction} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void exitSetTransaction(MySqlParser.SetTransactionContext ctx); + /** + * Enter a parse tree produced by the {@code setAutocommit} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void enterSetAutocommit(MySqlParser.SetAutocommitContext ctx); + /** + * Exit a parse tree produced by the {@code setAutocommit} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void exitSetAutocommit(MySqlParser.SetAutocommitContext ctx); + /** + * Enter a parse tree produced by the {@code setNewValueInsideTrigger} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void enterSetNewValueInsideTrigger(MySqlParser.SetNewValueInsideTriggerContext ctx); + /** + * Exit a parse tree produced by the {@code setNewValueInsideTrigger} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + */ + void exitSetNewValueInsideTrigger(MySqlParser.SetNewValueInsideTriggerContext ctx); + /** + * Enter a parse tree produced by the {@code showMasterLogs} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowMasterLogs(MySqlParser.ShowMasterLogsContext ctx); + /** + * Exit a parse tree produced by the {@code showMasterLogs} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowMasterLogs(MySqlParser.ShowMasterLogsContext ctx); + /** + * Enter a parse tree produced by the {@code showLogEvents} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowLogEvents(MySqlParser.ShowLogEventsContext ctx); + /** + * Exit a parse tree produced by the {@code showLogEvents} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowLogEvents(MySqlParser.ShowLogEventsContext ctx); + /** + * Enter a parse tree produced by the {@code showObjectFilter} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowObjectFilter(MySqlParser.ShowObjectFilterContext ctx); + /** + * Exit a parse tree produced by the {@code showObjectFilter} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowObjectFilter(MySqlParser.ShowObjectFilterContext ctx); + /** + * Enter a parse tree produced by the {@code showColumns} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowColumns(MySqlParser.ShowColumnsContext ctx); + /** + * Exit a parse tree produced by the {@code showColumns} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowColumns(MySqlParser.ShowColumnsContext ctx); + /** + * Enter a parse tree produced by the {@code showCreateDb} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowCreateDb(MySqlParser.ShowCreateDbContext ctx); + /** + * Exit a parse tree produced by the {@code showCreateDb} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowCreateDb(MySqlParser.ShowCreateDbContext ctx); + /** + * Enter a parse tree produced by the {@code showCreateFullIdObject} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowCreateFullIdObject(MySqlParser.ShowCreateFullIdObjectContext ctx); + /** + * Exit a parse tree produced by the {@code showCreateFullIdObject} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowCreateFullIdObject(MySqlParser.ShowCreateFullIdObjectContext ctx); + /** + * Enter a parse tree produced by the {@code showCreateUser} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowCreateUser(MySqlParser.ShowCreateUserContext ctx); + /** + * Exit a parse tree produced by the {@code showCreateUser} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowCreateUser(MySqlParser.ShowCreateUserContext ctx); + /** + * Enter a parse tree produced by the {@code showEngine} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowEngine(MySqlParser.ShowEngineContext ctx); + /** + * Exit a parse tree produced by the {@code showEngine} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowEngine(MySqlParser.ShowEngineContext ctx); + /** + * Enter a parse tree produced by the {@code showGlobalInfo} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowGlobalInfo(MySqlParser.ShowGlobalInfoContext ctx); + /** + * Exit a parse tree produced by the {@code showGlobalInfo} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowGlobalInfo(MySqlParser.ShowGlobalInfoContext ctx); + /** + * Enter a parse tree produced by the {@code showErrors} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowErrors(MySqlParser.ShowErrorsContext ctx); + /** + * Exit a parse tree produced by the {@code showErrors} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowErrors(MySqlParser.ShowErrorsContext ctx); + /** + * Enter a parse tree produced by the {@code showCountErrors} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowCountErrors(MySqlParser.ShowCountErrorsContext ctx); + /** + * Exit a parse tree produced by the {@code showCountErrors} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowCountErrors(MySqlParser.ShowCountErrorsContext ctx); + /** + * Enter a parse tree produced by the {@code showSchemaFilter} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowSchemaFilter(MySqlParser.ShowSchemaFilterContext ctx); + /** + * Exit a parse tree produced by the {@code showSchemaFilter} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowSchemaFilter(MySqlParser.ShowSchemaFilterContext ctx); + /** + * Enter a parse tree produced by the {@code showRoutine} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowRoutine(MySqlParser.ShowRoutineContext ctx); + /** + * Exit a parse tree produced by the {@code showRoutine} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowRoutine(MySqlParser.ShowRoutineContext ctx); + /** + * Enter a parse tree produced by the {@code showGrants} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowGrants(MySqlParser.ShowGrantsContext ctx); + /** + * Exit a parse tree produced by the {@code showGrants} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowGrants(MySqlParser.ShowGrantsContext ctx); + /** + * Enter a parse tree produced by the {@code showIndexes} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowIndexes(MySqlParser.ShowIndexesContext ctx); + /** + * Exit a parse tree produced by the {@code showIndexes} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowIndexes(MySqlParser.ShowIndexesContext ctx); + /** + * Enter a parse tree produced by the {@code showOpenTables} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowOpenTables(MySqlParser.ShowOpenTablesContext ctx); + /** + * Exit a parse tree produced by the {@code showOpenTables} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowOpenTables(MySqlParser.ShowOpenTablesContext ctx); + /** + * Enter a parse tree produced by the {@code showProfile} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowProfile(MySqlParser.ShowProfileContext ctx); + /** + * Exit a parse tree produced by the {@code showProfile} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowProfile(MySqlParser.ShowProfileContext ctx); + /** + * Enter a parse tree produced by the {@code showSlaveStatus} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowSlaveStatus(MySqlParser.ShowSlaveStatusContext ctx); + /** + * Exit a parse tree produced by the {@code showSlaveStatus} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowSlaveStatus(MySqlParser.ShowSlaveStatusContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#variableClause}. + * @param ctx the parse tree + */ + void enterVariableClause(MySqlParser.VariableClauseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#variableClause}. + * @param ctx the parse tree + */ + void exitVariableClause(MySqlParser.VariableClauseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#showCommonEntity}. + * @param ctx the parse tree + */ + void enterShowCommonEntity(MySqlParser.ShowCommonEntityContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#showCommonEntity}. + * @param ctx the parse tree + */ + void exitShowCommonEntity(MySqlParser.ShowCommonEntityContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#showFilter}. + * @param ctx the parse tree + */ + void enterShowFilter(MySqlParser.ShowFilterContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#showFilter}. + * @param ctx the parse tree + */ + void exitShowFilter(MySqlParser.ShowFilterContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#showGlobalInfoClause}. + * @param ctx the parse tree + */ + void enterShowGlobalInfoClause(MySqlParser.ShowGlobalInfoClauseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#showGlobalInfoClause}. + * @param ctx the parse tree + */ + void exitShowGlobalInfoClause(MySqlParser.ShowGlobalInfoClauseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#showSchemaEntity}. + * @param ctx the parse tree + */ + void enterShowSchemaEntity(MySqlParser.ShowSchemaEntityContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#showSchemaEntity}. + * @param ctx the parse tree + */ + void exitShowSchemaEntity(MySqlParser.ShowSchemaEntityContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#showProfileType}. + * @param ctx the parse tree + */ + void enterShowProfileType(MySqlParser.ShowProfileTypeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#showProfileType}. + * @param ctx the parse tree + */ + void exitShowProfileType(MySqlParser.ShowProfileTypeContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#binlogStatement}. + * @param ctx the parse tree + */ + void enterBinlogStatement(MySqlParser.BinlogStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#binlogStatement}. + * @param ctx the parse tree + */ + void exitBinlogStatement(MySqlParser.BinlogStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#cacheIndexStatement}. + * @param ctx the parse tree + */ + void enterCacheIndexStatement(MySqlParser.CacheIndexStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#cacheIndexStatement}. + * @param ctx the parse tree + */ + void exitCacheIndexStatement(MySqlParser.CacheIndexStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#flushStatement}. + * @param ctx the parse tree + */ + void enterFlushStatement(MySqlParser.FlushStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#flushStatement}. + * @param ctx the parse tree + */ + void exitFlushStatement(MySqlParser.FlushStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#killStatement}. + * @param ctx the parse tree + */ + void enterKillStatement(MySqlParser.KillStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#killStatement}. + * @param ctx the parse tree + */ + void exitKillStatement(MySqlParser.KillStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#loadIndexIntoCache}. + * @param ctx the parse tree + */ + void enterLoadIndexIntoCache(MySqlParser.LoadIndexIntoCacheContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#loadIndexIntoCache}. + * @param ctx the parse tree + */ + void exitLoadIndexIntoCache(MySqlParser.LoadIndexIntoCacheContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#resetStatement}. + * @param ctx the parse tree + */ + void enterResetStatement(MySqlParser.ResetStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#resetStatement}. + * @param ctx the parse tree + */ + void exitResetStatement(MySqlParser.ResetStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#shutdownStatement}. + * @param ctx the parse tree + */ + void enterShutdownStatement(MySqlParser.ShutdownStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#shutdownStatement}. + * @param ctx the parse tree + */ + void exitShutdownStatement(MySqlParser.ShutdownStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#tableIndexes}. + * @param ctx the parse tree + */ + void enterTableIndexes(MySqlParser.TableIndexesContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#tableIndexes}. + * @param ctx the parse tree + */ + void exitTableIndexes(MySqlParser.TableIndexesContext ctx); + /** + * Enter a parse tree produced by the {@code simpleFlushOption} + * labeled alternative in {@link MySqlParser#flushOption}. + * @param ctx the parse tree + */ + void enterSimpleFlushOption(MySqlParser.SimpleFlushOptionContext ctx); + /** + * Exit a parse tree produced by the {@code simpleFlushOption} + * labeled alternative in {@link MySqlParser#flushOption}. + * @param ctx the parse tree + */ + void exitSimpleFlushOption(MySqlParser.SimpleFlushOptionContext ctx); + /** + * Enter a parse tree produced by the {@code channelFlushOption} + * labeled alternative in {@link MySqlParser#flushOption}. + * @param ctx the parse tree + */ + void enterChannelFlushOption(MySqlParser.ChannelFlushOptionContext ctx); + /** + * Exit a parse tree produced by the {@code channelFlushOption} + * labeled alternative in {@link MySqlParser#flushOption}. + * @param ctx the parse tree + */ + void exitChannelFlushOption(MySqlParser.ChannelFlushOptionContext ctx); + /** + * Enter a parse tree produced by the {@code tableFlushOption} + * labeled alternative in {@link MySqlParser#flushOption}. + * @param ctx the parse tree + */ + void enterTableFlushOption(MySqlParser.TableFlushOptionContext ctx); + /** + * Exit a parse tree produced by the {@code tableFlushOption} + * labeled alternative in {@link MySqlParser#flushOption}. + * @param ctx the parse tree + */ + void exitTableFlushOption(MySqlParser.TableFlushOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#flushTableOption}. + * @param ctx the parse tree + */ + void enterFlushTableOption(MySqlParser.FlushTableOptionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#flushTableOption}. + * @param ctx the parse tree + */ + void exitFlushTableOption(MySqlParser.FlushTableOptionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#loadedTableIndexes}. + * @param ctx the parse tree + */ + void enterLoadedTableIndexes(MySqlParser.LoadedTableIndexesContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#loadedTableIndexes}. + * @param ctx the parse tree + */ + void exitLoadedTableIndexes(MySqlParser.LoadedTableIndexesContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#simpleDescribeStatement}. + * @param ctx the parse tree + */ + void enterSimpleDescribeStatement(MySqlParser.SimpleDescribeStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#simpleDescribeStatement}. + * @param ctx the parse tree + */ + void exitSimpleDescribeStatement(MySqlParser.SimpleDescribeStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#fullDescribeStatement}. + * @param ctx the parse tree + */ + void enterFullDescribeStatement(MySqlParser.FullDescribeStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#fullDescribeStatement}. + * @param ctx the parse tree + */ + void exitFullDescribeStatement(MySqlParser.FullDescribeStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#helpStatement}. + * @param ctx the parse tree + */ + void enterHelpStatement(MySqlParser.HelpStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#helpStatement}. + * @param ctx the parse tree + */ + void exitHelpStatement(MySqlParser.HelpStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#useStatement}. + * @param ctx the parse tree + */ + void enterUseStatement(MySqlParser.UseStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#useStatement}. + * @param ctx the parse tree + */ + void exitUseStatement(MySqlParser.UseStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#signalStatement}. + * @param ctx the parse tree + */ + void enterSignalStatement(MySqlParser.SignalStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#signalStatement}. + * @param ctx the parse tree + */ + void exitSignalStatement(MySqlParser.SignalStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#resignalStatement}. + * @param ctx the parse tree + */ + void enterResignalStatement(MySqlParser.ResignalStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#resignalStatement}. + * @param ctx the parse tree + */ + void exitResignalStatement(MySqlParser.ResignalStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#signalConditionInformation}. + * @param ctx the parse tree + */ + void enterSignalConditionInformation(MySqlParser.SignalConditionInformationContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#signalConditionInformation}. + * @param ctx the parse tree + */ + void exitSignalConditionInformation(MySqlParser.SignalConditionInformationContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#diagnosticsStatement}. + * @param ctx the parse tree + */ + void enterDiagnosticsStatement(MySqlParser.DiagnosticsStatementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#diagnosticsStatement}. + * @param ctx the parse tree + */ + void exitDiagnosticsStatement(MySqlParser.DiagnosticsStatementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#diagnosticsConditionInformationName}. + * @param ctx the parse tree + */ + void enterDiagnosticsConditionInformationName(MySqlParser.DiagnosticsConditionInformationNameContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#diagnosticsConditionInformationName}. + * @param ctx the parse tree + */ + void exitDiagnosticsConditionInformationName(MySqlParser.DiagnosticsConditionInformationNameContext ctx); + /** + * Enter a parse tree produced by the {@code describeStatements} + * labeled alternative in {@link MySqlParser#describeObjectClause}. + * @param ctx the parse tree + */ + void enterDescribeStatements(MySqlParser.DescribeStatementsContext ctx); + /** + * Exit a parse tree produced by the {@code describeStatements} + * labeled alternative in {@link MySqlParser#describeObjectClause}. + * @param ctx the parse tree + */ + void exitDescribeStatements(MySqlParser.DescribeStatementsContext ctx); + /** + * Enter a parse tree produced by the {@code describeConnection} + * labeled alternative in {@link MySqlParser#describeObjectClause}. + * @param ctx the parse tree + */ + void enterDescribeConnection(MySqlParser.DescribeConnectionContext ctx); + /** + * Exit a parse tree produced by the {@code describeConnection} + * labeled alternative in {@link MySqlParser#describeObjectClause}. + * @param ctx the parse tree + */ + void exitDescribeConnection(MySqlParser.DescribeConnectionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#fullId}. + * @param ctx the parse tree + */ + void enterFullId(MySqlParser.FullIdContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#fullId}. + * @param ctx the parse tree + */ + void exitFullId(MySqlParser.FullIdContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#tableName}. + * @param ctx the parse tree + */ + void enterTableName(MySqlParser.TableNameContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#tableName}. + * @param ctx the parse tree + */ + void exitTableName(MySqlParser.TableNameContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#fullColumnName}. + * @param ctx the parse tree + */ + void enterFullColumnName(MySqlParser.FullColumnNameContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#fullColumnName}. + * @param ctx the parse tree + */ + void exitFullColumnName(MySqlParser.FullColumnNameContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#indexColumnName}. + * @param ctx the parse tree + */ + void enterIndexColumnName(MySqlParser.IndexColumnNameContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#indexColumnName}. + * @param ctx the parse tree + */ + void exitIndexColumnName(MySqlParser.IndexColumnNameContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#userName}. + * @param ctx the parse tree + */ + void enterUserName(MySqlParser.UserNameContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#userName}. + * @param ctx the parse tree + */ + void exitUserName(MySqlParser.UserNameContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#mysqlVariable}. + * @param ctx the parse tree + */ + void enterMysqlVariable(MySqlParser.MysqlVariableContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#mysqlVariable}. + * @param ctx the parse tree + */ + void exitMysqlVariable(MySqlParser.MysqlVariableContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#charsetName}. + * @param ctx the parse tree + */ + void enterCharsetName(MySqlParser.CharsetNameContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#charsetName}. + * @param ctx the parse tree + */ + void exitCharsetName(MySqlParser.CharsetNameContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#collationName}. + * @param ctx the parse tree + */ + void enterCollationName(MySqlParser.CollationNameContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#collationName}. + * @param ctx the parse tree + */ + void exitCollationName(MySqlParser.CollationNameContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#engineName}. + * @param ctx the parse tree + */ + void enterEngineName(MySqlParser.EngineNameContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#engineName}. + * @param ctx the parse tree + */ + void exitEngineName(MySqlParser.EngineNameContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#uuidSet}. + * @param ctx the parse tree + */ + void enterUuidSet(MySqlParser.UuidSetContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#uuidSet}. + * @param ctx the parse tree + */ + void exitUuidSet(MySqlParser.UuidSetContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#xid}. + * @param ctx the parse tree + */ + void enterXid(MySqlParser.XidContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#xid}. + * @param ctx the parse tree + */ + void exitXid(MySqlParser.XidContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#xuidStringId}. + * @param ctx the parse tree + */ + void enterXuidStringId(MySqlParser.XuidStringIdContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#xuidStringId}. + * @param ctx the parse tree + */ + void exitXuidStringId(MySqlParser.XuidStringIdContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#authPlugin}. + * @param ctx the parse tree + */ + void enterAuthPlugin(MySqlParser.AuthPluginContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#authPlugin}. + * @param ctx the parse tree + */ + void exitAuthPlugin(MySqlParser.AuthPluginContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#uid}. + * @param ctx the parse tree + */ + void enterUid(MySqlParser.UidContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#uid}. + * @param ctx the parse tree + */ + void exitUid(MySqlParser.UidContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#simpleId}. + * @param ctx the parse tree + */ + void enterSimpleId(MySqlParser.SimpleIdContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#simpleId}. + * @param ctx the parse tree + */ + void exitSimpleId(MySqlParser.SimpleIdContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dottedId}. + * @param ctx the parse tree + */ + void enterDottedId(MySqlParser.DottedIdContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dottedId}. + * @param ctx the parse tree + */ + void exitDottedId(MySqlParser.DottedIdContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#decimalLiteral}. + * @param ctx the parse tree + */ + void enterDecimalLiteral(MySqlParser.DecimalLiteralContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#decimalLiteral}. + * @param ctx the parse tree + */ + void exitDecimalLiteral(MySqlParser.DecimalLiteralContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#fileSizeLiteral}. + * @param ctx the parse tree + */ + void enterFileSizeLiteral(MySqlParser.FileSizeLiteralContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#fileSizeLiteral}. + * @param ctx the parse tree + */ + void exitFileSizeLiteral(MySqlParser.FileSizeLiteralContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#stringLiteral}. + * @param ctx the parse tree + */ + void enterStringLiteral(MySqlParser.StringLiteralContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#stringLiteral}. + * @param ctx the parse tree + */ + void exitStringLiteral(MySqlParser.StringLiteralContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#booleanLiteral}. + * @param ctx the parse tree + */ + void enterBooleanLiteral(MySqlParser.BooleanLiteralContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#booleanLiteral}. + * @param ctx the parse tree + */ + void exitBooleanLiteral(MySqlParser.BooleanLiteralContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#hexadecimalLiteral}. + * @param ctx the parse tree + */ + void enterHexadecimalLiteral(MySqlParser.HexadecimalLiteralContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#hexadecimalLiteral}. + * @param ctx the parse tree + */ + void exitHexadecimalLiteral(MySqlParser.HexadecimalLiteralContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#nullNotnull}. + * @param ctx the parse tree + */ + void enterNullNotnull(MySqlParser.NullNotnullContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#nullNotnull}. + * @param ctx the parse tree + */ + void exitNullNotnull(MySqlParser.NullNotnullContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#constant}. + * @param ctx the parse tree + */ + void enterConstant(MySqlParser.ConstantContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#constant}. + * @param ctx the parse tree + */ + void exitConstant(MySqlParser.ConstantContext ctx); + /** + * Enter a parse tree produced by the {@code stringDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void enterStringDataType(MySqlParser.StringDataTypeContext ctx); + /** + * Exit a parse tree produced by the {@code stringDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void exitStringDataType(MySqlParser.StringDataTypeContext ctx); + /** + * Enter a parse tree produced by the {@code nationalStringDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void enterNationalStringDataType(MySqlParser.NationalStringDataTypeContext ctx); + /** + * Exit a parse tree produced by the {@code nationalStringDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void exitNationalStringDataType(MySqlParser.NationalStringDataTypeContext ctx); + /** + * Enter a parse tree produced by the {@code nationalVaryingStringDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void enterNationalVaryingStringDataType(MySqlParser.NationalVaryingStringDataTypeContext ctx); + /** + * Exit a parse tree produced by the {@code nationalVaryingStringDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void exitNationalVaryingStringDataType(MySqlParser.NationalVaryingStringDataTypeContext ctx); + /** + * Enter a parse tree produced by the {@code dimensionDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void enterDimensionDataType(MySqlParser.DimensionDataTypeContext ctx); + /** + * Exit a parse tree produced by the {@code dimensionDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void exitDimensionDataType(MySqlParser.DimensionDataTypeContext ctx); + /** + * Enter a parse tree produced by the {@code simpleDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void enterSimpleDataType(MySqlParser.SimpleDataTypeContext ctx); + /** + * Exit a parse tree produced by the {@code simpleDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void exitSimpleDataType(MySqlParser.SimpleDataTypeContext ctx); + /** + * Enter a parse tree produced by the {@code collectionDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void enterCollectionDataType(MySqlParser.CollectionDataTypeContext ctx); + /** + * Exit a parse tree produced by the {@code collectionDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void exitCollectionDataType(MySqlParser.CollectionDataTypeContext ctx); + /** + * Enter a parse tree produced by the {@code spatialDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void enterSpatialDataType(MySqlParser.SpatialDataTypeContext ctx); + /** + * Exit a parse tree produced by the {@code spatialDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + */ + void exitSpatialDataType(MySqlParser.SpatialDataTypeContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#collectionOptions}. + * @param ctx the parse tree + */ + void enterCollectionOptions(MySqlParser.CollectionOptionsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#collectionOptions}. + * @param ctx the parse tree + */ + void exitCollectionOptions(MySqlParser.CollectionOptionsContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#convertedDataType}. + * @param ctx the parse tree + */ + void enterConvertedDataType(MySqlParser.ConvertedDataTypeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#convertedDataType}. + * @param ctx the parse tree + */ + void exitConvertedDataType(MySqlParser.ConvertedDataTypeContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#lengthOneDimension}. + * @param ctx the parse tree + */ + void enterLengthOneDimension(MySqlParser.LengthOneDimensionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#lengthOneDimension}. + * @param ctx the parse tree + */ + void exitLengthOneDimension(MySqlParser.LengthOneDimensionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#lengthTwoDimension}. + * @param ctx the parse tree + */ + void enterLengthTwoDimension(MySqlParser.LengthTwoDimensionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#lengthTwoDimension}. + * @param ctx the parse tree + */ + void exitLengthTwoDimension(MySqlParser.LengthTwoDimensionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#lengthTwoOptionalDimension}. + * @param ctx the parse tree + */ + void enterLengthTwoOptionalDimension(MySqlParser.LengthTwoOptionalDimensionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#lengthTwoOptionalDimension}. + * @param ctx the parse tree + */ + void exitLengthTwoOptionalDimension(MySqlParser.LengthTwoOptionalDimensionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#uidList}. + * @param ctx the parse tree + */ + void enterUidList(MySqlParser.UidListContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#uidList}. + * @param ctx the parse tree + */ + void exitUidList(MySqlParser.UidListContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#tables}. + * @param ctx the parse tree + */ + void enterTables(MySqlParser.TablesContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#tables}. + * @param ctx the parse tree + */ + void exitTables(MySqlParser.TablesContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#indexColumnNames}. + * @param ctx the parse tree + */ + void enterIndexColumnNames(MySqlParser.IndexColumnNamesContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#indexColumnNames}. + * @param ctx the parse tree + */ + void exitIndexColumnNames(MySqlParser.IndexColumnNamesContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#expressions}. + * @param ctx the parse tree + */ + void enterExpressions(MySqlParser.ExpressionsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#expressions}. + * @param ctx the parse tree + */ + void exitExpressions(MySqlParser.ExpressionsContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#expressionsForUpdate}. + * @param ctx the parse tree + */ + void enterExpressionsForUpdate(MySqlParser.ExpressionsForUpdateContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#expressionsForUpdate}. + * @param ctx the parse tree + */ + void exitExpressionsForUpdate(MySqlParser.ExpressionsForUpdateContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#expressionsWithDefaults}. + * @param ctx the parse tree + */ + void enterExpressionsWithDefaults(MySqlParser.ExpressionsWithDefaultsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#expressionsWithDefaults}. + * @param ctx the parse tree + */ + void exitExpressionsWithDefaults(MySqlParser.ExpressionsWithDefaultsContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#constants}. + * @param ctx the parse tree + */ + void enterConstants(MySqlParser.ConstantsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#constants}. + * @param ctx the parse tree + */ + void exitConstants(MySqlParser.ConstantsContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#simpleStrings}. + * @param ctx the parse tree + */ + void enterSimpleStrings(MySqlParser.SimpleStringsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#simpleStrings}. + * @param ctx the parse tree + */ + void exitSimpleStrings(MySqlParser.SimpleStringsContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#userVariables}. + * @param ctx the parse tree + */ + void enterUserVariables(MySqlParser.UserVariablesContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#userVariables}. + * @param ctx the parse tree + */ + void exitUserVariables(MySqlParser.UserVariablesContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#defaultValue}. + * @param ctx the parse tree + */ + void enterDefaultValue(MySqlParser.DefaultValueContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#defaultValue}. + * @param ctx the parse tree + */ + void exitDefaultValue(MySqlParser.DefaultValueContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#currentTimestamp}. + * @param ctx the parse tree + */ + void enterCurrentTimestamp(MySqlParser.CurrentTimestampContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#currentTimestamp}. + * @param ctx the parse tree + */ + void exitCurrentTimestamp(MySqlParser.CurrentTimestampContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#expressionOrDefault}. + * @param ctx the parse tree + */ + void enterExpressionOrDefault(MySqlParser.ExpressionOrDefaultContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#expressionOrDefault}. + * @param ctx the parse tree + */ + void exitExpressionOrDefault(MySqlParser.ExpressionOrDefaultContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#ifExists}. + * @param ctx the parse tree + */ + void enterIfExists(MySqlParser.IfExistsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#ifExists}. + * @param ctx the parse tree + */ + void exitIfExists(MySqlParser.IfExistsContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#ifNotExists}. + * @param ctx the parse tree + */ + void enterIfNotExists(MySqlParser.IfNotExistsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#ifNotExists}. + * @param ctx the parse tree + */ + void exitIfNotExists(MySqlParser.IfNotExistsContext ctx); + /** + * Enter a parse tree produced by the {@code specificFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + */ + void enterSpecificFunctionCall(MySqlParser.SpecificFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code specificFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + */ + void exitSpecificFunctionCall(MySqlParser.SpecificFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code aggregateFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + */ + void enterAggregateFunctionCall(MySqlParser.AggregateFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code aggregateFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + */ + void exitAggregateFunctionCall(MySqlParser.AggregateFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code scalarFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + */ + void enterScalarFunctionCall(MySqlParser.ScalarFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code scalarFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + */ + void exitScalarFunctionCall(MySqlParser.ScalarFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code udfFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + */ + void enterUdfFunctionCall(MySqlParser.UdfFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code udfFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + */ + void exitUdfFunctionCall(MySqlParser.UdfFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code passwordFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + */ + void enterPasswordFunctionCall(MySqlParser.PasswordFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code passwordFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + */ + void exitPasswordFunctionCall(MySqlParser.PasswordFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code simpleFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void enterSimpleFunctionCall(MySqlParser.SimpleFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code simpleFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void exitSimpleFunctionCall(MySqlParser.SimpleFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code dataTypeFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void enterDataTypeFunctionCall(MySqlParser.DataTypeFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code dataTypeFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void exitDataTypeFunctionCall(MySqlParser.DataTypeFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code valuesFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void enterValuesFunctionCall(MySqlParser.ValuesFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code valuesFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void exitValuesFunctionCall(MySqlParser.ValuesFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code caseFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void enterCaseFunctionCall(MySqlParser.CaseFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code caseFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void exitCaseFunctionCall(MySqlParser.CaseFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code charFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void enterCharFunctionCall(MySqlParser.CharFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code charFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void exitCharFunctionCall(MySqlParser.CharFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code positionFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void enterPositionFunctionCall(MySqlParser.PositionFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code positionFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void exitPositionFunctionCall(MySqlParser.PositionFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code substrFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void enterSubstrFunctionCall(MySqlParser.SubstrFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code substrFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void exitSubstrFunctionCall(MySqlParser.SubstrFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code trimFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void enterTrimFunctionCall(MySqlParser.TrimFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code trimFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void exitTrimFunctionCall(MySqlParser.TrimFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code weightFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void enterWeightFunctionCall(MySqlParser.WeightFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code weightFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void exitWeightFunctionCall(MySqlParser.WeightFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code extractFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void enterExtractFunctionCall(MySqlParser.ExtractFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code extractFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void exitExtractFunctionCall(MySqlParser.ExtractFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code getFormatFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void enterGetFormatFunctionCall(MySqlParser.GetFormatFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code getFormatFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + */ + void exitGetFormatFunctionCall(MySqlParser.GetFormatFunctionCallContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#caseFuncAlternative}. + * @param ctx the parse tree + */ + void enterCaseFuncAlternative(MySqlParser.CaseFuncAlternativeContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#caseFuncAlternative}. + * @param ctx the parse tree + */ + void exitCaseFuncAlternative(MySqlParser.CaseFuncAlternativeContext ctx); + /** + * Enter a parse tree produced by the {@code levelWeightList} + * labeled alternative in {@link MySqlParser#levelsInWeightString}. + * @param ctx the parse tree + */ + void enterLevelWeightList(MySqlParser.LevelWeightListContext ctx); + /** + * Exit a parse tree produced by the {@code levelWeightList} + * labeled alternative in {@link MySqlParser#levelsInWeightString}. + * @param ctx the parse tree + */ + void exitLevelWeightList(MySqlParser.LevelWeightListContext ctx); + /** + * Enter a parse tree produced by the {@code levelWeightRange} + * labeled alternative in {@link MySqlParser#levelsInWeightString}. + * @param ctx the parse tree + */ + void enterLevelWeightRange(MySqlParser.LevelWeightRangeContext ctx); + /** + * Exit a parse tree produced by the {@code levelWeightRange} + * labeled alternative in {@link MySqlParser#levelsInWeightString}. + * @param ctx the parse tree + */ + void exitLevelWeightRange(MySqlParser.LevelWeightRangeContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#levelInWeightListElement}. + * @param ctx the parse tree + */ + void enterLevelInWeightListElement(MySqlParser.LevelInWeightListElementContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#levelInWeightListElement}. + * @param ctx the parse tree + */ + void exitLevelInWeightListElement(MySqlParser.LevelInWeightListElementContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#aggregateWindowedFunction}. + * @param ctx the parse tree + */ + void enterAggregateWindowedFunction(MySqlParser.AggregateWindowedFunctionContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#aggregateWindowedFunction}. + * @param ctx the parse tree + */ + void exitAggregateWindowedFunction(MySqlParser.AggregateWindowedFunctionContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#scalarFunctionName}. + * @param ctx the parse tree + */ + void enterScalarFunctionName(MySqlParser.ScalarFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#scalarFunctionName}. + * @param ctx the parse tree + */ + void exitScalarFunctionName(MySqlParser.ScalarFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#passwordFunctionClause}. + * @param ctx the parse tree + */ + void enterPasswordFunctionClause(MySqlParser.PasswordFunctionClauseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#passwordFunctionClause}. + * @param ctx the parse tree + */ + void exitPasswordFunctionClause(MySqlParser.PasswordFunctionClauseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#functionArgs}. + * @param ctx the parse tree + */ + void enterFunctionArgs(MySqlParser.FunctionArgsContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#functionArgs}. + * @param ctx the parse tree + */ + void exitFunctionArgs(MySqlParser.FunctionArgsContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#functionArg}. + * @param ctx the parse tree + */ + void enterFunctionArg(MySqlParser.FunctionArgContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#functionArg}. + * @param ctx the parse tree + */ + void exitFunctionArg(MySqlParser.FunctionArgContext ctx); + /** + * Enter a parse tree produced by the {@code isExpression} + * labeled alternative in {@link MySqlParser#expression}. + * @param ctx the parse tree + */ + void enterIsExpression(MySqlParser.IsExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code isExpression} + * labeled alternative in {@link MySqlParser#expression}. + * @param ctx the parse tree + */ + void exitIsExpression(MySqlParser.IsExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code notExpression} + * labeled alternative in {@link MySqlParser#expression}. + * @param ctx the parse tree + */ + void enterNotExpression(MySqlParser.NotExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code notExpression} + * labeled alternative in {@link MySqlParser#expression}. + * @param ctx the parse tree + */ + void exitNotExpression(MySqlParser.NotExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code logicalExpression} + * labeled alternative in {@link MySqlParser#expression}. + * @param ctx the parse tree + */ + void enterLogicalExpression(MySqlParser.LogicalExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code logicalExpression} + * labeled alternative in {@link MySqlParser#expression}. + * @param ctx the parse tree + */ + void exitLogicalExpression(MySqlParser.LogicalExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code predicateExpression} + * labeled alternative in {@link MySqlParser#expression}. + * @param ctx the parse tree + */ + void enterPredicateExpression(MySqlParser.PredicateExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code predicateExpression} + * labeled alternative in {@link MySqlParser#expression}. + * @param ctx the parse tree + */ + void exitPredicateExpression(MySqlParser.PredicateExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code soundsLikePredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void enterSoundsLikePredicate(MySqlParser.SoundsLikePredicateContext ctx); + /** + * Exit a parse tree produced by the {@code soundsLikePredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void exitSoundsLikePredicate(MySqlParser.SoundsLikePredicateContext ctx); + /** + * Enter a parse tree produced by the {@code expressionAtomPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void enterExpressionAtomPredicate(MySqlParser.ExpressionAtomPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code expressionAtomPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void exitExpressionAtomPredicate(MySqlParser.ExpressionAtomPredicateContext ctx); + /** + * Enter a parse tree produced by the {@code inPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void enterInPredicate(MySqlParser.InPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code inPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void exitInPredicate(MySqlParser.InPredicateContext ctx); + /** + * Enter a parse tree produced by the {@code subqueryComparasionPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void enterSubqueryComparasionPredicate(MySqlParser.SubqueryComparasionPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code subqueryComparasionPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void exitSubqueryComparasionPredicate(MySqlParser.SubqueryComparasionPredicateContext ctx); + /** + * Enter a parse tree produced by the {@code betweenPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void enterBetweenPredicate(MySqlParser.BetweenPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code betweenPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void exitBetweenPredicate(MySqlParser.BetweenPredicateContext ctx); + /** + * Enter a parse tree produced by the {@code binaryComparasionPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void enterBinaryComparasionPredicate(MySqlParser.BinaryComparasionPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code binaryComparasionPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void exitBinaryComparasionPredicate(MySqlParser.BinaryComparasionPredicateContext ctx); + /** + * Enter a parse tree produced by the {@code isNullPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void enterIsNullPredicate(MySqlParser.IsNullPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code isNullPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void exitIsNullPredicate(MySqlParser.IsNullPredicateContext ctx); + /** + * Enter a parse tree produced by the {@code likePredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void enterLikePredicate(MySqlParser.LikePredicateContext ctx); + /** + * Exit a parse tree produced by the {@code likePredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void exitLikePredicate(MySqlParser.LikePredicateContext ctx); + /** + * Enter a parse tree produced by the {@code regexpPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void enterRegexpPredicate(MySqlParser.RegexpPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code regexpPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + */ + void exitRegexpPredicate(MySqlParser.RegexpPredicateContext ctx); + /** + * Enter a parse tree produced by the {@code logicalExpressionForUpdate} + * labeled alternative in {@link MySqlParser#expressionForUpdate}. + * @param ctx the parse tree + */ + void enterLogicalExpressionForUpdate(MySqlParser.LogicalExpressionForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code logicalExpressionForUpdate} + * labeled alternative in {@link MySqlParser#expressionForUpdate}. + * @param ctx the parse tree + */ + void exitLogicalExpressionForUpdate(MySqlParser.LogicalExpressionForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code predicateExpressionForUpdate} + * labeled alternative in {@link MySqlParser#expressionForUpdate}. + * @param ctx the parse tree + */ + void enterPredicateExpressionForUpdate(MySqlParser.PredicateExpressionForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code predicateExpressionForUpdate} + * labeled alternative in {@link MySqlParser#expressionForUpdate}. + * @param ctx the parse tree + */ + void exitPredicateExpressionForUpdate(MySqlParser.PredicateExpressionForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code isExpressionForUpdate} + * labeled alternative in {@link MySqlParser#expressionForUpdate}. + * @param ctx the parse tree + */ + void enterIsExpressionForUpdate(MySqlParser.IsExpressionForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code isExpressionForUpdate} + * labeled alternative in {@link MySqlParser#expressionForUpdate}. + * @param ctx the parse tree + */ + void exitIsExpressionForUpdate(MySqlParser.IsExpressionForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code notExpressionForUpdate} + * labeled alternative in {@link MySqlParser#expressionForUpdate}. + * @param ctx the parse tree + */ + void enterNotExpressionForUpdate(MySqlParser.NotExpressionForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code notExpressionForUpdate} + * labeled alternative in {@link MySqlParser#expressionForUpdate}. + * @param ctx the parse tree + */ + void exitNotExpressionForUpdate(MySqlParser.NotExpressionForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code binaryComparasionPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void enterBinaryComparasionPredicateForUpdate(MySqlParser.BinaryComparasionPredicateForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code binaryComparasionPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void exitBinaryComparasionPredicateForUpdate(MySqlParser.BinaryComparasionPredicateForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code likePredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void enterLikePredicateForUpdate(MySqlParser.LikePredicateForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code likePredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void exitLikePredicateForUpdate(MySqlParser.LikePredicateForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code regexpPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void enterRegexpPredicateForUpdate(MySqlParser.RegexpPredicateForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code regexpPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void exitRegexpPredicateForUpdate(MySqlParser.RegexpPredicateForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code isNullPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void enterIsNullPredicateForUpdate(MySqlParser.IsNullPredicateForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code isNullPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void exitIsNullPredicateForUpdate(MySqlParser.IsNullPredicateForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code betweenPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void enterBetweenPredicateForUpdate(MySqlParser.BetweenPredicateForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code betweenPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void exitBetweenPredicateForUpdate(MySqlParser.BetweenPredicateForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code soundsLikePredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void enterSoundsLikePredicateForUpdate(MySqlParser.SoundsLikePredicateForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code soundsLikePredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void exitSoundsLikePredicateForUpdate(MySqlParser.SoundsLikePredicateForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code inPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void enterInPredicateForUpdate(MySqlParser.InPredicateForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code inPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void exitInPredicateForUpdate(MySqlParser.InPredicateForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code subqueryComparasionPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void enterSubqueryComparasionPredicateForUpdate(MySqlParser.SubqueryComparasionPredicateForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code subqueryComparasionPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void exitSubqueryComparasionPredicateForUpdate(MySqlParser.SubqueryComparasionPredicateForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code expressionAtomPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void enterExpressionAtomPredicateForUpdate(MySqlParser.ExpressionAtomPredicateForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code expressionAtomPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + */ + void exitExpressionAtomPredicateForUpdate(MySqlParser.ExpressionAtomPredicateForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code intervalExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterIntervalExpressionAtomForUpdate(MySqlParser.IntervalExpressionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code intervalExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitIntervalExpressionAtomForUpdate(MySqlParser.IntervalExpressionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code fullColumnNameExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterFullColumnNameExpressionAtomForUpdate(MySqlParser.FullColumnNameExpressionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code fullColumnNameExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitFullColumnNameExpressionAtomForUpdate(MySqlParser.FullColumnNameExpressionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code mysqlVariableExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterMysqlVariableExpressionAtomForUpdate(MySqlParser.MysqlVariableExpressionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code mysqlVariableExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitMysqlVariableExpressionAtomForUpdate(MySqlParser.MysqlVariableExpressionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code unaryExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterUnaryExpressionAtomForUpdate(MySqlParser.UnaryExpressionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code unaryExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitUnaryExpressionAtomForUpdate(MySqlParser.UnaryExpressionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code nestedRowExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterNestedRowExpressionAtomForUpdate(MySqlParser.NestedRowExpressionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code nestedRowExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitNestedRowExpressionAtomForUpdate(MySqlParser.NestedRowExpressionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code subqueryExpessionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterSubqueryExpessionAtomForUpdate(MySqlParser.SubqueryExpessionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code subqueryExpessionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitSubqueryExpessionAtomForUpdate(MySqlParser.SubqueryExpessionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code bitExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterBitExpressionAtomForUpdate(MySqlParser.BitExpressionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code bitExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitBitExpressionAtomForUpdate(MySqlParser.BitExpressionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code mathExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterMathExpressionAtomForUpdate(MySqlParser.MathExpressionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code mathExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitMathExpressionAtomForUpdate(MySqlParser.MathExpressionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code constantExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterConstantExpressionAtomForUpdate(MySqlParser.ConstantExpressionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code constantExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitConstantExpressionAtomForUpdate(MySqlParser.ConstantExpressionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code collateExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterCollateExpressionAtomForUpdate(MySqlParser.CollateExpressionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code collateExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitCollateExpressionAtomForUpdate(MySqlParser.CollateExpressionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code binaryExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterBinaryExpressionAtomForUpdate(MySqlParser.BinaryExpressionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code binaryExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitBinaryExpressionAtomForUpdate(MySqlParser.BinaryExpressionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code nestedExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterNestedExpressionAtomForUpdate(MySqlParser.NestedExpressionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code nestedExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitNestedExpressionAtomForUpdate(MySqlParser.NestedExpressionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code existsExpessionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterExistsExpessionAtomForUpdate(MySqlParser.ExistsExpessionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code existsExpessionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitExistsExpessionAtomForUpdate(MySqlParser.ExistsExpessionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code functionCallExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void enterFunctionCallExpressionAtomForUpdate(MySqlParser.FunctionCallExpressionAtomForUpdateContext ctx); + /** + * Exit a parse tree produced by the {@code functionCallExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + */ + void exitFunctionCallExpressionAtomForUpdate(MySqlParser.FunctionCallExpressionAtomForUpdateContext ctx); + /** + * Enter a parse tree produced by the {@code unaryExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterUnaryExpressionAtom(MySqlParser.UnaryExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code unaryExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitUnaryExpressionAtom(MySqlParser.UnaryExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code collateExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterCollateExpressionAtom(MySqlParser.CollateExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code collateExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitCollateExpressionAtom(MySqlParser.CollateExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code subqueryExpessionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterSubqueryExpessionAtom(MySqlParser.SubqueryExpessionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code subqueryExpessionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitSubqueryExpessionAtom(MySqlParser.SubqueryExpessionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code mysqlVariableExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterMysqlVariableExpressionAtom(MySqlParser.MysqlVariableExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code mysqlVariableExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitMysqlVariableExpressionAtom(MySqlParser.MysqlVariableExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code nestedExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterNestedExpressionAtom(MySqlParser.NestedExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code nestedExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitNestedExpressionAtom(MySqlParser.NestedExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code nestedRowExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterNestedRowExpressionAtom(MySqlParser.NestedRowExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code nestedRowExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitNestedRowExpressionAtom(MySqlParser.NestedRowExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code mathExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterMathExpressionAtom(MySqlParser.MathExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code mathExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitMathExpressionAtom(MySqlParser.MathExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code intervalExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterIntervalExpressionAtom(MySqlParser.IntervalExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code intervalExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitIntervalExpressionAtom(MySqlParser.IntervalExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code existsExpessionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterExistsExpessionAtom(MySqlParser.ExistsExpessionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code existsExpessionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitExistsExpessionAtom(MySqlParser.ExistsExpessionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code constantExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterConstantExpressionAtom(MySqlParser.ConstantExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code constantExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitConstantExpressionAtom(MySqlParser.ConstantExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code functionCallExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterFunctionCallExpressionAtom(MySqlParser.FunctionCallExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code functionCallExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitFunctionCallExpressionAtom(MySqlParser.FunctionCallExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code binaryExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterBinaryExpressionAtom(MySqlParser.BinaryExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code binaryExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitBinaryExpressionAtom(MySqlParser.BinaryExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code fullColumnNameExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterFullColumnNameExpressionAtom(MySqlParser.FullColumnNameExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code fullColumnNameExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitFullColumnNameExpressionAtom(MySqlParser.FullColumnNameExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code bitExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterBitExpressionAtom(MySqlParser.BitExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code bitExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitBitExpressionAtom(MySqlParser.BitExpressionAtomContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#unaryOperator}. + * @param ctx the parse tree + */ + void enterUnaryOperator(MySqlParser.UnaryOperatorContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#unaryOperator}. + * @param ctx the parse tree + */ + void exitUnaryOperator(MySqlParser.UnaryOperatorContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#comparisonOperator}. + * @param ctx the parse tree + */ + void enterComparisonOperator(MySqlParser.ComparisonOperatorContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#comparisonOperator}. + * @param ctx the parse tree + */ + void exitComparisonOperator(MySqlParser.ComparisonOperatorContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#logicalOperator}. + * @param ctx the parse tree + */ + void enterLogicalOperator(MySqlParser.LogicalOperatorContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#logicalOperator}. + * @param ctx the parse tree + */ + void exitLogicalOperator(MySqlParser.LogicalOperatorContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#bitOperator}. + * @param ctx the parse tree + */ + void enterBitOperator(MySqlParser.BitOperatorContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#bitOperator}. + * @param ctx the parse tree + */ + void exitBitOperator(MySqlParser.BitOperatorContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#mathOperator}. + * @param ctx the parse tree + */ + void enterMathOperator(MySqlParser.MathOperatorContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#mathOperator}. + * @param ctx the parse tree + */ + void exitMathOperator(MySqlParser.MathOperatorContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#charsetNameBase}. + * @param ctx the parse tree + */ + void enterCharsetNameBase(MySqlParser.CharsetNameBaseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#charsetNameBase}. + * @param ctx the parse tree + */ + void exitCharsetNameBase(MySqlParser.CharsetNameBaseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#transactionLevelBase}. + * @param ctx the parse tree + */ + void enterTransactionLevelBase(MySqlParser.TransactionLevelBaseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#transactionLevelBase}. + * @param ctx the parse tree + */ + void exitTransactionLevelBase(MySqlParser.TransactionLevelBaseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#privilegesBase}. + * @param ctx the parse tree + */ + void enterPrivilegesBase(MySqlParser.PrivilegesBaseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#privilegesBase}. + * @param ctx the parse tree + */ + void exitPrivilegesBase(MySqlParser.PrivilegesBaseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#intervalTypeBase}. + * @param ctx the parse tree + */ + void enterIntervalTypeBase(MySqlParser.IntervalTypeBaseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#intervalTypeBase}. + * @param ctx the parse tree + */ + void exitIntervalTypeBase(MySqlParser.IntervalTypeBaseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#dataTypeBase}. + * @param ctx the parse tree + */ + void enterDataTypeBase(MySqlParser.DataTypeBaseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#dataTypeBase}. + * @param ctx the parse tree + */ + void exitDataTypeBase(MySqlParser.DataTypeBaseContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#keywordsCanBeId}. + * @param ctx the parse tree + */ + void enterKeywordsCanBeId(MySqlParser.KeywordsCanBeIdContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#keywordsCanBeId}. + * @param ctx the parse tree + */ + void exitKeywordsCanBeId(MySqlParser.KeywordsCanBeIdContext ctx); + /** + * Enter a parse tree produced by {@link MySqlParser#functionNameBase}. + * @param ctx the parse tree + */ + void enterFunctionNameBase(MySqlParser.FunctionNameBaseContext ctx); + /** + * Exit a parse tree produced by {@link MySqlParser#functionNameBase}. + * @param ctx the parse tree + */ + void exitFunctionNameBase(MySqlParser.FunctionNameBaseContext ctx); +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserVisitor.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserVisitor.java new file mode 100644 index 00000000000..0bb2157b35c --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/parser/MySqlParserVisitor.java @@ -0,0 +1,3722 @@ +// Generated from E:/seata/seata/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/antlr\MySqlParser.g4 by ANTLR 4.8 +package io.seata.sqlparser.antlr.mysql.parser; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by {@link MySqlParser}. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public interface MySqlParserVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by {@link MySqlParser#root}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRoot(MySqlParser.RootContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#sqlStatements}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSqlStatements(MySqlParser.SqlStatementsContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#sqlStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSqlStatement(MySqlParser.SqlStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#emptyStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEmptyStatement(MySqlParser.EmptyStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#ddlStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDdlStatement(MySqlParser.DdlStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dmlStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDmlStatement(MySqlParser.DmlStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#transactionStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTransactionStatement(MySqlParser.TransactionStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#replicationStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReplicationStatement(MySqlParser.ReplicationStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#preparedStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPreparedStatement(MySqlParser.PreparedStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#compoundStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCompoundStatement(MySqlParser.CompoundStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#administrationStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAdministrationStatement(MySqlParser.AdministrationStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#utilityStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUtilityStatement(MySqlParser.UtilityStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createDatabase}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateDatabase(MySqlParser.CreateDatabaseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createEvent}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateEvent(MySqlParser.CreateEventContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createIndex}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateIndex(MySqlParser.CreateIndexContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createLogfileGroup}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateLogfileGroup(MySqlParser.CreateLogfileGroupContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createProcedure}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateProcedure(MySqlParser.CreateProcedureContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateFunction(MySqlParser.CreateFunctionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createServer}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateServer(MySqlParser.CreateServerContext ctx); + /** + * Visit a parse tree produced by the {@code copyCreateTable} + * labeled alternative in {@link MySqlParser#createTable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCopyCreateTable(MySqlParser.CopyCreateTableContext ctx); + /** + * Visit a parse tree produced by the {@code queryCreateTable} + * labeled alternative in {@link MySqlParser#createTable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitQueryCreateTable(MySqlParser.QueryCreateTableContext ctx); + /** + * Visit a parse tree produced by the {@code columnCreateTable} + * labeled alternative in {@link MySqlParser#createTable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitColumnCreateTable(MySqlParser.ColumnCreateTableContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createTablespaceInnodb}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateTablespaceInnodb(MySqlParser.CreateTablespaceInnodbContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createTablespaceNdb}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateTablespaceNdb(MySqlParser.CreateTablespaceNdbContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createTrigger}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateTrigger(MySqlParser.CreateTriggerContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createView}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateView(MySqlParser.CreateViewContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createDatabaseOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateDatabaseOption(MySqlParser.CreateDatabaseOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#ownerStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOwnerStatement(MySqlParser.OwnerStatementContext ctx); + /** + * Visit a parse tree produced by the {@code preciseSchedule} + * labeled alternative in {@link MySqlParser#scheduleExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPreciseSchedule(MySqlParser.PreciseScheduleContext ctx); + /** + * Visit a parse tree produced by the {@code intervalSchedule} + * labeled alternative in {@link MySqlParser#scheduleExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIntervalSchedule(MySqlParser.IntervalScheduleContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#timestampValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTimestampValue(MySqlParser.TimestampValueContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#intervalExpr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIntervalExpr(MySqlParser.IntervalExprContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#intervalType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIntervalType(MySqlParser.IntervalTypeContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#enableType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEnableType(MySqlParser.EnableTypeContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#indexType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIndexType(MySqlParser.IndexTypeContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#indexOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIndexOption(MySqlParser.IndexOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#procedureParameter}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitProcedureParameter(MySqlParser.ProcedureParameterContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#functionParameter}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionParameter(MySqlParser.FunctionParameterContext ctx); + /** + * Visit a parse tree produced by the {@code routineComment} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRoutineComment(MySqlParser.RoutineCommentContext ctx); + /** + * Visit a parse tree produced by the {@code routineLanguage} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRoutineLanguage(MySqlParser.RoutineLanguageContext ctx); + /** + * Visit a parse tree produced by the {@code routineBehavior} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRoutineBehavior(MySqlParser.RoutineBehaviorContext ctx); + /** + * Visit a parse tree produced by the {@code routineData} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRoutineData(MySqlParser.RoutineDataContext ctx); + /** + * Visit a parse tree produced by the {@code routineSecurity} + * labeled alternative in {@link MySqlParser#routineOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRoutineSecurity(MySqlParser.RoutineSecurityContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#serverOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitServerOption(MySqlParser.ServerOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createDefinitions}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateDefinitions(MySqlParser.CreateDefinitionsContext ctx); + /** + * Visit a parse tree produced by the {@code columnDeclaration} + * labeled alternative in {@link MySqlParser#createDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitColumnDeclaration(MySqlParser.ColumnDeclarationContext ctx); + /** + * Visit a parse tree produced by the {@code constraintDeclaration} + * labeled alternative in {@link MySqlParser#createDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitConstraintDeclaration(MySqlParser.ConstraintDeclarationContext ctx); + /** + * Visit a parse tree produced by the {@code indexDeclaration} + * labeled alternative in {@link MySqlParser#createDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIndexDeclaration(MySqlParser.IndexDeclarationContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#columnDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitColumnDefinition(MySqlParser.ColumnDefinitionContext ctx); + /** + * Visit a parse tree produced by the {@code nullColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNullColumnConstraint(MySqlParser.NullColumnConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code defaultColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDefaultColumnConstraint(MySqlParser.DefaultColumnConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code autoIncrementColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAutoIncrementColumnConstraint(MySqlParser.AutoIncrementColumnConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code primaryKeyColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPrimaryKeyColumnConstraint(MySqlParser.PrimaryKeyColumnConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code uniqueKeyColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUniqueKeyColumnConstraint(MySqlParser.UniqueKeyColumnConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code commentColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCommentColumnConstraint(MySqlParser.CommentColumnConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code formatColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFormatColumnConstraint(MySqlParser.FormatColumnConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code storageColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStorageColumnConstraint(MySqlParser.StorageColumnConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code referenceColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReferenceColumnConstraint(MySqlParser.ReferenceColumnConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code collateColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCollateColumnConstraint(MySqlParser.CollateColumnConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code generatedColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGeneratedColumnConstraint(MySqlParser.GeneratedColumnConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code serialDefaultColumnConstraint} + * labeled alternative in {@link MySqlParser#columnConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSerialDefaultColumnConstraint(MySqlParser.SerialDefaultColumnConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code primaryKeyTableConstraint} + * labeled alternative in {@link MySqlParser#tableConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPrimaryKeyTableConstraint(MySqlParser.PrimaryKeyTableConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code uniqueKeyTableConstraint} + * labeled alternative in {@link MySqlParser#tableConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUniqueKeyTableConstraint(MySqlParser.UniqueKeyTableConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code foreignKeyTableConstraint} + * labeled alternative in {@link MySqlParser#tableConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitForeignKeyTableConstraint(MySqlParser.ForeignKeyTableConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code checkTableConstraint} + * labeled alternative in {@link MySqlParser#tableConstraint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCheckTableConstraint(MySqlParser.CheckTableConstraintContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#referenceDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReferenceDefinition(MySqlParser.ReferenceDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#referenceAction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReferenceAction(MySqlParser.ReferenceActionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#referenceControlType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReferenceControlType(MySqlParser.ReferenceControlTypeContext ctx); + /** + * Visit a parse tree produced by the {@code simpleIndexDeclaration} + * labeled alternative in {@link MySqlParser#indexColumnDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSimpleIndexDeclaration(MySqlParser.SimpleIndexDeclarationContext ctx); + /** + * Visit a parse tree produced by the {@code specialIndexDeclaration} + * labeled alternative in {@link MySqlParser#indexColumnDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSpecialIndexDeclaration(MySqlParser.SpecialIndexDeclarationContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionEngine} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionEngine(MySqlParser.TableOptionEngineContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionAutoIncrement} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionAutoIncrement(MySqlParser.TableOptionAutoIncrementContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionAverage} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionAverage(MySqlParser.TableOptionAverageContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionCharset} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionCharset(MySqlParser.TableOptionCharsetContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionChecksum} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionChecksum(MySqlParser.TableOptionChecksumContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionCollate} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionCollate(MySqlParser.TableOptionCollateContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionComment} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionComment(MySqlParser.TableOptionCommentContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionCompression} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionCompression(MySqlParser.TableOptionCompressionContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionConnection} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionConnection(MySqlParser.TableOptionConnectionContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionDataDirectory} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionDataDirectory(MySqlParser.TableOptionDataDirectoryContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionDelay} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionDelay(MySqlParser.TableOptionDelayContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionEncryption} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionEncryption(MySqlParser.TableOptionEncryptionContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionIndexDirectory} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionIndexDirectory(MySqlParser.TableOptionIndexDirectoryContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionInsertMethod} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionInsertMethod(MySqlParser.TableOptionInsertMethodContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionKeyBlockSize} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionKeyBlockSize(MySqlParser.TableOptionKeyBlockSizeContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionMaxRows} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionMaxRows(MySqlParser.TableOptionMaxRowsContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionMinRows} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionMinRows(MySqlParser.TableOptionMinRowsContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionPackKeys} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionPackKeys(MySqlParser.TableOptionPackKeysContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionPassword} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionPassword(MySqlParser.TableOptionPasswordContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionRowFormat} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionRowFormat(MySqlParser.TableOptionRowFormatContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionRecalculation} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionRecalculation(MySqlParser.TableOptionRecalculationContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionPersistent} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionPersistent(MySqlParser.TableOptionPersistentContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionSamplePage} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionSamplePage(MySqlParser.TableOptionSamplePageContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionTablespace} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionTablespace(MySqlParser.TableOptionTablespaceContext ctx); + /** + * Visit a parse tree produced by the {@code tableOptionUnion} + * labeled alternative in {@link MySqlParser#tableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableOptionUnion(MySqlParser.TableOptionUnionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#tablespaceStorage}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTablespaceStorage(MySqlParser.TablespaceStorageContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#partitionDefinitions}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionDefinitions(MySqlParser.PartitionDefinitionsContext ctx); + /** + * Visit a parse tree produced by the {@code partitionFunctionHash} + * labeled alternative in {@link MySqlParser#partitionFunctionDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionFunctionHash(MySqlParser.PartitionFunctionHashContext ctx); + /** + * Visit a parse tree produced by the {@code partitionFunctionKey} + * labeled alternative in {@link MySqlParser#partitionFunctionDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionFunctionKey(MySqlParser.PartitionFunctionKeyContext ctx); + /** + * Visit a parse tree produced by the {@code partitionFunctionRange} + * labeled alternative in {@link MySqlParser#partitionFunctionDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionFunctionRange(MySqlParser.PartitionFunctionRangeContext ctx); + /** + * Visit a parse tree produced by the {@code partitionFunctionList} + * labeled alternative in {@link MySqlParser#partitionFunctionDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionFunctionList(MySqlParser.PartitionFunctionListContext ctx); + /** + * Visit a parse tree produced by the {@code subPartitionFunctionHash} + * labeled alternative in {@link MySqlParser#subpartitionFunctionDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSubPartitionFunctionHash(MySqlParser.SubPartitionFunctionHashContext ctx); + /** + * Visit a parse tree produced by the {@code subPartitionFunctionKey} + * labeled alternative in {@link MySqlParser#subpartitionFunctionDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSubPartitionFunctionKey(MySqlParser.SubPartitionFunctionKeyContext ctx); + /** + * Visit a parse tree produced by the {@code partitionComparision} + * labeled alternative in {@link MySqlParser#partitionDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionComparision(MySqlParser.PartitionComparisionContext ctx); + /** + * Visit a parse tree produced by the {@code partitionListAtom} + * labeled alternative in {@link MySqlParser#partitionDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionListAtom(MySqlParser.PartitionListAtomContext ctx); + /** + * Visit a parse tree produced by the {@code partitionListVector} + * labeled alternative in {@link MySqlParser#partitionDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionListVector(MySqlParser.PartitionListVectorContext ctx); + /** + * Visit a parse tree produced by the {@code partitionSimple} + * labeled alternative in {@link MySqlParser#partitionDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionSimple(MySqlParser.PartitionSimpleContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#partitionDefinerAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionDefinerAtom(MySqlParser.PartitionDefinerAtomContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#partitionDefinerVector}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionDefinerVector(MySqlParser.PartitionDefinerVectorContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#subpartitionDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSubpartitionDefinition(MySqlParser.SubpartitionDefinitionContext ctx); + /** + * Visit a parse tree produced by the {@code partitionOptionEngine} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionOptionEngine(MySqlParser.PartitionOptionEngineContext ctx); + /** + * Visit a parse tree produced by the {@code partitionOptionComment} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionOptionComment(MySqlParser.PartitionOptionCommentContext ctx); + /** + * Visit a parse tree produced by the {@code partitionOptionDataDirectory} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionOptionDataDirectory(MySqlParser.PartitionOptionDataDirectoryContext ctx); + /** + * Visit a parse tree produced by the {@code partitionOptionIndexDirectory} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionOptionIndexDirectory(MySqlParser.PartitionOptionIndexDirectoryContext ctx); + /** + * Visit a parse tree produced by the {@code partitionOptionMaxRows} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionOptionMaxRows(MySqlParser.PartitionOptionMaxRowsContext ctx); + /** + * Visit a parse tree produced by the {@code partitionOptionMinRows} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionOptionMinRows(MySqlParser.PartitionOptionMinRowsContext ctx); + /** + * Visit a parse tree produced by the {@code partitionOptionTablespace} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionOptionTablespace(MySqlParser.PartitionOptionTablespaceContext ctx); + /** + * Visit a parse tree produced by the {@code partitionOptionNodeGroup} + * labeled alternative in {@link MySqlParser#partitionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPartitionOptionNodeGroup(MySqlParser.PartitionOptionNodeGroupContext ctx); + /** + * Visit a parse tree produced by the {@code alterSimpleDatabase} + * labeled alternative in {@link MySqlParser#alterDatabase}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterSimpleDatabase(MySqlParser.AlterSimpleDatabaseContext ctx); + /** + * Visit a parse tree produced by the {@code alterUpgradeName} + * labeled alternative in {@link MySqlParser#alterDatabase}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterUpgradeName(MySqlParser.AlterUpgradeNameContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#alterEvent}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterEvent(MySqlParser.AlterEventContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#alterFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterFunction(MySqlParser.AlterFunctionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#alterInstance}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterInstance(MySqlParser.AlterInstanceContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#alterLogfileGroup}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterLogfileGroup(MySqlParser.AlterLogfileGroupContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#alterProcedure}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterProcedure(MySqlParser.AlterProcedureContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#alterServer}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterServer(MySqlParser.AlterServerContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#alterTable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterTable(MySqlParser.AlterTableContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#alterTablespace}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterTablespace(MySqlParser.AlterTablespaceContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#alterView}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterView(MySqlParser.AlterViewContext ctx); + /** + * Visit a parse tree produced by the {@code alterByTableOption} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByTableOption(MySqlParser.AlterByTableOptionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByAddColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByAddColumn(MySqlParser.AlterByAddColumnContext ctx); + /** + * Visit a parse tree produced by the {@code alterByAddColumns} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByAddColumns(MySqlParser.AlterByAddColumnsContext ctx); + /** + * Visit a parse tree produced by the {@code alterByAddIndex} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByAddIndex(MySqlParser.AlterByAddIndexContext ctx); + /** + * Visit a parse tree produced by the {@code alterByAddPrimaryKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByAddPrimaryKey(MySqlParser.AlterByAddPrimaryKeyContext ctx); + /** + * Visit a parse tree produced by the {@code alterByAddUniqueKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByAddUniqueKey(MySqlParser.AlterByAddUniqueKeyContext ctx); + /** + * Visit a parse tree produced by the {@code alterByAddSpecialIndex} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByAddSpecialIndex(MySqlParser.AlterByAddSpecialIndexContext ctx); + /** + * Visit a parse tree produced by the {@code alterByAddForeignKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByAddForeignKey(MySqlParser.AlterByAddForeignKeyContext ctx); + /** + * Visit a parse tree produced by the {@code alterByAddCheckTableConstraint} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByAddCheckTableConstraint(MySqlParser.AlterByAddCheckTableConstraintContext ctx); + /** + * Visit a parse tree produced by the {@code alterBySetAlgorithm} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterBySetAlgorithm(MySqlParser.AlterBySetAlgorithmContext ctx); + /** + * Visit a parse tree produced by the {@code alterByChangeDefault} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByChangeDefault(MySqlParser.AlterByChangeDefaultContext ctx); + /** + * Visit a parse tree produced by the {@code alterByChangeColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByChangeColumn(MySqlParser.AlterByChangeColumnContext ctx); + /** + * Visit a parse tree produced by the {@code alterByRenameColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByRenameColumn(MySqlParser.AlterByRenameColumnContext ctx); + /** + * Visit a parse tree produced by the {@code alterByLock} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByLock(MySqlParser.AlterByLockContext ctx); + /** + * Visit a parse tree produced by the {@code alterByModifyColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByModifyColumn(MySqlParser.AlterByModifyColumnContext ctx); + /** + * Visit a parse tree produced by the {@code alterByDropColumn} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByDropColumn(MySqlParser.AlterByDropColumnContext ctx); + /** + * Visit a parse tree produced by the {@code alterByDropPrimaryKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByDropPrimaryKey(MySqlParser.AlterByDropPrimaryKeyContext ctx); + /** + * Visit a parse tree produced by the {@code alterByRenameIndex} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByRenameIndex(MySqlParser.AlterByRenameIndexContext ctx); + /** + * Visit a parse tree produced by the {@code alterByDropIndex} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByDropIndex(MySqlParser.AlterByDropIndexContext ctx); + /** + * Visit a parse tree produced by the {@code alterByDropForeignKey} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByDropForeignKey(MySqlParser.AlterByDropForeignKeyContext ctx); + /** + * Visit a parse tree produced by the {@code alterByDisableKeys} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByDisableKeys(MySqlParser.AlterByDisableKeysContext ctx); + /** + * Visit a parse tree produced by the {@code alterByEnableKeys} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByEnableKeys(MySqlParser.AlterByEnableKeysContext ctx); + /** + * Visit a parse tree produced by the {@code alterByRename} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByRename(MySqlParser.AlterByRenameContext ctx); + /** + * Visit a parse tree produced by the {@code alterByOrder} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByOrder(MySqlParser.AlterByOrderContext ctx); + /** + * Visit a parse tree produced by the {@code alterByConvertCharset} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByConvertCharset(MySqlParser.AlterByConvertCharsetContext ctx); + /** + * Visit a parse tree produced by the {@code alterByDefaultCharset} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByDefaultCharset(MySqlParser.AlterByDefaultCharsetContext ctx); + /** + * Visit a parse tree produced by the {@code alterByDiscardTablespace} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByDiscardTablespace(MySqlParser.AlterByDiscardTablespaceContext ctx); + /** + * Visit a parse tree produced by the {@code alterByImportTablespace} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByImportTablespace(MySqlParser.AlterByImportTablespaceContext ctx); + /** + * Visit a parse tree produced by the {@code alterByForce} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByForce(MySqlParser.AlterByForceContext ctx); + /** + * Visit a parse tree produced by the {@code alterByValidate} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByValidate(MySqlParser.AlterByValidateContext ctx); + /** + * Visit a parse tree produced by the {@code alterByAddPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByAddPartition(MySqlParser.AlterByAddPartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByDropPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByDropPartition(MySqlParser.AlterByDropPartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByDiscardPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByDiscardPartition(MySqlParser.AlterByDiscardPartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByImportPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByImportPartition(MySqlParser.AlterByImportPartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByTruncatePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByTruncatePartition(MySqlParser.AlterByTruncatePartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByCoalescePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByCoalescePartition(MySqlParser.AlterByCoalescePartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByReorganizePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByReorganizePartition(MySqlParser.AlterByReorganizePartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByExchangePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByExchangePartition(MySqlParser.AlterByExchangePartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByAnalyzePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByAnalyzePartition(MySqlParser.AlterByAnalyzePartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByCheckPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByCheckPartition(MySqlParser.AlterByCheckPartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByOptimizePartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByOptimizePartition(MySqlParser.AlterByOptimizePartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByRebuildPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByRebuildPartition(MySqlParser.AlterByRebuildPartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByRepairPartition} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByRepairPartition(MySqlParser.AlterByRepairPartitionContext ctx); + /** + * Visit a parse tree produced by the {@code alterByRemovePartitioning} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByRemovePartitioning(MySqlParser.AlterByRemovePartitioningContext ctx); + /** + * Visit a parse tree produced by the {@code alterByUpgradePartitioning} + * labeled alternative in {@link MySqlParser#alterSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterByUpgradePartitioning(MySqlParser.AlterByUpgradePartitioningContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dropDatabase}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDropDatabase(MySqlParser.DropDatabaseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dropEvent}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDropEvent(MySqlParser.DropEventContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dropIndex}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDropIndex(MySqlParser.DropIndexContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dropLogfileGroup}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDropLogfileGroup(MySqlParser.DropLogfileGroupContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dropProcedure}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDropProcedure(MySqlParser.DropProcedureContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dropFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDropFunction(MySqlParser.DropFunctionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dropServer}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDropServer(MySqlParser.DropServerContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dropTable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDropTable(MySqlParser.DropTableContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dropTablespace}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDropTablespace(MySqlParser.DropTablespaceContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dropTrigger}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDropTrigger(MySqlParser.DropTriggerContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dropView}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDropView(MySqlParser.DropViewContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#renameTable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRenameTable(MySqlParser.RenameTableContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#renameTableClause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRenameTableClause(MySqlParser.RenameTableClauseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#truncateTable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTruncateTable(MySqlParser.TruncateTableContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#callStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCallStatement(MySqlParser.CallStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#deleteStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeleteStatement(MySqlParser.DeleteStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#doStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDoStatement(MySqlParser.DoStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#handlerStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHandlerStatement(MySqlParser.HandlerStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#insertStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInsertStatement(MySqlParser.InsertStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#loadDataStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLoadDataStatement(MySqlParser.LoadDataStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#loadXmlStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLoadXmlStatement(MySqlParser.LoadXmlStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#replaceStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReplaceStatement(MySqlParser.ReplaceStatementContext ctx); + /** + * Visit a parse tree produced by the {@code simpleSelect} + * labeled alternative in {@link MySqlParser#selectStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSimpleSelect(MySqlParser.SimpleSelectContext ctx); + /** + * Visit a parse tree produced by the {@code parenthesisSelect} + * labeled alternative in {@link MySqlParser#selectStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitParenthesisSelect(MySqlParser.ParenthesisSelectContext ctx); + /** + * Visit a parse tree produced by the {@code unionSelect} + * labeled alternative in {@link MySqlParser#selectStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUnionSelect(MySqlParser.UnionSelectContext ctx); + /** + * Visit a parse tree produced by the {@code unionParenthesisSelect} + * labeled alternative in {@link MySqlParser#selectStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUnionParenthesisSelect(MySqlParser.UnionParenthesisSelectContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#updateStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUpdateStatement(MySqlParser.UpdateStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#insertStatementValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInsertStatementValue(MySqlParser.InsertStatementValueContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#updatedElement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUpdatedElement(MySqlParser.UpdatedElementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#assignmentField}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAssignmentField(MySqlParser.AssignmentFieldContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#lockClause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLockClause(MySqlParser.LockClauseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#singleDeleteStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSingleDeleteStatement(MySqlParser.SingleDeleteStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#multipleDeleteStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMultipleDeleteStatement(MySqlParser.MultipleDeleteStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#handlerOpenStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHandlerOpenStatement(MySqlParser.HandlerOpenStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#handlerReadIndexStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHandlerReadIndexStatement(MySqlParser.HandlerReadIndexStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#handlerReadStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHandlerReadStatement(MySqlParser.HandlerReadStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#handlerCloseStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHandlerCloseStatement(MySqlParser.HandlerCloseStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#singleUpdateStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSingleUpdateStatement(MySqlParser.SingleUpdateStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#multipleUpdateStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMultipleUpdateStatement(MySqlParser.MultipleUpdateStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#orderByClause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOrderByClause(MySqlParser.OrderByClauseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#orderByExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOrderByExpression(MySqlParser.OrderByExpressionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#tableSources}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableSources(MySqlParser.TableSourcesContext ctx); + /** + * Visit a parse tree produced by the {@code tableSourceBase} + * labeled alternative in {@link MySqlParser#tableSource}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableSourceBase(MySqlParser.TableSourceBaseContext ctx); + /** + * Visit a parse tree produced by the {@code tableSourceNested} + * labeled alternative in {@link MySqlParser#tableSource}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableSourceNested(MySqlParser.TableSourceNestedContext ctx); + /** + * Visit a parse tree produced by the {@code atomTableItem} + * labeled alternative in {@link MySqlParser#tableSourceItem}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAtomTableItem(MySqlParser.AtomTableItemContext ctx); + /** + * Visit a parse tree produced by the {@code subqueryTableItem} + * labeled alternative in {@link MySqlParser#tableSourceItem}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSubqueryTableItem(MySqlParser.SubqueryTableItemContext ctx); + /** + * Visit a parse tree produced by the {@code tableSourcesItem} + * labeled alternative in {@link MySqlParser#tableSourceItem}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableSourcesItem(MySqlParser.TableSourcesItemContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#indexHint}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIndexHint(MySqlParser.IndexHintContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#indexHintType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIndexHintType(MySqlParser.IndexHintTypeContext ctx); + /** + * Visit a parse tree produced by the {@code innerJoin} + * labeled alternative in {@link MySqlParser#joinPart}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInnerJoin(MySqlParser.InnerJoinContext ctx); + /** + * Visit a parse tree produced by the {@code straightJoin} + * labeled alternative in {@link MySqlParser#joinPart}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStraightJoin(MySqlParser.StraightJoinContext ctx); + /** + * Visit a parse tree produced by the {@code outerJoin} + * labeled alternative in {@link MySqlParser#joinPart}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOuterJoin(MySqlParser.OuterJoinContext ctx); + /** + * Visit a parse tree produced by the {@code naturalJoin} + * labeled alternative in {@link MySqlParser#joinPart}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNaturalJoin(MySqlParser.NaturalJoinContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#queryExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitQueryExpression(MySqlParser.QueryExpressionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#queryExpressionNointo}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitQueryExpressionNointo(MySqlParser.QueryExpressionNointoContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#querySpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitQuerySpecification(MySqlParser.QuerySpecificationContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#querySpecificationNointo}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitQuerySpecificationNointo(MySqlParser.QuerySpecificationNointoContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#unionParenthesis}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUnionParenthesis(MySqlParser.UnionParenthesisContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#unionStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUnionStatement(MySqlParser.UnionStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#selectSpec}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectSpec(MySqlParser.SelectSpecContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#selectElements}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectElements(MySqlParser.SelectElementsContext ctx); + /** + * Visit a parse tree produced by the {@code selectStarElement} + * labeled alternative in {@link MySqlParser#selectElement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectStarElement(MySqlParser.SelectStarElementContext ctx); + /** + * Visit a parse tree produced by the {@code selectColumnElement} + * labeled alternative in {@link MySqlParser#selectElement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectColumnElement(MySqlParser.SelectColumnElementContext ctx); + /** + * Visit a parse tree produced by the {@code selectFunctionElement} + * labeled alternative in {@link MySqlParser#selectElement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectFunctionElement(MySqlParser.SelectFunctionElementContext ctx); + /** + * Visit a parse tree produced by the {@code selectExpressionElement} + * labeled alternative in {@link MySqlParser#selectElement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectExpressionElement(MySqlParser.SelectExpressionElementContext ctx); + /** + * Visit a parse tree produced by the {@code selectIntoVariables} + * labeled alternative in {@link MySqlParser#selectIntoExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectIntoVariables(MySqlParser.SelectIntoVariablesContext ctx); + /** + * Visit a parse tree produced by the {@code selectIntoDumpFile} + * labeled alternative in {@link MySqlParser#selectIntoExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectIntoDumpFile(MySqlParser.SelectIntoDumpFileContext ctx); + /** + * Visit a parse tree produced by the {@code selectIntoTextFile} + * labeled alternative in {@link MySqlParser#selectIntoExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectIntoTextFile(MySqlParser.SelectIntoTextFileContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#selectFieldsInto}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectFieldsInto(MySqlParser.SelectFieldsIntoContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#selectLinesInto}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectLinesInto(MySqlParser.SelectLinesIntoContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#fromClause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFromClause(MySqlParser.FromClauseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#groupByItem}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGroupByItem(MySqlParser.GroupByItemContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#limitClause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLimitClause(MySqlParser.LimitClauseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#limitClauseAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLimitClauseAtom(MySqlParser.LimitClauseAtomContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#startTransaction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStartTransaction(MySqlParser.StartTransactionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#beginWork}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBeginWork(MySqlParser.BeginWorkContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#commitWork}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCommitWork(MySqlParser.CommitWorkContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#rollbackWork}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRollbackWork(MySqlParser.RollbackWorkContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#savepointStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSavepointStatement(MySqlParser.SavepointStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#rollbackStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRollbackStatement(MySqlParser.RollbackStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#releaseStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReleaseStatement(MySqlParser.ReleaseStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#lockTables}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLockTables(MySqlParser.LockTablesContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#unlockTables}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUnlockTables(MySqlParser.UnlockTablesContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#setAutocommitStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSetAutocommitStatement(MySqlParser.SetAutocommitStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#setTransactionStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSetTransactionStatement(MySqlParser.SetTransactionStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#transactionMode}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTransactionMode(MySqlParser.TransactionModeContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#lockTableElement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLockTableElement(MySqlParser.LockTableElementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#lockAction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLockAction(MySqlParser.LockActionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#transactionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTransactionOption(MySqlParser.TransactionOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#transactionLevel}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTransactionLevel(MySqlParser.TransactionLevelContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#changeMaster}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitChangeMaster(MySqlParser.ChangeMasterContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#changeReplicationFilter}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitChangeReplicationFilter(MySqlParser.ChangeReplicationFilterContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#purgeBinaryLogs}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPurgeBinaryLogs(MySqlParser.PurgeBinaryLogsContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#resetMaster}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitResetMaster(MySqlParser.ResetMasterContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#resetSlave}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitResetSlave(MySqlParser.ResetSlaveContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#startSlave}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStartSlave(MySqlParser.StartSlaveContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#stopSlave}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStopSlave(MySqlParser.StopSlaveContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#startGroupReplication}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStartGroupReplication(MySqlParser.StartGroupReplicationContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#stopGroupReplication}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStopGroupReplication(MySqlParser.StopGroupReplicationContext ctx); + /** + * Visit a parse tree produced by the {@code masterStringOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMasterStringOption(MySqlParser.MasterStringOptionContext ctx); + /** + * Visit a parse tree produced by the {@code masterDecimalOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMasterDecimalOption(MySqlParser.MasterDecimalOptionContext ctx); + /** + * Visit a parse tree produced by the {@code masterBoolOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMasterBoolOption(MySqlParser.MasterBoolOptionContext ctx); + /** + * Visit a parse tree produced by the {@code masterRealOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMasterRealOption(MySqlParser.MasterRealOptionContext ctx); + /** + * Visit a parse tree produced by the {@code masterUidListOption} + * labeled alternative in {@link MySqlParser#masterOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMasterUidListOption(MySqlParser.MasterUidListOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#stringMasterOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStringMasterOption(MySqlParser.StringMasterOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#decimalMasterOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDecimalMasterOption(MySqlParser.DecimalMasterOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#boolMasterOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBoolMasterOption(MySqlParser.BoolMasterOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#channelOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitChannelOption(MySqlParser.ChannelOptionContext ctx); + /** + * Visit a parse tree produced by the {@code doDbReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDoDbReplication(MySqlParser.DoDbReplicationContext ctx); + /** + * Visit a parse tree produced by the {@code ignoreDbReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIgnoreDbReplication(MySqlParser.IgnoreDbReplicationContext ctx); + /** + * Visit a parse tree produced by the {@code doTableReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDoTableReplication(MySqlParser.DoTableReplicationContext ctx); + /** + * Visit a parse tree produced by the {@code ignoreTableReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIgnoreTableReplication(MySqlParser.IgnoreTableReplicationContext ctx); + /** + * Visit a parse tree produced by the {@code wildDoTableReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitWildDoTableReplication(MySqlParser.WildDoTableReplicationContext ctx); + /** + * Visit a parse tree produced by the {@code wildIgnoreTableReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitWildIgnoreTableReplication(MySqlParser.WildIgnoreTableReplicationContext ctx); + /** + * Visit a parse tree produced by the {@code rewriteDbReplication} + * labeled alternative in {@link MySqlParser#replicationFilter}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRewriteDbReplication(MySqlParser.RewriteDbReplicationContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#tablePair}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTablePair(MySqlParser.TablePairContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#threadType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitThreadType(MySqlParser.ThreadTypeContext ctx); + /** + * Visit a parse tree produced by the {@code gtidsUntilOption} + * labeled alternative in {@link MySqlParser#untilOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGtidsUntilOption(MySqlParser.GtidsUntilOptionContext ctx); + /** + * Visit a parse tree produced by the {@code masterLogUntilOption} + * labeled alternative in {@link MySqlParser#untilOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMasterLogUntilOption(MySqlParser.MasterLogUntilOptionContext ctx); + /** + * Visit a parse tree produced by the {@code relayLogUntilOption} + * labeled alternative in {@link MySqlParser#untilOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRelayLogUntilOption(MySqlParser.RelayLogUntilOptionContext ctx); + /** + * Visit a parse tree produced by the {@code sqlGapsUntilOption} + * labeled alternative in {@link MySqlParser#untilOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSqlGapsUntilOption(MySqlParser.SqlGapsUntilOptionContext ctx); + /** + * Visit a parse tree produced by the {@code userConnectionOption} + * labeled alternative in {@link MySqlParser#connectionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUserConnectionOption(MySqlParser.UserConnectionOptionContext ctx); + /** + * Visit a parse tree produced by the {@code passwordConnectionOption} + * labeled alternative in {@link MySqlParser#connectionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPasswordConnectionOption(MySqlParser.PasswordConnectionOptionContext ctx); + /** + * Visit a parse tree produced by the {@code defaultAuthConnectionOption} + * labeled alternative in {@link MySqlParser#connectionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDefaultAuthConnectionOption(MySqlParser.DefaultAuthConnectionOptionContext ctx); + /** + * Visit a parse tree produced by the {@code pluginDirConnectionOption} + * labeled alternative in {@link MySqlParser#connectionOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPluginDirConnectionOption(MySqlParser.PluginDirConnectionOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#gtuidSet}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGtuidSet(MySqlParser.GtuidSetContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#xaStartTransaction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitXaStartTransaction(MySqlParser.XaStartTransactionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#xaEndTransaction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitXaEndTransaction(MySqlParser.XaEndTransactionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#xaPrepareStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitXaPrepareStatement(MySqlParser.XaPrepareStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#xaCommitWork}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitXaCommitWork(MySqlParser.XaCommitWorkContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#xaRollbackWork}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitXaRollbackWork(MySqlParser.XaRollbackWorkContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#xaRecoverWork}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitXaRecoverWork(MySqlParser.XaRecoverWorkContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#prepareStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPrepareStatement(MySqlParser.PrepareStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#executeStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExecuteStatement(MySqlParser.ExecuteStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#deallocatePrepare}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeallocatePrepare(MySqlParser.DeallocatePrepareContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#routineBody}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRoutineBody(MySqlParser.RoutineBodyContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#blockStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBlockStatement(MySqlParser.BlockStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#caseStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCaseStatement(MySqlParser.CaseStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#ifStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIfStatement(MySqlParser.IfStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#iterateStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIterateStatement(MySqlParser.IterateStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#leaveStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLeaveStatement(MySqlParser.LeaveStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#loopStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLoopStatement(MySqlParser.LoopStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#repeatStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRepeatStatement(MySqlParser.RepeatStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#returnStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReturnStatement(MySqlParser.ReturnStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#whileStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitWhileStatement(MySqlParser.WhileStatementContext ctx); + /** + * Visit a parse tree produced by the {@code CloseCursor} + * labeled alternative in {@link MySqlParser#cursorStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCloseCursor(MySqlParser.CloseCursorContext ctx); + /** + * Visit a parse tree produced by the {@code FetchCursor} + * labeled alternative in {@link MySqlParser#cursorStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFetchCursor(MySqlParser.FetchCursorContext ctx); + /** + * Visit a parse tree produced by the {@code OpenCursor} + * labeled alternative in {@link MySqlParser#cursorStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOpenCursor(MySqlParser.OpenCursorContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#declareVariable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclareVariable(MySqlParser.DeclareVariableContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#declareCondition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclareCondition(MySqlParser.DeclareConditionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#declareCursor}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclareCursor(MySqlParser.DeclareCursorContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#declareHandler}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclareHandler(MySqlParser.DeclareHandlerContext ctx); + /** + * Visit a parse tree produced by the {@code handlerConditionCode} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHandlerConditionCode(MySqlParser.HandlerConditionCodeContext ctx); + /** + * Visit a parse tree produced by the {@code handlerConditionState} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHandlerConditionState(MySqlParser.HandlerConditionStateContext ctx); + /** + * Visit a parse tree produced by the {@code handlerConditionName} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHandlerConditionName(MySqlParser.HandlerConditionNameContext ctx); + /** + * Visit a parse tree produced by the {@code handlerConditionWarning} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHandlerConditionWarning(MySqlParser.HandlerConditionWarningContext ctx); + /** + * Visit a parse tree produced by the {@code handlerConditionNotfound} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHandlerConditionNotfound(MySqlParser.HandlerConditionNotfoundContext ctx); + /** + * Visit a parse tree produced by the {@code handlerConditionException} + * labeled alternative in {@link MySqlParser#handlerConditionValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHandlerConditionException(MySqlParser.HandlerConditionExceptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#procedureSqlStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitProcedureSqlStatement(MySqlParser.ProcedureSqlStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#caseAlternative}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCaseAlternative(MySqlParser.CaseAlternativeContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#elifAlternative}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitElifAlternative(MySqlParser.ElifAlternativeContext ctx); + /** + * Visit a parse tree produced by the {@code alterUserMysqlV56} + * labeled alternative in {@link MySqlParser#alterUser}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterUserMysqlV56(MySqlParser.AlterUserMysqlV56Context ctx); + /** + * Visit a parse tree produced by the {@code alterUserMysqlV57} + * labeled alternative in {@link MySqlParser#alterUser}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlterUserMysqlV57(MySqlParser.AlterUserMysqlV57Context ctx); + /** + * Visit a parse tree produced by the {@code createUserMysqlV56} + * labeled alternative in {@link MySqlParser#createUser}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateUserMysqlV56(MySqlParser.CreateUserMysqlV56Context ctx); + /** + * Visit a parse tree produced by the {@code createUserMysqlV57} + * labeled alternative in {@link MySqlParser#createUser}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateUserMysqlV57(MySqlParser.CreateUserMysqlV57Context ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dropUser}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDropUser(MySqlParser.DropUserContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#grantStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGrantStatement(MySqlParser.GrantStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#grantProxy}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGrantProxy(MySqlParser.GrantProxyContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#renameUser}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRenameUser(MySqlParser.RenameUserContext ctx); + /** + * Visit a parse tree produced by the {@code detailRevoke} + * labeled alternative in {@link MySqlParser#revokeStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDetailRevoke(MySqlParser.DetailRevokeContext ctx); + /** + * Visit a parse tree produced by the {@code shortRevoke} + * labeled alternative in {@link MySqlParser#revokeStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShortRevoke(MySqlParser.ShortRevokeContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#revokeProxy}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRevokeProxy(MySqlParser.RevokeProxyContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#setPasswordStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSetPasswordStatement(MySqlParser.SetPasswordStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#userSpecification}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUserSpecification(MySqlParser.UserSpecificationContext ctx); + /** + * Visit a parse tree produced by the {@code passwordAuthOption} + * labeled alternative in {@link MySqlParser#userAuthOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPasswordAuthOption(MySqlParser.PasswordAuthOptionContext ctx); + /** + * Visit a parse tree produced by the {@code stringAuthOption} + * labeled alternative in {@link MySqlParser#userAuthOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStringAuthOption(MySqlParser.StringAuthOptionContext ctx); + /** + * Visit a parse tree produced by the {@code hashAuthOption} + * labeled alternative in {@link MySqlParser#userAuthOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHashAuthOption(MySqlParser.HashAuthOptionContext ctx); + /** + * Visit a parse tree produced by the {@code simpleAuthOption} + * labeled alternative in {@link MySqlParser#userAuthOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSimpleAuthOption(MySqlParser.SimpleAuthOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#tlsOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTlsOption(MySqlParser.TlsOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#userResourceOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUserResourceOption(MySqlParser.UserResourceOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#userPasswordOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUserPasswordOption(MySqlParser.UserPasswordOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#userLockOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUserLockOption(MySqlParser.UserLockOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#privelegeClause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPrivelegeClause(MySqlParser.PrivelegeClauseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#privilege}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPrivilege(MySqlParser.PrivilegeContext ctx); + /** + * Visit a parse tree produced by the {@code currentSchemaPriviLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCurrentSchemaPriviLevel(MySqlParser.CurrentSchemaPriviLevelContext ctx); + /** + * Visit a parse tree produced by the {@code globalPrivLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGlobalPrivLevel(MySqlParser.GlobalPrivLevelContext ctx); + /** + * Visit a parse tree produced by the {@code definiteSchemaPrivLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDefiniteSchemaPrivLevel(MySqlParser.DefiniteSchemaPrivLevelContext ctx); + /** + * Visit a parse tree produced by the {@code definiteFullTablePrivLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDefiniteFullTablePrivLevel(MySqlParser.DefiniteFullTablePrivLevelContext ctx); + /** + * Visit a parse tree produced by the {@code definiteFullTablePrivLevel2} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDefiniteFullTablePrivLevel2(MySqlParser.DefiniteFullTablePrivLevel2Context ctx); + /** + * Visit a parse tree produced by the {@code definiteTablePrivLevel} + * labeled alternative in {@link MySqlParser#privilegeLevel}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDefiniteTablePrivLevel(MySqlParser.DefiniteTablePrivLevelContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#renameUserClause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRenameUserClause(MySqlParser.RenameUserClauseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#analyzeTable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAnalyzeTable(MySqlParser.AnalyzeTableContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#checkTable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCheckTable(MySqlParser.CheckTableContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#checksumTable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitChecksumTable(MySqlParser.ChecksumTableContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#optimizeTable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOptimizeTable(MySqlParser.OptimizeTableContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#repairTable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRepairTable(MySqlParser.RepairTableContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#checkTableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCheckTableOption(MySqlParser.CheckTableOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#createUdfunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateUdfunction(MySqlParser.CreateUdfunctionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#installPlugin}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInstallPlugin(MySqlParser.InstallPluginContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#uninstallPlugin}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUninstallPlugin(MySqlParser.UninstallPluginContext ctx); + /** + * Visit a parse tree produced by the {@code setVariable} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSetVariable(MySqlParser.SetVariableContext ctx); + /** + * Visit a parse tree produced by the {@code setCharset} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSetCharset(MySqlParser.SetCharsetContext ctx); + /** + * Visit a parse tree produced by the {@code setNames} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSetNames(MySqlParser.SetNamesContext ctx); + /** + * Visit a parse tree produced by the {@code setPassword} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSetPassword(MySqlParser.SetPasswordContext ctx); + /** + * Visit a parse tree produced by the {@code setTransaction} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSetTransaction(MySqlParser.SetTransactionContext ctx); + /** + * Visit a parse tree produced by the {@code setAutocommit} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSetAutocommit(MySqlParser.SetAutocommitContext ctx); + /** + * Visit a parse tree produced by the {@code setNewValueInsideTrigger} + * labeled alternative in {@link MySqlParser#setStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSetNewValueInsideTrigger(MySqlParser.SetNewValueInsideTriggerContext ctx); + /** + * Visit a parse tree produced by the {@code showMasterLogs} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowMasterLogs(MySqlParser.ShowMasterLogsContext ctx); + /** + * Visit a parse tree produced by the {@code showLogEvents} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowLogEvents(MySqlParser.ShowLogEventsContext ctx); + /** + * Visit a parse tree produced by the {@code showObjectFilter} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowObjectFilter(MySqlParser.ShowObjectFilterContext ctx); + /** + * Visit a parse tree produced by the {@code showColumns} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowColumns(MySqlParser.ShowColumnsContext ctx); + /** + * Visit a parse tree produced by the {@code showCreateDb} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowCreateDb(MySqlParser.ShowCreateDbContext ctx); + /** + * Visit a parse tree produced by the {@code showCreateFullIdObject} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowCreateFullIdObject(MySqlParser.ShowCreateFullIdObjectContext ctx); + /** + * Visit a parse tree produced by the {@code showCreateUser} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowCreateUser(MySqlParser.ShowCreateUserContext ctx); + /** + * Visit a parse tree produced by the {@code showEngine} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowEngine(MySqlParser.ShowEngineContext ctx); + /** + * Visit a parse tree produced by the {@code showGlobalInfo} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowGlobalInfo(MySqlParser.ShowGlobalInfoContext ctx); + /** + * Visit a parse tree produced by the {@code showErrors} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowErrors(MySqlParser.ShowErrorsContext ctx); + /** + * Visit a parse tree produced by the {@code showCountErrors} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowCountErrors(MySqlParser.ShowCountErrorsContext ctx); + /** + * Visit a parse tree produced by the {@code showSchemaFilter} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowSchemaFilter(MySqlParser.ShowSchemaFilterContext ctx); + /** + * Visit a parse tree produced by the {@code showRoutine} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowRoutine(MySqlParser.ShowRoutineContext ctx); + /** + * Visit a parse tree produced by the {@code showGrants} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowGrants(MySqlParser.ShowGrantsContext ctx); + /** + * Visit a parse tree produced by the {@code showIndexes} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowIndexes(MySqlParser.ShowIndexesContext ctx); + /** + * Visit a parse tree produced by the {@code showOpenTables} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowOpenTables(MySqlParser.ShowOpenTablesContext ctx); + /** + * Visit a parse tree produced by the {@code showProfile} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowProfile(MySqlParser.ShowProfileContext ctx); + /** + * Visit a parse tree produced by the {@code showSlaveStatus} + * labeled alternative in {@link MySqlParser#showStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowSlaveStatus(MySqlParser.ShowSlaveStatusContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#variableClause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitVariableClause(MySqlParser.VariableClauseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#showCommonEntity}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowCommonEntity(MySqlParser.ShowCommonEntityContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#showFilter}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowFilter(MySqlParser.ShowFilterContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#showGlobalInfoClause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowGlobalInfoClause(MySqlParser.ShowGlobalInfoClauseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#showSchemaEntity}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowSchemaEntity(MySqlParser.ShowSchemaEntityContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#showProfileType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShowProfileType(MySqlParser.ShowProfileTypeContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#binlogStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBinlogStatement(MySqlParser.BinlogStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#cacheIndexStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCacheIndexStatement(MySqlParser.CacheIndexStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#flushStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFlushStatement(MySqlParser.FlushStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#killStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitKillStatement(MySqlParser.KillStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#loadIndexIntoCache}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLoadIndexIntoCache(MySqlParser.LoadIndexIntoCacheContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#resetStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitResetStatement(MySqlParser.ResetStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#shutdownStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShutdownStatement(MySqlParser.ShutdownStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#tableIndexes}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableIndexes(MySqlParser.TableIndexesContext ctx); + /** + * Visit a parse tree produced by the {@code simpleFlushOption} + * labeled alternative in {@link MySqlParser#flushOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSimpleFlushOption(MySqlParser.SimpleFlushOptionContext ctx); + /** + * Visit a parse tree produced by the {@code channelFlushOption} + * labeled alternative in {@link MySqlParser#flushOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitChannelFlushOption(MySqlParser.ChannelFlushOptionContext ctx); + /** + * Visit a parse tree produced by the {@code tableFlushOption} + * labeled alternative in {@link MySqlParser#flushOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableFlushOption(MySqlParser.TableFlushOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#flushTableOption}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFlushTableOption(MySqlParser.FlushTableOptionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#loadedTableIndexes}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLoadedTableIndexes(MySqlParser.LoadedTableIndexesContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#simpleDescribeStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSimpleDescribeStatement(MySqlParser.SimpleDescribeStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#fullDescribeStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFullDescribeStatement(MySqlParser.FullDescribeStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#helpStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHelpStatement(MySqlParser.HelpStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#useStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUseStatement(MySqlParser.UseStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#signalStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSignalStatement(MySqlParser.SignalStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#resignalStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitResignalStatement(MySqlParser.ResignalStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#signalConditionInformation}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSignalConditionInformation(MySqlParser.SignalConditionInformationContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#diagnosticsStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDiagnosticsStatement(MySqlParser.DiagnosticsStatementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#diagnosticsConditionInformationName}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDiagnosticsConditionInformationName(MySqlParser.DiagnosticsConditionInformationNameContext ctx); + /** + * Visit a parse tree produced by the {@code describeStatements} + * labeled alternative in {@link MySqlParser#describeObjectClause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDescribeStatements(MySqlParser.DescribeStatementsContext ctx); + /** + * Visit a parse tree produced by the {@code describeConnection} + * labeled alternative in {@link MySqlParser#describeObjectClause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDescribeConnection(MySqlParser.DescribeConnectionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#fullId}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFullId(MySqlParser.FullIdContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#tableName}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableName(MySqlParser.TableNameContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#fullColumnName}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFullColumnName(MySqlParser.FullColumnNameContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#indexColumnName}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIndexColumnName(MySqlParser.IndexColumnNameContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#userName}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUserName(MySqlParser.UserNameContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#mysqlVariable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMysqlVariable(MySqlParser.MysqlVariableContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#charsetName}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCharsetName(MySqlParser.CharsetNameContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#collationName}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCollationName(MySqlParser.CollationNameContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#engineName}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEngineName(MySqlParser.EngineNameContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#uuidSet}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUuidSet(MySqlParser.UuidSetContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#xid}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitXid(MySqlParser.XidContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#xuidStringId}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitXuidStringId(MySqlParser.XuidStringIdContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#authPlugin}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAuthPlugin(MySqlParser.AuthPluginContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#uid}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUid(MySqlParser.UidContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#simpleId}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSimpleId(MySqlParser.SimpleIdContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dottedId}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDottedId(MySqlParser.DottedIdContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#decimalLiteral}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDecimalLiteral(MySqlParser.DecimalLiteralContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#fileSizeLiteral}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFileSizeLiteral(MySqlParser.FileSizeLiteralContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#stringLiteral}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStringLiteral(MySqlParser.StringLiteralContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#booleanLiteral}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBooleanLiteral(MySqlParser.BooleanLiteralContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#hexadecimalLiteral}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHexadecimalLiteral(MySqlParser.HexadecimalLiteralContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#nullNotnull}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNullNotnull(MySqlParser.NullNotnullContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#constant}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitConstant(MySqlParser.ConstantContext ctx); + /** + * Visit a parse tree produced by the {@code stringDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStringDataType(MySqlParser.StringDataTypeContext ctx); + /** + * Visit a parse tree produced by the {@code nationalStringDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNationalStringDataType(MySqlParser.NationalStringDataTypeContext ctx); + /** + * Visit a parse tree produced by the {@code nationalVaryingStringDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNationalVaryingStringDataType(MySqlParser.NationalVaryingStringDataTypeContext ctx); + /** + * Visit a parse tree produced by the {@code dimensionDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDimensionDataType(MySqlParser.DimensionDataTypeContext ctx); + /** + * Visit a parse tree produced by the {@code simpleDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSimpleDataType(MySqlParser.SimpleDataTypeContext ctx); + /** + * Visit a parse tree produced by the {@code collectionDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCollectionDataType(MySqlParser.CollectionDataTypeContext ctx); + /** + * Visit a parse tree produced by the {@code spatialDataType} + * labeled alternative in {@link MySqlParser#dataType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSpatialDataType(MySqlParser.SpatialDataTypeContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#collectionOptions}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCollectionOptions(MySqlParser.CollectionOptionsContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#convertedDataType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitConvertedDataType(MySqlParser.ConvertedDataTypeContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#lengthOneDimension}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLengthOneDimension(MySqlParser.LengthOneDimensionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#lengthTwoDimension}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLengthTwoDimension(MySqlParser.LengthTwoDimensionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#lengthTwoOptionalDimension}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLengthTwoOptionalDimension(MySqlParser.LengthTwoOptionalDimensionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#uidList}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUidList(MySqlParser.UidListContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#tables}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTables(MySqlParser.TablesContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#indexColumnNames}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIndexColumnNames(MySqlParser.IndexColumnNamesContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#expressions}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpressions(MySqlParser.ExpressionsContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#expressionsForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpressionsForUpdate(MySqlParser.ExpressionsForUpdateContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#expressionsWithDefaults}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpressionsWithDefaults(MySqlParser.ExpressionsWithDefaultsContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#constants}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitConstants(MySqlParser.ConstantsContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#simpleStrings}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSimpleStrings(MySqlParser.SimpleStringsContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#userVariables}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUserVariables(MySqlParser.UserVariablesContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#defaultValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDefaultValue(MySqlParser.DefaultValueContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#currentTimestamp}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCurrentTimestamp(MySqlParser.CurrentTimestampContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#expressionOrDefault}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpressionOrDefault(MySqlParser.ExpressionOrDefaultContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#ifExists}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIfExists(MySqlParser.IfExistsContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#ifNotExists}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIfNotExists(MySqlParser.IfNotExistsContext ctx); + /** + * Visit a parse tree produced by the {@code specificFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSpecificFunctionCall(MySqlParser.SpecificFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code aggregateFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAggregateFunctionCall(MySqlParser.AggregateFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code scalarFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitScalarFunctionCall(MySqlParser.ScalarFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code udfFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUdfFunctionCall(MySqlParser.UdfFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code passwordFunctionCall} + * labeled alternative in {@link MySqlParser#functionCall}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPasswordFunctionCall(MySqlParser.PasswordFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code simpleFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSimpleFunctionCall(MySqlParser.SimpleFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code dataTypeFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDataTypeFunctionCall(MySqlParser.DataTypeFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code valuesFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitValuesFunctionCall(MySqlParser.ValuesFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code caseFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCaseFunctionCall(MySqlParser.CaseFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code charFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCharFunctionCall(MySqlParser.CharFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code positionFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPositionFunctionCall(MySqlParser.PositionFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code substrFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSubstrFunctionCall(MySqlParser.SubstrFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code trimFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTrimFunctionCall(MySqlParser.TrimFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code weightFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitWeightFunctionCall(MySqlParser.WeightFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code extractFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExtractFunctionCall(MySqlParser.ExtractFunctionCallContext ctx); + /** + * Visit a parse tree produced by the {@code getFormatFunctionCall} + * labeled alternative in {@link MySqlParser#specificFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGetFormatFunctionCall(MySqlParser.GetFormatFunctionCallContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#caseFuncAlternative}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCaseFuncAlternative(MySqlParser.CaseFuncAlternativeContext ctx); + /** + * Visit a parse tree produced by the {@code levelWeightList} + * labeled alternative in {@link MySqlParser#levelsInWeightString}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLevelWeightList(MySqlParser.LevelWeightListContext ctx); + /** + * Visit a parse tree produced by the {@code levelWeightRange} + * labeled alternative in {@link MySqlParser#levelsInWeightString}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLevelWeightRange(MySqlParser.LevelWeightRangeContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#levelInWeightListElement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLevelInWeightListElement(MySqlParser.LevelInWeightListElementContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#aggregateWindowedFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAggregateWindowedFunction(MySqlParser.AggregateWindowedFunctionContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#scalarFunctionName}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitScalarFunctionName(MySqlParser.ScalarFunctionNameContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#passwordFunctionClause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPasswordFunctionClause(MySqlParser.PasswordFunctionClauseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#functionArgs}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionArgs(MySqlParser.FunctionArgsContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#functionArg}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionArg(MySqlParser.FunctionArgContext ctx); + /** + * Visit a parse tree produced by the {@code isExpression} + * labeled alternative in {@link MySqlParser#expression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIsExpression(MySqlParser.IsExpressionContext ctx); + /** + * Visit a parse tree produced by the {@code notExpression} + * labeled alternative in {@link MySqlParser#expression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNotExpression(MySqlParser.NotExpressionContext ctx); + /** + * Visit a parse tree produced by the {@code logicalExpression} + * labeled alternative in {@link MySqlParser#expression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLogicalExpression(MySqlParser.LogicalExpressionContext ctx); + /** + * Visit a parse tree produced by the {@code predicateExpression} + * labeled alternative in {@link MySqlParser#expression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPredicateExpression(MySqlParser.PredicateExpressionContext ctx); + /** + * Visit a parse tree produced by the {@code soundsLikePredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSoundsLikePredicate(MySqlParser.SoundsLikePredicateContext ctx); + /** + * Visit a parse tree produced by the {@code expressionAtomPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpressionAtomPredicate(MySqlParser.ExpressionAtomPredicateContext ctx); + /** + * Visit a parse tree produced by the {@code inPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInPredicate(MySqlParser.InPredicateContext ctx); + /** + * Visit a parse tree produced by the {@code subqueryComparasionPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSubqueryComparasionPredicate(MySqlParser.SubqueryComparasionPredicateContext ctx); + /** + * Visit a parse tree produced by the {@code betweenPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBetweenPredicate(MySqlParser.BetweenPredicateContext ctx); + /** + * Visit a parse tree produced by the {@code binaryComparasionPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBinaryComparasionPredicate(MySqlParser.BinaryComparasionPredicateContext ctx); + /** + * Visit a parse tree produced by the {@code isNullPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIsNullPredicate(MySqlParser.IsNullPredicateContext ctx); + /** + * Visit a parse tree produced by the {@code likePredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLikePredicate(MySqlParser.LikePredicateContext ctx); + /** + * Visit a parse tree produced by the {@code regexpPredicate} + * labeled alternative in {@link MySqlParser#predicate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRegexpPredicate(MySqlParser.RegexpPredicateContext ctx); + /** + * Visit a parse tree produced by the {@code logicalExpressionForUpdate} + * labeled alternative in {@link MySqlParser#expressionForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLogicalExpressionForUpdate(MySqlParser.LogicalExpressionForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code predicateExpressionForUpdate} + * labeled alternative in {@link MySqlParser#expressionForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPredicateExpressionForUpdate(MySqlParser.PredicateExpressionForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code isExpressionForUpdate} + * labeled alternative in {@link MySqlParser#expressionForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIsExpressionForUpdate(MySqlParser.IsExpressionForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code notExpressionForUpdate} + * labeled alternative in {@link MySqlParser#expressionForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNotExpressionForUpdate(MySqlParser.NotExpressionForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code binaryComparasionPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBinaryComparasionPredicateForUpdate(MySqlParser.BinaryComparasionPredicateForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code likePredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLikePredicateForUpdate(MySqlParser.LikePredicateForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code regexpPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRegexpPredicateForUpdate(MySqlParser.RegexpPredicateForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code isNullPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIsNullPredicateForUpdate(MySqlParser.IsNullPredicateForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code betweenPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBetweenPredicateForUpdate(MySqlParser.BetweenPredicateForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code soundsLikePredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSoundsLikePredicateForUpdate(MySqlParser.SoundsLikePredicateForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code inPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInPredicateForUpdate(MySqlParser.InPredicateForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code subqueryComparasionPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSubqueryComparasionPredicateForUpdate(MySqlParser.SubqueryComparasionPredicateForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code expressionAtomPredicateForUpdate} + * labeled alternative in {@link MySqlParser#predicateForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpressionAtomPredicateForUpdate(MySqlParser.ExpressionAtomPredicateForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code intervalExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIntervalExpressionAtomForUpdate(MySqlParser.IntervalExpressionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code fullColumnNameExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFullColumnNameExpressionAtomForUpdate(MySqlParser.FullColumnNameExpressionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code mysqlVariableExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMysqlVariableExpressionAtomForUpdate(MySqlParser.MysqlVariableExpressionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code unaryExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUnaryExpressionAtomForUpdate(MySqlParser.UnaryExpressionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code nestedRowExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNestedRowExpressionAtomForUpdate(MySqlParser.NestedRowExpressionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code subqueryExpessionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSubqueryExpessionAtomForUpdate(MySqlParser.SubqueryExpessionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code bitExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBitExpressionAtomForUpdate(MySqlParser.BitExpressionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code mathExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMathExpressionAtomForUpdate(MySqlParser.MathExpressionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code constantExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitConstantExpressionAtomForUpdate(MySqlParser.ConstantExpressionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code collateExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCollateExpressionAtomForUpdate(MySqlParser.CollateExpressionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code binaryExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBinaryExpressionAtomForUpdate(MySqlParser.BinaryExpressionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code nestedExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNestedExpressionAtomForUpdate(MySqlParser.NestedExpressionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code existsExpessionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExistsExpessionAtomForUpdate(MySqlParser.ExistsExpessionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code functionCallExpressionAtomForUpdate} + * labeled alternative in {@link MySqlParser#expressionAtomForUpdate}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionCallExpressionAtomForUpdate(MySqlParser.FunctionCallExpressionAtomForUpdateContext ctx); + /** + * Visit a parse tree produced by the {@code unaryExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUnaryExpressionAtom(MySqlParser.UnaryExpressionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code collateExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCollateExpressionAtom(MySqlParser.CollateExpressionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code subqueryExpessionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSubqueryExpessionAtom(MySqlParser.SubqueryExpessionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code mysqlVariableExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMysqlVariableExpressionAtom(MySqlParser.MysqlVariableExpressionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code nestedExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNestedExpressionAtom(MySqlParser.NestedExpressionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code nestedRowExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNestedRowExpressionAtom(MySqlParser.NestedRowExpressionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code mathExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMathExpressionAtom(MySqlParser.MathExpressionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code intervalExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIntervalExpressionAtom(MySqlParser.IntervalExpressionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code existsExpessionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExistsExpessionAtom(MySqlParser.ExistsExpessionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code constantExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitConstantExpressionAtom(MySqlParser.ConstantExpressionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code functionCallExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionCallExpressionAtom(MySqlParser.FunctionCallExpressionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code binaryExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBinaryExpressionAtom(MySqlParser.BinaryExpressionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code fullColumnNameExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFullColumnNameExpressionAtom(MySqlParser.FullColumnNameExpressionAtomContext ctx); + /** + * Visit a parse tree produced by the {@code bitExpressionAtom} + * labeled alternative in {@link MySqlParser#expressionAtom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBitExpressionAtom(MySqlParser.BitExpressionAtomContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#unaryOperator}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUnaryOperator(MySqlParser.UnaryOperatorContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#comparisonOperator}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitComparisonOperator(MySqlParser.ComparisonOperatorContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#logicalOperator}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLogicalOperator(MySqlParser.LogicalOperatorContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#bitOperator}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBitOperator(MySqlParser.BitOperatorContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#mathOperator}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMathOperator(MySqlParser.MathOperatorContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#charsetNameBase}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCharsetNameBase(MySqlParser.CharsetNameBaseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#transactionLevelBase}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTransactionLevelBase(MySqlParser.TransactionLevelBaseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#privilegesBase}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPrivilegesBase(MySqlParser.PrivilegesBaseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#intervalTypeBase}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIntervalTypeBase(MySqlParser.IntervalTypeBaseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#dataTypeBase}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDataTypeBase(MySqlParser.DataTypeBaseContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#keywordsCanBeId}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitKeywordsCanBeId(MySqlParser.KeywordsCanBeIdContext ctx); + /** + * Visit a parse tree produced by {@link MySqlParser#functionNameBase}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionNameBase(MySqlParser.FunctionNameBaseContext ctx); +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/stream/ANTLRNoCaseStringStream.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/stream/ANTLRNoCaseStringStream.java new file mode 100644 index 00000000000..7bda2d9c234 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/stream/ANTLRNoCaseStringStream.java @@ -0,0 +1,41 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql.stream; + +import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.IntStream; + +/** + * ANTLRNoCaseStringStream + * + * @author zhihou + */ +public class ANTLRNoCaseStringStream extends ANTLRInputStream { + + public ANTLRNoCaseStringStream(String input) { + super(input); + } + + @Override + public int LA(int i) { + int la = super.LA(i); + if (la == 0 || la == IntStream.EOF) { + return la; + } else { + return Character.toUpperCase(la); + } + } +} diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/visit/InsertSpecificationSqlVisitor.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/visit/InsertSpecificationSqlVisitor.java new file mode 100644 index 00000000000..366d964f262 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/visit/InsertSpecificationSqlVisitor.java @@ -0,0 +1,74 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql.visit; + +import io.seata.sqlparser.antlr.mysql.MySqlContext; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParserBaseVisitor; + +import java.util.Arrays; +import java.util.List; + +/** + * InsertSpecificationSqlVisitor + * + * @author zhihou + */ +public class InsertSpecificationSqlVisitor extends MySqlParserBaseVisitor { + + private MySqlContext mySqlContext; + + public InsertSpecificationSqlVisitor(MySqlContext mySqlContext) { + this.mySqlContext = mySqlContext; + } + + @Override + public MySqlContext visitInsertStatement(MySqlParser.InsertStatementContext ctx) { + + MySqlParser.TableNameContext tableNameContext = ctx.tableName(); + + mySqlContext.setTableName(tableNameContext.getText()); + + MySqlParser.UidListContext columns = ctx.columns; + + List strings = Arrays.asList(columns.getText().split(",")); + + for (String insertColumnName : strings) { + mySqlContext.addForInsertColumnName(insertColumnName); + } + + MySqlParser.InsertStatementValueContext insertStatementValueContext = ctx.insertStatementValue(); + List expressionsWithDefaultsContexts = insertStatementValueContext.expressionsWithDefaults(); + + for (MySqlParser.ExpressionsWithDefaultsContext expressions : expressionsWithDefaultsContexts) { + + String text = expressions.getText(); + String str = null; + if (text.contains("'")) { + str = text.replace("'", ""); + } else if (text.contains("\"")) { + str = text.replace("\"", ""); + } else { + str = text; + } + if (!str.isEmpty() && !str.contains("'") && !str.contains("\"")) { + mySqlContext.addForInsertValColumnName(Arrays.asList(str.split(","))); + } + } + mySqlContext.setInsertRows(expressionsWithDefaultsContexts.size()); + return this.mySqlContext; + } +} diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/visit/InsertStatementSqlVisitor.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/visit/InsertStatementSqlVisitor.java new file mode 100644 index 00000000000..28ef7160b32 --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/visit/InsertStatementSqlVisitor.java @@ -0,0 +1,40 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql.visit; + +import io.seata.sqlparser.antlr.mysql.MySqlContext; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParserBaseVisitor; + +/** + * InsertStatementSqlVisitor + * + * @author zhihou + */ +public class InsertStatementSqlVisitor extends MySqlParserBaseVisitor { + + private MySqlContext mySqlContext; + + public InsertStatementSqlVisitor(MySqlContext mySqlContext) { + this.mySqlContext = mySqlContext; + } + + @Override + public MySqlContext visitInsertStatement(MySqlParser.InsertStatementContext ctx) { + return new InsertSpecificationSqlVisitor(this.mySqlContext).visitInsertStatement(ctx); + } + +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/visit/StatementSqlVisitor.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/visit/StatementSqlVisitor.java new file mode 100644 index 00000000000..a348ede491e --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/visit/StatementSqlVisitor.java @@ -0,0 +1,68 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr.mysql.visit; + +import io.seata.sqlparser.antlr.mysql.parser.MySqlParserBaseVisitor; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * StatementSqlVisitor + * + * @author zhihou + */ +public class StatementSqlVisitor extends MySqlParserBaseVisitor { + + private StringBuilder sb = new StringBuilder(); + + @Override + public StringBuilder visitTerminal(TerminalNode node) { + String text = node.getText(); + if (text != null && !"".equals(text.trim())) { + if (shouldAddSpace(text.trim())) { + sb.append(" "); + } + sb.append(text); + } + return sb; + } + + private boolean shouldAddSpace(String text) { + if (sb.length() == 0) { + return false; + } + char lastChar = sb.charAt(sb.length() - 1); + switch (lastChar) { + case '.': + case ',': + case '(': + return false; + default: + break; + } + + switch (text.charAt(0)) { + case '.': + case ',': + case ')': + return false; + default: + break; + } + return true; + } + + +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/resources/META-INF/services/io.seata.sqlparser.SQLRecognizerFactory b/sqlparser/seata-sqlparser-antlr/src/main/resources/META-INF/services/io.seata.sqlparser.SQLRecognizerFactory new file mode 100644 index 00000000000..f8b91af9ded --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/resources/META-INF/services/io.seata.sqlparser.SQLRecognizerFactory @@ -0,0 +1 @@ +io.seata.sqlparser.antlr.AntlrDelegatingSQLRecognizerFactory diff --git a/sqlparser/seata-sqlparser-antlr/src/main/resources/META-INF/services/io.seata.sqlparser.antlr.SQLOperateRecognizerHolder b/sqlparser/seata-sqlparser-antlr/src/main/resources/META-INF/services/io.seata.sqlparser.antlr.SQLOperateRecognizerHolder new file mode 100644 index 00000000000..177e9a18ffa --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/main/resources/META-INF/services/io.seata.sqlparser.antlr.SQLOperateRecognizerHolder @@ -0,0 +1 @@ +io.seata.sqlparser.antlr.mysql.MySQLOperateRecognizerHolder diff --git a/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/AntlrIsolationTest.java b/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/AntlrIsolationTest.java new file mode 100644 index 00000000000..aafeb3529fd --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/AntlrIsolationTest.java @@ -0,0 +1,42 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr; + +import io.seata.common.loader.EnhancedServiceLoader; +import io.seata.sqlparser.SQLRecognizer; +import io.seata.sqlparser.SQLRecognizerFactory; +import io.seata.sqlparser.SqlParserType; +import io.seata.sqlparser.util.JdbcConstants; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.List; + +/** + * @author zhihou + */ +public class AntlrIsolationTest { + + String TEST_SQL = "SELECT name,phone FROM t1 WHERE id = 1 and username = '11' and age = 'a' or hz = '1' or aa = 1 FOR UPDATE"; + + @Test + public void testAntlrIsolation() { + AntlrDelegatingSQLRecognizerFactory recognizerFactory = (AntlrDelegatingSQLRecognizerFactory) EnhancedServiceLoader.load(SQLRecognizerFactory.class, SqlParserType.SQL_PARSER_TYPE_ANTLR); + List sqlRecognizer = recognizerFactory.create(TEST_SQL, JdbcConstants.MYSQL); + Assertions.assertNotNull(sqlRecognizer); + } + +} diff --git a/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLDeleteRecognizerTest.java b/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLDeleteRecognizerTest.java new file mode 100644 index 00000000000..7b94d833b7c --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLDeleteRecognizerTest.java @@ -0,0 +1,175 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr; + +import io.seata.sqlparser.antlr.mysql.MySqlContext; +import io.seata.sqlparser.antlr.mysql.listener.DeleteSpecificationSqlListener; +import io.seata.sqlparser.antlr.mysql.parser.MySqlLexer; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.stream.ANTLRNoCaseStringStream; +import io.seata.sqlparser.antlr.mysql.visit.StatementSqlVisitor; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.tree.ParseTreeWalker; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +/** + * @author houzhi + * @date 2020-7-10 + * @description + */ +public class MySQLDeleteRecognizerTest { + + /** + * base statementSql visitor test + */ + private String baseStatementSqlVisitor(String sql) { + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + MySqlParser parser = new MySqlParser(tokenStream); + MySqlParser.SqlStatementContext sqlStatementContext = parser.sqlStatement(); + StatementSqlVisitor sqlToStringVisitor = new StatementSqlVisitor(); + return sqlToStringVisitor.visit(sqlStatementContext).toString(); + } + + /** + * Delete recognizer test 0. + */ + @Test + public void deleteRecognizerTest_0() { + + String sql = "DELETE t FROM t1 as t WHERE t.id = 'id1'"; + + String visitorText = baseStatementSqlVisitor(sql); + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(visitorText)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new DeleteSpecificationSqlListener(mySqlContext), rootContext); + + Assertions.assertEquals("t1", mySqlContext.getTableName()); + Assertions.assertEquals("t.id = 'id1'", mySqlContext.getWhereCondition()); + Assertions.assertEquals("t", mySqlContext.getTableAlias()); + } + + + /** + * Delete recognizer test 1. + */ + @Test + public void deleteRecognizerTest_1() { + + String sql = "DELETE FROM t1 WHERE id = 'id1'"; + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new DeleteSpecificationSqlListener(mySqlContext), rootContext); + + Assertions.assertEquals("'id1'", + mySqlContext.getDeleteForWhereValColumnNames().get(0).getDeleteWhereValColumnName()); + Assertions.assertEquals("id = 'id1'", mySqlContext.getWhereCondition()); + } + + + /** + * Delete recognizer test 1. + */ + @Test + public void deleteRecognizerTest_2() { + + String sql = "DELETE FROM t1 WHERE id = ?"; + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new DeleteSpecificationSqlListener(mySqlContext), rootContext); + + Assertions.assertEquals("?", + mySqlContext.getDeleteForWhereValColumnNames().get(0).getDeleteWhereValColumnName()); + Assertions.assertEquals("id = ?", mySqlContext.getWhereCondition()); + } + + /** + * Delete recognizer test 2. + */ + @Test + public void deleteRecognizerTest_3() { + + String sql = "DELETE FROM t1 WHERE id IN (1, 2)"; + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new DeleteSpecificationSqlListener(mySqlContext), rootContext); + + Assertions.assertEquals("t1", mySqlContext.getTableName()); + Assertions.assertEquals("2", mySqlContext.getDeleteForWhereValColumnNames().get(1).getDeleteWhereValColumnName()); + Assertions.assertEquals("id IN (1,2)", mySqlContext.getWhereCondition()); + } + + /** + * Delete recognizer test 3. + */ + @Test + public void deleteRecognizerTest_4() { + + String sql = "DELETE FROM t1 WHERE id between 1 AND 'id'"; + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new DeleteSpecificationSqlListener(mySqlContext), rootContext); + + Assertions.assertEquals("'id'", mySqlContext.getDeleteForWhereValColumnNames().get(1).getDeleteWhereValColumnName()); + Assertions.assertEquals("id between 1 AND 'id'", mySqlContext.getWhereCondition()); + } +} diff --git a/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLInsertRecognizerTest.java b/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLInsertRecognizerTest.java new file mode 100644 index 00000000000..d0904c7110d --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLInsertRecognizerTest.java @@ -0,0 +1,123 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr; + +import io.seata.sqlparser.antlr.mysql.MySqlContext; +import io.seata.sqlparser.antlr.mysql.parser.MySqlLexer; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.stream.ANTLRNoCaseStringStream; +import io.seata.sqlparser.antlr.mysql.visit.InsertStatementSqlVisitor; +import org.antlr.v4.runtime.CommonTokenStream; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.stream.Collectors; + +/** + * @author houzhi + * @date 2020-7-10 + * @description + */ +public class MySQLInsertRecognizerTest { + + /** + * Insert recognizer test 0. + */ + @Test + public void insertRecognizerTest_0() { + + String sql = "INSERT INTO t1 (id) VALUES (1)"; + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext visitorSqlContext = new MySqlContext(); + InsertStatementSqlVisitor visitor = new InsertStatementSqlVisitor(visitorSqlContext); + visitor.visit(rootContext); + + Assertions.assertEquals("t1", visitorSqlContext.tableName); + Assertions.assertEquals(Collections.singletonList("id"), Arrays.asList(visitorSqlContext.getInsertColumnNames().get(0).getInsertColumnName())); + Assertions.assertEquals(1, visitorSqlContext.insertRows); + Assertions.assertEquals(Arrays.asList("1"), visitorSqlContext.getInsertForValColumnNames().get(0)); + } + + /** + * Insert recognizer test 1. + */ + @Test + public void insertRecognizerTest_1() { + + String sql = "INSERT INTO t1 (name1, name2) VALUES ('name1', 12)"; + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext visitorSqlContext = new MySqlContext(); + InsertStatementSqlVisitor visitor = new InsertStatementSqlVisitor(visitorSqlContext); + visitor.visit(rootContext); + + Assertions.assertEquals("t1", visitorSqlContext.tableName); + Assertions.assertEquals(Arrays.asList("name1", "name2"), visitorSqlContext.getInsertColumnNames().stream().map(insert -> { + return insert.getInsertColumnName(); + }).collect(Collectors.toList())); + Assertions.assertEquals(1, visitorSqlContext.insertRows); + Assertions.assertEquals(Arrays.asList("name1", "12"), visitorSqlContext.getInsertForValColumnNames().get(0)); + } + + /** + * Insert recognizer test 3. + */ + @Test + public void insertRecognizerTest_3() { + + String sql = "INSERT INTO t1 (name1, name2) VALUES ('name1', 'name2'), ('name3', 'name4'), ('name5', 'name6')"; + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext visitorSqlContext = new MySqlContext(); + InsertStatementSqlVisitor visitor = new InsertStatementSqlVisitor(visitorSqlContext); + visitor.visit(rootContext); + + + Assertions.assertEquals("t1", visitorSqlContext.tableName); + Assertions.assertEquals("name2", visitorSqlContext.getInsertColumnNames().get(1).getInsertColumnName()); + + Integer insertRows = visitorSqlContext.insertRows; + Assertions.assertEquals(3, insertRows); + + Assertions.assertEquals(Arrays.asList("name1", "name2"), visitorSqlContext.getInsertForValColumnNames().get(0)); + Assertions.assertEquals(Arrays.asList("name3", "name4"), visitorSqlContext.getInsertForValColumnNames().get(1)); + Assertions.assertEquals(Arrays.asList("name5", "name6"), visitorSqlContext.getInsertForValColumnNames().get(2)); + } + +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLSelectForUpdateRecognizerForListenerTest.java b/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLSelectForUpdateRecognizerForListenerTest.java new file mode 100644 index 00000000000..a6dd04588ec --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLSelectForUpdateRecognizerForListenerTest.java @@ -0,0 +1,218 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr; + +import io.seata.sqlparser.antlr.mysql.MySqlContext; +import io.seata.sqlparser.antlr.mysql.listener.SelectSpecificationSqlListener; +import io.seata.sqlparser.antlr.mysql.parser.MySqlLexer; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.stream.ANTLRNoCaseStringStream; +import io.seata.sqlparser.antlr.mysql.visit.StatementSqlVisitor; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.tree.ParseTreeWalker; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +/** + * @author houzhi + * @date 2020-7-9 + * @description + */ +public class MySQLSelectForUpdateRecognizerForListenerTest { + + /** + * base statementSql visitor test + */ + private String baseStatementSqlVisitor(String sql) { + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + MySqlParser parser = new MySqlParser(tokenStream); + MySqlParser.SqlStatementContext sqlStatementContext = parser.sqlStatement(); + StatementSqlVisitor sqlToStringVisitor = new StatementSqlVisitor(); + return sqlToStringVisitor.visit(sqlStatementContext).toString(); + } + + /** + * Select for update recognizer test 0. + */ + @Test + public void selectForUpdateRecognizerTest_0() { + + String sql = "SELECT a FROM t1 b WHERE b.id = d FOR UPDATE"; + + String visitorText = baseStatementSqlVisitor(sql); + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(visitorText)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext listenerSqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new SelectSpecificationSqlListener(listenerSqlContext), rootContext); + + Assertions.assertEquals("t1", listenerSqlContext.getTableName()); + Assertions.assertEquals("b.id = d", listenerSqlContext.getWhereCondition()); + Assertions.assertEquals("b", listenerSqlContext.getTableAlias()); + } + + /** + * Select for update recognizer test 1. + */ + @Test + public void selectForUpdateRecognizerTest_1() { + + String sql = "SELECT name,age,phone FROM t1 WHERE id = 'id1' FOR UPDATE"; + + String visitorText = baseStatementSqlVisitor(sql); + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(visitorText)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext listenerSqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new SelectSpecificationSqlListener(listenerSqlContext), rootContext); + + Assertions.assertEquals("t1", listenerSqlContext.getTableName()); + Assertions.assertEquals("phone", listenerSqlContext.getQueryColumnNames().get(2).getColumnName()); + Assertions.assertEquals("id = 'id1'", listenerSqlContext.getWhereCondition()); + } + + /** + * Select for update recognizer test 1. + */ + @Test + public void selectForUpdateRecognizerTest_2() { + + String sql = "SELECT name,age,phone FROM t2 WHERE id = 'id'FOR UPDATE"; + + String visitorText = baseStatementSqlVisitor(sql); + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(visitorText)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new SelectSpecificationSqlListener(mySqlContext), rootContext); + + Assertions.assertEquals("t2", mySqlContext.getTableName()); + Assertions.assertEquals("phone", mySqlContext.getQueryColumnNames().get(2).getColumnName()); + Assertions.assertEquals("id = 'id'", mySqlContext.getWhereCondition()); + Assertions.assertEquals("id", mySqlContext.getQueryWhereColumnNames().get(0).getQueryWhereColumnName()); + Assertions.assertEquals("'id'", mySqlContext.getQueryWhereValColumnNames().get(0).getQueryWhereValColumnName()); + } + + /** + * Select for update recognizer test 1. + */ + @Test + public void selectForUpdateRecognizerTest_3() { + + String sql = "SELECT name,phone FROM t1 WHERE id = 1 and username = '11' and age = 'a' or hz = '1' or aa = 1 FOR UPDATE"; + + String visitorText = baseStatementSqlVisitor(sql); + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(visitorText)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new SelectSpecificationSqlListener(mySqlContext), rootContext); + + + Assertions.assertEquals("t1", mySqlContext.getTableName()); + Assertions.assertEquals("name", mySqlContext.getQueryColumnNames().get(0).getColumnName()); + Assertions.assertEquals("username", mySqlContext.getQueryWhereColumnNames().get(1).getQueryWhereColumnName()); + Assertions.assertEquals("'a'", mySqlContext.getQueryWhereValColumnNames().get(2).getQueryWhereValColumnName()); + Assertions.assertEquals("id = 1 and username = '11' and age = 'a' or hz = '1' or aa = 1", mySqlContext.getWhereCondition()); + } + + /** + * Select for update recognizer test 4. + */ + @Test + public void selectForUpdateRecognizerTest_4() { + + String sql = "SELECT name1, name2 FROM t1 WHERE id IN (100,101) FOR UPDATE"; + + String visitorText = baseStatementSqlVisitor(sql); + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(visitorText)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new SelectSpecificationSqlListener(mySqlContext), rootContext); + + Assertions.assertEquals("t1", mySqlContext.getTableName()); + Assertions.assertEquals("name1", mySqlContext.getQueryColumnNames().get(0).getColumnName()); + Assertions.assertEquals("id", mySqlContext.getQueryWhereColumnNames().get(0).getQueryWhereColumnName()); + Assertions.assertEquals("101", mySqlContext.getQueryWhereValColumnNames().get(1).getQueryWhereValColumnName()); + Assertions.assertEquals("id IN (100,101)", mySqlContext.getWhereCondition()); + } + + /** + * Select for update recognizer test 5. + */ + @Test + public void selectForUpdateRecognizerTest_5() { + + String sql = "SELECT name1, name2 FROM t1 WHERE name = 1 and id between 2 and 3 or img = '11' FOR UPDATE"; + + String visitorText = baseStatementSqlVisitor(sql); + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(visitorText)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new SelectSpecificationSqlListener(mySqlContext), rootContext); + + Assertions.assertEquals("t1", mySqlContext.getTableName()); + Assertions.assertEquals("name1", mySqlContext.getQueryColumnNames().get(0).getColumnName()); + Assertions.assertEquals("id", mySqlContext.getQueryWhereColumnNames().get(1).getQueryWhereColumnName()); + Assertions.assertEquals("3", mySqlContext.getQueryWhereValColumnNames().get(2).getQueryWhereValColumnName()); + Assertions.assertEquals("name = 1 and id between 2 and 3 or img = '11'", mySqlContext.getWhereCondition()); + } +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLUpdateRecognizerTest.java b/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLUpdateRecognizerTest.java new file mode 100644 index 00000000000..d2a3bec69ce --- /dev/null +++ b/sqlparser/seata-sqlparser-antlr/src/test/java/io/seata/sqlparser/antlr/MySQLUpdateRecognizerTest.java @@ -0,0 +1,190 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.sqlparser.antlr; + +import io.seata.sqlparser.antlr.mysql.MySqlContext; +import io.seata.sqlparser.antlr.mysql.listener.UpdateSpecificationSqlListener; +import io.seata.sqlparser.antlr.mysql.parser.MySqlLexer; +import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; +import io.seata.sqlparser.antlr.mysql.stream.ANTLRNoCaseStringStream; +import io.seata.sqlparser.antlr.mysql.visit.StatementSqlVisitor; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.tree.ParseTreeWalker; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.List; + +/** + * The type My sql update recognizer test. + */ +public class MySQLUpdateRecognizerTest { + + /** + * base statementSql visitor test + */ + private String baseStatementSqlVisitor(String sql) { + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + MySqlParser parser = new MySqlParser(tokenStream); + MySqlParser.SqlStatementContext sqlStatementContext = parser.sqlStatement(); + StatementSqlVisitor sqlToStringVisitor = new StatementSqlVisitor(); + return sqlToStringVisitor.visit(sqlStatementContext).toString(); + } + + /** + * Update recognizer test 0. + */ + @Test + public void updateRecognizerTest_0() { + + String sql = "UPDATE t1 a SET a.name = 'name1' WHERE a.id = 'id1'"; + + String visitorText = baseStatementSqlVisitor(sql); + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(visitorText)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new UpdateSpecificationSqlListener(mySqlContext), rootContext); + + Assertions.assertEquals("t1", mySqlContext.getTableName()); + Assertions.assertEquals(1, mySqlContext.getUpdateForValues().size()); + Assertions.assertEquals("a.id", mySqlContext.getUpdateForWhereColumnNames().get(0).getUpdateWhereColumnName()); + Assertions.assertEquals("a.name", mySqlContext.getUpdateFoColumnNames().get(0).getUpdateColumn()); + Assertions.assertEquals("a.id = 'id1'", mySqlContext.getWhereCondition()); + Assertions.assertEquals("a", mySqlContext.getTableAlias()); + } + + /** + * Update recognizer test 1. + */ + @Test + public void updateRecognizerTest_1() { + + String sql = "UPDATE t1 SET name1 = name1, name2 = name2 WHERE id = 'id1'"; + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new UpdateSpecificationSqlListener(mySqlContext), rootContext); + + Assertions.assertEquals("t1", mySqlContext.getTableName()); + Assertions.assertEquals("name1", mySqlContext.getUpdateFoColumnNames().get(0).getUpdateColumn()); + Assertions.assertEquals("name1", mySqlContext.getUpdateForValues().get(0).getUpdateValue()); + Assertions.assertEquals("name2", mySqlContext.getUpdateFoColumnNames().get(1).getUpdateColumn()); + Assertions.assertEquals("name2", mySqlContext.getUpdateForValues().get(1).getUpdateValue()); + Assertions.assertEquals("id = 'id1'", mySqlContext.getWhereCondition()); + } + + /** + * Update recognizer test 2. + */ + @Test + public void updateRecognizerTest_2() { + + String sql = "UPDATE t1 SET name1 = 'name1', name2 = 'name2' WHERE id = ?"; + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new UpdateSpecificationSqlListener(mySqlContext), rootContext); + + List updateForWhereValColumnNames = mySqlContext.getUpdateForWhereValColumnNames(); + + System.out.println(updateForWhereValColumnNames); + + Assertions.assertEquals("?", mySqlContext.getUpdateForWhereValColumnNames().get(0).getUpdateWhereValColumnName()); + Assertions.assertEquals("name1", mySqlContext.getUpdateFoColumnNames().get(0).getUpdateColumn()); + Assertions.assertEquals("name2", mySqlContext.getUpdateFoColumnNames().get(1).getUpdateColumn()); + Assertions.assertEquals("id = ?", mySqlContext.getWhereCondition()); + } + + /** + * Update recognizer test 3. + */ + @Test + public void updateRecognizerTest_3() { + + String sql = "UPDATE t1 as t SET t.name1 = 'name1', t.name2 = 'name2' WHERE id in (1, 2)"; + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new UpdateSpecificationSqlListener(mySqlContext), rootContext); + + Assertions.assertEquals("1", mySqlContext.getUpdateForWhereValColumnNames().get(0).getUpdateWhereValColumnName()); + Assertions.assertEquals("t1", mySqlContext.getTableName()); + Assertions.assertEquals("t.name1", mySqlContext.getUpdateFoColumnNames().get(0).getUpdateColumn()); + Assertions.assertEquals("'name1'", mySqlContext.getUpdateForValues().get(0).getUpdateValue()); + Assertions.assertEquals("t.name2", mySqlContext.getUpdateFoColumnNames().get(1).getUpdateColumn()); + Assertions.assertEquals("id in (1,2)", mySqlContext.getWhereCondition()); + Assertions.assertEquals("t", mySqlContext.getTableAlias()); + } + + /** + * Update recognizer test 5. + */ + @Test + public void updateRecognizerTest_5() { + + String sql = "UPDATE t1 SET name1 = 'name1', name2 = 'name2' WHERE id between 1 and 2"; + + MySqlLexer lexer = new MySqlLexer(new ANTLRNoCaseStringStream(sql)); + + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + + MySqlParser parser = new MySqlParser(tokenStream); + + MySqlParser.RootContext rootContext = parser.root(); + + MySqlContext mySqlContext = new MySqlContext(); + ParseTreeWalker walker = new ParseTreeWalker(); + walker.walk(new UpdateSpecificationSqlListener(mySqlContext), rootContext); + Assertions.assertEquals("t1", mySqlContext.getTableName()); + Assertions.assertEquals("name1", mySqlContext.getUpdateFoColumnNames().get(0).getUpdateColumn()); + Assertions.assertEquals("'name1'", mySqlContext.getUpdateForValues().get(0).getUpdateValue()); + Assertions.assertEquals("name2", mySqlContext.getUpdateFoColumnNames().get(1).getUpdateColumn()); + Assertions.assertEquals("2", mySqlContext.getUpdateForWhereValColumnNames().get(1).getUpdateWhereValColumnName()); + Assertions.assertEquals("id between 1 and 2", mySqlContext.getWhereCondition()); + } +} \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SqlParserType.java b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SqlParserType.java index fafd06928fa..dd6fa9d056d 100644 --- a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SqlParserType.java +++ b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SqlParserType.java @@ -23,4 +23,9 @@ public interface SqlParserType { * The constant SQL_PARSER_TYPE_DRUID. */ String SQL_PARSER_TYPE_DRUID = "druid"; + + /** + * The constant SQL_PARSER_TYPE_ANTLR. + */ + String SQL_PARSER_TYPE_ANTLR = "antlr"; } diff --git a/style/seata_suppressions.xml b/style/seata_suppressions.xml index 4aa61fe6c63..eb7923380da 100644 --- a/style/seata_suppressions.xml +++ b/style/seata_suppressions.xml @@ -24,7 +24,11 @@ + files="[\\/]generated[\\/]"/> + + \ No newline at end of file From 26910a304ebbb9d287732266c253c0fe7c7fdf25 Mon Sep 17 00:00:00 2001 From: jimin Date: Sat, 20 Feb 2021 18:01:10 +0800 Subject: [PATCH 62/93] optimize: optimize release savepoint when use oracle (#3523) --- .../rm/datasource/exec/SelectForUpdateExecutor.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/SelectForUpdateExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/SelectForUpdateExecutor.java index 044a213bbff..bb2fe26176b 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/SelectForUpdateExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/SelectForUpdateExecutor.java @@ -17,18 +17,19 @@ import java.sql.Connection; import java.sql.DatabaseMetaData; +import java.sql.SQLException; import java.sql.Savepoint; import java.sql.Statement; -import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import io.seata.common.util.StringUtils; import io.seata.core.context.RootContext; import io.seata.rm.datasource.StatementProxy; +import io.seata.rm.datasource.sql.struct.TableRecords; import io.seata.sqlparser.SQLRecognizer; import io.seata.sqlparser.SQLSelectRecognizer; -import io.seata.rm.datasource.sql.struct.TableRecords; +import io.seata.sqlparser.util.JdbcConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -117,11 +118,11 @@ public T doExecute(Object... args) throws Throwable { } finally { if (sp != null) { try { - conn.releaseSavepoint(sp); - } catch (SQLException e) { - if (LOGGER.isWarnEnabled()) { - LOGGER.warn("{} does not support release save point, but this is not a error.", getDbType()); + if (!JdbcConstants.ORACLE.equalsIgnoreCase(getDbType())) { + conn.releaseSavepoint(sp); } + } catch (SQLException e) { + LOGGER.error("{} release save point error.", getDbType(), e); } } if (originalAutoCommit) { From 2576e366b96d4456e2453d5613b190130c203c91 Mon Sep 17 00:00:00 2001 From: tanggen Date: Sun, 21 Feb 2021 21:50:29 +0800 Subject: [PATCH 63/93] bugfix:fix the NPE of RedisTransactionStoreManager when get branchTransactionDO (#3531) --- changes/1.5.0.md | 4 ++-- changes/en-us/1.5.0.md | 2 ++ .../storage/redis/store/RedisTransactionStoreManager.java | 7 ++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 32746e99239..70cd02f2245 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -42,7 +42,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3451](https://github.com/seata/seata/pull/3451)] 修复当不使用本地事务且设置自动提交为true时,全局锁竞争失败会使得rm退出全局事务,导致全局锁在rm重试时失效,数据被脏写 - [[#3481](https://github.com/seata/seata/pull/3481)] 修复当 consul client 获取集群信息报错时会导致刷新任务中断 - [[#3491](https://github.com/seata/seata/pull/3491)] 修复README.md文件中的拼写错误 - + - [[#3531](https://github.com/seata/seata/pull/3531)] 修复RedisTransactionStoreManager读取brachTransaction中的NPE ### optimize: @@ -72,7 +72,6 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3236](https://github.com/seata/seata/pull/3236)] 优化执行解锁操作的条件,减少不必要的store操作。 - [[#3485](https://github.com/seata/seata/pull/3485)] 优化 ConfigurationFactory 中无用的try/catch - [[#3505](https://github.com/seata/seata/pull/3505)] 优化GlobalTransactionScanner类中无用的if判断 - ### test @@ -102,6 +101,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [13414850431](https://github.com/13414850431) - [github-ganyu](https://github.com/github-ganyu) - [xuande](https://github.com/xuande) + - [tanggen](https://github.com/tanggen) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 7b4429fcb08..048729d8d78 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -43,6 +43,7 @@ - [[#3451](https://github.com/seata/seata/pull/3451)] fix set auto-commit to true when local transactions are not being used. Failure to compete for a lock causes the global transaction to exit, invaliding the global row lock and dirty writing of the data. - [[#3481](https://github.com/seata/seata/pull/3481)] fix seata node refresh failure because consul crash - [[#3491](https://github.com/seata/seata/pull/3491)] fix typo in README.md + - [[#3531](https://github.com/seata/seata/pull/3531)] fix the NPE of RedisTransactionStoreManager when get branch transactions ### optimize: @@ -105,6 +106,7 @@ - [13414850431](https://github.com/13414850431) - [github-ganyu](https://github.com/github-ganyu) - [xuande](https://github.com/xuande) + - [tanggen](https://github.com/tanggen) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/server/src/main/java/io/seata/server/storage/redis/store/RedisTransactionStoreManager.java b/server/src/main/java/io/seata/server/storage/redis/store/RedisTransactionStoreManager.java index d673de88ca0..78352949544 100644 --- a/server/src/main/java/io/seata/server/storage/redis/store/RedisTransactionStoreManager.java +++ b/server/src/main/java/io/seata/server/storage/redis/store/RedisTransactionStoreManager.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -452,9 +453,9 @@ private List readBranchSessionByXid(Jedis jedis,String xid) for (Object branchInfo : branchInfos) { if (branchInfo != null) { Map branchInfoMap = (Map) branchInfo; - BranchTransactionDO branchTransactionDO = - (BranchTransactionDO) BeanUtils.mapToObject(branchInfoMap, BranchTransactionDO.class); - branchTransactionDOs.add(branchTransactionDO); + Optional branchTransactionDO = + Optional.ofNullable((BranchTransactionDO) BeanUtils.mapToObject(branchInfoMap, BranchTransactionDO.class)); + branchTransactionDO.ifPresent(branchTransactionDOs::add); } } } From 36ebcb81634af036eb7b14f5585ec8faf7c5b8a7 Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Mon, 22 Feb 2021 03:00:48 -0600 Subject: [PATCH 64/93] optimize: added interface to get current transaction role (#3533) --- changes/1.5.0.md | 3 ++- changes/en-us/1.5.0.md | 7 ++++--- .../io/seata/saga/engine/mock/MockGlobalTransaction.java | 7 +++++++ .../java/io/seata/tm/api/DefaultGlobalTransaction.java | 5 +++++ tm/src/main/java/io/seata/tm/api/GlobalTransaction.java | 9 +++++++++ 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 70cd02f2245..9cc7d42098c 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -25,7 +25,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3427](https://github.com/seata/seata/pull/3427)] 添加分布式锁接口 - [[#3443](https://github.com/seata/seata/pull/3443)] 将`seata-server`的日志发送到`logstash`或`kafka`中,再存入`ElasticSearch` - [[#3486](https://github.com/seata/seata/pull/3486)] Metrics增加事务分组属性 - + ### bugfix: @@ -63,6 +63,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3415](https://github.com/seata/seata/pull/3415)] 优化 maven clean 插件可清除 distribution 目录 - [[#3316](https://github.com/seata/seata/pull/3316)] 优化读取配置值时,属性bean可能未初始化 - [[#3420](https://github.com/seata/seata/pull/3420)] 优化枚举类并添加单元测试 + - [[#3533](https://github.com/seata/seata/pull/3533)] 添加获取当前对应事务角色接口 - [[#3436](https://github.com/seata/seata/pull/3436)] 优化SQLType类中的错别字 - [[#3439](https://github.com/seata/seata/pull/3439)] 调整springApplicationContextProvider的顺序以使得他可以在xml的bean之前被调用 - [[#3156](https://github.com/seata/seata/pull/3156)] 优化SpringProxyUtils.findTargetClass的逻辑 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 048729d8d78..38d6e661471 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -65,6 +65,7 @@ - [[#3415](https://github.com/seata/seata/pull/3415)] optimize maven clean plugin to clear the distribution directory - [[#3316](https://github.com/seata/seata/pull/3316)] optimize the property bean may not be initialized while reading config value - [[#3420](https://github.com/seata/seata/pull/3420)] optimize enumerated classes and add unit tests + - [[#3533](https://github.com/seata/seata/pull/3533)] added interface to get current transaction role - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class - [[#3439](https://github.com/seata/seata/pull/3439)] adjust the order of springApplicationContextProvider - [[#3156](https://github.com/seata/seata/pull/3156)] optimize the logic of SpringProxyUtils.findTargetClass @@ -77,11 +78,11 @@ - + ### test - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient - + Thanks to these contributors for their code commits. Please report an unintended omission. @@ -107,7 +108,7 @@ - [github-ganyu](https://github.com/github-ganyu) - [xuande](https://github.com/xuande) - [tanggen](https://github.com/tanggen) - + Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/test/src/test/java/io/seata/saga/engine/mock/MockGlobalTransaction.java b/test/src/test/java/io/seata/saga/engine/mock/MockGlobalTransaction.java index 14d926f7f36..4d112b09122 100644 --- a/test/src/test/java/io/seata/saga/engine/mock/MockGlobalTransaction.java +++ b/test/src/test/java/io/seata/saga/engine/mock/MockGlobalTransaction.java @@ -20,6 +20,7 @@ import io.seata.core.model.GlobalStatus; import io.seata.saga.engine.sequence.SpringJvmUUIDSeqGenerator; import io.seata.tm.api.GlobalTransaction; +import io.seata.tm.api.GlobalTransactionRole; import io.seata.tm.api.transaction.SuspendedResourcesHolder; /** @@ -102,4 +103,10 @@ public void globalReport(GlobalStatus globalStatus) throws TransactionException public GlobalStatus getLocalStatus() { return status; } + + @Override + public GlobalTransactionRole getGlobalTransactionRole() { + return null; + } + } diff --git a/tm/src/main/java/io/seata/tm/api/DefaultGlobalTransaction.java b/tm/src/main/java/io/seata/tm/api/DefaultGlobalTransaction.java index 25d753243b5..ccda35263f6 100644 --- a/tm/src/main/java/io/seata/tm/api/DefaultGlobalTransaction.java +++ b/tm/src/main/java/io/seata/tm/api/DefaultGlobalTransaction.java @@ -243,6 +243,11 @@ public GlobalStatus getLocalStatus() { return status; } + @Override + public GlobalTransactionRole getGlobalTransactionRole() { + return role; + } + private void assertXIDNotNull() { if (xid == null) { throw new IllegalStateException(); diff --git a/tm/src/main/java/io/seata/tm/api/GlobalTransaction.java b/tm/src/main/java/io/seata/tm/api/GlobalTransaction.java index 959e1d50ca0..666f748bd77 100644 --- a/tm/src/main/java/io/seata/tm/api/GlobalTransaction.java +++ b/tm/src/main/java/io/seata/tm/api/GlobalTransaction.java @@ -123,4 +123,13 @@ public interface GlobalTransaction { * @see GlobalStatus */ GlobalStatus getLocalStatus(); + + /** + * get global transaction role. + * + * @return global transaction Role. + * @see GlobalTransactionRole + */ + GlobalTransactionRole getGlobalTransactionRole(); + } From 40406447646254b538b065c627318e9e3203fd0b Mon Sep 17 00:00:00 2001 From: jimin Date: Thu, 4 Mar 2021 17:20:07 +0800 Subject: [PATCH 65/93] bugfix: fix server distribution missing files (#3540) --- README.md | 3 ++- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + distribution/release-seata.xml | 27 +++++++++------------------ 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index a1c57d984d9..b04a895eaf6 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ For more details about principle and design, please go to [Seata wiki page](http ## Maven dependency ```xml -1.4.0 +1.4.1 io.seata @@ -123,6 +123,7 @@ Contributors are welcomed to join the Seata project. Please check [CONTRIBUTING] ## Seata ecosystem * [Seata Ecosystem Entry](https://github.com/seata) - A GitHub group `seata` to gather all Seata relevant projects +* [Seata GoLang](https://github.com/opentrx/seata-golang) - Seata GoLang client and server * [Seata Samples](https://github.com/seata/seata-samples) - Samples for Seata * [Seata Docker](https://github.com/seata/seata-docker) - Seata integration with docker * [Seata K8s](https://github.com/seata/seata-k8s) - Seata integration with k8s diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 9cc7d42098c..25d293fddea 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -43,6 +43,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3481](https://github.com/seata/seata/pull/3481)] 修复当 consul client 获取集群信息报错时会导致刷新任务中断 - [[#3491](https://github.com/seata/seata/pull/3491)] 修复README.md文件中的拼写错误 - [[#3531](https://github.com/seata/seata/pull/3531)] 修复RedisTransactionStoreManager读取brachTransaction中的NPE + - [[#3540](https://github.com/seata/seata/pull/3540)] 修复server发布打包时缺失文件 ### optimize: diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 38d6e661471..c2792bfb536 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -44,6 +44,7 @@ - [[#3481](https://github.com/seata/seata/pull/3481)] fix seata node refresh failure because consul crash - [[#3491](https://github.com/seata/seata/pull/3491)] fix typo in README.md - [[#3531](https://github.com/seata/seata/pull/3531)] fix the NPE of RedisTransactionStoreManager when get branch transactions + - [[#3540](https://github.com/seata/seata/pull/3540)] fix server distribution missing files ### optimize: diff --git a/distribution/release-seata.xml b/distribution/release-seata.xml index ae329f278f8..9d648556249 100644 --- a/distribution/release-seata.xml +++ b/distribution/release-seata.xml @@ -23,39 +23,30 @@ zip - - plugins/** - - - - - - conf/** + seata-server-${project.version}/plugins/** + seata-server-${project.version}/conf/** + seata-server-${project.version}/lib/** + seata-server-${project.version}/logs/ + + seata-server-${project.version}/lib/mysql-connector-java-*.jar + - bin/* + seata-server-${project.version}/bin/* 0755 - - - lib/** - - - lib/mysql-connector-java-*.jar - - LICENSE-BIN - LICENSE + seata-server-${project.version}/LICENSE From 4e3d7050713686c3db16cf5c7e25a730f228df25 Mon Sep 17 00:00:00 2001 From: leo Date: Fri, 5 Mar 2021 10:17:38 +0800 Subject: [PATCH 66/93] optimize: Saga SpringBeanServiceInvoker support switch json parser (#3513) --- .../impl/DefaultStateMachineConfig.java | 1 + .../impl/SpringBeanServiceInvoker.java | 22 ++- .../saga/statelang/parser/JsonParser.java | 9 ++ .../statelang/parser/impl/FastjsonParser.java | 24 ++- .../parser/impl/JacksonJsonParser.java | 20 ++- .../saga/engine/StateMachineAsyncTests.java | 2 +- .../seata/saga/engine/StateMachineTests.java | 33 +++- .../saga/engine/db/StateMachineDBTests.java | 32 ++++ .../StateMachineAsyncDBMockServerTests.java | 4 +- .../StateMachineDBMockServerTests.java | 4 +- .../simple_statelang_with_complex_params.json | 2 +- ...statelang_with_complex_params_jackson.json | 141 ++++++++++++++++++ 12 files changed, 278 insertions(+), 16 deletions(-) create mode 100644 test/src/test/resources/saga/statelang/simple_statelang_with_complex_params_jackson.json diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/DefaultStateMachineConfig.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/DefaultStateMachineConfig.java index 5ec5299ee96..6e47cddc545 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/DefaultStateMachineConfig.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/DefaultStateMachineConfig.java @@ -208,6 +208,7 @@ protected void init() throws Exception { SpringBeanServiceInvoker springBeanServiceInvoker = new SpringBeanServiceInvoker(); springBeanServiceInvoker.setApplicationContext(getApplicationContext()); springBeanServiceInvoker.setThreadPoolExecutor(threadPoolExecutor); + springBeanServiceInvoker.setSagaJsonParser(getSagaJsonParser()); this.serviceInvokerManager.putServiceInvoker(DomainConstants.SERVICE_TYPE_SPRING_BEAN, springBeanServiceInvoker); } diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/invoker/impl/SpringBeanServiceInvoker.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/invoker/impl/SpringBeanServiceInvoker.java index af41a7ebceb..9f4908a8b94 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/invoker/impl/SpringBeanServiceInvoker.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/invoker/impl/SpringBeanServiceInvoker.java @@ -27,9 +27,6 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.atomic.AtomicInteger; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.parser.Feature; - import io.seata.common.exception.FrameworkErrorCode; import io.seata.common.util.CollectionUtils; import io.seata.saga.engine.exception.EngineExecutionException; @@ -39,6 +36,8 @@ import io.seata.saga.statelang.domain.ServiceTaskState; import io.seata.saga.statelang.domain.TaskState.Retry; import io.seata.saga.statelang.domain.impl.ServiceTaskStateImpl; +import io.seata.saga.statelang.parser.JsonParser; +import io.seata.saga.statelang.parser.JsonParserFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; @@ -56,6 +55,7 @@ public class SpringBeanServiceInvoker implements ServiceInvoker, ApplicationCont private ApplicationContext applicationContext; private ThreadPoolExecutor threadPoolExecutor; + private String sagaJsonParser; @Override public Object invoke(ServiceTaskState serviceTaskState, Object... input) throws Throwable { @@ -296,8 +296,12 @@ protected Object toJavaObject(Object value, Class paramType) { } else if (isPrimitive(paramType)) { return value; } else { - String jsonValue = JSON.toJSONString(value); - return JSON.parseObject(jsonValue, paramType, Feature.SupportAutoType); + JsonParser jsonParser = JsonParserFactory.getJsonParser(getSagaJsonParser()); + if (jsonParser == null) { + throw new RuntimeException("Cannot get JsonParser by name : " + getSagaJsonParser()); + } + String jsonValue = jsonParser.toJsonString(value, true, false); + return jsonParser.parse(jsonValue, paramType, false); } } @@ -344,4 +348,12 @@ protected Class getPrimitiveClass(String className) { return null; } } + + public String getSagaJsonParser() { + return sagaJsonParser; + } + + public void setSagaJsonParser(String sagaJsonParser) { + this.sagaJsonParser = sagaJsonParser; + } } \ No newline at end of file diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/JsonParser.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/JsonParser.java index 37fef5c258e..3d956d13140 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/JsonParser.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/JsonParser.java @@ -39,6 +39,15 @@ public interface JsonParser { */ String toJsonString(Object o, boolean prettyPrint); + /** + * Object to Json string + * @param o + * @param ignoreAutoType + * @param prettyPrint + * @return + */ + String toJsonString(Object o, boolean ignoreAutoType, boolean prettyPrint); + /** * parse json string to Object * diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/FastjsonParser.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/FastjsonParser.java index 04efa8eed97..b7ccfb35a59 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/FastjsonParser.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/FastjsonParser.java @@ -40,6 +40,11 @@ public class FastjsonParser implements JsonParser { SerializerFeature.WriteClassName, SerializerFeature.PrettyFormat }; + private static final SerializerFeature[] FEATURES_PRETTY = new SerializerFeature[] { + SerializerFeature.DisableCircularReferenceDetect, + SerializerFeature.WriteDateUseDateFormat, + SerializerFeature.PrettyFormat }; + public static final String NAME = "fastjson"; @Override @@ -49,11 +54,26 @@ public String getName() { @Override public String toJsonString(Object o, boolean prettyPrint) { + return toJsonString(o, false, prettyPrint); + } + + @Override + public String toJsonString(Object o, boolean ignoreAutoType, boolean prettyPrint) { if (prettyPrint) { - return JSON.toJSONString(o, SERIALIZER_FEATURES_PRETTY); + if (ignoreAutoType) { + return JSON.toJSONString(o, FEATURES_PRETTY); + } + else { + return JSON.toJSONString(o, SERIALIZER_FEATURES_PRETTY); + } } else { - return JSON.toJSONString(o, SERIALIZER_FEATURES); + if (ignoreAutoType) { + return JSON.toJSONString(o); + } + else { + return JSON.toJSONString(o, SERIALIZER_FEATURES); + } } } diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/JacksonJsonParser.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/JacksonJsonParser.java index 6d84558ddca..3407df89ffd 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/JacksonJsonParser.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/JacksonJsonParser.java @@ -61,15 +61,31 @@ public String getName() { @Override public String toJsonString(Object o, boolean prettyPrint) { + return toJsonString(o, false, prettyPrint); + } + + @Override + public String toJsonString(Object o, boolean ignoreAutoType, boolean prettyPrint) { try { if (o instanceof List && ((List) o).isEmpty()) { return "[]"; } if (prettyPrint) { - return objectMapperWithAutoType.writerWithDefaultPrettyPrinter().writeValueAsString(o); + if (ignoreAutoType) { + return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(o); + } + else { + return objectMapperWithAutoType.writerWithDefaultPrettyPrinter().writeValueAsString(o); + } + } else { - return objectMapperWithAutoType.writeValueAsString(o); + if (ignoreAutoType) { + return objectMapper.writeValueAsString(o); + } + else { + return objectMapperWithAutoType.writeValueAsString(o); + } } } catch (JsonProcessingException e) { throw new RuntimeException("Parse object to json error", e); diff --git a/test/src/test/java/io/seata/saga/engine/StateMachineAsyncTests.java b/test/src/test/java/io/seata/saga/engine/StateMachineAsyncTests.java index ea71c40d597..29a3626f21e 100644 --- a/test/src/test/java/io/seata/saga/engine/StateMachineAsyncTests.java +++ b/test/src/test/java/io/seata/saga/engine/StateMachineAsyncTests.java @@ -219,7 +219,7 @@ public void testCompensationAndSubStateMachineWithLayout() { } @Test - public void testStateMachineWithComplextParams() { + public void testStateMachineWithComplexParams() { long start = System.currentTimeMillis(); diff --git a/test/src/test/java/io/seata/saga/engine/StateMachineTests.java b/test/src/test/java/io/seata/saga/engine/StateMachineTests.java index 95368d345fa..a46ffedee92 100644 --- a/test/src/test/java/io/seata/saga/engine/StateMachineTests.java +++ b/test/src/test/java/io/seata/saga/engine/StateMachineTests.java @@ -20,12 +20,14 @@ import io.seata.saga.statelang.domain.DomainConstants; import io.seata.saga.statelang.domain.ExecutionStatus; import io.seata.saga.statelang.domain.StateMachineInstance; +import io.seata.saga.statelang.parser.JsonParserFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -279,7 +281,36 @@ public void testCompensationAndSubStateMachineWithLayout() { } @Test - public void testStateMachineWithComplextParams() { + public void testStateComplexParams() { + + People people1 = new People(); + people1.setName("lilei"); + people1.setAge(18); + + People people2 = new People(); + people2.setName("lilei2"); + people2.setAge(19); + + People people3 = new People(); + people3.setName("lilei3"); + people3.setAge(20); + + People people4 = new People(); + people4.setName("lilei4"); + people4.setAge(21); + + people1.setChildrenArray(new People[] {people2}); + people1.setChildrenList(Arrays.asList(people3)); + Map map1 = new HashMap<>(1); + map1.put("lilei4", people4); + people1.setChildrenMap(map1); + + String json = JsonParserFactory.getJsonParser("jackson").toJsonString(people1, false, true); + System.out.println(json); + } + + @Test + public void testStateMachineWithComplexParams() { long start = System.currentTimeMillis(); diff --git a/test/src/test/java/io/seata/saga/engine/db/StateMachineDBTests.java b/test/src/test/java/io/seata/saga/engine/db/StateMachineDBTests.java index ba74a08b40d..29994e59b37 100644 --- a/test/src/test/java/io/seata/saga/engine/db/StateMachineDBTests.java +++ b/test/src/test/java/io/seata/saga/engine/db/StateMachineDBTests.java @@ -24,6 +24,8 @@ import io.seata.saga.engine.StateMachineEngine; import io.seata.saga.engine.exception.EngineExecutionException; import io.seata.saga.engine.impl.DefaultStateMachineConfig; +import io.seata.saga.engine.mock.DemoService.Engineer; +import io.seata.saga.engine.mock.DemoService.People; import io.seata.saga.proctrl.ProcessContext; import io.seata.saga.statelang.domain.DomainConstants; import io.seata.saga.statelang.domain.ExecutionStatus; @@ -248,6 +250,36 @@ public void testStatusMatchingStateMachine() throws Exception { Assertions.assertTrue(GlobalStatus.CommitRetrying.equals(globalTransaction.getStatus())); } + @Test + public void testStateMachineWithComplexParams() { + + long start = System.currentTimeMillis(); + + Map paramMap = new HashMap<>(1); + People people = new People(); + people.setName("lilei"); + people.setAge(18); + + Engineer engineer = new Engineer(); + engineer.setName("programmer"); + + paramMap.put("people", people); + paramMap.put("career", engineer); + + String stateMachineName = "simpleStateMachineWithComplexParamsJackson"; + + StateMachineInstance instance = stateMachineEngine.start(stateMachineName, null, paramMap); + + People peopleResult = (People) instance.getEndParams().get("complexParameterMethodResult"); + Assertions.assertNotNull(peopleResult); + Assertions.assertTrue(people.getName().equals(people.getName())); + + long cost = System.currentTimeMillis() - start; + System.out.println("====== XID: " + instance.getId() + " cost :" + cost); + + Assertions.assertTrue(ExecutionStatus.SU.equals(instance.getStatus())); + } + @Test public void testCompensationStateMachine() throws Exception { diff --git a/test/src/test/java/io/seata/saga/engine/db/mockserver/StateMachineAsyncDBMockServerTests.java b/test/src/test/java/io/seata/saga/engine/db/mockserver/StateMachineAsyncDBMockServerTests.java index 10087333686..9e60fe92cef 100644 --- a/test/src/test/java/io/seata/saga/engine/db/mockserver/StateMachineAsyncDBMockServerTests.java +++ b/test/src/test/java/io/seata/saga/engine/db/mockserver/StateMachineAsyncDBMockServerTests.java @@ -177,7 +177,7 @@ public void testCompensationAndSubStateMachineWithLayout() throws Exception { } @Test - public void testStateMachineWithComplextParams() { + public void testStateMachineWithComplexParams() { long start = System.currentTimeMillis(); @@ -187,7 +187,7 @@ public void testStateMachineWithComplextParams() { people.setAge(18); paramMap.put("people", people); - String stateMachineName = "simpleStateMachineWithComplexParams"; + String stateMachineName = "simpleStateMachineWithComplexParamsJackson"; StateMachineInstance inst = stateMachineEngine.startAsync(stateMachineName, null, paramMap, callback); diff --git a/test/src/test/java/io/seata/saga/engine/db/mockserver/StateMachineDBMockServerTests.java b/test/src/test/java/io/seata/saga/engine/db/mockserver/StateMachineDBMockServerTests.java index cd6a458d4ef..5eab4716c12 100644 --- a/test/src/test/java/io/seata/saga/engine/db/mockserver/StateMachineDBMockServerTests.java +++ b/test/src/test/java/io/seata/saga/engine/db/mockserver/StateMachineDBMockServerTests.java @@ -613,7 +613,7 @@ public void testRollbackRetryingTwiceThenRetryRollbacked() throws Exception { } @Test - public void testStateMachineWithComplextParams() { + public void testStateMachineWithComplexParams() { long start = System.currentTimeMillis(); @@ -628,7 +628,7 @@ public void testStateMachineWithComplextParams() { paramMap.put("people", people); paramMap.put("career", engineer); - String stateMachineName = "simpleStateMachineWithComplexParams"; + String stateMachineName = "simpleStateMachineWithComplexParamsJackson"; StateMachineInstance instance = stateMachineEngine.start(stateMachineName, null, paramMap); diff --git a/test/src/test/resources/saga/statelang/simple_statelang_with_complex_params.json b/test/src/test/resources/saga/statelang/simple_statelang_with_complex_params.json index e5c5a41dc69..5c6f1cb47e1 100644 --- a/test/src/test/resources/saga/statelang/simple_statelang_with_complex_params.json +++ b/test/src/test/resources/saga/statelang/simple_statelang_with_complex_params.json @@ -1,6 +1,6 @@ { "Name": "simpleStateMachineWithComplexParams", - "Comment": "带复杂参数的测试状态机定义", + "Comment": "带复杂参数的测试状态机定义fastjson格式", "StartState": "FirstState", "Version": "0.0.1", "States": { diff --git a/test/src/test/resources/saga/statelang/simple_statelang_with_complex_params_jackson.json b/test/src/test/resources/saga/statelang/simple_statelang_with_complex_params_jackson.json new file mode 100644 index 00000000000..1ebb0006634 --- /dev/null +++ b/test/src/test/resources/saga/statelang/simple_statelang_with_complex_params_jackson.json @@ -0,0 +1,141 @@ +{ + "Name": "simpleStateMachineWithComplexParamsJackson", + "Comment": "带复杂参数的测试状态机定义jackson格式", + "StartState": "FirstState", + "Version": "0.0.1", + "States": { + "FirstState": { + "Type": "ServiceTask", + "ServiceName": "demoService", + "ServiceMethod": "complexParameterMethod", + "Next": "ChoiceState", + "ParameterTypes" : ["java.lang.String", "int", "io.seata.saga.engine.mock.DemoService$People", "[Lio.seata.saga.engine.mock.DemoService$People;", "java.util.List", "java.util.Map"], + "Input": [ + "$.[people].name", + "$.[people].age", + { + "@type": "io.seata.saga.engine.mock.DemoService$People", + "name": "lilei", + "age": 18, + "childrenArray": [ + "[Lio.seata.saga.engine.mock.DemoService$People;", + [ + { + "@type": "io.seata.saga.engine.mock.DemoService$People", + "name": "lilei", + "age": 18 + }, + { + "@type": "io.seata.saga.engine.mock.DemoService$People", + "name": "lilei", + "age": 18 + } + ] + ], + "childrenList": [ + "java.util.ArrayList", + [ + { + "@type": "io.seata.saga.engine.mock.DemoService$People", + "name": "lilei", + "age": 18 + }, + { + "@type": "io.seata.saga.engine.mock.DemoService$People", + "name": "lilei", + "age": 18 + } + ] + ], + "childrenMap": { + "@type": "java.util.LinkedHashMap", + "lilei": { + "@type": "io.seata.saga.engine.mock.DemoService$People", + "name": "lilei", + "age": 18 + } + } + }, + [ + "[Lio.seata.saga.engine.mock.DemoService$People;", + [ + { + "@type": "io.seata.saga.engine.mock.DemoService$People", + "name": "$.[people].name", + "age": "$.[people].age" + }, + { + "@type": "io.seata.saga.engine.mock.DemoService$People", + "name": "$.[people].name", + "age": "$.[people].age" + } + ] + ], + [ + "java.util.ArrayList", + [ + { + "@type": "io.seata.saga.engine.mock.DemoService$People", + "name": "$.[people].name", + "age": "$.[people].age" + } + ] + ], + { + "@type": "java.util.LinkedHashMap", + "lilei": { + "@type": "io.seata.saga.engine.mock.DemoService$People", + "name": "$.[people].name", + "age": "$.[people].age" + } + } + ], + "Output": { + "complexParameterMethodResult": "$.#root" + } + }, + "ChoiceState":{ + "Type": "Choice", + "Choices":[ + { + "Expression":"[complexParameterMethodResult].age > 0", + "Next":"SecondState" + }, + { + "Expression":"[complexParameterMethodResult].age <= 0", + "Next":"ThirdState" + } + ], + "Default":"Fail" + }, + "SecondState": { + "Type": "ServiceTask", + "ServiceName": "demoService", + "ServiceMethod": "interfaceParameterMethod", + "Input": [ + "$.[career]" + ], + "Output": { + "secondStateResult": "$.#root" + }, + "Next": "ThirdState" + }, + "ThirdState": { + "Type": "ServiceTask", + "ServiceName": "demoService", + "ServiceMethod": "interfaceParameterMethod", + "Input": [ + "$.[secondStateResult]" + ], + "Next": "Succeed" + }, + "Succeed": { + "Type":"Succeed" + }, + "Fail": { + "Type":"Fail", + "ErrorCode": "NOT_FOUND", + "Message": "not found" + } + } +} \ No newline at end of file From 3d87b000287c5eb88058e457569b589ffaf1e484 Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Fri, 5 Mar 2021 17:56:18 +0800 Subject: [PATCH 67/93] optimize: unified the length of xid in scripts (#3549) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + script/client/at/db/mysql.sql | 4 ++-- script/client/at/db/oracle.sql | 2 +- script/client/at/db/postgresql.sql | 2 +- script/server/db/mysql.sql | 2 +- script/server/db/oracle.sql | 2 +- script/server/db/postgresql.sql | 2 +- 8 files changed, 9 insertions(+), 7 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 25d293fddea..2b9f25314d1 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -74,6 +74,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3236](https://github.com/seata/seata/pull/3236)] 优化执行解锁操作的条件,减少不必要的store操作。 - [[#3485](https://github.com/seata/seata/pull/3485)] 优化 ConfigurationFactory 中无用的try/catch - [[#3505](https://github.com/seata/seata/pull/3505)] 优化GlobalTransactionScanner类中无用的if判断 + - [[#3549](https://github.com/seata/seata/pull/3549)] 统一不同表中的xid字段的长度 ### test diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index c2792bfb536..85c7d807851 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -76,6 +76,7 @@ - [[#3236](https://github.com/seata/seata/pull/3236)] optimize the conditions for executing unlocking - [[#3485](https://github.com/seata/seata/pull/3485)] optimize useless codes in ConfigurationFactory - [[#3505](https://github.com/seata/seata/pull/3505)] optimize useless if judgments in the GlobalTransactionScanner class + - [[#3549](https://github.com/seata/seata/pull/3549)] unified the length of xid in scripts diff --git a/script/client/at/db/mysql.sql b/script/client/at/db/mysql.sql index c55fcb984f3..7f94c68ce51 100644 --- a/script/client/at/db/mysql.sql +++ b/script/client/at/db/mysql.sql @@ -1,8 +1,8 @@ -- for AT mode you must to init this sql for you business database. the seata server not need it. CREATE TABLE IF NOT EXISTS `undo_log` ( - `branch_id` BIGINT(20) NOT NULL COMMENT 'branch transaction id', - `xid` VARCHAR(100) NOT NULL COMMENT 'global transaction id', + `branch_id` BIGINT NOT NULL COMMENT 'branch transaction id', + `xid` VARCHAR(128) NOT NULL COMMENT 'global transaction id', `context` VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization', `rollback_info` LONGBLOB NOT NULL COMMENT 'rollback info', `log_status` INT(11) NOT NULL COMMENT '0:normal status,1:defense status', diff --git a/script/client/at/db/oracle.sql b/script/client/at/db/oracle.sql index 41a7e5d4a01..950e3aeffe7 100644 --- a/script/client/at/db/oracle.sql +++ b/script/client/at/db/oracle.sql @@ -3,7 +3,7 @@ CREATE TABLE undo_log ( id NUMBER(19) NOT NULL, branch_id NUMBER(19) NOT NULL, - xid VARCHAR2(100) NOT NULL, + xid VARCHAR2(128) NOT NULL, context VARCHAR2(128) NOT NULL, rollback_info BLOB NOT NULL, log_status NUMBER(10) NOT NULL, diff --git a/script/client/at/db/postgresql.sql b/script/client/at/db/postgresql.sql index 0c1fd08884e..739e77d04b2 100644 --- a/script/client/at/db/postgresql.sql +++ b/script/client/at/db/postgresql.sql @@ -3,7 +3,7 @@ CREATE TABLE IF NOT EXISTS public.undo_log ( id SERIAL NOT NULL, branch_id BIGINT NOT NULL, - xid VARCHAR(100) NOT NULL, + xid VARCHAR(128) NOT NULL, context VARCHAR(128) NOT NULL, rollback_info BYTEA NOT NULL, log_status INT NOT NULL, diff --git a/script/server/db/mysql.sql b/script/server/db/mysql.sql index 506116aa5a6..5be4cf94970 100644 --- a/script/server/db/mysql.sql +++ b/script/server/db/mysql.sql @@ -42,7 +42,7 @@ CREATE TABLE IF NOT EXISTS `branch_table` CREATE TABLE IF NOT EXISTS `lock_table` ( `row_key` VARCHAR(128) NOT NULL, - `xid` VARCHAR(96), + `xid` VARCHAR(128), `transaction_id` BIGINT, `branch_id` BIGINT NOT NULL, `resource_id` VARCHAR(256), diff --git a/script/server/db/oracle.sql b/script/server/db/oracle.sql index 0579761caf4..d35af8d3425 100644 --- a/script/server/db/oracle.sql +++ b/script/server/db/oracle.sql @@ -42,7 +42,7 @@ CREATE INDEX idx_xid ON branch_table (xid); CREATE TABLE lock_table ( row_key VARCHAR2(128) NOT NULL, - xid VARCHAR2(96), + xid VARCHAR2(128), transaction_id NUMBER(19), branch_id NUMBER(19) NOT NULL, resource_id VARCHAR2(256), diff --git a/script/server/db/postgresql.sql b/script/server/db/postgresql.sql index 3cc77e16324..0f772f75dbf 100644 --- a/script/server/db/postgresql.sql +++ b/script/server/db/postgresql.sql @@ -42,7 +42,7 @@ CREATE INDEX idx_xid ON public.branch_table (xid); CREATE TABLE IF NOT EXISTS public.lock_table ( row_key VARCHAR(128) NOT NULL, - xid VARCHAR(96), + xid VARCHAR(128), transaction_id BIGINT, branch_id BIGINT NOT NULL, resource_id VARCHAR(256), From 88d938a22223ba1ac3b566bd6ff44195eb7edb07 Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Sat, 6 Mar 2021 22:04:02 +0800 Subject: [PATCH 68/93] bugfix: do not call setBlob to invalid the jdbc exception (#3555) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 2 +- .../io/seata/rm/datasource/undo/AbstractUndoExecutor.java | 3 ++- .../seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java | 3 +-- .../seata/rm/datasource/undo/oracle/OracleUndoLogManager.java | 4 +--- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 2b9f25314d1..136ccc34070 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -43,6 +43,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3481](https://github.com/seata/seata/pull/3481)] 修复当 consul client 获取集群信息报错时会导致刷新任务中断 - [[#3491](https://github.com/seata/seata/pull/3491)] 修复README.md文件中的拼写错误 - [[#3531](https://github.com/seata/seata/pull/3531)] 修复RedisTransactionStoreManager读取brachTransaction中的NPE + - [[#3555](https://github.com/seata/seata/pull/3555)] 通过setBytes代替setBlob,避免高版本jdbc驱动工作异常 - [[#3540](https://github.com/seata/seata/pull/3540)] 修复server发布打包时缺失文件 ### optimize: diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 85c7d807851..8232bc5273e 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -44,9 +44,9 @@ - [[#3481](https://github.com/seata/seata/pull/3481)] fix seata node refresh failure because consul crash - [[#3491](https://github.com/seata/seata/pull/3491)] fix typo in README.md - [[#3531](https://github.com/seata/seata/pull/3531)] fix the NPE of RedisTransactionStoreManager when get branch transactions + - [[#3555](https://github.com/seata/seata/pull/3555)] do not call setBlob to invalid the jdbc exception - [[#3540](https://github.com/seata/seata/pull/3540)] fix server distribution missing files - ### optimize: - [[#3383](https://github.com/seata/seata/pull/3383)] optimize StatementProxyTest unit test diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoExecutor.java index e9bf7667c40..14ca5c91265 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoExecutor.java @@ -28,6 +28,7 @@ import java.util.List; import com.alibaba.fastjson.JSON; +import io.seata.common.util.BlobUtils; import io.seata.common.util.IOUtil; import io.seata.common.util.StringUtils; import io.seata.config.ConfigurationFactory; @@ -162,7 +163,7 @@ protected void undoPrepare(PreparedStatement undoPST, ArrayList undoValue if (type == JDBCType.BLOB.getVendorTypeNumber()) { SerialBlob serialBlob = (SerialBlob) value; if (serialBlob != null) { - undoPST.setBlob(undoIndex, serialBlob.getBinaryStream()); + undoPST.setBytes(undoIndex, BlobUtils.blob2Bytes(serialBlob)); } else { undoPST.setObject(undoIndex, null); } diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java index 79302409260..91c754b2b75 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java @@ -21,7 +21,6 @@ import java.util.Date; import io.seata.common.loader.LoadLevel; -import io.seata.common.util.BlobUtils; import io.seata.core.compressor.CompressorType; import io.seata.core.constants.ClientTableColumnsName; import io.seata.rm.datasource.undo.AbstractUndoLogManager; @@ -86,7 +85,7 @@ private void insertUndoLog(String xid, long branchId, String rollbackCtx, byte[] pst.setLong(1, branchId); pst.setString(2, xid); pst.setString(3, rollbackCtx); - pst.setBlob(4, BlobUtils.bytes2Blob(undoLogContent)); + pst.setBytes(4, undoLogContent); pst.setInt(5, state.getValue()); pst.executeUpdate(); } catch (Exception e) { diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoLogManager.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoLogManager.java index e5dbfedb327..beb7bc40735 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoLogManager.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoLogManager.java @@ -16,7 +16,6 @@ package io.seata.rm.datasource.undo.oracle; -import java.io.ByteArrayInputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -87,8 +86,7 @@ private void insertUndoLog(String xid, long branchID, String rollbackCtx, byte[] pst.setLong(1, branchID); pst.setString(2, xid); pst.setString(3, rollbackCtx); - ByteArrayInputStream inputStream = new ByteArrayInputStream(undoLogContent); - pst.setBlob(4, inputStream); + pst.setBytes(4, undoLogContent); pst.setInt(5, state.getValue()); pst.executeUpdate(); } catch (Exception e) { From efefd177702a058c3fd488d2a5b9fe3acadb31f1 Mon Sep 17 00:00:00 2001 From: Dmego Date: Wed, 10 Mar 2021 10:12:48 +0800 Subject: [PATCH 69/93] bugfix: set time threshold for transactions in committing state (#3560) --- changes/1.5.0.md | 3 +++ changes/en-us/1.5.0.md | 3 +++ .../io/seata/server/coordinator/DefaultCoordinator.java | 7 ++++++- .../main/java/io/seata/server/session/GlobalSession.java | 6 +++--- .../server/storage/db/session/DataBaseSessionManager.java | 2 +- .../server/storage/redis/session/RedisSessionManager.java | 2 +- 6 files changed, 17 insertions(+), 6 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 136ccc34070..03d86df61fb 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -43,6 +43,8 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3481](https://github.com/seata/seata/pull/3481)] 修复当 consul client 获取集群信息报错时会导致刷新任务中断 - [[#3491](https://github.com/seata/seata/pull/3491)] 修复README.md文件中的拼写错误 - [[#3531](https://github.com/seata/seata/pull/3531)] 修复RedisTransactionStoreManager读取brachTransaction中的NPE + - [[#3500](https://github.com/seata/seata/pull/3500)] 修复 oracle 和 postgreSql 不能查询出 column info 的问题 + - [[#3560](https://github.com/seata/seata/pull/3560)] 修复 Committing 状态的事务没有时间阈值问题 - [[#3555](https://github.com/seata/seata/pull/3555)] 通过setBytes代替setBlob,避免高版本jdbc驱动工作异常 - [[#3540](https://github.com/seata/seata/pull/3540)] 修复server发布打包时缺失文件 @@ -106,6 +108,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [github-ganyu](https://github.com/github-ganyu) - [xuande](https://github.com/xuande) - [tanggen](https://github.com/tanggen) + - [dmego](https://github.com/dmego) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 8232bc5273e..9e2e0c20200 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -44,6 +44,8 @@ - [[#3481](https://github.com/seata/seata/pull/3481)] fix seata node refresh failure because consul crash - [[#3491](https://github.com/seata/seata/pull/3491)] fix typo in README.md - [[#3531](https://github.com/seata/seata/pull/3531)] fix the NPE of RedisTransactionStoreManager when get branch transactions + - [[#3500](https://github.com/seata/seata/pull/3500)] fix oracle and postgreSQL can't query column info + - [[#3560](https://github.com/seata/seata/pull/3560)] set time threshold for transactions in committing state - [[#3555](https://github.com/seata/seata/pull/3555)] do not call setBlob to invalid the jdbc exception - [[#3540](https://github.com/seata/seata/pull/3540)] fix server distribution missing files @@ -110,6 +112,7 @@ - [github-ganyu](https://github.com/github-ganyu) - [xuande](https://github.com/xuande) - [tanggen](https://github.com/tanggen) + - [dmego](https://github.com/dmego) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java b/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java index 7f289cb03c2..929a5a46219 100644 --- a/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java +++ b/server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java @@ -281,7 +281,7 @@ protected void handleRetryRollbacking() { SessionHelper.forEach(rollbackingSessions, rollbackingSession -> { try { // prevent repeated rollback - if (rollbackingSession.getStatus().equals(GlobalStatus.Rollbacking) && !rollbackingSession.isRollbackingDead()) { + if (rollbackingSession.getStatus().equals(GlobalStatus.Rollbacking) && !rollbackingSession.isDeadSession()) { //The function of this 'return' is 'continue'. return; } @@ -316,6 +316,11 @@ protected void handleRetryCommitting() { long now = System.currentTimeMillis(); SessionHelper.forEach(committingSessions, committingSession -> { try { + // prevent repeated commit + if (committingSession.getStatus().equals(GlobalStatus.Committing) && !committingSession.isDeadSession()) { + //The function of this 'return' is 'continue'. + return; + } if (isRetryTimeout(now, MAX_COMMIT_RETRY_TIMEOUT.toMillis(), committingSession.getBeginTime())) { /** * Prevent thread safety issues diff --git a/server/src/main/java/io/seata/server/session/GlobalSession.java b/server/src/main/java/io/seata/server/session/GlobalSession.java index 02b8a93a62a..d673ced2619 100644 --- a/server/src/main/java/io/seata/server/session/GlobalSession.java +++ b/server/src/main/java/io/seata/server/session/GlobalSession.java @@ -157,10 +157,10 @@ public boolean isTimeout() { } /** - * prevent could not handle rollbacking transaction - * @return if true force roll back + * prevent could not handle committing and rollbacking transaction + * @return if true retry commit or roll back */ - public boolean isRollbackingDead() { + public boolean isDeadSession() { return (System.currentTimeMillis() - beginTime) > (2 * 6000); } diff --git a/server/src/main/java/io/seata/server/storage/db/session/DataBaseSessionManager.java b/server/src/main/java/io/seata/server/storage/db/session/DataBaseSessionManager.java index 5f3faf5c740..f05cf1f2808 100644 --- a/server/src/main/java/io/seata/server/storage/db/session/DataBaseSessionManager.java +++ b/server/src/main/java/io/seata/server/storage/db/session/DataBaseSessionManager.java @@ -168,7 +168,7 @@ public Collection allSessions() { if (SessionHolder.ASYNC_COMMITTING_SESSION_MANAGER_NAME.equalsIgnoreCase(taskName)) { return findGlobalSessions(new SessionCondition(GlobalStatus.AsyncCommitting)); } else if (SessionHolder.RETRY_COMMITTING_SESSION_MANAGER_NAME.equalsIgnoreCase(taskName)) { - return findGlobalSessions(new SessionCondition(new GlobalStatus[] {GlobalStatus.CommitRetrying})); + return findGlobalSessions(new SessionCondition(new GlobalStatus[] {GlobalStatus.CommitRetrying, GlobalStatus.Committing})); } else if (SessionHolder.RETRY_ROLLBACKING_SESSION_MANAGER_NAME.equalsIgnoreCase(taskName)) { return findGlobalSessions(new SessionCondition(new GlobalStatus[] {GlobalStatus.RollbackRetrying, GlobalStatus.Rollbacking, GlobalStatus.TimeoutRollbacking, GlobalStatus.TimeoutRollbackRetrying})); diff --git a/server/src/main/java/io/seata/server/storage/redis/session/RedisSessionManager.java b/server/src/main/java/io/seata/server/storage/redis/session/RedisSessionManager.java index 63bc5d9c819..ef66306037c 100644 --- a/server/src/main/java/io/seata/server/storage/redis/session/RedisSessionManager.java +++ b/server/src/main/java/io/seata/server/storage/redis/session/RedisSessionManager.java @@ -166,7 +166,7 @@ public Collection allSessions() { if (SessionHolder.ASYNC_COMMITTING_SESSION_MANAGER_NAME.equalsIgnoreCase(taskName)) { return findGlobalSessions(new SessionCondition(GlobalStatus.AsyncCommitting)); } else if (SessionHolder.RETRY_COMMITTING_SESSION_MANAGER_NAME.equalsIgnoreCase(taskName)) { - return findGlobalSessions(new SessionCondition(new GlobalStatus[] {GlobalStatus.CommitRetrying})); + return findGlobalSessions(new SessionCondition(new GlobalStatus[] {GlobalStatus.CommitRetrying, GlobalStatus.Committing})); } else if (SessionHolder.RETRY_ROLLBACKING_SESSION_MANAGER_NAME.equalsIgnoreCase(taskName)) { return findGlobalSessions(new SessionCondition(new GlobalStatus[] {GlobalStatus.RollbackRetrying, GlobalStatus.Rollbacking, GlobalStatus.TimeoutRollbacking, GlobalStatus.TimeoutRollbackRetrying})); From da31cf1eb16c8e17b7380a1a0365768b3e4b633c Mon Sep 17 00:00:00 2001 From: spilledyear Date: Sun, 14 Mar 2021 17:23:03 +0800 Subject: [PATCH 70/93] bugfix: DataSourceProxyHolder#putDataSource deadlock (#3568) --- .../datasource/DataSourceProxyHolder.java | 28 ++++++++++++++----- .../SeataAutoDataSourceProxyAdvice.java | 9 +++--- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/spring/src/main/java/io/seata/spring/annotation/datasource/DataSourceProxyHolder.java b/spring/src/main/java/io/seata/spring/annotation/datasource/DataSourceProxyHolder.java index e6993eca44f..ff89b2dd1ec 100644 --- a/spring/src/main/java/io/seata/spring/annotation/datasource/DataSourceProxyHolder.java +++ b/spring/src/main/java/io/seata/spring/annotation/datasource/DataSourceProxyHolder.java @@ -16,9 +16,9 @@ package io.seata.spring.annotation.datasource; import javax.sql.DataSource; -import java.util.concurrent.ConcurrentHashMap; +import java.util.HashMap; +import java.util.Map; -import io.seata.common.util.CollectionUtils; import io.seata.core.model.BranchType; import io.seata.rm.datasource.DataSourceProxy; import io.seata.rm.datasource.SeataDataSourceProxy; @@ -31,10 +31,10 @@ */ public class DataSourceProxyHolder { private static final int MAP_INITIAL_CAPACITY = 8; - private ConcurrentHashMap dataSourceProxyMap; + private Map dataSourceProxyMap; private DataSourceProxyHolder() { - dataSourceProxyMap = new ConcurrentHashMap<>(MAP_INITIAL_CAPACITY); + dataSourceProxyMap = new HashMap<>(MAP_INITIAL_CAPACITY); } /** @@ -71,7 +71,7 @@ public SeataDataSourceProxy putDataSource(DataSource dataSource, BranchType data //If it's an right proxy, return it directly. if (dataSourceProxyMode == dataSourceProxy.getBranchType()) { - return (SeataDataSourceProxy)dataSource; + return (SeataDataSourceProxy) dataSource; } //Get the original data source. @@ -79,7 +79,21 @@ public SeataDataSourceProxy putDataSource(DataSource dataSource, BranchType data } else { originalDataSource = dataSource; } - return CollectionUtils.computeIfAbsent(this.dataSourceProxyMap, originalDataSource, - BranchType.XA == dataSourceProxyMode ? DataSourceProxyXA::new : DataSourceProxy::new); + + SeataDataSourceProxy dsProxy = dataSourceProxyMap.get(originalDataSource); + if (dsProxy == null) { + synchronized (dataSourceProxyMap) { + dsProxy = dataSourceProxyMap.get(originalDataSource); + if (dsProxy == null) { + dsProxy = createDsProxyByMode(dataSourceProxyMode, originalDataSource); + dataSourceProxyMap.put(originalDataSource, dsProxy); + } + } + } + return dsProxy; + } + + private SeataDataSourceProxy createDsProxyByMode(BranchType mode, DataSource originDs) { + return BranchType.XA == mode ? new DataSourceProxyXA(originDs) : new DataSourceProxy(originDs); } } diff --git a/spring/src/main/java/io/seata/spring/annotation/datasource/SeataAutoDataSourceProxyAdvice.java b/spring/src/main/java/io/seata/spring/annotation/datasource/SeataAutoDataSourceProxyAdvice.java index 0e497874e07..bfddd97ff02 100644 --- a/spring/src/main/java/io/seata/spring/annotation/datasource/SeataAutoDataSourceProxyAdvice.java +++ b/spring/src/main/java/io/seata/spring/annotation/datasource/SeataAutoDataSourceProxyAdvice.java @@ -15,8 +15,8 @@ */ package io.seata.spring.annotation.datasource; -import java.lang.reflect.Method; import javax.sql.DataSource; +import java.lang.reflect.Method; import io.seata.core.context.RootContext; import io.seata.core.model.BranchType; @@ -53,15 +53,14 @@ public SeataAutoDataSourceProxyAdvice(String dataSourceProxyMode) { @Override public Object invoke(MethodInvocation invocation) throws Throwable { - if (!RootContext.requireGlobalLock() - && dataSourceProxyMode != RootContext.getBranchType()) { + if (!RootContext.requireGlobalLock() && dataSourceProxyMode != RootContext.getBranchType()) { return invocation.proceed(); } Method method = invocation.getMethod(); Object[] args = invocation.getArguments(); Method m = BeanUtils.findDeclaredMethod(dataSourceProxyClazz, method.getName(), method.getParameterTypes()); - if (m != null) { + if (m != null && DataSource.class.isAssignableFrom(method.getDeclaringClass())) { SeataDataSourceProxy dataSourceProxy = DataSourceProxyHolder.get().putDataSource((DataSource) invocation.getThis(), dataSourceProxyMode); return m.invoke(dataSourceProxy, args); } else { @@ -73,4 +72,6 @@ public Object invoke(MethodInvocation invocation) throws Throwable { public Class[] getInterfaces() { return new Class[]{SeataProxy.class}; } + + } From 1d888b9222c850a56f6a2c91c441dc8d12b36e89 Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Mon, 15 Mar 2021 09:42:20 +0800 Subject: [PATCH 71/93] optimize: make RETRY_DEAD_THRESHOLD bigger and configurable (#3551) --- changes/1.5.0.md | 4 +++- changes/en-us/1.5.0.md | 1 + .../src/main/java/io/seata/common/DefaultValues.java | 5 +++++ .../io/seata/core/constants/ConfigurationKeys.java | 5 +++++ .../java/io/seata/server/session/GlobalSession.java | 12 +++++++++++- server/src/main/resources/file.conf.example | 3 ++- 6 files changed, 27 insertions(+), 3 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 03d86df61fb..8a5d443e81c 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -78,7 +78,9 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3485](https://github.com/seata/seata/pull/3485)] 优化 ConfigurationFactory 中无用的try/catch - [[#3505](https://github.com/seata/seata/pull/3505)] 优化GlobalTransactionScanner类中无用的if判断 - [[#3549](https://github.com/seata/seata/pull/3549)] 统一不同表中的xid字段的长度 - + - [[#3551](https://github.com/seata/seata/pull/3551)] 调大RETRY_DEAD_THRESHOLD的值以及设置成可配置 + + ### test - [[#3381](https://github.com/seata/seata/pull/3381)] 添加 TmClient 的测试用例 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 9e2e0c20200..94ec78f2818 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -79,6 +79,7 @@ - [[#3485](https://github.com/seata/seata/pull/3485)] optimize useless codes in ConfigurationFactory - [[#3505](https://github.com/seata/seata/pull/3505)] optimize useless if judgments in the GlobalTransactionScanner class - [[#3549](https://github.com/seata/seata/pull/3549)] unified the length of xid in scripts + - [[#3551](https://github.com/seata/seata/pull/3551)] make RETRY_DEAD_THRESHOLD bigger and configurable diff --git a/common/src/main/java/io/seata/common/DefaultValues.java b/common/src/main/java/io/seata/common/DefaultValues.java index 1f0ac34163d..b960a885946 100644 --- a/common/src/main/java/io/seata/common/DefaultValues.java +++ b/common/src/main/java/io/seata/common/DefaultValues.java @@ -114,4 +114,9 @@ public interface DefaultValues { * the constant DEFAULT_CLIENT_UNDO_COMPRESS_THRESHOLD */ String DEFAULT_CLIENT_UNDO_COMPRESS_THRESHOLD = "64k"; + + /** + * the constant DEFAULT_RETRY_DEAD_THRESHOLD + */ + int DEFAULT_RETRY_DEAD_THRESHOLD = 2 * 60 * 1000 + 10 * 1000; } diff --git a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java index 1fb25291362..a2aac4d21c0 100644 --- a/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java +++ b/core/src/main/java/io/seata/core/constants/ConfigurationKeys.java @@ -405,6 +405,11 @@ public interface ConfigurationKeys { */ String ROLLBACK_RETRY_TIMEOUT_UNLOCK_ENABLE = SERVER_PREFIX + "rollbackRetryTimeoutUnlockEnable"; + /** + * the constant RETRY_DEAD_THRESHOLD + */ + String RETRY_DEAD_THRESHOLD = SERVER_PREFIX + "retryDeadThreshold"; + /** * The constant MIN_SERVER_POOL_SIZE. */ diff --git a/server/src/main/java/io/seata/server/session/GlobalSession.java b/server/src/main/java/io/seata/server/session/GlobalSession.java index d673ced2619..5ebd40f5cdd 100644 --- a/server/src/main/java/io/seata/server/session/GlobalSession.java +++ b/server/src/main/java/io/seata/server/session/GlobalSession.java @@ -25,8 +25,11 @@ import java.util.concurrent.locks.ReentrantLock; import io.seata.common.Constants; +import io.seata.common.DefaultValues; import io.seata.common.XID; import io.seata.common.util.StringUtils; +import io.seata.config.ConfigurationFactory; +import io.seata.core.constants.ConfigurationKeys; import io.seata.core.exception.GlobalTransactionException; import io.seata.core.exception.TransactionException; import io.seata.core.exception.TransactionExceptionCode; @@ -58,6 +61,13 @@ public class GlobalSession implements SessionLifecycle, SessionStorable { private static ThreadLocal byteBufferThreadLocal = ThreadLocal.withInitial(() -> ByteBuffer.allocate( MAX_GLOBAL_SESSION_SIZE)); + /** + * If the global session's status is (Rollbacking or Committing) and currentTime - createTime >= RETRY_DEAD_THRESHOLD + * then the tx will be remand as need to retry rollback + */ + private static final int RETRY_DEAD_THRESHOLD = ConfigurationFactory.getInstance() + .getInt(ConfigurationKeys.RETRY_DEAD_THRESHOLD, DefaultValues.DEFAULT_RETRY_DEAD_THRESHOLD); + private String xid; private long transactionId; @@ -161,7 +171,7 @@ public boolean isTimeout() { * @return if true retry commit or roll back */ public boolean isDeadSession() { - return (System.currentTimeMillis() - beginTime) > (2 * 6000); + return (System.currentTimeMillis() - beginTime) > RETRY_DEAD_THRESHOLD; } @Override diff --git a/server/src/main/resources/file.conf.example b/server/src/main/resources/file.conf.example index bf8c5a774dc..7eb189dcbef 100644 --- a/server/src/main/resources/file.conf.example +++ b/server/src/main/resources/file.conf.example @@ -91,6 +91,7 @@ server { maxCommitRetryTimeout = "-1" maxRollbackRetryTimeout = "-1" rollbackRetryTimeoutUnlockEnable = false + retryDeadThreshold = 130000 } ## metrics configuration, only used in server side @@ -100,4 +101,4 @@ metrics { # multi exporters use comma divided exporterList = "prometheus" exporterPrometheusPort = 9898 -} \ No newline at end of file +} From ad8aafafdfcbd77d60c0863b0ab79618c9a50a20 Mon Sep 17 00:00:00 2001 From: Rubbernecker <62733397+Rubbernecker@users.noreply.github.com> Date: Mon, 15 Mar 2021 09:54:51 +0800 Subject: [PATCH 72/93] feature:Support to obtain multiple configurations through a single node in zookeeper (#3317) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 97 ++++++++++++++ .../config/zk/ZookeeperConfiguration.java | 126 ++++++++++++++++-- script/client/conf/registry.conf | 1 + script/server/config/registry.conf | 1 + script/server/config/registry.properties | 1 + script/server/config/registry.yml | 5 +- .../config/ConfigZooKeeperProperties.java | 10 ++ server/src/main/resources/registry.conf | 1 + 9 files changed, 230 insertions(+), 13 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 8a5d443e81c..09855468b44 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -62,6 +62,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3359](https://github.com/seata/seata/pull/3359)] 删除未使用的测试用例 - [[#3397](https://github.com/seata/seata/pull/3397)] 添加更改记录文件夹 - [[#3303](https://github.com/seata/seata/pull/3303)] 支持从nacos单一dataId中读取所有配置 + - [[#3317](https://github.com/seata/seata/pull/3317)] 支持从zookeeper单一node中读取所有配置 - [[#3380](https://github.com/seata/seata/pull/3380)] 优化globalTransactionScanner监听器 - [[#3123](https://github.com/seata/seata/pull/3123)] seata-server的目录按版本号构建,且仅当profile为release-seata时才构建 - [[#3415](https://github.com/seata/seata/pull/3415)] 优化 maven clean 插件可清除 distribution 目录 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 94ec78f2818..d054bd46313 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -1,3 +1,100 @@ +### 1.5.0 + + [source](https://github.com/seata/seata/archive/v1.5.0.zip) | + [binary](https://github.com/seata/seata/releases/download/v1.5.0/seata-server-1.5.0.zip) + +
+ Release notes + + + ### Seata 1.5.0 + + Seata 1.5.0 Released. + + Seata is an easy-to-use, high-performance, open source distributed transaction solution. + + The version is updated as follows: + + ### feature: + + - [[#3172](https://github.com/seata/seata/pull/3172)] support rollback info compress + - [[#3372](https://github.com/seata/seata/pull/3372)] Saga support customize whether update last retry log + - [[#3411](https://github.com/seata/seata/pull/3411)] support seata server thread pool parameters configuration + - [[#3348](https://github.com/seata/seata/pull/3348)] support redis sentinel mode + - [[#2667](https://github.com/seata/seata/pull/2667)] support password decryption + - [[#3427](https://github.com/seata/seata/pull/3427)] add distributed lock interface + + + ### bugfix: + + - [[#3258](https://github.com/seata/seata/pull/3258)] fix AsyncWorker potential OOM problem + - [[#3293](https://github.com/seata/seata/pull/3293)] configuration cache get value cast exception + - [[#3241](https://github.com/seata/seata/pull/3241)] forbidden use order by or limit in multi sql + - [[#3406](https://github.com/seata/seata/pull/3406)] fix the value can not be push to nacos when special charset in config.txt + - [[#3418](https://github.com/seata/seata/pull/3418)] fix getGeneratedKeys may get history pk + - [[#3408](https://github.com/seata/seata/pull/3408)] run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null + - [[#3431](https://github.com/seata/seata/pull/3431)] fix property bean may not be initialized when reading configuration + - [[#3413](https://github.com/seata/seata/pull/3413)] fix the logic of rollback to savepoint and release to savepoint + - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` + + ### optimize: + + - [[#3383](https://github.com/seata/seata/pull/3383)] optimize StatementProxyTest unit test + - [[#3341](https://github.com/seata/seata/pull/3341)] get config from file system even without file: prefix + - [[#3385](https://github.com/seata/seata/pull/3385)] optimize github action + - [[#3175](https://github.com/seata/seata/pull/3175)] improve UUIDGenerator using "history time" version of snowflake algorithm + - [[#3291](https://github.com/seata/seata/pull/3291)] mysql jdbc connect param + - [[#3336](https://github.com/seata/seata/pull/3336)] get netty config property from system properties + - [[#3369](https://github.com/seata/seata/pull/3369)] add github action secrets env for dockerHub + - [[#3343](https://github.com/seata/seata/pull/3343)] Migrate CI provider from Travis CI to Github Actions + - [[#3365](https://github.com/seata/seata/pull/3365)] optimize ParameterParserTest test case failed + - [[#3359](https://github.com/seata/seata/pull/3359)] remove unused test case + - [[#3397](https://github.com/seata/seata/pull/3397)] add the change records folder + - [[#3303](https://github.com/seata/seata/pull/3303)] supports reading all configurations from a single Nacos dataId + - [[#3317](https://github.com/seata/seata/pull/3317)] supports reading all configurations from a single Zookeeper node + - [[#3380](https://github.com/seata/seata/pull/3380)] globalTransactionScanner listener optimize + - [[#3123](https://github.com/seata/seata/pull/3123)] The server directory is build by version, and build only when the profile is release-seata + - [[#3415](https://github.com/seata/seata/pull/3415)] optimize maven clean plugin to clear the distribution directory + - [[#3316](https://github.com/seata/seata/pull/3316)] optimize the property bean may not be initialized while reading config value + - [[#3420](https://github.com/seata/seata/pull/3420)] optimize enumerated classes and add unit tests + - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class + + + ### test + + - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient + + Thanks to these contributors for their code commits. Please report an unintended omission. + + - [slievrly](https://github.com/slievrly) + - [selfishlover](https://github.com/selfishlover) + - [l8189352](https://github.com/l81893521) + - [hoverruan](https://github.com/hoverruan ) + - [jsbxyyx](https://github.com/jsbxyyx) + - [caohdgege](https://github.com/caohdgege) + - [a364176773](https://github.com/a364176773) + - [anselleeyy](https://github.com/anselleeyy) + - [Ifdevil](https://github.com/Ifdevil) + - [Rubbernecker](https://github.com/Rubbernecker) + - [lvxianzheng](https://github.com/lvxianzheng) + - [lj2018110133](https://github.com/lj2018110133) + - [wangliang181230](https://github.com/wangliang181230) + - [xingfudeshi](https://github.com/xingfudeshi) + - [MentosL](https://github.com/MentosL) + - [lian88jian](https://github.com/lian88jian) + + Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. + + #### Link + + - **Seata:** https://github.com/seata/seata + - **Seata-Samples:** https://github.com/seata/seata-samples + - **Release:** https://github.com/seata/seata/releases + - **WebSite:** https://seata.io + +
+ +======= ### 1.5.0 [source](https://github.com/seata/seata/archive/v1.5.0.zip) | diff --git a/config/seata-config-zk/src/main/java/io/seata/config/zk/ZookeeperConfiguration.java b/config/seata-config-zk/src/main/java/io/seata/config/zk/ZookeeperConfiguration.java index e5909e9abcf..8e80dd42cff 100644 --- a/config/seata-config-zk/src/main/java/io/seata/config/zk/ZookeeperConfiguration.java +++ b/config/seata-config-zk/src/main/java/io/seata/config/zk/ZookeeperConfiguration.java @@ -15,8 +15,15 @@ */ package io.seata.config.zk; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; import java.lang.reflect.Constructor; +import java.nio.charset.StandardCharsets; +import java.util.Enumeration; import java.util.Map; +import java.util.Properties; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -65,18 +72,21 @@ public class ZookeeperConfiguration extends AbstractConfiguration { private static final String AUTH_USERNAME = "username"; private static final String AUTH_PASSWORD = "password"; private static final String SERIALIZER_KEY = "serializer"; + private static final String CONFIG_PATH_KEY = "nodePath"; private static final int THREAD_POOL_NUM = 1; private static final int DEFAULT_SESSION_TIMEOUT = 6000; private static final int DEFAULT_CONNECT_TIMEOUT = 2000; + private static final String DEFAULT_CONFIG_PATH = ROOT_PATH + "/seata.properties"; private static final String FILE_CONFIG_KEY_PREFIX = FILE_ROOT_CONFIG + FILE_CONFIG_SPLIT_CHAR + CONFIG_TYPE - + FILE_CONFIG_SPLIT_CHAR; + + FILE_CONFIG_SPLIT_CHAR; private static final ExecutorService CONFIG_EXECUTOR = new ThreadPoolExecutor(THREAD_POOL_NUM, THREAD_POOL_NUM, - Integer.MAX_VALUE, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), - new NamedThreadFactory("ZKConfigThread", THREAD_POOL_NUM)); + Integer.MAX_VALUE, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), + new NamedThreadFactory("ZKConfigThread", THREAD_POOL_NUM)); private static volatile ZkClient zkClient; private static final int MAP_INITIAL_CAPACITY = 8; - private ConcurrentMap> configListenersMap - = new ConcurrentHashMap<>(MAP_INITIAL_CAPACITY); + private static final ConcurrentMap> CONFIG_LISTENERS_MAP + = new ConcurrentHashMap<>(MAP_INITIAL_CAPACITY); + private static volatile Properties seataConfig = new Properties(); /** * Instantiates a new Zookeeper configuration. @@ -101,6 +111,7 @@ public ZookeeperConfiguration() { if (!zkClient.exists(ROOT_PATH)) { zkClient.createPersistent(ROOT_PATH, true); } + initSeataConfig(); } } @@ -115,8 +126,19 @@ public String getLatestConfig(String dataId, String defaultValue, long timeoutMi if (value != null) { return value; } + + value = seataConfig.getProperty(dataId); + if (value != null) { + return value; + } + FutureTask future = new FutureTask<>(() -> { String path = ROOT_PATH + ZK_PATH_SPLIT_CHAR + dataId; + if (!zkClient.exists(path)) { + LOGGER.warn("config {} is not existed, return defaultValue {} ", + dataId, defaultValue); + return defaultValue; + } String value1 = zkClient.readData(path); return StringUtils.isNullOrEmpty(value1) ? defaultValue : value1; }); @@ -132,6 +154,12 @@ public String getLatestConfig(String dataId, String defaultValue, long timeoutMi @Override public boolean putConfig(String dataId, String content, long timeoutMills) { + if (!seataConfig.isEmpty()) { + seataConfig.setProperty(dataId, content); + zkClient.writeData(getConfigPath(), getSeataConfigStr()); + return true; + } + FutureTask future = new FutureTask<>(() -> { String path = ROOT_PATH + ZK_PATH_SPLIT_CHAR + dataId; if (!zkClient.exists(path)) { @@ -158,6 +186,12 @@ public boolean putConfigIfAbsent(String dataId, String content, long timeoutMill @Override public boolean removeConfig(String dataId, long timeoutMills) { + if (!seataConfig.isEmpty()) { + seataConfig.remove(dataId); + zkClient.writeData(getConfigPath(), getSeataConfigStr()); + return true; + } + FutureTask future = new FutureTask<>(() -> { String path = ROOT_PATH + ZK_PATH_SPLIT_CHAR + dataId; return zkClient.delete(path); @@ -177,10 +211,18 @@ public void addConfigListener(String dataId, ConfigurationChangeListener listene if (StringUtils.isBlank(dataId) || listener == null) { return; } + + if (!seataConfig.isEmpty()) { + ZKListener zkListener = new ZKListener(dataId, listener); + CONFIG_LISTENERS_MAP.computeIfAbsent(dataId, key -> new ConcurrentHashMap<>()) + .put(listener, zkListener); + return; + } + String path = ROOT_PATH + ZK_PATH_SPLIT_CHAR + dataId; if (zkClient.exists(path)) { ZKListener zkListener = new ZKListener(path, listener); - configListenersMap.computeIfAbsent(dataId, key -> new ConcurrentHashMap<>()) + CONFIG_LISTENERS_MAP.computeIfAbsent(dataId, key -> new ConcurrentHashMap<>()) .put(listener, zkListener); zkClient.subscribeDataChanges(path, zkListener); } @@ -198,7 +240,7 @@ public void removeConfigListener(String dataId, ConfigurationChangeListener list for (ConfigurationChangeListener entry : configChangeListeners) { if (listener.equals(entry)) { ZKListener zkListener = null; - Map configListeners = configListenersMap.get(dataId); + Map configListeners = CONFIG_LISTENERS_MAP.get(dataId); if (configListeners != null) { zkListener = configListeners.get(listener); configListeners.remove(entry); @@ -215,7 +257,7 @@ public void removeConfigListener(String dataId, ConfigurationChangeListener list @Override public Set getConfigListeners(String dataId) { - ConcurrentMap configListeners = configListenersMap.get(dataId); + ConcurrentMap configListeners = CONFIG_LISTENERS_MAP.get(dataId); if (CollectionUtils.isNotEmpty(configListeners)) { return configListeners.keySet(); } else { @@ -223,6 +265,37 @@ public Set getConfigListeners(String dataId) { } } + private void initSeataConfig() { + String configPath = getConfigPath(); + String config = zkClient.readData(configPath, true); + if (StringUtils.isNotBlank(config)) { + try (Reader reader = new InputStreamReader(new ByteArrayInputStream(config.getBytes()), StandardCharsets.UTF_8)) { + seataConfig.load(reader); + } catch (IOException e) { + LOGGER.error("init config properties error", e); + } + ZKListener zkListener = new ZKListener(configPath, null); + zkClient.subscribeDataChanges(configPath, zkListener); + } + } + + private static String getConfigPath() { + return FILE_CONFIG.getConfig(FILE_CONFIG_KEY_PREFIX + CONFIG_PATH_KEY, DEFAULT_CONFIG_PATH); + } + + private static String getSeataConfigStr() { + StringBuilder sb = new StringBuilder(); + + Enumeration enumeration = seataConfig.propertyNames(); + while (enumeration.hasMoreElements()) { + String key = (String) enumeration.nextElement(); + String property = seataConfig.getProperty(key); + sb.append(key).append("=").append(property).append("\n"); + } + + return sb.toString(); + } + /** * The type Zk listener. */ @@ -244,16 +317,47 @@ public ZKListener(String path, ConfigurationChangeListener listener) { @Override public void handleDataChange(String s, Object o) { + if (s.equals(getConfigPath())) { + Properties seataConfigNew = new Properties(); + if (StringUtils.isNotBlank(o.toString())) { + try (Reader reader = new InputStreamReader(new ByteArrayInputStream(o.toString().getBytes()), StandardCharsets.UTF_8)) { + seataConfigNew.load(reader); + } catch (IOException e) { + LOGGER.error("load config properties error", e); + return; + } + } + + for (Map.Entry> entry : CONFIG_LISTENERS_MAP.entrySet()) { + String listenedDataId = entry.getKey(); + String propertyOld = seataConfig.getProperty(listenedDataId, ""); + String propertyNew = seataConfigNew.getProperty(listenedDataId, ""); + if (!propertyOld.equals(propertyNew)) { + ConfigurationChangeEvent event = new ConfigurationChangeEvent() + .setDataId(listenedDataId) + .setNewValue(propertyNew) + .setChangeType(ConfigurationChangeType.MODIFY); + + ConcurrentMap configListeners = entry.getValue(); + for (ConfigurationChangeListener configListener : configListeners.keySet()) { + configListener.onProcessEvent(event); + } + } + } + seataConfig = seataConfigNew; + + return; + } + ConfigurationChangeEvent event = new ConfigurationChangeEvent().setDataId(s).setNewValue(o.toString()) - .setChangeType(ConfigurationChangeType.MODIFY); + .setChangeType(ConfigurationChangeType.MODIFY); listener.onProcessEvent(event); - } @Override public void handleDataDeleted(String s) { ConfigurationChangeEvent event = new ConfigurationChangeEvent().setDataId(s).setChangeType( - ConfigurationChangeType.DELETE); + ConfigurationChangeType.DELETE); listener.onProcessEvent(event); } } diff --git a/script/client/conf/registry.conf b/script/client/conf/registry.conf index b97cea8ee6a..df552aa88fa 100644 --- a/script/client/conf/registry.conf +++ b/script/client/conf/registry.conf @@ -79,6 +79,7 @@ config { connectTimeout = 2000 username = "" password = "" + nodePath = "/seata/seata.properties" } etcd3 { serverAddr = "http://localhost:2379" diff --git a/script/server/config/registry.conf b/script/server/config/registry.conf index fefd59e6198..531f33e177c 100644 --- a/script/server/config/registry.conf +++ b/script/server/config/registry.conf @@ -82,6 +82,7 @@ config { connectTimeout = 2000 username = "" password = "" + nodePath = "/seata/seata.properties" } etcd3 { serverAddr = "http://localhost:2379" diff --git a/script/server/config/registry.properties b/script/server/config/registry.properties index b478f506199..dc3bc9a7b54 100644 --- a/script/server/config/registry.properties +++ b/script/server/config/registry.properties @@ -51,5 +51,6 @@ config.zk.sessionTimeout=6000 config.zk.connectTimeout=2000 config.zk.username= config.zk.password= +config.zk.nodePath=/seata/seata.properties config.etcd3.serverAddr=http://localhost:2379 config.file.name=file.properties diff --git a/script/server/config/registry.yml b/script/server/config/registry.yml index 45ca471a2c5..9497f1e657e 100644 --- a/script/server/config/registry.yml +++ b/script/server/config/registry.yml @@ -66,7 +66,7 @@ config: username: password: dataId: seataServer.properties - + consul: serverAddr: 127.0.0.1:8500 @@ -81,7 +81,8 @@ config: sessionTimeout: 6000 connectTimeout: 2000 username: - password: + password: + nodePath: /seata/seata.properties etcd3: serverAddr: http://localhost:2379 diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/config/ConfigZooKeeperProperties.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/config/ConfigZooKeeperProperties.java index bae2fac3975..299f4f4eebf 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/config/ConfigZooKeeperProperties.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/config/ConfigZooKeeperProperties.java @@ -31,6 +31,7 @@ public class ConfigZooKeeperProperties { private long connectTimeout = 2000L; private String username = ""; private String password = ""; + private String nodePath = "/seata/seata.properties"; public String getServerAddr() { return serverAddr; @@ -76,4 +77,13 @@ public ConfigZooKeeperProperties setPassword(String password) { this.password = password; return this; } + + public String getNodePath() { + return nodePath; + } + + public ConfigZooKeeperProperties setNodePath(String nodePath) { + this.nodePath = nodePath; + return this; + } } diff --git a/server/src/main/resources/registry.conf b/server/src/main/resources/registry.conf index 9b7938d0bcd..90e7eded127 100644 --- a/server/src/main/resources/registry.conf +++ b/server/src/main/resources/registry.conf @@ -87,6 +87,7 @@ config { connectTimeout = 2000 username = "" password = "" + nodePath = "/seata/seata.properties" } etcd3 { serverAddr = "http://localhost:2379" From 4a93b35dd49e95ab9fc0bea173788d19a89fbac6 Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Wed, 17 Mar 2021 15:30:25 +0800 Subject: [PATCH 73/93] optimize: optimize the get pks by auto when auto generated keys is false (#3544) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 3 +- .../exec/mysql/MySQLInsertExecutor.java | 57 ++++++++++++++++++- .../exec/MySQLInsertExecutorTest.java | 31 +++++++++- 4 files changed, 87 insertions(+), 5 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 09855468b44..b062dcad380 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -78,6 +78,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3236](https://github.com/seata/seata/pull/3236)] 优化执行解锁操作的条件,减少不必要的store操作。 - [[#3485](https://github.com/seata/seata/pull/3485)] 优化 ConfigurationFactory 中无用的try/catch - [[#3505](https://github.com/seata/seata/pull/3505)] 优化GlobalTransactionScanner类中无用的if判断 + - [[#3544](https://github.com/seata/seata/pull/3544)] 优化无法通过Statement#getGeneratedKeys时,只能获取到批量插入的第一个主键的问题 - [[#3549](https://github.com/seata/seata/pull/3549)] 统一不同表中的xid字段的长度 - [[#3551](https://github.com/seata/seata/pull/3551)] 调大RETRY_DEAD_THRESHOLD的值以及设置成可配置 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index d054bd46313..d939f0cd645 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -175,10 +175,9 @@ - [[#3236](https://github.com/seata/seata/pull/3236)] optimize the conditions for executing unlocking - [[#3485](https://github.com/seata/seata/pull/3485)] optimize useless codes in ConfigurationFactory - [[#3505](https://github.com/seata/seata/pull/3505)] optimize useless if judgments in the GlobalTransactionScanner class + - [[#3544](https://github.com/seata/seata/pull/3544)] optimize the get pks by auto when auto generated keys is false - [[#3549](https://github.com/seata/seata/pull/3549)] unified the length of xid in scripts - [[#3551](https://github.com/seata/seata/pull/3551)] make RETRY_DEAD_THRESHOLD bigger and configurable - - ### test diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/mysql/MySQLInsertExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/mysql/MySQLInsertExecutor.java index 03fc704eb42..9b73dff4a78 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/mysql/MySQLInsertExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/mysql/MySQLInsertExecutor.java @@ -32,6 +32,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; @@ -41,6 +42,7 @@ import java.util.HashSet; import java.util.Set; import java.util.ArrayList; +import java.util.concurrent.ConcurrentHashMap; /** * @author jsbxyyx @@ -55,6 +57,13 @@ public class MySQLInsertExecutor extends BaseInsertExecutor implements Defaultab */ public static final String ERR_SQL_STATE = "S1009"; + /** + * The cache of auto increment step of database + * the key is the db's resource id + * the value is the step + */ + public static final Map RESOURCE_ID_STEP_CACHE = new ConcurrentHashMap<>(8); + /** * Instantiates a new Abstract dml base executor. * @@ -127,8 +136,17 @@ public Map> getPkValuesByAuto() throws SQLException { // specify Statement.RETURN_GENERATED_KEYS to // Statement.executeUpdate() or Connection.prepareStatement(). if (ERR_SQL_STATE.equalsIgnoreCase(e.getSQLState())) { - LOGGER.warn("Fail to get auto-generated keys, use 'SELECT LAST_INSERT_ID()' instead. Be cautious, statement could be polluted. Recommend you set the statement to return generated keys."); - genKeys = statementProxy.getTargetStatement().executeQuery("SELECT LAST_INSERT_ID()"); + LOGGER.error("Fail to get auto-generated keys, use 'SELECT LAST_INSERT_ID()' instead. Be cautious, " + + "statement could be polluted. Recommend you set the statement to return generated keys."); + int updateCount = statementProxy.getUpdateCount(); + ResultSet firstId = genKeys = statementProxy.getTargetStatement().executeQuery("SELECT LAST_INSERT_ID()"); + + // If there is batch insert + // do auto increment base LAST_INSERT_ID and variable `auto_increment_increment` + if (updateCount > 1 && canAutoIncrement(pkMetaMap)) { + firstId.next(); + return autoGeneratePks(new BigDecimal(firstId.getString(1)), autoColumnName, updateCount); + } } else { throw e; } @@ -171,4 +189,39 @@ public List getPkValuesByDefault() throws SQLException { // mysql default keyword the logic not support. (sample: insert into test(id, name) values(default, 'xx')) throw new NotSupportYetException(); } + + protected Map> autoGeneratePks(BigDecimal cursor, String autoColumnName, Integer updateCount) throws SQLException { + BigDecimal step = BigDecimal.ONE; + String resourceId = statementProxy.getConnectionProxy().getDataSourceProxy().getResourceId(); + if (RESOURCE_ID_STEP_CACHE.containsKey(resourceId)) { + step = RESOURCE_ID_STEP_CACHE.get(resourceId); + } else { + ResultSet increment = statementProxy.getTargetStatement().executeQuery("SHOW VARIABLES LIKE 'auto_increment_increment'"); + + increment.next(); + step = new BigDecimal(increment.getString(2)); + RESOURCE_ID_STEP_CACHE.put(resourceId, step); + } + + List pkValues = new ArrayList<>(); + for (int i = 0; i < updateCount; i++) { + pkValues.add(cursor); + cursor = cursor.add(step); + } + + Map> pkValuesMap = new HashMap<>(1, 1.001f); + pkValuesMap.put(autoColumnName,pkValues); + return pkValuesMap; + } + + protected boolean canAutoIncrement(Map primaryKeyMap) { + if (primaryKeyMap.size() != 1) { + return false; + } + + for (ColumnMeta pk : primaryKeyMap.values()) { + return pk.isAutoincrement(); + } + return false; + } } diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MySQLInsertExecutorTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MySQLInsertExecutorTest.java index 32b9a562739..023fe03ab3d 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MySQLInsertExecutorTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MySQLInsertExecutorTest.java @@ -15,11 +15,17 @@ */ package io.seata.rm.datasource.exec; +import com.mysql.jdbc.ResultSetImpl; +import com.mysql.jdbc.util.ResultSetUtil; import io.seata.common.exception.ShouldNeverHappenException; +import io.seata.common.util.ReflectionUtil; import io.seata.rm.datasource.ConnectionProxy; +import io.seata.rm.datasource.DataSourceProxy; import io.seata.rm.datasource.PreparedStatementProxy; import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.exec.mysql.MySQLInsertExecutor; +import io.seata.rm.datasource.mock.MockDataSource; +import io.seata.rm.datasource.mock.MockResultSet; import io.seata.rm.datasource.sql.struct.ColumnMeta; import io.seata.rm.datasource.sql.struct.Row; import io.seata.rm.datasource.sql.struct.TableMeta; @@ -35,6 +41,9 @@ import org.junit.jupiter.api.Test; import org.mockito.Mockito; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.math.BigDecimal; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -73,12 +82,18 @@ public class MySQLInsertExecutorTest { private HashMap pkIndexMap; @BeforeEach - public void init() { + public void init() throws SQLException { ConnectionProxy connectionProxy = mock(ConnectionProxy.class); when(connectionProxy.getDbType()).thenReturn(JdbcConstants.MYSQL); + when(connectionProxy.getDataSourceProxy()).thenReturn(new DataSourceProxy(new MockDataSource())); statementProxy = mock(PreparedStatementProxy.class); when(statementProxy.getConnectionProxy()).thenReturn(connectionProxy); + when(statementProxy.getTargetStatement()).thenReturn(statementProxy); + + MockResultSet resultSet = new MockResultSet(statementProxy); + resultSet.mockResultSet(Arrays.asList("Variable_name", "Value"), new Object[][]{{"auto_increment_increment", "1"}}); + when(statementProxy.getTargetStatement().executeQuery("SHOW VARIABLES LIKE 'auto_increment_increment'")).thenReturn(resultSet); StatementCallback statementCallback = mock(StatementCallback.class); sqlInsertRecognizer = mock(SQLInsertRecognizer.class); @@ -565,6 +580,20 @@ public void test_checkPkValues() { Assertions.assertFalse(insertExecutor.checkPkValuesForSinglePk(pkValues, false)); } + @Test + public void test_autoGeneratePks() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + Method method = MySQLInsertExecutor.class.getDeclaredMethod("autoGeneratePks", new Class[]{BigDecimal.class, String.class, Integer.class}); + method.setAccessible(true); + Object resp = method.invoke(insertExecutor, BigDecimal.ONE, "ID", 3); + + Assertions.assertNotNull(resp); + Assertions.assertTrue(resp instanceof Map); + + Map map = (Map) resp; + Assertions.assertEquals(map.size(), 1); + Assertions.assertEquals(map.get("ID").size(), 3); + } + private List mockInsertColumns() { List columns = new ArrayList<>(); columns.add(ID_COLUMN); From 3f924ea7debf45e2d1c1ae92e7ac0ea4fb981380 Mon Sep 17 00:00:00 2001 From: xingfudeshi Date: Thu, 18 Mar 2021 21:16:05 +0800 Subject: [PATCH 74/93] bugfix:fix UnfinishedStubbingException of UT (#3578) --- .../io/seata/rm/datasource/exec/MySQLInsertExecutorTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MySQLInsertExecutorTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MySQLInsertExecutorTest.java index 023fe03ab3d..9f28a7bca54 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MySQLInsertExecutorTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MySQLInsertExecutorTest.java @@ -85,7 +85,8 @@ public class MySQLInsertExecutorTest { public void init() throws SQLException { ConnectionProxy connectionProxy = mock(ConnectionProxy.class); when(connectionProxy.getDbType()).thenReturn(JdbcConstants.MYSQL); - when(connectionProxy.getDataSourceProxy()).thenReturn(new DataSourceProxy(new MockDataSource())); + DataSourceProxy dataSourceProxy = new DataSourceProxy(new MockDataSource()); + when(connectionProxy.getDataSourceProxy()).thenReturn(dataSourceProxy); statementProxy = mock(PreparedStatementProxy.class); when(statementProxy.getConnectionProxy()).thenReturn(connectionProxy); From d670e722cea2f2afbfac627fb2e5bcb252d90405 Mon Sep 17 00:00:00 2001 From: sun lg Date: Thu, 18 Mar 2021 21:38:30 +0800 Subject: [PATCH 75/93] docs: fix typo (#3574) --- core/src/main/java/io/seata/core/event/EventBus.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/io/seata/core/event/EventBus.java b/core/src/main/java/io/seata/core/event/EventBus.java index ed0327c4f13..8fb8e7df0fa 100644 --- a/core/src/main/java/io/seata/core/event/EventBus.java +++ b/core/src/main/java/io/seata/core/event/EventBus.java @@ -16,7 +16,7 @@ package io.seata.core.event; /** - * The interface fot event bus. + * The interface for event bus. * * @author zhengyangyong */ From 08d05669c372b8bd1fb03fb95bb3d59f7f7902d7 Mon Sep 17 00:00:00 2001 From: Angus Yang <1994101600@qq.com> Date: Thu, 18 Mar 2021 21:52:53 +0800 Subject: [PATCH 76/93] docs: README.md designer directory path (#3573) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + saga/seata-saga-statemachine-designer/README.md | 4 ++-- saga/seata-saga-statemachine-designer/README.zh-CN.md | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index b062dcad380..3fdd77445f7 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -47,6 +47,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3560](https://github.com/seata/seata/pull/3560)] 修复 Committing 状态的事务没有时间阈值问题 - [[#3555](https://github.com/seata/seata/pull/3555)] 通过setBytes代替setBlob,避免高版本jdbc驱动工作异常 - [[#3540](https://github.com/seata/seata/pull/3540)] 修复server发布打包时缺失文件 + - [[#3573](https://github.com/seata/seata/pull/3573)] 修复 README.md 文件中设计器路径错误 ### optimize: diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index d939f0cd645..adca28c3a78 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -145,6 +145,7 @@ - [[#3560](https://github.com/seata/seata/pull/3560)] set time threshold for transactions in committing state - [[#3555](https://github.com/seata/seata/pull/3555)] do not call setBlob to invalid the jdbc exception - [[#3540](https://github.com/seata/seata/pull/3540)] fix server distribution missing files + - [[#3573](https://github.com/seata/seata/pull/3573)] fix designer directory path in README.md ### optimize: diff --git a/saga/seata-saga-statemachine-designer/README.md b/saga/seata-saga-statemachine-designer/README.md index a132a3f402a..e5530b54756 100644 --- a/saga/seata-saga-statemachine-designer/README.md +++ b/saga/seata-saga-statemachine-designer/README.md @@ -8,7 +8,7 @@ A visual graph Seata Saga StateMachine Designer based on [GGEditor](https://gith ```sh $ git clone https://github.com/seata/seata.git -$ cd saga/saga-statemachine-designer +$ cd saga/seata-saga-statemachine-designer $ npm install $ npm start ``` @@ -22,4 +22,4 @@ $ npm build copy 'index.html' and 'dist' directory to static html directory of web server ## Usage -To understand the state types of the state machine, please see [document of Saga](http://seata.io/zh-cn/docs/user/saga.html). After using the designer to complete the design of the state machine, you can click the 'Json View' button on the toolbar to switch to the Json view, and save the Json to the project of your own application. Although the Json generated by the designer is different from the standard Json of the Saga state machine (because the json generated by the designer has layout information), the state machine can be directly loaded and it will be converted into the Json of the Saga state machine standard. \ No newline at end of file +To understand the state types of the state machine, please see [document of Saga](http://seata.io/zh-cn/docs/user/saga.html). After using the designer to complete the design of the state machine, you can click the 'Json View' button on the toolbar to switch to the Json view, and save the Json to the project of your own application. Although the Json generated by the designer is different from the standard Json of the Saga state machine (because the json generated by the designer has layout information), the state machine can be directly loaded and it will be converted into the Json of the Saga state machine standard. diff --git a/saga/seata-saga-statemachine-designer/README.zh-CN.md b/saga/seata-saga-statemachine-designer/README.zh-CN.md index 355a33cd3e5..e2c2cf60144 100644 --- a/saga/seata-saga-statemachine-designer/README.zh-CN.md +++ b/saga/seata-saga-statemachine-designer/README.zh-CN.md @@ -8,7 +8,7 @@ Seata Saga 状态机可视化图形设计器, 基于 [GGEditor](https://github.c ```sh $ git clone https://github.com/seata/seata.git -$ cd saga/saga-statemachine-designer +$ cd saga/seata-saga-statemachine-designer $ npm install $ npm start ``` @@ -22,4 +22,4 @@ $ npm build 然后将index.html和dist目录拷贝到web server的静态页面目录下 ## 使用 -了解状态机的种状态类型,请看Saga的[文档](http://seata.io/zh-cn/docs/user/saga.html)。 通过设计器完成设计后可以点击工具栏的'Json View'按钮切换到Json视图,将Json拷贝保存到自己应用的工程里。虽然设计器生成的Json与Saga标准的Json有所差别(因为设计器生成的json带有布局信息),但状态机可以直接加载,它会将其转化成Saga状态机标准的Json。 \ No newline at end of file +了解状态机的种状态类型,请看Saga的[文档](http://seata.io/zh-cn/docs/user/saga.html)。 通过设计器完成设计后可以点击工具栏的'Json View'按钮切换到Json视图,将Json拷贝保存到自己应用的工程里。虽然设计器生成的Json与Saga标准的Json有所差别(因为设计器生成的json带有布局信息),但状态机可以直接加载,它会将其转化成Saga状态机标准的Json。 From 6400385a93fefb2929e2e2f06c0334839f5eaa56 Mon Sep 17 00:00:00 2001 From: drgnchan <40224023+drgnchan@users.noreply.github.com> Date: Thu, 18 Mar 2021 09:34:47 -0500 Subject: [PATCH 77/93] test:add test case for StringFormatUtils (#3579) --- .../common/util/StringFormatUtilsTest.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 common/src/test/java/io/seata/common/util/StringFormatUtilsTest.java diff --git a/common/src/test/java/io/seata/common/util/StringFormatUtilsTest.java b/common/src/test/java/io/seata/common/util/StringFormatUtilsTest.java new file mode 100644 index 00000000000..276d1dd9523 --- /dev/null +++ b/common/src/test/java/io/seata/common/util/StringFormatUtilsTest.java @@ -0,0 +1,35 @@ +package io.seata.common.util; + +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; + +class StringFormatUtilsTest { + + @Test + void camelToUnderline() { + assertThat(StringFormatUtils.camelToUnderline(null)).isEqualTo(""); + assertThat(StringFormatUtils.camelToUnderline(" ")).isEqualTo(""); + assertThat(StringFormatUtils.camelToUnderline("abcDefGh")).isEqualTo("abc_def_gh"); + } + + @Test + void underlineToCamel() { + assertThat(StringFormatUtils.underlineToCamel(null)).isEqualTo(""); + assertThat(StringFormatUtils.underlineToCamel(" ")).isEqualTo(""); + assertThat(StringFormatUtils.underlineToCamel("abc_def_gh")).isEqualTo("abcDefGh"); + } + + @Test + void minusToCamel() { + assertThat(StringFormatUtils.minusToCamel(null)).isEqualTo(""); + assertThat(StringFormatUtils.minusToCamel(" ")).isEqualTo(""); + assertThat(StringFormatUtils.minusToCamel("abc-def-gh")).isEqualTo("abcDefGh"); + } + + @Test + void dotToCamel() { + assertThat(StringFormatUtils.dotToCamel(null)).isEqualTo(""); + assertThat(StringFormatUtils.dotToCamel(" ")).isEqualTo(""); + assertThat(StringFormatUtils.dotToCamel("abc.def.gh")).isEqualTo("abcDefGh"); + } +} \ No newline at end of file From d28274d4f29ce58d62aac37d87296446feb5ae4b Mon Sep 17 00:00:00 2001 From: Karen <364173778@qq.com> Date: Fri, 19 Mar 2021 10:48:41 +0800 Subject: [PATCH 78/93] optimize: refactor loadBalance config from registry.conf to file.conf. (#3248) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + .../src/main/resources/registry.conf | 2 - .../src/test/resources/registry.conf | 2 - .../ConsistentHashLoadBalance.java | 14 +++-- .../loadbalance/LoadBalanceFactory.java | 12 ++-- .../config/ConfigurationFactoryTest.java | 13 +++++ .../loadbalance/LoadBalanceTest.java | 3 +- .../src/test/resources/file.conf | 23 ++++++++ script/client/conf/file.conf | 4 ++ script/client/conf/registry.conf | 2 - script/client/spring/application.properties | 7 +-- script/client/spring/application.yml | 5 +- script/server/config/registry.conf | 2 - script/server/config/registry.properties | 2 - script/server/config/registry.yml | 2 - .../SeataPropertiesAutoConfiguration.java | 3 + .../boot/autoconfigure/StarterConstants.java | 1 + .../registry/LoadBalanceProperties.java | 58 +++++++++++++++++++ .../registry/RegistryProperties.java | 27 --------- ...itional-spring-configuration-metadata.json | 8 +-- .../boot/autoconfigure/PropertiesTest.java | 10 +++- .../src/test/resources/registry.conf | 2 - server/src/main/resources/registry.conf | 2 - test/src/test/resources/file.conf | 4 ++ test/src/test/resources/registry.conf | 2 - 26 files changed, 144 insertions(+), 68 deletions(-) create mode 100644 discovery/seata-discovery-core/src/test/resources/file.conf create mode 100644 seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/LoadBalanceProperties.java diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 3fdd77445f7..c484bbfc9cd 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -72,6 +72,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3533](https://github.com/seata/seata/pull/3533)] 添加获取当前对应事务角色接口 - [[#3436](https://github.com/seata/seata/pull/3436)] 优化SQLType类中的错别字 - [[#3439](https://github.com/seata/seata/pull/3439)] 调整springApplicationContextProvider的顺序以使得他可以在xml的bean之前被调用 + - [[#3248](https://github.com/seata/seata/pull/3248)] 优化负载均衡配置迁移到client节点下 - [[#3156](https://github.com/seata/seata/pull/3156)] 优化SpringProxyUtils.findTargetClass的逻辑 - [[#3441](https://github.com/seata/seata/pull/3441)] 优化starter的自动配置处理 - [[#3466](https://github.com/seata/seata/pull/3466)] 优化ExecuteTemplateXA类中判断XA不是最终状态的比较方式 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index adca28c3a78..056305e0db9 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -169,6 +169,7 @@ - [[#3533](https://github.com/seata/seata/pull/3533)] added interface to get current transaction role - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class - [[#3439](https://github.com/seata/seata/pull/3439)] adjust the order of springApplicationContextProvider + - [[#3248](https://github.com/seata/seata/pull/3248)] optimize the config of load-balance migration to belong the client node - [[#3156](https://github.com/seata/seata/pull/3156)] optimize the logic of SpringProxyUtils.findTargetClass - [[#3441](https://github.com/seata/seata/pull/3441)] optimize the auto-configuration processing of starter - [[#3466](https://github.com/seata/seata/pull/3466)] optimize the comparison in the ExecuteTemplateXa class to determine that XA is not the final state diff --git a/config/seata-config-core/src/main/resources/registry.conf b/config/seata-config-core/src/main/resources/registry.conf index 0c963b93fe0..b371c46d153 100644 --- a/config/seata-config-core/src/main/resources/registry.conf +++ b/config/seata-config-core/src/main/resources/registry.conf @@ -1,8 +1,6 @@ registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "file" - loadBalance = "RandomLoadBalance" - loadBalanceVirtualNodes = 10 nacos { application = "seata-server" diff --git a/config/seata-config-core/src/test/resources/registry.conf b/config/seata-config-core/src/test/resources/registry.conf index e06455c0684..0a9bfecd757 100644 --- a/config/seata-config-core/src/test/resources/registry.conf +++ b/config/seata-config-core/src/test/resources/registry.conf @@ -1,8 +1,6 @@ registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "file" - loadBalance = "RandomLoadBalance" - loadBalanceVirtualNodes = 10 nacos { serverAddr = "localhost" diff --git a/discovery/seata-discovery-core/src/main/java/io/seata/discovery/loadbalance/ConsistentHashLoadBalance.java b/discovery/seata-discovery-core/src/main/java/io/seata/discovery/loadbalance/ConsistentHashLoadBalance.java index 3dd8dfab0ab..28b24619eb1 100644 --- a/discovery/seata-discovery-core/src/main/java/io/seata/discovery/loadbalance/ConsistentHashLoadBalance.java +++ b/discovery/seata-discovery-core/src/main/java/io/seata/discovery/loadbalance/ConsistentHashLoadBalance.java @@ -24,11 +24,9 @@ import io.seata.common.loader.LoadLevel; import io.seata.config.ConfigurationFactory; -import static io.seata.config.ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR; -import static io.seata.config.ConfigurationKeys.FILE_ROOT_REGISTRY; import static io.seata.common.DefaultValues.VIRTUAL_NODES_DEFAULT; import static io.seata.discovery.loadbalance.LoadBalanceFactory.CONSISTENT_HASH_LOAD_BALANCE; - +import static io.seata.discovery.loadbalance.LoadBalanceFactory.LOAD_BALANCE_PREFIX; /** * The type consistent hash load balance. * @@ -37,8 +35,14 @@ @LoadLevel(name = CONSISTENT_HASH_LOAD_BALANCE) public class ConsistentHashLoadBalance extends AbstractLoadBalance { - private static final String VIRTUAL_NODES = FILE_ROOT_REGISTRY + FILE_CONFIG_SPLIT_CHAR + "loadBalanceVirtualNodes"; - private static final int VIRTUAL_NODES_NUM = ConfigurationFactory.CURRENT_FILE_INSTANCE.getInt(VIRTUAL_NODES, VIRTUAL_NODES_DEFAULT); + /** + * The constant LOAD_BALANCE_CONSISTENT_HASH_VISUAL_NODES. + */ + public static final String LOAD_BALANCE_CONSISTENT_HASH_VISUAL_NODES = LOAD_BALANCE_PREFIX + "visualNodes"; + /** + * The constant VIRTUAL_NODES_NUM. + */ + private static final int VIRTUAL_NODES_NUM = ConfigurationFactory.getInstance().getInt(LOAD_BALANCE_CONSISTENT_HASH_VISUAL_NODES, VIRTUAL_NODES_DEFAULT); @Override protected T doSelect(List invokers, String xid) { diff --git a/discovery/seata-discovery-core/src/main/java/io/seata/discovery/loadbalance/LoadBalanceFactory.java b/discovery/seata-discovery-core/src/main/java/io/seata/discovery/loadbalance/LoadBalanceFactory.java index 173ae82a747..d9489c32fa1 100644 --- a/discovery/seata-discovery-core/src/main/java/io/seata/discovery/loadbalance/LoadBalanceFactory.java +++ b/discovery/seata-discovery-core/src/main/java/io/seata/discovery/loadbalance/LoadBalanceFactory.java @@ -18,8 +18,6 @@ import io.seata.common.loader.EnhancedServiceLoader; import io.seata.config.ConfigurationFactory; -import static io.seata.config.ConfigurationKeys.FILE_CONFIG_SPLIT_CHAR; -import static io.seata.config.ConfigurationKeys.FILE_ROOT_REGISTRY; import static io.seata.common.DefaultValues.DEFAULT_LOAD_BALANCE; /** @@ -29,10 +27,13 @@ */ public class LoadBalanceFactory { + private static final String CLIENT_PREFIX = "client."; /** - * The constant LOAD_BALANCE. + * The constant LOAD_BALANCE_PREFIX. */ - private static final String LOAD_BALANCE = FILE_ROOT_REGISTRY + FILE_CONFIG_SPLIT_CHAR + "loadBalance"; + public static final String LOAD_BALANCE_PREFIX = CLIENT_PREFIX + "loadBalance."; + + public static final String LOAD_BALANCE_TYPE = LOAD_BALANCE_PREFIX + "type"; public static final String RANDOM_LOAD_BALANCE = DEFAULT_LOAD_BALANCE; @@ -49,6 +50,7 @@ public class LoadBalanceFactory { * @return the instance */ public static LoadBalance getInstance() { - return EnhancedServiceLoader.load(LoadBalance.class, ConfigurationFactory.CURRENT_FILE_INSTANCE.getConfig(LOAD_BALANCE, DEFAULT_LOAD_BALANCE)); + String config = ConfigurationFactory.getInstance().getConfig(LOAD_BALANCE_TYPE, DEFAULT_LOAD_BALANCE); + return EnhancedServiceLoader.load(LoadBalance.class, config); } } diff --git a/discovery/seata-discovery-core/src/test/java/io/seata/config/ConfigurationFactoryTest.java b/discovery/seata-discovery-core/src/test/java/io/seata/config/ConfigurationFactoryTest.java index 33c61e83188..2e26179202f 100644 --- a/discovery/seata-discovery-core/src/test/java/io/seata/config/ConfigurationFactoryTest.java +++ b/discovery/seata-discovery-core/src/test/java/io/seata/config/ConfigurationFactoryTest.java @@ -15,6 +15,8 @@ */ package io.seata.config; +import io.seata.discovery.loadbalance.ConsistentHashLoadBalance; +import io.seata.discovery.loadbalance.LoadBalanceFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -29,4 +31,15 @@ void getInstance() { // check singleton Assertions.assertEquals(configuration.getClass().getName(), ConfigurationFactory.getInstance().getClass().getName()); } + + + @Test + void getLoadBalance() { + Configuration configuration = ConfigurationFactory.getInstance(); + String loadBalanceType = configuration.getConfig(LoadBalanceFactory.LOAD_BALANCE_TYPE); + int visualNode = configuration.getInt(ConsistentHashLoadBalance.LOAD_BALANCE_CONSISTENT_HASH_VISUAL_NODES); + Assertions.assertEquals("RandomLoadBalance", loadBalanceType); + Assertions.assertEquals(10,visualNode); + } + } \ No newline at end of file diff --git a/discovery/seata-discovery-core/src/test/java/io/seata/discovery/loadbalance/LoadBalanceTest.java b/discovery/seata-discovery-core/src/test/java/io/seata/discovery/loadbalance/LoadBalanceTest.java index 44248fb73cc..41a88e3bfea 100644 --- a/discovery/seata-discovery-core/src/test/java/io/seata/discovery/loadbalance/LoadBalanceTest.java +++ b/discovery/seata-discovery-core/src/test/java/io/seata/discovery/loadbalance/LoadBalanceTest.java @@ -77,7 +77,8 @@ public void testRoundRobinLoadBalance_select(List addresses) public void testConsistentHashLoadBalance_select(List addresses) { int runs = 10000; int selected = 0; - Map counter = getSelectedCounter(runs, addresses, new ConsistentHashLoadBalance()); + ConsistentHashLoadBalance loadBalance = new ConsistentHashLoadBalance(); + Map counter = getSelectedCounter(runs, addresses, loadBalance); for (InetSocketAddress address : counter.keySet()) { if (counter.get(address).get() > 0) { selected++; diff --git a/discovery/seata-discovery-core/src/test/resources/file.conf b/discovery/seata-discovery-core/src/test/resources/file.conf new file mode 100644 index 00000000000..12e134002ba --- /dev/null +++ b/discovery/seata-discovery-core/src/test/resources/file.conf @@ -0,0 +1,23 @@ +# +# Copyright 1999-2019 Seata.io Group. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +#loadBalance config +client { + loadBalance { + type = "RandomLoadBalance" + visualNodes = 10 + } +} \ No newline at end of file diff --git a/script/client/conf/file.conf b/script/client/conf/file.conf index 96883c6fdbe..22496b30e94 100644 --- a/script/client/conf/file.conf +++ b/script/client/conf/file.conf @@ -78,6 +78,10 @@ client { threshold = 64k } } + loadBalance { + type = "RandomLoadBalance" + virtualNodes = 10 + } } log { exceptionRate = 100 diff --git a/script/client/conf/registry.conf b/script/client/conf/registry.conf index df552aa88fa..26121bcfd5c 100644 --- a/script/client/conf/registry.conf +++ b/script/client/conf/registry.conf @@ -1,8 +1,6 @@ registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa、custom type = "file" - loadBalance = "RandomLoadBalance" - loadBalanceVirtualNodes = 10 nacos { application = "seata-server" diff --git a/script/client/spring/application.properties b/script/client/spring/application.properties index 35124df830e..9e16dd58ed4 100755 --- a/script/client/spring/application.properties +++ b/script/client/spring/application.properties @@ -45,6 +45,8 @@ seata.client.undo.log-table=undo_log seata.client.undo.compress.enable=true seata.client.undo.compress.type=zip seata.client.undo.compress.threshold=64k +seata.client.load-balance.type=RandomLoadBalance +seata.client.load-balance.virtual-nodes=10 seata.log.exception-rate=100 seata.service.vgroup-mapping.my_test_tx_group=default seata.service.grouplist.default=127.0.0.1:8091 @@ -127,7 +129,4 @@ seata.registry.zk.connect-timeout=2000 seata.registry.zk.username= seata.registry.zk.password= -seata.registry.custom.name= - -seata.registry.load-balance=RandomLoadBalance -seata.registry.load-balance-virtual-nodes=10 \ No newline at end of file +seata.registry.custom.name= \ No newline at end of file diff --git a/script/client/spring/application.yml b/script/client/spring/application.yml index be468e565e4..e9ff6ecd3ad 100755 --- a/script/client/spring/application.yml +++ b/script/client/spring/application.yml @@ -36,6 +36,9 @@ seata: enable: true type: zip threshold: 64k + load-balance: + type: RandomLoadBalance + virtual-nodes: 10 service: vgroup-mapping: my_test_tx_group: default @@ -89,8 +92,6 @@ seata: name: "" registry: type: file - load-balance: RandomLoadBalance - load-balance-virtual-nodes: 10 file: name: file.conf consul: diff --git a/script/server/config/registry.conf b/script/server/config/registry.conf index 531f33e177c..1cb9b5c8623 100644 --- a/script/server/config/registry.conf +++ b/script/server/config/registry.conf @@ -1,8 +1,6 @@ registry { # file,nacos,eureka,redis,zk,consul,etcd3,sofa type = "file" - loadBalance = "RandomLoadBalance" - loadBalanceVirtualNodes = 10 nacos { application = "seata-server" diff --git a/script/server/config/registry.properties b/script/server/config/registry.properties index dc3bc9a7b54..2de211b33b8 100644 --- a/script/server/config/registry.properties +++ b/script/server/config/registry.properties @@ -1,6 +1,4 @@ registry.type=file -registry.loadBalance=RandomLoadBalance -registry.loadBalanceVirtualNodes=10 registry.nacos.application=seata-server registry.nacos.serverAddr=127.0.0.1:8848 registry.nacos.group=SEATA_GROUP diff --git a/script/server/config/registry.yml b/script/server/config/registry.yml index 9497f1e657e..915f282f7e9 100644 --- a/script/server/config/registry.yml +++ b/script/server/config/registry.yml @@ -1,8 +1,6 @@ registry: # file,nacos,eureka,redis,zk,consul,etcd3,sofa type: file - loadBalance: RandomLoadBalance - loadBalanceVirtualNodes: 10 nacos: application: seata-server diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataPropertiesAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataPropertiesAutoConfiguration.java index d830543503a..ac8d7a08851 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataPropertiesAutoConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataPropertiesAutoConfiguration.java @@ -44,6 +44,7 @@ import io.seata.spring.boot.autoconfigure.properties.registry.RegistryRedisProperties; import io.seata.spring.boot.autoconfigure.properties.registry.RegistrySofaProperties; import io.seata.spring.boot.autoconfigure.properties.registry.RegistryZooKeeperProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.LoadBalanceProperties; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -80,6 +81,7 @@ import static io.seata.spring.boot.autoconfigure.StarterConstants.THREAD_FACTORY_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.TRANSPORT_PREFIX; import static io.seata.spring.boot.autoconfigure.StarterConstants.UNDO_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.LOAD_BALANCE_PREFIX; /** * The type Seata properties auto configuration @@ -107,6 +109,7 @@ public class SeataPropertiesAutoConfiguration { PROPERTY_BEAN_MAP.put(CONFIG_PREFIX, ConfigProperties.class); PROPERTY_BEAN_MAP.put(CONFIG_FILE_PREFIX, ConfigFileProperties.class); PROPERTY_BEAN_MAP.put(REGISTRY_PREFIX, RegistryProperties.class); + PROPERTY_BEAN_MAP.put(LOAD_BALANCE_PREFIX, LoadBalanceProperties.class); PROPERTY_BEAN_MAP.put(CONFIG_NACOS_PREFIX, ConfigNacosProperties.class); PROPERTY_BEAN_MAP.put(CONFIG_CONSUL_PREFIX, ConfigConsulProperties.class); diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java index 3ef305f23d1..2ce2a16d0f3 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java @@ -33,6 +33,7 @@ public interface StarterConstants { String CLIENT_TM_PREFIX = CLIENT_PREFIX + ".tm"; String LOCK_PREFIX = CLIENT_RM_PREFIX + ".lock"; String UNDO_PREFIX = CLIENT_PREFIX + ".undo"; + String LOAD_BALANCE_PREFIX = CLIENT_PREFIX + ".loadBalance"; String LOG_PREFIX = SEATA_PREFIX + ".log"; String COMPRESS_PREFIX = UNDO_PREFIX + ".compress"; diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/LoadBalanceProperties.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/LoadBalanceProperties.java new file mode 100644 index 00000000000..e5d46ec1a6b --- /dev/null +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/LoadBalanceProperties.java @@ -0,0 +1,58 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.spring.boot.autoconfigure.properties.registry; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import static io.seata.common.DefaultValues.DEFAULT_LOAD_BALANCE; +import static io.seata.common.DefaultValues.VIRTUAL_NODES_DEFAULT; +import static io.seata.spring.boot.autoconfigure.StarterConstants.LOAD_BALANCE_PREFIX; + +/** + * @author ls9527 + */ +@Component +@ConfigurationProperties(prefix = LOAD_BALANCE_PREFIX) +public class LoadBalanceProperties { + /** + * the load balance + */ + private String type = DEFAULT_LOAD_BALANCE; + /** + * the load balance virtual nodes + */ + private int virtualNodes = VIRTUAL_NODES_DEFAULT; + + + public String getType() { + return type; + } + + public LoadBalanceProperties setType(String type) { + this.type = type; + return this; + } + + public int getVirtualNodes() { + return virtualNodes; + } + + public LoadBalanceProperties setVirtualNodes(int virtualNodes) { + this.virtualNodes = virtualNodes; + return this; + } +} diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/RegistryProperties.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/RegistryProperties.java index 8d7884e7741..1eea19fe017 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/RegistryProperties.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/RegistryProperties.java @@ -18,8 +18,6 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; -import static io.seata.common.DefaultValues.DEFAULT_LOAD_BALANCE; -import static io.seata.common.DefaultValues.VIRTUAL_NODES_DEFAULT; import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_PREFIX; /** @@ -32,14 +30,6 @@ public class RegistryProperties { * file, nacos, eureka, redis, zk, consul, etcd3, sofa */ private String type = "file"; - /** - * the load balance - */ - private String loadBalance = DEFAULT_LOAD_BALANCE; - /** - * the load balance virtual nodes - */ - private int loadBalanceVirtualNodes = VIRTUAL_NODES_DEFAULT; public String getType() { return type; @@ -50,21 +40,4 @@ public RegistryProperties setType(String type) { return this; } - public String getLoadBalance() { - return loadBalance; - } - - public RegistryProperties setLoadBalance(String loadBalance) { - this.loadBalance = loadBalance; - return this; - } - - public int getLoadBalanceVirtualNodes() { - return loadBalanceVirtualNodes; - } - - public RegistryProperties setLoadBalanceVirtualNodes(int loadBalanceVirtualNodes) { - this.loadBalanceVirtualNodes = loadBalanceVirtualNodes; - return this; - } } diff --git a/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json index cd36eac2af0..0b766172970 100644 --- a/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -269,15 +269,15 @@ "defaultValue": 1 }, { - "name": "seata.registry.load-balance", + "name": "seata.client.load-balance.type", "type": "java.lang.String", - "sourceType": "io.seata.spring.boot.autoconfigure.properties.registry.RegistryProperties", + "sourceType": "io.seata.spring.boot.autoconfigure.properties.registry.LoadBalanceProperties", "defaultValue": "RandomLoadBalance" }, { - "name": "seata.registry.load-balance-virtual-nodes", + "name": "seata.client.load-balance.virtual-nodes", "type": "java.lang.Integer", - "sourceType": "io.seata.spring.boot.autoconfigure.properties.registry.RegistryProperties", + "sourceType": "io.seata.spring.boot.autoconfigure.properties.registry.LoadBalanceProperties", "defaultValue": 10 } ], diff --git a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertiesTest.java b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertiesTest.java index 58476d5a22c..02244979536 100644 --- a/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertiesTest.java +++ b/seata-spring-boot-starter/src/test/java/io/seata/spring/boot/autoconfigure/PropertiesTest.java @@ -36,6 +36,7 @@ import io.seata.spring.boot.autoconfigure.properties.config.ConfigNacosProperties; import io.seata.spring.boot.autoconfigure.properties.config.ConfigProperties; import io.seata.spring.boot.autoconfigure.properties.config.ConfigZooKeeperProperties; +import io.seata.spring.boot.autoconfigure.properties.registry.LoadBalanceProperties; import io.seata.spring.boot.autoconfigure.properties.registry.RegistryConsulProperties; import io.seata.spring.boot.autoconfigure.properties.registry.RegistryCustomProperties; import io.seata.spring.boot.autoconfigure.properties.registry.RegistryEtcd3Properties; @@ -226,8 +227,13 @@ public void testRegistryNacosProperties() { @Test public void testRegistryProperties() { assertEquals("file", context.getBean(RegistryProperties.class).getType()); - assertEquals("RandomLoadBalance", context.getBean(RegistryProperties.class).getLoadBalance()); - assertEquals(10, context.getBean(RegistryProperties.class).getLoadBalanceVirtualNodes()); + } + + + @Test + public void testLoadBalanceProperties() { + assertEquals("RandomLoadBalance", context.getBean(LoadBalanceProperties.class).getType()); + assertEquals(10, context.getBean(LoadBalanceProperties.class).getVirtualNodes()); } @Test diff --git a/serializer/seata-serializer-seata/src/test/resources/registry.conf b/serializer/seata-serializer-seata/src/test/resources/registry.conf index 2683afd65cb..ed7b37965ba 100644 --- a/serializer/seata-serializer-seata/src/test/resources/registry.conf +++ b/serializer/seata-serializer-seata/src/test/resources/registry.conf @@ -1,8 +1,6 @@ registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "file" - loadBalance = "RandomLoadBalance" - loadBalanceVirtualNodes = 10 nacos { serverAddr = "localhost" diff --git a/server/src/main/resources/registry.conf b/server/src/main/resources/registry.conf index 90e7eded127..8fb49b27a59 100644 --- a/server/src/main/resources/registry.conf +++ b/server/src/main/resources/registry.conf @@ -1,8 +1,6 @@ registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "file" - loadBalance = "RandomLoadBalance" - loadBalanceVirtualNodes = 10 nacos { application = "seata-server" diff --git a/test/src/test/resources/file.conf b/test/src/test/resources/file.conf index 7873ab23568..eb2f98d58ce 100644 --- a/test/src/test/resources/file.conf +++ b/test/src/test/resources/file.conf @@ -15,4 +15,8 @@ client { sagaRetryPersistModeUpdate = false sagaCompensatePersistModeUpdate = false } + loadBalance { + type = "RandomLoadBalance" + virtualNodes = 10 + } } \ No newline at end of file diff --git a/test/src/test/resources/registry.conf b/test/src/test/resources/registry.conf index e06455c0684..0a9bfecd757 100644 --- a/test/src/test/resources/registry.conf +++ b/test/src/test/resources/registry.conf @@ -1,8 +1,6 @@ registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "file" - loadBalance = "RandomLoadBalance" - loadBalanceVirtualNodes = 10 nacos { serverAddr = "localhost" From 3c21b93746de8bce86eafffb8225ce5d9f1175a5 Mon Sep 17 00:00:00 2001 From: Elvys Soares Date: Thu, 25 Mar 2021 08:46:33 -0300 Subject: [PATCH 79/93] optimize: Changed exception check by JUnit API usage (#3589) --- changes/1.5.0.md | 3 +- changes/en-us/1.5.0.md | 102 +----------------- .../io/seata/common/util/StringUtilsTest.java | 9 +- 3 files changed, 7 insertions(+), 107 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index c484bbfc9cd..1e28d921b9a 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -83,6 +83,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3544](https://github.com/seata/seata/pull/3544)] 优化无法通过Statement#getGeneratedKeys时,只能获取到批量插入的第一个主键的问题 - [[#3549](https://github.com/seata/seata/pull/3549)] 统一不同表中的xid字段的长度 - [[#3551](https://github.com/seata/seata/pull/3551)] 调大RETRY_DEAD_THRESHOLD的值以及设置成可配置 + - [[#3589](https://github.com/seata/seata/pull/3589)] 使用JUnit API做异常检查 ### test @@ -115,7 +116,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [xuande](https://github.com/xuande) - [tanggen](https://github.com/tanggen) - [dmego](https://github.com/dmego) - + - [eas5](https://github.com/eas5) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 056305e0db9..f9be03d995e 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -1,100 +1,3 @@ -### 1.5.0 - - [source](https://github.com/seata/seata/archive/v1.5.0.zip) | - [binary](https://github.com/seata/seata/releases/download/v1.5.0/seata-server-1.5.0.zip) - -
- Release notes - - - ### Seata 1.5.0 - - Seata 1.5.0 Released. - - Seata is an easy-to-use, high-performance, open source distributed transaction solution. - - The version is updated as follows: - - ### feature: - - - [[#3172](https://github.com/seata/seata/pull/3172)] support rollback info compress - - [[#3372](https://github.com/seata/seata/pull/3372)] Saga support customize whether update last retry log - - [[#3411](https://github.com/seata/seata/pull/3411)] support seata server thread pool parameters configuration - - [[#3348](https://github.com/seata/seata/pull/3348)] support redis sentinel mode - - [[#2667](https://github.com/seata/seata/pull/2667)] support password decryption - - [[#3427](https://github.com/seata/seata/pull/3427)] add distributed lock interface - - - ### bugfix: - - - [[#3258](https://github.com/seata/seata/pull/3258)] fix AsyncWorker potential OOM problem - - [[#3293](https://github.com/seata/seata/pull/3293)] configuration cache get value cast exception - - [[#3241](https://github.com/seata/seata/pull/3241)] forbidden use order by or limit in multi sql - - [[#3406](https://github.com/seata/seata/pull/3406)] fix the value can not be push to nacos when special charset in config.txt - - [[#3418](https://github.com/seata/seata/pull/3418)] fix getGeneratedKeys may get history pk - - [[#3408](https://github.com/seata/seata/pull/3408)] run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null - - [[#3431](https://github.com/seata/seata/pull/3431)] fix property bean may not be initialized when reading configuration - - [[#3413](https://github.com/seata/seata/pull/3413)] fix the logic of rollback to savepoint and release to savepoint - - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` - - ### optimize: - - - [[#3383](https://github.com/seata/seata/pull/3383)] optimize StatementProxyTest unit test - - [[#3341](https://github.com/seata/seata/pull/3341)] get config from file system even without file: prefix - - [[#3385](https://github.com/seata/seata/pull/3385)] optimize github action - - [[#3175](https://github.com/seata/seata/pull/3175)] improve UUIDGenerator using "history time" version of snowflake algorithm - - [[#3291](https://github.com/seata/seata/pull/3291)] mysql jdbc connect param - - [[#3336](https://github.com/seata/seata/pull/3336)] get netty config property from system properties - - [[#3369](https://github.com/seata/seata/pull/3369)] add github action secrets env for dockerHub - - [[#3343](https://github.com/seata/seata/pull/3343)] Migrate CI provider from Travis CI to Github Actions - - [[#3365](https://github.com/seata/seata/pull/3365)] optimize ParameterParserTest test case failed - - [[#3359](https://github.com/seata/seata/pull/3359)] remove unused test case - - [[#3397](https://github.com/seata/seata/pull/3397)] add the change records folder - - [[#3303](https://github.com/seata/seata/pull/3303)] supports reading all configurations from a single Nacos dataId - - [[#3317](https://github.com/seata/seata/pull/3317)] supports reading all configurations from a single Zookeeper node - - [[#3380](https://github.com/seata/seata/pull/3380)] globalTransactionScanner listener optimize - - [[#3123](https://github.com/seata/seata/pull/3123)] The server directory is build by version, and build only when the profile is release-seata - - [[#3415](https://github.com/seata/seata/pull/3415)] optimize maven clean plugin to clear the distribution directory - - [[#3316](https://github.com/seata/seata/pull/3316)] optimize the property bean may not be initialized while reading config value - - [[#3420](https://github.com/seata/seata/pull/3420)] optimize enumerated classes and add unit tests - - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class - - - ### test - - - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient - - Thanks to these contributors for their code commits. Please report an unintended omission. - - - [slievrly](https://github.com/slievrly) - - [selfishlover](https://github.com/selfishlover) - - [l8189352](https://github.com/l81893521) - - [hoverruan](https://github.com/hoverruan ) - - [jsbxyyx](https://github.com/jsbxyyx) - - [caohdgege](https://github.com/caohdgege) - - [a364176773](https://github.com/a364176773) - - [anselleeyy](https://github.com/anselleeyy) - - [Ifdevil](https://github.com/Ifdevil) - - [Rubbernecker](https://github.com/Rubbernecker) - - [lvxianzheng](https://github.com/lvxianzheng) - - [lj2018110133](https://github.com/lj2018110133) - - [wangliang181230](https://github.com/wangliang181230) - - [xingfudeshi](https://github.com/xingfudeshi) - - [MentosL](https://github.com/MentosL) - - [lian88jian](https://github.com/lian88jian) - - Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. - - #### Link - - - **Seata:** https://github.com/seata/seata - - **Seata-Samples:** https://github.com/seata/seata-samples - - **Release:** https://github.com/seata/seata/releases - - **WebSite:** https://seata.io - -
- -======= ### 1.5.0 [source](https://github.com/seata/seata/archive/v1.5.0.zip) | @@ -166,6 +69,7 @@ - [[#3415](https://github.com/seata/seata/pull/3415)] optimize maven clean plugin to clear the distribution directory - [[#3316](https://github.com/seata/seata/pull/3316)] optimize the property bean may not be initialized while reading config value - [[#3420](https://github.com/seata/seata/pull/3420)] optimize enumerated classes and add unit tests + - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class - [[#3533](https://github.com/seata/seata/pull/3533)] added interface to get current transaction role - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class - [[#3439](https://github.com/seata/seata/pull/3439)] adjust the order of springApplicationContextProvider @@ -180,7 +84,7 @@ - [[#3544](https://github.com/seata/seata/pull/3544)] optimize the get pks by auto when auto generated keys is false - [[#3549](https://github.com/seata/seata/pull/3549)] unified the length of xid in scripts - [[#3551](https://github.com/seata/seata/pull/3551)] make RETRY_DEAD_THRESHOLD bigger and configurable - + - [[#3589](https://github.com/seata/seata/pull/3589)] Changed exception check by JUnit API usage ### test @@ -212,7 +116,7 @@ - [xuande](https://github.com/xuande) - [tanggen](https://github.com/tanggen) - [dmego](https://github.com/dmego) - + - [eas5](https://github.com/eas5) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/common/src/test/java/io/seata/common/util/StringUtilsTest.java b/common/src/test/java/io/seata/common/util/StringUtilsTest.java index 4fb0f10d11a..c83ed3efe8d 100644 --- a/common/src/test/java/io/seata/common/util/StringUtilsTest.java +++ b/common/src/test/java/io/seata/common/util/StringUtilsTest.java @@ -89,13 +89,8 @@ void testEqualsIgnoreCase() { } @Test - void testCycleDependency() { - CycleDependency A = CycleDependency.A; - try { - StringUtils.toString(A); - } catch (StackOverflowError e) { - Assertions.fail("stack overflow error"); - } + void testCycleDependency() throws StackOverflowError{ + StringUtils.toString(CycleDependency.A); } static class CycleDependency { From 2dac3a5062ed5fe5dd027fac6105dbcd32767f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?WangLiang/=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Fri, 26 Mar 2021 23:18:12 +0800 Subject: [PATCH 80/93] bugfix: fix the possible NPE (#3597) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + .../impl/ProcessCtrlStateMachineEngine.java | 15 +++++++++------ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 1e28d921b9a..fe77aaded07 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -48,6 +48,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3555](https://github.com/seata/seata/pull/3555)] 通过setBytes代替setBlob,避免高版本jdbc驱动工作异常 - [[#3540](https://github.com/seata/seata/pull/3540)] 修复server发布打包时缺失文件 - [[#3573](https://github.com/seata/seata/pull/3573)] 修复 README.md 文件中设计器路径错误 + - [[#3597](https://github.com/seata/seata/pull/3597)] 修复可能导致NPE的问题 ### optimize: diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index f9be03d995e..eaacaf08c27 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -49,6 +49,7 @@ - [[#3555](https://github.com/seata/seata/pull/3555)] do not call setBlob to invalid the jdbc exception - [[#3540](https://github.com/seata/seata/pull/3540)] fix server distribution missing files - [[#3573](https://github.com/seata/seata/pull/3573)] fix designer directory path in README.md + - [[#3597](https://github.com/seata/seata/pull/3597)] fix the possible NPE ### optimize: diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/ProcessCtrlStateMachineEngine.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/ProcessCtrlStateMachineEngine.java index 6148ae1c74a..d149d6caeda 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/ProcessCtrlStateMachineEngine.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/ProcessCtrlStateMachineEngine.java @@ -165,13 +165,16 @@ private StateMachineInstance createMachineInstance(String stateMachineName, Stri inst.setBusinessKey(businessKey); inst.setStartParams(startParams); - if (StringUtils.hasText(businessKey) && startParams != null) { - startParams.put(DomainConstants.VAR_NAME_BUSINESSKEY, businessKey); - } + if (startParams != null) { + if (StringUtils.hasText(businessKey)) { + startParams.put(DomainConstants.VAR_NAME_BUSINESSKEY, businessKey); + } - if (StringUtils.hasText((String)startParams.get(DomainConstants.VAR_NAME_PARENT_ID))) { - inst.setParentId((String)startParams.get(DomainConstants.VAR_NAME_PARENT_ID)); - startParams.remove(DomainConstants.VAR_NAME_PARENT_ID); + String parentId = (String)startParams.get(DomainConstants.VAR_NAME_PARENT_ID); + if (StringUtils.hasText(parentId)) { + inst.setParentId(parentId); + startParams.remove(DomainConstants.VAR_NAME_PARENT_ID); + } } inst.setStatus(ExecutionStatus.RU); From da3dbc0259579f3ffc40f13440b8a8ba0ffa188f Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Wed, 7 Apr 2021 09:47:19 +0800 Subject: [PATCH 81/93] bugfix: fixed bugs in EventBus unit tests (#3607) --- changes/1.5.0.md | 5 +++-- changes/en-us/1.5.0.md | 1 + .../io/seata/server/event/DefaultCoreForEventBusTest.java | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index fe77aaded07..a4d035e6684 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -85,11 +85,12 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3549](https://github.com/seata/seata/pull/3549)] 统一不同表中的xid字段的长度 - [[#3551](https://github.com/seata/seata/pull/3551)] 调大RETRY_DEAD_THRESHOLD的值以及设置成可配置 - [[#3589](https://github.com/seata/seata/pull/3589)] 使用JUnit API做异常检查 - - + + ### test - [[#3381](https://github.com/seata/seata/pull/3381)] 添加 TmClient 的测试用例 + - [[#3607](https://github.com/seata/seata/pull/3607)] 修正了EventBus单元测试中的bug 非常感谢以下 contributors 的代码贡献。若有无意遗漏,请报告。 diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index eaacaf08c27..c070e13c3bb 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -90,6 +90,7 @@ ### test - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient + - [[#3607](https://github.com/seata/seata/pull/3607)] fixed bugs in EventBus unit tests Thanks to these contributors for their code commits. Please report an unintended omission. diff --git a/server/src/test/java/io/seata/server/event/DefaultCoreForEventBusTest.java b/server/src/test/java/io/seata/server/event/DefaultCoreForEventBusTest.java index 5dab4278781..a99a22c413c 100644 --- a/server/src/test/java/io/seata/server/event/DefaultCoreForEventBusTest.java +++ b/server/src/test/java/io/seata/server/event/DefaultCoreForEventBusTest.java @@ -66,6 +66,8 @@ public void processGlobalTransactionEvent(GlobalTransactionEvent event) { DefaultCore core = new DefaultCore(remotingServer); GlobalTransactionEventSubscriber subscriber = new GlobalTransactionEventSubscriber(); + // avoid transactional interference from other unit tests + Thread.sleep(1500); EventBusManager.get().register(subscriber); //start a transaction From b55d24b58e8305dc6a93f965d56a0c526925f6b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?WangLiang/=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Sun, 11 Apr 2021 14:58:07 +0800 Subject: [PATCH 82/93] optimize: make `LoadBalanceProperties` compatible with `spring-boot:2.x` and above (#3601) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + .../boot/autoconfigure/StarterConstants.java | 1 + .../registry/LoadBalanceProperties.java | 4 +-- ...itional-spring-configuration-metadata.json | 26 +++++++++++++++++-- 5 files changed, 29 insertions(+), 4 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index a4d035e6684..95812fa17f5 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -85,6 +85,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3549](https://github.com/seata/seata/pull/3549)] 统一不同表中的xid字段的长度 - [[#3551](https://github.com/seata/seata/pull/3551)] 调大RETRY_DEAD_THRESHOLD的值以及设置成可配置 - [[#3589](https://github.com/seata/seata/pull/3589)] 使用JUnit API做异常检查 + - [[#3601](https://github.com/seata/seata/pull/3601)] 使`LoadBalanceProperties`与`spring-boot:2.x`及以上版本兼容 ### test diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index c070e13c3bb..640b9ea6e95 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -86,6 +86,7 @@ - [[#3549](https://github.com/seata/seata/pull/3549)] unified the length of xid in scripts - [[#3551](https://github.com/seata/seata/pull/3551)] make RETRY_DEAD_THRESHOLD bigger and configurable - [[#3589](https://github.com/seata/seata/pull/3589)] Changed exception check by JUnit API usage + - [[#3601](https://github.com/seata/seata/pull/3601)] make `LoadBalanceProperties` compatible with `spring-boot:2.x` and above ### test diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java index 2ce2a16d0f3..c7ee8b98355 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java @@ -33,6 +33,7 @@ public interface StarterConstants { String CLIENT_TM_PREFIX = CLIENT_PREFIX + ".tm"; String LOCK_PREFIX = CLIENT_RM_PREFIX + ".lock"; String UNDO_PREFIX = CLIENT_PREFIX + ".undo"; + String LOAD_BALANCE_PREFIX_KEBAB_STYLE = CLIENT_PREFIX + ".load-balance"; String LOAD_BALANCE_PREFIX = CLIENT_PREFIX + ".loadBalance"; String LOG_PREFIX = SEATA_PREFIX + ".log"; String COMPRESS_PREFIX = UNDO_PREFIX + ".compress"; diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/LoadBalanceProperties.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/LoadBalanceProperties.java index e5d46ec1a6b..e2bfb35d9c8 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/LoadBalanceProperties.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/properties/registry/LoadBalanceProperties.java @@ -20,13 +20,13 @@ import static io.seata.common.DefaultValues.DEFAULT_LOAD_BALANCE; import static io.seata.common.DefaultValues.VIRTUAL_NODES_DEFAULT; -import static io.seata.spring.boot.autoconfigure.StarterConstants.LOAD_BALANCE_PREFIX; +import static io.seata.spring.boot.autoconfigure.StarterConstants.LOAD_BALANCE_PREFIX_KEBAB_STYLE; /** * @author ls9527 */ @Component -@ConfigurationProperties(prefix = LOAD_BALANCE_PREFIX) +@ConfigurationProperties(prefix = LOAD_BALANCE_PREFIX_KEBAB_STYLE) public class LoadBalanceProperties { /** * the load balance diff --git a/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 0b766172970..b9e020576b9 100644 --- a/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/seata-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -187,7 +187,7 @@ "deprecation": { "level": "error", "replacement": "seata.log.exception-rate", - "reason": "The location of this configuration has been changed to 'seata.log.exception-rate'." + "reason": "Please configure to 'seata.log.exception-rate'." } }, { @@ -268,6 +268,28 @@ "sourceType": "io.seata.spring.boot.autoconfigure.properties.client.ThreadFactoryProperties", "defaultValue": 1 }, + { + "name": "seata.registry.load-balance", + "type": "java.lang.String", + "sourceType": "io.seata.spring.boot.autoconfigure.properties.registry.RegistryProperties", + "defaultValue": "RandomLoadBalance", + "deprecation": { + "level": "error", + "replacement": "seata.client.load-balance.type", + "reason": "Please configure to 'seata.client.load-balance.type'." + } + }, + { + "name": "seata.registry.load-balance-virtual-nodes", + "type": "java.lang.Integer", + "sourceType": "io.seata.spring.boot.autoconfigure.properties.registry.RegistryProperties", + "defaultValue": 10, + "deprecation": { + "level": "error", + "replacement": "seata.client.load-balance.virtual-nodes", + "reason": "Please configure to 'seata.client.load-balance.virtual-nodes'." + } + }, { "name": "seata.client.load-balance.type", "type": "java.lang.String", @@ -305,7 +327,7 @@ ] }, { - "name": "seata.registry.load-balance", + "name": "seata.client.load-balance.type", "values": [ { "value": "RandomLoadBalance", From 1de031d82a373c8fe4a342a8f37b4024ed949bc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=87=AA=E7=84=B6?= Date: Wed, 14 Apr 2021 19:41:10 +0800 Subject: [PATCH 83/93] optimize: optimize nacos-config.py parameter (#3631) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + script/config-center/nacos/nacos-config.py | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 95812fa17f5..f4e9665a9ae 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -86,6 +86,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3551](https://github.com/seata/seata/pull/3551)] 调大RETRY_DEAD_THRESHOLD的值以及设置成可配置 - [[#3589](https://github.com/seata/seata/pull/3589)] 使用JUnit API做异常检查 - [[#3601](https://github.com/seata/seata/pull/3601)] 使`LoadBalanceProperties`与`spring-boot:2.x`及以上版本兼容 + - [[#3631](https://github.com/seata/seata/pull/3631)] 优化 运行 nacos-config.py 参数问题 ### test diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 640b9ea6e95..77fe481712c 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -87,6 +87,7 @@ - [[#3551](https://github.com/seata/seata/pull/3551)] make RETRY_DEAD_THRESHOLD bigger and configurable - [[#3589](https://github.com/seata/seata/pull/3589)] Changed exception check by JUnit API usage - [[#3601](https://github.com/seata/seata/pull/3601)] make `LoadBalanceProperties` compatible with `spring-boot:2.x` and above + - [[#3631](https://github.com/seata/seata/pull/3631)] optimize nacos-config.py parameter ### test diff --git a/script/config-center/nacos/nacos-config.py b/script/config-center/nacos/nacos-config.py index 7d41dd13b64..15c2b0e36d5 100644 --- a/script/config-center/nacos/nacos-config.py +++ b/script/config-center/nacos/nacos-config.py @@ -5,7 +5,7 @@ import sys import urllib.parse -if len(sys.argv) <= 2: +if len(sys.argv) < 2: print ('python nacos-config.py nacosAddr') exit() From d724cdae8bdaca80b933f5cb3d3e55674576d672 Mon Sep 17 00:00:00 2001 From: jimin Date: Thu, 15 Apr 2021 14:33:31 +0800 Subject: [PATCH 84/93] bugfix: fix register branch and flush undolog when affect row was zero (#3522) --- .../datasource/exec/BaseTransactionalExecutor.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseTransactionalExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseTransactionalExecutor.java index fdc35a38048..4f316a8c314 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseTransactionalExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseTransactionalExecutor.java @@ -19,6 +19,8 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -41,9 +43,6 @@ import io.seata.sqlparser.SQLType; import io.seata.sqlparser.WhereRecognizer; -import java.util.ArrayList; -import java.util.List; - /** * The type Base transactional executor. * @@ -279,10 +278,12 @@ protected void prepareUndoLog(TableRecords beforeImage, TableRecords afterImage) TableRecords lockKeyRecords = sqlRecognizer.getSQLType() == SQLType.DELETE ? beforeImage : afterImage; String lockKeys = buildLockKey(lockKeyRecords); - connectionProxy.appendLockKey(lockKeys); + if (null != lockKeys) { + connectionProxy.appendLockKey(lockKeys); - SQLUndoLog sqlUndoLog = buildUndoItem(beforeImage, afterImage); - connectionProxy.appendUndoLog(sqlUndoLog); + SQLUndoLog sqlUndoLog = buildUndoItem(beforeImage, afterImage); + connectionProxy.appendUndoLog(sqlUndoLog); + } } /** From d8c09ab9469d468f5985c32d35c29e56173b7fd6 Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Thu, 15 Apr 2021 22:28:21 +0800 Subject: [PATCH 85/93] bugfix: zk node path is converted to dataId error (#3635) --- .../java/io/seata/config/zk/ZookeeperConfiguration.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/config/seata-config-zk/src/main/java/io/seata/config/zk/ZookeeperConfiguration.java b/config/seata-config-zk/src/main/java/io/seata/config/zk/ZookeeperConfiguration.java index 8e80dd42cff..70d681a8ef7 100644 --- a/config/seata-config-zk/src/main/java/io/seata/config/zk/ZookeeperConfiguration.java +++ b/config/seata-config-zk/src/main/java/io/seata/config/zk/ZookeeperConfiguration.java @@ -348,15 +348,16 @@ public void handleDataChange(String s, Object o) { return; } - - ConfigurationChangeEvent event = new ConfigurationChangeEvent().setDataId(s).setNewValue(o.toString()) - .setChangeType(ConfigurationChangeType.MODIFY); + String dataId = s.replaceFirst(ROOT_PATH + ZK_PATH_SPLIT_CHAR, ""); + ConfigurationChangeEvent event = new ConfigurationChangeEvent().setDataId(dataId).setNewValue(o.toString()) + .setChangeType(ConfigurationChangeType.MODIFY); listener.onProcessEvent(event); } @Override public void handleDataDeleted(String s) { - ConfigurationChangeEvent event = new ConfigurationChangeEvent().setDataId(s).setChangeType( + String dataId = s.replaceFirst(ROOT_PATH + ZK_PATH_SPLIT_CHAR, ""); + ConfigurationChangeEvent event = new ConfigurationChangeEvent().setDataId(dataId).setChangeType( ConfigurationChangeType.DELETE); listener.onProcessEvent(event); } From 23e611921e6fabeb68eaf9304bd286297426e54c Mon Sep 17 00:00:00 2001 From: will <349071347@qq.com> Date: Fri, 16 Apr 2021 12:41:36 +0800 Subject: [PATCH 86/93] optimize: optimize the error of join table syntax (#3638) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + .../druid/mysql/MySQLDeleteRecognizer.java | 21 +++++++++++++++-- .../druid/mysql/MySQLUpdateRecognizer.java | 19 +++++++++++++-- .../druid/oracle/OracleDeleteRecognizer.java | 23 ++++++++++++++++++- .../druid/oracle/OracleUpdateRecognizer.java | 18 +++++++++++++-- .../PostgresqlDeleteRecognizer.java | 23 ++++++++++++++++++- .../PostgresqlUpdateRecognizer.java | 18 +++++++++++++-- 8 files changed, 114 insertions(+), 10 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index f4e9665a9ae..17e5f5ace8c 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -87,6 +87,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3589](https://github.com/seata/seata/pull/3589)] 使用JUnit API做异常检查 - [[#3601](https://github.com/seata/seata/pull/3601)] 使`LoadBalanceProperties`与`spring-boot:2.x`及以上版本兼容 - [[#3631](https://github.com/seata/seata/pull/3631)] 优化 运行 nacos-config.py 参数问题 + - [[#3638](https://github.com/seata/seata/pull/3638)] 优化使用连表update和delete的SQL语法时错误提示 ### test diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 77fe481712c..91c7f2b7226 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -88,6 +88,7 @@ - [[#3589](https://github.com/seata/seata/pull/3589)] Changed exception check by JUnit API usage - [[#3601](https://github.com/seata/seata/pull/3601)] make `LoadBalanceProperties` compatible with `spring-boot:2.x` and above - [[#3631](https://github.com/seata/seata/pull/3631)] optimize nacos-config.py parameter + - [[#3638](https://github.com/seata/seata/pull/3638)] optimize the error when use update or delete with join in sql ### test diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLDeleteRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLDeleteRecognizer.java index 6dcf19870e3..c6b542131cc 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLDeleteRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLDeleteRecognizer.java @@ -18,9 +18,12 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; +import io.seata.common.exception.NotSupportYetException; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLDeleteRecognizer; import io.seata.sqlparser.SQLType; @@ -71,11 +74,25 @@ public boolean visit(SQLExprTableSource x) { printTableSourceExpr(x.getExpr()); return false; } + + @Override + public boolean visit(SQLJoinTableSource x) { + throw new NotSupportYetException("not support the syntax of delete with join table"); + } }; + SQLTableSource tableSource; if (ast.getFrom() == null) { - visitor.visit((SQLExprTableSource) ast.getTableSource()); + tableSource = ast.getTableSource(); + } else { + tableSource = ast.getFrom(); + } + + if (tableSource instanceof SQLExprTableSource) { + visitor.visit((SQLExprTableSource) tableSource); + } else if (tableSource instanceof SQLJoinTableSource) { + visitor.visit((SQLJoinTableSource) tableSource); } else { - visitor.visit((SQLExprTableSource) ast.getFrom()); + throw new NotSupportYetException("not support the syntax of delete with unknow"); } return sb.toString(); } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java index 1dc1935a414..4bb9c019d4c 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java @@ -22,10 +22,13 @@ import com.alibaba.druid.sql.ast.expr.SQLValuableExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; +import io.seata.common.exception.NotSupportYetException; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLParsingException; import io.seata.sqlparser.SQLType; @@ -128,9 +131,21 @@ public boolean visit(SQLExprTableSource x) { printTableSourceExpr(x.getExpr()); return false; } + + @Override + public boolean visit(SQLJoinTableSource x) { + throw new NotSupportYetException("not support the syntax of update with join table"); + } }; - SQLExprTableSource tableSource = (SQLExprTableSource)ast.getTableSource(); - visitor.visit(tableSource); + + SQLTableSource tableSource = ast.getTableSource(); + if (tableSource instanceof SQLExprTableSource) { + visitor.visit((SQLExprTableSource) tableSource); + } else if (tableSource instanceof SQLJoinTableSource) { + visitor.visit((SQLJoinTableSource) tableSource); + } else { + throw new NotSupportYetException("not support the syntax of update with unknow"); + } return sb.toString(); } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleDeleteRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleDeleteRecognizer.java index fd7e85eccb4..76ca2c5d65b 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleDeleteRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleDeleteRecognizer.java @@ -18,9 +18,12 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor; +import io.seata.common.exception.NotSupportYetException; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLDeleteRecognizer; import io.seata.sqlparser.SQLType; @@ -68,8 +71,26 @@ public boolean visit(SQLExprTableSource x) { printTableSourceExpr(x.getExpr()); return false; } + + @Override + public boolean visit(SQLJoinTableSource x) { + throw new NotSupportYetException("not support the syntax of delete with join table"); + } }; - visitor.visit((SQLExprTableSource)ast.getTableSource()); + SQLTableSource tableSource; + if (ast.getFrom() == null) { + tableSource = ast.getTableSource(); + } else { + tableSource = ast.getFrom(); + } + + if (tableSource instanceof SQLExprTableSource) { + visitor.visit((SQLExprTableSource) tableSource); + } else if (tableSource instanceof SQLJoinTableSource) { + visitor.visit((SQLJoinTableSource) tableSource); + } else { + throw new NotSupportYetException("not support the syntax of delete with unknow"); + } return sb.toString(); } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java index 896f7ec912b..3a7313c7ec0 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java @@ -25,10 +25,13 @@ import com.alibaba.druid.sql.ast.expr.SQLValuableExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor; +import io.seata.common.exception.NotSupportYetException; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLParsingException; import io.seata.sqlparser.SQLType; @@ -128,9 +131,20 @@ public boolean visit(SQLExprTableSource x) { printTableSourceExpr(x.getExpr()); return false; } + + @Override + public boolean visit(SQLJoinTableSource x) { + throw new NotSupportYetException("not support the syntax of update with join table"); + } }; - SQLExprTableSource tableSource = (SQLExprTableSource)ast.getTableSource(); - visitor.visit(tableSource); + SQLTableSource tableSource = ast.getTableSource(); + if (tableSource instanceof SQLExprTableSource) { + visitor.visit((SQLExprTableSource) tableSource); + } else if (tableSource instanceof SQLJoinTableSource) { + visitor.visit((SQLJoinTableSource) tableSource); + } else { + throw new NotSupportYetException("not support the syntax of update with unknow"); + } return sb.toString(); } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlDeleteRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlDeleteRecognizer.java index 3b76e0f63ba..8d45d786993 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlDeleteRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlDeleteRecognizer.java @@ -18,8 +18,11 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor; +import io.seata.common.exception.NotSupportYetException; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLDeleteRecognizer; import io.seata.sqlparser.SQLType; @@ -64,8 +67,26 @@ public boolean visit(SQLExprTableSource x) { printTableSourceExpr(x.getExpr()); return false; } + + @Override + public boolean visit(SQLJoinTableSource x) { + throw new NotSupportYetException("not support the syntax of delete with join table"); + } }; - visitor.visit((SQLExprTableSource) ast.getTableSource()); + SQLTableSource tableSource; + if (ast.getFrom() == null) { + tableSource = ast.getTableSource(); + } else { + tableSource = ast.getFrom(); + } + + if (tableSource instanceof SQLExprTableSource) { + visitor.visit((SQLExprTableSource) tableSource); + } else if (tableSource instanceof SQLJoinTableSource) { + visitor.visit((SQLJoinTableSource) tableSource); + } else { + throw new NotSupportYetException("not support the syntax of delete with unknow"); + } return sb.toString(); } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java index 715c58ee94a..3e8b35a332c 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java @@ -22,9 +22,12 @@ import com.alibaba.druid.sql.ast.expr.SQLValuableExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor; +import io.seata.common.exception.NotSupportYetException; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLParsingException; import io.seata.sqlparser.SQLType; @@ -124,9 +127,20 @@ public boolean visit(SQLExprTableSource x) { printTableSourceExpr(x.getExpr()); return false; } + + @Override + public boolean visit(SQLJoinTableSource x) { + throw new NotSupportYetException("not support the syntax of update with join table"); + } }; - SQLExprTableSource tableSource = (SQLExprTableSource) ast.getTableSource(); - visitor.visit(tableSource); + SQLTableSource tableSource = ast.getTableSource(); + if (tableSource instanceof SQLExprTableSource) { + visitor.visit((SQLExprTableSource) tableSource); + } else if (tableSource instanceof SQLJoinTableSource) { + visitor.visit((SQLJoinTableSource) tableSource); + } else { + throw new NotSupportYetException("not support the syntax of update with unknow"); + } return sb.toString(); } From aa17303f1093959916c886baa77f0f9683b66a3c Mon Sep 17 00:00:00 2001 From: caohdgege <1170050364@qq.com> Date: Fri, 16 Apr 2021 13:37:31 +0800 Subject: [PATCH 87/93] bugfix: fix the case that could not retry acquire global lock (#3133) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + .../seata/rm/datasource/ConnectionProxy.java | 18 +++++++++++++++--- .../exec/AbstractDMLBaseExecutor.java | 3 +-- .../rm/datasource/ConnectionProxyTest.java | 6 ++++-- 5 files changed, 22 insertions(+), 7 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 17e5f5ace8c..b9086c5b331 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -49,6 +49,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3540](https://github.com/seata/seata/pull/3540)] 修复server发布打包时缺失文件 - [[#3573](https://github.com/seata/seata/pull/3573)] 修复 README.md 文件中设计器路径错误 - [[#3597](https://github.com/seata/seata/pull/3597)] 修复可能导致NPE的问题 + - [[#3133](https://github.com/seata/seata/pull/3133)] 修复某些场景下无法重试全局锁的问题 ### optimize: diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 91c7f2b7226..0428077300c 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -87,6 +87,7 @@ - [[#3551](https://github.com/seata/seata/pull/3551)] make RETRY_DEAD_THRESHOLD bigger and configurable - [[#3589](https://github.com/seata/seata/pull/3589)] Changed exception check by JUnit API usage - [[#3601](https://github.com/seata/seata/pull/3601)] make `LoadBalanceProperties` compatible with `spring-boot:2.x` and above + - [[#3133](https://github.com/seata/seata/pull/3133)] fix the case that could not retry acquire global lock - [[#3631](https://github.com/seata/seata/pull/3631)] optimize nacos-config.py parameter - [[#3638](https://github.com/seata/seata/pull/3638)] optimize the error when use update or delete with join in sql diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java index 5e5c362578c..7024f599ee0 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java @@ -50,13 +50,14 @@ public class ConnectionProxy extends AbstractConnectionProxy { private ConnectionContext context = new ConnectionContext(); + private final LockRetryPolicy lockRetryPolicy = new LockRetryPolicy(this); + private static final int REPORT_RETRY_COUNT = ConfigurationFactory.getInstance().getInt( ConfigurationKeys.CLIENT_REPORT_RETRY_COUNT, DEFAULT_CLIENT_REPORT_RETRY_COUNT); public static final boolean IS_REPORT_SUCCESS_ENABLE = ConfigurationFactory.getInstance().getBoolean( ConfigurationKeys.CLIENT_REPORT_SUCCESS_ENABLE, DEFAULT_CLIENT_REPORT_SUCCESS_ENABLE); - private final static LockRetryPolicy LOCK_RETRY_POLICY = new LockRetryPolicy(); /** * Instantiates a new Connection proxy. @@ -181,7 +182,7 @@ public void appendLockKey(String lockKey) { @Override public void commit() throws SQLException { try { - LOCK_RETRY_POLICY.execute(() -> { + lockRetryPolicy.execute(() -> { doCommit(); return null; }); @@ -325,10 +326,21 @@ public static class LockRetryPolicy { protected static final boolean LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT = ConfigurationFactory .getInstance().getBoolean(ConfigurationKeys.CLIENT_LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT, DEFAULT_CLIENT_LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT); + protected final ConnectionProxy connection; + + public LockRetryPolicy(ConnectionProxy connection) { + this.connection = connection; + } + public T execute(Callable callable) throws Exception { - if (LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT) { + // the only case that not need to retry acquire lock hear is + // LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT == true && connection#autoCommit == true + // because it has retry acquire lock when AbstractDMLBaseExecutor#executeAutoCommitTrue + if (LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT && connection.getContext().isAutoCommitChanged()) { return callable.call(); } else { + // LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT == false + // or LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT == true && autoCommit == false return doRetryOnLockConflict(callable); } } diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java index d42d365bc66..ae73f5ddc42 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java @@ -172,10 +172,9 @@ protected T executeAutoCommitTrue(Object[] args) throws Throwable { protected abstract TableRecords afterImage(TableRecords beforeImage) throws SQLException; private static class LockRetryPolicy extends ConnectionProxy.LockRetryPolicy { - private final ConnectionProxy connection; LockRetryPolicy(final ConnectionProxy connection) { - this.connection = connection; + super(connection); } @Override diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/ConnectionProxyTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/ConnectionProxyTest.java index 7170f8c6ec1..016d915dfe3 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/ConnectionProxyTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/ConnectionProxyTest.java @@ -22,6 +22,8 @@ import io.seata.rm.DefaultResourceManager; import io.seata.rm.datasource.exec.LockConflictException; import io.seata.rm.datasource.exec.LockWaitTimeoutException; +import io.seata.rm.datasource.mock.MockConnection; +import io.seata.rm.datasource.mock.MockDriver; import io.seata.rm.datasource.undo.SQLUndoLog; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -72,11 +74,11 @@ public void initBeforeEach() throws Exception { public void testLockRetryPolicyRollbackOnConflict() throws Exception { boolean oldBranchRollbackFlag = (boolean) branchRollbackFlagField.get(null); branchRollbackFlagField.set(null, true); - ConnectionProxy connectionProxy = new ConnectionProxy(dataSourceProxy, null); + ConnectionProxy connectionProxy = new ConnectionProxy(dataSourceProxy, new MockConnection(new MockDriver(), "", null)); connectionProxy.bind(TEST_XID); connectionProxy.appendUndoLog(new SQLUndoLog()); connectionProxy.appendLockKey(lockKey); - Assertions.assertThrows(LockConflictException.class, connectionProxy::commit); + Assertions.assertThrows(LockWaitTimeoutException.class, connectionProxy::commit); branchRollbackFlagField.set(null, oldBranchRollbackFlag); } From 8a4b6a370b8a43cb43a3632108eedc4576c25f95 Mon Sep 17 00:00:00 2001 From: Yaoyu Li <573459407@qq.com> Date: Tue, 20 Apr 2021 12:56:21 +0800 Subject: [PATCH 88/93] feature: saga support loop execution on state (#3468) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + .../store/db/DbAndReportTcStateLogStore.java | 11 +- .../impl/ProcessCtrlStateMachineEngine.java | 27 +- .../pcext/StateMachineProcessHandler.java | 2 + .../pcext/StateMachineProcessRouter.java | 1 + .../pcext/handlers/LoopStartStateHandler.java | 165 +++++++ .../handlers/SubStateMachineHandler.java | 2 +- .../LoopTaskHandlerInterceptor.java | 138 ++++++ .../ServiceTaskHandlerInterceptor.java | 18 +- .../engine/pcext/routers/TaskStateRouter.java | 14 +- .../pcext/utils/CompensationHolder.java | 2 +- .../saga/engine/pcext/utils/EngineUtils.java | 35 +- .../engine/pcext/utils/LoopContextHolder.java | 105 +++++ .../engine/pcext/utils/LoopTaskUtils.java | 429 ++++++++++++++++++ ....saga.engine.pcext.StateHandlerInterceptor | 3 +- .../statelang/domain/DomainConstants.java | 12 + .../saga/statelang/domain/LoopStartState.java | 25 + .../saga/statelang/domain/TaskState.java | 48 ++ .../domain/impl/AbstractTaskState.java | 65 ++- .../domain/impl/LoopStartStateImpl.java | 32 ++ .../parser/impl/AbstractTaskStateParser.java | 24 + .../saga/engine/db/StateMachineDBTests.java | 158 +++++++ .../statelang/simple_statelang_with_loop.json | 137 ++++++ ...le_statelang_with_persist_update_mode.json | 2 +- 25 files changed, 1438 insertions(+), 19 deletions(-) create mode 100644 saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/handlers/LoopStartStateHandler.java create mode 100644 saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/interceptors/LoopTaskHandlerInterceptor.java create mode 100644 saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/LoopContextHolder.java create mode 100644 saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/LoopTaskUtils.java create mode 100644 saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/LoopStartState.java create mode 100644 saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/LoopStartStateImpl.java create mode 100644 test/src/test/resources/saga/statelang/simple_statelang_with_loop.json diff --git a/changes/1.5.0.md b/changes/1.5.0.md index b9086c5b331..a83498ad87e 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -25,6 +25,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3427](https://github.com/seata/seata/pull/3427)] 添加分布式锁接口 - [[#3443](https://github.com/seata/seata/pull/3443)] 将`seata-server`的日志发送到`logstash`或`kafka`中,再存入`ElasticSearch` - [[#3486](https://github.com/seata/seata/pull/3486)] Metrics增加事务分组属性 + - [[#3468](https://github.com/seata/seata/pull/3468)] saga模式支持任务循环执行 ### bugfix: diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 0428077300c..4e81ddab092 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -25,6 +25,7 @@ - [[#3427](https://github.com/seata/seata/pull/3427)] add distributed lock interface - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` - [[#3486](https://github.com/seata/seata/pull/3486)] add transaction service group for metric + - [[#3468](https://github.com/seata/seata/pull/3468)] saga support loop execution on state ### bugfix: diff --git a/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java b/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java index fcf41c42349..88942465e0a 100644 --- a/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java +++ b/saga/seata-saga-engine-store/src/main/java/io/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java @@ -120,7 +120,9 @@ public void recordStateMachineStarted(StateMachineInstance machineInstance, Proc // clear RootContext.unbind(); RootContext.unbindBranchType(); - sagaTransactionalTemplate.cleanUp(); + if (sagaTransactionalTemplate != null) { + sagaTransactionalTemplate.cleanUp(); + } throw e; } } @@ -394,7 +396,9 @@ private String generateCompensateStateInstanceId(StateInstance stateInstance, bo if (isUpdateMode) { return originalCompensateStateInstId + "-" + maxIndex; } - for (StateInstance aStateInstance : stateInstance.getStateMachineInstance().getStateList()) { + + for (int i = 0; i < stateInstance.getStateMachineInstance().getStateList().size(); i++) { + StateInstance aStateInstance = stateInstance.getStateMachineInstance().getStateList().get(i); if (aStateInstance != stateInstance && originalCompensateStateInstId.equals(aStateInstance.getStateIdCompensatedFor())) { int idIndex = getIdIndex(aStateInstance.getId(), "-"); @@ -439,7 +443,8 @@ private boolean isUpdateMode(StateInstance stateInstance, ProcessContext context } else if (StringUtils.hasLength(stateInstance.getStateIdCompensatedFor())) { // find if this compensate has been executed - for (StateInstance aStateInstance : stateInstance.getStateMachineInstance().getStateList()) { + for (int i = 0; i < stateInstance.getStateMachineInstance().getStateList().size(); i++) { + StateInstance aStateInstance = stateInstance.getStateMachineInstance().getStateList().get(i); if (aStateInstance.isForCompensation() && aStateInstance.getName().equals(stateInstance.getName())) { if (null != state.isCompensatePersistModeUpdate()) { return state.isCompensatePersistModeUpdate(); diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/ProcessCtrlStateMachineEngine.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/ProcessCtrlStateMachineEngine.java index d149d6caeda..9ef64fb6c75 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/ProcessCtrlStateMachineEngine.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/impl/ProcessCtrlStateMachineEngine.java @@ -30,6 +30,7 @@ import io.seata.saga.engine.exception.ForwardInvalidException; import io.seata.saga.engine.pcext.StateInstruction; import io.seata.saga.engine.pcext.utils.EngineUtils; +import io.seata.saga.engine.pcext.utils.LoopTaskUtils; import io.seata.saga.engine.pcext.utils.ParameterUtils; import io.seata.saga.engine.utils.ProcessContextBuilder; import io.seata.saga.proctrl.ProcessContext; @@ -40,8 +41,10 @@ import io.seata.saga.statelang.domain.StateInstance; import io.seata.saga.statelang.domain.StateMachine; import io.seata.saga.statelang.domain.StateMachineInstance; +import io.seata.saga.statelang.domain.TaskState.Loop; import io.seata.saga.statelang.domain.impl.AbstractTaskState; import io.seata.saga.statelang.domain.impl.CompensationTriggerStateImpl; +import io.seata.saga.statelang.domain.impl.LoopStartStateImpl; import io.seata.saga.statelang.domain.impl.ServiceTaskStateImpl; import io.seata.saga.statelang.domain.impl.StateMachineInstanceImpl; import org.slf4j.Logger; @@ -140,6 +143,12 @@ private StateMachineInstance startInternal(String stateMachineName, String tenan stateMachineConfig.getSeqGenerator().generate(DomainConstants.SEQ_ENTITY_STATE_MACHINE_INST)); } + StateInstruction stateInstruction = processContext.getInstruction(StateInstruction.class); + Loop loop = LoopTaskUtils.getLoopConfig(processContext, stateInstruction.getState(processContext)); + if (null != loop) { + stateInstruction.setTemporaryState(new LoopStartStateImpl()); + } + if (async) { stateMachineConfig.getAsyncProcessCtrlEventPublisher().publish(processContext); } else { @@ -254,6 +263,13 @@ protected StateMachineInstance forwardInternal(String stateMachineInstId, Map replayContextVariables(StateMachineInstance stateM Object serviceOutputParams = stateInstance.getOutputParams(); if (serviceOutputParams != null) { ServiceTaskStateImpl state = (ServiceTaskStateImpl)stateMachineInstance.getStateMachine().getState( - stateInstance.getName()); + EngineUtils.getOriginStateName(stateInstance)); if (state == null) { throw new EngineExecutionException( "Cannot find State by state name [" + stateInstance.getName() + "], may be this is a bug", diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/StateMachineProcessHandler.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/StateMachineProcessHandler.java index 4a2cbad36d7..9bee552b32b 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/StateMachineProcessHandler.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/StateMachineProcessHandler.java @@ -25,6 +25,7 @@ import io.seata.saga.engine.pcext.handlers.ChoiceStateHandler; import io.seata.saga.engine.pcext.handlers.CompensationTriggerStateHandler; import io.seata.saga.engine.pcext.handlers.FailEndStateHandler; +import io.seata.saga.engine.pcext.handlers.LoopStartStateHandler; import io.seata.saga.engine.pcext.handlers.ScriptTaskStateHandler; import io.seata.saga.engine.pcext.handlers.ServiceTaskStateHandler; import io.seata.saga.engine.pcext.handlers.SubStateMachineHandler; @@ -96,6 +97,7 @@ public void initDefaultHandlers() { stateHandlers.put(DomainConstants.STATE_TYPE_SUCCEED, new SucceedEndStateHandler()); stateHandlers.put(DomainConstants.STATE_TYPE_FAIL, new FailEndStateHandler()); stateHandlers.put(DomainConstants.STATE_TYPE_COMPENSATION_TRIGGER, new CompensationTriggerStateHandler()); + stateHandlers.put(DomainConstants.STATE_TYPE_LOOP_START, new LoopStartStateHandler()); } } diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/StateMachineProcessRouter.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/StateMachineProcessRouter.java index ff2873c3fb7..b36081fc4a8 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/StateMachineProcessRouter.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/StateMachineProcessRouter.java @@ -113,6 +113,7 @@ public void initDefaultStateRouters() { this.stateRouters.put(DomainConstants.STATE_TYPE_COMPENSATION_TRIGGER, taskStateRouter); this.stateRouters.put(DomainConstants.STATE_TYPE_SUB_STATE_MACHINE, taskStateRouter); this.stateRouters.put(DomainConstants.STATE_TYPE_SUB_MACHINE_COMPENSATION, taskStateRouter); + this.stateRouters.put(DomainConstants.STATE_TYPE_LOOP_START, taskStateRouter); this.stateRouters.put(DomainConstants.STATE_TYPE_SUCCEED, new EndStateRouter()); this.stateRouters.put(DomainConstants.STATE_TYPE_FAIL, new EndStateRouter()); diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/handlers/LoopStartStateHandler.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/handlers/LoopStartStateHandler.java new file mode 100644 index 00000000000..cdfebf32f13 --- /dev/null +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/handlers/LoopStartStateHandler.java @@ -0,0 +1,165 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.saga.engine.pcext.handlers; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Semaphore; +import java.util.concurrent.TimeUnit; + +import io.seata.common.exception.FrameworkErrorCode; +import io.seata.common.util.StringUtils; +import io.seata.saga.engine.StateMachineConfig; +import io.seata.saga.engine.exception.EngineExecutionException; +import io.seata.saga.engine.pcext.StateHandler; +import io.seata.saga.engine.pcext.StateInstruction; +import io.seata.saga.engine.pcext.utils.EngineUtils; +import io.seata.saga.engine.pcext.utils.LoopContextHolder; +import io.seata.saga.engine.pcext.utils.LoopTaskUtils; +import io.seata.saga.proctrl.HierarchicalProcessContext; +import io.seata.saga.proctrl.ProcessContext; +import io.seata.saga.proctrl.impl.ProcessContextImpl; +import io.seata.saga.statelang.domain.DomainConstants; +import io.seata.saga.statelang.domain.StateMachineInstance; +import io.seata.saga.statelang.domain.TaskState.Loop; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Loop State Handler + * Start Loop Execution + * + * @author anselleeyy + */ +public class LoopStartStateHandler implements StateHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(LoopStartStateHandler.class); + private static final int AWAIT_TIMEOUT = 1000; + + @Override + public void process(ProcessContext context) throws EngineExecutionException { + + StateInstruction instruction = context.getInstruction(StateInstruction.class); + StateMachineInstance stateMachineInstance = (StateMachineInstance)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_INST); + StateMachineConfig stateMachineConfig = (StateMachineConfig)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_CONFIG); + + instruction.setTemporaryState(null); + + Loop loop = LoopTaskUtils.getLoopConfig(context, instruction.getState(context)); + LoopContextHolder loopContextHolder = LoopContextHolder.getCurrent(context, true); + Semaphore semaphore = null; + int maxInstances = 0; + List loopContextList = new ArrayList<>(); + + if (null != loop) { + + if (!stateMachineConfig.isEnableAsync() || null == stateMachineConfig.getAsyncProcessCtrlEventPublisher()) { + throw new EngineExecutionException( + "Asynchronous start is disabled. Loop execution will run asynchronous, please set " + + "StateMachineConfig.enableAsync=true first.", FrameworkErrorCode.AsynchronousStartDisabled); + } + + int totalInstances; + if (DomainConstants.OPERATION_NAME_FORWARD.equals(context.getVariable(DomainConstants.VAR_NAME_OPERATION_NAME))) { + LoopTaskUtils.reloadLoopContext(context, instruction.getState(context).getName()); + totalInstances = loopContextHolder.getNrOfInstances().get() - loopContextHolder.getNrOfCompletedInstances().get(); + } else { + LoopTaskUtils.createLoopCounterContext(context); + totalInstances = loopContextHolder.getNrOfInstances().get(); + } + maxInstances = Math.min(loop.getParallel(), totalInstances); + semaphore = new Semaphore(maxInstances); + context.setVariable(DomainConstants.LOOP_SEMAPHORE, semaphore); + context.setVariable(DomainConstants.VAR_NAME_IS_LOOP_STATE, true); + + // publish loop tasks + for (int i = 0; i < totalInstances; i++) { + try { + semaphore.acquire(); + + ProcessContextImpl tempContext; + // fail end inst should be forward without completion condition check + if (!loopContextHolder.getForwardCounterStack().isEmpty()) { + int failEndLoopCounter = loopContextHolder.getForwardCounterStack().pop(); + tempContext = (ProcessContextImpl)LoopTaskUtils.createLoopEventContext(context, failEndLoopCounter); + } else if (loopContextHolder.isFailEnd() || LoopTaskUtils.isCompletionConditionSatisfied(context)) { + semaphore.release(); + break; + } else { + tempContext = (ProcessContextImpl)LoopTaskUtils.createLoopEventContext(context, -1); + } + + if (DomainConstants.OPERATION_NAME_FORWARD.equals(context.getVariable(DomainConstants.VAR_NAME_OPERATION_NAME))) { + ((HierarchicalProcessContext)context).setVariableLocally( + DomainConstants.VAR_NAME_IS_FOR_SUB_STATMACHINE_FORWARD, LoopTaskUtils.isForSubStateMachineForward(tempContext)); + } + stateMachineConfig.getAsyncProcessCtrlEventPublisher().publish(tempContext); + loopContextHolder.getNrOfActiveInstances().incrementAndGet(); + loopContextList.add(tempContext); + } catch (InterruptedException e) { + LOGGER.error("try execute loop task for State: [{}] is interrupted, message: [{}]", + instruction.getStateName(), e.getMessage()); + throw new EngineExecutionException(e); + } + } + } else { + LOGGER.warn("Loop config of State [{}] is illegal, will execute as normal", instruction.getStateName()); + instruction.setTemporaryState(instruction.getState(context)); + } + + try { + if (null != semaphore) { + boolean isFinished = false; + while (!isFinished) { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("wait {}ms for loop state [{}] finish", AWAIT_TIMEOUT, instruction.getStateName()); + } + isFinished = semaphore.tryAcquire(maxInstances, AWAIT_TIMEOUT, TimeUnit.MILLISECONDS); + } + + if (loopContextList.size() > 0) { + LoopTaskUtils.putContextToParent(context, loopContextList, instruction.getState(context)); + } + } + } catch (InterruptedException e) { + LOGGER.error("State: [{}] wait loop execution complete is interrupted, message: [{}]", + instruction.getStateName(), e.getMessage()); + throw new EngineExecutionException(e); + } finally { + context.removeVariable(DomainConstants.LOOP_SEMAPHORE); + context.removeVariable(DomainConstants.VAR_NAME_IS_LOOP_STATE); + LoopContextHolder.clearCurrent(context); + } + + if (loopContextHolder.isFailEnd()) { + String currentExceptionRoute = LoopTaskUtils.decideCurrentExceptionRoute(loopContextList, stateMachineInstance.getStateMachine()); + if (StringUtils.isNotBlank(currentExceptionRoute)) { + ((HierarchicalProcessContext)context).setVariableLocally(DomainConstants.VAR_NAME_CURRENT_EXCEPTION_ROUTE, currentExceptionRoute); + } else { + for (ProcessContext processContext : loopContextList) { + if (processContext.hasVariable(DomainConstants.VAR_NAME_CURRENT_EXCEPTION)) { + Exception exception = (Exception)processContext.getVariable(DomainConstants.VAR_NAME_CURRENT_EXCEPTION); + EngineUtils.failStateMachine(context, exception); + break; + } + } + } + } + + } +} diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/handlers/SubStateMachineHandler.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/handlers/SubStateMachineHandler.java index 30b27320a58..00e6506d969 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/handlers/SubStateMachineHandler.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/handlers/SubStateMachineHandler.java @@ -144,7 +144,7 @@ public void process(ProcessContext context) throws EngineExecutionException { private StateMachineInstance callSubStateMachine(Map startParams, StateMachineEngine engine, ProcessContext context, StateInstance stateInstance, SubStateMachine subStateMachine) { - if (!context.hasVariable(DomainConstants.VAR_NAME_IS_FOR_SUB_STATMACHINE_FORWARD)) { + if (!Boolean.TRUE.equals(context.getVariable(DomainConstants.VAR_NAME_IS_FOR_SUB_STATMACHINE_FORWARD))) { return startNewStateMachine(startParams, engine, stateInstance, subStateMachine); } else { context.removeVariable(DomainConstants.VAR_NAME_IS_FOR_SUB_STATMACHINE_FORWARD); diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/interceptors/LoopTaskHandlerInterceptor.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/interceptors/LoopTaskHandlerInterceptor.java new file mode 100644 index 00000000000..a21fda4eaa7 --- /dev/null +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/interceptors/LoopTaskHandlerInterceptor.java @@ -0,0 +1,138 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.saga.engine.pcext.interceptors; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Semaphore; + +import io.seata.common.loader.LoadLevel; +import io.seata.saga.engine.exception.EngineExecutionException; +import io.seata.saga.engine.pcext.InterceptableStateHandler; +import io.seata.saga.engine.pcext.StateHandlerInterceptor; +import io.seata.saga.engine.pcext.StateInstruction; +import io.seata.saga.engine.pcext.handlers.ServiceTaskStateHandler; +import io.seata.saga.engine.pcext.handlers.SubStateMachineHandler; +import io.seata.saga.engine.pcext.utils.CompensationHolder; +import io.seata.saga.engine.pcext.utils.EngineUtils; +import io.seata.saga.engine.pcext.utils.LoopContextHolder; +import io.seata.saga.engine.pcext.utils.LoopTaskUtils; +import io.seata.saga.proctrl.HierarchicalProcessContext; +import io.seata.saga.proctrl.ProcessContext; +import io.seata.saga.statelang.domain.DomainConstants; +import io.seata.saga.statelang.domain.ExecutionStatus; +import io.seata.saga.statelang.domain.StateInstance; +import io.seata.saga.statelang.domain.TaskState.Loop; +import io.seata.saga.statelang.domain.impl.AbstractTaskState; + +/** + * State Interceptor For ServiceTask, SubStateMachine, ScriptTask With Loop Attribute + * + * @author anselleeyy + */ +@LoadLevel(name = "LoopTask", order = 90) +public class LoopTaskHandlerInterceptor implements StateHandlerInterceptor { + + @Override + public boolean match(Class clazz) { + return clazz != null && + (ServiceTaskStateHandler.class.isAssignableFrom(clazz) + || SubStateMachineHandler.class.isAssignableFrom(clazz) + || ScriptTaskHandlerInterceptor.class.isAssignableFrom(clazz)); + } + + @Override + public void preProcess(ProcessContext context) throws EngineExecutionException { + + if (context.hasVariable(DomainConstants.VAR_NAME_IS_LOOP_STATE)) { + StateInstruction instruction = context.getInstruction(StateInstruction.class); + AbstractTaskState currentState = (AbstractTaskState)instruction.getState(context); + + int loopCounter; + Loop loop; + + // get loop config + if (context.hasVariable(DomainConstants.VAR_NAME_CURRENT_COMPEN_TRIGGER_STATE)) { + // compensate condition should get stateToBeCompensated 's config + CompensationHolder compensationHolder = CompensationHolder.getCurrent(context, true); + StateInstance stateToBeCompensated = compensationHolder.getStatesNeedCompensation().get(currentState.getName()); + AbstractTaskState compensateState = (AbstractTaskState)stateToBeCompensated.getStateMachineInstance() + .getStateMachine().getState(EngineUtils.getOriginStateName(stateToBeCompensated)); + loop = compensateState.getLoop(); + loopCounter = LoopTaskUtils.reloadLoopCounter(stateToBeCompensated.getName()); + } else { + loop = currentState.getLoop(); + loopCounter = (int)context.getVariable(DomainConstants.LOOP_COUNTER); + } + + Collection collection = LoopContextHolder.getCurrent(context, true).getCollection(); + Map contextVariables = (Map)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_CONTEXT); + Map copyContextVariables = new ConcurrentHashMap<>(contextVariables); + copyContextVariables.put(loop.getElementIndexName(), loopCounter); + copyContextVariables.put(loop.getElementVariableName(), iterator(collection, loopCounter)); + ((HierarchicalProcessContext)context).setVariableLocally(DomainConstants.VAR_NAME_STATEMACHINE_CONTEXT, copyContextVariables); + } + } + + @Override + public void postProcess(ProcessContext context, Exception e) throws EngineExecutionException { + + if (context.hasVariable(DomainConstants.VAR_NAME_IS_LOOP_STATE)) { + + StateInstance stateInstance = (StateInstance)context.getVariable(DomainConstants.VAR_NAME_STATE_INST); + if (null != stateInstance && !LoopContextHolder.getCurrent(context, true).isFailEnd()) { + if (!ExecutionStatus.SU.equals(stateInstance.getStatus())) { + LoopContextHolder.getCurrent(context, true).setFailEnd(true); + } + } + + Exception exp = (Exception)((HierarchicalProcessContext)context).getVariableLocally(DomainConstants.VAR_NAME_CURRENT_EXCEPTION); + if (exp == null) { + exp = e; + } + + if (null != e) { + if (context.hasVariable(DomainConstants.LOOP_SEMAPHORE)) { + Semaphore semaphore = (Semaphore)context.getVariable(DomainConstants.LOOP_SEMAPHORE); + semaphore.release(); + } + } + + if (null != exp) { + LoopContextHolder.getCurrent(context, true).setFailEnd(true); + } else { + LoopContextHolder.getCurrent(context, true).getNrOfCompletedInstances().incrementAndGet(); + } + LoopContextHolder.getCurrent(context, true).getNrOfActiveInstances().decrementAndGet(); + + } + } + + private Object iterator(Collection collection, int loopCounter) { + Iterator iterator = collection.iterator(); + int index = 0; + Object value = null; + while (index <= loopCounter) { + value = iterator.next(); + index += 1; + } + return value; + } + +} diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/interceptors/ServiceTaskHandlerInterceptor.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/interceptors/ServiceTaskHandlerInterceptor.java index a24064b3b44..075e3d6353e 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/interceptors/ServiceTaskHandlerInterceptor.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/interceptors/ServiceTaskHandlerInterceptor.java @@ -36,6 +36,7 @@ import io.seata.saga.engine.pcext.handlers.SubStateMachineHandler; import io.seata.saga.engine.pcext.utils.CompensationHolder; import io.seata.saga.engine.pcext.utils.EngineUtils; +import io.seata.saga.engine.pcext.utils.LoopTaskUtils; import io.seata.saga.engine.pcext.utils.ParameterUtils; import io.seata.saga.engine.utils.ExceptionUtils; import io.seata.saga.proctrl.HierarchicalProcessContext; @@ -120,14 +121,22 @@ public void preProcess(ProcessContext context) throws EngineExecutionException { stateInstance.setMachineInstanceId(stateMachineInstance.getId()); stateInstance.setStateMachineInstance(stateMachineInstance); - stateInstance.setName(state.getName()); + Object isForCompensation = state.isForCompensation(); + if (context.hasVariable(DomainConstants.VAR_NAME_IS_LOOP_STATE) && !Boolean.TRUE.equals(isForCompensation)) { + stateInstance.setName(LoopTaskUtils.generateLoopStateName(context, state.getName())); + StateInstance lastRetriedStateInstance = LoopTaskUtils.findOutLastRetriedStateInstance(stateMachineInstance, + stateInstance.getName()); + stateInstance.setStateIdRetriedFor( + lastRetriedStateInstance == null ? null : lastRetriedStateInstance.getId()); + } else { + stateInstance.setName(state.getName()); + stateInstance.setStateIdRetriedFor( + (String)context.getVariable(state.getName() + DomainConstants.VAR_NAME_RETRIED_STATE_INST_ID)); + } stateInstance.setGmtStarted(new Date()); stateInstance.setGmtUpdated(stateInstance.getGmtStarted()); stateInstance.setStatus(ExecutionStatus.RU); - stateInstance.setStateIdRetriedFor( - (String)context.getVariable(state.getName() + DomainConstants.VAR_NAME_RETRIED_STATE_INST_ID)); - if (StringUtils.hasLength(stateInstance.getBusinessKey())) { ((Map)context.getVariable(DomainConstants.VAR_NAME_STATEMACHINE_CONTEXT)).put( @@ -141,7 +150,6 @@ public void preProcess(ProcessContext context) throws EngineExecutionException { stateInstance.setServiceMethod(state.getServiceMethod()); stateInstance.setServiceType(state.getServiceType()); - Object isForCompensation = state.isForCompensation(); if (isForCompensation != null && (Boolean)isForCompensation) { CompensationHolder compensationHolder = CompensationHolder.getCurrent(context, true); StateInstance stateToBeCompensated = compensationHolder.getStatesNeedCompensation().get(state.getName()); diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/routers/TaskStateRouter.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/routers/TaskStateRouter.java index 588f7d18425..47c09e3ad1b 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/routers/TaskStateRouter.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/routers/TaskStateRouter.java @@ -23,6 +23,7 @@ import io.seata.saga.engine.pcext.StateRouter; import io.seata.saga.engine.pcext.utils.CompensationHolder; import io.seata.saga.engine.pcext.utils.EngineUtils; +import io.seata.saga.engine.pcext.utils.LoopTaskUtils; import io.seata.saga.proctrl.HierarchicalProcessContext; import io.seata.saga.proctrl.Instruction; import io.seata.saga.proctrl.ProcessContext; @@ -34,6 +35,7 @@ import io.seata.saga.statelang.domain.StateMachine; import io.seata.saga.statelang.domain.SubStateMachine; import io.seata.saga.statelang.domain.impl.AbstractTaskState; +import io.seata.saga.statelang.domain.impl.LoopStartStateImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; @@ -60,6 +62,11 @@ public Instruction route(ProcessContext context, State state) throws EngineExecu return null; } + // check if in loop async condition + if (Boolean.TRUE.equals(context.getVariable(DomainConstants.VAR_NAME_IS_LOOP_STATE))) { + return null; + } + //The current CompensationTriggerState can mark the compensation process is started and perform compensation // route processing. State compensationTriggerState = (State)context.getVariable( @@ -97,6 +104,10 @@ public Instruction route(ProcessContext context, State state) throws EngineExecu stateInstruction.setStateName(next); + if (null != LoopTaskUtils.getLoopConfig(context, nextState)) { + stateInstruction.setTemporaryState(new LoopStartStateImpl()); + } + return stateInstruction; } @@ -127,7 +138,7 @@ private Instruction compensateRoute(ProcessContext context, State compensationTr StateInstance stateToBeCompensated = stateStackToBeCompensated.pop(); StateMachine stateMachine = (StateMachine)context.getVariable(DomainConstants.VAR_NAME_STATEMACHINE); - State state = stateMachine.getState(stateToBeCompensated.getName()); + State state = stateMachine.getState(EngineUtils.getOriginStateName(stateToBeCompensated)); if (state != null && state instanceof AbstractTaskState) { AbstractTaskState taskState = (AbstractTaskState)state; @@ -180,4 +191,5 @@ private Instruction compensateRoute(ProcessContext context, State compensationTr instruction.setStateName(compensationTriggerStateNext); return instruction; } + } \ No newline at end of file diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/CompensationHolder.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/CompensationHolder.java index 852ae2ad072..177f41f119c 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/CompensationHolder.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/CompensationHolder.java @@ -89,7 +89,7 @@ public static List findStateInstListToBeCompensated(ProcessContex for (StateInstance stateInstance : stateInstanceList) { if (stateNeedToCompensate(stateInstance)) { - State state = stateMachine.getState(stateInstance.getName()); + State state = stateMachine.getState(EngineUtils.getOriginStateName(stateInstance)); AbstractTaskState taskState = null; if (state instanceof AbstractTaskState) { taskState = (AbstractTaskState)state; diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/EngineUtils.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/EngineUtils.java index bcbf0d15ddd..e29f5f8172b 100644 --- a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/EngineUtils.java +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/EngineUtils.java @@ -19,13 +19,14 @@ import java.util.Date; import java.util.List; import java.util.Map; +import java.util.concurrent.Semaphore; import io.seata.common.util.CollectionUtils; +import io.seata.common.util.StringUtils; import io.seata.saga.engine.AsyncCallback; import io.seata.saga.engine.StateMachineConfig; import io.seata.saga.engine.pcext.StateInstruction; import io.seata.saga.engine.pcext.handlers.ScriptTaskStateHandler; -import io.seata.saga.engine.utils.ExceptionUtils; import io.seata.saga.proctrl.HierarchicalProcessContext; import io.seata.saga.proctrl.ProcessContext; import io.seata.saga.statelang.domain.DomainConstants; @@ -42,7 +43,7 @@ */ public class EngineUtils { - private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionUtils.class); + private static final Logger LOGGER = LoggerFactory.getLogger(EngineUtils.class); /** * generate parent id @@ -54,6 +55,24 @@ public static String generateParentId(StateInstance stateInstance) { return stateInstance.getMachineInstanceId() + DomainConstants.SEPERATOR_PARENT_ID + stateInstance.getId(); } + /** + * get origin state name without suffix like fork + * + * @param stateInstance + * @return + * @see LoopTaskUtils#generateLoopStateName(ProcessContext, String) + */ + public static String getOriginStateName(StateInstance stateInstance) { + String stateName = stateInstance.getName(); + if (StringUtils.isNotBlank(stateName)) { + int end = stateName.lastIndexOf(LoopTaskUtils.LOOP_STATE_NAME_PATTERN); + if (end > -1) { + return stateName.substring(0, end); + } + } + return stateName; + } + /** * end StateMachine * @@ -61,6 +80,14 @@ public static String generateParentId(StateInstance stateInstance) { */ public static void endStateMachine(ProcessContext context) { + if (context.hasVariable(DomainConstants.VAR_NAME_IS_LOOP_STATE)) { + if (context.hasVariable(DomainConstants.LOOP_SEMAPHORE)) { + Semaphore semaphore = (Semaphore)context.getVariable(DomainConstants.LOOP_SEMAPHORE); + semaphore.release(); + } + return; + } + StateMachineInstance stateMachineInstance = (StateMachineInstance)context.getVariable( DomainConstants.VAR_NAME_STATEMACHINE_INST); @@ -110,6 +137,10 @@ public static void endStateMachine(ProcessContext context) { */ public static void failStateMachine(ProcessContext context, Exception exp) { + if (context.hasVariable(DomainConstants.VAR_NAME_IS_LOOP_STATE)) { + return; + } + StateMachineInstance stateMachineInstance = (StateMachineInstance)context.getVariable( DomainConstants.VAR_NAME_STATEMACHINE_INST); diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/LoopContextHolder.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/LoopContextHolder.java new file mode 100644 index 00000000000..fdd69f44f48 --- /dev/null +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/LoopContextHolder.java @@ -0,0 +1,105 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.saga.engine.pcext.utils; + +import java.util.Collection; +import java.util.Stack; +import java.util.concurrent.atomic.AtomicInteger; + +import io.seata.saga.proctrl.ProcessContext; +import io.seata.saga.statelang.domain.DomainConstants; + +/** + * Loop Context Holder for Loop Attributes + * + * @author anselleeyy + */ +public class LoopContextHolder { + + private final AtomicInteger nrOfInstances = new AtomicInteger(); + private final AtomicInteger nrOfActiveInstances = new AtomicInteger(); + private final AtomicInteger nrOfCompletedInstances = new AtomicInteger(); + private volatile boolean failEnd = false; + private volatile boolean completionConditionSatisfied = false; + private final Stack loopCounterStack = new Stack<>(); + private final Stack forwardCounterStack = new Stack<>(); + private Collection collection; + + public static LoopContextHolder getCurrent(ProcessContext context, boolean forceCreate) { + LoopContextHolder loopContextHolder = (LoopContextHolder)context.getVariable( + DomainConstants.VAR_NAME_CURRENT_LOOP_CONTEXT_HOLDER); + + if (null == loopContextHolder && forceCreate) { + synchronized (context) { + loopContextHolder = (LoopContextHolder)context.getVariable( + DomainConstants.VAR_NAME_CURRENT_LOOP_CONTEXT_HOLDER); + if (null == loopContextHolder) { + loopContextHolder = new LoopContextHolder(); + context.setVariable(DomainConstants.VAR_NAME_CURRENT_LOOP_CONTEXT_HOLDER, loopContextHolder); + } + } + } + return loopContextHolder; + } + + public static void clearCurrent(ProcessContext context) { + context.removeVariable(DomainConstants.VAR_NAME_CURRENT_LOOP_CONTEXT_HOLDER); + } + + public AtomicInteger getNrOfInstances() { + return nrOfInstances; + } + + public AtomicInteger getNrOfActiveInstances() { + return nrOfActiveInstances; + } + + public AtomicInteger getNrOfCompletedInstances() { + return nrOfCompletedInstances; + } + + public boolean isFailEnd() { + return failEnd; + } + + public void setFailEnd(boolean failEnd) { + this.failEnd = failEnd; + } + + public boolean isCompletionConditionSatisfied() { + return completionConditionSatisfied; + } + + public void setCompletionConditionSatisfied(boolean completionConditionSatisfied) { + this.completionConditionSatisfied = completionConditionSatisfied; + } + + public Stack getLoopCounterStack() { + return loopCounterStack; + } + + public Stack getForwardCounterStack() { + return forwardCounterStack; + } + + public Collection getCollection() { + return collection; + } + + public void setCollection(Collection collection) { + this.collection = collection; + } +} diff --git a/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/LoopTaskUtils.java b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/LoopTaskUtils.java new file mode 100644 index 00000000000..152cb3f5d99 --- /dev/null +++ b/saga/seata-saga-engine/src/main/java/io/seata/saga/engine/pcext/utils/LoopTaskUtils.java @@ -0,0 +1,429 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.saga.engine.pcext.utils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.EmptyStackException; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +import io.seata.common.exception.FrameworkErrorCode; +import io.seata.common.util.CollectionUtils; +import io.seata.common.util.NumberUtils; +import io.seata.common.util.StringUtils; +import io.seata.saga.engine.StateMachineConfig; +import io.seata.saga.engine.evaluation.EvaluatorFactoryManager; +import io.seata.saga.engine.evaluation.expression.ExpressionEvaluator; +import io.seata.saga.engine.exception.ForwardInvalidException; +import io.seata.saga.engine.pcext.StateInstruction; +import io.seata.saga.proctrl.ProcessContext; +import io.seata.saga.proctrl.impl.ProcessContextImpl; +import io.seata.saga.statelang.domain.DomainConstants; +import io.seata.saga.statelang.domain.ExecutionStatus; +import io.seata.saga.statelang.domain.State; +import io.seata.saga.statelang.domain.StateInstance; +import io.seata.saga.statelang.domain.StateMachine; +import io.seata.saga.statelang.domain.StateMachineInstance; +import io.seata.saga.statelang.domain.TaskState.Loop; +import io.seata.saga.statelang.domain.impl.AbstractTaskState; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Loop Task Util + * + * @author anselleeyy + */ +public class LoopTaskUtils { + + private static final Logger LOGGER = LoggerFactory.getLogger(LoopTaskUtils.class); + + private static final String DEFAULT_COMPLETION_CONDITION = "[nrOfInstances] == [nrOfCompletedInstances]"; + public static final String LOOP_STATE_NAME_PATTERN = "-loop-"; + + private static final Map EXPRESSION_EVALUATOR_MAP = new ConcurrentHashMap<>(); + + /** + * get Loop Config from State + * + * @param context + * @param currentState + * @return currentState loop config if satisfied, else {@literal null} + */ + public static Loop getLoopConfig(ProcessContext context, State currentState) { + if (matchLoop(currentState)) { + AbstractTaskState taskState = (AbstractTaskState)currentState; + + StateMachineInstance stateMachineInstance = (StateMachineInstance)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_INST); + StateMachineConfig stateMachineConfig = (StateMachineConfig)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_CONFIG); + + if (null != taskState.getLoop()) { + Loop loop = taskState.getLoop(); + String collectionName = loop.getCollection(); + if (StringUtils.isNotBlank(collectionName)) { + Object expression = ParameterUtils.createValueExpression( + stateMachineConfig.getExpressionFactoryManager(), collectionName); + Object collection = ParameterUtils.getValue(expression, stateMachineInstance.getContext(), null); + if (collection instanceof Collection && ((Collection)collection).size() > 0) { + LoopContextHolder.getCurrent(context, true).setCollection((Collection)collection); + return loop; + } + } + LOGGER.warn("State [{}] loop collection param [{}] invalid", currentState.getName(), collectionName); + } + } + return null; + } + + /** + * match if state has loop property + * + * @param state + * @return + */ + public static boolean matchLoop(State state) { + return state != null && (DomainConstants.STATE_TYPE_SERVICE_TASK.equals(state.getType()) + || DomainConstants.STATE_TYPE_SCRIPT_TASK.equals(state.getType()) + || DomainConstants.STATE_TYPE_SUB_STATE_MACHINE.equals(state.getType())); + } + + /** + * create loop counter context + * + * @param context + */ + public static void createLoopCounterContext(ProcessContext context) { + LoopContextHolder contextHolder = LoopContextHolder.getCurrent(context, true); + Collection collection = contextHolder.getCollection(); + contextHolder.getNrOfInstances().set(collection.size()); + + for (int i = collection.size() - 1; i >= 0; i--) { + contextHolder.getLoopCounterStack().push(i); + } + } + + + /** + * reload loop counter context while forward + * + * @param context + * @param forwardStateName + */ + public static void reloadLoopContext(ProcessContext context, String forwardStateName) { + + StateMachineInstance stateMachineInstance = (StateMachineInstance)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_INST); + + List actList = stateMachineInstance.getStateList(); + List forwardStateList = actList.stream().filter( + e -> forwardStateName.equals(EngineUtils.getOriginStateName(e))).collect(Collectors.toList()); + + LoopContextHolder loopContextHolder = LoopContextHolder.getCurrent(context, true); + Collection collection = loopContextHolder.getCollection(); + + LinkedList list = new LinkedList<>(); + for (int i = 0; i < collection.size(); i++) { + list.addFirst(i); + } + int executedNumber = 0; + LinkedList failEndList = new LinkedList<>(); + for (StateInstance stateInstance : forwardStateList) { + if (!stateInstance.isIgnoreStatus()) { + if (ExecutionStatus.SU.equals(stateInstance.getStatus())) { + executedNumber += 1; + } else { + stateInstance.setIgnoreStatus(true); + failEndList.addFirst(reloadLoopCounter(stateInstance.getName())); + } + list.remove(Integer.valueOf(reloadLoopCounter(stateInstance.getName()))); + } + } + + loopContextHolder.getLoopCounterStack().addAll(list); + loopContextHolder.getForwardCounterStack().addAll(failEndList); + loopContextHolder.getNrOfInstances().set(collection.size()); + loopContextHolder.getNrOfCompletedInstances().set(executedNumber); + } + + /** + * create context for async publish + * + * @param context + * @param loopCounter acquire new counter if is -1, else means a specific loop-counter + * @return + */ + public static ProcessContext createLoopEventContext(ProcessContext context, int loopCounter) { + ProcessContextImpl copyContext = new ProcessContextImpl(); + copyContext.setParent(context); + copyContext.setVariableLocally(DomainConstants.LOOP_COUNTER, loopCounter >= 0 ? loopCounter : acquireNextLoopCounter(context)); + copyContext.setInstruction(copyInstruction(context.getInstruction(StateInstruction.class))); + return copyContext; + } + + public static StateInstance findOutLastNeedForwardStateInstance(ProcessContext context) { + StateMachineInstance stateMachineInstance = (StateMachineInstance)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_INST); + StateInstance lastForwardState = (StateInstance)context.getVariable(DomainConstants.VAR_NAME_STATE_INST); + + List actList = stateMachineInstance.getStateList(); + for (int i = actList.size() - 1; i >= 0; i--) { + StateInstance stateInstance = actList.get(i); + if (EngineUtils.getOriginStateName(stateInstance).equals(EngineUtils.getOriginStateName(lastForwardState)) + && !ExecutionStatus.SU.equals(stateInstance.getStatus())) { + return stateInstance; + } + } + return lastForwardState; + } + + public static StateInstance findOutLastRetriedStateInstance(StateMachineInstance stateMachineInstance, + String stateName) { + List actList = stateMachineInstance.getStateList(); + for (int i = actList.size() - 1; i >= 0; i--) { + StateInstance stateInstance = actList.get(i); + if (stateInstance.getName().equals(stateName)) { + return stateInstance; + } + } + return null; + } + + /** + * check if satisfied completion condition + * + * @param context + * @return + */ + public static boolean isCompletionConditionSatisfied(ProcessContext context) { + + StateInstruction instruction = context.getInstruction(StateInstruction.class); + AbstractTaskState currentState = (AbstractTaskState)instruction.getState(context); + LoopContextHolder currentLoopContext = LoopContextHolder.getCurrent(context, true); + + if (currentLoopContext.isCompletionConditionSatisfied()) { + return true; + } + + int nrOfInstances = currentLoopContext.getNrOfInstances().get(); + int nrOfActiveInstances = currentLoopContext.getNrOfActiveInstances().get(); + int nrOfCompletedInstances = currentLoopContext.getNrOfCompletedInstances().get(); + + if (!currentLoopContext.isCompletionConditionSatisfied()) { + synchronized (currentLoopContext) { + if (!currentLoopContext.isCompletionConditionSatisfied()) { + Map stateMachineContext = (Map)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_CONTEXT); + // multi-instance variables should be double/float while evaluate + stateMachineContext.put(DomainConstants.NUMBER_OF_INSTANCES, (double)nrOfInstances); + stateMachineContext.put(DomainConstants.NUMBER_OF_ACTIVE_INSTANCES, (double)nrOfActiveInstances); + stateMachineContext.put(DomainConstants.NUMBER_OF_COMPLETED_INSTANCES, + (double)nrOfCompletedInstances); + + if (nrOfCompletedInstances >= nrOfInstances || getEvaluator(context, + currentState.getLoop().getCompletionCondition()).evaluate(stateMachineContext)) { + currentLoopContext.setCompletionConditionSatisfied(true); + } + } + } + } + + return currentLoopContext.isCompletionConditionSatisfied(); + } + + public static int acquireNextLoopCounter(ProcessContext context) { + try { + return LoopContextHolder.getCurrent(context, true).getLoopCounterStack().pop(); + } catch (EmptyStackException e) { + return -1; + } + } + + /** + * generate loop state name like stateName-fork-1 + * + * @param stateName + * @param context + * @return + */ + public static String generateLoopStateName(ProcessContext context, String stateName) { + if (StringUtils.isNotBlank(stateName)) { + int loopCounter = (int)context.getVariable(DomainConstants.LOOP_COUNTER); + return stateName + LOOP_STATE_NAME_PATTERN + loopCounter; + } + return stateName; + } + + /** + * reload context loop counter from stateInstName + * + * @param stateName + * @return + * @see #generateLoopStateName(ProcessContext, String) + */ + public static int reloadLoopCounter(String stateName) { + if (StringUtils.isNotBlank(stateName)) { + int end = stateName.lastIndexOf(LOOP_STATE_NAME_PATTERN); + if (end > -1) { + String loopCounter = stateName.substring(end + LOOP_STATE_NAME_PATTERN.length()); + return NumberUtils.toInt(loopCounter, -1); + } + } + return -1; + } + + /** + * put loop out params to parent context + * + * @param context + */ + public static void putContextToParent(ProcessContext context, List subContextList, State state) { + + Map contextVariables = (Map)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_CONTEXT); + if (CollectionUtils.isNotEmpty(subContextList)) { + + StateMachineConfig stateMachineConfig = (StateMachineConfig)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_CONFIG); + + List> subContextVariables = new ArrayList<>(); + for (ProcessContext subProcessContext : subContextList) { + StateInstance stateInstance = (StateInstance)subProcessContext.getVariable(DomainConstants.VAR_NAME_STATE_INST); + + Map outputVariablesToContext = ParameterUtils.createOutputParams( + stateMachineConfig.getExpressionFactoryManager(), (AbstractTaskState)state, stateInstance.getOutputParams()); + subContextVariables.add(outputVariablesToContext); + } + + contextVariables.put(DomainConstants.LOOP_RESULT, subContextVariables); + } + + } + + /** + * forward with subStateMachine should check each loop state's status + * + * @param context + * @return + */ + public static boolean isForSubStateMachineForward(ProcessContext context) { + + StateMachineInstance stateMachineInstance = (StateMachineInstance)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_INST); + StateInstruction instruction = context.getInstruction(StateInstruction.class); + StateMachineConfig stateMachineConfig = (StateMachineConfig)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_CONFIG); + + StateInstance lastRetriedStateInstance = LoopTaskUtils.findOutLastRetriedStateInstance( + stateMachineInstance, LoopTaskUtils.generateLoopStateName(context, instruction.getStateName())); + + if (null != lastRetriedStateInstance && DomainConstants.STATE_TYPE_SUB_STATE_MACHINE.equals( + lastRetriedStateInstance.getType()) && !ExecutionStatus.SU.equals( + lastRetriedStateInstance.getCompensationStatus())) { + + while (StringUtils.isNotBlank(lastRetriedStateInstance.getStateIdRetriedFor())) { + lastRetriedStateInstance = stateMachineConfig.getStateLogStore().getStateInstance( + lastRetriedStateInstance.getStateIdRetriedFor(), lastRetriedStateInstance.getMachineInstanceId()); + } + + List subInst = stateMachineConfig.getStateLogStore() + .queryStateMachineInstanceByParentId(EngineUtils.generateParentId(lastRetriedStateInstance)); + if (CollectionUtils.isNotEmpty(subInst)) { + if (ExecutionStatus.SU.equals(subInst.get(0).getCompensationStatus())) { + return false; + } + } + + if (ExecutionStatus.UN.equals(subInst.get(0).getCompensationStatus())) { + throw new ForwardInvalidException( + "Last forward execution state instance is SubStateMachine and compensation status is " + + "[UN], Operation[forward] denied, stateInstanceId:" + + lastRetriedStateInstance.getId(), FrameworkErrorCode.OperationDenied); + } + + return true; + } + return false; + } + + /** + * decide current exception route for loop publish over + * + * @param subContextList + * @param stateMachine + * @return route if current exception route not null + */ + public static String decideCurrentExceptionRoute(List subContextList, StateMachine stateMachine) { + + String route = null; + if (CollectionUtils.isNotEmpty(subContextList)) { + + for (ProcessContext processContext : subContextList) { + String next = (String)processContext.getVariable(DomainConstants.VAR_NAME_CURRENT_EXCEPTION_ROUTE); + if (StringUtils.isNotBlank(next)) { + + // compensate must be execute + State state = stateMachine.getState(next); + if (DomainConstants.STATE_TYPE_COMPENSATION_TRIGGER.equals(state.getType())) { + route = next; + break; + } else if (null == route) { + route = next; + } + } + } + } + return route; + } + + /** + * get loop completion condition evaluator + * + * @param context + * @param completionCondition + * @return + */ + private static ExpressionEvaluator getEvaluator(ProcessContext context, String completionCondition) { + if (StringUtils.isBlank(completionCondition)) { + completionCondition = DEFAULT_COMPLETION_CONDITION; + } + if (!EXPRESSION_EVALUATOR_MAP.containsKey(completionCondition)) { + StateMachineConfig stateMachineConfig = (StateMachineConfig)context.getVariable( + DomainConstants.VAR_NAME_STATEMACHINE_CONFIG); + ExpressionEvaluator expressionEvaluator = (ExpressionEvaluator)stateMachineConfig + .getEvaluatorFactoryManager().getEvaluatorFactory(EvaluatorFactoryManager.EVALUATOR_TYPE_DEFAULT) + .createEvaluator(completionCondition); + expressionEvaluator.setRootObjectName(null); + EXPRESSION_EVALUATOR_MAP.put(completionCondition, expressionEvaluator); + } + return EXPRESSION_EVALUATOR_MAP.get(completionCondition); + } + + private static StateInstruction copyInstruction(StateInstruction instruction) { + StateInstruction targetInstruction = new StateInstruction(); + targetInstruction.setStateMachineName(instruction.getStateMachineName()); + targetInstruction.setTenantId(instruction.getTenantId()); + targetInstruction.setStateName(instruction.getStateName()); + targetInstruction.setTemporaryState(instruction.getTemporaryState()); + return targetInstruction; + } + +} \ No newline at end of file diff --git a/saga/seata-saga-engine/src/main/resources/META-INF/services/io.seata.saga.engine.pcext.StateHandlerInterceptor b/saga/seata-saga-engine/src/main/resources/META-INF/services/io.seata.saga.engine.pcext.StateHandlerInterceptor index f55c75b9589..43ee09701b8 100644 --- a/saga/seata-saga-engine/src/main/resources/META-INF/services/io.seata.saga.engine.pcext.StateHandlerInterceptor +++ b/saga/seata-saga-engine/src/main/resources/META-INF/services/io.seata.saga.engine.pcext.StateHandlerInterceptor @@ -1,2 +1,3 @@ io.seata.saga.engine.pcext.interceptors.ServiceTaskHandlerInterceptor -io.seata.saga.engine.pcext.interceptors.ScriptTaskHandlerInterceptor \ No newline at end of file +io.seata.saga.engine.pcext.interceptors.ScriptTaskHandlerInterceptor +io.seata.saga.engine.pcext.interceptors.LoopTaskHandlerInterceptor \ No newline at end of file diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/DomainConstants.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/DomainConstants.java index 75af6b090f5..586fb8e5fe2 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/DomainConstants.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/DomainConstants.java @@ -31,6 +31,7 @@ public interface DomainConstants { String STATE_TYPE_SUB_STATE_MACHINE = "SubStateMachine"; String STATE_TYPE_SUB_MACHINE_COMPENSATION = "CompensateSubMachine"; String STATE_TYPE_SCRIPT_TASK = "ScriptTask"; + String STATE_TYPE_LOOP_START = "LoopStart"; //endregion String COMPENSATE_SUB_MACHINE_STATE_NAME_PREFIX = "_compensate_sub_machine_state_"; @@ -68,8 +69,19 @@ public interface DomainConstants { String VAR_NAME_FIRST_COMPENSATION_STATE_STARTED = "_first_compensation_state_started"; String VAR_NAME_GLOBAL_TX = "_global_transaction_"; String VAR_NAME_IS_ASYNC_EXECUTION = "_is_async_execution_"; + String VAR_NAME_IS_LOOP_STATE = "_is_loop_state_"; + String VAR_NAME_CURRENT_LOOP_CONTEXT_HOLDER = "_current_loop_context_holder_"; //endregion + // region of loop + String LOOP_COUNTER = "loopCounter"; + String LOOP_SEMAPHORE = "loopSemaphore"; + String LOOP_RESULT = "loopResult"; + String NUMBER_OF_INSTANCES = "nrOfInstances"; + String NUMBER_OF_ACTIVE_INSTANCES = "nrOfActiveInstances"; + String NUMBER_OF_COMPLETED_INSTANCES = "nrOfCompletedInstances"; + // endregion + String OPERATION_NAME_START = "start"; String OPERATION_NAME_FORWARD = "forward"; String OPERATION_NAME_COMPENSATE = "compensate"; diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/LoopStartState.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/LoopStartState.java new file mode 100644 index 00000000000..f86d30c2e7b --- /dev/null +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/LoopStartState.java @@ -0,0 +1,25 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.saga.statelang.domain; + +/** + * Loop Starter + * + * @author anselleeyy + */ +public interface LoopStartState extends State { + +} diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/TaskState.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/TaskState.java index 7ea887b6158..a708d6544cc 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/TaskState.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/TaskState.java @@ -67,6 +67,13 @@ public interface TaskState extends State { */ Map getStatus(); + /** + * loop strategy + * + * @return + */ + Loop getLoop(); + /** * retry strategy */ @@ -173,4 +180,45 @@ interface StatusMatch { */ String getExpressionType(); } + + /** + * loop strategy + */ + interface Loop { + + /** + * parallel size, default 1 + * + * @return + */ + int getParallel(); + + /** + * collection object name + * + * @return + */ + String getCollection(); + + /** + * element variable name + * + * @return + */ + String getElementVariableName(); + + /** + * element variable index name, default loopCounter + * + * @return + */ + String getElementIndexName(); + + /** + * completion condition, default nrOfInstances == nrOfCompletedInstances + * + * @return + */ + String getCompletionCondition(); + } } \ No newline at end of file diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/AbstractTaskState.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/AbstractTaskState.java index 173ce6e9b90..e509cd9314e 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/AbstractTaskState.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/AbstractTaskState.java @@ -41,6 +41,7 @@ public abstract class AbstractTaskState extends BaseState implements TaskState { private boolean isPersist = true; private Boolean retryPersistModeUpdate; private Boolean compensatePersistModeUpdate; + private Loop loop; @Override public String getCompensateState() { @@ -147,7 +148,6 @@ public void setOutputExpressions(Map outputExpressions) { this.outputExpressions = outputExpressions; } - @Override public Map getStatus() { return status; @@ -157,6 +157,15 @@ public void setStatus(Map status) { this.status = status; } + @Override + public Loop getLoop() { + return loop; + } + + public void setLoop(Loop loop) { + this.loop = loop; + } + public static class RetryImpl implements Retry { private List exceptions; @@ -246,4 +255,58 @@ public void setNext(String next) { this.next = next; } } + + public static class LoopImpl implements Loop { + + private int parallel; + private String collection; + private String elementVariableName; + private String elementIndexName; + private String completionCondition; + + @Override + public int getParallel() { + return parallel; + } + + public void setParallel(int parallel) { + this.parallel = parallel; + } + + @Override + public String getCollection() { + return collection; + } + + public void setCollection(String collection) { + this.collection = collection; + } + + @Override + public String getElementVariableName() { + return elementVariableName; + } + + public void setElementVariableName(String elementVariableName) { + this.elementVariableName = elementVariableName; + } + + @Override + public String getElementIndexName() { + return elementIndexName; + } + + public void setElementIndexName(String elementIndexName) { + this.elementIndexName = elementIndexName; + } + + @Override + public String getCompletionCondition() { + return completionCondition; + } + + public void setCompletionCondition(String completionCondition) { + this.completionCondition = completionCondition; + } + } } \ No newline at end of file diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/LoopStartStateImpl.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/LoopStartStateImpl.java new file mode 100644 index 00000000000..e765ed54800 --- /dev/null +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/domain/impl/LoopStartStateImpl.java @@ -0,0 +1,32 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.saga.statelang.domain.impl; + +import io.seata.saga.statelang.domain.DomainConstants; +import io.seata.saga.statelang.domain.LoopStartState; + +/** + * Start the "loop" execution for the state with loop attribute + * + * @author anselleeyy + */ +public class LoopStartStateImpl extends BaseState implements LoopStartState { + + public LoopStartStateImpl() { + setType(DomainConstants.STATE_TYPE_LOOP_START); + } + +} diff --git a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/AbstractTaskStateParser.java b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/AbstractTaskStateParser.java index 3f1065e7829..3632ff68f1a 100644 --- a/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/AbstractTaskStateParser.java +++ b/saga/seata-saga-statelang/src/main/java/io/seata/saga/statelang/parser/impl/AbstractTaskStateParser.java @@ -19,10 +19,13 @@ import java.util.List; import java.util.Map; +import io.seata.common.util.NumberUtils; import io.seata.saga.statelang.domain.TaskState.ExceptionMatch; +import io.seata.saga.statelang.domain.TaskState.Loop; import io.seata.saga.statelang.domain.TaskState.Retry; import io.seata.saga.statelang.domain.impl.AbstractTaskState; import io.seata.saga.statelang.domain.impl.AbstractTaskState.ExceptionMatchImpl; +import io.seata.saga.statelang.domain.impl.AbstractTaskState.LoopImpl; import io.seata.saga.statelang.domain.impl.AbstractTaskState.RetryImpl; /** @@ -82,6 +85,11 @@ protected void parseTaskAttributes(AbstractTaskState state, Object node) { if (statusMap != null) { state.setStatus(statusMap); } + + Object loopObj = nodeMap.get("Loop"); + if (loopObj != null) { + state.setLoop(parseLoop(loopObj)); + } } protected List parseRetry(List retryList) { @@ -124,4 +132,20 @@ protected List parseCatch(List catchList) { } return exceptionMatchList; } + + protected Loop parseLoop(Object loopObj) { + Map loopMap = (Map)loopObj; + LoopImpl loop = new LoopImpl(); + + Object parallel = loopMap.get("Parallel"); + loop.setParallel(NumberUtils.toInt(parallel.toString(), 1)); + + loop.setCollection((String)loopMap.get("Collection")); + loop.setElementVariableName((String)loopMap.getOrDefault("ElementVariableName", "loopElement")); + loop.setElementIndexName((String)loopMap.getOrDefault("ElementIndexName", "loopCounter")); + loop.setCompletionCondition( + (String)loopMap.getOrDefault("CompletionCondition", "[nrOfInstances] == [nrOfCompletedInstances]")); + return loop; + + } } \ No newline at end of file diff --git a/test/src/test/java/io/seata/saga/engine/db/StateMachineDBTests.java b/test/src/test/java/io/seata/saga/engine/db/StateMachineDBTests.java index 29994e59b37..a900b30390b 100644 --- a/test/src/test/java/io/seata/saga/engine/db/StateMachineDBTests.java +++ b/test/src/test/java/io/seata/saga/engine/db/StateMachineDBTests.java @@ -865,6 +865,164 @@ public void testSimpleSubCompensateStateAsUpdateMode() throws Exception { Assertions.assertEquals(inst.getStateList().size(), 2); } + @Test + public void testSimpleStateMachineWithLoop() { + long start = System.currentTimeMillis(); + + List loopList = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + loopList.add(i); + } + + Map paramMap = new HashMap<>(2); + paramMap.put("a", 1); + paramMap.put("collection", loopList); + + String stateMachineName = "simpleLoopTestStateMachine"; + + StateMachineInstance inst = stateMachineEngine.start(stateMachineName, null, paramMap); + + long cost = System.currentTimeMillis() - start; + System.out.println("====== cost :" + cost); + + Assertions.assertEquals(inst.getStatus(), ExecutionStatus.SU); + } + + @Test + public void testSimpleStateMachineWithLoopForward() throws InterruptedException { + long start = System.currentTimeMillis(); + + List loopList = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + loopList.add(i); + } + + Map paramMap = new HashMap<>(2); + paramMap.put("a", 1); + paramMap.put("collection", loopList); + paramMap.put("fooThrowException", "true"); + + String stateMachineName = "simpleLoopTestStateMachine"; + + StateMachineInstance inst = stateMachineEngine.start(stateMachineName, null, paramMap); + + long cost = System.currentTimeMillis() - start; + System.out.println("====== cost :" + cost); + + Assertions.assertEquals(inst.getStatus(), ExecutionStatus.UN); + + Thread.sleep(sleepTime); + inst = stateMachineEngine.getStateMachineConfig().getStateLogStore().getStateMachineInstance(inst.getId()); + Assertions.assertEquals(inst.getStatus(), ExecutionStatus.UN); + } + + @Test + public void testSimpleStateMachineWithLoopCompensate() { + long start = System.currentTimeMillis(); + + List loopList = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + loopList.add(i); + } + + Map paramMap = new HashMap<>(2); + paramMap.put("a", 1); + paramMap.put("collection", loopList); + paramMap.put("barThrowException", "true"); + + String stateMachineName = "simpleLoopTestStateMachine"; + + StateMachineInstance inst = stateMachineEngine.start(stateMachineName, null, paramMap); + + long cost = System.currentTimeMillis() - start; + System.out.println("====== cost :" + cost); + + Assertions.assertEquals(inst.getStatus(), ExecutionStatus.UN); + Assertions.assertEquals(inst.getCompensationStatus(), ExecutionStatus.SU); + } + + @Test + public void testSimpleStateMachineWithLoopCompensateForRecovery() throws InterruptedException { + long start = System.currentTimeMillis(); + + List loopList = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + loopList.add(i); + } + + Map paramMap = new HashMap<>(2); + paramMap.put("a", 1); + paramMap.put("collection", loopList); + paramMap.put("barThrowException", "true"); + paramMap.put("compensateFooThrowException", "true"); + + String stateMachineName = "simpleLoopTestStateMachine"; + + StateMachineInstance inst = stateMachineEngine.start(stateMachineName, null, paramMap); + + long cost = System.currentTimeMillis() - start; + System.out.println("====== cost :" + cost); + + Assertions.assertEquals(inst.getStatus(), ExecutionStatus.UN); + Assertions.assertEquals(inst.getCompensationStatus(), ExecutionStatus.UN); + + Thread.sleep(sleepTime); + + inst = stateMachineEngine.getStateMachineConfig().getStateLogStore().getStateMachineInstance(inst.getId()); + Assertions.assertEquals(inst.getCompensationStatus(), ExecutionStatus.UN); + } + + @Test + public void testSimpleStateMachineWithLoopSubMachine() { + long start = System.currentTimeMillis(); + + List loopList = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + loopList.add(i); + } + + Map paramMap = new HashMap<>(2); + paramMap.put("a", 2); + paramMap.put("collection", loopList); + + String stateMachineName = "simpleLoopTestStateMachine"; + + StateMachineInstance inst = stateMachineEngine.start(stateMachineName, null, paramMap); + + long cost = System.currentTimeMillis() - start; + System.out.println("====== cost :" + cost); + + Assertions.assertEquals(inst.getStatus(), ExecutionStatus.SU); + } + + @Test + public void testSimpleStateMachineWithLoopSubMachineForward() throws InterruptedException { + long start = System.currentTimeMillis(); + + List loopList = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + loopList.add(i); + } + + Map paramMap = new HashMap<>(2); + paramMap.put("a", 2); + paramMap.put("collection", loopList); + paramMap.put("barThrowException", "true"); + + String stateMachineName = "simpleLoopTestStateMachine"; + + StateMachineInstance inst = stateMachineEngine.start(stateMachineName, null, paramMap); + + long cost = System.currentTimeMillis() - start; + System.out.println("====== cost :" + cost); + + Assertions.assertEquals(inst.getStatus(), ExecutionStatus.UN); + + Thread.sleep(sleepTime); + inst = stateMachineEngine.getStateMachineConfig().getStateLogStore().getStateMachineInstance(inst.getId()); + Assertions.assertEquals(inst.getStatus(), ExecutionStatus.UN); + } + private void doTestStateMachineTransTimeout(Map paramMap) throws Exception { long start = System.currentTimeMillis(); diff --git a/test/src/test/resources/saga/statelang/simple_statelang_with_loop.json b/test/src/test/resources/saga/statelang/simple_statelang_with_loop.json new file mode 100644 index 00000000000..58ebaebaef3 --- /dev/null +++ b/test/src/test/resources/saga/statelang/simple_statelang_with_loop.json @@ -0,0 +1,137 @@ +{ + "Name": "simpleLoopTestStateMachine", + "Comment": "带循环参数的测试状态机定义", + "StartState": "FirstState", + "Version": "0.0.1", + "States": { + "FirstState": { + "Type": "ServiceTask", + "ServiceName": "demoService", + "ServiceMethod": "foo", + "CompensateState": "CompensateFirstState", + "Loop": { + "Parallel": 3, + "Collection": "$.[collection]", + "ElementVariableName": "element", + "ElementIndexName": "loopCounter", + "CompletionCondition": "[nrOfCompletedInstances] == ([collection].size()-4)" + }, + "Input": [ + { + "loopCounter": "$.[loopCounter]", + "element": "$.[element]", + "throwException": "$.[fooThrowException]" + } + ], + "Output": { + "fooResult": "$.#root" + }, + "Next": "ChoiceState" + }, + "ChoiceState":{ + "Type": "Choice", + "Choices":[ + { + "Expression": "[loopResult].?[#this[fooResult] == null].size() == 0 && [a] == 1", + "Next":"SecondState" + }, + { + "Expression": "[loopResult].?[#this[fooResult] == null].size() == 0 && [a] == 2", + "Next":"CallSubStateMachine" + } + ], + "Default":"Fail" + }, + "SecondState": { + "Type": "ServiceTask", + "ServiceName": "demoService", + "ServiceMethod": "bar", + "CompensateState": "CompensateSecondState", + "Loop": { + "Parallel": 3, + "Collection": "$.[collection]", + "ElementVariableName": "element", + "CompletionCondition": "[nrOfCompletedInstances] / [nrOfInstances] >= 0.4", + "ElementIndexName": "loopCounter" + }, + "Input": [ + { + "loopCounter": "$.[loopCounter]", + "loopElement": "$.[element]", + "throwException": "$.[barThrowException]" + } + ], + "Catch": [ + { + "Exceptions": [ + "io.seata.saga.engine.mock.DemoException" + ], + "Next": "CompensationTriggerTest" + } + ] + }, + "CallSubStateMachine": { + "Type": "SubStateMachine", + "StateMachineName": "simpleCompensationStateMachine", + "Loop": { + "Parallel": 3, + "Collection": "$.[collection]", + "ElementVariableName": "element", + "CompletionCondition": "[nrOfCompletedInstances] / [nrOfInstances] >= 0.4", + "ElementIndexName": "loopCounter" + }, + "Input": [ + { + "a": 1, + "collection": "$.[collection]", + "loopCounter": "$.[loopCounter]", + "element": "$.[element]", + "barThrowException": "$.[barThrowException]", + "fooThrowException": "$.[fooThrowException]", + "compensateFooThrowException": "$.[compensateFooThrowException]" + } + ], + "Output": { + "fooResult": "$.#root" + }, + "Next": "Succeed" + }, + "CompensateFirstState": { + "Type": "ServiceTask", + "ServiceName": "demoService", + "ServiceMethod": "compensateFoo", + "Input": [ + { + "compensateFooInput": "$.[fooResult]", + "throwException": "$.[compensateFooThrowException]", + "loopCounter": "$.[loopCounter]", + "element": "$.[element]" + } + ] + }, + "CompensateSecondState": { + "Type": "ServiceTask", + "ServiceName": "demoService", + "ServiceMethod": "compensateBar", + "Input": [ + { + "compensateBarInput": "$.[barResult]", + "loopCounter": "$.[loopCounter]", + "loopElement": "$.[element]" + } + ] + }, + "CompensationTriggerTest": { + "Type": "CompensationTrigger", + "Next": "Fail" + }, + "Succeed": { + "Type":"Succeed" + }, + "Fail": { + "Type":"Fail", + "ErrorCode": "NOT_FOUND", + "Message": "not found" + } + } +} \ No newline at end of file diff --git a/test/src/test/resources/saga/statelang/simple_statelang_with_persist_update_mode.json b/test/src/test/resources/saga/statelang/simple_statelang_with_persist_update_mode.json index faecf097206..873a301ccee 100644 --- a/test/src/test/resources/saga/statelang/simple_statelang_with_persist_update_mode.json +++ b/test/src/test/resources/saga/statelang/simple_statelang_with_persist_update_mode.json @@ -38,7 +38,7 @@ "SecondState": { "Type": "ServiceTask", "ServiceName": "demoService", - "ServiceMethod": "randomExceptionMethod", + "ServiceMethod": "bar", "Input": [ { "barInput": "$.[fooResult]", From 1c0fccda9fd4ee7ca3b54ebe7a66cbea52954690 Mon Sep 17 00:00:00 2001 From: jimin Date: Tue, 20 Apr 2021 17:47:03 +0800 Subject: [PATCH 89/93] Revert "bugfix: fix the case that could not retry acquire global lock (#3133)" (#3649) --- changes/1.5.0.md | 1 - changes/en-us/1.5.0.md | 1 - .../seata/rm/datasource/ConnectionProxy.java | 18 +++--------------- .../exec/AbstractDMLBaseExecutor.java | 3 ++- .../rm/datasource/ConnectionProxyTest.java | 6 ++---- 5 files changed, 7 insertions(+), 22 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index a83498ad87e..fdb29abdac3 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -50,7 +50,6 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3540](https://github.com/seata/seata/pull/3540)] 修复server发布打包时缺失文件 - [[#3573](https://github.com/seata/seata/pull/3573)] 修复 README.md 文件中设计器路径错误 - [[#3597](https://github.com/seata/seata/pull/3597)] 修复可能导致NPE的问题 - - [[#3133](https://github.com/seata/seata/pull/3133)] 修复某些场景下无法重试全局锁的问题 ### optimize: diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 4e81ddab092..5239479b51c 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -88,7 +88,6 @@ - [[#3551](https://github.com/seata/seata/pull/3551)] make RETRY_DEAD_THRESHOLD bigger and configurable - [[#3589](https://github.com/seata/seata/pull/3589)] Changed exception check by JUnit API usage - [[#3601](https://github.com/seata/seata/pull/3601)] make `LoadBalanceProperties` compatible with `spring-boot:2.x` and above - - [[#3133](https://github.com/seata/seata/pull/3133)] fix the case that could not retry acquire global lock - [[#3631](https://github.com/seata/seata/pull/3631)] optimize nacos-config.py parameter - [[#3638](https://github.com/seata/seata/pull/3638)] optimize the error when use update or delete with join in sql diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java index 7024f599ee0..5e5c362578c 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java @@ -50,14 +50,13 @@ public class ConnectionProxy extends AbstractConnectionProxy { private ConnectionContext context = new ConnectionContext(); - private final LockRetryPolicy lockRetryPolicy = new LockRetryPolicy(this); - private static final int REPORT_RETRY_COUNT = ConfigurationFactory.getInstance().getInt( ConfigurationKeys.CLIENT_REPORT_RETRY_COUNT, DEFAULT_CLIENT_REPORT_RETRY_COUNT); public static final boolean IS_REPORT_SUCCESS_ENABLE = ConfigurationFactory.getInstance().getBoolean( ConfigurationKeys.CLIENT_REPORT_SUCCESS_ENABLE, DEFAULT_CLIENT_REPORT_SUCCESS_ENABLE); + private final static LockRetryPolicy LOCK_RETRY_POLICY = new LockRetryPolicy(); /** * Instantiates a new Connection proxy. @@ -182,7 +181,7 @@ public void appendLockKey(String lockKey) { @Override public void commit() throws SQLException { try { - lockRetryPolicy.execute(() -> { + LOCK_RETRY_POLICY.execute(() -> { doCommit(); return null; }); @@ -326,21 +325,10 @@ public static class LockRetryPolicy { protected static final boolean LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT = ConfigurationFactory .getInstance().getBoolean(ConfigurationKeys.CLIENT_LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT, DEFAULT_CLIENT_LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT); - protected final ConnectionProxy connection; - - public LockRetryPolicy(ConnectionProxy connection) { - this.connection = connection; - } - public T execute(Callable callable) throws Exception { - // the only case that not need to retry acquire lock hear is - // LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT == true && connection#autoCommit == true - // because it has retry acquire lock when AbstractDMLBaseExecutor#executeAutoCommitTrue - if (LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT && connection.getContext().isAutoCommitChanged()) { + if (LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT) { return callable.call(); } else { - // LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT == false - // or LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT == true && autoCommit == false return doRetryOnLockConflict(callable); } } diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java index ae73f5ddc42..d42d365bc66 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/AbstractDMLBaseExecutor.java @@ -172,9 +172,10 @@ protected T executeAutoCommitTrue(Object[] args) throws Throwable { protected abstract TableRecords afterImage(TableRecords beforeImage) throws SQLException; private static class LockRetryPolicy extends ConnectionProxy.LockRetryPolicy { + private final ConnectionProxy connection; LockRetryPolicy(final ConnectionProxy connection) { - super(connection); + this.connection = connection; } @Override diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/ConnectionProxyTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/ConnectionProxyTest.java index 016d915dfe3..7170f8c6ec1 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/ConnectionProxyTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/ConnectionProxyTest.java @@ -22,8 +22,6 @@ import io.seata.rm.DefaultResourceManager; import io.seata.rm.datasource.exec.LockConflictException; import io.seata.rm.datasource.exec.LockWaitTimeoutException; -import io.seata.rm.datasource.mock.MockConnection; -import io.seata.rm.datasource.mock.MockDriver; import io.seata.rm.datasource.undo.SQLUndoLog; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -74,11 +72,11 @@ public void initBeforeEach() throws Exception { public void testLockRetryPolicyRollbackOnConflict() throws Exception { boolean oldBranchRollbackFlag = (boolean) branchRollbackFlagField.get(null); branchRollbackFlagField.set(null, true); - ConnectionProxy connectionProxy = new ConnectionProxy(dataSourceProxy, new MockConnection(new MockDriver(), "", null)); + ConnectionProxy connectionProxy = new ConnectionProxy(dataSourceProxy, null); connectionProxy.bind(TEST_XID); connectionProxy.appendUndoLog(new SQLUndoLog()); connectionProxy.appendLockKey(lockKey); - Assertions.assertThrows(LockWaitTimeoutException.class, connectionProxy::commit); + Assertions.assertThrows(LockConflictException.class, connectionProxy::commit); branchRollbackFlagField.set(null, oldBranchRollbackFlag); } From 5fac97986f3779c9684ea13a77fa880998804eaf Mon Sep 17 00:00:00 2001 From: jimin Date: Fri, 23 Apr 2021 12:09:23 +0800 Subject: [PATCH 90/93] maven: update gpg key (#3662) --- all/pom.xml | 2 +- bom/pom.xml | 2 +- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + pom.xml | 2 +- 5 files changed, 5 insertions(+), 3 deletions(-) diff --git a/all/pom.xml b/all/pom.xml index b3b126e9436..7ad0d2de5c6 100644 --- a/all/pom.xml +++ b/all/pom.xml @@ -802,7 +802,7 @@ sign - F72AF874ECA9BBA7751C2DFD553EBAF7AC17F320 + A1C4DAB9B220DBA0C277E945D6A1420D747D1EE0 diff --git a/bom/pom.xml b/bom/pom.xml index 3dd49e31120..93f09d76f77 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -587,7 +587,7 @@ sign - F72AF874ECA9BBA7751C2DFD553EBAF7AC17F320 + A1C4DAB9B220DBA0C277E945D6A1420D747D1EE0 diff --git a/changes/1.5.0.md b/changes/1.5.0.md index fdb29abdac3..87f80555aff 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -89,6 +89,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3601](https://github.com/seata/seata/pull/3601)] 使`LoadBalanceProperties`与`spring-boot:2.x`及以上版本兼容 - [[#3631](https://github.com/seata/seata/pull/3631)] 优化 运行 nacos-config.py 参数问题 - [[#3638](https://github.com/seata/seata/pull/3638)] 优化使用连表update和delete的SQL语法时错误提示 + - [[#3662](https://github.com/seata/seata/pull/3662)] 更新gpg密钥对 ### test diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 5239479b51c..cdad1081e9c 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -90,6 +90,7 @@ - [[#3601](https://github.com/seata/seata/pull/3601)] make `LoadBalanceProperties` compatible with `spring-boot:2.x` and above - [[#3631](https://github.com/seata/seata/pull/3631)] optimize nacos-config.py parameter - [[#3638](https://github.com/seata/seata/pull/3638)] optimize the error when use update or delete with join in sql + - [[#3662](https://github.com/seata/seata/pull/3662)] update gpg key ### test diff --git a/pom.xml b/pom.xml index 189abd22b0c..09611c383a7 100644 --- a/pom.xml +++ b/pom.xml @@ -226,7 +226,7 @@ sign - F72AF874ECA9BBA7751C2DFD553EBAF7AC17F320 + A1C4DAB9B220DBA0C277E945D6A1420D747D1EE0 From c091e6990e0164834c26d004f67f809bc768c045 Mon Sep 17 00:00:00 2001 From: jimin Date: Fri, 23 Apr 2021 18:18:47 +0800 Subject: [PATCH 91/93] optimize: optimize some javadocs (#3664) --- changes/1.5.0.md | 1 + changes/en-us/1.5.0.md | 1 + .../io/seata/common/util/CompressUtil.java | 28 +++++++------ .../exception/AbstractExceptionHandler.java | 26 +++++++----- .../main/java/io/seata/core/lock/Locker.java | 20 ++++------ .../java/io/seata/core/model/Resource.java | 2 +- .../io/seata/core/model/ResourceManager.java | 2 +- .../seata/core/protocol/MessageTypeAware.java | 7 ++-- .../java/io/seata/core/protocol/Version.java | 6 ++- .../io/seata/core/rpc/RemotingClient.java | 4 +- .../io/seata/core/rpc/RemotingServer.java | 4 +- .../seata/integration/http/HttpExecutor.java | 21 +++++++++- .../io/seata/rm/datasource/ColumnUtils.java | 11 +++-- .../seata/rm/datasource/ConnectionProxy.java | 5 ++- .../seata/rm/datasource/DataCompareUtils.java | 24 ++++++----- .../seata/rm/datasource/SqlGenerateUtils.java | 11 ++--- .../datasource/exec/BaseInsertExecutor.java | 18 +++++++-- .../exec/BaseTransactionalExecutor.java | 8 ++-- .../rm/datasource/exec/InsertExecutor.java | 9 +++-- .../exec/mysql/MySQLInsertExecutor.java | 2 + .../exec/oracle/OracleInsertExecutor.java | 2 + .../postgresql/PostgresqlInsertExecutor.java | 3 ++ .../rm/datasource/sql/struct/ColumnMeta.java | 7 ++-- .../rm/datasource/sql/struct/TableMeta.java | 5 ++- .../datasource/sql/struct/TableMetaCache.java | 11 +++-- .../struct/cache/AbstractTableMetaCache.java | 17 ++++---- .../datasource/undo/AbstractUndoExecutor.java | 6 +-- .../undo/AbstractUndoLogManager.java | 16 ++++---- .../rm/datasource/undo/KeywordChecker.java | 2 +- .../undo/parser/spi/FstSerializer.java | 11 +++-- .../undo/parser/spi/JacksonSerializer.java | 12 ++++-- .../undo/parser/spi/KryoTypeSerializer.java | 9 ++++- .../undo/parser/spi/ProtostuffDelegate.java | 6 ++- .../rm/datasource/xa/ConnectionProxyXA.java | 10 +++-- .../java/io/seata/rm/AbstractRMHandler.java | 2 +- .../io/seata/rm/AbstractResourceManager.java | 6 +-- .../io/seata/rm/DefaultResourceManager.java | 8 ++-- .../serializer/hessian/HessianSerializer.java | 2 +- .../serializer/seata/MessageSeataCodec.java | 9 ++--- .../seata/spring/annotation/GlobalLock.java | 8 ++-- .../annotation/GlobalTransactional.java | 40 +++++++++++++------ .../spring/tcc/TccAnnotationProcessor.java | 18 ++++----- .../seata/spring/util/SpringProxyUtils.java | 10 ++--- .../io/seata/sqlparser/WhereRecognizer.java | 6 ++- .../seata/sqlparser/struct/Defaultable.java | 6 ++- .../seata/sqlparser/struct/Sequenceable.java | 6 ++- .../java/io/seata/rm/tcc/RMHandlerTCC.java | 5 --- .../io/seata/rm/tcc/TCCResourceManager.java | 8 ++-- .../parser/DefaultRemotingParser.java | 5 ++- .../parser/SofaRpcRemotingParser.java | 18 +-------- .../io/seata/tm/api/GlobalTransaction.java | 1 - .../seata/tm/api/TransactionalExecutor.java | 2 +- .../transaction/TransactionHookManager.java | 6 +-- 53 files changed, 289 insertions(+), 204 deletions(-) diff --git a/changes/1.5.0.md b/changes/1.5.0.md index 87f80555aff..f1dee2681ca 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -90,6 +90,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#3631](https://github.com/seata/seata/pull/3631)] 优化 运行 nacos-config.py 参数问题 - [[#3638](https://github.com/seata/seata/pull/3638)] 优化使用连表update和delete的SQL语法时错误提示 - [[#3662](https://github.com/seata/seata/pull/3662)] 更新gpg密钥对 + - [[#3664](https://github.com/seata/seata/pull/3664)] 优化 javadoc ### test diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index cdad1081e9c..dd48c8508d9 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -91,6 +91,7 @@ - [[#3631](https://github.com/seata/seata/pull/3631)] optimize nacos-config.py parameter - [[#3638](https://github.com/seata/seata/pull/3638)] optimize the error when use update or delete with join in sql - [[#3662](https://github.com/seata/seata/pull/3662)] update gpg key + - [[#3664](https://github.com/seata/seata/pull/3664)] optimize some javadocs ### test diff --git a/common/src/main/java/io/seata/common/util/CompressUtil.java b/common/src/main/java/io/seata/common/util/CompressUtil.java index b42c7adee78..1c5b42c498e 100644 --- a/common/src/main/java/io/seata/common/util/CompressUtil.java +++ b/common/src/main/java/io/seata/common/util/CompressUtil.java @@ -22,16 +22,16 @@ import java.util.zip.GZIPOutputStream; /** - * - * @author lizhao + * The type Compress util. */ public class CompressUtil { /** - * compress bytes - * @param src - * @return - * @throws IOException + * Compress byte [ ]. + * + * @param src the src + * @return the byte [ ] + * @throws IOException the io exception */ public static byte[] compress(final byte[] src) throws IOException { byte[] result; @@ -48,10 +48,11 @@ public static byte[] compress(final byte[] src) throws IOException { } /** - * uncompress bytes - * @param src - * @return - * @throws IOException + * Uncompress byte [ ]. + * + * @param src the src + * @return the byte [ ] + * @throws IOException the io exception */ public static byte[] uncompress(final byte[] src) throws IOException { byte[] result; @@ -77,9 +78,10 @@ public static byte[] uncompress(final byte[] src) throws IOException { } /** - * check magic - * @param bytes - * @return + * Is compress data boolean. + * + * @param bytes the bytes + * @return the boolean */ public static boolean isCompressData(byte[] bytes) { if (bytes != null && bytes.length > 2) { diff --git a/core/src/main/java/io/seata/core/exception/AbstractExceptionHandler.java b/core/src/main/java/io/seata/core/exception/AbstractExceptionHandler.java index 34033cce561..e0e949ce8a8 100644 --- a/core/src/main/java/io/seata/core/exception/AbstractExceptionHandler.java +++ b/core/src/main/java/io/seata/core/exception/AbstractExceptionHandler.java @@ -54,33 +54,39 @@ public interface Callback the type parameter + * @param the type parameter + */ public abstract static class AbstractCallback implements Callback { @@ -107,6 +113,8 @@ public void onException(T request, S response, Exception rex) { /** * Exception handle template. * + * @param the type parameter + * @param the type parameter * @param callback the callback * @param request the request * @param response the response diff --git a/core/src/main/java/io/seata/core/lock/Locker.java b/core/src/main/java/io/seata/core/lock/Locker.java index f29c84558a4..2fc0ca95d21 100644 --- a/core/src/main/java/io/seata/core/lock/Locker.java +++ b/core/src/main/java/io/seata/core/lock/Locker.java @@ -19,8 +19,6 @@ /** * The interface Locker. - * - * @author zhangsen */ public interface Locker { @@ -33,7 +31,7 @@ public interface Locker { boolean acquireLock(List rowLock) ; /** - * Un lock boolean. + * Release lock boolean. * * @param rowLock the row lock * @return the boolean @@ -41,19 +39,19 @@ public interface Locker { boolean releaseLock(List rowLock); /** - * Un lock boolean. + * Release lock boolean. * - * @param xid the xid - * @param branchId the branchId + * @param xid the xid + * @param branchId the branch id * @return the boolean */ boolean releaseLock(String xid, Long branchId); /** - * Un lock boolean. + * Release lock boolean. * - * @param xid the xid - * @param branchIds the branchIds + * @param xid the xid + * @param branchIds the branch ids * @return the boolean */ boolean releaseLock(String xid, List branchIds); @@ -67,9 +65,7 @@ public interface Locker { boolean isLockable(List rowLock); /** - * Clean all locks boolean. - * - * @return the boolean + * Clean all locks. */ void cleanAllLocks(); } diff --git a/core/src/main/java/io/seata/core/model/Resource.java b/core/src/main/java/io/seata/core/model/Resource.java index 7c95b207984..26958d5d834 100644 --- a/core/src/main/java/io/seata/core/model/Resource.java +++ b/core/src/main/java/io/seata/core/model/Resource.java @@ -41,7 +41,7 @@ public interface Resource { /** * get resource type, AT, TCC, SAGA and XA * - * @return + * @return branch type */ BranchType getBranchType(); diff --git a/core/src/main/java/io/seata/core/model/ResourceManager.java b/core/src/main/java/io/seata/core/model/ResourceManager.java index 9d6214f339d..2c70320cf6d 100644 --- a/core/src/main/java/io/seata/core/model/ResourceManager.java +++ b/core/src/main/java/io/seata/core/model/ResourceManager.java @@ -41,7 +41,7 @@ public interface ResourceManager extends ResourceManagerInbound, ResourceManager /** * Get all resources managed by this manager. * - * @return resourceId -> Resource Map + * @return resourceId -- Resource Map */ Map getManagedResources(); diff --git a/core/src/main/java/io/seata/core/protocol/MessageTypeAware.java b/core/src/main/java/io/seata/core/protocol/MessageTypeAware.java index 80a9ab429a2..dd6208004ff 100644 --- a/core/src/main/java/io/seata/core/protocol/MessageTypeAware.java +++ b/core/src/main/java/io/seata/core/protocol/MessageTypeAware.java @@ -16,13 +16,14 @@ package io.seata.core.protocol; /** - * @author zhangsen + * The interface Message type aware. */ public interface MessageTypeAware { /** - * return the message type - * @return + * Gets type code. + * + * @return the type code */ short getTypeCode(); diff --git a/core/src/main/java/io/seata/core/protocol/Version.java b/core/src/main/java/io/seata/core/protocol/Version.java index ff9fa4bca3b..7a81a9a8888 100644 --- a/core/src/main/java/io/seata/core/protocol/Version.java +++ b/core/src/main/java/io/seata/core/protocol/Version.java @@ -45,6 +45,11 @@ private Version() { } + /** + * Gets current. + * + * @return the current + */ public static String getCurrent() { return CURRENT; } @@ -73,7 +78,6 @@ public static String getChannelVersion(Channel c) { * Check version string. * * @param version the version - * @return the string * @throws IncompatibleVersionException the incompatible version exception */ public static void checkVersion(String version) throws IncompatibleVersionException { diff --git a/core/src/main/java/io/seata/core/rpc/RemotingClient.java b/core/src/main/java/io/seata/core/rpc/RemotingClient.java index 0258b4e0f82..a2a32a4fe80 100644 --- a/core/src/main/java/io/seata/core/rpc/RemotingClient.java +++ b/core/src/main/java/io/seata/core/rpc/RemotingClient.java @@ -40,7 +40,7 @@ public interface RemotingClient { * * @param msg transaction message {@link io.seata.core.protocol} * @return server result message - * @throws TimeoutException + * @throws TimeoutException TimeoutException */ Object sendSyncRequest(Object msg) throws TimeoutException; @@ -50,7 +50,7 @@ public interface RemotingClient { * @param channel client channel * @param msg transaction message {@link io.seata.core.protocol} * @return server result message - * @throws TimeoutException + * @throws TimeoutException TimeoutException */ Object sendSyncRequest(Channel channel, Object msg) throws TimeoutException; diff --git a/core/src/main/java/io/seata/core/rpc/RemotingServer.java b/core/src/main/java/io/seata/core/rpc/RemotingServer.java index 1b1a3e39579..3db95b773c8 100644 --- a/core/src/main/java/io/seata/core/rpc/RemotingServer.java +++ b/core/src/main/java/io/seata/core/rpc/RemotingServer.java @@ -38,7 +38,7 @@ public interface RemotingServer { * @param clientId rm client id * @param msg transaction message {@link io.seata.core.protocol} * @return client result message - * @throws TimeoutException + * @throws TimeoutException TimeoutException */ Object sendSyncRequest(String resourceId, String clientId, Object msg) throws TimeoutException; @@ -48,7 +48,7 @@ public interface RemotingServer { * @param channel client channel * @param msg transaction message {@link io.seata.core.protocol} * @return client result message - * @throws TimeoutException + * @throws TimeoutException TimeoutException */ Object sendSyncRequest(Channel channel, Object msg) throws TimeoutException; diff --git a/integration/http/src/main/java/io/seata/integration/http/HttpExecutor.java b/integration/http/src/main/java/io/seata/integration/http/HttpExecutor.java index 66990c565e5..50d52a7b10a 100644 --- a/integration/http/src/main/java/io/seata/integration/http/HttpExecutor.java +++ b/integration/http/src/main/java/io/seata/integration/http/HttpExecutor.java @@ -25,13 +25,30 @@ */ public interface HttpExecutor { + /** + * Execute post k. + * + * @param the type parameter + * @param the type parameter + * @param host the host + * @param path the path + * @param paramObject the param object + * @param returnType the return type + * @return the k + * @throws IOException the io exception + */ K executePost(String host, String path, T paramObject, Class returnType) throws IOException; - /** * get method only support param type of Map * - * @return K + * @param the type parameter + * @param host the host + * @param path the path + * @param paramObject the param object + * @param returnType the return type + * @return K k + * @throws IOException the io exception */ K executeGet(String host, String path, Map paramObject, Class returnType) throws IOException; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/ColumnUtils.java b/rm-datasource/src/main/java/io/seata/rm/datasource/ColumnUtils.java index b6bce668fdb..505973d311c 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/ColumnUtils.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/ColumnUtils.java @@ -45,6 +45,9 @@ public enum Escape { * mysql series escape */ MYSQL('`'); + /** + * The Value. + */ public final char value; Escape(char value) { @@ -57,7 +60,7 @@ public enum Escape { * * @param cols the cols * @param dbType the db type - * @return + * @return list */ public static List delEscape(List cols, String dbType) { // sql standard @@ -96,7 +99,7 @@ public static List delEscape(List cols, Escape escape) { * * @param colName the column name * @param dbType the db type - * @return + * @return string string */ public static String delEscape(String colName, String dbType) { String newColName = delEscape(colName, Escape.STANDARD); @@ -111,7 +114,7 @@ public static String delEscape(String colName, String dbType) { * * @param colName the column name * @param escape the escape - * @return + * @return string string */ public static String delEscape(String colName, Escape escape) { if (colName == null || colName.isEmpty()) { @@ -156,7 +159,7 @@ public static String delEscape(String colName, Escape escape) { * * @param cols the column name list * @param dbType the db type - * @return + * @return list list */ public static List addEscape(List cols, String dbType) { if (CollectionUtils.isEmpty(cols)) { diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java index 5e5c362578c..784a4bee092 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java @@ -97,6 +97,8 @@ public void setGlobalLockRequire(boolean isLock) { /** * get global lock requires flag + * + * @return the boolean */ public boolean isGlobalLockRequire() { return context.isGlobalLockRequire(); @@ -128,6 +130,7 @@ public void checkLock(String lockKeys) throws SQLException { * Lock query. * * @param lockKeys the lock keys + * @return the boolean * @throws SQLException the sql exception */ public boolean lockQuery(String lockKeys) throws SQLException { @@ -283,7 +286,7 @@ public void rollback() throws SQLException { /** * change connection autoCommit to false by seata * - * @throws SQLException + * @throws SQLException the sql exception */ public void changeAutoCommit() throws SQLException { getContext().setAutoCommitChanged(true); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/DataCompareUtils.java b/rm-datasource/src/main/java/io/seata/rm/datasource/DataCompareUtils.java index 4e1ec2903e8..8af8e20b235 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/DataCompareUtils.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/DataCompareUtils.java @@ -47,11 +47,11 @@ private DataCompareUtils() { } /** - * Is field equals. + * Is field equals result. * - * @param f0 the f0 - * @param f1 the f1 - * @return the Result + * @param f0 the f 0 + * @param f1 the f 1 + * @return the result */ public static Result isFieldEquals(Field f0, Field f1) { if (f0 == null) { @@ -111,11 +111,11 @@ private static void convertType(Field f0, Field f1) { } /** - * Is image equals. + * Is records equals result. * * @param beforeImage the before image * @param afterImage the after image - * @return Result + * @return the result */ public static Result isRecordsEquals(TableRecords beforeImage, TableRecords afterImage) { if (beforeImage == null) { @@ -137,14 +137,13 @@ public static Result isRecordsEquals(TableRecords beforeImage, TableRec } } - /** - * Is rows equals. + * Is rows equals result. * * @param tableMetaData the table meta data * @param oldRows the old rows * @param newRows the new rows - * @return the Result + * @return the result */ public static Result isRowsEquals(TableMeta tableMetaData, List oldRows, List newRows) { if (!CollectionUtils.isSizeEquals(oldRows, newRows)) { @@ -182,6 +181,13 @@ private static Result compareRows(TableMeta tableMetaData, List ol return Result.ok(); } + /** + * Row list to map map. + * + * @param rowList the row list + * @param primaryKeyList the primary key list + * @return the map + */ public static Map> rowListToMap(List rowList, List primaryKeyList) { // {value of primaryKey, value of all columns} Map> rowMap = new HashMap<>(); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/SqlGenerateUtils.java b/rm-datasource/src/main/java/io/seata/rm/datasource/SqlGenerateUtils.java index 287bc080923..5d7cf987455 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/SqlGenerateUtils.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/SqlGenerateUtils.java @@ -95,10 +95,10 @@ public static String buildWhereConditionByPKs(List pkNameList, int rowSi /** * set parameter for PreparedStatement, this is only used in pk sql. * - * @param pkRowsList - * @param pkColumnNameList - * @param pst - * @throws SQLException + * @param pkRowsList pkRowsList + * @param pkColumnNameList pkColumnNameList + * @param pst preparedStatement + * @throws SQLException SQLException */ public static void setParamForPk(List> pkRowsList, List pkColumnNameList, PreparedStatement pst) throws SQLException { @@ -116,7 +116,8 @@ public static void setParamForPk(List> pkRowsList, List pkNameList, String dbType) { diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseInsertExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseInsertExecutor.java index 8090a638483..49947a8491d 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseInsertExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseInsertExecutor.java @@ -243,6 +243,10 @@ public List getGeneratedKeys() throws SQLException { /** * the modify for test + * + * @param expr the expr + * @return the pk values by sequence + * @throws SQLException the sql exception */ protected List getPkValuesBySequence(SqlSequenceExpr expr) throws SQLException { List pkValues = null; @@ -273,8 +277,9 @@ protected List getPkValuesBySequence(SqlSequenceExpr expr) throws SQLExc * check pk values for multi Pk * At most one null per row. * Method is not allowed. - * @param pkValues - * @return + * + * @param pkValues the pk values + * @return boolean */ protected boolean checkPkValuesForMultiPk(Map> pkValues) { Set pkNames = pkValues.keySet(); @@ -304,6 +309,13 @@ protected boolean checkPkValuesForMultiPk(Map> pkValues) { return true; } + /** + * Check pk values boolean. + * + * @param pkValues the pk values + * @param ps the ps + * @return the boolean + */ protected boolean checkPkValues(Map> pkValues, boolean ps) { Set pkNames = pkValues.keySet(); if (pkNames.size() == 1) { @@ -315,7 +327,7 @@ protected boolean checkPkValues(Map> pkValues, boolean ps) /** * check pk values for single pk - * @param pkValues + * @param pkValues pkValues * @param ps true: is prepared statement. false: normal statement. * @return true: support. false: not support. */ diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseTransactionalExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseTransactionalExecutor.java index 4f316a8c314..1109bb92f67 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseTransactionalExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseTransactionalExecutor.java @@ -242,11 +242,11 @@ protected boolean containPK(String columnName) { return CollectionUtils.toUpperList(getTableMeta().getPrimaryKeyOnlyName()).contains(newColumnName.toUpperCase()); } - /** * get standard pk column name from user sql column name * - * @return + * @param userColumnName the user column name + * @return standard pk column name */ protected String getStandardPkColumnName(String userColumnName) { String newUserColumnName = ColumnUtils.delEscape(userColumnName, getDbType()); @@ -371,7 +371,7 @@ protected TableRecords buildTableRecords(TableMeta tableMeta, String selectSQL, * * @param pkValuesMap the pkValuesMap * @return return TableRecords; - * @throws SQLException + * @throws SQLException the sql exception */ protected TableRecords buildTableRecords(Map> pkValuesMap) throws SQLException { List pkColumnNameList = getTableMeta().getPrimaryKeyOnlyName(); @@ -408,7 +408,7 @@ protected TableRecords buildTableRecords(Map> pkValuesMap) /** * get db type * - * @return + * @return db type */ protected String getDbType() { return statementProxy.getConnectionProxy().getDbType(); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/InsertExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/InsertExecutor.java index ad5b1a36241..05546e2692e 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/InsertExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/InsertExecutor.java @@ -20,6 +20,9 @@ import java.util.Map; /** + * The interface Insert executor. + * + * @param the type parameter * @author jsbxyyx */ public interface InsertExecutor extends Executor { @@ -28,15 +31,15 @@ public interface InsertExecutor extends Executor { * get primary key values. * * @return The primary key value. - * @throws SQLException + * @throws SQLException the sql exception */ Map> getPkValues() throws SQLException; /** * get primary key values by insert column. * - * @return - * @throws SQLException + * @return pk values by column + * @throws SQLException the sql exception */ Map> getPkValuesByColumn() throws SQLException; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/mysql/MySQLInsertExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/mysql/MySQLInsertExecutor.java index 9b73dff4a78..710ff546089 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/mysql/MySQLInsertExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/mysql/MySQLInsertExecutor.java @@ -45,6 +45,8 @@ import java.util.concurrent.ConcurrentHashMap; /** + * The type My sql insert executor. + * * @author jsbxyyx */ @LoadLevel(name = JdbcConstants.MYSQL, scope = Scope.PROTOTYPE) diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/oracle/OracleInsertExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/oracle/OracleInsertExecutor.java index 6b0a9217705..00e3ac1b29b 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/oracle/OracleInsertExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/oracle/OracleInsertExecutor.java @@ -36,6 +36,8 @@ import java.util.Map; /** + * The type Oracle insert executor. + * * @author jsbxyyx */ @LoadLevel(name = JdbcConstants.ORACLE, scope = Scope.PROTOTYPE) diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/postgresql/PostgresqlInsertExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/postgresql/PostgresqlInsertExecutor.java index a08a8a04625..0db959e0199 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/postgresql/PostgresqlInsertExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/postgresql/PostgresqlInsertExecutor.java @@ -37,7 +37,10 @@ import java.util.Collections; import java.util.List; import java.util.Map; + /** + * The type Postgresql insert executor. + * * @author jsbxyyx */ @LoadLevel(name = JdbcConstants.POSTGRESQL, scope = Scope.PROTOTYPE) diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/ColumnMeta.java b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/ColumnMeta.java index 3eb288d62f4..9b34f90a308 100755 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/ColumnMeta.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/ColumnMeta.java @@ -110,7 +110,8 @@ public void setTableSchemaName(String tableSchemaName) { /** * Gets table schema name - * @return + * + * @return table schema name */ protected String getTableSchemaName() { return tableSchemaName; @@ -125,10 +126,10 @@ public void setTableName(String tableName) { this.tableName = tableName; } - /** * Gets table name - * @return + * + * @return table name */ protected String getTableName() { return tableName; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/TableMeta.java b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/TableMeta.java index 145b56977ba..1f7097592f8 100755 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/TableMeta.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/TableMeta.java @@ -145,8 +145,9 @@ public List getPrimaryKeyOnlyName() { /** * Gets add escape pk name. - * @param dbType - * @return + * + * @param dbType the db type + * @return escape pk name list */ public List getEscapePkNameList(String dbType) { return ColumnUtils.addEscape(getPrimaryKeyOnlyName(), dbType); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/TableMetaCache.java b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/TableMetaCache.java index e0185e3231a..c7605d8c4da 100755 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/TableMetaCache.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/TableMetaCache.java @@ -24,13 +24,12 @@ */ public interface TableMetaCache { - /** * Gets table meta. * - * @param connection - * @param tableName the table name - * @param resourceId + * @param connection the connection + * @param tableName the table name + * @param resourceId the resource id * @return the table meta */ TableMeta getTableMeta(Connection connection, String tableName, String resourceId); @@ -38,8 +37,8 @@ public interface TableMetaCache { /** * Clear the table meta cache * - * @param connection - * @param resourceId + * @param connection the connection + * @param resourceId the resource id */ void refresh(Connection connection, String resourceId); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/cache/AbstractTableMetaCache.java b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/cache/AbstractTableMetaCache.java index c0aa01846de..dccd807f76f 100755 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/cache/AbstractTableMetaCache.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/cache/AbstractTableMetaCache.java @@ -91,24 +91,23 @@ public void refresh(final Connection connection, String resourceId) { } } - /** * generate cache key * - * @param connection - * @param tableName - * @param resourceId - * @return + * @param connection the connection + * @param tableName the table name + * @param resourceId the resource id + * @return cache key */ protected abstract String getCacheKey(Connection connection, String tableName, String resourceId); /** * get scheme from datasource and tableName * - * @param connection - * @param tableName - * @return - * @throws SQLException + * @param connection the connection + * @param tableName the table name + * @return table meta + * @throws SQLException the sql exception */ protected abstract TableMeta fetchSchema(Connection connection, String tableName) throws SQLException; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoExecutor.java index 14ca5c91265..36c423a8d0e 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoExecutor.java @@ -344,7 +344,7 @@ protected List getOrderedPkList(TableRecords image, Row row, String dbTyp * Parse pk values Field List. * * @param records the records - * @return List> each element represents a row. And inside a row list contains pk columns(Field). + * @return each element represents a row. And inside a row list contains pk columns(Field). */ protected Map> parsePkValues(TableRecords records) { return parsePkValues(records.getRows(), records.getTableMeta().getPrimaryKeyOnlyName()); @@ -355,7 +355,7 @@ protected Map> parsePkValues(TableRecords records) { * * @param rows pk rows * @param pkNameList pk column name - * @return List> each element represents a row. And inside a row list contains pk columns(Field). + * @return each element represents a row. And inside a row list contains pk columns(Field). */ protected Map> parsePkValues(List rows, List pkNameList) { List pkFieldList = new ArrayList<>(); @@ -378,7 +378,7 @@ protected Map> parsePkValues(List rows, List pk * * @param conn the connection * @return the db type - * @throws SQLException + * @throws SQLException SQLException */ protected String getDbType(Connection conn) throws SQLException { return JdbcUtils.getDbType(conn.getMetaData().getURL()); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoLogManager.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoLogManager.java index 6d29cc4fb4d..168caf08cb6 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoLogManager.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoLogManager.java @@ -137,9 +137,9 @@ public void deleteUndoLog(String xid, long branchId, Connection conn) throws SQL /** * batch Delete undo log. * - * @param xids - * @param branchIds - * @param conn + * @param xids xid + * @param branchIds branch Id + * @param conn connection */ @Override public void batchDeleteUndoLog(Set xids, Set branchIds, Connection conn) throws SQLException { @@ -388,7 +388,7 @@ public void undo(DataSourceProxy dataSourceProxy, String xid, long branchId) thr * @param branchId the branchId * @param undoLogParser the undoLogParse * @param conn sql connection - * @throws SQLException + * @throws SQLException SQLException */ protected abstract void insertUndoLogWithGlobalFinished(String xid, long branchId, UndoLogParser undoLogParser, Connection conn) throws SQLException; @@ -401,7 +401,7 @@ protected abstract void insertUndoLogWithGlobalFinished(String xid, long branchI * @param rollbackCtx the rollbackContext * @param undoLogContent the undoLogContent * @param conn sql connection - * @throws SQLException + * @throws SQLException SQLException */ protected abstract void insertUndoLogWithNormal(String xid, long branchId, String rollbackCtx, byte[] undoLogContent, Connection conn) throws SQLException; @@ -411,7 +411,7 @@ protected abstract void insertUndoLogWithNormal(String xid, long branchId, Strin * * @param rs * @return - * @throws SQLException + * @throws SQLException SQLException */ protected byte[] getRollbackInfo(ResultSet rs) throws SQLException { byte[] rollbackInfo = rs.getBytes(ClientTableColumnsName.UNDO_LOG_ROLLBACK_INFO); @@ -425,8 +425,8 @@ protected byte[] getRollbackInfo(ResultSet rs) throws SQLException { /** * if the undoLogContent is big enough to be compress - * @param undoLogContent - * @return + * @param undoLogContent undoLogContent + * @return boolean */ protected boolean needCompress(byte[] undoLogContent) { return ROLLBACK_INFO_COMPRESS_ENABLE && undoLogContent.length > ROLLBACK_INFO_COMPRESS_THRESHOLD; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/KeywordChecker.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/KeywordChecker.java index eef48f24274..170aee1fbee 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/KeywordChecker.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/KeywordChecker.java @@ -32,7 +32,7 @@ public interface KeywordChecker { /** * check whether given field or table name use keywords. the method has database special logic. - * @param fieldOrTableName + * @param fieldOrTableName the field or table name * @return true: need to escape. false: no need to escape. */ boolean checkEscape(String fieldOrTableName); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/FstSerializer.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/FstSerializer.java index 88fd697c756..f090c9c09aa 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/FstSerializer.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/FstSerializer.java @@ -19,25 +19,30 @@ import org.nustaq.serialization.FSTObjectSerializer; /** + * The interface Fst serializer. + * * @author jsbxyyx */ public interface FstSerializer { /** * fst serializer class type - * @return + * + * @return class */ Class type(); /** * FSTObjectSerializer custom serializer - * @return + * + * @return fst object serializer */ FSTObjectSerializer ser(); /** * for sub classes - * @return + * + * @return boolean */ boolean alsoForAllSubclasses(); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/JacksonSerializer.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/JacksonSerializer.java index bfefa812f24..1b7028256c5 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/JacksonSerializer.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/JacksonSerializer.java @@ -20,25 +20,31 @@ import com.fasterxml.jackson.databind.JsonSerializer; /** + * The interface Jackson serializer. + * + * @param the type parameter * @author jsbxyyx */ public interface JacksonSerializer { /** * jackson serializer class type. - * @return + * + * @return class */ Class type(); /** * Jackson custom serializer - * @return + * + * @return json serializer */ JsonSerializer ser(); /** * Jackson custom deserializer - * @return + * + * @return json deserializer */ JsonDeserializer deser(); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/KryoTypeSerializer.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/KryoTypeSerializer.java index 54542359176..ab14a0b6610 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/KryoTypeSerializer.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/KryoTypeSerializer.java @@ -19,19 +19,24 @@ import com.esotericsoftware.kryo.Serializer; /** + * The interface Kryo type serializer. + * + * @param the type parameter * @author jsbxyyx */ public interface KryoTypeSerializer { /** * kryo serializer class type. - * @return + * + * @return class */ Class type(); /** * kryo custom serializer. - * @return + * + * @return serializer */ Serializer serializer(); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/ProtostuffDelegate.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/ProtostuffDelegate.java index 9ec9683985a..518983cae93 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/ProtostuffDelegate.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/parser/spi/ProtostuffDelegate.java @@ -19,13 +19,17 @@ import io.protostuff.runtime.Delegate; /** + * The interface Protostuff delegate. + * + * @param the type parameter * @author jsbxyyx */ public interface ProtostuffDelegate { /** * Delegate create. - * @return + * + * @return delegate */ Delegate create(); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java index e054390ceef..0533acc23e9 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java @@ -88,7 +88,8 @@ private void releaseIfNecessary() { * XA commit * @param xid global transaction xid * @param branchId transaction branch id - * @throws SQLException + * @param applicationData application data + * @throws SQLException SQLException */ public void xaCommit(String xid, long branchId, String applicationData) throws XAException { XAXid xaXid = XAXidBuilder.build(xid, branchId); @@ -101,7 +102,8 @@ public void xaCommit(String xid, long branchId, String applicationData) throws X * XA rollback * @param xid global transaction xid * @param branchId transaction branch id - * @throws SQLException + * @param applicationData application data + * @throws SQLException SQLException */ public void xaRollback(String xid, long branchId, String applicationData) throws XAException { XAXid xaXid = XAXidBuilder.build(xid, branchId); @@ -110,8 +112,8 @@ public void xaRollback(String xid, long branchId, String applicationData) throws /** * XA rollback - * @param xaXid - * @throws XAException + * @param xaXid xaXid + * @throws XAException XAException */ public void xaRollback(XAXid xaXid) throws XAException { xaResource.rollback(xaXid); diff --git a/rm/src/main/java/io/seata/rm/AbstractRMHandler.java b/rm/src/main/java/io/seata/rm/AbstractRMHandler.java index 5e21b8a1c9d..a80db885dcf 100644 --- a/rm/src/main/java/io/seata/rm/AbstractRMHandler.java +++ b/rm/src/main/java/io/seata/rm/AbstractRMHandler.java @@ -135,7 +135,7 @@ protected void doBranchRollback(BranchRollbackRequest request, BranchRollbackRes /** * get resource manager implement * - * @return + * @return resource manager */ protected abstract ResourceManager getResourceManager(); diff --git a/rm/src/main/java/io/seata/rm/AbstractResourceManager.java b/rm/src/main/java/io/seata/rm/AbstractResourceManager.java index 29ddad2026a..79b360cb5ec 100644 --- a/rm/src/main/java/io/seata/rm/AbstractResourceManager.java +++ b/rm/src/main/java/io/seata/rm/AbstractResourceManager.java @@ -51,8 +51,8 @@ public abstract class AbstractResourceManager implements ResourceManager { * @param clientId the client id * @param xid the xid * @param lockKeys the lock keys - * @return - * @throws TransactionException + * @return branchId + * @throws TransactionException TransactionException */ @Override public Long branchRegister(BranchType branchType, String resourceId, String clientId, String xid, String applicationData, String lockKeys) throws TransactionException { @@ -84,7 +84,7 @@ public Long branchRegister(BranchType branchType, String resourceId, String clie * @param branchId the branch id * @param status the status * @param applicationData the application data - * @throws TransactionException + * @throws TransactionException TransactionException */ @Override public void branchReport(BranchType branchType, String xid, long branchId, BranchStatus status, String applicationData) throws TransactionException { diff --git a/rm/src/main/java/io/seata/rm/DefaultResourceManager.java b/rm/src/main/java/io/seata/rm/DefaultResourceManager.java index 71264d1b7a5..36d23d806b8 100644 --- a/rm/src/main/java/io/seata/rm/DefaultResourceManager.java +++ b/rm/src/main/java/io/seata/rm/DefaultResourceManager.java @@ -58,8 +58,8 @@ public static DefaultResourceManager get() { /** * only for mock * - * @param branchType - * @param rm + * @param branchType branchType + * @param rm resource manager */ public static void mockResourceManager(BranchType branchType, ResourceManager rm) { resourceManagers.put(branchType, rm); @@ -134,8 +134,8 @@ public Map getManagedResources() { /** * get ResourceManager by Resource Type * - * @param branchType - * @return + * @param branchType branch type + * @return resource manager */ public ResourceManager getResourceManager(BranchType branchType) { ResourceManager rm = resourceManagers.get(branchType); diff --git a/serializer/seata-serializer-hessian/src/main/java/io/seata/serializer/hessian/HessianSerializer.java b/serializer/seata-serializer-hessian/src/main/java/io/seata/serializer/hessian/HessianSerializer.java index f353eb5abb6..322ba155fa3 100644 --- a/serializer/seata-serializer-hessian/src/main/java/io/seata/serializer/hessian/HessianSerializer.java +++ b/serializer/seata-serializer-hessian/src/main/java/io/seata/serializer/hessian/HessianSerializer.java @@ -28,7 +28,7 @@ import java.io.IOException; /** - * @Xin Wang + * @author XinWang */ @LoadLevel(name = "HESSIAN") public class HessianSerializer implements Serializer { diff --git a/serializer/seata-serializer-seata/src/main/java/io/seata/serializer/seata/MessageSeataCodec.java b/serializer/seata-serializer-seata/src/main/java/io/seata/serializer/seata/MessageSeataCodec.java index fdcd6d4e2b6..e2e03a04bd2 100644 --- a/serializer/seata-serializer-seata/src/main/java/io/seata/serializer/seata/MessageSeataCodec.java +++ b/serializer/seata-serializer-seata/src/main/java/io/seata/serializer/seata/MessageSeataCodec.java @@ -22,25 +22,22 @@ /** * The interface Message seata codec. - * - * @author zhangsen */ public interface MessageSeataCodec { /** - * Gets message type. + * Gets message class type. * - * @return the message type + * @return the message class type */ Class getMessageClassType(); /** - * Encode byte [ ]. + * Encode. * * @param the type parameter * @param t the t * @param out the out - * @return the byte [ ] */ void encode(T t, ByteBuf out); diff --git a/spring/src/main/java/io/seata/spring/annotation/GlobalLock.java b/spring/src/main/java/io/seata/spring/annotation/GlobalLock.java index 26e439f405f..0c436899f78 100644 --- a/spring/src/main/java/io/seata/spring/annotation/GlobalLock.java +++ b/spring/src/main/java/io/seata/spring/annotation/GlobalLock.java @@ -24,9 +24,9 @@ import org.aopalliance.intercept.MethodInvocation; /** - * declare the transaction only execute in single local RM,
+ * declare the transaction only execute in single local RM * but the transaction need to ensure records to update(or select for update) is not in global transaction middle - * stage
+ * stage * * use this annotation instead of GlobalTransaction in the situation mentioned above will help performance. * @@ -42,7 +42,7 @@ * customized global lock retry internal(unit: ms) * you may use this to override global config of "client.rm.lock.retryInterval" * note: 0 or negative number will take no effect(which mean fall back to global config) - * @return + * @return lock retry internal */ int lockRetryInternal() default 0; @@ -50,7 +50,7 @@ * customized global lock retry times * you may use this to override global config of "client.rm.lock.retryTimes" * note: negative number will take no effect(which mean fall back to global config) - * @return + * @return lock retry times */ int lockRetryTimes() default -1; } diff --git a/spring/src/main/java/io/seata/spring/annotation/GlobalTransactional.java b/spring/src/main/java/io/seata/spring/annotation/GlobalTransactional.java index 2b78858af49..9c325cd44dd 100644 --- a/spring/src/main/java/io/seata/spring/annotation/GlobalTransactional.java +++ b/spring/src/main/java/io/seata/spring/annotation/GlobalTransactional.java @@ -29,10 +29,18 @@ * The interface Global transactional. * * @author slievrly - * @see io.seata.spring.annotation.GlobalTransactionScanner#wrapIfNecessary(Object, String, Object) // the scanner for TM, GlobalLock, and TCC mode - * @see io.seata.spring.annotation.GlobalTransactionalInterceptor#handleGlobalTransaction(MethodInvocation, GlobalTransactional) // TM: the interceptor of TM - * @see io.seata.spring.annotation.datasource.SeataAutoDataSourceProxyAdvice#invoke(MethodInvocation) // RM: the interceptor of GlobalLockLogic and AT/XA mode - * @see io.seata.spring.tcc.TccActionInterceptor#invoke(MethodInvocation) // RM: the interceptor of TCC mode + * @see io.seata.spring.annotation.GlobalTransactionScanner#wrapIfNecessary(Object, String, Object) io.seata.spring + * .annotation.GlobalTransactionScanner#wrapIfNecessary(Object, String, Object)// the scanner for TM, GlobalLock, and + * TCC mode + * @see io.seata.spring.annotation.GlobalTransactionalInterceptor#handleGlobalTransaction(MethodInvocation, + * GlobalTransactional) io.seata.spring.annotation.GlobalTransactionalInterceptor#handleGlobalTransaction + * (MethodInvocation, + * GlobalTransactional)// TM: the interceptor of TM + * @see io.seata.spring.annotation.datasource.SeataAutoDataSourceProxyAdvice#invoke(MethodInvocation) io.seata.spring + * .annotation.datasource.SeataAutoDataSourceProxyAdvice#invoke(MethodInvocation)// RM: the interceptor of + * GlobalLockLogic and AT/XA mode + * @see io.seata.spring.tcc.TccActionInterceptor#invoke(MethodInvocation) io.seata.spring.tcc + * .TccActionInterceptor#invoke(MethodInvocation)// RM: the interceptor of TCC mode */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE}) @@ -41,7 +49,8 @@ /** * Global transaction timeoutMills in MILLISECONDS. - * If client.tm.default-global-transaction-timeout is configured, It will replace the DefaultValues.DEFAULT_GLOBAL_TRANSACTION_TIMEOUT. + * If client.tm.default-global-transaction-timeout is configured, It will replace the DefaultValues + * .DEFAULT_GLOBAL_TRANSACTION_TIMEOUT. * * @return timeoutMills in MILLISECONDS. */ @@ -56,31 +65,36 @@ /** * roll back for the Class - * @return + * + * @return the class array of the rollback for */ Class[] rollbackFor() default {}; /** * roll back for the class name - * @return + * + * @return the class name of rollback for */ String[] rollbackForClassName() default {}; /** * not roll back for the Class - * @return + * + * @return the class array of no rollback for */ Class[] noRollbackFor() default {}; /** * not roll back for the class name - * @return + * + * @return string [ ] */ String[] noRollbackForClassName() default {}; /** * the propagation of the global transaction - * @return + * + * @return propagation */ Propagation propagation() default Propagation.REQUIRED; @@ -88,7 +102,8 @@ * customized global lock retry internal(unit: ms) * you may use this to override global config of "client.rm.lock.retryInterval" * note: 0 or negative number will take no effect(which mean fall back to global config) - * @return + * + * @return int */ int lockRetryInternal() default 0; @@ -96,7 +111,8 @@ * customized global lock retry times * you may use this to override global config of "client.rm.lock.retryTimes" * note: negative number will take no effect(which mean fall back to global config) - * @return + * + * @return int */ int lockRetryTimes() default -1; } diff --git a/spring/src/main/java/io/seata/spring/tcc/TccAnnotationProcessor.java b/spring/src/main/java/io/seata/spring/tcc/TccAnnotationProcessor.java index 5913539a6b3..c2674cc5dfc 100644 --- a/spring/src/main/java/io/seata/spring/tcc/TccAnnotationProcessor.java +++ b/spring/src/main/java/io/seata/spring/tcc/TccAnnotationProcessor.java @@ -58,13 +58,12 @@ private static Class loadAnnotation(String annotation) { } } - /** * Process annotation * - * @param bean - * @param beanName - * @param annotation + * @param bean the bean + * @param beanName the bean name + * @param annotation the annotation */ protected void process(Object bean, String beanName, Class annotation) { if (Objects.isNull(annotation) || PROXIED_SET.contains(beanName)) { @@ -88,12 +87,11 @@ protected void process(Object bean, String beanName, Class /** * Add TCC interceptor for tcc proxy bean * - * @param bean - * @param beanName - * @param field - * @param interfaceClass - * @return - * @throws IllegalAccessException + * @param bean the bean + * @param beanName the bean name + * @param field the field + * @param interfaceClass the interface class + * @throws IllegalAccessException the illegal access exception */ public void addTccAdvise(Object bean, String beanName, Field field, Class interfaceClass) throws IllegalAccessException { Object fieldValue = field.get(bean); diff --git a/spring/src/main/java/io/seata/spring/util/SpringProxyUtils.java b/spring/src/main/java/io/seata/spring/util/SpringProxyUtils.java index e57cf8ca571..e44f7bbda7c 100644 --- a/spring/src/main/java/io/seata/spring/util/SpringProxyUtils.java +++ b/spring/src/main/java/io/seata/spring/util/SpringProxyUtils.java @@ -132,9 +132,9 @@ public static Class getTargetInterface(Object proxy) throws Exception { /** * Get the class type of the proxy target object, if hadn't a target object, return the interface of the proxy * - * @param proxy - * @return - * @throws Exception + * @param proxy the proxy + * @return target interface + * @throws Exception the exception */ protected static Class getTargetClass(Object proxy) throws Exception { if (proxy == null) { @@ -162,8 +162,8 @@ protected static Class getTargetClass(Object proxy) throws Exception { /** * get the all interfaces of bean, if the bean is null, then return empty array - * @param bean - * @return + * @param bean the bean + * @return target interface */ public static Class[] getAllInterfaces(Object bean) { Set> interfaces = new HashSet<>(); diff --git a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/WhereRecognizer.java b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/WhereRecognizer.java index 28f2b4db5c4..cfc84f2c6e6 100644 --- a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/WhereRecognizer.java +++ b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/WhereRecognizer.java @@ -28,8 +28,8 @@ public interface WhereRecognizer extends SQLRecognizer { /** * Gets where condition. * - * @param parametersHolder the parameters holder - * @param paramAppenderList the param appender list + * @param parametersHolder the parameters holder + * @param paramAppenderList the param appender list * @return the where condition */ String getWhereCondition(ParametersHolder parametersHolder, ArrayList> paramAppenderList); @@ -44,6 +44,8 @@ public interface WhereRecognizer extends SQLRecognizer { /** * Return the limit SQL * + * @param parametersHolder the parameters holder + * @param paramAppenderList the param appender list * @return The limit SQL. */ default String getLimit(ParametersHolder parametersHolder, ArrayList> paramAppenderList) { diff --git a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/struct/Defaultable.java b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/struct/Defaultable.java index 883100046f7..544d31fb3aa 100644 --- a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/struct/Defaultable.java +++ b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/struct/Defaultable.java @@ -20,14 +20,16 @@ /** * The default expr able. + * * @author jsbxyyx */ public interface Defaultable { /** * get primary key values by default keyword. - * @return - * @throws SQLException + * + * @return pk values by default + * @throws SQLException the sql exception */ List getPkValuesByDefault() throws SQLException; diff --git a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/struct/Sequenceable.java b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/struct/Sequenceable.java index 9c80ae49dfe..299279fb0b9 100644 --- a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/struct/Sequenceable.java +++ b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/struct/Sequenceable.java @@ -17,14 +17,16 @@ /** * The sequence able. + * * @author jsbxyyx */ public interface Sequenceable { /** * get sequence sql. - * @param expr - * @return + * + * @param expr the expr + * @return sequence sql */ String getSequenceSql(SqlSequenceExpr expr); diff --git a/tcc/src/main/java/io/seata/rm/tcc/RMHandlerTCC.java b/tcc/src/main/java/io/seata/rm/tcc/RMHandlerTCC.java index b6927dde195..28eb1386073 100644 --- a/tcc/src/main/java/io/seata/rm/tcc/RMHandlerTCC.java +++ b/tcc/src/main/java/io/seata/rm/tcc/RMHandlerTCC.java @@ -33,11 +33,6 @@ public void handle(UndoLogDeleteRequest request) { //DO nothing } - /** - * get TCC resource manager - * - * @return - */ @Override protected ResourceManager getResourceManager() { return DefaultResourceManager.get().getResourceManager(BranchType.TCC); diff --git a/tcc/src/main/java/io/seata/rm/tcc/TCCResourceManager.java b/tcc/src/main/java/io/seata/rm/tcc/TCCResourceManager.java index e149c5912d9..77dbe799635 100644 --- a/tcc/src/main/java/io/seata/rm/tcc/TCCResourceManager.java +++ b/tcc/src/main/java/io/seata/rm/tcc/TCCResourceManager.java @@ -75,8 +75,8 @@ public Map getManagedResources() { * @param branchId Branch id. * @param resourceId Resource id. * @param applicationData Application data bind with this branch. - * @return - * @throws TransactionException + * @return BranchStatus + * @throws TransactionException TransactionException */ @Override public BranchStatus branchCommit(BranchType branchType, String xid, long branchId, String resourceId, @@ -122,8 +122,8 @@ public BranchStatus branchCommit(BranchType branchType, String xid, long branchI * @param branchId Branch id. * @param resourceId Resource id. * @param applicationData Application data bind with this branch. - * @return - * @throws TransactionException + * @return BranchStatus + * @throws TransactionException TransactionException */ @Override public BranchStatus branchRollback(BranchType branchType, String xid, long branchId, String resourceId, diff --git a/tcc/src/main/java/io/seata/rm/tcc/remoting/parser/DefaultRemotingParser.java b/tcc/src/main/java/io/seata/rm/tcc/remoting/parser/DefaultRemotingParser.java index 52e58422426..00724d7c36e 100644 --- a/tcc/src/main/java/io/seata/rm/tcc/remoting/parser/DefaultRemotingParser.java +++ b/tcc/src/main/java/io/seata/rm/tcc/remoting/parser/DefaultRemotingParser.java @@ -155,8 +155,9 @@ public RemotingDesc getServiceDesc(Object bean, String beanName) { /** * parse the remoting bean info * - * @param bean the bean - * @param beanName the bean name + * @param bean the bean + * @param beanName the bean name + * @param remotingParser the remoting parser * @return remoting desc */ public RemotingDesc parserRemotingServiceInfo(Object bean, String beanName, RemotingParser remotingParser) { diff --git a/tcc/src/main/java/io/seata/rm/tcc/remoting/parser/SofaRpcRemotingParser.java b/tcc/src/main/java/io/seata/rm/tcc/remoting/parser/SofaRpcRemotingParser.java index 79a41eb713f..6673be5fe61 100644 --- a/tcc/src/main/java/io/seata/rm/tcc/remoting/parser/SofaRpcRemotingParser.java +++ b/tcc/src/main/java/io/seata/rm/tcc/remoting/parser/SofaRpcRemotingParser.java @@ -27,14 +27,7 @@ */ public class SofaRpcRemotingParser extends AbstractedRemotingParser { - /** - * is reference bean ? - * - * @param bean - * @param beanName - * @return - * @throws FrameworkException - */ + @Override public boolean isReference(Object bean, String beanName) throws FrameworkException { @@ -42,14 +35,7 @@ public boolean isReference(Object bean, String beanName) return "com.alipay.sofa.runtime.spring.factory.ReferenceFactoryBean".equals(beanClassName); } - /** - * is service bean ? - * - * @param bean - * @param beanName - * @return - * @throws FrameworkException - */ + @Override public boolean isService(Object bean, String beanName) throws FrameworkException { String beanClassName = bean.getClass().getName(); diff --git a/tm/src/main/java/io/seata/tm/api/GlobalTransaction.java b/tm/src/main/java/io/seata/tm/api/GlobalTransaction.java index 666f748bd77..355b91d0493 100644 --- a/tm/src/main/java/io/seata/tm/api/GlobalTransaction.java +++ b/tm/src/main/java/io/seata/tm/api/GlobalTransaction.java @@ -72,7 +72,6 @@ public interface GlobalTransaction { /** * Suspend the global transaction. * - * @param unbindXid if true,suspend the global transaction. * @return the SuspendedResourcesHolder which holds the suspend resources * @throws TransactionException Any exception that fails this will be wrapped with TransactionException and thrown * @see SuspendedResourcesHolder diff --git a/tm/src/main/java/io/seata/tm/api/TransactionalExecutor.java b/tm/src/main/java/io/seata/tm/api/TransactionalExecutor.java index c52d8633b6d..a8519648604 100644 --- a/tm/src/main/java/io/seata/tm/api/TransactionalExecutor.java +++ b/tm/src/main/java/io/seata/tm/api/TransactionalExecutor.java @@ -34,7 +34,7 @@ public interface TransactionalExecutor { /** * transaction conf or other attr - * @return + * @return transaction info */ TransactionInfo getTransactionInfo(); diff --git a/tm/src/main/java/io/seata/tm/api/transaction/TransactionHookManager.java b/tm/src/main/java/io/seata/tm/api/transaction/TransactionHookManager.java index f1da7da0c69..8beb7eb72bc 100644 --- a/tm/src/main/java/io/seata/tm/api/transaction/TransactionHookManager.java +++ b/tm/src/main/java/io/seata/tm/api/transaction/TransactionHookManager.java @@ -33,8 +33,8 @@ private TransactionHookManager() { /** * get the current hooks * - * @return - * @throws IllegalStateException + * @return TransactionHook list + * @throws IllegalStateException IllegalStateException */ public static List getHooks() throws IllegalStateException { List hooks = LOCAL_HOOKS.get(); @@ -48,7 +48,7 @@ public static List getHooks() throws IllegalStateException { /** * add new hook * - * @param transactionHook + * @param transactionHook transactionHook */ public static void registerHook(TransactionHook transactionHook) { if (transactionHook == null) { From faa1b7ddd49695bf81bb1035c91b48b81de71304 Mon Sep 17 00:00:00 2001 From: liujian <46431414+lj2018110133@users.noreply.github.com> Date: Sat, 24 Apr 2021 01:40:52 +0800 Subject: [PATCH 92/93] optimize:register the participating companies and pull request information (#3637) --- README.md | 31 +-- changes/1.4.2.md | 176 ++++++++++++++++++ changes/1.5.0.md | 138 -------------- changes/en-us/{1.5.0.md => 1.4.2.md} | 132 ++++++++----- .../io/seata/core/context/RootContext.java | 12 +- script/config-center/config.txt | 2 + 6 files changed, 288 insertions(+), 203 deletions(-) create mode 100644 changes/1.4.2.md delete mode 100644 changes/1.5.0.md rename changes/en-us/{1.5.0.md => 1.4.2.md} (54%) diff --git a/README.md b/README.md index b04a895eaf6..0bf75718e03 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ - + # Seata: Simple Extensible Autonomous Transaction Architecture @@ -157,13 +157,16 @@ here](https://github.com/seata/seata/issues/1246) to tell us your scenario to ma TCL 韵达快递 科大讯飞 + 奇虎360 + 收钱吧 太极计算机 + 美的集团 + 中国网安 政采云 浙江公安厅 特步 - 欧莱雅百库 中通快递 - 美的集团 + 欧莱雅百库 浙江烟草 波司登 凯京科技 @@ -177,14 +180,15 @@ here](https://github.com/seata/seata/issues/1246) to tell us your scenario to ma 北京薪福社 叩丁狼教育 悦途出行 + 国信易企签 睿颐软件 + 全房通 有利网 赛维 安心保险 科达科技 会分期 会找房 - 全房通 会通教育 享住智慧 兰亮网络 @@ -192,6 +196,7 @@ here](https://github.com/seata/seata/issues/1246) to tell us your scenario to ma 蓝天教育 烟台欣合 阿康健康 + 财新传媒 新脉远 乾动新能源 路客精品民宿 @@ -213,35 +218,37 @@ here](https://github.com/seata/seata/issues/1246) to tell us your scenario to ma 数跑科技 拉粉粉 汇通达 - 财新传媒 易宝支付 维恩贝特 八库 大诚若谷 杭州华网信息 + 深圳易佰 + 易点生活 成都数智索 北京超图 - 深圳易佰 江西群享科技有限公司 宋城独木桥网络有限公司 唯小宝(江苏)网络技术有限公司 - 宿迁民丰农商银行 杭州喜团科技 + 海典软件 + 中元健康科技有限公司 + 宿迁民丰农商银行 上海海智在线 丞家(上海)公寓管理 安徽国科新材科 - 易点生活 商银信支付 钛师傅云 广州力生信息 杭州启舰科技有限公司 + 微链 上海美浮特 + 江西群享科技有限公司 杭州中威慧云医疗科技有限公司 - 微链 - 海典软件 易族智汇(北京) 佛山宅无限 F5未来商店 + 重庆雷高科技有限公司 甄品信息科技 行云全球汇跨境电商(杭州分部) 世纪加华 @@ -264,7 +271,6 @@ here](https://github.com/seata/seata/issues/1246) to tell us your scenario to ma 上海阳光喔教育科技有限公司 北京新学道教育科技有限公司 北京悦途出行网络科技公司 - 国信易企签 上海意贝斯特信息技术有限公司 御家汇 广州社众软件 @@ -276,7 +282,8 @@ here](https://github.com/seata/seata/issues/1246) to tell us your scenario to ma 熙菱信息 鲸算科技 杭州沃朴物联科技有限公司 - 深圳市臻络科技有限公司 + 深圳市臻络科技有限公司 + 白云电气 diff --git a/changes/1.4.2.md b/changes/1.4.2.md new file mode 100644 index 00000000000..204f9ae04bf --- /dev/null +++ b/changes/1.4.2.md @@ -0,0 +1,176 @@ +### 1.4.2 + + [source](https://github.com/seata/seata/archive/v1.4.2.zip) | + [binary](https://github.com/seata/seata/releases/download/v1.4.2/seata-server-1.4.2.zip) + +
+ Release notes + + + ### Seata 1.4.2 + +Seata 1.4.2 发布。 + +Seata 是一款开源的分布式事务解决方案,提供高性能和简单易用的分布式事务服务。 + +此版本更新如下: + + ### feature: + + - [[#3172](https://github.com/seata/seata/pull/3172)] 支持 AT 模式 undo_log 压缩模式 + - [[#3372](https://github.com/seata/seata/pull/3372)] 支持saga模式下用户自定义是否更新最后一次重试日志 + - [[#3411](https://github.com/seata/seata/pull/3411)] 支持seata-server 线程池参数可配置 + - [[#3348](https://github.com/seata/seata/pull/3348)] 支持 TC 存储模式使用 redis-sentinel + - [[#2667](https://github.com/seata/seata/pull/2667)] 支持使用db和redis存储模式时密码的加解密 + - [[#3427](https://github.com/seata/seata/pull/3427)] 支持分布式锁接口 + - [[#3443](https://github.com/seata/seata/pull/3443)] 支持将seata-server的日志发送到logstash或kafka中 + - [[#3486](https://github.com/seata/seata/pull/3486)] 支持Metrics增加事务分组属性 + - [[#3317](https://github.com/seata/seata/pull/3317)] 支持当zookeeper作为配置中心时从单node获取全部配置 + - [[#2933](https://github.com/seata/seata/pull/2933)] 支持mysql antlr sqlparser + - [[#3228](https://github.com/seata/seata/pull/3228)] 支持自定义序列化插件 + - [[#3516](https://github.com/seata/seata/pull/3516)] 支持 consul 作为注册中心和配置中心时的 acl-token + - [[#3116](https://github.com/seata/seata/pull/3116)] 支持配置 apollo 配置中心配置 configService 和 cluster + - [[#3468](https://github.com/seata/seata/pull/3468)] 支持saga模式下任务循环执行 + - [[#3447](https://github.com/seata/seata/pull/3447)] 支持日志框架中事务上下文的打印 + + + ### bugfix: + + - [[#3258](https://github.com/seata/seata/pull/3258)] 修复AsyncWorker潜在的OOM问题 + - [[#3293](https://github.com/seata/seata/pull/3293)] 修复配置缓存获取值类型不匹配的问题 + - [[#3241](https://github.com/seata/seata/pull/3241)] 禁止在多SQL的情况下使用 limit 和 order by 语法 + - [[#3406](https://github.com/seata/seata/pull/3406)] 修复当config.txt中包含特殊字符时无法推送至 nacos 的问题 + - [[#3367](https://github.com/seata/seata/pull/3367)] 修复最后一个XA分支二阶段时偶发无法回滚的异常 + - [[#3418](https://github.com/seata/seata/pull/3418)] 修复 getGeneratedKeys 可能会取到历史的主键的问题 + - [[#3448](https://github.com/seata/seata/pull/3448)] 修复多个锁竞争失败时,仅删除单个锁,并优化锁竞争逻辑提升处理性能 + - [[#3408](https://github.com/seata/seata/pull/3408)] 修复jar运行模式第三方依赖分离打包时的NPE问题 + - [[#3431](https://github.com/seata/seata/pull/3431)] 修复在读取配置时Property Bean可能未初始化的问题 + - [[#3413](https://github.com/seata/seata/pull/3413)] 修复回滚到savepoint以及releaseSavepoint的逻辑 + - [[#3451](https://github.com/seata/seata/pull/3451)] 修复autoCommit=true,全局锁竞争失败时的脏写问题 + - [[#3481](https://github.com/seata/seata/pull/3481)] 修复当 consul client 抛出异常时导致刷新任务中断的问题 + - [[#3491](https://github.com/seata/seata/pull/3491)] 修复README.md文件中的拼写错误 + - [[#3531](https://github.com/seata/seata/pull/3531)] 修复RedisTransactionStoreManager 获取 brachTransaction 可能的 NPE 问题 + - [[#3500](https://github.com/seata/seata/pull/3500)] 修复 oracle 和 postgreSql 无法获取 column info 的问题 + - [[#3560](https://github.com/seata/seata/pull/3560)] 修复 Committing 状态的事务异步任务没有时间阈值和无法进行事务恢复的问题 + - [[#3555](https://github.com/seata/seata/pull/3555)] 通过setBytes代替setBlob,避免高版本jdbc驱动工作异常 + - [[#3540](https://github.com/seata/seata/pull/3540)] 修复server发布打包时缺失文件的问题 + - [[#3597](https://github.com/seata/seata/pull/3597)] 修复可能的 NPE问题 + - [[#3568](https://github.com/seata/seata/pull/3568)] 修复自动数据源代理因 ConcurrentHashMap.computeIfAbsent 导致的死锁问题 + - [[#3402](https://github.com/seata/seata/pull/3402)] 修复更新SQL中字段名含有库名无法解析更新列的问题 + - [[#3464](https://github.com/seata/seata/pull/3464)] 修复测试用例空指针异常和StackTraceLogger中错误的日志格式. + - [[#3522](https://github.com/seata/seata/pull/3522)] 修复当 DML 影响行数为0时注册分支和插入undo_log的问题 + - [[#3635](https://github.com/seata/seata/pull/3635)] 修复zookeeper 配置变更无法推送通知的问题 + - [[#3133](https://github.com/seata/seata/pull/3133)] 修复某些场景下无法重试全局锁的问题 + - [[#3156](https://github.com/seata/seata/pull/3156)] 修复嵌套代理类无法 获取target的问题 + + + ### optimize: + + - [[#3341](https://github.com/seata/seata/pull/3341)] 优化获取指定配置文件的路径格式问题 + - [[#3385](https://github.com/seata/seata/pull/3385)] 优化 GitHub Actions 配置,修复单测失败问题 + - [[#3175](https://github.com/seata/seata/pull/3175)] 支持雪花算法时钟回拨 + - [[#3291](https://github.com/seata/seata/pull/3291)] 优化mysql连接参数 + - [[#3336](https://github.com/seata/seata/pull/3336)] 支持使用System.getProperty获取Netty配置参数 + - [[#3369](https://github.com/seata/seata/pull/3369)] 添加github action的dockerHub秘钥 + - [[#3343](https://github.com/seata/seata/pull/3343)] 将CI程序从Travis CI迁移到Github Actions + - [[#3397](https://github.com/seata/seata/pull/3397)] 增加代码变更记录 + - [[#3303](https://github.com/seata/seata/pull/3303)] 支持从nacos单一dataId中读取所有配置 + - [[#3380](https://github.com/seata/seata/pull/3380)] 优化 globalTransactionScanner 中的 DISABLE_GLOBAL_TRANSACTION listener + - [[#3123](https://github.com/seata/seata/pull/3123)] 优化 seata-server 打包策略 + - [[#3415](https://github.com/seata/seata/pull/3415)] 优化 maven 打包时清除 distribution 目录 + - [[#3316](https://github.com/seata/seata/pull/3316)] 优化读取配置值时属性bean未初始化的问题 + - [[#3420](https://github.com/seata/seata/pull/3420)] 优化枚举类的使用并添加单元测试 + - [[#3533](https://github.com/seata/seata/pull/3533)] 支持获取当前事务角色 + - [[#3436](https://github.com/seata/seata/pull/3436)] 优化SQLType类中的错别字 + - [[#3439](https://github.com/seata/seata/pull/3439)] 调整springApplicationContextProvider order以使其可以在xml bean之前被调用 + - [[#3248](https://github.com/seata/seata/pull/3248)] 优化负载均衡配置迁移到client节点下 + - [[#3441](https://github.com/seata/seata/pull/3441)] 优化starter的自动配置处理 + - [[#3466](https://github.com/seata/seata/pull/3466)] 优化使用equalsIgnoreCase() 进行字符串比较 + - [[#3476](https://github.com/seata/seata/pull/3476)] 支持 server 参数传入hostname时自动将其转换为 ip + - [[#3236](https://github.com/seata/seata/pull/3236)] 优化执行解锁操作的条件,减少不必要的 unlock 操作 + - [[#3485](https://github.com/seata/seata/pull/3485)] 删除 ConfigurationFactory 中无用的代码 + - [[#3505](https://github.com/seata/seata/pull/3505)] 删除 GlobalTransactionScanner 中无用的 if 判断 + - [[#3544](https://github.com/seata/seata/pull/3544)] 优化无法通过Statement#getGeneratedKeys时,只能获取到批量插入的第一个主键的问题 + - [[#3549](https://github.com/seata/seata/pull/3549)] 统一DB存储模式下不同表中的xid字段的长度 + - [[#3551](https://github.com/seata/seata/pull/3551)] 调大RETRY_DEAD_THRESHOLD的值以及设置成可配置 + - [[#3589](https://github.com/seata/seata/pull/3589)] 使用JUnit API做异常检查 + - [[#3601](https://github.com/seata/seata/pull/3601)] 使`LoadBalanceProperties`与`spring-boot:2.x`及以上版本兼容 + - [[#3513](https://github.com/seata/seata/pull/3513)] Saga SpringBeanService调用器支持切换 json 解析器 + - [[#3318](https://github.com/seata/seata/pull/3318)] 支持 CLIENT_TABLE_META_CHECKER_INTERVAL 可配置化 + - [[#3371](https://github.com/seata/seata/pull/3371)] 支持 metric 按 applicationId 分组 + - [[#3459](https://github.com/seata/seata/pull/3459)] 删除重复的ValidadAddress代码 + - [[#3215](https://github.com/seata/seata/pull/3215)] 优化seata-server 在file模式下启动时的reload逻辑 + - [[#3631](https://github.com/seata/seata/pull/3631)] 优化 nacos-config.py 脚本的入参问题 + - [[#3638](https://github.com/seata/seata/pull/3638)] 优化 update 和 delete 的 SQL 不支持 join 的错误提示 + - [[#3523](https://github.com/seata/seata/pull/3523)] 优化当使用oracle时调用releaseSavepoint()方法报异常的问题 + - [[#3458](https://github.com/seata/seata/pull/3458)] 还原已删除的md + - [[#3574](https://github.com/seata/seata/pull/3574)] 修复EventBus.java文件中注释拼写错误 + - [[#3573](https://github.com/seata/seata/pull/3573)] 修复 README.md 文件中设计器路径错误 + - [[#3662](https://github.com/seata/seata/pull/3662)] 更新gpg密钥对 + - [[#3664](https://github.com/seata/seata/pull/3664)] 优化 javadoc + - [[#3637](https://github.com/seata/seata/pull/3637)] 登记使用seata的公司和1.4.2版本包含的新增pr信息 + + ### test + + - [[#3381](https://github.com/seata/seata/pull/3381)] 添加 TmClient 的测试用例 + - [[#3607](https://github.com/seata/seata/pull/3607)] 修复 EventBus 的单元测试问题 + - [[#3579](https://github.com/seata/seata/pull/3579)] 添加 StringFormatUtils 测试用例 + - [[#3365](https://github.com/seata/seata/pull/3365)] 修复ParameterParserTest测试用例 + - [[#3359](https://github.com/seata/seata/pull/3359)] 删除未使用的测试用例 + - [[#3383](https://github.com/seata/seata/pull/3383)] 优化StatementProxyTest单元测试 + - [[#3578](https://github.com/seata/seata/pull/3578)] 修复单元测试case里的UnfinishedStubbing异常 + + + 非常感谢以下 contributors 的代码贡献。若有无意遗漏,请报告。 + + - [slievrly](https://github.com/slievrly) + - [caohdgege](https://github.com/caohdgege) + - [a364176773](https://github.com/a364176773) + - [wangliang181230](https://github.com/wangliang181230) + - [xingfudeshi](https://github.com/xingfudeshi) + - [jsbxyyx](https://github.com/jsbxyyx) + - [selfishlover](https://github.com/selfishlover) + - [l8189352](https://github.com/l81893521) + - [Rubbernecker](https://github.com/Rubbernecker) + - [lj2018110133](https://github.com/lj2018110133) + - [github-ganyu](https://github.com/github-ganyu) + - [dmego](https://github.com/dmego) + - [spilledyear](https://github.com/spilledyear) + - [hoverruan](https://github.com/hoverruan ) + - [anselleeyy](https://github.com/anselleeyy) + - [Ifdevil](https://github.com/Ifdevil) + - [lvxianzheng](https://github.com/lvxianzheng) + - [MentosL](https://github.com/MentosL) + - [lian88jian](https://github.com/lian88jian) + - [litianyu1992](https://github.com/litianyu1992) + - [xyz327](https://github.com/xyz327) + - [13414850431](https://github.com/13414850431) + - [xuande](https://github.com/xuande) + - [tanggen](https://github.com/tanggen) + - [eas5](https://github.com/eas5) + - [nature80](https://github.com/nature80) + - [ls9527](https://github.com/ls9527) + - [drgnchan](https://github.com/drgnchan) + - [imyangyong](https://github.com/imyangyong) + - [sunlggggg](https://github.com/sunlggggg) + - [long187](https://github.com/long187) + - [h-zhi](https://github.com/h-zhi) + - [StellaiYang](https://github.com/StellaiYang) + - [slinpq](https://github.com/slinpq) + - [sustly](https://github.com/sustly) + - [cznc](https://github.com/cznc) + - [squallliu](https://github.com/squallliu) + - [81519434](https://github.com/81519434) + - [luoxn28](https://github.com/luoxn28) + + +同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 + + #### Link + + - **Seata:** https://github.com/seata/seata + - **Seata-Samples:** https://github.com/seata/seata-samples + - **Release:** https://github.com/seata/seata/releases + - **WebSite:** https://seata.io + +
diff --git a/changes/1.5.0.md b/changes/1.5.0.md deleted file mode 100644 index f1dee2681ca..00000000000 --- a/changes/1.5.0.md +++ /dev/null @@ -1,138 +0,0 @@ -### 1.5.0 - - [source](https://github.com/seata/seata/archive/v1.5.0.zip) | - [binary](https://github.com/seata/seata/releases/download/v1.5.0/seata-server-1.5.0.zip) - -
- Release notes - - - ### Seata 1.5.0 - -Seata 1.5.0 发布。 - -Seata 是一款开源的分布式事务解决方案,提供高性能和简单易用的分布式事务服务。 - -此版本更新如下: - - ### feature: - - - [[#3172](https://github.com/seata/seata/pull/3172)] 支持undolog压缩 - - [[#3372](https://github.com/seata/seata/pull/3372)] saga模式下支持用户自定义是否更新最后一次重试日志 - - [[#3411](https://github.com/seata/seata/pull/3411)] 支持配置seata服务器的线程池参数 - - [[#3348](https://github.com/seata/seata/pull/3348)] 支持redis哨兵模式 - - [[#2667](https://github.com/seata/seata/pull/2667)] 支持db和redis密码加解密 - - [[#3427](https://github.com/seata/seata/pull/3427)] 添加分布式锁接口 - - [[#3443](https://github.com/seata/seata/pull/3443)] 将`seata-server`的日志发送到`logstash`或`kafka`中,再存入`ElasticSearch` - - [[#3486](https://github.com/seata/seata/pull/3486)] Metrics增加事务分组属性 - - [[#3468](https://github.com/seata/seata/pull/3468)] saga模式支持任务循环执行 - - - ### bugfix: - - - [[#3258](https://github.com/seata/seata/pull/3258)] 修复AsyncWorker潜在的OOM问题 - - [[#3293](https://github.com/seata/seata/pull/3293)] 修复配置缓存获取值时类型不匹配的bug - - [[#3241](https://github.com/seata/seata/pull/3241)] 禁止在多SQL的情况下使用 limit 和 order by 语法 - - [[#3406](https://github.com/seata/seata/pull/3406)] 修复当config.txt中包含特殊字符时,键值对无法被推上nacos - - [[#3367](https://github.com/seata/seata/pull/3367)] 修复最后一个XA分支二阶段时偶发无法回滚的异常 - - [[#3418](https://github.com/seata/seata/pull/3418)] 修复 getGeneratedKeys 可能会取到历史的主键的问题 - - [[#3448](https://github.com/seata/seata/pull/3448)] 修复多个锁竞争失败时,仅删除单个锁,并优化锁竞争逻辑提升处理性能 - - [[#3408](https://github.com/seata/seata/pull/3408)] 修复jar运行模式, 当第三方依赖分开打包时, this.getClass().getClassLoader()是null, 会报空指针异常 - - [[#3431](https://github.com/seata/seata/pull/3431)] 修复在读取配置时Property Bean可能还未初始化 - - [[#3413](https://github.com/seata/seata/pull/3413)] 修复回滚到savepoint以及releaseSavepoint的逻辑 - - [[#3451](https://github.com/seata/seata/pull/3451)] 修复当不使用本地事务且设置自动提交为true时,全局锁竞争失败会使得rm退出全局事务,导致全局锁在rm重试时失效,数据被脏写 - - [[#3481](https://github.com/seata/seata/pull/3481)] 修复当 consul client 获取集群信息报错时会导致刷新任务中断 - - [[#3491](https://github.com/seata/seata/pull/3491)] 修复README.md文件中的拼写错误 - - [[#3531](https://github.com/seata/seata/pull/3531)] 修复RedisTransactionStoreManager读取brachTransaction中的NPE - - [[#3500](https://github.com/seata/seata/pull/3500)] 修复 oracle 和 postgreSql 不能查询出 column info 的问题 - - [[#3560](https://github.com/seata/seata/pull/3560)] 修复 Committing 状态的事务没有时间阈值问题 - - [[#3555](https://github.com/seata/seata/pull/3555)] 通过setBytes代替setBlob,避免高版本jdbc驱动工作异常 - - [[#3540](https://github.com/seata/seata/pull/3540)] 修复server发布打包时缺失文件 - - [[#3573](https://github.com/seata/seata/pull/3573)] 修复 README.md 文件中设计器路径错误 - - [[#3597](https://github.com/seata/seata/pull/3597)] 修复可能导致NPE的问题 - - ### optimize: - - - [[#3383](https://github.com/seata/seata/pull/3383)] 优化StatementProxyTest单元测试 - - [[#3341](https://github.com/seata/seata/pull/3341)] 可获取无file:前缀的配置文件 - - [[#3385](https://github.com/seata/seata/pull/3385)] 优化github action - - [[#3175](https://github.com/seata/seata/pull/3175)] 重构雪花id算法 - - [[#3291](https://github.com/seata/seata/pull/3291)] 优化mysql连接参数 - - [[#3336](https://github.com/seata/seata/pull/3336)] 从环境变量中获取netty配置属性 - - [[#3369](https://github.com/seata/seata/pull/3369)] 添加github action的dockerHub秘钥 - - [[#3343](https://github.com/seata/seata/pull/3343)] 将CI程序从Travis CI迁移到Github Actions - - [[#3365](https://github.com/seata/seata/pull/3365)] 修复ParameterParserTest测试用例 - - [[#3359](https://github.com/seata/seata/pull/3359)] 删除未使用的测试用例 - - [[#3397](https://github.com/seata/seata/pull/3397)] 添加更改记录文件夹 - - [[#3303](https://github.com/seata/seata/pull/3303)] 支持从nacos单一dataId中读取所有配置 - - [[#3317](https://github.com/seata/seata/pull/3317)] 支持从zookeeper单一node中读取所有配置 - - [[#3380](https://github.com/seata/seata/pull/3380)] 优化globalTransactionScanner监听器 - - [[#3123](https://github.com/seata/seata/pull/3123)] seata-server的目录按版本号构建,且仅当profile为release-seata时才构建 - - [[#3415](https://github.com/seata/seata/pull/3415)] 优化 maven clean 插件可清除 distribution 目录 - - [[#3316](https://github.com/seata/seata/pull/3316)] 优化读取配置值时,属性bean可能未初始化 - - [[#3420](https://github.com/seata/seata/pull/3420)] 优化枚举类并添加单元测试 - - [[#3533](https://github.com/seata/seata/pull/3533)] 添加获取当前对应事务角色接口 - - [[#3436](https://github.com/seata/seata/pull/3436)] 优化SQLType类中的错别字 - - [[#3439](https://github.com/seata/seata/pull/3439)] 调整springApplicationContextProvider的顺序以使得他可以在xml的bean之前被调用 - - [[#3248](https://github.com/seata/seata/pull/3248)] 优化负载均衡配置迁移到client节点下 - - [[#3156](https://github.com/seata/seata/pull/3156)] 优化SpringProxyUtils.findTargetClass的逻辑 - - [[#3441](https://github.com/seata/seata/pull/3441)] 优化starter的自动配置处理 - - [[#3466](https://github.com/seata/seata/pull/3466)] 优化ExecuteTemplateXA类中判断XA不是最终状态的比较方式 - - [[#3476](https://github.com/seata/seata/pull/3476)] 服务端参数传入hostname时将自动转换为ip - - [[#3236](https://github.com/seata/seata/pull/3236)] 优化执行解锁操作的条件,减少不必要的store操作。 - - [[#3485](https://github.com/seata/seata/pull/3485)] 优化 ConfigurationFactory 中无用的try/catch - - [[#3505](https://github.com/seata/seata/pull/3505)] 优化GlobalTransactionScanner类中无用的if判断 - - [[#3544](https://github.com/seata/seata/pull/3544)] 优化无法通过Statement#getGeneratedKeys时,只能获取到批量插入的第一个主键的问题 - - [[#3549](https://github.com/seata/seata/pull/3549)] 统一不同表中的xid字段的长度 - - [[#3551](https://github.com/seata/seata/pull/3551)] 调大RETRY_DEAD_THRESHOLD的值以及设置成可配置 - - [[#3589](https://github.com/seata/seata/pull/3589)] 使用JUnit API做异常检查 - - [[#3601](https://github.com/seata/seata/pull/3601)] 使`LoadBalanceProperties`与`spring-boot:2.x`及以上版本兼容 - - [[#3631](https://github.com/seata/seata/pull/3631)] 优化 运行 nacos-config.py 参数问题 - - [[#3638](https://github.com/seata/seata/pull/3638)] 优化使用连表update和delete的SQL语法时错误提示 - - [[#3662](https://github.com/seata/seata/pull/3662)] 更新gpg密钥对 - - [[#3664](https://github.com/seata/seata/pull/3664)] 优化 javadoc - - - ### test - - - [[#3381](https://github.com/seata/seata/pull/3381)] 添加 TmClient 的测试用例 - - [[#3607](https://github.com/seata/seata/pull/3607)] 修正了EventBus单元测试中的bug - - - 非常感谢以下 contributors 的代码贡献。若有无意遗漏,请报告。 - - - [slievrly](https://github.com/slievrly) - - [selfishlover](https://github.com/selfishlover) - - [l8189352](https://github.com/l81893521) - - [hoverruan](https://github.com/hoverruan ) - - [jsbxyyx](https://github.com/jsbxyyx) - - [caohdgege](https://github.com/caohdgege) - - [a364176773](https://github.com/a364176773) - - [anselleeyy](https://github.com/anselleeyy) - - [Ifdevil](https://github.com/Ifdevil) - - [Rubbernecker](https://github.com/Rubbernecker) - - [lvxianzheng](https://github.com/lvxianzheng) - - [lj2018110133](https://github.com/lj2018110133) - - [wangliang181230](https://github.com/wangliang181230) - - [xingfudeshi](https://github.com/xingfudeshi) - - [MentosL](https://github.com/MentosL) - - [lian88jian](https://github.com/lian88jian) - - [litianyu1992](https://github.com/litianyu1992) - - [xyz327](https://github.com/xyz327) - - [13414850431](https://github.com/13414850431) - - [github-ganyu](https://github.com/github-ganyu) - - [xuande](https://github.com/xuande) - - [tanggen](https://github.com/tanggen) - - [dmego](https://github.com/dmego) - - [eas5](https://github.com/eas5) - -同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 - - #### Link - - - **Seata:** https://github.com/seata/seata - - **Seata-Samples:** https://github.com/seata/seata-samples - - **Release:** https://github.com/seata/seata/releases - - **WebSite:** https://seata.io - -
diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.4.2.md similarity index 54% rename from changes/en-us/1.5.0.md rename to changes/en-us/1.4.2.md index dd48c8508d9..e03827ecc51 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.4.2.md @@ -1,15 +1,15 @@ -### 1.5.0 +### 1.4.2 - [source](https://github.com/seata/seata/archive/v1.5.0.zip) | - [binary](https://github.com/seata/seata/releases/download/v1.5.0/seata-server-1.5.0.zip) + [source](https://github.com/seata/seata/archive/v1.4.2.zip) | + [binary](https://github.com/seata/seata/releases/download/v1.4.2/seata-server-1.4.2.zip)
Release notes - ### Seata 1.5.0 + ### Seata 1.4.2 - Seata 1.5.0 Released. + Seata 1.4.2 Released. Seata is an easy-to-use, high-performance, open source distributed transaction solution. @@ -17,115 +17,153 @@ ### feature: - - [[#3172](https://github.com/seata/seata/pull/3172)] support rollback info compress + - [[#3172](https://github.com/seata/seata/pull/3172)] support undo_loge compression mode in AT - [[#3372](https://github.com/seata/seata/pull/3372)] Saga support customize whether update last retry log - [[#3411](https://github.com/seata/seata/pull/3411)] support seata server thread pool parameters configuration - - [[#3348](https://github.com/seata/seata/pull/3348)] support redis sentinel mode - - [[#2667](https://github.com/seata/seata/pull/2667)] support password decryption + - [[#3348](https://github.com/seata/seata/pull/3348)] support redis sentinel storage mode in TC + - [[#2667](https://github.com/seata/seata/pull/2667)] support password decryption when using db and redis storage mode - [[#3427](https://github.com/seata/seata/pull/3427)] add distributed lock interface - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` - [[#3486](https://github.com/seata/seata/pull/3486)] add transaction service group for metric + - [[#3317](https://github.com/seata/seata/pull/3317)] support to obtain multiple configurations through a single node when using zookeeper as configuration center + - [[#2933](https://github.com/seata/seata/pull/2933)] add antlr for mysql sqlparser + - [[#3228](https://github.com/seata/seata/pull/3228)] support custom serialization plugin + - [[#3516](https://github.com/seata/seata/pull/3516)] support acl-token when consul is used registry and configuration center + - [[#3116](https://github.com/seata/seata/pull/3116)] support configuring apolloService and apolloCluster - [[#3468](https://github.com/seata/seata/pull/3468)] saga support loop execution on state + - [[#3447](https://github.com/seata/seata/pull/3447)] support Transaction context printing in logging framework ### bugfix: - [[#3258](https://github.com/seata/seata/pull/3258)] fix AsyncWorker potential OOM problem - - [[#3293](https://github.com/seata/seata/pull/3293)] configuration cache get value cast exception + - [[#3293](https://github.com/seata/seata/pull/3293)] fix configuration cache get value type mismatch exception - [[#3241](https://github.com/seata/seata/pull/3241)] forbidden use order by or limit in multi sql - [[#3406](https://github.com/seata/seata/pull/3406)] fix the value can not be push to nacos when special charset in config.txt - [[#3418](https://github.com/seata/seata/pull/3418)] fix getGeneratedKeys may get history pk - - [[#3408](https://github.com/seata/seata/pull/3408)] run with jar file and not package third lib into jar file, this.getClass().getClassLoader() will be null + - [[#3408](https://github.com/seata/seata/pull/3408)] fix the NPE problem of jar running mode when the third-dependency on separate packaging - [[#3431](https://github.com/seata/seata/pull/3431)] fix property bean may not be initialized when reading configuration - [[#3413](https://github.com/seata/seata/pull/3413)] fix the logic of rollback to savepoint and release to savepoint - [[#3367](https://github.com/seata/seata/pull/3367)] when the xa branch is rollback, it cannot be executed due to idle state - [[#3448](https://github.com/seata/seata/pull/3448)] reduce unnecessary competition and remove missing locks - - [[#3443](https://github.com/seata/seata/pull/3443)] send the `seata-server` log to `logstash` or `kafka` - [[#3451](https://github.com/seata/seata/pull/3451)] fix set auto-commit to true when local transactions are not being used. Failure to compete for a lock causes the global transaction to exit, invaliding the global row lock and dirty writing of the data. - - [[#3481](https://github.com/seata/seata/pull/3481)] fix seata node refresh failure because consul crash + - [[#3481](https://github.com/seata/seata/pull/3481)] fix seata node refresh failure because of consul client throws exceptions - [[#3491](https://github.com/seata/seata/pull/3491)] fix typo in README.md - [[#3531](https://github.com/seata/seata/pull/3531)] fix the NPE of RedisTransactionStoreManager when get branch transactions - [[#3500](https://github.com/seata/seata/pull/3500)] fix oracle and postgreSQL can't query column info - - [[#3560](https://github.com/seata/seata/pull/3560)] set time threshold for transactions in committing state - - [[#3555](https://github.com/seata/seata/pull/3555)] do not call setBlob to invalid the jdbc exception + - [[#3560](https://github.com/seata/seata/pull/3560)] fix the problem that the asynchronous task of the transactions in the committing state has no time threshold and cannot recover the transaction + - [[#3555](https://github.com/seata/seata/pull/3555)] do not call setBlob to invalid the jdbc exception - [[#3540](https://github.com/seata/seata/pull/3540)] fix server distribution missing files - - [[#3573](https://github.com/seata/seata/pull/3573)] fix designer directory path in README.md - [[#3597](https://github.com/seata/seata/pull/3597)] fix the possible NPE + - [[#3568](https://github.com/seata/seata/pull/3568)] fix automatic datasource agent caused by ConcurrentHashMap.computeIfAbsent Deadlock problem + - [[#3402](https://github.com/seata/seata/pull/3402)] fix the problem that the updated column cannot be resolved because the field name in the updated SQL contains the database name + - [[#3464](https://github.com/seata/seata/pull/3464)] fix test case NPE and StackTraceLogger's log. + - [[#3522](https://github.com/seata/seata/pull/3522)] fix register branch and store undolog when AT branch does not need compete lock + - [[#3635](https://github.com/seata/seata/pull/3635)] fix pushing notification failed when the configuration changed in zookeeper + - [[#3133](https://github.com/seata/seata/pull/3133)] fix the case that could not retry acquire global lock + - [[#3156](https://github.com/seata/seata/pull/3156)] optimize the logic of SpringProxyUtils.findTargetClass + ### optimize: - - [[#3383](https://github.com/seata/seata/pull/3383)] optimize StatementProxyTest unit test - - [[#3341](https://github.com/seata/seata/pull/3341)] get config from file system even without file: prefix - - [[#3385](https://github.com/seata/seata/pull/3385)] optimize github action + - [[#3341](https://github.com/seata/seata/pull/3341)] optimize the format of the path to the specified configuration file + - [[#3385](https://github.com/seata/seata/pull/3385)] optimize github action and fix unit test failure - [[#3175](https://github.com/seata/seata/pull/3175)] improve UUIDGenerator using "history time" version of snowflake algorithm - [[#3291](https://github.com/seata/seata/pull/3291)] mysql jdbc connect param - - [[#3336](https://github.com/seata/seata/pull/3336)] get netty config property from system properties + - [[#3336](https://github.com/seata/seata/pull/3336)] support using System.getProperty to get netty config property - [[#3369](https://github.com/seata/seata/pull/3369)] add github action secrets env for dockerHub - [[#3343](https://github.com/seata/seata/pull/3343)] Migrate CI provider from Travis CI to Github Actions - - [[#3365](https://github.com/seata/seata/pull/3365)] optimize ParameterParserTest test case failed - - [[#3359](https://github.com/seata/seata/pull/3359)] remove unused test case - [[#3397](https://github.com/seata/seata/pull/3397)] add the change records folder - [[#3303](https://github.com/seata/seata/pull/3303)] supports reading all configurations from a single Nacos dataId - [[#3380](https://github.com/seata/seata/pull/3380)] globalTransactionScanner listener optimize - - [[#3123](https://github.com/seata/seata/pull/3123)] The server directory is build by version, and build only when the profile is release-seata + - [[#3123](https://github.com/seata/seata/pull/3123)] optimize the packing strategy of seata-server - [[#3415](https://github.com/seata/seata/pull/3415)] optimize maven clean plugin to clear the distribution directory - [[#3316](https://github.com/seata/seata/pull/3316)] optimize the property bean may not be initialized while reading config value - [[#3420](https://github.com/seata/seata/pull/3420)] optimize enumerated classes and add unit tests - - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class - [[#3533](https://github.com/seata/seata/pull/3533)] added interface to get current transaction role - [[#3436](https://github.com/seata/seata/pull/3436)] optimize typo in SQLType class - - [[#3439](https://github.com/seata/seata/pull/3439)] adjust the order of springApplicationContextProvider + - [[#3439](https://github.com/seata/seata/pull/3439)] adjust the order of springApplicationContextProvider so that it can be called before the XML bean - [[#3248](https://github.com/seata/seata/pull/3248)] optimize the config of load-balance migration to belong the client node - - [[#3156](https://github.com/seata/seata/pull/3156)] optimize the logic of SpringProxyUtils.findTargetClass - [[#3441](https://github.com/seata/seata/pull/3441)] optimize the auto-configuration processing of starter - - [[#3466](https://github.com/seata/seata/pull/3466)] optimize the comparison in the ExecuteTemplateXa class to determine that XA is not the final state - - [[#3476](https://github.com/seata/seata/pull/3476)] convert hostname to IP if necessary + - [[#3466](https://github.com/seata/seata/pull/3466)] String comparison uses equalsIgnoreCase() + - [[#3476](https://github.com/seata/seata/pull/3476)] support when the server parameter passed is hostname, it will be automatically converted to IP - [[#3236](https://github.com/seata/seata/pull/3236)] optimize the conditions for executing unlocking - [[#3485](https://github.com/seata/seata/pull/3485)] optimize useless codes in ConfigurationFactory - [[#3505](https://github.com/seata/seata/pull/3505)] optimize useless if judgments in the GlobalTransactionScanner class - [[#3544](https://github.com/seata/seata/pull/3544)] optimize the get pks by auto when auto generated keys is false - - [[#3549](https://github.com/seata/seata/pull/3549)] unified the length of xid in scripts + - [[#3549](https://github.com/seata/seata/pull/3549)] unified the length of xid in different tables when using DB storage mode - [[#3551](https://github.com/seata/seata/pull/3551)] make RETRY_DEAD_THRESHOLD bigger and configurable - [[#3589](https://github.com/seata/seata/pull/3589)] Changed exception check by JUnit API usage - [[#3601](https://github.com/seata/seata/pull/3601)] make `LoadBalanceProperties` compatible with `spring-boot:2.x` and above + - [[#3513](https://github.com/seata/seata/pull/3513)] Saga SpringBeanService invoker support switch json parser + - [[#3318](https://github.com/seata/seata/pull/3318)] make CLIENT_TABLE_META_CHECKER_INTERVAL configurable + - [[#3371](https://github.com/seata/seata/pull/3371)] add applicationId for metric + - [[#3459](https://github.com/seata/seata/pull/3459)] remove duplicate validAddress code + - [[#3215](https://github.com/seata/seata/pull/3215)] opt the reload during startup in file mode - [[#3631](https://github.com/seata/seata/pull/3631)] optimize nacos-config.py parameter - [[#3638](https://github.com/seata/seata/pull/3638)] optimize the error when use update or delete with join in sql + - [[#3523](https://github.com/seata/seata/pull/3523)] optimize release savepoint when use oracle + - [[#3458](https://github.com/seata/seata/pull/3458)] reversion the deleted md + - [[#3574](https://github.com/seata/seata/pull/3574)] repair Spelling errors in comments in EventBus.java files + - [[#3573](https://github.com/seata/seata/pull/3573)] fix designer directory path in README.md - [[#3662](https://github.com/seata/seata/pull/3662)] update gpg key - [[#3664](https://github.com/seata/seata/pull/3664)] optimize some javadocs + - [[#3637](https://github.com/seata/seata/pull/3637)] register the participating companies and pull request information ### test - [[#3381](https://github.com/seata/seata/pull/3381)] test case for tmClient - [[#3607](https://github.com/seata/seata/pull/3607)] fixed bugs in EventBus unit tests + - [[#3579](https://github.com/seata/seata/pull/3579)] add test case for StringFormatUtils + - [[#3365](https://github.com/seata/seata/pull/3365)] optimize ParameterParserTest test case failed + - [[#3359](https://github.com/seata/seata/pull/3359)] remove unused test case + - [[#3578](https://github.com/seata/seata/pull/3578)] fix UnfinishedStubbing Exception in unit test case + - [[#3383](https://github.com/seata/seata/pull/3383)] optimize StatementProxyTest unit test + Thanks to these contributors for their code commits. Please report an unintended omission. - - [slievrly](https://github.com/slievrly) - - [selfishlover](https://github.com/selfishlover) - - [l8189352](https://github.com/l81893521) - - [hoverruan](https://github.com/hoverruan ) - - [jsbxyyx](https://github.com/jsbxyyx) - - [caohdgege](https://github.com/caohdgege) - - [a364176773](https://github.com/a364176773) - - [anselleeyy](https://github.com/anselleeyy) - - [Ifdevil](https://github.com/Ifdevil) - - [Rubbernecker](https://github.com/Rubbernecker) - - [lvxianzheng](https://github.com/lvxianzheng) - - [lj2018110133](https://github.com/lj2018110133) - - [wangliang181230](https://github.com/wangliang181230) - - [xingfudeshi](https://github.com/xingfudeshi) - - [MentosL](https://github.com/MentosL) - - [lian88jian](https://github.com/lian88jian) + - [slievrly](https://github.com/slievrly) + - [caohdgege](https://github.com/caohdgege) + - [a364176773](https://github.com/a364176773) + - [wangliang181230](https://github.com/wangliang181230) + - [xingfudeshi](https://github.com/xingfudeshi) + - [jsbxyyx](https://github.com/jsbxyyx) + - [selfishlover](https://github.com/selfishlover) + - [l8189352](https://github.com/l81893521) + - [Rubbernecker](https://github.com/Rubbernecker) + - [lj2018110133](https://github.com/lj2018110133) + - [github-ganyu](https://github.com/github-ganyu) + - [dmego](https://github.com/dmego) + - [spilledyear](https://github.com/spilledyear) + - [hoverruan](https://github.com/hoverruan ) + - [anselleeyy](https://github.com/anselleeyy) + - [Ifdevil](https://github.com/Ifdevil) + - [lvxianzheng](https://github.com/lvxianzheng) + - [MentosL](https://github.com/MentosL) + - [lian88jian](https://github.com/lian88jian) - [litianyu1992](https://github.com/litianyu1992) - [xyz327](https://github.com/xyz327) - [13414850431](https://github.com/13414850431) - - [github-ganyu](https://github.com/github-ganyu) - [xuande](https://github.com/xuande) - [tanggen](https://github.com/tanggen) - - [dmego](https://github.com/dmego) - [eas5](https://github.com/eas5) - + - [nature80](https://github.com/nature80) + - [ls9527](https://github.com/ls9527) + - [drgnchan](https://github.com/drgnchan) + - [imyangyong](https://github.com/imyangyong) + - [sunlggggg](https://github.com/sunlggggg) + - [long187](https://github.com/long187) + - [h-zhi](https://github.com/h-zhi) + - [StellaiYang](https://github.com/StellaiYang) + - [slinpq](https://github.com/slinpq) + - [sustly](https://github.com/sustly) + - [cznc](https://github.com/cznc) + - [squallliu](https://github.com/squallliu) + - [81519434](https://github.com/81519434) + - [luoxn28](https://github.com/luoxn28) + Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. #### Link diff --git a/core/src/main/java/io/seata/core/context/RootContext.java b/core/src/main/java/io/seata/core/context/RootContext.java index 1344fb64848..fb51045920c 100644 --- a/core/src/main/java/io/seata/core/context/RootContext.java +++ b/core/src/main/java/io/seata/core/context/RootContext.java @@ -102,14 +102,14 @@ public static String getXID() { */ public static void bind(@Nonnull String xid) { if (StringUtils.isBlank(xid)) { - if (LOGGER.isInfoEnabled()) { - LOGGER.info("xid is blank, switch to unbind operation!"); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("xid is blank, switch to unbind operation!"); } unbind(); } else { MDC.put(MDC_KEY_XID, xid); - if (LOGGER.isInfoEnabled()) { - LOGGER.info("bind {}", xid); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("bind {}", xid); } CONTEXT_HOLDER.put(KEY_XID, xid); } @@ -136,8 +136,8 @@ public static void bindGlobalLockFlag() { public static String unbind() { String xid = (String) CONTEXT_HOLDER.remove(KEY_XID); if (xid != null) { - if (LOGGER.isInfoEnabled()) { - LOGGER.info("unbind {} ", xid); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("unbind {} ", xid); } MDC.remove(MDC_KEY_XID); } diff --git a/script/config-center/config.txt b/script/config-center/config.txt index 7d59fcf4220..d2a262b2d3d 100644 --- a/script/config-center/config.txt +++ b/script/config-center/config.txt @@ -56,6 +56,8 @@ store.db.maxWait=5000 store.redis.mode=single store.redis.single.host=127.0.0.1 store.redis.single.port=6379 +store.redis.sentinel.masterName= +store.redis.sentinel.sentinelHosts= store.redis.maxConn=10 store.redis.minConn=1 store.redis.maxTotal=100 From ea19c259b3a3d57025e41694a810dcdb3f8378c7 Mon Sep 17 00:00:00 2001 From: jimin Date: Sat, 24 Apr 2021 01:56:01 +0800 Subject: [PATCH 93/93] release: release for release 1.4.2 (#3666) Signed-off-by: slievrly --- README.md | 2 +- all/pom.xml | 2 +- bom/pom.xml | 2 +- core/src/main/java/io/seata/core/protocol/Version.java | 2 +- pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0bf75718e03..e684f101623 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ For more details about principle and design, please go to [Seata wiki page](http ## Maven dependency ```xml -1.4.1 +1.4.2 io.seata diff --git a/all/pom.xml b/all/pom.xml index 7ad0d2de5c6..544712a0a18 100644 --- a/all/pom.xml +++ b/all/pom.xml @@ -21,7 +21,7 @@ io.seata seata-all - 1.5.0-SNAPSHOT + 1.4.2 Seata All-in-one ${project.version} http://seata.io diff --git a/bom/pom.xml b/bom/pom.xml index 93f09d76f77..20e7cd58f5f 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -20,7 +20,7 @@ io.seata seata-bom - 1.5.0-SNAPSHOT + 1.4.2 4.0.0 pom diff --git a/core/src/main/java/io/seata/core/protocol/Version.java b/core/src/main/java/io/seata/core/protocol/Version.java index 7a81a9a8888..f03f30851cb 100644 --- a/core/src/main/java/io/seata/core/protocol/Version.java +++ b/core/src/main/java/io/seata/core/protocol/Version.java @@ -32,7 +32,7 @@ public class Version { /** * The constant CURRENT. */ - private static final String CURRENT = "1.5.0-SNAPSHOT"; + private static final String CURRENT = "1.4.2"; private static final String VERSION_0_7_1 = "0.7.1"; private static final int MAX_VERSION_DOT = 3; diff --git a/pom.xml b/pom.xml index 09611c383a7..17f1e85cd49 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ - 1.5.0-SNAPSHOT + 1.4.2 1.8