diff --git a/.github/workflows/assign_milestone.yml b/.github/workflows/assign_milestone.yml index 6687a239b57..e0c0b100a74 100644 --- a/.github/workflows/assign_milestone.yml +++ b/.github/workflows/assign_milestone.yml @@ -4,7 +4,9 @@ on: pull_request_target: types: [opened] -permissions: read-all +permissions: + pull-requests: write + contents: read env: GH_TOKEN: ${{ github.token }} @@ -13,18 +15,24 @@ jobs: build: name: Assign Milestone runs-on: ubuntu-24.04 - permissions: - pull-requests: write steps: - name: Checkout code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - - name: Set up Go - uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: - go-version-file: go.mod + # We must explicitly checkout the base's SHA to avoid executing any code coming from + # the PR's SHA - Which would be executed in the base branch's context. + # This is really important to limit any sort of pwn requests. + ref: ${{ github.base_ref }} + persist-credentials: 'false' - name: Assign Milestone run: | - gh pr edit ${{ github.event.number }} --milestone "v$(sed -n 's/.*versionName.*\"\([[:digit:]\.]*\).*\"/\1/p' ./go/vt/servenv/version.go)" + # Ensure the content we sed from version.go is sanitized and match the correct format + VERSION=$(sed -n 's/.*versionName.*\"\([[:digit:]\.]*\).*\"/\1/p' ./go/vt/servenv/version.go) + if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Invalid version format: $VERSION" + exit 1 + fi + + gh pr edit ${{ github.event.number }} --milestone "v$VERSION" diff --git a/.github/workflows/auto_approve_pr.yml b/.github/workflows/auto_approve_pr.yml index e584337f78b..e76142c659f 100644 --- a/.github/workflows/auto_approve_pr.yml +++ b/.github/workflows/auto_approve_pr.yml @@ -16,7 +16,10 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' + - name: Auto Approve Pull Request env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/check_make_vtadmin_authz_testgen.yml b/.github/workflows/check_make_vtadmin_authz_testgen.yml index 26543c8a948..4008bacb163 100644 --- a/.github/workflows/check_make_vtadmin_authz_testgen.yml +++ b/.github/workflows/check_make_vtadmin_authz_testgen.yml @@ -27,7 +27,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' diff --git a/.github/workflows/check_make_vtadmin_web_proto.yml b/.github/workflows/check_make_vtadmin_web_proto.yml index 1c1bf2cae4f..4df27f4d826 100644 --- a/.github/workflows/check_make_vtadmin_web_proto.yml +++ b/.github/workflows/check_make_vtadmin_web_proto.yml @@ -27,7 +27,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' diff --git a/.github/workflows/cluster_endtoend_12.yml b/.github/workflows/cluster_endtoend_12.yml index 7c98855b783..e444858ff0d 100644 --- a/.github/workflows/cluster_endtoend_12.yml +++ b/.github/workflows/cluster_endtoend_12.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (12) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_13.yml b/.github/workflows/cluster_endtoend_13.yml index 947d393bbbb..8afefa03c99 100644 --- a/.github/workflows/cluster_endtoend_13.yml +++ b/.github/workflows/cluster_endtoend_13.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (13) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_15.yml b/.github/workflows/cluster_endtoend_15.yml index aedc1bbd691..dcccc6cc187 100644 --- a/.github/workflows/cluster_endtoend_15.yml +++ b/.github/workflows/cluster_endtoend_15.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (15) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_18.yml b/.github/workflows/cluster_endtoend_18.yml index 9886b617d51..347eb73f919 100644 --- a/.github/workflows/cluster_endtoend_18.yml +++ b/.github/workflows/cluster_endtoend_18.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (18) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_21.yml b/.github/workflows/cluster_endtoend_21.yml index e6bccee0004..f2b045e155d 100644 --- a/.github/workflows/cluster_endtoend_21.yml +++ b/.github/workflows/cluster_endtoend_21.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (21) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_backup_pitr.yml b/.github/workflows/cluster_endtoend_backup_pitr.yml index 1f744e85004..ae7485b874e 100644 --- a/.github/workflows/cluster_endtoend_backup_pitr.yml +++ b/.github/workflows/cluster_endtoend_backup_pitr.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (backup_pitr) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_backup_pitr_mysqlshell.yml b/.github/workflows/cluster_endtoend_backup_pitr_mysqlshell.yml index 6ed73f260df..1794eb893b9 100644 --- a/.github/workflows/cluster_endtoend_backup_pitr_mysqlshell.yml +++ b/.github/workflows/cluster_endtoend_backup_pitr_mysqlshell.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (backup_pitr_mysqlshell) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_backup_pitr_xtrabackup.yml b/.github/workflows/cluster_endtoend_backup_pitr_xtrabackup.yml index 9bb6a4b56f8..6d8f8808565 100644 --- a/.github/workflows/cluster_endtoend_backup_pitr_xtrabackup.yml +++ b/.github/workflows/cluster_endtoend_backup_pitr_xtrabackup.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (backup_pitr_xtrabackup) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Setup Percona Server for MySQL 8.0 diff --git a/.github/workflows/cluster_endtoend_ers_prs_newfeatures_heavy.yml b/.github/workflows/cluster_endtoend_ers_prs_newfeatures_heavy.yml index e859749ceca..ef256dd83af 100644 --- a/.github/workflows/cluster_endtoend_ers_prs_newfeatures_heavy.yml +++ b/.github/workflows/cluster_endtoend_ers_prs_newfeatures_heavy.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (ers_prs_newfeatures_heavy) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_mysql80.yml b/.github/workflows/cluster_endtoend_mysql80.yml index 653db141b7d..584620fbf0f 100644 --- a/.github/workflows/cluster_endtoend_mysql80.yml +++ b/.github/workflows/cluster_endtoend_mysql80.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (mysql80) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_mysql_server_vault.yml b/.github/workflows/cluster_endtoend_mysql_server_vault.yml index 9de4aacd499..6b5ecc45495 100644 --- a/.github/workflows/cluster_endtoend_mysql_server_vault.yml +++ b/.github/workflows/cluster_endtoend_mysql_server_vault.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (mysql_server_vault) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_onlineddl_revert.yml b/.github/workflows/cluster_endtoend_onlineddl_revert.yml index 54c85944190..cb0eb7919ac 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_revert.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_revert.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (onlineddl_revert) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -92,6 +96,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_onlineddl_scheduler.yml b/.github/workflows/cluster_endtoend_onlineddl_scheduler.yml index 9e117ac0f04..da7b96b6578 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_scheduler.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_scheduler.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (onlineddl_scheduler) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -92,6 +96,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_onlineddl_vrepl.yml b/.github/workflows/cluster_endtoend_onlineddl_vrepl.yml index ce0ba65f74f..1d857dc2df5 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_vrepl.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_vrepl.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (onlineddl_vrepl) runs-on: gh-hosted-runners-16cores-1-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -92,6 +96,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml b/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml index 57413f649e1..bb8ff9a4b1c 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (onlineddl_vrepl_stress) runs-on: gh-hosted-runners-16cores-1-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -92,6 +96,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress_suite.yml b/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress_suite.yml index e1f949df6f8..ea7782d6d2f 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress_suite.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress_suite.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (onlineddl_vrepl_stress_suite) runs-on: gh-hosted-runners-16cores-1-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -92,6 +96,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_onlineddl_vrepl_suite.yml b/.github/workflows/cluster_endtoend_onlineddl_vrepl_suite.yml index 18090dd2430..2671a018541 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_vrepl_suite.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_vrepl_suite.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (onlineddl_vrepl_suite) runs-on: gh-hosted-runners-16cores-1-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -92,6 +96,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_schemadiff_vrepl.yml b/.github/workflows/cluster_endtoend_schemadiff_vrepl.yml index 2053a75db4c..bdd8dac28a3 100644 --- a/.github/workflows/cluster_endtoend_schemadiff_vrepl.yml +++ b/.github/workflows/cluster_endtoend_schemadiff_vrepl.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (schemadiff_vrepl) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -92,6 +96,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_tabletmanager_consul.yml b/.github/workflows/cluster_endtoend_tabletmanager_consul.yml index 3e8ffce0ac5..5f445a40b46 100644 --- a/.github/workflows/cluster_endtoend_tabletmanager_consul.yml +++ b/.github/workflows/cluster_endtoend_tabletmanager_consul.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (tabletmanager_consul) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_tabletmanager_tablegc.yml b/.github/workflows/cluster_endtoend_tabletmanager_tablegc.yml index cc75ef22937..af87aec2cca 100644 --- a/.github/workflows/cluster_endtoend_tabletmanager_tablegc.yml +++ b/.github/workflows/cluster_endtoend_tabletmanager_tablegc.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (tabletmanager_tablegc) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_tabletmanager_throttler_topo.yml b/.github/workflows/cluster_endtoend_tabletmanager_throttler_topo.yml index 0837be5356e..03385c6d45d 100644 --- a/.github/workflows/cluster_endtoend_tabletmanager_throttler_topo.yml +++ b/.github/workflows/cluster_endtoend_tabletmanager_throttler_topo.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (tabletmanager_throttler_topo) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_topo_connection_cache.yml b/.github/workflows/cluster_endtoend_topo_connection_cache.yml index da6ee53ad53..1e27231dc74 100644 --- a/.github/workflows/cluster_endtoend_topo_connection_cache.yml +++ b/.github/workflows/cluster_endtoend_topo_connection_cache.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (topo_connection_cache) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vreplication_across_db_versions.yml b/.github/workflows/cluster_endtoend_vreplication_across_db_versions.yml index 6f502c94d32..f6ab80b04da 100644 --- a/.github/workflows/cluster_endtoend_vreplication_across_db_versions.yml +++ b/.github/workflows/cluster_endtoend_vreplication_across_db_versions.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vreplication_across_db_versions) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vreplication_basic.yml b/.github/workflows/cluster_endtoend_vreplication_basic.yml index 120cf541305..9b21f46e054 100644 --- a/.github/workflows/cluster_endtoend_vreplication_basic.yml +++ b/.github/workflows/cluster_endtoend_vreplication_basic.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vreplication_basic) runs-on: gh-hosted-runners-16cores-1-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vreplication_cellalias.yml b/.github/workflows/cluster_endtoend_vreplication_cellalias.yml index 760912b4818..95cf9a15214 100644 --- a/.github/workflows/cluster_endtoend_vreplication_cellalias.yml +++ b/.github/workflows/cluster_endtoend_vreplication_cellalias.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vreplication_cellalias) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vreplication_copy_parallel.yml b/.github/workflows/cluster_endtoend_vreplication_copy_parallel.yml index d944a253ce3..6cca449201d 100644 --- a/.github/workflows/cluster_endtoend_vreplication_copy_parallel.yml +++ b/.github/workflows/cluster_endtoend_vreplication_copy_parallel.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vreplication_copy_parallel) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vreplication_foreign_key_stress.yml b/.github/workflows/cluster_endtoend_vreplication_foreign_key_stress.yml index 5bba7760d7e..2890abaef4c 100644 --- a/.github/workflows/cluster_endtoend_vreplication_foreign_key_stress.yml +++ b/.github/workflows/cluster_endtoend_vreplication_foreign_key_stress.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vreplication_foreign_key_stress) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vreplication_mariadb_to_mysql.yml b/.github/workflows/cluster_endtoend_vreplication_mariadb_to_mysql.yml index 1184fe493ef..4cf82c81f4b 100644 --- a/.github/workflows/cluster_endtoend_vreplication_mariadb_to_mysql.yml +++ b/.github/workflows/cluster_endtoend_vreplication_mariadb_to_mysql.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vreplication_mariadb_to_mysql) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vreplication_migrate.yml b/.github/workflows/cluster_endtoend_vreplication_migrate.yml index 009840800d2..d0667c30ba4 100644 --- a/.github/workflows/cluster_endtoend_vreplication_migrate.yml +++ b/.github/workflows/cluster_endtoend_vreplication_migrate.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vreplication_migrate) runs-on: gh-hosted-runners-16cores-1-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vreplication_multi_tenant.yml b/.github/workflows/cluster_endtoend_vreplication_multi_tenant.yml index 9a5935a8907..326591fe820 100644 --- a/.github/workflows/cluster_endtoend_vreplication_multi_tenant.yml +++ b/.github/workflows/cluster_endtoend_vreplication_multi_tenant.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vreplication_multi_tenant) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vreplication_partial_movetables_and_materialize.yml b/.github/workflows/cluster_endtoend_vreplication_partial_movetables_and_materialize.yml index 0a10e37e6c4..0124cd03832 100644 --- a/.github/workflows/cluster_endtoend_vreplication_partial_movetables_and_materialize.yml +++ b/.github/workflows/cluster_endtoend_vreplication_partial_movetables_and_materialize.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vreplication_partial_movetables_and_materialize) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vreplication_v2.yml b/.github/workflows/cluster_endtoend_vreplication_v2.yml index f023bf9718b..a8285f109a3 100644 --- a/.github/workflows/cluster_endtoend_vreplication_v2.yml +++ b/.github/workflows/cluster_endtoend_vreplication_v2.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vreplication_v2) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vreplication_vtctldclient_vdiff2_movetables_tz.yml b/.github/workflows/cluster_endtoend_vreplication_vtctldclient_vdiff2_movetables_tz.yml index 7d96ac60306..0b599116e4c 100644 --- a/.github/workflows/cluster_endtoend_vreplication_vtctldclient_vdiff2_movetables_tz.yml +++ b/.github/workflows/cluster_endtoend_vreplication_vtctldclient_vdiff2_movetables_tz.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vreplication_vtctldclient_vdiff2_movetables_tz) runs-on: gh-hosted-runners-16cores-1-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vstream.yml b/.github/workflows/cluster_endtoend_vstream.yml index acfefb40758..c6a6bbb515f 100644 --- a/.github/workflows/cluster_endtoend_vstream.yml +++ b/.github/workflows/cluster_endtoend_vstream.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vstream) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtbackup.yml b/.github/workflows/cluster_endtoend_vtbackup.yml index 947598bc307..38ff7e41cbc 100644 --- a/.github/workflows/cluster_endtoend_vtbackup.yml +++ b/.github/workflows/cluster_endtoend_vtbackup.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtbackup) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtctlbackup_sharded_clustertest_heavy.yml b/.github/workflows/cluster_endtoend_vtctlbackup_sharded_clustertest_heavy.yml index c6f8712a35a..6ce9887700c 100644 --- a/.github/workflows/cluster_endtoend_vtctlbackup_sharded_clustertest_heavy.yml +++ b/.github/workflows/cluster_endtoend_vtctlbackup_sharded_clustertest_heavy.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtctlbackup_sharded_clustertest_heavy) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_concurrentdml.yml b/.github/workflows/cluster_endtoend_vtgate_concurrentdml.yml index 2cd81fe04ef..840e4c496b9 100644 --- a/.github/workflows/cluster_endtoend_vtgate_concurrentdml.yml +++ b/.github/workflows/cluster_endtoend_vtgate_concurrentdml.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_concurrentdml) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_foreignkey_stress.yml b/.github/workflows/cluster_endtoend_vtgate_foreignkey_stress.yml index 19620d9e3a2..39f03784840 100644 --- a/.github/workflows/cluster_endtoend_vtgate_foreignkey_stress.yml +++ b/.github/workflows/cluster_endtoend_vtgate_foreignkey_stress.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_foreignkey_stress) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_gen4.yml b/.github/workflows/cluster_endtoend_vtgate_gen4.yml index 06961af4ee7..f62a830ea73 100644 --- a/.github/workflows/cluster_endtoend_vtgate_gen4.yml +++ b/.github/workflows/cluster_endtoend_vtgate_gen4.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_gen4) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_general_heavy.yml b/.github/workflows/cluster_endtoend_vtgate_general_heavy.yml index e0b21df421a..59db477d840 100644 --- a/.github/workflows/cluster_endtoend_vtgate_general_heavy.yml +++ b/.github/workflows/cluster_endtoend_vtgate_general_heavy.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_general_heavy) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_godriver.yml b/.github/workflows/cluster_endtoend_vtgate_godriver.yml index 23c9da550c2..b0a32a13b6f 100644 --- a/.github/workflows/cluster_endtoend_vtgate_godriver.yml +++ b/.github/workflows/cluster_endtoend_vtgate_godriver.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_godriver) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_partial_keyspace.yml b/.github/workflows/cluster_endtoend_vtgate_partial_keyspace.yml index f5d1850aca3..bca24b0a3bc 100644 --- a/.github/workflows/cluster_endtoend_vtgate_partial_keyspace.yml +++ b/.github/workflows/cluster_endtoend_vtgate_partial_keyspace.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_partial_keyspace) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_plantests.yml b/.github/workflows/cluster_endtoend_vtgate_plantests.yml index 93ed6a55f05..9c2c905564d 100644 --- a/.github/workflows/cluster_endtoend_vtgate_plantests.yml +++ b/.github/workflows/cluster_endtoend_vtgate_plantests.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_plantests) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_queries.yml b/.github/workflows/cluster_endtoend_vtgate_queries.yml index 80462086a57..abd4ca2d713 100644 --- a/.github/workflows/cluster_endtoend_vtgate_queries.yml +++ b/.github/workflows/cluster_endtoend_vtgate_queries.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_queries) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_readafterwrite.yml b/.github/workflows/cluster_endtoend_vtgate_readafterwrite.yml index 686db1e12ab..a6f24c0f983 100644 --- a/.github/workflows/cluster_endtoend_vtgate_readafterwrite.yml +++ b/.github/workflows/cluster_endtoend_vtgate_readafterwrite.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_readafterwrite) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_reservedconn.yml b/.github/workflows/cluster_endtoend_vtgate_reservedconn.yml index 0f4ae20b0a7..72e7405e537 100644 --- a/.github/workflows/cluster_endtoend_vtgate_reservedconn.yml +++ b/.github/workflows/cluster_endtoend_vtgate_reservedconn.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_reservedconn) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_schema.yml b/.github/workflows/cluster_endtoend_vtgate_schema.yml index 2dca36298e1..c954ac7d455 100644 --- a/.github/workflows/cluster_endtoend_vtgate_schema.yml +++ b/.github/workflows/cluster_endtoend_vtgate_schema.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_schema) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_schema_tracker.yml b/.github/workflows/cluster_endtoend_vtgate_schema_tracker.yml index 711f38253cb..fa57ba09a30 100644 --- a/.github/workflows/cluster_endtoend_vtgate_schema_tracker.yml +++ b/.github/workflows/cluster_endtoend_vtgate_schema_tracker.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_schema_tracker) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_tablet_healthcheck_cache.yml b/.github/workflows/cluster_endtoend_vtgate_tablet_healthcheck_cache.yml index 55996d7fa86..520a5a72ca7 100644 --- a/.github/workflows/cluster_endtoend_vtgate_tablet_healthcheck_cache.yml +++ b/.github/workflows/cluster_endtoend_vtgate_tablet_healthcheck_cache.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_tablet_healthcheck_cache) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_topo.yml b/.github/workflows/cluster_endtoend_vtgate_topo.yml index f47e0a8dd63..c8151df7b79 100644 --- a/.github/workflows/cluster_endtoend_vtgate_topo.yml +++ b/.github/workflows/cluster_endtoend_vtgate_topo.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_topo) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_topo_consul.yml b/.github/workflows/cluster_endtoend_vtgate_topo_consul.yml index 1b62ac79041..ebde8c3d0d9 100644 --- a/.github/workflows/cluster_endtoend_vtgate_topo_consul.yml +++ b/.github/workflows/cluster_endtoend_vtgate_topo_consul.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_topo_consul) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_topo_etcd.yml b/.github/workflows/cluster_endtoend_vtgate_topo_etcd.yml index f88d3b9af3a..a3e11cb8eb9 100644 --- a/.github/workflows/cluster_endtoend_vtgate_topo_etcd.yml +++ b/.github/workflows/cluster_endtoend_vtgate_topo_etcd.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_topo_etcd) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_transaction.yml b/.github/workflows/cluster_endtoend_vtgate_transaction.yml index 9ae7b465695..1014508be2a 100644 --- a/.github/workflows/cluster_endtoend_vtgate_transaction.yml +++ b/.github/workflows/cluster_endtoend_vtgate_transaction.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_transaction) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_unsharded.yml b/.github/workflows/cluster_endtoend_vtgate_unsharded.yml index d348606dc31..fa922f575e6 100644 --- a/.github/workflows/cluster_endtoend_vtgate_unsharded.yml +++ b/.github/workflows/cluster_endtoend_vtgate_unsharded.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_unsharded) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_vindex_heavy.yml b/.github/workflows/cluster_endtoend_vtgate_vindex_heavy.yml index 16bdee60217..36c75f52d05 100644 --- a/.github/workflows/cluster_endtoend_vtgate_vindex_heavy.yml +++ b/.github/workflows/cluster_endtoend_vtgate_vindex_heavy.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_vindex_heavy) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtgate_vschema.yml b/.github/workflows/cluster_endtoend_vtgate_vschema.yml index fb176119769..d0dd3c7c917 100644 --- a/.github/workflows/cluster_endtoend_vtgate_vschema.yml +++ b/.github/workflows/cluster_endtoend_vtgate_vschema.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtgate_vschema) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vtorc.yml b/.github/workflows/cluster_endtoend_vtorc.yml index 92c2ea3d5d7..dbaa4b04143 100644 --- a/.github/workflows/cluster_endtoend_vtorc.yml +++ b/.github/workflows/cluster_endtoend_vtorc.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vtorc) runs-on: ubuntu-24.04 @@ -54,7 +55,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -64,6 +67,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -100,6 +104,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_vttablet_prscomplex.yml b/.github/workflows/cluster_endtoend_vttablet_prscomplex.yml index 9868c382a69..ea1b662e1be 100644 --- a/.github/workflows/cluster_endtoend_vttablet_prscomplex.yml +++ b/.github/workflows/cluster_endtoend_vttablet_prscomplex.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (vttablet_prscomplex) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Get key to latest MySQL repo diff --git a/.github/workflows/cluster_endtoend_xb_backup.yml b/.github/workflows/cluster_endtoend_xb_backup.yml index 26dbfea2def..8ae98fc9ffd 100644 --- a/.github/workflows/cluster_endtoend_xb_backup.yml +++ b/.github/workflows/cluster_endtoend_xb_backup.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (xb_backup) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Setup Percona Server for MySQL 8.0 diff --git a/.github/workflows/cluster_endtoend_xb_recovery.yml b/.github/workflows/cluster_endtoend_xb_recovery.yml index 43360690d6b..d617e99dcb9 100644 --- a/.github/workflows/cluster_endtoend_xb_recovery.yml +++ b/.github/workflows/cluster_endtoend_xb_recovery.yml @@ -15,6 +15,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on Cluster (xb_recovery) runs-on: ubuntu-24.04 @@ -45,7 +46,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -91,6 +95,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | # Setup Percona Server for MySQL 8.0 diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml index c971466b998..35517c4f6c5 100644 --- a/.github/workflows/codecov.yml +++ b/.github/workflows/codecov.yml @@ -13,7 +13,9 @@ jobs: steps: - name: Check out code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in files relevant to code coverage uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1 diff --git a/.github/workflows/codeql_analysis.yml b/.github/workflows/codeql_analysis.yml index c523e34c697..864a29898fe 100644 --- a/.github/workflows/codeql_analysis.yml +++ b/.github/workflows/codeql_analysis.yml @@ -27,7 +27,9 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Set up Go uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2 @@ -47,6 +49,7 @@ jobs: # queries: security-extended,security-and-quality - name: Get base dependencies + timeout-minutes: 10 run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update # Uninstall any previously installed MySQL first diff --git a/.github/workflows/create_release.yml b/.github/workflows/create_release.yml index 424cc5bfe15..1d88b034164 100644 --- a/.github/workflows/create_release.yml +++ b/.github/workflows/create_release.yml @@ -7,22 +7,25 @@ on: release: types: [created] -permissions: read-all +permissions: + contents: write + actions: read jobs: build: name: Create Release runs-on: ubuntu-24.04 - permissions: - contents: write steps: - name: Check out code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Set up Go uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2 with: go-version-file: go.mod + cache: 'false' - name: Tune the OS run: | @@ -33,14 +36,36 @@ jobs: sudo apt-get update sudo apt-get install -y make ruby ruby-dev go mod download - sudo gem install fpm + + # We use fpm to package our artifacts, we want to pin the version we use and + # ensure the checksum of the package matches the one published on the package's webpage. + # https://rubygems.org/gems/fpm/versions + - name: Get fpm + run: | + FPM_VERSION=1.16.0 + gem fetch fpm -v $FPM_VERSION + + # Reviewers: The expected checksum MUST ALWAYS match the one published on this website: + # https://rubygems.org/gems/fpm/versions + EXPECTED_CHECKSUM="d9eafe613cfbdf9d3b8ef2e321e194cd0a2d300ce37f716c0be1b3a42b7db5df" + + GOT_CHECKSUM=$(sha256sum fpm-$FPM_VERSION.gem | awk '{print $1}') + + if [[ "$GOT_CHECKSUM" != "$EXPECTED_CHECKSUM" ]]; then + echo "Checksum validation failed" + echo "Expected: $EXPECTED_CHECKSUM" + echo "Got: $GOT_CHECKSUM" + exit 1 + fi + + sudo gem install fpm-$FPM_VERSION.gem - name: Make Packages run: | ./tools/make-release-packages.sh - name: Upload Files - uses: csexton/release-asset-action@master + uses: csexton/release-asset-action@3567794e918fa3068116688122a76cdeb57b5f09 # v3.0.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} pattern: "releases/*.{tar.gz,rpm,deb}" diff --git a/.github/workflows/docker_build_images.yml b/.github/workflows/docker_build_images.yml index 2024d677205..fea9f83b5d3 100644 --- a/.github/workflows/docker_build_images.yml +++ b/.github/workflows/docker_build_images.yml @@ -26,7 +26,9 @@ jobs: steps: - name: Check out code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Login to Docker Hub uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 @@ -40,7 +42,7 @@ jobs: - name: Build and push on main if: startsWith(github.ref, 'refs/tags/') == false - uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0 + uses: docker/build-push-action@b32b51a8eda65d6793cd0494a773d4f6bcef32dc # v6.11.0 with: context: . file: ${{ env.DOCKERFILE }} @@ -61,7 +63,7 @@ jobs: - name: Build and push on tags if: startsWith(github.ref, 'refs/tags/') - uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0 + uses: docker/build-push-action@b32b51a8eda65d6793cd0494a773d4f6bcef32dc # v6.11.0 with: context: . file: ${{ env.DOCKERFILE }} @@ -80,7 +82,9 @@ jobs: steps: - name: Check out code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Login to Docker Hub uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 @@ -98,7 +102,7 @@ jobs: - name: Build and push on main if: startsWith(github.ref, 'refs/tags/') == false - uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0 + uses: docker/build-push-action@b32b51a8eda65d6793cd0494a773d4f6bcef32dc # v6.11.0 with: context: . file: ${{ env.DOCKERFILE }} @@ -123,7 +127,7 @@ jobs: - name: Build and push on tags if: startsWith(github.ref, 'refs/tags/') - uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0 + uses: docker/build-push-action@b32b51a8eda65d6793cd0494a773d4f6bcef32dc # v6.11.0 with: context: . file: ${{ env.DOCKERFILE }} @@ -145,7 +149,9 @@ jobs: steps: - name: Check out code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Login to Docker Hub uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 @@ -159,7 +165,7 @@ jobs: - name: Build and push on main latest tag if: startsWith(github.ref, 'refs/tags/') == false && matrix.debian == 'bookworm' - uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0 + uses: docker/build-push-action@b32b51a8eda65d6793cd0494a773d4f6bcef32dc # v6.11.0 with: context: ${{ env.DOCKER_CTX }} push: true @@ -170,7 +176,7 @@ jobs: - name: Build and push on main debian specific tag if: startsWith(github.ref, 'refs/tags/') == false - uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0 + uses: docker/build-push-action@b32b51a8eda65d6793cd0494a773d4f6bcef32dc # v6.11.0 with: context: ${{ env.DOCKER_CTX }} push: true @@ -202,7 +208,7 @@ jobs: # Build and Push component image to DOCKER_TAG, applies to both debian version - name: Build and push on tags using Debian extension if: startsWith(github.ref, 'refs/tags/') - uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0 + uses: docker/build-push-action@b32b51a8eda65d6793cd0494a773d4f6bcef32dc # v6.11.0 with: context: ${{ env.DOCKER_CTX }} push: true @@ -215,7 +221,7 @@ jobs: # It is fine to build a second time here when "matrix.debian == 'bookworm'" as we have cached the first build already - name: Build and push on tags without Debian extension if: startsWith(github.ref, 'refs/tags/') && matrix.debian == 'bookworm' - uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0 + uses: docker/build-push-action@b32b51a8eda65d6793cd0494a773d4f6bcef32dc # v6.11.0 with: context: ${{ env.DOCKER_CTX }} push: true diff --git a/.github/workflows/docker_test_cluster_25.yml b/.github/workflows/docker_test_cluster.yml similarity index 85% rename from .github/workflows/docker_test_cluster_25.yml rename to .github/workflows/docker_test_cluster.yml index 34463ce3830..6c6310a9efc 100644 --- a/.github/workflows/docker_test_cluster_25.yml +++ b/.github/workflows/docker_test_cluster.yml @@ -1,10 +1,10 @@ -name: docker_test_cluster_25 +name: docker_test_cluster on: [push, pull_request] permissions: read-all jobs: build: - name: Docker Test Cluster 25 + name: Docker Test Cluster runs-on: ubuntu-24.04 steps: @@ -27,7 +27,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -37,6 +39,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'test.go' - 'Makefile' @@ -48,7 +51,7 @@ jobs: - 'config/**' - 'bootstrap.sh' - 'docker/**' - - '.github/workflows/docker_test_cluster_25.yml' + - '.github/workflows/docker_test_cluster.yml' - name: Set up Go if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -64,4 +67,4 @@ jobs: - name: Run tests which require docker - 2 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | - go run test.go -docker=true --follow -shard 25 + go run test.go -docker=true --follow -shard docker_cluster diff --git a/.github/workflows/e2e_race.yml b/.github/workflows/e2e_race.yml index 50e1e4b9485..abd7355f078 100644 --- a/.github/workflows/e2e_race.yml +++ b/.github/workflows/e2e_race.yml @@ -26,7 +26,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' diff --git a/.github/workflows/endtoend.yml b/.github/workflows/endtoend.yml index f061e8bee68..71b84f7acdc 100644 --- a/.github/workflows/endtoend.yml +++ b/.github/workflows/endtoend.yml @@ -26,7 +26,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' diff --git a/.github/workflows/docker_test_cluster_10.yml b/.github/workflows/java_docker_test.yml similarity index 85% rename from .github/workflows/docker_test_cluster_10.yml rename to .github/workflows/java_docker_test.yml index 10a7c1551c0..adb87922dfc 100644 --- a/.github/workflows/docker_test_cluster_10.yml +++ b/.github/workflows/java_docker_test.yml @@ -1,10 +1,10 @@ -name: docker_test_cluster_10 +name: java_docker_test on: [push, pull_request] permissions: read-all jobs: build: - name: Docker Test Cluster 10 + name: Java Docker Test runs-on: ubuntu-24.04 steps: @@ -27,7 +27,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -37,6 +39,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'test.go' - 'Makefile' @@ -48,7 +51,8 @@ jobs: - 'config/**' - 'bootstrap.sh' - 'docker/**' - - '.github/workflows/docker_test_cluster_10.yml' + - 'java/**' + - '.github/workflows/java_docker_test.yml' - name: Set up Go if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -65,4 +69,4 @@ jobs: - name: Run tests which require docker - 1 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | - go run test.go -docker=true --follow -shard 10 + go run test.go -docker=true --follow -shard java diff --git a/.github/workflows/local_example.yml b/.github/workflows/local_example.yml index fc9724aa6ac..ef3569bfb86 100644 --- a/.github/workflows/local_example.yml +++ b/.github/workflows/local_example.yml @@ -30,7 +30,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -40,6 +42,7 @@ jobs: token: '' filters: | examples: + - 'test/config.json' - 'go/**/*.go' - 'test.go' - 'Makefile' diff --git a/.github/workflows/region_example.yml b/.github/workflows/region_example.yml index c17f43eec11..ed190884446 100644 --- a/.github/workflows/region_example.yml +++ b/.github/workflows/region_example.yml @@ -30,7 +30,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -40,6 +42,7 @@ jobs: token: '' filters: | examples: + - 'test/config.json' - 'go/**/*.go' - 'test.go' - 'Makefile' diff --git a/.github/workflows/static_checks_etc.yml b/.github/workflows/static_checks_etc.yml index cd2cce93827..2773d602ec9 100644 --- a/.github/workflows/static_checks_etc.yml +++ b/.github/workflows/static_checks_etc.yml @@ -31,7 +31,9 @@ jobs: - name: Checkout code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Run FOSSA scan and upload build data uses: fossa-contrib/fossa-action@v3 diff --git a/.github/workflows/unit_race.yml b/.github/workflows/unit_race.yml index 8ffb74bd2cb..77f47a6c083 100644 --- a/.github/workflows/unit_race.yml +++ b/.github/workflows/unit_race.yml @@ -43,7 +43,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -53,6 +55,7 @@ jobs: token: '' filters: | unit_tests: + - 'test/config.json' - 'go/**' - 'test.go' - 'Makefile' diff --git a/.github/workflows/unit_race_evalengine.yml b/.github/workflows/unit_race_evalengine.yml index d6d248f066e..9654209f2a9 100644 --- a/.github/workflows/unit_race_evalengine.yml +++ b/.github/workflows/unit_race_evalengine.yml @@ -43,7 +43,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -53,6 +55,7 @@ jobs: token: '' filters: | unit_tests: + - 'test/config.json' - 'go/**' - 'test.go' - 'Makefile' diff --git a/.github/workflows/unit_test_evalengine_mysql57.yml b/.github/workflows/unit_test_evalengine_mysql57.yml index d55b2732c86..eea3a5aad57 100644 --- a/.github/workflows/unit_test_evalengine_mysql57.yml +++ b/.github/workflows/unit_test_evalengine_mysql57.yml @@ -45,7 +45,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +57,7 @@ jobs: token: '' filters: | unit_tests: + - 'test/config.json' - 'go/**' - 'test.go' - 'Makefile' diff --git a/.github/workflows/unit_test_evalengine_mysql80.yml b/.github/workflows/unit_test_evalengine_mysql80.yml index 96af579742e..f48e224808d 100644 --- a/.github/workflows/unit_test_evalengine_mysql80.yml +++ b/.github/workflows/unit_test_evalengine_mysql80.yml @@ -45,7 +45,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +57,7 @@ jobs: token: '' filters: | unit_tests: + - 'test/config.json' - 'go/**' - 'test.go' - 'Makefile' diff --git a/.github/workflows/unit_test_evalengine_mysql84.yml b/.github/workflows/unit_test_evalengine_mysql84.yml index efbe2b0eb9f..6b373d96812 100644 --- a/.github/workflows/unit_test_evalengine_mysql84.yml +++ b/.github/workflows/unit_test_evalengine_mysql84.yml @@ -45,7 +45,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +57,7 @@ jobs: token: '' filters: | unit_tests: + - 'test/config.json' - 'go/**' - 'test.go' - 'Makefile' diff --git a/.github/workflows/unit_test_mysql57.yml b/.github/workflows/unit_test_mysql57.yml index eed08e9ce4c..3644170ebdc 100644 --- a/.github/workflows/unit_test_mysql57.yml +++ b/.github/workflows/unit_test_mysql57.yml @@ -45,7 +45,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +57,7 @@ jobs: token: '' filters: | unit_tests: + - 'test/config.json' - 'go/**' - 'test.go' - 'Makefile' diff --git a/.github/workflows/unit_test_mysql80.yml b/.github/workflows/unit_test_mysql80.yml index 9e0ed7e6977..18bfa546124 100644 --- a/.github/workflows/unit_test_mysql80.yml +++ b/.github/workflows/unit_test_mysql80.yml @@ -45,7 +45,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +57,7 @@ jobs: token: '' filters: | unit_tests: + - 'test/config.json' - 'go/**' - 'test.go' - 'Makefile' diff --git a/.github/workflows/unit_test_mysql84.yml b/.github/workflows/unit_test_mysql84.yml index 5948eb0836a..10b3c2b8a6c 100644 --- a/.github/workflows/unit_test_mysql84.yml +++ b/.github/workflows/unit_test_mysql84.yml @@ -45,7 +45,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +57,7 @@ jobs: token: '' filters: | unit_tests: + - 'test/config.json' - 'go/**' - 'test.go' - 'Makefile' diff --git a/.github/workflows/update_golang_dependencies.yml b/.github/workflows/update_golang_dependencies.yml index 33c5157097c..e2a3e7bd847 100644 --- a/.github/workflows/update_golang_dependencies.yml +++ b/.github/workflows/update_golang_dependencies.yml @@ -22,9 +22,10 @@ jobs: go-version-file: go.mod - name: Check out code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: main + persist-credentials: 'false' - name: Upgrade the Golang Dependencies id: detect-and-update diff --git a/.github/workflows/update_golang_version.yml b/.github/workflows/update_golang_version.yml index ad5dceeafa5..1948caf4b82 100644 --- a/.github/workflows/update_golang_version.yml +++ b/.github/workflows/update_golang_version.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Check out code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ matrix.branch }} diff --git a/.github/workflows/upgrade_downgrade_test_backups_e2e.yml b/.github/workflows/upgrade_downgrade_test_backups_e2e.yml index 0c558b00684..7e50c186a41 100644 --- a/.github/workflows/upgrade_downgrade_test_backups_e2e.yml +++ b/.github/workflows/upgrade_downgrade_test_backups_e2e.yml @@ -35,9 +35,10 @@ jobs: - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +56,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -84,6 +86,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo apt-get update @@ -107,9 +110,10 @@ jobs: # Checkout to the last release of Vitess - name: Check out other version's code (${{ steps.output-previous-release-ref.outputs.previous_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-previous-release-ref.outputs.previous_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the last release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -129,7 +133,9 @@ jobs: # Checkout to this build's commit - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_backups_e2e_next_release.yml b/.github/workflows/upgrade_downgrade_test_backups_e2e_next_release.yml index 7ee6c2db799..6586cca7a13 100644 --- a/.github/workflows/upgrade_downgrade_test_backups_e2e_next_release.yml +++ b/.github/workflows/upgrade_downgrade_test_backups_e2e_next_release.yml @@ -25,9 +25,10 @@ jobs: fi - name: Check out commit's code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-next-release-ref @@ -57,6 +58,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -86,6 +88,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo apt-get update @@ -109,9 +112,10 @@ jobs: # Checkout to the next release of Vitess - name: Check out other version's code (${{ steps.output-next-release-ref.outputs.next_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-next-release-ref.outputs.next_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the next release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -131,7 +135,9 @@ jobs: # Checkout to this build's commit - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_backups_manual.yml b/.github/workflows/upgrade_downgrade_test_backups_manual.yml index 680b0da87e0..206a09e97bb 100644 --- a/.github/workflows/upgrade_downgrade_test_backups_manual.yml +++ b/.github/workflows/upgrade_downgrade_test_backups_manual.yml @@ -38,9 +38,10 @@ jobs: # Checkout to this build's commit - name: Checkout to commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-previous-release-ref @@ -58,6 +59,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -88,6 +90,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -129,9 +132,10 @@ jobs: # Checkout to the last release of Vitess - name: Checkout to the other version's code (${{ steps.output-previous-release-ref.outputs.previous_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-previous-release-ref.outputs.previous_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the last release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -151,7 +155,9 @@ jobs: # Checkout to this build's commit - name: Checkout to commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_backups_manual_next_release.yml b/.github/workflows/upgrade_downgrade_test_backups_manual_next_release.yml index 768268271a1..96715bbe9de 100644 --- a/.github/workflows/upgrade_downgrade_test_backups_manual_next_release.yml +++ b/.github/workflows/upgrade_downgrade_test_backups_manual_next_release.yml @@ -27,9 +27,10 @@ jobs: # Checkout to this build's commit - name: Checkout to commit's code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-next-release-ref @@ -59,6 +60,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -89,6 +91,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -130,9 +133,10 @@ jobs: # Checkout to the next release of Vitess - name: Checkout to the other version's code (${{ steps.output-next-release-ref.outputs.next_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-next-release-ref.outputs.next_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the next release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -152,7 +156,9 @@ jobs: # Checkout to this build's commit - name: Checkout to commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_onlineddl_flow.yml b/.github/workflows/upgrade_downgrade_test_onlineddl_flow.yml index dd389663a35..028150e54fd 100644 --- a/.github/workflows/upgrade_downgrade_test_onlineddl_flow.yml +++ b/.github/workflows/upgrade_downgrade_test_onlineddl_flow.yml @@ -15,6 +15,7 @@ permissions: read-all jobs: upgrade_downgrade_test: + timeout-minutes: 60 name: Run Upgrade Downgrade Test - Online DDL flow runs-on: gh-hosted-runners-16cores-1-24.04 @@ -38,9 +39,10 @@ jobs: - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -50,6 +52,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -95,6 +98,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -127,9 +131,10 @@ jobs: # Checkout to the last release of Vitess - name: Check out last version's code (${{ steps.output-previous-release-ref.outputs.previous_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-previous-release-ref.outputs.previous_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the last release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -150,9 +155,10 @@ jobs: # Checkout to the next release of Vitess - name: Check out next version's code (${{ steps.output-next-release-ref.outputs.next_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-next-release-ref.outputs.next_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the next release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -173,7 +179,9 @@ jobs: # Checkout to this build's commit - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_query_serving_queries.yml b/.github/workflows/upgrade_downgrade_test_query_serving_queries.yml index e4ccc793933..aeb96066908 100644 --- a/.github/workflows/upgrade_downgrade_test_query_serving_queries.yml +++ b/.github/workflows/upgrade_downgrade_test_query_serving_queries.yml @@ -15,6 +15,7 @@ permissions: read-all jobs: upgrade_downgrade_test: + timeout-minutes: 60 name: Run Upgrade Downgrade Test - Query Serving (Queries) runs-on: gh-hosted-runners-16cores-1-24.04 @@ -38,9 +39,10 @@ jobs: - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-previous-release-ref @@ -58,6 +60,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -87,6 +90,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -135,9 +139,10 @@ jobs: # Checkout to the last release of Vitess - name: Check out other version's code (${{ steps.output-previous-release-ref.outputs.previous_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-previous-release-ref.outputs.previous_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the last release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_query_serving_queries_2.yml b/.github/workflows/upgrade_downgrade_test_query_serving_queries_2.yml index 87a78d0b659..df09ceb720a 100644 --- a/.github/workflows/upgrade_downgrade_test_query_serving_queries_2.yml +++ b/.github/workflows/upgrade_downgrade_test_query_serving_queries_2.yml @@ -15,6 +15,7 @@ permissions: read-all jobs: upgrade_downgrade_test: + timeout-minutes: 60 name: Run Upgrade Downgrade Test - Query Serving (Queries - 2) runs-on: gh-hosted-runners-16cores-1-24.04 @@ -38,9 +39,10 @@ jobs: - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-previous-release-ref @@ -58,6 +60,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -87,6 +90,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -135,9 +139,10 @@ jobs: # Checkout to the last release of Vitess - name: Check out other version's code (${{ steps.output-previous-release-ref.outputs.previous_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-previous-release-ref.outputs.previous_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the last release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_query_serving_queries_2_next_release.yml b/.github/workflows/upgrade_downgrade_test_query_serving_queries_2_next_release.yml index d3cfc662b5b..32a00022737 100644 --- a/.github/workflows/upgrade_downgrade_test_query_serving_queries_2_next_release.yml +++ b/.github/workflows/upgrade_downgrade_test_query_serving_queries_2_next_release.yml @@ -15,6 +15,7 @@ permissions: read-all jobs: upgrade_downgrade_test: + timeout-minutes: 60 name: Run Upgrade Downgrade Test - Query Serving (Queries - 2) Next Release runs-on: gh-hosted-runners-16cores-1-24.04 @@ -27,9 +28,10 @@ jobs: fi - name: Check out commit's code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-next-release-ref @@ -59,6 +61,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -88,6 +91,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -120,9 +124,10 @@ jobs: # Checkout to the next release of Vitess - name: Check out other version's code (${{ steps.output-next-release-ref.outputs.next_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-next-release-ref.outputs.next_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the next release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -142,7 +147,9 @@ jobs: # Checkout to this build's commit - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_query_serving_queries_next_release.yml b/.github/workflows/upgrade_downgrade_test_query_serving_queries_next_release.yml index c65fff08c52..faea680e0a8 100644 --- a/.github/workflows/upgrade_downgrade_test_query_serving_queries_next_release.yml +++ b/.github/workflows/upgrade_downgrade_test_query_serving_queries_next_release.yml @@ -15,6 +15,7 @@ permissions: read-all jobs: upgrade_downgrade_test: + timeout-minutes: 60 name: Run Upgrade Downgrade Test - Query Serving (Queries) Next Release runs-on: gh-hosted-runners-16cores-1-24.04 @@ -27,9 +28,10 @@ jobs: fi - name: Check out commit's code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-next-release-ref @@ -59,6 +61,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -88,6 +91,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -120,9 +124,10 @@ jobs: # Checkout to the next release of Vitess - name: Check out other version's code (${{ steps.output-next-release-ref.outputs.next_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-next-release-ref.outputs.next_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the next release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -142,7 +147,9 @@ jobs: # Checkout to this build's commit - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_query_serving_schema.yml b/.github/workflows/upgrade_downgrade_test_query_serving_schema.yml index 5616c247888..87a155df5e9 100644 --- a/.github/workflows/upgrade_downgrade_test_query_serving_schema.yml +++ b/.github/workflows/upgrade_downgrade_test_query_serving_schema.yml @@ -15,6 +15,7 @@ permissions: read-all jobs: upgrade_downgrade_test: + timeout-minutes: 60 name: Run Upgrade Downgrade Test - Query Serving (Schema) runs-on: gh-hosted-runners-16cores-1-24.04 @@ -38,9 +39,10 @@ jobs: - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-previous-release-ref @@ -58,6 +60,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -87,6 +90,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -119,9 +123,10 @@ jobs: # Checkout to the last release of Vitess - name: Check out other version's code (${{ steps.output-previous-release-ref.outputs.previous_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-previous-release-ref.outputs.previous_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the last release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -141,7 +146,9 @@ jobs: # Checkout to this build's commit - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_query_serving_schema_next_release.yml b/.github/workflows/upgrade_downgrade_test_query_serving_schema_next_release.yml index 6157079db6f..2450547966e 100644 --- a/.github/workflows/upgrade_downgrade_test_query_serving_schema_next_release.yml +++ b/.github/workflows/upgrade_downgrade_test_query_serving_schema_next_release.yml @@ -15,6 +15,7 @@ permissions: read-all jobs: upgrade_downgrade_test: + timeout-minutes: 60 name: Run Upgrade Downgrade Test - Query Serving (Schema) Next Release runs-on: gh-hosted-runners-16cores-1-24.04 @@ -27,9 +28,10 @@ jobs: fi - name: Check out commit's code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-next-release-ref @@ -59,6 +61,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -88,6 +91,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -120,9 +124,10 @@ jobs: # Checkout to the next release of Vitess - name: Check out other version's code (${{ steps.output-next-release-ref.outputs.next_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-next-release-ref.outputs.next_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the next release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -142,7 +147,9 @@ jobs: # Checkout to this build's commit - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_reparent_new_vtctl.yml b/.github/workflows/upgrade_downgrade_test_reparent_new_vtctl.yml index 931d9174c31..d25a772e423 100644 --- a/.github/workflows/upgrade_downgrade_test_reparent_new_vtctl.yml +++ b/.github/workflows/upgrade_downgrade_test_reparent_new_vtctl.yml @@ -15,6 +15,7 @@ permissions: read-all jobs: upgrade_downgrade_test: + timeout-minutes: 60 name: Run Upgrade Downgrade Test - Reparent New Vtctl runs-on: gh-hosted-runners-16cores-1-24.04 @@ -27,9 +28,10 @@ jobs: fi - name: Check out commit's code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-next-release-ref @@ -59,6 +61,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -88,6 +91,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -120,9 +124,10 @@ jobs: # Checkout to the next release of Vitess - name: Check out other version's code (${{ steps.output-next-release-ref.outputs.next_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-next-release-ref.outputs.next_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the next release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -142,7 +147,9 @@ jobs: # Checkout to this build's commit - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_reparent_new_vttablet.yml b/.github/workflows/upgrade_downgrade_test_reparent_new_vttablet.yml index d77b7be53b3..62cb6bf2018 100644 --- a/.github/workflows/upgrade_downgrade_test_reparent_new_vttablet.yml +++ b/.github/workflows/upgrade_downgrade_test_reparent_new_vttablet.yml @@ -15,6 +15,7 @@ permissions: read-all jobs: upgrade_downgrade_test: + timeout-minutes: 60 name: Run Upgrade Downgrade Test - Reparent New VTTablet runs-on: gh-hosted-runners-16cores-1-24.04 @@ -27,9 +28,10 @@ jobs: fi - name: Check out commit's code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-next-release-ref @@ -59,6 +61,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -88,6 +91,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -127,9 +131,10 @@ jobs: # Checkout to the next release of Vitess - name: Check out other version's code (${{ steps.output-next-release-ref.outputs.next_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-next-release-ref.outputs.next_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the next release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -149,7 +154,9 @@ jobs: # Checkout to this build's commit - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_reparent_old_vtctl.yml b/.github/workflows/upgrade_downgrade_test_reparent_old_vtctl.yml index 532be0b998e..fc010850117 100644 --- a/.github/workflows/upgrade_downgrade_test_reparent_old_vtctl.yml +++ b/.github/workflows/upgrade_downgrade_test_reparent_old_vtctl.yml @@ -15,6 +15,7 @@ permissions: read-all jobs: upgrade_downgrade_test: + timeout-minutes: 60 name: Run Upgrade Downgrade Test - Reparent Old Vtctl runs-on: gh-hosted-runners-16cores-1-24.04 @@ -38,9 +39,10 @@ jobs: - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-previous-release-ref @@ -58,6 +60,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -87,6 +90,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -119,9 +123,10 @@ jobs: # Checkout to the last release of Vitess - name: Check out other version's code (${{ steps.output-previous-release-ref.outputs.previous_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-previous-release-ref.outputs.previous_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the last release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -141,7 +146,9 @@ jobs: # Checkout to this build's commit - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_reparent_old_vttablet.yml b/.github/workflows/upgrade_downgrade_test_reparent_old_vttablet.yml index 2804e757652..33afe4fdf90 100644 --- a/.github/workflows/upgrade_downgrade_test_reparent_old_vttablet.yml +++ b/.github/workflows/upgrade_downgrade_test_reparent_old_vttablet.yml @@ -15,6 +15,7 @@ permissions: read-all jobs: upgrade_downgrade_test: + timeout-minutes: 60 name: Run Upgrade Downgrade Test - Reparent Old VTTablet runs-on: gh-hosted-runners-16cores-1-24.04 @@ -38,9 +39,10 @@ jobs: - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch id: output-previous-release-ref @@ -58,6 +60,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -87,6 +90,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo DEBIAN_FRONTEND="noninteractive" apt-get update @@ -119,9 +123,10 @@ jobs: # Checkout to the last release of Vitess - name: Check out other version's code (${{ steps.output-previous-release-ref.outputs.previous_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-previous-release-ref.outputs.previous_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the last release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -141,7 +146,9 @@ jobs: # Checkout to this build's commit - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/upgrade_downgrade_test_semi_sync.yml b/.github/workflows/upgrade_downgrade_test_semi_sync.yml index 76706f77b65..a40a55f0d0c 100644 --- a/.github/workflows/upgrade_downgrade_test_semi_sync.yml +++ b/.github/workflows/upgrade_downgrade_test_semi_sync.yml @@ -35,9 +35,10 @@ jobs: - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 + persist-credentials: 'false' - name: Set output with latest release branch if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +56,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**' - 'go/**/*.go' - 'test.go' @@ -84,6 +86,7 @@ jobs: sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" - name: Get base dependencies + timeout-minutes: 10 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' run: | sudo apt-get update @@ -107,9 +110,10 @@ jobs: # Checkout to the last release of Vitess - name: Check out other version's code (${{ steps.output-previous-release-ref.outputs.previous_release_ref }}) if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ steps.output-previous-release-ref.outputs.previous_release_ref }} + persist-credentials: 'false' - name: Get dependencies for the last release if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' @@ -129,7 +133,9 @@ jobs: # Checkout to this build's commit - name: Check out commit's code if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Get dependencies for this commit if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' diff --git a/.github/workflows/vitess_tester_vtgate.yml b/.github/workflows/vitess_tester_vtgate.yml index 7d5cf89a3ec..f9429909374 100644 --- a/.github/workflows/vitess_tester_vtgate.yml +++ b/.github/workflows/vitess_tester_vtgate.yml @@ -45,7 +45,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -55,6 +57,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/vtgate/vitess_tester/**' diff --git a/.github/workflows/vtadmin_web_build.yml b/.github/workflows/vtadmin_web_build.yml index 822fa8a0920..582f8b57647 100644 --- a/.github/workflows/vtadmin_web_build.yml +++ b/.github/workflows/vtadmin_web_build.yml @@ -35,8 +35,10 @@ jobs: echo Skip ${skip} echo "skip-workflow=${skip}" >> $GITHUB_OUTPUT - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: steps.skip-workflow.outputs.skip-workflow == 'false' + with: + persist-credentials: 'false' - uses: actions/setup-node@v4 if: steps.skip-workflow.outputs.skip-workflow == 'false' diff --git a/.github/workflows/vtadmin_web_lint.yml b/.github/workflows/vtadmin_web_lint.yml index 694c24734a6..570867f821a 100644 --- a/.github/workflows/vtadmin_web_lint.yml +++ b/.github/workflows/vtadmin_web_lint.yml @@ -35,8 +35,10 @@ jobs: echo Skip ${skip} echo "skip-workflow=${skip}" >> $GITHUB_OUTPUT - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: steps.skip-workflow.outputs.skip-workflow == 'false' + with: + persist-credentials: 'false' - uses: actions/setup-node@v4 if: steps.skip-workflow.outputs.skip-workflow == 'false' diff --git a/.github/workflows/vtadmin_web_unit_tests.yml b/.github/workflows/vtadmin_web_unit_tests.yml index 72a887c1926..0138f06b2b7 100644 --- a/.github/workflows/vtadmin_web_unit_tests.yml +++ b/.github/workflows/vtadmin_web_unit_tests.yml @@ -35,8 +35,10 @@ jobs: echo Skip ${skip} echo "skip-workflow=${skip}" >> $GITHUB_OUTPUT - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: steps.skip-workflow.outputs.skip-workflow == 'false' + with: + persist-credentials: 'false' - uses: actions/setup-node@v4 if: steps.skip-workflow.outputs.skip-workflow == 'false' diff --git a/.github/workflows/vtop_example.yml b/.github/workflows/vtop_example.yml index fb5ae87c101..0d27d43b959 100644 --- a/.github/workflows/vtop_example.yml +++ b/.github/workflows/vtop_example.yml @@ -36,7 +36,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' diff --git a/go.mod b/go.mod index 603bc37c62e..d2cd40bc773 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/evanphx/json-patch v5.9.0+incompatible github.com/fsnotify/fsnotify v1.8.0 github.com/go-sql-driver/mysql v1.7.1 - github.com/golang/glog v1.2.3 + github.com/golang/glog v1.2.4 github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 github.com/google/go-cmp v0.6.0 diff --git a/go.sum b/go.sum index faf1e24be13..4d25efb17fa 100644 --- a/go.sum +++ b/go.sum @@ -222,8 +222,8 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.3 h1:oDTdz9f5VGVVNGu/Q7UXKWYsD0873HXLHdJUNBsSEKM= -github.com/golang/glog v1.2.3/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= +github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= diff --git a/go/mysql/collations/colldata/cached_size.go b/go/mysql/collations/colldata/cached_size.go index b348baaaed8..190e1731651 100644 --- a/go/mysql/collations/colldata/cached_size.go +++ b/go/mysql/collations/colldata/cached_size.go @@ -19,6 +19,10 @@ package colldata import hack "vitess.io/vitess/go/hack" +type cachedObject interface { + CachedSize(alloc bool) int64 +} + func (cached *eightbitWildcard) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) @@ -59,6 +63,10 @@ func (cached *unicodeWildcard) CachedSize(alloc bool) int64 { if alloc { size += int64(48) } + // field charset vitess.io/vitess/go/mysql/collations/charset.Charset + if cc, ok := cached.charset.(cachedObject); ok { + size += cc.CachedSize(true) + } // field pattern []rune { size += hack.RuntimeAllocSize(int64(cap(cached.pattern)) * int64(4)) diff --git a/go/sqltypes/cached_size.go b/go/sqltypes/cached_size.go index 632c8249455..53bc407278d 100644 --- a/go/sqltypes/cached_size.go +++ b/go/sqltypes/cached_size.go @@ -37,6 +37,14 @@ func (cached *Result) CachedSize(alloc bool) int64 { // field Rows []vitess.io/vitess/go/sqltypes.Row { size += hack.RuntimeAllocSize(int64(cap(cached.Rows)) * int64(24)) + for _, elem := range cached.Rows { + { + size += hack.RuntimeAllocSize(int64(cap(elem)) * int64(32)) + for _, elem := range elem { + size += elem.CachedSize(false) + } + } + } } // field SessionStateChanges string size += hack.RuntimeAllocSize(int64(len(cached.SessionStateChanges))) diff --git a/go/test/endtoend/vreplication/config_test.go b/go/test/endtoend/vreplication/config_test.go index 3e7dd08f31c..b856572ab7b 100644 --- a/go/test/endtoend/vreplication/config_test.go +++ b/go/test/endtoend/vreplication/config_test.go @@ -45,12 +45,18 @@ import ( // default collation as it has to work across versions and the 8.0 default does not exist in 5.7. var ( // All standard user tables should have a primary key and at least one secondary key. - customerTypes = []string{"'individual'", "'soho'", "'enterprise'"} + customerTypes = []string{"'individual'", "'soho'", "'enterprise'"} + customerTableTemplate = `create table customer(cid int auto_increment, name varchar(128) collate utf8mb4_bin, meta json default null, + industryCategory varchar(100) generated always as (json_extract(meta, _utf8mb4'$.industry')) virtual, typ enum(%s), + sport set('football','cricket','baseball'), ts timestamp not null default current_timestamp, bits bit(2) default b'11', date1 datetime not null default '0000-00-00 00:00:00', + date2 datetime not null default '2021-00-01 00:00:00', dec80 decimal(8,0), blb blob, primary key(%s), key(name)) CHARSET=utf8mb4` + customerTable = fmt.Sprintf(customerTableTemplate, strings.Join(customerTypes, ","), "cid,typ" /* PK columns */) + // customerTableModifiedPK has a PK on (cid) vs (cid,typ). + customerTableModifiedPK = fmt.Sprintf(customerTableTemplate, strings.Join(customerTypes, ","), "cid" /* PK columns */) + initialProductSchema = fmt.Sprintf(` create table product(pid int, description varbinary(128), date1 datetime not null default '0000-00-00 00:00:00', date2 datetime not null default '2021-00-01 00:00:00', primary key(pid), key(date1,date2)) CHARSET=utf8mb4; -create table customer(cid int auto_increment, name varchar(128) collate utf8mb4_bin, meta json default null, industryCategory varchar(100) generated always as (json_extract(meta, _utf8mb4'$.industry')) virtual, - typ enum(%s), sport set('football','cricket','baseball'), ts timestamp not null default current_timestamp, bits bit(2) default b'11', date1 datetime not null default '0000-00-00 00:00:00', - date2 datetime not null default '2021-00-01 00:00:00', dec80 decimal(8,0), blb blob, primary key(cid,typ), key(name)) CHARSET=utf8mb4; +%s; create table customer_seq(id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'; create table merchant(mname varchar(128), category varchar(128), primary key(mname), key(category)) CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; create table orders(oid int, cid int, pid int, mname varchar(128), price int, qty int, total int as (qty * price), total2 int as (qty * price) stored, primary key(oid), key(pid), key(cid)) CHARSET=utf8; @@ -69,7 +75,8 @@ create table `+"`blüb_tbl`"+` (id int, val1 varchar(20), `+"`blöb1`"+` blob, create table reftable (id int, val1 varchar(20), primary key(id), key(val1)); create table loadtest (id int, name varchar(256), primary key(id), key(name)); create table nopk (name varchar(128), age int unsigned); -`, strings.Join(customerTypes, ",")) +`, customerTable) + // These should always be ignored in vreplication internalSchema = ` create table _1e275eef_3b20_11eb_a38f_04ed332e05c2_20201210204529_gho(id int, val varbinary(128), primary key(id)); diff --git a/go/test/endtoend/vreplication/multi_tenant_test.go b/go/test/endtoend/vreplication/multi_tenant_test.go index 6e73303be8a..2cd908b449f 100644 --- a/go/test/endtoend/vreplication/multi_tenant_test.go +++ b/go/test/endtoend/vreplication/multi_tenant_test.go @@ -91,7 +91,15 @@ type multiTenantMigration struct { } const ( - mtSchema = "create table t1(id int, tenant_id int, primary key(id, tenant_id)) Engine=InnoDB" + // The source/mt schema does not have the tenant_id column in the PK as adding a + // column to a table can be done as an INSTANT operation whereas modifying a table's + // PK requires a full table rebuild. So as a practical matter in production the + // source schema will likely have the tenant_id column, but NOT have it be part of + // the PK. + mtSchema = "create table t1(id int, tenant_id int, primary key(id)) Engine=InnoDB" + // The target/st schema must have the tenant_id column in the PK and the primary + // vindex. + stSchema = "create table t1(id int, tenant_id int, primary key(id, tenant_id)) Engine=InnoDB" mtVSchema = ` { "multi_tenant_spec": { @@ -127,7 +135,6 @@ const ( } } ` - stSchema = mtSchema stVSchema = ` { "tables": { @@ -429,8 +436,11 @@ func (mtm *multiTenantMigration) insertSomeData(t *testing.T, tenantId int64, ke defer closeConn() idx := mtm.getLastID(tenantId) for i := idx + 1; i <= idx+numRows; i++ { + // The source table has a PK on id only, so we have to make the id value + // unique rather than relying on the combination of (id, tenant_id) for + // our uniqueness. execQueryWithRetry(t, vtgateConn, - fmt.Sprintf("insert into %s.t1(id, tenant_id) values(%d, %d)", keyspace, i, tenantId), queryTimeout) + fmt.Sprintf("insert into %s.t1(id, tenant_id) values(%d, %d)", keyspace, i+(tenantId*1e4), tenantId), queryTimeout) } mtm.setLastID(tenantId, idx+numRows) } diff --git a/go/test/endtoend/vreplication/vdiff2_test.go b/go/test/endtoend/vreplication/vdiff2_test.go index 6116e26eef5..c4bb2efc73a 100644 --- a/go/test/endtoend/vreplication/vdiff2_test.go +++ b/go/test/endtoend/vreplication/vdiff2_test.go @@ -175,6 +175,15 @@ func TestVDiff2(t *testing.T) { require.NoError(t, err) verifyClusterHealth(t, vc) + // Pre-create the customer table on the target keyspace, with the primary key on + // (cid) vs (cid,typ) on the source. This confirms that we are able to properly + // diff the table when the source and target have a different PK definition. + // Remove the 0 date restrictions as the customer table uses them in its DEFAULTs. + execVtgateQuery(t, vtgateConn, targetKs, "set @@session.sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'") + execVtgateQuery(t, vtgateConn, targetKs, customerTableModifiedPK) + // Set the sql_mode back to the default. + execVtgateQuery(t, vtgateConn, targetKs, "set @@session.sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'") + for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { // Primary tablets for any new shards are added in the first cell. diff --git a/go/test/endtoend/vtgate/misc_test.go b/go/test/endtoend/vtgate/misc_test.go index 55fa139b290..b350002a05b 100644 --- a/go/test/endtoend/vtgate/misc_test.go +++ b/go/test/endtoend/vtgate/misc_test.go @@ -753,9 +753,9 @@ func TestDescribeVindex(t *testing.T) { _, err := conn.ExecuteFetch("describe hash", 1000, false) require.Error(t, err) mysqlErr := err.(*sqlerror.SQLError) - assert.Equal(t, sqlerror.ERNoSuchTable, mysqlErr.Num) + assert.Equal(t, sqlerror.ERUnknownTable, mysqlErr.Num) assert.Equal(t, "42S02", mysqlErr.State) - assert.ErrorContains(t, mysqlErr, "NotFound desc") + assert.ErrorContains(t, mysqlErr, "VT05004: table 'hash' does not exist") } func TestEmptyQuery(t *testing.T) { diff --git a/go/test/endtoend/vtgate/queries/random/query_gen.go b/go/test/endtoend/vtgate/queries/random/query_gen.go index ba7c83aaa91..69bf66903f3 100644 --- a/go/test/endtoend/vtgate/queries/random/query_gen.go +++ b/go/test/endtoend/vtgate/queries/random/query_gen.go @@ -46,7 +46,7 @@ type ( // queryGenerator generates queries, which can either be unions or select statements queryGenerator struct { - stmt sqlparser.SelectStatement + stmt sqlparser.TableStatement selGen *selectGenerator } diff --git a/go/test/endtoend/vtgate/queries/random/simplifier_test.go b/go/test/endtoend/vtgate/queries/random/simplifier_test.go index c93c0e679c1..4305124e23c 100644 --- a/go/test/endtoend/vtgate/queries/random/simplifier_test.go +++ b/go/test/endtoend/vtgate/queries/random/simplifier_test.go @@ -100,10 +100,10 @@ func simplifyResultsMismatchedQuery(t *testing.T, query string) string { require.NoError(t, err) simplified := simplifier.SimplifyStatement( - stmt.(sqlparser.SelectStatement), + stmt.(sqlparser.TableStatement), vSchemaWrapper.CurrentDb(), vSchemaWrapper, - func(statement sqlparser.SelectStatement) bool { + func(statement sqlparser.TableStatement) bool { q := sqlparser.String(statement) _, newErr := mcmp.ExecAllowAndCompareError(q, utils.CompareOptions{}) if newErr == nil { diff --git a/go/test/vschemawrapper/vschema_wrapper.go b/go/test/vschemawrapper/vschema_wrapper.go index 27219c6a255..f4f2e6ce25a 100644 --- a/go/test/vschemawrapper/vschema_wrapper.go +++ b/go/test/vschemawrapper/vschema_wrapper.go @@ -265,7 +265,7 @@ func (vw *VSchemaWrapper) FindTable(tab sqlparser.TableName) (*vindexes.Table, s return table, destKeyspace, destTabletType, destTarget, nil } -func (vw *VSchemaWrapper) FindView(tab sqlparser.TableName) sqlparser.SelectStatement { +func (vw *VSchemaWrapper) FindView(tab sqlparser.TableName) sqlparser.TableStatement { destKeyspace, _, _, err := topoproto.ParseDestination(tab.Qualifier.String(), topodatapb.TabletType_PRIMARY) if err != nil { return nil diff --git a/go/tools/sizegen/sizegen.go b/go/tools/sizegen/sizegen.go index 7ecd50e3d8c..17b155ad3f4 100644 --- a/go/tools/sizegen/sizegen.go +++ b/go/tools/sizegen/sizegen.go @@ -163,6 +163,8 @@ func (sizegen *sizegen) generateTyp(tt types.Type) { sizegen.generateKnownType(tt) case *types.Alias: sizegen.generateTyp(types.Unalias(tt)) + default: + panic(fmt.Sprintf("unhandled type: %v (%T)", tt, tt)) } } @@ -490,9 +492,11 @@ func (sizegen *sizegen) sizeStmtForType(fieldName *jen.Statement, field types.Ty // assume that function pointers do not allocate (although they might, if they're closures) return nil, 0 + case *types.Alias: + return sizegen.sizeStmtForType(fieldName, types.Unalias(node), alloc) + default: - log.Printf("unhandled type: %T", node) - return nil, 0 + panic(fmt.Sprintf("unhandled type: %v (%T)", node, node)) } } diff --git a/go/vt/proto/query/cached_size.go b/go/vt/proto/query/cached_size.go index 5b613317294..4436594681a 100644 --- a/go/vt/proto/query/cached_size.go +++ b/go/vt/proto/query/cached_size.go @@ -27,6 +27,10 @@ func (cached *BindVariable) CachedSize(alloc bool) int64 { if alloc { size += int64(96) } + // field unknownFields google.golang.org/protobuf/runtime/protoimpl.UnknownFields + { + size += hack.RuntimeAllocSize(int64(cap(cached.unknownFields))) + } // field Value []byte { size += hack.RuntimeAllocSize(int64(cap(cached.Value))) @@ -48,6 +52,10 @@ func (cached *Field) CachedSize(alloc bool) int64 { if alloc { size += int64(160) } + // field unknownFields google.golang.org/protobuf/runtime/protoimpl.UnknownFields + { + size += hack.RuntimeAllocSize(int64(cap(cached.unknownFields))) + } // field Name string size += hack.RuntimeAllocSize(int64(len(cached.Name))) // field Table string @@ -70,6 +78,10 @@ func (cached *QueryWarning) CachedSize(alloc bool) int64 { if alloc { size += int64(64) } + // field unknownFields google.golang.org/protobuf/runtime/protoimpl.UnknownFields + { + size += hack.RuntimeAllocSize(int64(cap(cached.unknownFields))) + } // field Message string size += hack.RuntimeAllocSize(int64(len(cached.Message))) return size @@ -82,6 +94,10 @@ func (cached *Target) CachedSize(alloc bool) int64 { if alloc { size += int64(96) } + // field unknownFields google.golang.org/protobuf/runtime/protoimpl.UnknownFields + { + size += hack.RuntimeAllocSize(int64(cap(cached.unknownFields))) + } // field Keyspace string size += hack.RuntimeAllocSize(int64(len(cached.Keyspace))) // field Shard string @@ -98,6 +114,10 @@ func (cached *Value) CachedSize(alloc bool) int64 { if alloc { size += int64(80) } + // field unknownFields google.golang.org/protobuf/runtime/protoimpl.UnknownFields + { + size += hack.RuntimeAllocSize(int64(cap(cached.unknownFields))) + } // field Value []byte { size += hack.RuntimeAllocSize(int64(cap(cached.Value))) diff --git a/go/vt/proto/query/query.pb.go b/go/vt/proto/query/query.pb.go index a03e5fa9025..a168cc2d363 100644 --- a/go/vt/proto/query/query.pb.go +++ b/go/vt/proto/query/query.pb.go @@ -319,7 +319,11 @@ const ( // Properties: 35, IsQuoted. Type_VECTOR Type = 2083 // RAW specifies a type which won't be quoted but the value used as-is while encoding. + // Properties: 36, None. Type_RAW Type = 2084 + // ROW_TUPLE represents multiple rows. + // Properties: 37, None. + Type_ROW_TUPLE Type = 2085 ) // Enum value maps for Type. @@ -362,6 +366,7 @@ var ( 4130: "BITNUM", 2083: "VECTOR", 2084: "RAW", + 2085: "ROW_TUPLE", } Type_value = map[string]int32{ "NULL_TYPE": 0, @@ -401,6 +406,7 @@ var ( "BITNUM": 4130, "VECTOR": 2083, "RAW": 2084, + "ROW_TUPLE": 2085, } ) @@ -6751,7 +6757,7 @@ var file_query_proto_rawDesc = []byte{ 0x41, 0x54, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x80, 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, - 0x2a, 0xd7, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, + 0x2a, 0xe7, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, @@ -6780,7 +6786,8 @@ var file_query_proto_rawDesc = []byte{ 0x48, 0x45, 0x58, 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, 0x41, 0x4c, 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, 0xa2, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0xa3, 0x10, - 0x12, 0x08, 0x0a, 0x03, 0x52, 0x41, 0x57, 0x10, 0xa4, 0x10, 0x2a, 0x36, 0x0a, 0x10, 0x53, 0x74, + 0x12, 0x08, 0x0a, 0x03, 0x52, 0x41, 0x57, 0x10, 0xa4, 0x10, 0x12, 0x0e, 0x0a, 0x09, 0x52, 0x4f, + 0x57, 0x5f, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0xa5, 0x10, 0x2a, 0x36, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x61, 0x69, 0x6c, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, diff --git a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go index 67eae2395ad..36ad09547f1 100644 --- a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go +++ b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go @@ -6766,6 +6766,61 @@ func (x *VDiffOptions) GetReportOptions() *VDiffReportOptions { return nil } +type VDiffTableLastPK struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Target *query.QueryResult `protobuf:"bytes,1,opt,name=target,proto3" json:"target,omitempty"` + // If the source value is nil then it's the same as the target + // and the target value should be used for both. + Source *query.QueryResult `protobuf:"bytes,2,opt,name=source,proto3,oneof" json:"source,omitempty"` +} + +func (x *VDiffTableLastPK) Reset() { + *x = VDiffTableLastPK{} + mi := &file_tabletmanagerdata_proto_msgTypes[132] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VDiffTableLastPK) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VDiffTableLastPK) ProtoMessage() {} + +func (x *VDiffTableLastPK) ProtoReflect() protoreflect.Message { + mi := &file_tabletmanagerdata_proto_msgTypes[132] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VDiffTableLastPK.ProtoReflect.Descriptor instead. +func (*VDiffTableLastPK) Descriptor() ([]byte, []int) { + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{132} +} + +func (x *VDiffTableLastPK) GetTarget() *query.QueryResult { + if x != nil { + return x.Target + } + return nil +} + +func (x *VDiffTableLastPK) GetSource() *query.QueryResult { + if x != nil { + return x.Source + } + return nil +} + // UpdateVReplicationWorkflowRequest is used to update an existing VReplication // workflow. Note that the following fields MUST have an explicit value provided // if you do NOT wish to update the existing value to the given type's ZeroValue: @@ -6788,7 +6843,7 @@ type UpdateVReplicationWorkflowRequest struct { func (x *UpdateVReplicationWorkflowRequest) Reset() { *x = UpdateVReplicationWorkflowRequest{} - mi := &file_tabletmanagerdata_proto_msgTypes[132] + mi := &file_tabletmanagerdata_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6800,7 +6855,7 @@ func (x *UpdateVReplicationWorkflowRequest) String() string { func (*UpdateVReplicationWorkflowRequest) ProtoMessage() {} func (x *UpdateVReplicationWorkflowRequest) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[132] + mi := &file_tabletmanagerdata_proto_msgTypes[133] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6813,7 +6868,7 @@ func (x *UpdateVReplicationWorkflowRequest) ProtoReflect() protoreflect.Message // Deprecated: Use UpdateVReplicationWorkflowRequest.ProtoReflect.Descriptor instead. func (*UpdateVReplicationWorkflowRequest) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{132} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{133} } func (x *UpdateVReplicationWorkflowRequest) GetWorkflow() string { @@ -6875,7 +6930,7 @@ type UpdateVReplicationWorkflowResponse struct { func (x *UpdateVReplicationWorkflowResponse) Reset() { *x = UpdateVReplicationWorkflowResponse{} - mi := &file_tabletmanagerdata_proto_msgTypes[133] + mi := &file_tabletmanagerdata_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6887,7 +6942,7 @@ func (x *UpdateVReplicationWorkflowResponse) String() string { func (*UpdateVReplicationWorkflowResponse) ProtoMessage() {} func (x *UpdateVReplicationWorkflowResponse) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[133] + mi := &file_tabletmanagerdata_proto_msgTypes[134] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6900,7 +6955,7 @@ func (x *UpdateVReplicationWorkflowResponse) ProtoReflect() protoreflect.Message // Deprecated: Use UpdateVReplicationWorkflowResponse.ProtoReflect.Descriptor instead. func (*UpdateVReplicationWorkflowResponse) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{133} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{134} } func (x *UpdateVReplicationWorkflowResponse) GetResult() *query.QueryResult { @@ -6931,7 +6986,7 @@ type UpdateVReplicationWorkflowsRequest struct { func (x *UpdateVReplicationWorkflowsRequest) Reset() { *x = UpdateVReplicationWorkflowsRequest{} - mi := &file_tabletmanagerdata_proto_msgTypes[134] + mi := &file_tabletmanagerdata_proto_msgTypes[135] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6943,7 +6998,7 @@ func (x *UpdateVReplicationWorkflowsRequest) String() string { func (*UpdateVReplicationWorkflowsRequest) ProtoMessage() {} func (x *UpdateVReplicationWorkflowsRequest) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[134] + mi := &file_tabletmanagerdata_proto_msgTypes[135] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6956,7 +7011,7 @@ func (x *UpdateVReplicationWorkflowsRequest) ProtoReflect() protoreflect.Message // Deprecated: Use UpdateVReplicationWorkflowsRequest.ProtoReflect.Descriptor instead. func (*UpdateVReplicationWorkflowsRequest) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{134} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{135} } func (x *UpdateVReplicationWorkflowsRequest) GetAllWorkflows() bool { @@ -7011,7 +7066,7 @@ type UpdateVReplicationWorkflowsResponse struct { func (x *UpdateVReplicationWorkflowsResponse) Reset() { *x = UpdateVReplicationWorkflowsResponse{} - mi := &file_tabletmanagerdata_proto_msgTypes[135] + mi := &file_tabletmanagerdata_proto_msgTypes[136] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7023,7 +7078,7 @@ func (x *UpdateVReplicationWorkflowsResponse) String() string { func (*UpdateVReplicationWorkflowsResponse) ProtoMessage() {} func (x *UpdateVReplicationWorkflowsResponse) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[135] + mi := &file_tabletmanagerdata_proto_msgTypes[136] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7036,7 +7091,7 @@ func (x *UpdateVReplicationWorkflowsResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use UpdateVReplicationWorkflowsResponse.ProtoReflect.Descriptor instead. func (*UpdateVReplicationWorkflowsResponse) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{135} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{136} } func (x *UpdateVReplicationWorkflowsResponse) GetResult() *query.QueryResult { @@ -7056,7 +7111,7 @@ type ResetSequencesRequest struct { func (x *ResetSequencesRequest) Reset() { *x = ResetSequencesRequest{} - mi := &file_tabletmanagerdata_proto_msgTypes[136] + mi := &file_tabletmanagerdata_proto_msgTypes[137] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7068,7 +7123,7 @@ func (x *ResetSequencesRequest) String() string { func (*ResetSequencesRequest) ProtoMessage() {} func (x *ResetSequencesRequest) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[136] + mi := &file_tabletmanagerdata_proto_msgTypes[137] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7081,7 +7136,7 @@ func (x *ResetSequencesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetSequencesRequest.ProtoReflect.Descriptor instead. func (*ResetSequencesRequest) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{136} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{137} } func (x *ResetSequencesRequest) GetTables() []string { @@ -7099,7 +7154,7 @@ type ResetSequencesResponse struct { func (x *ResetSequencesResponse) Reset() { *x = ResetSequencesResponse{} - mi := &file_tabletmanagerdata_proto_msgTypes[137] + mi := &file_tabletmanagerdata_proto_msgTypes[138] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7111,7 +7166,7 @@ func (x *ResetSequencesResponse) String() string { func (*ResetSequencesResponse) ProtoMessage() {} func (x *ResetSequencesResponse) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[137] + mi := &file_tabletmanagerdata_proto_msgTypes[138] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7124,7 +7179,7 @@ func (x *ResetSequencesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetSequencesResponse.ProtoReflect.Descriptor instead. func (*ResetSequencesResponse) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{137} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{138} } type CheckThrottlerRequest struct { @@ -7145,7 +7200,7 @@ type CheckThrottlerRequest struct { func (x *CheckThrottlerRequest) Reset() { *x = CheckThrottlerRequest{} - mi := &file_tabletmanagerdata_proto_msgTypes[138] + mi := &file_tabletmanagerdata_proto_msgTypes[139] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7157,7 +7212,7 @@ func (x *CheckThrottlerRequest) String() string { func (*CheckThrottlerRequest) ProtoMessage() {} func (x *CheckThrottlerRequest) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[138] + mi := &file_tabletmanagerdata_proto_msgTypes[139] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7170,7 +7225,7 @@ func (x *CheckThrottlerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckThrottlerRequest.ProtoReflect.Descriptor instead. func (*CheckThrottlerRequest) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{138} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{139} } func (x *CheckThrottlerRequest) GetAppName() string { @@ -7239,7 +7294,7 @@ type CheckThrottlerResponse struct { func (x *CheckThrottlerResponse) Reset() { *x = CheckThrottlerResponse{} - mi := &file_tabletmanagerdata_proto_msgTypes[139] + mi := &file_tabletmanagerdata_proto_msgTypes[140] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7251,7 +7306,7 @@ func (x *CheckThrottlerResponse) String() string { func (*CheckThrottlerResponse) ProtoMessage() {} func (x *CheckThrottlerResponse) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[139] + mi := &file_tabletmanagerdata_proto_msgTypes[140] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7264,7 +7319,7 @@ func (x *CheckThrottlerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckThrottlerResponse.ProtoReflect.Descriptor instead. func (*CheckThrottlerResponse) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{139} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{140} } func (x *CheckThrottlerResponse) GetStatusCode() int32 { @@ -7345,7 +7400,7 @@ type GetThrottlerStatusRequest struct { func (x *GetThrottlerStatusRequest) Reset() { *x = GetThrottlerStatusRequest{} - mi := &file_tabletmanagerdata_proto_msgTypes[140] + mi := &file_tabletmanagerdata_proto_msgTypes[141] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7357,7 +7412,7 @@ func (x *GetThrottlerStatusRequest) String() string { func (*GetThrottlerStatusRequest) ProtoMessage() {} func (x *GetThrottlerStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[140] + mi := &file_tabletmanagerdata_proto_msgTypes[141] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7370,7 +7425,7 @@ func (x *GetThrottlerStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetThrottlerStatusRequest.ProtoReflect.Descriptor instead. func (*GetThrottlerStatusRequest) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{140} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{141} } type GetThrottlerStatusResponse struct { @@ -7418,7 +7473,7 @@ type GetThrottlerStatusResponse struct { func (x *GetThrottlerStatusResponse) Reset() { *x = GetThrottlerStatusResponse{} - mi := &file_tabletmanagerdata_proto_msgTypes[141] + mi := &file_tabletmanagerdata_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7430,7 +7485,7 @@ func (x *GetThrottlerStatusResponse) String() string { func (*GetThrottlerStatusResponse) ProtoMessage() {} func (x *GetThrottlerStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[141] + mi := &file_tabletmanagerdata_proto_msgTypes[142] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7443,7 +7498,7 @@ func (x *GetThrottlerStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetThrottlerStatusResponse.ProtoReflect.Descriptor instead. func (*GetThrottlerStatusResponse) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{141} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{142} } func (x *GetThrottlerStatusResponse) GetTabletAlias() string { @@ -7583,7 +7638,7 @@ type ChangeTagsRequest struct { func (x *ChangeTagsRequest) Reset() { *x = ChangeTagsRequest{} - mi := &file_tabletmanagerdata_proto_msgTypes[142] + mi := &file_tabletmanagerdata_proto_msgTypes[143] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7595,7 +7650,7 @@ func (x *ChangeTagsRequest) String() string { func (*ChangeTagsRequest) ProtoMessage() {} func (x *ChangeTagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[142] + mi := &file_tabletmanagerdata_proto_msgTypes[143] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7608,7 +7663,7 @@ func (x *ChangeTagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeTagsRequest.ProtoReflect.Descriptor instead. func (*ChangeTagsRequest) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{142} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{143} } func (x *ChangeTagsRequest) GetTags() map[string]string { @@ -7635,7 +7690,7 @@ type ChangeTagsResponse struct { func (x *ChangeTagsResponse) Reset() { *x = ChangeTagsResponse{} - mi := &file_tabletmanagerdata_proto_msgTypes[143] + mi := &file_tabletmanagerdata_proto_msgTypes[144] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7647,7 +7702,7 @@ func (x *ChangeTagsResponse) String() string { func (*ChangeTagsResponse) ProtoMessage() {} func (x *ChangeTagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[143] + mi := &file_tabletmanagerdata_proto_msgTypes[144] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7660,7 +7715,7 @@ func (x *ChangeTagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeTagsResponse.ProtoReflect.Descriptor instead. func (*ChangeTagsResponse) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{143} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{144} } func (x *ChangeTagsResponse) GetTags() map[string]string { @@ -7693,7 +7748,7 @@ type ReadVReplicationWorkflowResponse_Stream struct { func (x *ReadVReplicationWorkflowResponse_Stream) Reset() { *x = ReadVReplicationWorkflowResponse_Stream{} - mi := &file_tabletmanagerdata_proto_msgTypes[149] + mi := &file_tabletmanagerdata_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7705,7 +7760,7 @@ func (x *ReadVReplicationWorkflowResponse_Stream) String() string { func (*ReadVReplicationWorkflowResponse_Stream) ProtoMessage() {} func (x *ReadVReplicationWorkflowResponse_Stream) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[149] + mi := &file_tabletmanagerdata_proto_msgTypes[150] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7844,7 +7899,7 @@ type CheckThrottlerResponse_Metric struct { func (x *CheckThrottlerResponse_Metric) Reset() { *x = CheckThrottlerResponse_Metric{} - mi := &file_tabletmanagerdata_proto_msgTypes[152] + mi := &file_tabletmanagerdata_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7856,7 +7911,7 @@ func (x *CheckThrottlerResponse_Metric) String() string { func (*CheckThrottlerResponse_Metric) ProtoMessage() {} func (x *CheckThrottlerResponse_Metric) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[152] + mi := &file_tabletmanagerdata_proto_msgTypes[153] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7869,7 +7924,7 @@ func (x *CheckThrottlerResponse_Metric) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckThrottlerResponse_Metric.ProtoReflect.Descriptor instead. func (*CheckThrottlerResponse_Metric) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{139, 0} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{140, 0} } func (x *CheckThrottlerResponse_Metric) GetName() string { @@ -7939,7 +7994,7 @@ type GetThrottlerStatusResponse_MetricResult struct { func (x *GetThrottlerStatusResponse_MetricResult) Reset() { *x = GetThrottlerStatusResponse_MetricResult{} - mi := &file_tabletmanagerdata_proto_msgTypes[154] + mi := &file_tabletmanagerdata_proto_msgTypes[155] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7951,7 +8006,7 @@ func (x *GetThrottlerStatusResponse_MetricResult) String() string { func (*GetThrottlerStatusResponse_MetricResult) ProtoMessage() {} func (x *GetThrottlerStatusResponse_MetricResult) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[154] + mi := &file_tabletmanagerdata_proto_msgTypes[155] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7964,7 +8019,7 @@ func (x *GetThrottlerStatusResponse_MetricResult) ProtoReflect() protoreflect.Me // Deprecated: Use GetThrottlerStatusResponse_MetricResult.ProtoReflect.Descriptor instead. func (*GetThrottlerStatusResponse_MetricResult) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{141, 0} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{142, 0} } func (x *GetThrottlerStatusResponse_MetricResult) GetValue() float64 { @@ -7992,7 +8047,7 @@ type GetThrottlerStatusResponse_MetricHealth struct { func (x *GetThrottlerStatusResponse_MetricHealth) Reset() { *x = GetThrottlerStatusResponse_MetricHealth{} - mi := &file_tabletmanagerdata_proto_msgTypes[157] + mi := &file_tabletmanagerdata_proto_msgTypes[158] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8004,7 +8059,7 @@ func (x *GetThrottlerStatusResponse_MetricHealth) String() string { func (*GetThrottlerStatusResponse_MetricHealth) ProtoMessage() {} func (x *GetThrottlerStatusResponse_MetricHealth) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[157] + mi := &file_tabletmanagerdata_proto_msgTypes[158] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8017,7 +8072,7 @@ func (x *GetThrottlerStatusResponse_MetricHealth) ProtoReflect() protoreflect.Me // Deprecated: Use GetThrottlerStatusResponse_MetricHealth.ProtoReflect.Descriptor instead. func (*GetThrottlerStatusResponse_MetricHealth) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{141, 3} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{142, 3} } func (x *GetThrottlerStatusResponse_MetricHealth) GetLastHealthyAt() *vttime.Time { @@ -8047,7 +8102,7 @@ type GetThrottlerStatusResponse_RecentApp struct { func (x *GetThrottlerStatusResponse_RecentApp) Reset() { *x = GetThrottlerStatusResponse_RecentApp{} - mi := &file_tabletmanagerdata_proto_msgTypes[161] + mi := &file_tabletmanagerdata_proto_msgTypes[162] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8059,7 +8114,7 @@ func (x *GetThrottlerStatusResponse_RecentApp) String() string { func (*GetThrottlerStatusResponse_RecentApp) ProtoMessage() {} func (x *GetThrottlerStatusResponse_RecentApp) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[161] + mi := &file_tabletmanagerdata_proto_msgTypes[162] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8072,7 +8127,7 @@ func (x *GetThrottlerStatusResponse_RecentApp) ProtoReflect() protoreflect.Messa // Deprecated: Use GetThrottlerStatusResponse_RecentApp.ProtoReflect.Descriptor instead. func (*GetThrottlerStatusResponse_RecentApp) Descriptor() ([]byte, []int) { - return file_tabletmanagerdata_proto_rawDescGZIP(), []int{141, 7} + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{142, 7} } func (x *GetThrottlerStatusResponse_RecentApp) GetCheckedAt() *vttime.Time { @@ -8961,317 +9016,324 @@ var file_tabletmanagerdata_proto_rawDesc = []byte{ 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xed, - 0x04, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, - 0x71, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x48, 0x00, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x33, 0x0a, 0x06, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x4f, 0x6e, 0x44, 0x44, 0x4c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x05, 0x6f, - 0x6e, 0x44, 0x64, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x02, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x74, 0x0a, 0x10, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x1a, - 0x42, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x42, 0x08, - 0x0a, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x50, - 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x22, 0xd6, 0x02, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, - 0x61, 0x6c, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x2b, 0x0a, 0x11, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x57, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x40, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x5f, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, - 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, - 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x74, 0x6f, 0x70, - 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x23, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x7a, + 0x0a, 0x10, 0x56, 0x44, 0x69, 0x66, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x61, 0x73, 0x74, + 0x50, 0x4b, 0x12, 0x2a, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x2f, + 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x88, 0x01, 0x01, 0x42, + 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xed, 0x04, 0x0a, 0x21, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, + 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, + 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x1b, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, + 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, + 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x88, 0x01, 0x01, 0x12, 0x33, + 0x0a, 0x06, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, + 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4f, 0x6e, 0x44, 0x44, + 0x4c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x05, 0x6f, 0x6e, 0x44, 0x64, 0x6c, + 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, + 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x02, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x74, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, + 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x49, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, + 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, + 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x1a, 0x42, 0x0a, 0x14, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, + 0x1e, 0x0a, 0x1c, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, + 0x09, 0x0a, 0x07, 0x5f, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x50, 0x0a, 0x22, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2f, 0x0a, 0x15, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x18, 0x0a, - 0x16, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdd, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, - 0x70, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x10, 0x6f, 0x6b, - 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6f, 0x6b, 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, - 0x73, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x13, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x9f, 0x06, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, - 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x68, - 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, 0x6e, - 0x74, 0x6c, 0x79, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x65, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, - 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, - 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, - 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x1a, 0x8b, 0x02, - 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, - 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xd6, 0x02, 0x0a, + 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x57, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x73, 0x12, 0x40, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, + 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0c, 0x73, 0x74, + 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, + 0x06, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x23, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, + 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2f, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x65, + 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x52, 0x65, 0x73, + 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xdd, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, + 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, + 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x36, + 0x0a, 0x17, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, + 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x15, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, + 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x10, 0x6f, 0x6b, 0x5f, 0x69, 0x66, 0x5f, + 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0d, 0x6f, 0x6b, 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, + 0x32, 0x0a, 0x15, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x22, 0x9f, 0x06, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, + 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, + 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, + 0x6f, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, + 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x50, + 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x36, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, + 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1b, 0x0a, 0x19, 0x47, 0x65, 0x74, - 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb6, 0x10, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x68, - 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, - 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, - 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, - 0x73, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6f, 0x70, - 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4f, 0x70, 0x65, 0x6e, - 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x74, 0x12, 0x28, - 0x0a, 0x10, 0x6c, 0x61, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x61, 0x67, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x68, 0x72, 0x65, - 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x5f, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x64, 0x41, 0x73, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x12, 0x73, 0x0a, 0x12, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x44, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x70, 0x0a, 0x11, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x0d, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, - 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x12, 0x67, 0x0a, 0x0e, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x0e, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, - 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x12, 0x67, 0x0a, 0x0e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, - 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, - 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x74, - 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x74, 0x0a, 0x13, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x11, 0x61, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, - 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x5e, 0x0a, - 0x0b, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x12, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, - 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x73, 0x1a, 0x3a, 0x0a, - 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x80, 0x01, 0x0a, 0x16, 0x41, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x50, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, - 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x81, 0x01, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x48, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x12, 0x34, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x79, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x41, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x73, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x79, 0x1a, 0x7c, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x50, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x5c, 0x0a, 0x12, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x41, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xad, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x65, - 0x6e, 0x74, 0x41, 0x70, 0x70, 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, - 0x41, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x1a, 0x8b, 0x02, 0x0a, 0x06, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, + 0x6f, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x1a, 0x76, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x65, 0x6e, - 0x74, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x61, + 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1b, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, + 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0xb6, 0x10, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, + 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, + 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, + 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x69, + 0x73, 0x5f, 0x64, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x69, 0x73, 0x44, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6c, 0x61, + 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x61, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, + 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, + 0x6d, 0x65, 0x55, 0x73, 0x65, 0x64, 0x41, 0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, + 0x73, 0x0a, 0x12, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x6e, - 0x74, 0x41, 0x70, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xaa, 0x01, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, - 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x11, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x12, 0x70, 0x0a, 0x11, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, + 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x43, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, + 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, + 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x12, 0x67, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, + 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, + 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, + 0x67, 0x0a, 0x0e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, + 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, + 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x74, 0x68, 0x72, 0x6f, 0x74, + 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x74, 0x0a, 0x13, 0x61, 0x70, 0x70, 0x5f, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, + 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, + 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x61, 0x70, 0x70, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x29, + 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, + 0x6c, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x5e, 0x0a, 0x0b, 0x72, 0x65, 0x63, + 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, + 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, + 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x72, + 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x80, 0x01, 0x0a, 0x16, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x92, 0x01, 0x0a, - 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, + 0x65, 0x79, 0x12, 0x50, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x81, 0x01, + 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x34, + 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x5f, 0x61, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x79, 0x41, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, + 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x79, 0x1a, 0x7c, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x48, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x50, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, + 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x5c, 0x0a, 0x12, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x2a, 0x3e, 0x0a, 0x19, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x07, - 0x0a, 0x03, 0x41, 0x4e, 0x59, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x4f, 0x52, 0x44, - 0x45, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x03, 0x2a, 0x83, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, - 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x48, 0x52, 0x45, 0x53, - 0x48, 0x4f, 0x4c, 0x44, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x02, 0x12, - 0x0e, 0x0a, 0x0a, 0x41, 0x50, 0x50, 0x5f, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x03, 0x12, - 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x52, 0x49, - 0x43, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, - 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x42, 0x30, 0x5a, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, - 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, - 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, + 0x61, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x52, 0x75, + 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, + 0x16, 0x41, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0xad, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, + 0x70, 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x52, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1f, + 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, + 0x6f, 0x64, 0x65, 0x1a, 0x76, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, + 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xaa, 0x01, 0x0a, 0x11, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x42, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, + 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x1a, + 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x92, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x43, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, + 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, + 0x74, 0x61, 0x67, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x3e, 0x0a, + 0x19, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, + 0x59, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x10, 0x01, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x2a, 0x83, 0x01, + 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0d, 0x0a, 0x09, + 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, + 0x4b, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, + 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x41, + 0x50, 0x50, 0x5f, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x10, 0x04, 0x12, + 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, + 0x52, 0x10, 0x05, 0x42, 0x30, 0x5a, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, + 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x72, 0x64, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9287,7 +9349,7 @@ func file_tabletmanagerdata_proto_rawDescGZIP() []byte { } var file_tabletmanagerdata_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_tabletmanagerdata_proto_msgTypes = make([]protoimpl.MessageInfo, 165) +var file_tabletmanagerdata_proto_msgTypes = make([]protoimpl.MessageInfo, 166) var file_tabletmanagerdata_proto_goTypes = []any{ (TabletSelectionPreference)(0), // 0: tabletmanagerdata.TabletSelectionPreference (CheckThrottlerResponseCode)(0), // 1: tabletmanagerdata.CheckThrottlerResponseCode @@ -9423,163 +9485,166 @@ var file_tabletmanagerdata_proto_goTypes = []any{ (*VDiffReportOptions)(nil), // 131: tabletmanagerdata.VDiffReportOptions (*VDiffCoreOptions)(nil), // 132: tabletmanagerdata.VDiffCoreOptions (*VDiffOptions)(nil), // 133: tabletmanagerdata.VDiffOptions - (*UpdateVReplicationWorkflowRequest)(nil), // 134: tabletmanagerdata.UpdateVReplicationWorkflowRequest - (*UpdateVReplicationWorkflowResponse)(nil), // 135: tabletmanagerdata.UpdateVReplicationWorkflowResponse - (*UpdateVReplicationWorkflowsRequest)(nil), // 136: tabletmanagerdata.UpdateVReplicationWorkflowsRequest - (*UpdateVReplicationWorkflowsResponse)(nil), // 137: tabletmanagerdata.UpdateVReplicationWorkflowsResponse - (*ResetSequencesRequest)(nil), // 138: tabletmanagerdata.ResetSequencesRequest - (*ResetSequencesResponse)(nil), // 139: tabletmanagerdata.ResetSequencesResponse - (*CheckThrottlerRequest)(nil), // 140: tabletmanagerdata.CheckThrottlerRequest - (*CheckThrottlerResponse)(nil), // 141: tabletmanagerdata.CheckThrottlerResponse - (*GetThrottlerStatusRequest)(nil), // 142: tabletmanagerdata.GetThrottlerStatusRequest - (*GetThrottlerStatusResponse)(nil), // 143: tabletmanagerdata.GetThrottlerStatusResponse - (*ChangeTagsRequest)(nil), // 144: tabletmanagerdata.ChangeTagsRequest - (*ChangeTagsResponse)(nil), // 145: tabletmanagerdata.ChangeTagsResponse - nil, // 146: tabletmanagerdata.UserPermission.PrivilegesEntry - nil, // 147: tabletmanagerdata.DbPermission.PrivilegesEntry - nil, // 148: tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry - nil, // 149: tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntry - nil, // 150: tabletmanagerdata.DeleteTableDataRequest.TableFiltersEntry - (*ReadVReplicationWorkflowResponse_Stream)(nil), // 151: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream - nil, // 152: tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntry - nil, // 153: tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntry - (*CheckThrottlerResponse_Metric)(nil), // 154: tabletmanagerdata.CheckThrottlerResponse.Metric - nil, // 155: tabletmanagerdata.CheckThrottlerResponse.MetricsEntry - (*GetThrottlerStatusResponse_MetricResult)(nil), // 156: tabletmanagerdata.GetThrottlerStatusResponse.MetricResult - nil, // 157: tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry - nil, // 158: tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntry - (*GetThrottlerStatusResponse_MetricHealth)(nil), // 159: tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth - nil, // 160: tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry - nil, // 161: tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry - nil, // 162: tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntry - (*GetThrottlerStatusResponse_RecentApp)(nil), // 163: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp - nil, // 164: tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry - nil, // 165: tabletmanagerdata.ChangeTagsRequest.TagsEntry - nil, // 166: tabletmanagerdata.ChangeTagsResponse.TagsEntry - (*query.Field)(nil), // 167: query.Field - (topodata.TabletType)(0), // 168: topodata.TabletType - (*vtrpc.CallerID)(nil), // 169: vtrpc.CallerID - (*query.QueryResult)(nil), // 170: query.QueryResult - (*query.TransactionMetadata)(nil), // 171: query.TransactionMetadata - (*mysqlctl.HostMetricsResponse)(nil), // 172: mysqlctl.HostMetricsResponse - (*replicationdata.Status)(nil), // 173: replicationdata.Status - (*replicationdata.PrimaryStatus)(nil), // 174: replicationdata.PrimaryStatus - (*topodata.TabletAlias)(nil), // 175: topodata.TabletAlias - (*replicationdata.FullStatus)(nil), // 176: replicationdata.FullStatus - (replicationdata.StopReplicationMode)(0), // 177: replicationdata.StopReplicationMode - (*replicationdata.StopReplicationStatus)(nil), // 178: replicationdata.StopReplicationStatus - (*logutil.Event)(nil), // 179: logutil.Event - (*vttime.Time)(nil), // 180: vttime.Time - (*binlogdata.BinlogSource)(nil), // 181: binlogdata.BinlogSource - (binlogdata.VReplicationWorkflowType)(0), // 182: binlogdata.VReplicationWorkflowType - (binlogdata.VReplicationWorkflowSubType)(0), // 183: binlogdata.VReplicationWorkflowSubType - (binlogdata.VReplicationWorkflowState)(0), // 184: binlogdata.VReplicationWorkflowState - (binlogdata.OnDDLAction)(0), // 185: binlogdata.OnDDLAction - (*topodata.ThrottledAppRule)(nil), // 186: topodata.ThrottledAppRule + (*VDiffTableLastPK)(nil), // 134: tabletmanagerdata.VDiffTableLastPK + (*UpdateVReplicationWorkflowRequest)(nil), // 135: tabletmanagerdata.UpdateVReplicationWorkflowRequest + (*UpdateVReplicationWorkflowResponse)(nil), // 136: tabletmanagerdata.UpdateVReplicationWorkflowResponse + (*UpdateVReplicationWorkflowsRequest)(nil), // 137: tabletmanagerdata.UpdateVReplicationWorkflowsRequest + (*UpdateVReplicationWorkflowsResponse)(nil), // 138: tabletmanagerdata.UpdateVReplicationWorkflowsResponse + (*ResetSequencesRequest)(nil), // 139: tabletmanagerdata.ResetSequencesRequest + (*ResetSequencesResponse)(nil), // 140: tabletmanagerdata.ResetSequencesResponse + (*CheckThrottlerRequest)(nil), // 141: tabletmanagerdata.CheckThrottlerRequest + (*CheckThrottlerResponse)(nil), // 142: tabletmanagerdata.CheckThrottlerResponse + (*GetThrottlerStatusRequest)(nil), // 143: tabletmanagerdata.GetThrottlerStatusRequest + (*GetThrottlerStatusResponse)(nil), // 144: tabletmanagerdata.GetThrottlerStatusResponse + (*ChangeTagsRequest)(nil), // 145: tabletmanagerdata.ChangeTagsRequest + (*ChangeTagsResponse)(nil), // 146: tabletmanagerdata.ChangeTagsResponse + nil, // 147: tabletmanagerdata.UserPermission.PrivilegesEntry + nil, // 148: tabletmanagerdata.DbPermission.PrivilegesEntry + nil, // 149: tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry + nil, // 150: tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntry + nil, // 151: tabletmanagerdata.DeleteTableDataRequest.TableFiltersEntry + (*ReadVReplicationWorkflowResponse_Stream)(nil), // 152: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream + nil, // 153: tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntry + nil, // 154: tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntry + (*CheckThrottlerResponse_Metric)(nil), // 155: tabletmanagerdata.CheckThrottlerResponse.Metric + nil, // 156: tabletmanagerdata.CheckThrottlerResponse.MetricsEntry + (*GetThrottlerStatusResponse_MetricResult)(nil), // 157: tabletmanagerdata.GetThrottlerStatusResponse.MetricResult + nil, // 158: tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry + nil, // 159: tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntry + (*GetThrottlerStatusResponse_MetricHealth)(nil), // 160: tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth + nil, // 161: tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry + nil, // 162: tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry + nil, // 163: tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntry + (*GetThrottlerStatusResponse_RecentApp)(nil), // 164: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp + nil, // 165: tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry + nil, // 166: tabletmanagerdata.ChangeTagsRequest.TagsEntry + nil, // 167: tabletmanagerdata.ChangeTagsResponse.TagsEntry + (*query.Field)(nil), // 168: query.Field + (topodata.TabletType)(0), // 169: topodata.TabletType + (*vtrpc.CallerID)(nil), // 170: vtrpc.CallerID + (*query.QueryResult)(nil), // 171: query.QueryResult + (*query.TransactionMetadata)(nil), // 172: query.TransactionMetadata + (*mysqlctl.HostMetricsResponse)(nil), // 173: mysqlctl.HostMetricsResponse + (*replicationdata.Status)(nil), // 174: replicationdata.Status + (*replicationdata.PrimaryStatus)(nil), // 175: replicationdata.PrimaryStatus + (*topodata.TabletAlias)(nil), // 176: topodata.TabletAlias + (*replicationdata.FullStatus)(nil), // 177: replicationdata.FullStatus + (replicationdata.StopReplicationMode)(0), // 178: replicationdata.StopReplicationMode + (*replicationdata.StopReplicationStatus)(nil), // 179: replicationdata.StopReplicationStatus + (*logutil.Event)(nil), // 180: logutil.Event + (*vttime.Time)(nil), // 181: vttime.Time + (*binlogdata.BinlogSource)(nil), // 182: binlogdata.BinlogSource + (binlogdata.VReplicationWorkflowType)(0), // 183: binlogdata.VReplicationWorkflowType + (binlogdata.VReplicationWorkflowSubType)(0), // 184: binlogdata.VReplicationWorkflowSubType + (binlogdata.VReplicationWorkflowState)(0), // 185: binlogdata.VReplicationWorkflowState + (binlogdata.OnDDLAction)(0), // 186: binlogdata.OnDDLAction + (*topodata.ThrottledAppRule)(nil), // 187: topodata.ThrottledAppRule } var file_tabletmanagerdata_proto_depIdxs = []int32{ - 167, // 0: tabletmanagerdata.TableDefinition.fields:type_name -> query.Field + 168, // 0: tabletmanagerdata.TableDefinition.fields:type_name -> query.Field 2, // 1: tabletmanagerdata.SchemaDefinition.table_definitions:type_name -> tabletmanagerdata.TableDefinition 3, // 2: tabletmanagerdata.SchemaChangeResult.before_schema:type_name -> tabletmanagerdata.SchemaDefinition 3, // 3: tabletmanagerdata.SchemaChangeResult.after_schema:type_name -> tabletmanagerdata.SchemaDefinition - 146, // 4: tabletmanagerdata.UserPermission.privileges:type_name -> tabletmanagerdata.UserPermission.PrivilegesEntry - 147, // 5: tabletmanagerdata.DbPermission.privileges:type_name -> tabletmanagerdata.DbPermission.PrivilegesEntry + 147, // 4: tabletmanagerdata.UserPermission.privileges:type_name -> tabletmanagerdata.UserPermission.PrivilegesEntry + 148, // 5: tabletmanagerdata.DbPermission.privileges:type_name -> tabletmanagerdata.DbPermission.PrivilegesEntry 5, // 6: tabletmanagerdata.Permissions.user_permissions:type_name -> tabletmanagerdata.UserPermission 6, // 7: tabletmanagerdata.Permissions.db_permissions:type_name -> tabletmanagerdata.DbPermission - 148, // 8: tabletmanagerdata.ExecuteHookRequest.extra_env:type_name -> tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry + 149, // 8: tabletmanagerdata.ExecuteHookRequest.extra_env:type_name -> tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry 3, // 9: tabletmanagerdata.GetSchemaResponse.schema_definition:type_name -> tabletmanagerdata.SchemaDefinition 7, // 10: tabletmanagerdata.GetPermissionsResponse.permissions:type_name -> tabletmanagerdata.Permissions - 149, // 11: tabletmanagerdata.GetGlobalStatusVarsResponse.status_values:type_name -> tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntry - 168, // 12: tabletmanagerdata.ChangeTypeRequest.tablet_type:type_name -> topodata.TabletType + 150, // 11: tabletmanagerdata.GetGlobalStatusVarsResponse.status_values:type_name -> tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntry + 169, // 12: tabletmanagerdata.ChangeTypeRequest.tablet_type:type_name -> topodata.TabletType 4, // 13: tabletmanagerdata.PreflightSchemaResponse.change_results:type_name -> tabletmanagerdata.SchemaChangeResult 3, // 14: tabletmanagerdata.ApplySchemaRequest.before_schema:type_name -> tabletmanagerdata.SchemaDefinition 3, // 15: tabletmanagerdata.ApplySchemaRequest.after_schema:type_name -> tabletmanagerdata.SchemaDefinition 3, // 16: tabletmanagerdata.ApplySchemaResponse.before_schema:type_name -> tabletmanagerdata.SchemaDefinition 3, // 17: tabletmanagerdata.ApplySchemaResponse.after_schema:type_name -> tabletmanagerdata.SchemaDefinition - 169, // 18: tabletmanagerdata.ExecuteQueryRequest.caller_id:type_name -> vtrpc.CallerID - 170, // 19: tabletmanagerdata.ExecuteQueryResponse.result:type_name -> query.QueryResult - 170, // 20: tabletmanagerdata.ExecuteFetchAsDbaResponse.result:type_name -> query.QueryResult - 170, // 21: tabletmanagerdata.ExecuteMultiFetchAsDbaResponse.results:type_name -> query.QueryResult - 170, // 22: tabletmanagerdata.ExecuteFetchAsAllPrivsResponse.result:type_name -> query.QueryResult - 170, // 23: tabletmanagerdata.ExecuteFetchAsAppResponse.result:type_name -> query.QueryResult - 171, // 24: tabletmanagerdata.GetUnresolvedTransactionsResponse.transactions:type_name -> query.TransactionMetadata - 171, // 25: tabletmanagerdata.ReadTransactionResponse.transaction:type_name -> query.TransactionMetadata - 172, // 26: tabletmanagerdata.MysqlHostMetricsResponse.HostMetrics:type_name -> mysqlctl.HostMetricsResponse - 173, // 27: tabletmanagerdata.ReplicationStatusResponse.status:type_name -> replicationdata.Status - 174, // 28: tabletmanagerdata.PrimaryStatusResponse.status:type_name -> replicationdata.PrimaryStatus - 170, // 29: tabletmanagerdata.VReplicationExecResponse.result:type_name -> query.QueryResult - 175, // 30: tabletmanagerdata.PopulateReparentJournalRequest.primary_alias:type_name -> topodata.TabletAlias - 175, // 31: tabletmanagerdata.InitReplicaRequest.parent:type_name -> topodata.TabletAlias - 174, // 32: tabletmanagerdata.DemotePrimaryResponse.primary_status:type_name -> replicationdata.PrimaryStatus - 176, // 33: tabletmanagerdata.FullStatusResponse.status:type_name -> replicationdata.FullStatus - 175, // 34: tabletmanagerdata.SetReplicationSourceRequest.parent:type_name -> topodata.TabletAlias - 175, // 35: tabletmanagerdata.ReplicaWasRestartedRequest.parent:type_name -> topodata.TabletAlias - 177, // 36: tabletmanagerdata.StopReplicationAndGetStatusRequest.stop_replication_mode:type_name -> replicationdata.StopReplicationMode - 178, // 37: tabletmanagerdata.StopReplicationAndGetStatusResponse.status:type_name -> replicationdata.StopReplicationStatus - 179, // 38: tabletmanagerdata.BackupResponse.event:type_name -> logutil.Event - 180, // 39: tabletmanagerdata.RestoreFromBackupRequest.backup_time:type_name -> vttime.Time - 180, // 40: tabletmanagerdata.RestoreFromBackupRequest.restore_to_timestamp:type_name -> vttime.Time - 179, // 41: tabletmanagerdata.RestoreFromBackupResponse.event:type_name -> logutil.Event - 181, // 42: tabletmanagerdata.CreateVReplicationWorkflowRequest.binlog_source:type_name -> binlogdata.BinlogSource - 168, // 43: tabletmanagerdata.CreateVReplicationWorkflowRequest.tablet_types:type_name -> topodata.TabletType + 170, // 18: tabletmanagerdata.ExecuteQueryRequest.caller_id:type_name -> vtrpc.CallerID + 171, // 19: tabletmanagerdata.ExecuteQueryResponse.result:type_name -> query.QueryResult + 171, // 20: tabletmanagerdata.ExecuteFetchAsDbaResponse.result:type_name -> query.QueryResult + 171, // 21: tabletmanagerdata.ExecuteMultiFetchAsDbaResponse.results:type_name -> query.QueryResult + 171, // 22: tabletmanagerdata.ExecuteFetchAsAllPrivsResponse.result:type_name -> query.QueryResult + 171, // 23: tabletmanagerdata.ExecuteFetchAsAppResponse.result:type_name -> query.QueryResult + 172, // 24: tabletmanagerdata.GetUnresolvedTransactionsResponse.transactions:type_name -> query.TransactionMetadata + 172, // 25: tabletmanagerdata.ReadTransactionResponse.transaction:type_name -> query.TransactionMetadata + 173, // 26: tabletmanagerdata.MysqlHostMetricsResponse.HostMetrics:type_name -> mysqlctl.HostMetricsResponse + 174, // 27: tabletmanagerdata.ReplicationStatusResponse.status:type_name -> replicationdata.Status + 175, // 28: tabletmanagerdata.PrimaryStatusResponse.status:type_name -> replicationdata.PrimaryStatus + 171, // 29: tabletmanagerdata.VReplicationExecResponse.result:type_name -> query.QueryResult + 176, // 30: tabletmanagerdata.PopulateReparentJournalRequest.primary_alias:type_name -> topodata.TabletAlias + 176, // 31: tabletmanagerdata.InitReplicaRequest.parent:type_name -> topodata.TabletAlias + 175, // 32: tabletmanagerdata.DemotePrimaryResponse.primary_status:type_name -> replicationdata.PrimaryStatus + 177, // 33: tabletmanagerdata.FullStatusResponse.status:type_name -> replicationdata.FullStatus + 176, // 34: tabletmanagerdata.SetReplicationSourceRequest.parent:type_name -> topodata.TabletAlias + 176, // 35: tabletmanagerdata.ReplicaWasRestartedRequest.parent:type_name -> topodata.TabletAlias + 178, // 36: tabletmanagerdata.StopReplicationAndGetStatusRequest.stop_replication_mode:type_name -> replicationdata.StopReplicationMode + 179, // 37: tabletmanagerdata.StopReplicationAndGetStatusResponse.status:type_name -> replicationdata.StopReplicationStatus + 180, // 38: tabletmanagerdata.BackupResponse.event:type_name -> logutil.Event + 181, // 39: tabletmanagerdata.RestoreFromBackupRequest.backup_time:type_name -> vttime.Time + 181, // 40: tabletmanagerdata.RestoreFromBackupRequest.restore_to_timestamp:type_name -> vttime.Time + 180, // 41: tabletmanagerdata.RestoreFromBackupResponse.event:type_name -> logutil.Event + 182, // 42: tabletmanagerdata.CreateVReplicationWorkflowRequest.binlog_source:type_name -> binlogdata.BinlogSource + 169, // 43: tabletmanagerdata.CreateVReplicationWorkflowRequest.tablet_types:type_name -> topodata.TabletType 0, // 44: tabletmanagerdata.CreateVReplicationWorkflowRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference - 182, // 45: tabletmanagerdata.CreateVReplicationWorkflowRequest.workflow_type:type_name -> binlogdata.VReplicationWorkflowType - 183, // 46: tabletmanagerdata.CreateVReplicationWorkflowRequest.workflow_sub_type:type_name -> binlogdata.VReplicationWorkflowSubType - 170, // 47: tabletmanagerdata.CreateVReplicationWorkflowResponse.result:type_name -> query.QueryResult - 150, // 48: tabletmanagerdata.DeleteTableDataRequest.table_filters:type_name -> tabletmanagerdata.DeleteTableDataRequest.TableFiltersEntry - 170, // 49: tabletmanagerdata.DeleteVReplicationWorkflowResponse.result:type_name -> query.QueryResult - 184, // 50: tabletmanagerdata.ReadVReplicationWorkflowsRequest.include_states:type_name -> binlogdata.VReplicationWorkflowState - 184, // 51: tabletmanagerdata.ReadVReplicationWorkflowsRequest.exclude_states:type_name -> binlogdata.VReplicationWorkflowState + 183, // 45: tabletmanagerdata.CreateVReplicationWorkflowRequest.workflow_type:type_name -> binlogdata.VReplicationWorkflowType + 184, // 46: tabletmanagerdata.CreateVReplicationWorkflowRequest.workflow_sub_type:type_name -> binlogdata.VReplicationWorkflowSubType + 171, // 47: tabletmanagerdata.CreateVReplicationWorkflowResponse.result:type_name -> query.QueryResult + 151, // 48: tabletmanagerdata.DeleteTableDataRequest.table_filters:type_name -> tabletmanagerdata.DeleteTableDataRequest.TableFiltersEntry + 171, // 49: tabletmanagerdata.DeleteVReplicationWorkflowResponse.result:type_name -> query.QueryResult + 185, // 50: tabletmanagerdata.ReadVReplicationWorkflowsRequest.include_states:type_name -> binlogdata.VReplicationWorkflowState + 185, // 51: tabletmanagerdata.ReadVReplicationWorkflowsRequest.exclude_states:type_name -> binlogdata.VReplicationWorkflowState 125, // 52: tabletmanagerdata.ReadVReplicationWorkflowsResponse.workflows:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse - 168, // 53: tabletmanagerdata.ReadVReplicationWorkflowResponse.tablet_types:type_name -> topodata.TabletType + 169, // 53: tabletmanagerdata.ReadVReplicationWorkflowResponse.tablet_types:type_name -> topodata.TabletType 0, // 54: tabletmanagerdata.ReadVReplicationWorkflowResponse.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference - 182, // 55: tabletmanagerdata.ReadVReplicationWorkflowResponse.workflow_type:type_name -> binlogdata.VReplicationWorkflowType - 183, // 56: tabletmanagerdata.ReadVReplicationWorkflowResponse.workflow_sub_type:type_name -> binlogdata.VReplicationWorkflowSubType - 151, // 57: tabletmanagerdata.ReadVReplicationWorkflowResponse.streams:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream - 152, // 58: tabletmanagerdata.ReadVReplicationWorkflowResponse.config_overrides:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntry + 183, // 55: tabletmanagerdata.ReadVReplicationWorkflowResponse.workflow_type:type_name -> binlogdata.VReplicationWorkflowType + 184, // 56: tabletmanagerdata.ReadVReplicationWorkflowResponse.workflow_sub_type:type_name -> binlogdata.VReplicationWorkflowSubType + 152, // 57: tabletmanagerdata.ReadVReplicationWorkflowResponse.streams:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream + 153, // 58: tabletmanagerdata.ReadVReplicationWorkflowResponse.config_overrides:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntry 133, // 59: tabletmanagerdata.VDiffRequest.options:type_name -> tabletmanagerdata.VDiffOptions - 170, // 60: tabletmanagerdata.VDiffResponse.output:type_name -> query.QueryResult + 171, // 60: tabletmanagerdata.VDiffResponse.output:type_name -> query.QueryResult 130, // 61: tabletmanagerdata.VDiffOptions.picker_options:type_name -> tabletmanagerdata.VDiffPickerOptions 132, // 62: tabletmanagerdata.VDiffOptions.core_options:type_name -> tabletmanagerdata.VDiffCoreOptions 131, // 63: tabletmanagerdata.VDiffOptions.report_options:type_name -> tabletmanagerdata.VDiffReportOptions - 168, // 64: tabletmanagerdata.UpdateVReplicationWorkflowRequest.tablet_types:type_name -> topodata.TabletType - 0, // 65: tabletmanagerdata.UpdateVReplicationWorkflowRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference - 185, // 66: tabletmanagerdata.UpdateVReplicationWorkflowRequest.on_ddl:type_name -> binlogdata.OnDDLAction - 184, // 67: tabletmanagerdata.UpdateVReplicationWorkflowRequest.state:type_name -> binlogdata.VReplicationWorkflowState - 153, // 68: tabletmanagerdata.UpdateVReplicationWorkflowRequest.config_overrides:type_name -> tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntry - 170, // 69: tabletmanagerdata.UpdateVReplicationWorkflowResponse.result:type_name -> query.QueryResult - 184, // 70: tabletmanagerdata.UpdateVReplicationWorkflowsRequest.state:type_name -> binlogdata.VReplicationWorkflowState - 170, // 71: tabletmanagerdata.UpdateVReplicationWorkflowsResponse.result:type_name -> query.QueryResult - 155, // 72: tabletmanagerdata.CheckThrottlerResponse.metrics:type_name -> tabletmanagerdata.CheckThrottlerResponse.MetricsEntry - 1, // 73: tabletmanagerdata.CheckThrottlerResponse.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode - 157, // 74: tabletmanagerdata.GetThrottlerStatusResponse.aggregated_metrics:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry - 158, // 75: tabletmanagerdata.GetThrottlerStatusResponse.metric_thresholds:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntry - 160, // 76: tabletmanagerdata.GetThrottlerStatusResponse.metrics_health:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry - 161, // 77: tabletmanagerdata.GetThrottlerStatusResponse.throttled_apps:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry - 162, // 78: tabletmanagerdata.GetThrottlerStatusResponse.app_checked_metrics:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntry - 164, // 79: tabletmanagerdata.GetThrottlerStatusResponse.recent_apps:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry - 165, // 80: tabletmanagerdata.ChangeTagsRequest.tags:type_name -> tabletmanagerdata.ChangeTagsRequest.TagsEntry - 166, // 81: tabletmanagerdata.ChangeTagsResponse.tags:type_name -> tabletmanagerdata.ChangeTagsResponse.TagsEntry - 181, // 82: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.bls:type_name -> binlogdata.BinlogSource - 180, // 83: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_updated:type_name -> vttime.Time - 180, // 84: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.transaction_timestamp:type_name -> vttime.Time - 184, // 85: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.state:type_name -> binlogdata.VReplicationWorkflowState - 180, // 86: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_heartbeat:type_name -> vttime.Time - 180, // 87: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_throttled:type_name -> vttime.Time - 1, // 88: tabletmanagerdata.CheckThrottlerResponse.Metric.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode - 154, // 89: tabletmanagerdata.CheckThrottlerResponse.MetricsEntry.value:type_name -> tabletmanagerdata.CheckThrottlerResponse.Metric - 156, // 90: tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricResult - 180, // 91: tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth.last_healthy_at:type_name -> vttime.Time - 159, // 92: tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth - 186, // 93: tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry.value:type_name -> topodata.ThrottledAppRule - 180, // 94: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp.checked_at:type_name -> vttime.Time - 1, // 95: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode - 163, // 96: tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.RecentApp - 97, // [97:97] is the sub-list for method output_type - 97, // [97:97] is the sub-list for method input_type - 97, // [97:97] is the sub-list for extension type_name - 97, // [97:97] is the sub-list for extension extendee - 0, // [0:97] is the sub-list for field type_name + 171, // 64: tabletmanagerdata.VDiffTableLastPK.target:type_name -> query.QueryResult + 171, // 65: tabletmanagerdata.VDiffTableLastPK.source:type_name -> query.QueryResult + 169, // 66: tabletmanagerdata.UpdateVReplicationWorkflowRequest.tablet_types:type_name -> topodata.TabletType + 0, // 67: tabletmanagerdata.UpdateVReplicationWorkflowRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference + 186, // 68: tabletmanagerdata.UpdateVReplicationWorkflowRequest.on_ddl:type_name -> binlogdata.OnDDLAction + 185, // 69: tabletmanagerdata.UpdateVReplicationWorkflowRequest.state:type_name -> binlogdata.VReplicationWorkflowState + 154, // 70: tabletmanagerdata.UpdateVReplicationWorkflowRequest.config_overrides:type_name -> tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntry + 171, // 71: tabletmanagerdata.UpdateVReplicationWorkflowResponse.result:type_name -> query.QueryResult + 185, // 72: tabletmanagerdata.UpdateVReplicationWorkflowsRequest.state:type_name -> binlogdata.VReplicationWorkflowState + 171, // 73: tabletmanagerdata.UpdateVReplicationWorkflowsResponse.result:type_name -> query.QueryResult + 156, // 74: tabletmanagerdata.CheckThrottlerResponse.metrics:type_name -> tabletmanagerdata.CheckThrottlerResponse.MetricsEntry + 1, // 75: tabletmanagerdata.CheckThrottlerResponse.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode + 158, // 76: tabletmanagerdata.GetThrottlerStatusResponse.aggregated_metrics:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry + 159, // 77: tabletmanagerdata.GetThrottlerStatusResponse.metric_thresholds:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntry + 161, // 78: tabletmanagerdata.GetThrottlerStatusResponse.metrics_health:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry + 162, // 79: tabletmanagerdata.GetThrottlerStatusResponse.throttled_apps:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry + 163, // 80: tabletmanagerdata.GetThrottlerStatusResponse.app_checked_metrics:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntry + 165, // 81: tabletmanagerdata.GetThrottlerStatusResponse.recent_apps:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry + 166, // 82: tabletmanagerdata.ChangeTagsRequest.tags:type_name -> tabletmanagerdata.ChangeTagsRequest.TagsEntry + 167, // 83: tabletmanagerdata.ChangeTagsResponse.tags:type_name -> tabletmanagerdata.ChangeTagsResponse.TagsEntry + 182, // 84: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.bls:type_name -> binlogdata.BinlogSource + 181, // 85: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_updated:type_name -> vttime.Time + 181, // 86: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.transaction_timestamp:type_name -> vttime.Time + 185, // 87: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.state:type_name -> binlogdata.VReplicationWorkflowState + 181, // 88: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_heartbeat:type_name -> vttime.Time + 181, // 89: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_throttled:type_name -> vttime.Time + 1, // 90: tabletmanagerdata.CheckThrottlerResponse.Metric.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode + 155, // 91: tabletmanagerdata.CheckThrottlerResponse.MetricsEntry.value:type_name -> tabletmanagerdata.CheckThrottlerResponse.Metric + 157, // 92: tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricResult + 181, // 93: tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth.last_healthy_at:type_name -> vttime.Time + 160, // 94: tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth + 187, // 95: tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry.value:type_name -> topodata.ThrottledAppRule + 181, // 96: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp.checked_at:type_name -> vttime.Time + 1, // 97: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode + 164, // 98: tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.RecentApp + 99, // [99:99] is the sub-list for method output_type + 99, // [99:99] is the sub-list for method input_type + 99, // [99:99] is the sub-list for extension type_name + 99, // [99:99] is the sub-list for extension extendee + 0, // [0:99] is the sub-list for field type_name } func init() { file_tabletmanagerdata_proto_init() } @@ -9590,14 +9655,15 @@ func file_tabletmanagerdata_proto_init() { file_tabletmanagerdata_proto_msgTypes[108].OneofWrappers = []any{} file_tabletmanagerdata_proto_msgTypes[130].OneofWrappers = []any{} file_tabletmanagerdata_proto_msgTypes[132].OneofWrappers = []any{} - file_tabletmanagerdata_proto_msgTypes[134].OneofWrappers = []any{} + file_tabletmanagerdata_proto_msgTypes[133].OneofWrappers = []any{} + file_tabletmanagerdata_proto_msgTypes[135].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_tabletmanagerdata_proto_rawDesc, NumEnums: 2, - NumMessages: 165, + NumMessages: 166, NumExtensions: 0, NumServices: 0, }, diff --git a/go/vt/proto/tabletmanagerdata/tabletmanagerdata_vtproto.pb.go b/go/vt/proto/tabletmanagerdata/tabletmanagerdata_vtproto.pb.go index 9f6b0df851b..eaedd9c4bc7 100644 --- a/go/vt/proto/tabletmanagerdata/tabletmanagerdata_vtproto.pb.go +++ b/go/vt/proto/tabletmanagerdata/tabletmanagerdata_vtproto.pb.go @@ -2579,6 +2579,24 @@ func (m *VDiffOptions) CloneMessageVT() proto.Message { return m.CloneVT() } +func (m *VDiffTableLastPK) CloneVT() *VDiffTableLastPK { + if m == nil { + return (*VDiffTableLastPK)(nil) + } + r := new(VDiffTableLastPK) + r.Target = m.Target.CloneVT() + r.Source = m.Source.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *VDiffTableLastPK) CloneMessageVT() proto.Message { + return m.CloneVT() +} + func (m *UpdateVReplicationWorkflowRequest) CloneVT() *UpdateVReplicationWorkflowRequest { if m == nil { return (*UpdateVReplicationWorkflowRequest)(nil) @@ -9350,6 +9368,59 @@ func (m *VDiffOptions) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *VDiffTableLastPK) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VDiffTableLastPK) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *VDiffTableLastPK) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.Source != nil { + size, err := m.Source.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 + } + if m.Target != nil { + size, err := m.Target.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *UpdateVReplicationWorkflowRequest) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil @@ -12772,6 +12843,24 @@ func (m *VDiffOptions) SizeVT() (n int) { return n } +func (m *VDiffTableLastPK) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Target != nil { + l = m.Target.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.Source != nil { + l = m.Source.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + func (m *UpdateVReplicationWorkflowRequest) SizeVT() (n int) { if m == nil { return 0 @@ -27261,6 +27350,129 @@ func (m *VDiffOptions) UnmarshalVT(dAtA []byte) error { } return nil } +func (m *VDiffTableLastPK) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: VDiffTableLastPK: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: VDiffTableLastPK: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Target == nil { + m.Target = &query.QueryResult{} + } + if err := m.Target.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Source == nil { + m.Source = &query.QueryResult{} + } + if err := m.Source.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *UpdateVReplicationWorkflowRequest) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/go/vt/proto/topodata/cached_size.go b/go/vt/proto/topodata/cached_size.go index 94b7fc6818c..3feead01bae 100644 --- a/go/vt/proto/topodata/cached_size.go +++ b/go/vt/proto/topodata/cached_size.go @@ -27,6 +27,10 @@ func (cached *KeyRange) CachedSize(alloc bool) int64 { if alloc { size += int64(96) } + // field unknownFields google.golang.org/protobuf/runtime/protoimpl.UnknownFields + { + size += hack.RuntimeAllocSize(int64(cap(cached.unknownFields))) + } // field Start []byte { size += hack.RuntimeAllocSize(int64(cap(cached.Start))) @@ -45,6 +49,10 @@ func (cached *ThrottledAppRule) CachedSize(alloc bool) int64 { if alloc { size += int64(80) } + // field unknownFields google.golang.org/protobuf/runtime/protoimpl.UnknownFields + { + size += hack.RuntimeAllocSize(int64(cap(cached.unknownFields))) + } // field Name string size += hack.RuntimeAllocSize(int64(len(cached.Name))) // field ExpiresAt *vitess.io/vitess/go/vt/proto/vttime.Time diff --git a/go/vt/proto/vttime/cached_size.go b/go/vt/proto/vttime/cached_size.go index 62a6366ba3c..f2b69dbefae 100644 --- a/go/vt/proto/vttime/cached_size.go +++ b/go/vt/proto/vttime/cached_size.go @@ -17,6 +17,8 @@ limitations under the License. package vttime +import hack "vitess.io/vitess/go/hack" + func (cached *Time) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) @@ -25,5 +27,9 @@ func (cached *Time) CachedSize(alloc bool) int64 { if alloc { size += int64(64) } + // field unknownFields google.golang.org/protobuf/runtime/protoimpl.UnknownFields + { + size += hack.RuntimeAllocSize(int64(cap(cached.unknownFields))) + } return size } diff --git a/go/vt/schemadiff/view.go b/go/vt/schemadiff/view.go index 8783f1803bb..ff34d772dcf 100644 --- a/go/vt/schemadiff/view.go +++ b/go/vt/schemadiff/view.go @@ -427,6 +427,6 @@ func (c *CreateViewEntity) identicalOtherThanName(other *CreateViewEntity) bool c.IsReplace == other.IsReplace && sqlparser.Equals.RefOfDefiner(c.Definer, other.Definer) && sqlparser.Equals.Columns(c.Columns, other.Columns) && - sqlparser.Equals.SelectStatement(c.Select, other.Select) && + sqlparser.Equals.Statement(c.Select, other.Select) && sqlparser.Equals.RefOfParsedComments(c.Comments, other.Comments) } diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 92c67d55999..e673b1ebf74 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -57,6 +57,34 @@ type ( OrderAndLimit interface { AddOrder(*Order) SetLimit(*Limit) + GetOrderBy() OrderBy + SetOrderBy(OrderBy) + GetLimit() *Limit + } + + TableStatement interface { + iTableStatement() + + InsertRows + Statement + OrderAndLimit + Commented + ColumnResults + Withable + } + + ColumnResults interface { + GetColumnCount() int + GetColumns() SelectExprs + } + + Withable interface { + SetWith(with *With) + } + + Distinctable interface { + MakeDistinct() + IsDistinct() bool } // SelectStatement any SELECT statement. @@ -64,19 +92,14 @@ type ( Statement InsertRows OrderAndLimit + Commented + ColumnResults + Withable + Distinctable iSelectStatement() GetLock() Lock SetLock(lock Lock) SetInto(into *SelectInto) - SetWith(with *With) - MakeDistinct() - GetColumnCount() int - GetColumns() SelectExprs - Commented - IsDistinct() bool - GetOrderBy() OrderBy - SetOrderBy(OrderBy) - GetLimit() *Limit } // DDLStatement represents any DDL Statement @@ -161,7 +184,7 @@ type ( CommonTableExpr struct { ID IdentifierCS Columns Columns - Subquery SelectStatement + Subquery TableStatement } // ChangeColumn is used to change the column definition, can also rename the column in alter table command ChangeColumn struct { @@ -303,8 +326,8 @@ type ( // Union represents a UNION statement. Union struct { With *With - Left SelectStatement - Right SelectStatement + Left TableStatement + Right TableStatement Distinct bool OrderBy OrderBy Limit *Limit @@ -543,7 +566,7 @@ type ( Definer *Definer Security string Columns Columns - Select SelectStatement + Select TableStatement CheckOption string IsReplace bool Comments *ParsedComments @@ -556,7 +579,7 @@ type ( Definer *Definer Security string Columns Columns - Select SelectStatement + Select TableStatement CheckOption string Comments *ParsedComments } @@ -727,58 +750,63 @@ type ( var _ OrderAndLimit = (*Select)(nil) var _ OrderAndLimit = (*Update)(nil) var _ OrderAndLimit = (*Delete)(nil) - -func (*Union) iStatement() {} -func (*Select) iStatement() {} -func (*Stream) iStatement() {} -func (*VStream) iStatement() {} -func (*Insert) iStatement() {} -func (*Update) iStatement() {} -func (*Delete) iStatement() {} -func (*Set) iStatement() {} -func (*DropDatabase) iStatement() {} -func (*Flush) iStatement() {} -func (*Show) iStatement() {} -func (*Use) iStatement() {} -func (*Begin) iStatement() {} -func (*Commit) iStatement() {} -func (*Rollback) iStatement() {} -func (*SRollback) iStatement() {} -func (*Savepoint) iStatement() {} -func (*Release) iStatement() {} -func (*Analyze) iStatement() {} -func (*OtherAdmin) iStatement() {} -func (*CommentOnly) iStatement() {} -func (*Select) iSelectStatement() {} -func (*Union) iSelectStatement() {} -func (*Load) iStatement() {} -func (*CreateDatabase) iStatement() {} -func (*AlterDatabase) iStatement() {} -func (*CreateTable) iStatement() {} -func (*CreateView) iStatement() {} -func (*AlterView) iStatement() {} -func (*LockTables) iStatement() {} -func (*UnlockTables) iStatement() {} -func (*AlterTable) iStatement() {} -func (*AlterVschema) iStatement() {} -func (*AlterMigration) iStatement() {} -func (*RevertMigration) iStatement() {} -func (*ShowMigrationLogs) iStatement() {} -func (*ShowThrottledApps) iStatement() {} -func (*ShowThrottlerStatus) iStatement() {} -func (*DropTable) iStatement() {} -func (*DropView) iStatement() {} -func (*TruncateTable) iStatement() {} -func (*RenameTable) iStatement() {} -func (*CallProc) iStatement() {} -func (*ExplainStmt) iStatement() {} -func (*VExplainStmt) iStatement() {} -func (*ExplainTab) iStatement() {} -func (*PrepareStmt) iStatement() {} -func (*ExecuteStmt) iStatement() {} -func (*DeallocateStmt) iStatement() {} -func (*PurgeBinaryLogs) iStatement() {} -func (*Kill) iStatement() {} +var _ OrderAndLimit = (*ValuesStatement)(nil) + +func (*Union) iStatement() {} +func (*Select) iStatement() {} +func (*ValuesStatement) iStatement() {} +func (*Stream) iStatement() {} +func (*VStream) iStatement() {} +func (*Insert) iStatement() {} +func (*Update) iStatement() {} +func (*Delete) iStatement() {} +func (*Set) iStatement() {} +func (*DropDatabase) iStatement() {} +func (*Flush) iStatement() {} +func (*Show) iStatement() {} +func (*Use) iStatement() {} +func (*Begin) iStatement() {} +func (*Commit) iStatement() {} +func (*Rollback) iStatement() {} +func (*SRollback) iStatement() {} +func (*Savepoint) iStatement() {} +func (*Release) iStatement() {} +func (*Analyze) iStatement() {} +func (*OtherAdmin) iStatement() {} +func (*CommentOnly) iStatement() {} +func (*Select) iSelectStatement() {} +func (*Select) iTableStatement() {} +func (*ValuesStatement) iSelectStatement() {} +func (*Union) iSelectStatement() {} +func (*Union) iTableStatement() {} +func (*Load) iStatement() {} +func (*CreateDatabase) iStatement() {} +func (*AlterDatabase) iStatement() {} +func (*CreateTable) iStatement() {} +func (*CreateView) iStatement() {} +func (*AlterView) iStatement() {} +func (*LockTables) iStatement() {} +func (*UnlockTables) iStatement() {} +func (*AlterTable) iStatement() {} +func (*AlterVschema) iStatement() {} +func (*AlterMigration) iStatement() {} +func (*RevertMigration) iStatement() {} +func (*ShowMigrationLogs) iStatement() {} +func (*ShowThrottledApps) iStatement() {} +func (*ShowThrottlerStatus) iStatement() {} +func (*DropTable) iStatement() {} +func (*DropView) iStatement() {} +func (*TruncateTable) iStatement() {} +func (*RenameTable) iStatement() {} +func (*CallProc) iStatement() {} +func (*ExplainStmt) iStatement() {} +func (*VExplainStmt) iStatement() {} +func (*ExplainTab) iStatement() {} +func (*PrepareStmt) iStatement() {} +func (*ExecuteStmt) iStatement() {} +func (*DeallocateStmt) iStatement() {} +func (*PurgeBinaryLogs) iStatement() {} +func (*Kill) iStatement() {} func (*CreateView) iDDLStatement() {} func (*AlterView) iDDLStatement() {} @@ -1702,9 +1730,10 @@ type InsertRows interface { SQLNode } -func (*Select) iInsertRows() {} -func (*Union) iInsertRows() {} -func (Values) iInsertRows() {} +func (*Select) iInsertRows() {} +func (*Union) iInsertRows() {} +func (Values) iInsertRows() {} +func (*ValuesStatement) iInsertRows() {} // OptLike works for create table xxx like xxx type OptLike struct { @@ -2108,13 +2137,13 @@ type ( // Subquery represents a subquery used as an value expression. Subquery struct { - Select SelectStatement + Select TableStatement } // DerivedTable represents a subquery used as a table expression. DerivedTable struct { Lateral bool - Select SelectStatement + Select TableStatement } ) @@ -3575,6 +3604,18 @@ type Limit struct { // Values represents a VALUES clause. type Values []ValTuple +// ValuesStatement represents a VALUES statement, as in VALUES ROW(1, 2), ROW(3, 4) +type ValuesStatement struct { + With *With + // One but not both of these fields can be set. + Rows Values + ListArg ListArg + + Comments *ParsedComments + Order OrderBy + Limit *Limit +} + // UpdateExprs represents a list of update expressions. type UpdateExprs []*UpdateExpr diff --git a/go/vt/sqlparser/ast_clone.go b/go/vt/sqlparser/ast_clone.go index 03a5fabe552..3c7f4fe5e6a 100644 --- a/go/vt/sqlparser/ast_clone.go +++ b/go/vt/sqlparser/ast_clone.go @@ -535,6 +535,8 @@ func CloneSQLNode(in SQLNode) SQLNode { return CloneValues(in) case *ValuesFuncExpr: return CloneRefOfValuesFuncExpr(in) + case *ValuesStatement: + return CloneRefOfValuesStatement(in) case *VarPop: return CloneRefOfVarPop(in) case *VarSamp: @@ -711,7 +713,7 @@ func CloneRefOfAlterView(n *AlterView) *AlterView { out.ViewName = CloneTableName(n.ViewName) out.Definer = CloneRefOfDefiner(n.Definer) out.Columns = CloneColumns(n.Columns) - out.Select = CloneSelectStatement(n.Select) + out.Select = CloneTableStatement(n.Select) out.Comments = CloneRefOfParsedComments(n.Comments) return &out } @@ -1023,7 +1025,7 @@ func CloneRefOfCommonTableExpr(n *CommonTableExpr) *CommonTableExpr { out := *n out.ID = CloneIdentifierCS(n.ID) out.Columns = CloneColumns(n.Columns) - out.Subquery = CloneSelectStatement(n.Subquery) + out.Subquery = CloneTableStatement(n.Subquery) return &out } @@ -1138,7 +1140,7 @@ func CloneRefOfCreateView(n *CreateView) *CreateView { out.ViewName = CloneTableName(n.ViewName) out.Definer = CloneRefOfDefiner(n.Definer) out.Columns = CloneColumns(n.Columns) - out.Select = CloneSelectStatement(n.Select) + out.Select = CloneTableStatement(n.Select) out.Comments = CloneRefOfParsedComments(n.Comments) return &out } @@ -1205,7 +1207,7 @@ func CloneRefOfDerivedTable(n *DerivedTable) *DerivedTable { return nil } out := *n - out.Select = CloneSelectStatement(n.Select) + out.Select = CloneTableStatement(n.Select) return &out } @@ -3042,7 +3044,7 @@ func CloneRefOfSubquery(n *Subquery) *Subquery { return nil } out := *n - out.Select = CloneSelectStatement(n.Select) + out.Select = CloneTableStatement(n.Select) return &out } @@ -3182,8 +3184,8 @@ func CloneRefOfUnion(n *Union) *Union { } out := *n out.With = CloneRefOfWith(n.With) - out.Left = CloneSelectStatement(n.Left) - out.Right = CloneSelectStatement(n.Right) + out.Left = CloneTableStatement(n.Left) + out.Right = CloneTableStatement(n.Right) out.OrderBy = CloneOrderBy(n.OrderBy) out.Limit = CloneRefOfLimit(n.Limit) out.Into = CloneRefOfSelectInto(n.Into) @@ -3328,6 +3330,20 @@ func CloneRefOfValuesFuncExpr(n *ValuesFuncExpr) *ValuesFuncExpr { return &out } +// CloneRefOfValuesStatement creates a deep clone of the input. +func CloneRefOfValuesStatement(n *ValuesStatement) *ValuesStatement { + if n == nil { + return nil + } + out := *n + out.With = CloneRefOfWith(n.With) + out.Rows = CloneValues(n.Rows) + out.Comments = CloneRefOfParsedComments(n.Comments) + out.Order = CloneOrderBy(n.Order) + out.Limit = CloneRefOfLimit(n.Limit) + return &out +} + // CloneRefOfVarPop creates a deep clone of the input. func CloneRefOfVarPop(n *VarPop) *VarPop { if n == nil { @@ -4107,6 +4123,8 @@ func CloneInsertRows(in InsertRows) InsertRows { return CloneRefOfUnion(in) case Values: return CloneValues(in) + case *ValuesStatement: + return CloneRefOfValuesStatement(in) default: // this should never happen return nil @@ -4287,6 +4305,8 @@ func CloneStatement(in Statement) Statement { return CloneRefOfVExplainStmt(in) case *VStream: return CloneRefOfVStream(in) + case *ValuesStatement: + return CloneRefOfValuesStatement(in) default: // this should never happen return nil @@ -4313,6 +4333,24 @@ func CloneTableExpr(in TableExpr) TableExpr { } } +// CloneTableStatement creates a deep clone of the input. +func CloneTableStatement(in TableStatement) TableStatement { + if in == nil { + return nil + } + switch in := in.(type) { + case *Select: + return CloneRefOfSelect(in) + case *Union: + return CloneRefOfUnion(in) + case *ValuesStatement: + return CloneRefOfValuesStatement(in) + default: + // this should never happen + return nil + } +} + // CloneSliceOfRefOfColumnDefinition creates a deep clone of the input. func CloneSliceOfRefOfColumnDefinition(n []*ColumnDefinition) []*ColumnDefinition { if n == nil { diff --git a/go/vt/sqlparser/ast_copy_on_rewrite.go b/go/vt/sqlparser/ast_copy_on_rewrite.go index 9b952b36dc7..f725dfc6803 100644 --- a/go/vt/sqlparser/ast_copy_on_rewrite.go +++ b/go/vt/sqlparser/ast_copy_on_rewrite.go @@ -534,6 +534,8 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan return c.copyOnRewriteValues(n, parent) case *ValuesFuncExpr: return c.copyOnRewriteRefOfValuesFuncExpr(n, parent) + case *ValuesStatement: + return c.copyOnRewriteRefOfValuesStatement(n, parent) case *VarPop: return c.copyOnRewriteRefOfVarPop(n, parent) case *VarSamp: @@ -870,14 +872,14 @@ func (c *cow) copyOnRewriteRefOfAlterView(n *AlterView, parent SQLNode) (out SQL _ViewName, changedViewName := c.copyOnRewriteTableName(n.ViewName, n) _Definer, changedDefiner := c.copyOnRewriteRefOfDefiner(n.Definer, n) _Columns, changedColumns := c.copyOnRewriteColumns(n.Columns, n) - _Select, changedSelect := c.copyOnRewriteSelectStatement(n.Select, n) + _Select, changedSelect := c.copyOnRewriteTableStatement(n.Select, n) _Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n) if changedViewName || changedDefiner || changedColumns || changedSelect || changedComments { res := *n res.ViewName, _ = _ViewName.(TableName) res.Definer, _ = _Definer.(*Definer) res.Columns, _ = _Columns.(Columns) - res.Select, _ = _Select.(SelectStatement) + res.Select, _ = _Select.(TableStatement) res.Comments, _ = _Comments.(*ParsedComments) out = &res if c.cloned != nil { @@ -1524,12 +1526,12 @@ func (c *cow) copyOnRewriteRefOfCommonTableExpr(n *CommonTableExpr, parent SQLNo if c.pre == nil || c.pre(n, parent) { _ID, changedID := c.copyOnRewriteIdentifierCS(n.ID, n) _Columns, changedColumns := c.copyOnRewriteColumns(n.Columns, n) - _Subquery, changedSubquery := c.copyOnRewriteSelectStatement(n.Subquery, n) + _Subquery, changedSubquery := c.copyOnRewriteTableStatement(n.Subquery, n) if changedID || changedColumns || changedSubquery { res := *n res.ID, _ = _ID.(IdentifierCS) res.Columns, _ = _Columns.(Columns) - res.Subquery, _ = _Subquery.(SelectStatement) + res.Subquery, _ = _Subquery.(TableStatement) out = &res if c.cloned != nil { c.cloned(n, out) @@ -1757,14 +1759,14 @@ func (c *cow) copyOnRewriteRefOfCreateView(n *CreateView, parent SQLNode) (out S _ViewName, changedViewName := c.copyOnRewriteTableName(n.ViewName, n) _Definer, changedDefiner := c.copyOnRewriteRefOfDefiner(n.Definer, n) _Columns, changedColumns := c.copyOnRewriteColumns(n.Columns, n) - _Select, changedSelect := c.copyOnRewriteSelectStatement(n.Select, n) + _Select, changedSelect := c.copyOnRewriteTableStatement(n.Select, n) _Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n) if changedViewName || changedDefiner || changedColumns || changedSelect || changedComments { res := *n res.ViewName, _ = _ViewName.(TableName) res.Definer, _ = _Definer.(*Definer) res.Columns, _ = _Columns.(Columns) - res.Select, _ = _Select.(SelectStatement) + res.Select, _ = _Select.(TableStatement) res.Comments, _ = _Comments.(*ParsedComments) out = &res if c.cloned != nil { @@ -1898,10 +1900,10 @@ func (c *cow) copyOnRewriteRefOfDerivedTable(n *DerivedTable, parent SQLNode) (o } out = n if c.pre == nil || c.pre(n, parent) { - _Select, changedSelect := c.copyOnRewriteSelectStatement(n.Select, n) + _Select, changedSelect := c.copyOnRewriteTableStatement(n.Select, n) if changedSelect { res := *n - res.Select, _ = _Select.(SelectStatement) + res.Select, _ = _Select.(TableStatement) out = &res if c.cloned != nil { c.cloned(n, out) @@ -5790,10 +5792,10 @@ func (c *cow) copyOnRewriteRefOfSubquery(n *Subquery, parent SQLNode) (out SQLNo } out = n if c.pre == nil || c.pre(n, parent) { - _Select, changedSelect := c.copyOnRewriteSelectStatement(n.Select, n) + _Select, changedSelect := c.copyOnRewriteTableStatement(n.Select, n) if changedSelect { res := *n - res.Select, _ = _Select.(SelectStatement) + res.Select, _ = _Select.(TableStatement) out = &res if c.cloned != nil { c.cloned(n, out) @@ -6101,16 +6103,16 @@ func (c *cow) copyOnRewriteRefOfUnion(n *Union, parent SQLNode) (out SQLNode, ch out = n if c.pre == nil || c.pre(n, parent) { _With, changedWith := c.copyOnRewriteRefOfWith(n.With, n) - _Left, changedLeft := c.copyOnRewriteSelectStatement(n.Left, n) - _Right, changedRight := c.copyOnRewriteSelectStatement(n.Right, n) + _Left, changedLeft := c.copyOnRewriteTableStatement(n.Left, n) + _Right, changedRight := c.copyOnRewriteTableStatement(n.Right, n) _OrderBy, changedOrderBy := c.copyOnRewriteOrderBy(n.OrderBy, n) _Limit, changedLimit := c.copyOnRewriteRefOfLimit(n.Limit, n) _Into, changedInto := c.copyOnRewriteRefOfSelectInto(n.Into, n) if changedWith || changedLeft || changedRight || changedOrderBy || changedLimit || changedInto { res := *n res.With, _ = _With.(*With) - res.Left, _ = _Left.(SelectStatement) - res.Right, _ = _Right.(SelectStatement) + res.Left, _ = _Left.(TableStatement) + res.Right, _ = _Right.(TableStatement) res.OrderBy, _ = _OrderBy.(OrderBy) res.Limit, _ = _Limit.(*Limit) res.Into, _ = _Into.(*SelectInto) @@ -6409,6 +6411,38 @@ func (c *cow) copyOnRewriteRefOfValuesFuncExpr(n *ValuesFuncExpr, parent SQLNode } return } +func (c *cow) copyOnRewriteRefOfValuesStatement(n *ValuesStatement, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _With, changedWith := c.copyOnRewriteRefOfWith(n.With, n) + _Rows, changedRows := c.copyOnRewriteValues(n.Rows, n) + _ListArg, changedListArg := c.copyOnRewriteListArg(n.ListArg, n) + _Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n) + _Order, changedOrder := c.copyOnRewriteOrderBy(n.Order, n) + _Limit, changedLimit := c.copyOnRewriteRefOfLimit(n.Limit, n) + if changedWith || changedRows || changedListArg || changedComments || changedOrder || changedLimit { + res := *n + res.With, _ = _With.(*With) + res.Rows, _ = _Rows.(Values) + res.ListArg, _ = _ListArg.(ListArg) + res.Comments, _ = _Comments.(*ParsedComments) + res.Order, _ = _Order.(OrderBy) + res.Limit, _ = _Limit.(*Limit) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfVarPop(n *VarPop, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -7366,6 +7400,8 @@ func (c *cow) copyOnRewriteInsertRows(n InsertRows, parent SQLNode) (out SQLNode return c.copyOnRewriteRefOfUnion(n, parent) case Values: return c.copyOnRewriteValues(n, parent) + case *ValuesStatement: + return c.copyOnRewriteRefOfValuesStatement(n, parent) default: // this should never happen return nil, false @@ -7536,6 +7572,8 @@ func (c *cow) copyOnRewriteStatement(n Statement, parent SQLNode) (out SQLNode, return c.copyOnRewriteRefOfVExplainStmt(n, parent) case *VStream: return c.copyOnRewriteRefOfVStream(n, parent) + case *ValuesStatement: + return c.copyOnRewriteRefOfValuesStatement(n, parent) default: // this should never happen return nil, false @@ -7559,6 +7597,22 @@ func (c *cow) copyOnRewriteTableExpr(n TableExpr, parent SQLNode) (out SQLNode, return nil, false } } +func (c *cow) copyOnRewriteTableStatement(n TableStatement, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + switch n := n.(type) { + case *Select: + return c.copyOnRewriteRefOfSelect(n, parent) + case *Union: + return c.copyOnRewriteRefOfUnion(n, parent) + case *ValuesStatement: + return c.copyOnRewriteRefOfValuesStatement(n, parent) + default: + // this should never happen + return nil, false + } +} func (c *cow) copyOnRewriteAlgorithmValue(n AlgorithmValue, parent SQLNode) (out SQLNode, changed bool) { if c.cursor.stop { return n, false diff --git a/go/vt/sqlparser/ast_equals.go b/go/vt/sqlparser/ast_equals.go index c4c0b34c271..93f10376177 100644 --- a/go/vt/sqlparser/ast_equals.go +++ b/go/vt/sqlparser/ast_equals.go @@ -1562,6 +1562,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfValuesFuncExpr(a, b) + case *ValuesStatement: + b, ok := inB.(*ValuesStatement) + if !ok { + return false + } + return cmp.RefOfValuesStatement(a, b) case *VarPop: b, ok := inB.(*VarPop) if !ok { @@ -1826,7 +1832,7 @@ func (cmp *Comparator) RefOfAlterView(a, b *AlterView) bool { cmp.TableName(a.ViewName, b.ViewName) && cmp.RefOfDefiner(a.Definer, b.Definer) && cmp.Columns(a.Columns, b.Columns) && - cmp.SelectStatement(a.Select, b.Select) && + cmp.TableStatement(a.Select, b.Select) && cmp.RefOfParsedComments(a.Comments, b.Comments) } @@ -2195,7 +2201,7 @@ func (cmp *Comparator) RefOfCommonTableExpr(a, b *CommonTableExpr) bool { } return cmp.IdentifierCS(a.ID, b.ID) && cmp.Columns(a.Columns, b.Columns) && - cmp.SelectStatement(a.Subquery, b.Subquery) + cmp.TableStatement(a.Subquery, b.Subquery) } // RefOfComparisonExpr does deep equals between the two objects. @@ -2334,7 +2340,7 @@ func (cmp *Comparator) RefOfCreateView(a, b *CreateView) bool { cmp.TableName(a.ViewName, b.ViewName) && cmp.RefOfDefiner(a.Definer, b.Definer) && cmp.Columns(a.Columns, b.Columns) && - cmp.SelectStatement(a.Select, b.Select) && + cmp.TableStatement(a.Select, b.Select) && cmp.RefOfParsedComments(a.Comments, b.Comments) } @@ -2413,7 +2419,7 @@ func (cmp *Comparator) RefOfDerivedTable(a, b *DerivedTable) bool { return false } return a.Lateral == b.Lateral && - cmp.SelectStatement(a.Select, b.Select) + cmp.TableStatement(a.Select, b.Select) } // RefOfDropColumn does deep equals between the two objects. @@ -4525,7 +4531,7 @@ func (cmp *Comparator) RefOfSubquery(a, b *Subquery) bool { if a == nil || b == nil { return false } - return cmp.SelectStatement(a.Select, b.Select) + return cmp.TableStatement(a.Select, b.Select) } // RefOfSubstrExpr does deep equals between the two objects. @@ -4685,8 +4691,8 @@ func (cmp *Comparator) RefOfUnion(a, b *Union) bool { } return a.Distinct == b.Distinct && cmp.RefOfWith(a.With, b.With) && - cmp.SelectStatement(a.Left, b.Left) && - cmp.SelectStatement(a.Right, b.Right) && + cmp.TableStatement(a.Left, b.Left) && + cmp.TableStatement(a.Right, b.Right) && cmp.OrderBy(a.OrderBy, b.OrderBy) && cmp.RefOfLimit(a.Limit, b.Limit) && a.Lock == b.Lock && @@ -4847,6 +4853,22 @@ func (cmp *Comparator) RefOfValuesFuncExpr(a, b *ValuesFuncExpr) bool { return cmp.RefOfColName(a.Name, b.Name) } +// RefOfValuesStatement does deep equals between the two objects. +func (cmp *Comparator) RefOfValuesStatement(a, b *ValuesStatement) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return cmp.RefOfWith(a.With, b.With) && + cmp.Values(a.Rows, b.Rows) && + a.ListArg == b.ListArg && + cmp.RefOfParsedComments(a.Comments, b.Comments) && + cmp.OrderBy(a.Order, b.Order) && + cmp.RefOfLimit(a.Limit, b.Limit) +} + // RefOfVarPop does deep equals between the two objects. func (cmp *Comparator) RefOfVarPop(a, b *VarPop) bool { if a == b { @@ -6705,6 +6727,12 @@ func (cmp *Comparator) InsertRows(inA, inB InsertRows) bool { return false } return cmp.Values(a, b) + case *ValuesStatement: + b, ok := inB.(*ValuesStatement) + if !ok { + return false + } + return cmp.RefOfValuesStatement(a, b) default: // this should never happen return false @@ -7140,6 +7168,12 @@ func (cmp *Comparator) Statement(inA, inB Statement) bool { return false } return cmp.RefOfVStream(a, b) + case *ValuesStatement: + b, ok := inB.(*ValuesStatement) + if !ok { + return false + } + return cmp.RefOfValuesStatement(a, b) default: // this should never happen return false @@ -7185,6 +7219,39 @@ func (cmp *Comparator) TableExpr(inA, inB TableExpr) bool { } } +// TableStatement does deep equals between the two objects. +func (cmp *Comparator) TableStatement(inA, inB TableStatement) bool { + if inA == nil && inB == nil { + return true + } + if inA == nil || inB == nil { + return false + } + switch a := inA.(type) { + case *Select: + b, ok := inB.(*Select) + if !ok { + return false + } + return cmp.RefOfSelect(a, b) + case *Union: + b, ok := inB.(*Union) + if !ok { + return false + } + return cmp.RefOfUnion(a, b) + case *ValuesStatement: + b, ok := inB.(*ValuesStatement) + if !ok { + return false + } + return cmp.RefOfValuesStatement(a, b) + default: + // this should never happen + return false + } +} + // SliceOfRefOfColumnDefinition does deep equals between the two objects. func (cmp *Comparator) SliceOfRefOfColumnDefinition(a, b []*ColumnDefinition) bool { if len(a) != len(b) { diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go index dff17911d8e..37539c450b2 100644 --- a/go/vt/sqlparser/ast_format.go +++ b/go/vt/sqlparser/ast_format.go @@ -120,6 +120,26 @@ func (node *VStream) Format(buf *TrackedBuffer) { node.Comments, node.SelectExpr, node.Table) } +// Format formats the node. +func (node *ValuesStatement) Format(buf *TrackedBuffer) { + if node.With != nil { + buf.astPrintf(node, "%v", node.With) + } + buf.astPrintf(node, "values %v", node.Comments) + if node.ListArg != "" { + buf.astPrintf(node, "%v", node.ListArg) + } else { + for i, row := range node.Rows { + buf.astPrintf(node, "row%v", row) + if i < len(node.Rows)-1 { + buf.WriteString(", ") + } + } + } + buf.astPrintf(node, "%v%v", + node.Order, node.Limit) +} + // Format formats the node. func (node *Stream) Format(buf *TrackedBuffer) { buf.astPrintf(node, "stream %v%v from %v", diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go index 9855c70a21d..7a818faf0c0 100644 --- a/go/vt/sqlparser/ast_format_fast.go +++ b/go/vt/sqlparser/ast_format_fast.go @@ -141,6 +141,30 @@ func (node *VStream) FormatFast(buf *TrackedBuffer) { } +// FormatFast formats the node. +func (node *ValuesStatement) FormatFast(buf *TrackedBuffer) { + if node.With != nil { + node.With.FormatFast(buf) + } + buf.WriteString("values ") + node.Comments.FormatFast(buf) + if node.ListArg != "" { + node.ListArg.FormatFast(buf) + } else { + for i, row := range node.Rows { + buf.WriteString("row") + row.FormatFast(buf) + if i < len(node.Rows)-1 { + buf.WriteString(", ") + } + } + } + + node.Order.FormatFast(buf) + node.Limit.FormatFast(buf) + +} + // FormatFast formats the node. func (node *Stream) FormatFast(buf *TrackedBuffer) { buf.WriteString("stream ") diff --git a/go/vt/sqlparser/ast_funcs.go b/go/vt/sqlparser/ast_funcs.go index 2891d532d16..e28c17a4745 100644 --- a/go/vt/sqlparser/ast_funcs.go +++ b/go/vt/sqlparser/ast_funcs.go @@ -640,6 +640,26 @@ func parseBindVariable(yylex yyLexer, bvar string) *Argument { return NewArgument(bvar) } +func setIntoIfPossible(lexer yyLexer, tblSubquery TableStatement, into *SelectInto) { + selStmt, ok := tblSubquery.(SelectStatement) + if !ok { + lexer.Error("VALUES does not support INTO") + return + } + + selStmt.SetInto(into) +} + +func setLockIfPossible(lexer yyLexer, tblSubquery TableStatement, lock Lock) { + selStmt, ok := tblSubquery.(SelectStatement) + if !ok { + lexer.Error("VALUES does not support LOCK") + return + } + + selStmt.SetLock(lock) +} + func NewTypedArgument(in string, t sqltypes.Type) *Argument { return &Argument{Name: in, Type: t} } @@ -755,12 +775,12 @@ func NewTableNameWithQualifier(name, qualifier string) TableName { } // NewSubquery makes a new Subquery -func NewSubquery(selectStatement SelectStatement) *Subquery { +func NewSubquery(selectStatement TableStatement) *Subquery { return &Subquery{Select: selectStatement} } // NewDerivedTable makes a new DerivedTable -func NewDerivedTable(lateral bool, selectStatement SelectStatement) *DerivedTable { +func NewDerivedTable(lateral bool, selectStatement TableStatement) *DerivedTable { return &DerivedTable{ Lateral: lateral, Select: selectStatement, @@ -1391,7 +1411,7 @@ func (node *Union) GetParsedComments() *ParsedComments { return node.Left.GetParsedComments() } -func requiresParen(stmt SelectStatement) bool { +func requiresParen(stmt TableStatement) bool { switch node := stmt.(type) { case *Union: return len(node.OrderBy) != 0 || node.Lock != 0 || node.Into != nil || node.Limit != nil @@ -1402,10 +1422,6 @@ func requiresParen(stmt SelectStatement) bool { return false } -func setLockInSelect(stmt SelectStatement, lock Lock) { - stmt.SetLock(lock) -} - // ToString returns the string associated with the DDLAction Enum func (action DDLAction) ToString() string { switch action { @@ -2345,26 +2361,30 @@ func setFuncArgs(aggr AggrFunc, exprs Exprs, name string) error { } // GetFirstSelect gets the first select statement -func GetFirstSelect(selStmt SelectStatement) *Select { +func GetFirstSelect(selStmt TableStatement) (*Select, error) { if selStmt == nil { - return nil + return nil, nil } switch node := selStmt.(type) { case *Select: - return node + return node, nil + case *ValuesStatement: + return nil, vterrors.VT12001("first table_reference as VALUES") case *Union: return GetFirstSelect(node.Left) } - panic("[BUG]: unknown type for SelectStatement") + return nil, vterrors.VT13001(fmt.Sprintf("unknown type for SelectStatement: %T", selStmt)) } // GetAllSelects gets all the select statement s -func GetAllSelects(selStmt SelectStatement) []*Select { +func GetAllSelects(selStmt TableStatement) []TableStatement { switch node := selStmt.(type) { case *Select: - return []*Select{node} + return []TableStatement{node} case *Union: return append(GetAllSelects(node.Left), GetAllSelects(node.Right)...) + case *ValuesStatement: + return []TableStatement{node} } panic("[BUG]: unknown type for SelectStatement") } @@ -2409,48 +2429,38 @@ func RemoveKeyspaceInCol(in SQLNode) { }, in) } -// RemoveKeyspaceInTables removes the Qualifier on all TableNames in the AST -func RemoveKeyspaceInTables(in SQLNode) { - // Walk will only return an error if we return an error from the inner func. safe to ignore here - Rewrite(in, nil, func(cursor *Cursor) bool { - if tbl, ok := cursor.Node().(TableName); ok && tbl.Qualifier.NotEmpty() { - tbl.Qualifier = NewIdentifierCS("") - cursor.Replace(tbl) - } - - return true +// RemoveKeyspace removes the keyspace qualifier from all ColName and TableName +func RemoveKeyspace(in SQLNode) { + removeKeyspace(in, func(_ string) bool { + return true // Always remove }) } -// RemoveKeyspace removes the Qualifier.Qualifier on all ColNames and Qualifier on all TableNames in the AST -func RemoveKeyspace(in SQLNode) { - Rewrite(in, nil, func(cursor *Cursor) bool { - switch expr := cursor.Node().(type) { - case *ColName: - if expr.Qualifier.Qualifier.NotEmpty() { - expr.Qualifier.Qualifier = NewIdentifierCS("") - } - case TableName: - if expr.Qualifier.NotEmpty() { - expr.Qualifier = NewIdentifierCS("") - cursor.Replace(expr) - } - } - return true +// RemoveSpecificKeyspace removes the keyspace qualifier from all ColName and TableName +// when it matches the keyspace provided +func RemoveSpecificKeyspace(in SQLNode, keyspace string) { + removeKeyspace(in, func(qualifier string) bool { + return qualifier == keyspace // Remove only if it matches the provided keyspace }) } -// RemoveKeyspaceIgnoreSysSchema removes the Qualifier.Qualifier on all ColNames and Qualifier on all TableNames in the AST -// except for the system schema. +// RemoveKeyspaceIgnoreSysSchema removes the keyspace qualifier from all ColName and TableName +// except for the system schema qualifier. func RemoveKeyspaceIgnoreSysSchema(in SQLNode) { + removeKeyspace(in, func(qualifier string) bool { + return qualifier != "" && !SystemSchema(qualifier) // Remove if it's not empty and not a system schema + }) +} + +func removeKeyspace(in SQLNode, shouldRemove func(qualifier string) bool) { Rewrite(in, nil, func(cursor *Cursor) bool { switch expr := cursor.Node().(type) { case *ColName: - if expr.Qualifier.Qualifier.NotEmpty() && !SystemSchema(expr.Qualifier.Qualifier.String()) { + if shouldRemove(expr.Qualifier.Qualifier.String()) { expr.Qualifier.Qualifier = NewIdentifierCS("") } case TableName: - if expr.Qualifier.NotEmpty() && !SystemSchema(expr.Qualifier.String()) { + if shouldRemove(expr.Qualifier.String()) { expr.Qualifier = NewIdentifierCS("") cursor.Replace(expr) } @@ -2772,7 +2782,7 @@ func MakeColumns(colNames ...string) Columns { return cols } -func VisitAllSelects(in SelectStatement, f func(p *Select, idx int) error) error { +func VisitAllSelects(in TableStatement, f func(p *Select, idx int) error) error { v := visitor{} return v.visitAllSelects(in, f) } @@ -2781,7 +2791,7 @@ type visitor struct { idx int } -func (v *visitor) visitAllSelects(in SelectStatement, f func(p *Select, idx int) error) error { +func (v *visitor) visitAllSelects(in TableStatement, f func(p *Select, idx int) error) error { switch sel := in.(type) { case *Select: err := f(sel, v.idx) @@ -2875,6 +2885,30 @@ func (node *Update) SetLimit(limit *Limit) { node.Limit = limit } +func (node *Update) GetOrderBy() OrderBy { + return node.OrderBy +} + +func (node *Update) SetOrderBy(by OrderBy) { + node.OrderBy = by +} + +func (node *Update) GetLimit() *Limit { + return node.Limit +} + +func (node *Delete) GetOrderBy() OrderBy { + return node.OrderBy +} + +func (node *Delete) SetOrderBy(by OrderBy) { + node.OrderBy = by +} + +func (node *Delete) GetLimit() *Limit { + return node.Limit +} + func (node *Delete) AddOrder(order *Order) { node.OrderBy = append(node.OrderBy, order) } @@ -2981,3 +3015,50 @@ func ExtractAllTables(stmt Statement) []string { }, stmt) return tables } + +var _ TableStatement = (*ValuesStatement)(nil) + +func (node *ValuesStatement) iTableStatement() {} + +func (node *ValuesStatement) SetWith(with *With) { + node.With = with +} + +func (node *ValuesStatement) GetOrderBy() OrderBy { + return node.Order +} + +func (node *ValuesStatement) SetOrderBy(by OrderBy) { + node.Order = by +} + +func (node *ValuesStatement) GetLimit() *Limit { + return node.Limit +} + +func (node *ValuesStatement) AddOrder(order *Order) { + node.Order = append(node.Order, order) +} + +func (node *ValuesStatement) SetLimit(limit *Limit) { + node.Limit = limit +} + +func (node *ValuesStatement) GetColumnCount() int { + if len(node.Rows) > 0 { + return len(node.Rows[0]) + } + panic("no columns available") // TODO: we need a better solution than a panic +} + +func (node *ValuesStatement) GetColumns() (result SelectExprs) { + columnCount := node.GetColumnCount() + for i := range columnCount { + result = append(result, &AliasedExpr{Expr: NewColName(fmt.Sprintf("column_%d", i))}) + } + panic("no columns available") // TODO: we need a better solution than a panic +} + +func (node *ValuesStatement) SetComments(comments Comments) {} + +func (node *ValuesStatement) GetParsedComments() *ParsedComments { return nil } diff --git a/go/vt/sqlparser/ast_funcs_test.go b/go/vt/sqlparser/ast_funcs_test.go index a3b744729f4..009f3e6cc15 100644 --- a/go/vt/sqlparser/ast_funcs_test.go +++ b/go/vt/sqlparser/ast_funcs_test.go @@ -219,3 +219,28 @@ func TestExtractTables(t *testing.T) { }) } } + +// TestRemoveKeyspace tests the RemoveKeyspaceIgnoreSysSchema function. +// It removes all the keyspace except system schema. +func TestRemoveKeyspaceIgnoreSysSchema(t *testing.T) { + stmt, err := NewTestParser().Parse("select 1 from uks.unsharded join information_schema.tables") + require.NoError(t, err) + RemoveKeyspaceIgnoreSysSchema(stmt) + + require.Equal(t, "select 1 from unsharded join information_schema.`tables`", String(stmt)) +} + +// TestRemoveSpecificKeyspace tests the RemoveSpecificKeyspace function. +// It removes the specific keyspace from the database qualifier. +func TestRemoveSpecificKeyspace(t *testing.T) { + stmt, err := NewTestParser().Parse("select 1 from uks.unsharded") + require.NoError(t, err) + + // does not match + RemoveSpecificKeyspace(stmt, "ks2") + require.Equal(t, "select 1 from uks.unsharded", String(stmt)) + + // match + RemoveSpecificKeyspace(stmt, "uks") + require.Equal(t, "select 1 from unsharded", String(stmt)) +} diff --git a/go/vt/sqlparser/ast_rewrite.go b/go/vt/sqlparser/ast_rewrite.go index e65b243d7e1..690b381b082 100644 --- a/go/vt/sqlparser/ast_rewrite.go +++ b/go/vt/sqlparser/ast_rewrite.go @@ -534,6 +534,8 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl return a.rewriteValues(parent, node, replacer) case *ValuesFuncExpr: return a.rewriteRefOfValuesFuncExpr(parent, node, replacer) + case *ValuesStatement: + return a.rewriteRefOfValuesStatement(parent, node, replacer) case *VarPop: return a.rewriteRefOfVarPop(parent, node, replacer) case *VarSamp: @@ -983,8 +985,8 @@ func (a *application) rewriteRefOfAlterView(parent SQLNode, node *AlterView, rep }) { return false } - if !a.rewriteSelectStatement(node, node.Select, func(newNode, parent SQLNode) { - parent.(*AlterView).Select = newNode.(SelectStatement) + if !a.rewriteTableStatement(node, node.Select, func(newNode, parent SQLNode) { + parent.(*AlterView).Select = newNode.(TableStatement) }) { return false } @@ -1969,8 +1971,8 @@ func (a *application) rewriteRefOfCommonTableExpr(parent SQLNode, node *CommonTa }) { return false } - if !a.rewriteSelectStatement(node, node.Subquery, func(newNode, parent SQLNode) { - parent.(*CommonTableExpr).Subquery = newNode.(SelectStatement) + if !a.rewriteTableStatement(node, node.Subquery, func(newNode, parent SQLNode) { + parent.(*CommonTableExpr).Subquery = newNode.(TableStatement) }) { return false } @@ -2321,8 +2323,8 @@ func (a *application) rewriteRefOfCreateView(parent SQLNode, node *CreateView, r }) { return false } - if !a.rewriteSelectStatement(node, node.Select, func(newNode, parent SQLNode) { - parent.(*CreateView).Select = newNode.(SelectStatement) + if !a.rewriteTableStatement(node, node.Select, func(newNode, parent SQLNode) { + parent.(*CreateView).Select = newNode.(TableStatement) }) { return false } @@ -2536,8 +2538,8 @@ func (a *application) rewriteRefOfDerivedTable(parent SQLNode, node *DerivedTabl return true } } - if !a.rewriteSelectStatement(node, node.Select, func(newNode, parent SQLNode) { - parent.(*DerivedTable).Select = newNode.(SelectStatement) + if !a.rewriteTableStatement(node, node.Select, func(newNode, parent SQLNode) { + parent.(*DerivedTable).Select = newNode.(TableStatement) }) { return false } @@ -8337,8 +8339,8 @@ func (a *application) rewriteRefOfSubquery(parent SQLNode, node *Subquery, repla return true } } - if !a.rewriteSelectStatement(node, node.Select, func(newNode, parent SQLNode) { - parent.(*Subquery).Select = newNode.(SelectStatement) + if !a.rewriteTableStatement(node, node.Select, func(newNode, parent SQLNode) { + parent.(*Subquery).Select = newNode.(TableStatement) }) { return false } @@ -8797,13 +8799,13 @@ func (a *application) rewriteRefOfUnion(parent SQLNode, node *Union, replacer re }) { return false } - if !a.rewriteSelectStatement(node, node.Left, func(newNode, parent SQLNode) { - parent.(*Union).Left = newNode.(SelectStatement) + if !a.rewriteTableStatement(node, node.Left, func(newNode, parent SQLNode) { + parent.(*Union).Left = newNode.(TableStatement) }) { return false } - if !a.rewriteSelectStatement(node, node.Right, func(newNode, parent SQLNode) { - parent.(*Union).Right = newNode.(SelectStatement) + if !a.rewriteTableStatement(node, node.Right, func(newNode, parent SQLNode) { + parent.(*Union).Right = newNode.(TableStatement) }) { return false } @@ -9264,6 +9266,58 @@ func (a *application) rewriteRefOfValuesFuncExpr(parent SQLNode, node *ValuesFun } return true } +func (a *application) rewriteRefOfValuesStatement(parent SQLNode, node *ValuesStatement, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.pre(&a.cur) { + return true + } + } + if !a.rewriteRefOfWith(node, node.With, func(newNode, parent SQLNode) { + parent.(*ValuesStatement).With = newNode.(*With) + }) { + return false + } + if !a.rewriteValues(node, node.Rows, func(newNode, parent SQLNode) { + parent.(*ValuesStatement).Rows = newNode.(Values) + }) { + return false + } + if !a.rewriteListArg(node, node.ListArg, func(newNode, parent SQLNode) { + parent.(*ValuesStatement).ListArg = newNode.(ListArg) + }) { + return false + } + if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) { + parent.(*ValuesStatement).Comments = newNode.(*ParsedComments) + }) { + return false + } + if !a.rewriteOrderBy(node, node.Order, func(newNode, parent SQLNode) { + parent.(*ValuesStatement).Order = newNode.(OrderBy) + }) { + return false + } + if !a.rewriteRefOfLimit(node, node.Limit, func(newNode, parent SQLNode) { + parent.(*ValuesStatement).Limit = newNode.(*Limit) + }) { + return false + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} func (a *application) rewriteRefOfVarPop(parent SQLNode, node *VarPop, replacer replacerFunc) bool { if node == nil { return true @@ -10358,6 +10412,8 @@ func (a *application) rewriteInsertRows(parent SQLNode, node InsertRows, replace return a.rewriteRefOfUnion(parent, node, replacer) case Values: return a.rewriteValues(parent, node, replacer) + case *ValuesStatement: + return a.rewriteRefOfValuesStatement(parent, node, replacer) default: // this should never happen return true @@ -10528,6 +10584,8 @@ func (a *application) rewriteStatement(parent SQLNode, node Statement, replacer return a.rewriteRefOfVExplainStmt(parent, node, replacer) case *VStream: return a.rewriteRefOfVStream(parent, node, replacer) + case *ValuesStatement: + return a.rewriteRefOfValuesStatement(parent, node, replacer) default: // this should never happen return true @@ -10551,6 +10609,22 @@ func (a *application) rewriteTableExpr(parent SQLNode, node TableExpr, replacer return true } } +func (a *application) rewriteTableStatement(parent SQLNode, node TableStatement, replacer replacerFunc) bool { + if node == nil { + return true + } + switch node := node.(type) { + case *Select: + return a.rewriteRefOfSelect(parent, node, replacer) + case *Union: + return a.rewriteRefOfUnion(parent, node, replacer) + case *ValuesStatement: + return a.rewriteRefOfValuesStatement(parent, node, replacer) + default: + // this should never happen + return true + } +} func (a *application) rewriteAlgorithmValue(parent SQLNode, node AlgorithmValue, replacer replacerFunc) bool { if a.pre != nil { a.cur.replacer = replacer diff --git a/go/vt/sqlparser/ast_rewriting.go b/go/vt/sqlparser/ast_rewriting.go index ef46b124875..05e7e290fc1 100644 --- a/go/vt/sqlparser/ast_rewriting.go +++ b/go/vt/sqlparser/ast_rewriting.go @@ -38,7 +38,7 @@ type RewriteASTResult struct { } type VSchemaViews interface { - FindView(name TableName) SelectStatement + FindView(name TableName) TableStatement } // PrepareAST will normalize the query @@ -257,7 +257,7 @@ func (er *astRewriter) rewriteAliasedTable(cursor *Cursor, node *AliasedTableExp } // Aha! It's a view. Let's replace it with a derived table - node.Expr = &DerivedTable{Select: CloneSelectStatement(view)} + node.Expr = &DerivedTable{Select: Clone(view)} // TODO: this is a bit hacky. We want to update the schema def so it contains new types if node.As.IsEmpty() { node.As = NewIdentifierCS(tblName) } diff --git a/go/vt/sqlparser/ast_rewriting_test.go b/go/vt/sqlparser/ast_rewriting_test.go index 3ad9a5298c4..8b3e3d44c54 100644 --- a/go/vt/sqlparser/ast_rewriting_test.go +++ b/go/vt/sqlparser/ast_rewriting_test.go @@ -388,7 +388,7 @@ func TestRewrites(in *testing.T) { type fakeViews struct{} -func (*fakeViews) FindView(name TableName) SelectStatement { +func (*fakeViews) FindView(name TableName) TableStatement { if name.Name.String() != "user_details" { return nil } @@ -397,7 +397,7 @@ func (*fakeViews) FindView(name TableName) SelectStatement { if err != nil { return nil } - return statement.(SelectStatement) + return statement.(TableStatement) } func TestRewritesWithSetVarComment(in *testing.T) { diff --git a/go/vt/sqlparser/ast_test.go b/go/vt/sqlparser/ast_test.go index c1484df7cc4..f01b47cbd7b 100644 --- a/go/vt/sqlparser/ast_test.go +++ b/go/vt/sqlparser/ast_test.go @@ -917,11 +917,3 @@ func TestCloneComments(t *testing.T) { assert.Equal(t, "b", val) } } - -func TestRemoveKeyspace(t *testing.T) { - stmt, err := NewTestParser().Parse("select 1 from uks.unsharded") - require.NoError(t, err) - RemoveKeyspaceIgnoreSysSchema(stmt) - - require.Equal(t, "select 1 from unsharded", String(stmt)) -} diff --git a/go/vt/sqlparser/ast_visit.go b/go/vt/sqlparser/ast_visit.go index 439d0bffeec..a7fbbe02118 100644 --- a/go/vt/sqlparser/ast_visit.go +++ b/go/vt/sqlparser/ast_visit.go @@ -534,6 +534,8 @@ func VisitSQLNode(in SQLNode, f Visit) error { return VisitValues(in, f) case *ValuesFuncExpr: return VisitRefOfValuesFuncExpr(in, f) + case *ValuesStatement: + return VisitRefOfValuesStatement(in, f) case *VarPop: return VisitRefOfVarPop(in, f) case *VarSamp: @@ -764,7 +766,7 @@ func VisitRefOfAlterView(in *AlterView, f Visit) error { if err := VisitColumns(in.Columns, f); err != nil { return err } - if err := VisitSelectStatement(in.Select, f); err != nil { + if err := VisitTableStatement(in.Select, f); err != nil { return err } if err := VisitRefOfParsedComments(in.Comments, f); err != nil { @@ -1175,7 +1177,7 @@ func VisitRefOfCommonTableExpr(in *CommonTableExpr, f Visit) error { if err := VisitColumns(in.Columns, f); err != nil { return err } - if err := VisitSelectStatement(in.Subquery, f); err != nil { + if err := VisitTableStatement(in.Subquery, f); err != nil { return err } return nil @@ -1328,7 +1330,7 @@ func VisitRefOfCreateView(in *CreateView, f Visit) error { if err := VisitColumns(in.Columns, f); err != nil { return err } - if err := VisitSelectStatement(in.Select, f); err != nil { + if err := VisitTableStatement(in.Select, f); err != nil { return err } if err := VisitRefOfParsedComments(in.Comments, f); err != nil { @@ -1423,7 +1425,7 @@ func VisitRefOfDerivedTable(in *DerivedTable, f Visit) error { if cont, err := f(in); err != nil || !cont { return err } - if err := VisitSelectStatement(in.Select, f); err != nil { + if err := VisitTableStatement(in.Select, f); err != nil { return err } return nil @@ -3890,7 +3892,7 @@ func VisitRefOfSubquery(in *Subquery, f Visit) error { if cont, err := f(in); err != nil || !cont { return err } - if err := VisitSelectStatement(in.Select, f); err != nil { + if err := VisitTableStatement(in.Select, f); err != nil { return err } return nil @@ -4075,10 +4077,10 @@ func VisitRefOfUnion(in *Union, f Visit) error { if err := VisitRefOfWith(in.With, f); err != nil { return err } - if err := VisitSelectStatement(in.Left, f); err != nil { + if err := VisitTableStatement(in.Left, f); err != nil { return err } - if err := VisitSelectStatement(in.Right, f); err != nil { + if err := VisitTableStatement(in.Right, f); err != nil { return err } if err := VisitOrderBy(in.OrderBy, f); err != nil { @@ -4280,6 +4282,33 @@ func VisitRefOfValuesFuncExpr(in *ValuesFuncExpr, f Visit) error { } return nil } +func VisitRefOfValuesStatement(in *ValuesStatement, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitRefOfWith(in.With, f); err != nil { + return err + } + if err := VisitValues(in.Rows, f); err != nil { + return err + } + if err := VisitListArg(in.ListArg, f); err != nil { + return err + } + if err := VisitRefOfParsedComments(in.Comments, f); err != nil { + return err + } + if err := VisitOrderBy(in.Order, f); err != nil { + return err + } + if err := VisitRefOfLimit(in.Limit, f); err != nil { + return err + } + return nil +} func VisitRefOfVarPop(in *VarPop, f Visit) error { if in == nil { return nil @@ -5098,6 +5127,8 @@ func VisitInsertRows(in InsertRows, f Visit) error { return VisitRefOfUnion(in, f) case Values: return VisitValues(in, f) + case *ValuesStatement: + return VisitRefOfValuesStatement(in, f) default: // this should never happen return nil @@ -5268,6 +5299,8 @@ func VisitStatement(in Statement, f Visit) error { return VisitRefOfVExplainStmt(in, f) case *VStream: return VisitRefOfVStream(in, f) + case *ValuesStatement: + return VisitRefOfValuesStatement(in, f) default: // this should never happen return nil @@ -5291,6 +5324,22 @@ func VisitTableExpr(in TableExpr, f Visit) error { return nil } } +func VisitTableStatement(in TableStatement, f Visit) error { + if in == nil { + return nil + } + switch in := in.(type) { + case *Select: + return VisitRefOfSelect(in, f) + case *Union: + return VisitRefOfUnion(in, f) + case *ValuesStatement: + return VisitRefOfValuesStatement(in, f) + default: + // this should never happen + return nil + } +} func VisitAlgorithmValue(in AlgorithmValue, f Visit) error { _, err := f(in) return err diff --git a/go/vt/sqlparser/cached_size.go b/go/vt/sqlparser/cached_size.go index 524291a03b4..3aac4ac1edd 100644 --- a/go/vt/sqlparser/cached_size.go +++ b/go/vt/sqlparser/cached_size.go @@ -272,7 +272,7 @@ func (cached *AlterView) CachedSize(alloc bool) int64 { size += elem.CachedSize(false) } } - // field Select vitess.io/vitess/go/vt/sqlparser.SelectStatement + // field Select vitess.io/vitess/go/vt/sqlparser.TableStatement if cc, ok := cached.Select.(cachedObject); ok { size += cc.CachedSize(true) } @@ -849,7 +849,7 @@ func (cached *CommonTableExpr) CachedSize(alloc bool) int64 { size += elem.CachedSize(false) } } - // field Subquery vitess.io/vitess/go/vt/sqlparser.SelectStatement + // field Subquery vitess.io/vitess/go/vt/sqlparser.TableStatement if cc, ok := cached.Subquery.(cachedObject); ok { size += cc.CachedSize(true) } @@ -1038,7 +1038,7 @@ func (cached *CreateView) CachedSize(alloc bool) int64 { size += elem.CachedSize(false) } } - // field Select vitess.io/vitess/go/vt/sqlparser.SelectStatement + // field Select vitess.io/vitess/go/vt/sqlparser.TableStatement if cc, ok := cached.Select.(cachedObject); ok { size += cc.CachedSize(true) } @@ -1168,7 +1168,7 @@ func (cached *DerivedTable) CachedSize(alloc bool) int64 { if alloc { size += int64(24) } - // field Select vitess.io/vitess/go/vt/sqlparser.SelectStatement + // field Select vitess.io/vitess/go/vt/sqlparser.TableStatement if cc, ok := cached.Select.(cachedObject); ok { size += cc.CachedSize(true) } @@ -4103,7 +4103,7 @@ func (cached *Subquery) CachedSize(alloc bool) int64 { if alloc { size += int64(16) } - // field Select vitess.io/vitess/go/vt/sqlparser.SelectStatement + // field Select vitess.io/vitess/go/vt/sqlparser.TableStatement if cc, ok := cached.Select.(cachedObject); ok { size += cc.CachedSize(true) } @@ -4320,11 +4320,11 @@ func (cached *Union) CachedSize(alloc bool) int64 { } // field With *vitess.io/vitess/go/vt/sqlparser.With size += cached.With.CachedSize(true) - // field Left vitess.io/vitess/go/vt/sqlparser.SelectStatement + // field Left vitess.io/vitess/go/vt/sqlparser.TableStatement if cc, ok := cached.Left.(cachedObject); ok { size += cc.CachedSize(true) } - // field Right vitess.io/vitess/go/vt/sqlparser.SelectStatement + // field Right vitess.io/vitess/go/vt/sqlparser.TableStatement if cc, ok := cached.Right.(cachedObject); ok { size += cc.CachedSize(true) } @@ -4492,6 +4492,45 @@ func (cached *ValuesFuncExpr) CachedSize(alloc bool) int64 { size += cached.Name.CachedSize(true) return size } +func (cached *ValuesStatement) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(96) + } + // field With *vitess.io/vitess/go/vt/sqlparser.With + size += cached.With.CachedSize(true) + // field Rows vitess.io/vitess/go/vt/sqlparser.Values + { + size += hack.RuntimeAllocSize(int64(cap(cached.Rows)) * int64(24)) + for _, elem := range cached.Rows { + { + size += hack.RuntimeAllocSize(int64(cap(elem)) * int64(16)) + for _, elem := range elem { + if cc, ok := elem.(cachedObject); ok { + size += cc.CachedSize(true) + } + } + } + } + } + // field ListArg vitess.io/vitess/go/vt/sqlparser.ListArg + size += hack.RuntimeAllocSize(int64(len(cached.ListArg))) + // field Comments *vitess.io/vitess/go/vt/sqlparser.ParsedComments + size += cached.Comments.CachedSize(true) + // field Order vitess.io/vitess/go/vt/sqlparser.OrderBy + { + size += hack.RuntimeAllocSize(int64(cap(cached.Order)) * int64(8)) + for _, elem := range cached.Order { + size += elem.CachedSize(true) + } + } + // field Limit *vitess.io/vitess/go/vt/sqlparser.Limit + size += cached.Limit.CachedSize(true) + return size +} func (cached *VarPop) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) diff --git a/go/vt/sqlparser/keywords.go b/go/vt/sqlparser/keywords.go index 5c1b881df30..2f1a220066d 100644 --- a/go/vt/sqlparser/keywords.go +++ b/go/vt/sqlparser/keywords.go @@ -430,6 +430,7 @@ var keywords = []keyword{ {"min", MIN}, {"manifest", MANIFEST}, {"master_bind", UNUSED}, + {"manual", MANUAL}, {"match", MATCH}, {"max", MAX}, {"max_rows", MAX_ROWS}, @@ -489,6 +490,7 @@ var keywords = []keyword{ {"outer", OUTER}, {"outfile", OUTFILE}, {"over", OVER}, + {"parallel", PARALLEL}, {"overwrite", OVERWRITE}, {"pack_keys", PACK_KEYS}, {"parser", PARSER}, @@ -515,6 +517,7 @@ var keywords = []keyword{ {"procedure", PROCEDURE}, {"ps_current_thread_id", PS_CURRENT_THREAD_ID}, {"ps_thread_id", PS_THREAD_ID}, + {"qualify", QUALIFY}, {"queries", QUERIES}, {"query", QUERY}, {"range", RANGE}, @@ -696,6 +699,7 @@ var keywords = []keyword{ {"system", UNUSED}, {"table", TABLE}, {"tables", TABLES}, + {"tablesample", TABLESAMPLE}, {"tablespace", TABLESPACE}, {"temporary", TEMPORARY}, {"temptable", TEMPTABLE}, diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index d3d5fd469e7..5e075d51baa 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -3868,7 +3868,22 @@ var ( }, { input: `select * from tbl where foo > any (select foo from tbl2)`, }, { - input: `select * from tbl where foo > all (select foo from tbl2)`}} + input: `select * from tbl where foo > all (select foo from tbl2)`, + }, { + input: "insert into t1(a1) values row('a'), row('b')", + }, { + input: "insert into t1(a1) values ('a'), ('b')", + }, { + input: "values row('a'), row('b')", + }, { + input: "values /*my comment*/ row('a'), row('b')", + }, { + input: `with x as (select * from t1 limit 1) values ROW('a1', (select x.a1 from x))`, + output: "with x as (select * from t1 limit 1) values row('a1', (select x.a1 from x))", + }, { + input: "SELECT 1,2 UNION SELECT * from (VALUES ROW(10,15)) t", + output: "select 1, 2 from dual union select * from (values row(10, 15)) as t", + }} ) func TestValid(t *testing.T) { @@ -3944,6 +3959,12 @@ func TestInvalid(t *testing.T) { }, { input: "/*!*/", err: "Query was empty", + }, { + input: "values row(1) into outfile s3 'out_file_name'", + err: "VALUES does not support INTO at position 46", + }, { + input: "values row(1) lock in share mode", + err: "VALUES does not support LOCK at position 33", }, { input: "select /* union with limit on lhs */ 1 from t limit 1 union select 1 from t", err: "syntax error at position 60 near 'union'", @@ -6204,6 +6225,12 @@ var ( }, { input: "create database test_db default encryption @a", output: "syntax error at position 46 near 'a'", + }, { + input: "select * from t1 where a1 in row('a')", + output: "syntax error at position 33 near 'row'", + }, { + input: "insert into t1 (a1) values row('a'), ('b')", + output: "syntax error at position 39", }} ) diff --git a/go/vt/sqlparser/parsed_query.go b/go/vt/sqlparser/parsed_query.go index 491e7400988..0e3f9801610 100644 --- a/go/vt/sqlparser/parsed_query.go +++ b/go/vt/sqlparser/parsed_query.go @@ -101,6 +101,14 @@ func EncodeValue(buf *strings.Builder, value *querypb.BindVariable) { sqltypes.ProtoToValue(bv).EncodeSQLStringBuilder(buf) } buf.WriteByte(')') + case querypb.Type_ROW_TUPLE: + for i, bv := range value.Values { + if i != 0 { + buf.WriteString(", ") + } + buf.WriteString("row") + sqltypes.ProtoToValue(bv).EncodeSQLStringBuilder(buf) + } case querypb.Type_RAW: v, _ := sqltypes.BindVariableToValue(value) buf.Write(v.Raw()) @@ -123,7 +131,9 @@ func FetchBindVar(name string, bindVariables map[string]*querypb.BindVariable) ( } if isList { - if supplied.Type != querypb.Type_TUPLE { + switch supplied.Type { + case querypb.Type_TUPLE, querypb.Type_ROW_TUPLE: + default: return nil, false, fmt.Errorf("unexpected list arg type (%v) for key %s", supplied.Type, name) } if len(supplied.Values) == 0 { diff --git a/go/vt/sqlparser/parsed_query_test.go b/go/vt/sqlparser/parsed_query_test.go index 1458a3e6527..26b9855b0f0 100644 --- a/go/vt/sqlparser/parsed_query_test.go +++ b/go/vt/sqlparser/parsed_query_test.go @@ -103,6 +103,13 @@ func TestGenerateQuery(t *testing.T) { "vals": sqltypes.Int64BindVariable(1), }, output: "unexpected list arg type (INT64) for key vals", + }, { + desc: "row tuple", + query: "select 1 from (values ::a) dt", + bindVars: map[string]*querypb.BindVariable{ + "a": createRowTupleBV(), + }, + output: "select 1 from (values row('a', 1), row('b', 2)) as dt", }, { desc: "list bind var for non-list", query: "select * from a where id = :vals", @@ -302,3 +309,12 @@ func TestCastBindVars(t *testing.T) { }) } } + +func createRowTupleBV() *querypb.BindVariable { + v1 := sqltypes.TestTuple(sqltypes.NewVarChar("a"), sqltypes.NewInt64(1)) + v2 := sqltypes.TestTuple(sqltypes.NewVarChar("b"), sqltypes.NewInt64(2)) + return &querypb.BindVariable{ + Type: querypb.Type_ROW_TUPLE, + Values: append([]*querypb.Value{sqltypes.ValueToProto(v1)}, sqltypes.ValueToProto(v2)), + } +} diff --git a/go/vt/sqlparser/parser.go b/go/vt/sqlparser/parser.go index d4948396ae5..8af0018db2a 100644 --- a/go/vt/sqlparser/parser.go +++ b/go/vt/sqlparser/parser.go @@ -77,7 +77,7 @@ func yyParsePooled(yylex yyLexer) int { // error is ignored and the DDL is returned anyway. func (p *Parser) Parse2(sql string) (Statement, BindVars, error) { tokenizer := p.NewStringTokenizer(sql) - if yyParsePooled(tokenizer) != 0 { + if yyParsePooled(tokenizer) != 0 || tokenizer.LastError != nil { if tokenizer.partialDDL != nil { if typ, val := tokenizer.Scan(); typ != 0 { return nil, nil, fmt.Errorf("extra characters encountered after end of DDL: '%s'", val) diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index befd9b44c3b..4569fbc7686 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -705,67 +705,71 @@ const UNBOUNDED = 58012 const VCPU = 58013 const VISIBLE = 58014 const RETURNING = 58015 -const FORMAT_BYTES = 58016 -const FORMAT_PICO_TIME = 58017 -const PS_CURRENT_THREAD_ID = 58018 -const PS_THREAD_ID = 58019 -const GTID_SUBSET = 58020 -const GTID_SUBTRACT = 58021 -const WAIT_FOR_EXECUTED_GTID_SET = 58022 -const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 58023 -const FORMAT = 58024 -const TREE = 58025 -const VITESS = 58026 -const TRADITIONAL = 58027 -const VTEXPLAIN = 58028 -const VEXPLAIN = 58029 -const PLAN = 58030 -const LOCAL = 58031 -const LOW_PRIORITY = 58032 -const NO_WRITE_TO_BINLOG = 58033 -const LOGS = 58034 -const ERROR = 58035 -const GENERAL = 58036 -const HOSTS = 58037 -const OPTIMIZER_COSTS = 58038 -const USER_RESOURCES = 58039 -const SLOW = 58040 -const CHANNEL = 58041 -const RELAY = 58042 -const EXPORT = 58043 -const CURRENT = 58044 -const ROW = 58045 -const ROWS = 58046 -const AVG_ROW_LENGTH = 58047 -const CONNECTION = 58048 -const CHECKSUM = 58049 -const DELAY_KEY_WRITE = 58050 -const ENCRYPTION = 58051 -const ENGINE = 58052 -const INSERT_METHOD = 58053 -const MAX_ROWS = 58054 -const MIN_ROWS = 58055 -const PACK_KEYS = 58056 -const PASSWORD = 58057 -const FIXED = 58058 -const DYNAMIC = 58059 -const COMPRESSED = 58060 -const REDUNDANT = 58061 -const COMPACT = 58062 -const ROW_FORMAT = 58063 -const STATS_AUTO_RECALC = 58064 -const STATS_PERSISTENT = 58065 -const STATS_SAMPLE_PAGES = 58066 -const STORAGE = 58067 -const MEMORY = 58068 -const DISK = 58069 -const PARTITIONS = 58070 -const LINEAR = 58071 -const RANGE = 58072 -const LIST = 58073 -const SUBPARTITION = 58074 -const SUBPARTITIONS = 58075 -const HASH = 58076 +const MANUAL = 58016 +const PARALLEL = 58017 +const QUALIFY = 58018 +const TABLESAMPLE = 58019 +const FORMAT_BYTES = 58020 +const FORMAT_PICO_TIME = 58021 +const PS_CURRENT_THREAD_ID = 58022 +const PS_THREAD_ID = 58023 +const GTID_SUBSET = 58024 +const GTID_SUBTRACT = 58025 +const WAIT_FOR_EXECUTED_GTID_SET = 58026 +const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 58027 +const FORMAT = 58028 +const TREE = 58029 +const VITESS = 58030 +const TRADITIONAL = 58031 +const VTEXPLAIN = 58032 +const VEXPLAIN = 58033 +const PLAN = 58034 +const LOCAL = 58035 +const LOW_PRIORITY = 58036 +const NO_WRITE_TO_BINLOG = 58037 +const LOGS = 58038 +const ERROR = 58039 +const GENERAL = 58040 +const HOSTS = 58041 +const OPTIMIZER_COSTS = 58042 +const USER_RESOURCES = 58043 +const SLOW = 58044 +const CHANNEL = 58045 +const RELAY = 58046 +const EXPORT = 58047 +const CURRENT = 58048 +const ROW = 58049 +const ROWS = 58050 +const AVG_ROW_LENGTH = 58051 +const CONNECTION = 58052 +const CHECKSUM = 58053 +const DELAY_KEY_WRITE = 58054 +const ENCRYPTION = 58055 +const ENGINE = 58056 +const INSERT_METHOD = 58057 +const MAX_ROWS = 58058 +const MIN_ROWS = 58059 +const PACK_KEYS = 58060 +const PASSWORD = 58061 +const FIXED = 58062 +const DYNAMIC = 58063 +const COMPRESSED = 58064 +const REDUNDANT = 58065 +const COMPACT = 58066 +const ROW_FORMAT = 58067 +const STATS_AUTO_RECALC = 58068 +const STATS_PERSISTENT = 58069 +const STATS_SAMPLE_PAGES = 58070 +const STORAGE = 58071 +const MEMORY = 58072 +const DISK = 58073 +const PARTITIONS = 58074 +const LINEAR = 58075 +const RANGE = 58076 +const LIST = 58077 +const SUBPARTITION = 58078 +const SUBPARTITIONS = 58079 +const HASH = 58080 var yyToknames = [...]string{ "$end", @@ -1458,6 +1462,10 @@ var yyToknames = [...]string{ "VCPU", "VISIBLE", "RETURNING", + "MANUAL", + "PARALLEL", + "QUALIFY", + "TABLESAMPLE", "FORMAT_BYTES", "FORMAT_PICO_TIME", "PS_CURRENT_THREAD_ID", @@ -1538,249 +1546,548 @@ var yyExca = [...]int{ 17, 49, -2, 40, -1, 52, - 1, 157, - 752, 157, - -2, 165, + 1, 160, + 756, 160, + -2, 168, -1, 53, - 149, 165, - 191, 165, - 364, 165, - -2, 523, + 149, 168, + 191, 168, + 364, 168, + -2, 526, -1, 61, - 38, 784, - 254, 784, - 265, 784, - 300, 798, - 301, 798, - -2, 786, + 38, 787, + 254, 787, + 265, 787, + 300, 801, + 301, 801, + -2, 789, -1, 66, - 256, 822, - -2, 820, - -1, 122, - 253, 1621, - -2, 131, + 256, 825, + -2, 823, -1, 124, - 1, 158, - 752, 158, - -2, 165, - -1, 135, - 150, 408, - 259, 408, - -2, 512, - -1, 154, - 149, 165, - 191, 165, - 364, 165, - -2, 532, - -1, 749, + 253, 1630, + -2, 134, + -1, 126, + 1, 161, + 756, 161, + -2, 168, + -1, 137, + 150, 411, + 259, 411, + -2, 515, + -1, 156, + 149, 168, + 191, 168, + 364, 168, + -2, 535, + -1, 755, 177, 41, -2, 43, - -1, 958, - 95, 1638, - -2, 1482, - -1, 959, - 95, 1639, - 236, 1643, - -2, 1483, - -1, 960, - 236, 1642, + -1, 964, + 95, 1647, + -2, 1485, + -1, 965, + 95, 1648, + 236, 1652, + -2, 1486, + -1, 966, + 236, 1651, -2, 42, - -1, 1044, - 65, 896, - -2, 909, - -1, 1132, - 264, 1109, - 269, 1109, - -2, 419, - -1, 1217, - 1, 580, - 752, 580, - -2, 165, - -1, 1528, - 236, 1643, - -2, 1483, - -1, 1740, - 65, 897, - -2, 913, - -1, 1741, - 65, 898, - -2, 914, - -1, 1801, - 149, 165, - 191, 165, - 364, 165, - -2, 458, - -1, 1884, - 150, 408, - 259, 408, - -2, 512, - -1, 1893, - 264, 1110, - 269, 1110, - -2, 420, - -1, 2342, - 236, 1647, - -2, 1641, - -1, 2343, - 236, 1643, - -2, 1639, - -1, 2446, - 149, 165, - 191, 165, - 364, 165, - -2, 459, - -1, 2453, - 28, 186, - -2, 188, - -1, 2917, - 86, 96, - 96, 96, - -2, 976, - -1, 2985, - 727, 702, - -2, 676, - -1, 3210, - 55, 1586, - -2, 1580, - -1, 4047, - 727, 702, - -2, 690, - -1, 4139, - 98, 634, - 104, 634, - 114, 634, - 193, 634, - 194, 634, - 195, 634, - 196, 634, - 197, 634, - 198, 634, - 199, 634, - 200, 634, - 201, 634, - 202, 634, - 203, 634, - 204, 634, - 205, 634, - 206, 634, - 207, 634, - 208, 634, - 209, 634, - 210, 634, - 211, 634, - 212, 634, - 213, 634, - 214, 634, - 215, 634, - 216, 634, - 217, 634, - 218, 634, - 219, 634, - 220, 634, - 221, 634, - 222, 634, - 223, 634, - 224, 634, - 225, 634, - 226, 634, - 227, 634, - 228, 634, - 229, 634, - 230, 634, - 231, 634, - 232, 634, - 233, 634, - 234, 634, - -2, 2019, + -1, 1052, + 65, 899, + -2, 912, + -1, 1141, + 264, 1112, + 269, 1112, + -2, 422, + -1, 1226, + 1, 583, + 756, 583, + -2, 168, + -1, 1537, + 236, 1652, + -2, 1486, + -1, 1750, + 65, 900, + -2, 916, + -1, 1751, + 65, 901, + -2, 917, + -1, 1816, + 149, 168, + 191, 168, + 364, 168, + -2, 461, + -1, 1899, + 150, 411, + 259, 411, + -2, 515, + -1, 1908, + 264, 1113, + 269, 1113, + -2, 423, + -1, 2357, + 236, 1656, + -2, 1650, + -1, 2358, + 236, 1652, + -2, 1648, + -1, 2463, + 149, 168, + 191, 168, + 364, 168, + -2, 462, + -1, 2470, + 28, 189, + -2, 191, + -1, 2936, + 86, 99, + 96, 99, + -2, 979, + -1, 3004, + 731, 705, + -2, 679, + -1, 3229, + 55, 1589, + -2, 1583, + -1, 4066, + 731, 705, + -2, 693, + -1, 4158, + 98, 637, + 104, 637, + 114, 637, + 193, 637, + 194, 637, + 195, 637, + 196, 637, + 197, 637, + 198, 637, + 199, 637, + 200, 637, + 201, 637, + 202, 637, + 203, 637, + 204, 637, + 205, 637, + 206, 637, + 207, 637, + 208, 637, + 209, 637, + 210, 637, + 211, 637, + 212, 637, + 213, 637, + 214, 637, + 215, 637, + 216, 637, + 217, 637, + 218, 637, + 219, 637, + 220, 637, + 221, 637, + 222, 637, + 223, 637, + 224, 637, + 225, 637, + 226, 637, + 227, 637, + 228, 637, + 229, 637, + 230, 637, + 231, 637, + 232, 637, + 233, 637, + 234, 637, + -2, 2029, } const yyPrivate = 57344 -const yyLast = 57002 +const yyLast = 56577 var yyAct = [...]int{ - 974, 3698, 3699, 87, 3697, 4137, 4214, 4028, 4118, 3361, - 4227, 4181, 4106, 3647, 4182, 969, 1285, 961, 3262, 2135, - 2014, 2443, 2170, 3269, 2371, 1283, 3497, 4010, 2147, 3933, - 3319, 3310, 3324, 3321, 3320, 3318, 3323, 3322, 2073, 3223, - 4008, 5, 3634, 2373, 3161, 3076, 3339, 3277, 2518, 753, - 3338, 3227, 3224, 3543, 962, 3221, 3740, 3050, 3537, 923, - 747, 3211, 2877, 3075, 1804, 2398, 2481, 781, 2414, 1760, - 748, 2951, 4079, 3032, 3368, 1861, 3527, 2417, 2982, 922, - 3341, 2505, 2486, 3565, 2952, 2549, 1042, 1164, 87, 163, - 1094, 927, 2953, 2431, 42, 1062, 1039, 743, 2883, 1069, - 1909, 2902, 2419, 2869, 41, 2418, 2853, 1042, 2327, 2294, - 2169, 2295, 2131, 3023, 2527, 149, 43, 1891, 2504, 2081, - 2406, 2488, 1104, 2944, 1122, 2566, 1127, 1793, 2919, 1773, - 2421, 1721, 2890, 1541, 2175, 100, 2106, 2095, 104, 105, - 1466, 1449, 1898, 2010, 1101, 1098, 3226, 763, 1133, 1870, - 1102, 2477, 1990, 1128, 1130, 1129, 2478, 1792, 1079, 1778, - 1081, 1051, 758, 1140, 750, 2399, 1743, 2183, 3735, 2202, - 1048, 2851, 1524, 85, 2072, 2022, 1061, 1041, 107, 1045, - 3727, 1500, 99, 1273, 167, 3554, 3498, 1883, 127, 125, - 126, 132, 1046, 1213, 1037, 133, 924, 1049, 1064, 751, - 1074, 84, 1545, 98, 1047, 106, 4215, 1281, 3635, 3307, - 1259, 740, 1073, 93, 2520, 2521, 2522, 4063, 1550, 2520, - 3005, 3004, 2564, 2973, 3627, 1036, 4164, 683, 3040, 3590, - 3041, 4059, 2368, 2369, 4058, 1054, 2088, 128, 2087, 1166, - 2086, 134, 2085, 4064, 1169, 2084, 1095, 3329, 2083, 2053, - 1229, 4158, 1183, 1184, 1185, 2849, 1188, 1189, 1190, 1191, - 3326, 2618, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, - 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1088, - 3207, 4185, 1089, 1055, 741, 2, 680, 1040, 681, 1764, - 1038, 1143, 95, 1975, 1119, 2553, 1762, 3702, 3702, 3329, - 1144, 2879, 4220, 725, 3165, 1111, 2392, 3327, 4237, 128, - 1170, 1173, 1174, 1118, 1117, 1116, 95, 4037, 95, 1765, - 1063, 1463, 1177, 1106, 1460, 2975, 1763, 4219, 4180, 1230, - 111, 112, 113, 1186, 116, 4059, 3333, 122, 725, 2552, - 191, 1483, 95, 675, 4205, 3501, 928, 3500, 4168, 4166, - 1035, 2395, 2394, 2995, 2998, 738, 739, 190, 4011, 3327, - 719, 1754, 2109, 2814, 2093, 1030, 1031, 1032, 1033, 1087, - 1091, 926, 1044, 4167, 4165, 3387, 4133, 128, 3929, 3928, - 129, 1168, 190, 1167, 977, 978, 979, 719, 3333, 977, - 978, 979, 3640, 3701, 3701, 3641, 172, 1451, 4195, 3939, - 1076, 1077, 1120, 4147, 86, 129, 1087, 1091, 926, 4162, - 3659, 3648, 4107, 4115, 2546, 86, 86, 3938, 719, 2625, - 2140, 172, 4142, 4145, 3413, 1872, 3012, 2850, 3013, 1462, - 714, 3259, 3260, 4151, 4152, 2551, 2438, 2439, 4119, 2893, - 3258, 1479, 2933, 3279, 3280, 1794, 1115, 1795, 1222, 1223, - 4146, 3330, 2065, 2066, 3039, 719, 169, 3658, 2928, 170, - 2622, 2927, 2437, 3022, 2929, 1278, 3754, 2894, 1254, 1255, - 1249, 1028, 1110, 1027, 1237, 1112, 4029, 2940, 699, 1238, - 1225, 169, 1250, 1243, 170, 189, 2018, 95, 719, 2623, - 1480, 697, 1481, 1482, 2456, 2455, 3365, 1212, 95, 95, - 719, 3395, 1237, 3330, 1113, 2370, 719, 1238, 3363, 4042, - 189, 2886, 2887, 1444, 4123, 1236, 2616, 1235, 3393, 4123, - 2068, 1790, 2064, 733, 737, 731, 3097, 3369, 2528, 3024, - 1187, 694, 1996, 1725, 1461, 4186, 3981, 3356, 3982, 2983, - 709, 3008, 2567, 2402, 2573, 3357, 1965, 86, 4217, 2592, - 88, 2593, 3278, 2594, 1991, 704, 4187, 1266, 1270, 1268, - 1450, 1252, 1253, 2569, 3281, 1443, 1275, 707, 2211, 1218, - 717, 1258, 2497, 3027, 1115, 720, 1107, 1256, 718, 1277, - 3913, 1251, 1244, 1109, 1108, 1276, 2619, 1257, 2620, 1501, - 1966, 3629, 1967, 3366, 3628, 2595, 2491, 1265, 1267, 2574, - 173, 1080, 720, 3625, 1142, 3364, 1142, 1193, 1192, 179, - 1153, 3384, 1151, 1502, 1503, 1504, 1505, 1506, 1507, 1508, - 1510, 1509, 1511, 1512, 2531, 173, 1728, 1123, 2019, 2571, - 95, 1124, 1113, 720, 179, 3281, 3706, 1114, 684, 2415, - 686, 700, 1124, 722, 1162, 721, 690, 1161, 688, 692, - 701, 693, 1160, 687, 4159, 698, 1159, 1158, 689, 702, - 703, 706, 710, 711, 712, 708, 705, 2203, 696, 723, - 720, 2570, 2205, 1157, 1156, 1155, 2210, 2206, 1150, 1876, - 2207, 2208, 2209, 1163, 2572, 2204, 2212, 2213, 2214, 2215, - 2216, 2217, 2218, 2219, 2220, 3098, 3540, 1099, 1090, 1084, - 1082, 1099, 1136, 720, 2976, 1097, 4238, 1141, 1263, 1141, - 4192, 1099, 1264, 1075, 1282, 720, 1282, 1282, 3624, 3164, - 1135, 720, 1269, 2580, 2576, 2578, 2579, 2577, 2581, 2582, - 2583, 2584, 2011, 1871, 3028, 1090, 1084, 1082, 164, 2400, - 2401, 2557, 3173, 2556, 2007, 1452, 1180, 1262, 3192, 2490, - 3190, 3301, 2000, 1791, 1998, 1999, 1997, 2001, 2002, 2003, - 1154, 3007, 1152, 164, 1869, 1114, 1042, 1525, 1530, 1531, - 1868, 1534, 1536, 1537, 1538, 1539, 1540, 1867, 1543, 1544, - 1546, 1546, 3010, 1546, 1546, 1551, 1551, 1551, 1554, 1555, - 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, - 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, - 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, + 980, 3716, 975, 87, 4246, 2162, 3717, 4233, 3718, 3380, + 4125, 968, 4137, 4200, 3281, 967, 4201, 2150, 4047, 3516, + 2460, 3288, 1292, 4156, 2386, 3952, 3242, 4029, 3338, 2185, + 3343, 3340, 3339, 3337, 3342, 1819, 3341, 4027, 3653, 2388, + 1294, 3666, 3095, 3358, 2029, 4098, 3296, 3329, 2088, 3180, + 2535, 5, 3357, 759, 3246, 3243, 3562, 3556, 3759, 3069, + 3094, 2896, 3230, 2498, 754, 2434, 3051, 1770, 929, 787, + 3546, 3387, 933, 753, 928, 42, 3360, 3001, 2970, 2522, + 2503, 2415, 3584, 2971, 2566, 1103, 1050, 2972, 87, 165, + 2448, 2431, 1876, 2921, 1071, 1924, 1047, 2436, 2902, 1078, + 2435, 1149, 3240, 2886, 749, 1173, 2870, 2310, 41, 1050, + 43, 2342, 2146, 2184, 2544, 3042, 151, 2309, 1906, 2096, + 2521, 2423, 2583, 2505, 1113, 2963, 1136, 1808, 1131, 2938, + 982, 1788, 1774, 102, 1550, 2190, 2438, 106, 1731, 107, + 2121, 2110, 1475, 1458, 2025, 1913, 3245, 1110, 1107, 769, + 1070, 1142, 1885, 2909, 1111, 2005, 756, 2494, 1049, 1137, + 1053, 1139, 1138, 1807, 1088, 1793, 1090, 101, 3754, 2198, + 2217, 2868, 2495, 1059, 1753, 1533, 109, 1509, 2087, 1282, + 3746, 1073, 2416, 3573, 1056, 764, 2037, 85, 169, 129, + 127, 128, 3517, 1898, 1045, 134, 1054, 135, 1055, 757, + 1222, 1083, 1057, 930, 1554, 100, 4234, 1290, 3654, 3326, + 1268, 4082, 2537, 84, 1082, 93, 1559, 2537, 2538, 2539, + 3024, 3023, 108, 2992, 2581, 1476, 3646, 4183, 1044, 3609, + 1776, 3059, 3060, 4078, 4077, 1063, 2103, 4083, 746, 1990, + 1153, 130, 2102, 2101, 689, 2100, 1178, 136, 1104, 2099, + 2098, 2383, 2384, 2068, 1238, 686, 2866, 687, 2635, 1175, + 3226, 2570, 1186, 4177, 4204, 3184, 4256, 3721, 4199, 3721, + 1064, 4224, 1192, 1193, 1194, 3520, 1197, 1198, 1199, 1200, + 2898, 3519, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, + 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1048, + 1152, 1098, 2407, 2412, 1097, 2569, 731, 1046, 1239, 1061, + 2, 747, 4239, 1128, 4056, 130, 1127, 1126, 1125, 1179, + 1182, 1183, 3348, 1779, 1072, 1115, 1772, 2994, 3348, 1472, + 1764, 2411, 1469, 1486, 1492, 1120, 3017, 4238, 731, 4078, + 4030, 3345, 725, 2831, 1777, 2108, 981, 4187, 3406, 4152, + 3948, 3947, 1195, 1780, 113, 114, 115, 1043, 118, 1177, + 1176, 124, 192, 3720, 193, 3720, 3014, 681, 984, 985, + 986, 4214, 4186, 95, 1778, 1096, 1100, 932, 3958, 744, + 745, 4185, 3346, 130, 1129, 131, 4181, 725, 3346, 1038, + 1039, 1040, 1041, 3678, 3667, 1460, 1052, 984, 985, 986, + 4126, 174, 4134, 1096, 1100, 932, 4184, 3659, 2563, 3957, + 3660, 3352, 86, 2155, 4161, 3432, 1887, 3352, 3278, 3279, + 2455, 2456, 4138, 2867, 725, 2947, 1085, 1086, 2946, 3277, + 720, 2948, 3031, 3058, 3032, 4166, 2639, 1471, 86, 2080, + 2081, 1809, 3041, 1810, 2454, 2642, 1482, 2952, 1258, 1474, + 86, 1036, 725, 1035, 1287, 4164, 4048, 1246, 3677, 2995, + 1259, 171, 1247, 97, 172, 4170, 4171, 1263, 1264, 2033, + 2514, 2959, 1252, 2912, 3414, 3298, 3299, 725, 705, 2473, + 2472, 3412, 4165, 1489, 3384, 1490, 1491, 1488, 1453, 3773, + 191, 703, 2633, 2568, 2508, 95, 739, 1246, 4142, 2905, + 2906, 2913, 1247, 3382, 1124, 86, 1231, 1232, 88, 725, + 1245, 2226, 1244, 2079, 2083, 2640, 743, 737, 4205, 1476, + 725, 95, 725, 1805, 3388, 3116, 3349, 4142, 2385, 1221, + 3043, 700, 3349, 95, 1735, 4000, 1980, 4001, 1234, 4206, + 715, 3002, 1470, 2545, 3027, 3375, 2609, 4236, 2610, 2588, + 2611, 1196, 1275, 3376, 1277, 710, 97, 726, 1459, 1260, + 2584, 2590, 1122, 2419, 2006, 2419, 1279, 713, 1286, 1452, + 723, 1253, 3046, 1284, 1285, 1227, 1265, 1267, 724, 3648, + 1981, 3385, 1982, 3647, 3297, 2612, 1266, 2636, 95, 2637, + 1202, 2587, 1274, 1276, 1261, 1262, 3300, 1151, 1201, 2586, + 3383, 3932, 726, 3644, 2589, 175, 1162, 1089, 1160, 1132, + 2218, 2034, 2548, 1133, 181, 2220, 2591, 1738, 3725, 2225, + 2221, 3300, 1151, 2222, 2223, 2224, 2432, 1486, 2219, 2227, + 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 690, 726, + 692, 706, 1133, 728, 1171, 727, 696, 2507, 694, 698, + 707, 699, 1170, 693, 1169, 704, 1168, 1510, 695, 708, + 709, 712, 716, 717, 718, 714, 711, 726, 702, 729, + 4178, 1167, 1166, 3559, 1165, 1164, 1159, 1891, 1172, 3403, + 3183, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1519, 1518, + 1520, 1521, 726, 1108, 3117, 1123, 4257, 1524, 1145, 4211, + 1150, 1108, 1144, 1272, 1099, 1093, 1091, 1273, 2597, 2593, + 2595, 2596, 2594, 2598, 2599, 2600, 2601, 1278, 3643, 2026, + 1291, 1886, 1291, 1291, 726, 1150, 1108, 1084, 3047, 2574, + 1106, 2573, 1099, 1093, 1091, 726, 2022, 726, 1461, 1189, + 1482, 3211, 1271, 166, 3320, 3026, 1481, 1478, 1479, 1480, + 1485, 1487, 1484, 1884, 1483, 1806, 1163, 3012, 1161, 2417, + 2418, 2417, 2418, 1883, 1477, 2996, 3209, 1882, 2023, 1880, + 1237, 680, 1050, 1534, 1539, 1540, 4179, 1543, 1545, 1546, + 1547, 1548, 1549, 3063, 1552, 1553, 1555, 1555, 3029, 1555, + 1555, 1560, 1560, 1560, 1563, 1564, 1565, 1566, 1567, 1568, + 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, + 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, + 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, + 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, + 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, + 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, + 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, + 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, + 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, + 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, + 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, + 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 4055, 1449, + 1280, 1531, 1687, 1130, 1689, 1690, 1691, 1692, 1693, 1450, + 1451, 2993, 3607, 3608, 1544, 1776, 1560, 1560, 1560, 1560, + 1560, 1560, 1992, 1991, 1993, 1994, 1995, 3719, 730, 3719, + 4140, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, + 1709, 1710, 1711, 1712, 1713, 1527, 1528, 1529, 1530, 721, + 4169, 3676, 1243, 2567, 1225, 1541, 1535, 3016, 2961, 4140, + 89, 2511, 167, 3560, 722, 1092, 4139, 95, 4101, 179, + 1524, 1556, 1912, 1557, 1558, 2871, 2873, 94, 2565, 1242, + 1468, 1248, 1249, 1250, 1251, 3350, 3351, 1230, 1561, 1562, + 1726, 3350, 3351, 1092, 4168, 4139, 2641, 1233, 3354, 2640, + 3504, 3015, 2512, 94, 3354, 1288, 1289, 3050, 1151, 2510, + 187, 4043, 1728, 3040, 1763, 94, 3039, 3598, 1734, 3580, + 1481, 1478, 1479, 1480, 1485, 1487, 1484, 1050, 1483, 4250, + 1181, 1050, 3192, 1724, 1525, 1526, 1144, 1050, 1477, 1119, + 1180, 2943, 1121, 2513, 1151, 2908, 1256, 2843, 2158, 1797, + 1688, 1236, 3191, 2509, 2903, 688, 2657, 168, 173, 170, + 176, 177, 178, 180, 182, 183, 184, 185, 126, 1725, + 94, 2010, 2461, 186, 188, 189, 190, 1524, 1521, 3276, + 3404, 1911, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1519, + 1518, 1520, 1521, 2011, 2668, 1151, 1764, 1269, 2199, 1742, + 2038, 1504, 1067, 1746, 1283, 4069, 1241, 1174, 121, 1049, + 3639, 1150, 3572, 2585, 2092, 2200, 1124, 1220, 1516, 1517, + 1519, 1518, 1520, 1521, 1744, 2019, 1745, 1811, 106, 3090, + 107, 2191, 1694, 1695, 1696, 1697, 1698, 1699, 2191, 1725, + 2677, 1124, 2527, 1116, 1490, 1491, 4215, 1150, 1188, 2872, + 1118, 1117, 1732, 1144, 1147, 1148, 1491, 1108, 3768, 4207, + 4061, 1141, 1145, 1510, 2557, 3614, 3613, 109, 3070, 2552, + 3053, 1921, 1775, 1492, 1920, 3052, 1740, 1910, 3053, 2557, + 2668, 1224, 1140, 3052, 2562, 2564, 122, 1511, 1512, 1513, + 1514, 1515, 1516, 1517, 1519, 1518, 1520, 1521, 1150, 1122, + 2560, 1162, 1766, 1154, 1144, 1904, 1160, 2561, 1156, 1062, + 3599, 4252, 1157, 1155, 1888, 1889, 1890, 3940, 2114, 2115, + 2647, 2648, 2559, 1743, 3939, 1975, 2007, 3284, 2008, 1914, + 1914, 2009, 1897, 1158, 4258, 1926, 1151, 1927, 3930, 1929, + 1931, 1769, 1741, 1935, 1937, 1939, 1941, 1943, 1916, 1957, + 1048, 1046, 3072, 1729, 2197, 1270, 4102, 2031, 2039, 1291, + 1240, 4248, 1255, 1226, 4249, 3962, 4247, 1802, 1803, 1151, + 95, 1151, 4035, 1257, 1915, 1492, 731, 1764, 3285, 1871, + 2347, 1965, 1966, 2126, 2344, 2196, 2000, 1971, 1972, 3690, + 2124, 1223, 1492, 2346, 3673, 1879, 3674, 2127, 1522, 1523, + 2125, 2182, 1998, 3287, 1987, 4103, 2714, 1123, 1894, 979, + 1895, 3689, 1893, 2015, 1907, 2013, 2014, 2012, 2016, 2017, + 2018, 4036, 1489, 3282, 1490, 1491, 3082, 3081, 3080, 3621, + 4259, 3074, 1123, 3078, 3620, 3073, 1918, 3071, 3610, 1150, + 3327, 1747, 3076, 3298, 3299, 1144, 1147, 1148, 3316, 1108, + 3283, 3075, 1961, 1141, 1145, 1492, 2968, 1999, 2027, 2967, + 192, 1492, 2966, 1953, 2517, 2001, 1956, 1492, 1958, 2182, + 3077, 3079, 1150, 1997, 1150, 1986, 1187, 1154, 1144, 1985, + 1184, 1984, 1156, 131, 3289, 1764, 1157, 1155, 1983, 3421, + 984, 985, 986, 1492, 1973, 130, 1127, 1126, 1125, 174, + 2174, 2163, 2164, 2165, 2166, 2176, 2167, 2168, 2169, 2181, + 2177, 2170, 2171, 2178, 2179, 2180, 2172, 2173, 2175, 2424, + 2425, 2044, 1967, 1964, 1489, 1963, 1490, 1491, 1962, 1291, + 1291, 1933, 1739, 3092, 2347, 2040, 2041, 2666, 3604, 2066, + 731, 1489, 3379, 1490, 1491, 87, 1455, 2665, 87, 2045, + 1805, 4208, 3297, 4220, 1764, 1764, 2052, 2053, 2054, 171, + 1764, 4057, 172, 4064, 3300, 1510, 2065, 3062, 2174, 2163, + 2164, 2165, 2166, 2176, 2167, 2168, 2169, 2181, 2177, 2170, + 2171, 2178, 2179, 2180, 2172, 2173, 2175, 3967, 191, 1511, + 1512, 1513, 1514, 1515, 1516, 1517, 1519, 1518, 1520, 1521, + 2950, 1510, 731, 2533, 1489, 2532, 1490, 1491, 2153, 2153, + 1489, 1492, 1490, 1491, 4063, 1782, 1489, 42, 1490, 1491, + 42, 2151, 2151, 2718, 2154, 1511, 1512, 1513, 1514, 1515, + 1516, 1517, 1519, 1518, 1520, 1521, 2114, 2115, 2112, 2113, + 2116, 2042, 1489, 4039, 1490, 1491, 1510, 2531, 2046, 2530, + 2048, 2049, 2050, 2051, 2529, 1726, 2528, 2055, 2892, 4235, + 4195, 1764, 1510, 2111, 1783, 1506, 4038, 1507, 2237, 2067, + 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1519, 1518, 1520, + 1521, 1508, 1522, 1523, 1505, 3286, 1511, 1512, 1513, 1514, + 1515, 1516, 1517, 1519, 1518, 1520, 1521, 4037, 1724, 3935, + 1492, 3919, 2251, 175, 1514, 1515, 1516, 1517, 1519, 1518, + 1520, 1521, 181, 1512, 1513, 1514, 1515, 1516, 1517, 1519, + 1518, 1520, 1521, 2892, 1764, 3966, 2093, 3918, 2716, 85, + 1488, 1764, 85, 3767, 1725, 2123, 2073, 2074, 1488, 1764, + 3923, 2186, 3765, 1510, 2129, 2656, 2131, 2132, 2133, 2134, + 2135, 2136, 2138, 2140, 2141, 2142, 2143, 2144, 2145, 3686, + 1489, 1492, 1490, 1491, 2128, 1492, 1723, 1511, 1512, 1513, + 1514, 1515, 1516, 1517, 1519, 1518, 1520, 1521, 2892, 4133, + 2892, 4112, 2334, 2335, 2336, 2337, 2338, 1722, 2130, 1721, + 2157, 2355, 4218, 1764, 1492, 3618, 2261, 3603, 1492, 2359, + 3389, 103, 2362, 2363, 2892, 4108, 3922, 105, 1552, 2357, + 1492, 104, 3386, 2356, 2201, 2202, 2203, 2204, 1535, 1498, + 1499, 1500, 1501, 1502, 1503, 1497, 1494, 103, 2215, 2343, + 1720, 2253, 2236, 3319, 2345, 1718, 2192, 104, 2380, 3318, + 1716, 166, 3044, 1717, 1715, 2977, 1719, 4020, 1764, 1489, + 112, 1490, 1491, 4148, 1764, 112, 2964, 2410, 1764, 1492, + 1720, 111, 1714, 110, 3657, 4054, 111, 2630, 110, 3943, + 1764, 105, 1764, 3665, 1492, 2892, 3931, 3657, 1764, 2892, + 3655, 2354, 2622, 2440, 2360, 2361, 4146, 1764, 2557, 1764, + 4144, 1764, 1492, 3578, 1764, 105, 1492, 2939, 1764, 106, + 2355, 107, 4013, 1764, 2798, 1764, 3309, 3308, 3306, 3307, + 1489, 2621, 1490, 1491, 1489, 2579, 1490, 1491, 2357, 2578, + 2470, 106, 2429, 107, 3304, 3305, 2889, 3290, 2390, 2402, + 2414, 3294, 2122, 2391, 1492, 2069, 1764, 2939, 3293, 1492, + 105, 1764, 3003, 1489, 1492, 1490, 1491, 1489, 2035, 1490, + 1491, 4011, 1764, 3304, 3303, 2442, 1113, 2918, 1764, 1489, + 1764, 1490, 1491, 2640, 3025, 2940, 4008, 1764, 1875, 3006, + 2999, 3000, 3295, 2378, 2396, 2942, 2397, 3291, 2892, 2891, + 1063, 1492, 3292, 2465, 3990, 1764, 2464, 1996, 3545, 1764, + 1113, 1988, 2479, 2480, 2481, 2482, 1978, 2474, 1974, 2475, + 2476, 2477, 2478, 2446, 2887, 2940, 2982, 2403, 1489, 1970, + 1490, 1491, 1492, 2484, 2500, 2640, 2486, 2487, 2488, 2489, + 2156, 1764, 2405, 1489, 2468, 1490, 1491, 4209, 111, 2546, + 1969, 3538, 1764, 3575, 2506, 1968, 3535, 1764, 1875, 1874, + 2427, 1489, 1784, 1490, 1491, 1489, 1281, 1490, 1491, 2451, + 2452, 2450, 3271, 1492, 1817, 1816, 2469, 2467, 1492, 2917, + 2466, 3241, 2640, 1492, 2910, 2910, 3571, 1098, 1488, 2543, + 1097, 2558, 3571, 3533, 1764, 1492, 4096, 4068, 2516, 1492, + 167, 2892, 2918, 1489, 1153, 1490, 1491, 179, 1489, 3524, + 1490, 1491, 1492, 1489, 1914, 1490, 1491, 3306, 3214, 2453, + 2501, 3574, 1488, 1492, 3496, 1764, 2497, 1492, 2798, 2551, + 2515, 2701, 2554, 2520, 2555, 2519, 2704, 2490, 2492, 2493, + 2918, 2700, 2571, 1051, 1492, 2557, 2540, 2422, 187, 1492, + 1489, 2664, 1490, 1491, 2409, 2557, 2501, 2550, 2553, 2549, + 1492, 2918, 3571, 1768, 1152, 3494, 1764, 1492, 2381, 2156, + 3490, 1764, 2572, 2094, 2575, 3487, 1764, 2078, 2576, 2577, + 2021, 1489, 1804, 1490, 1491, 1135, 1134, 3485, 1764, 1765, + 1767, 3483, 1764, 95, 97, 168, 173, 170, 176, 177, + 178, 180, 182, 183, 184, 185, 4174, 4115, 3954, 2645, + 1771, 186, 188, 189, 190, 3481, 1764, 3920, 1050, 1050, + 1050, 1492, 1489, 2582, 1490, 1491, 95, 1489, 1492, 1490, + 1491, 3780, 1489, 3622, 1490, 1491, 3479, 1764, 1545, 1492, + 1545, 3477, 1764, 3638, 1489, 3635, 1490, 1491, 1489, 1492, + 1490, 1491, 3475, 1764, 1492, 3616, 2660, 3437, 1492, 3473, + 1764, 1489, 1492, 1490, 1491, 3436, 1492, 1877, 2615, 2499, + 1492, 3377, 1489, 3332, 1490, 1491, 1489, 1949, 1490, 1491, + 3328, 2663, 3007, 2496, 2491, 1492, 2485, 2483, 2003, 1492, + 3623, 3624, 3625, 1489, 1492, 1490, 1491, 1909, 1489, 2357, + 1490, 1491, 1905, 2356, 1873, 123, 3330, 2973, 2974, 1489, + 1492, 1490, 1491, 3471, 1764, 1225, 1489, 3381, 1490, 1491, + 3469, 1764, 2632, 3955, 2673, 3585, 3586, 1492, 2683, 4072, + 2514, 3467, 1764, 2394, 1950, 1951, 1952, 2638, 1492, 3591, + 4230, 3465, 1764, 3590, 4228, 2698, 3463, 1764, 4202, 2071, + 3461, 1764, 4076, 2646, 3459, 1764, 3956, 3995, 3457, 1764, + 1492, 2974, 3443, 1764, 3588, 1492, 2652, 2649, 2650, 2651, + 1489, 3324, 1490, 1491, 1492, 2123, 3323, 1489, 4052, 1490, + 1491, 3419, 1764, 2653, 3322, 2655, 2863, 1764, 1489, 3241, + 1490, 1491, 2986, 2616, 2658, 3260, 2659, 3259, 1489, 1492, + 1490, 1491, 2672, 1489, 1492, 1490, 1491, 1489, 1492, 1490, + 1491, 1489, 1492, 1490, 1491, 1489, 2072, 1490, 1491, 1489, + 3927, 1490, 1491, 3263, 3261, 2676, 1492, 2654, 3264, 3262, + 2861, 1764, 685, 2413, 1489, 1492, 1490, 1491, 1489, 1781, + 1490, 1491, 1492, 1489, 2400, 1490, 1491, 3579, 1065, 2624, + 2625, 1492, 2836, 1764, 2627, 3219, 2842, 2813, 1764, 1489, + 2661, 1490, 1491, 2628, 3218, 4034, 2805, 1764, 3758, 3760, + 1492, 3265, 1786, 2927, 2928, 3567, 1489, 1492, 1490, 1491, + 3228, 2712, 1492, 2830, 3626, 2020, 1034, 1489, 2874, 1490, + 1491, 2796, 1764, 3231, 3233, 2153, 2794, 1764, 3302, 1066, + 2781, 1764, 3234, 2957, 2779, 1764, 748, 1050, 2151, 1489, + 2877, 1490, 1491, 3564, 1489, 1492, 1490, 1491, 2777, 1764, + 2978, 3563, 1492, 1489, 2608, 1490, 1491, 2775, 1764, 2875, + 2199, 1492, 2915, 2916, 2773, 1764, 2607, 3627, 3628, 3629, + 2380, 2440, 2606, 1785, 1050, 2935, 1068, 2200, 1489, 2605, + 1490, 1491, 1492, 1489, 1069, 1490, 1491, 1489, 1492, 1490, + 1491, 1489, 3593, 1490, 1491, 1077, 2878, 2604, 2880, 2771, + 1764, 2603, 2122, 2602, 3540, 1489, 3397, 1490, 1491, 1076, + 2914, 1191, 1190, 1492, 1489, 2973, 1490, 1491, 3745, 3056, + 3744, 1489, 1454, 1490, 1491, 103, 2895, 2119, 2117, 2118, + 1489, 105, 1490, 1491, 42, 104, 2933, 2769, 1764, 3013, + 131, 3569, 105, 2932, 2767, 1764, 2934, 2904, 1732, 1489, + 2865, 1490, 1491, 2765, 1764, 4244, 1489, 103, 1490, 1491, + 1492, 1489, 2990, 1490, 1491, 2885, 2619, 104, 1492, 4151, + 1775, 4053, 2893, 3743, 2763, 1764, 1492, 2424, 2425, 1725, + 2761, 1764, 3950, 2953, 2907, 1492, 2890, 2960, 2962, 3011, + 1492, 1945, 3547, 3301, 1489, 2937, 1490, 1491, 1492, 2931, + 3217, 1489, 2406, 1490, 1491, 2759, 1764, 2941, 3216, 2644, + 1489, 2944, 1490, 1491, 2506, 1492, 2077, 112, 2076, 110, + 2194, 2951, 2954, 1492, 4019, 2195, 3022, 4018, 111, 111, + 110, 1489, 3998, 1490, 1491, 3766, 3764, 1489, 105, 1490, + 1491, 2965, 3755, 2976, 1946, 1947, 1948, 3763, 2979, 2980, + 3756, 1492, 2757, 1764, 3636, 3568, 3566, 3333, 2975, 2541, + 2755, 1764, 1489, 2257, 1490, 1491, 1492, 1892, 2753, 1764, + 2983, 1492, 2984, 1075, 2987, 2988, 2989, 2751, 1764, 3557, + 3019, 112, 2749, 1764, 1492, 112, 3729, 1897, 2910, 2889, + 2747, 1764, 111, 3120, 3066, 3067, 111, 2702, 110, 2392, + 1492, 3008, 3009, 4232, 4231, 1492, 1798, 2742, 1764, 1489, + 1790, 1490, 1491, 116, 117, 3536, 3018, 1489, 4232, 1490, + 1491, 1492, 4231, 4040, 3602, 1489, 1492, 1490, 1491, 3086, + 2091, 3, 2089, 10, 1489, 9, 1490, 1491, 99, 1489, + 1492, 1490, 1491, 2340, 3640, 2090, 1492, 1489, 8, 1490, + 1491, 3064, 3045, 1492, 1, 3083, 1042, 1457, 2738, 1764, + 1456, 1492, 3606, 3502, 1489, 3048, 1490, 1491, 4163, 701, + 2382, 1730, 1489, 2372, 1490, 1491, 2736, 1764, 4203, 3101, + 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 4159, + 1765, 2379, 2729, 1764, 4160, 1989, 1492, 2727, 1764, 3118, + 1489, 1979, 1490, 1491, 3668, 2308, 3951, 3020, 1492, 3084, + 3336, 2547, 3634, 3498, 2504, 1489, 1143, 1490, 1491, 2969, + 1489, 156, 1490, 1491, 2462, 2463, 4128, 120, 1101, 119, + 1492, 2404, 3434, 1489, 1146, 1490, 1491, 1254, 3433, 2542, + 3658, 2958, 2471, 1823, 1821, 3425, 1822, 3068, 1820, 1489, + 1492, 1490, 1491, 3423, 1489, 3085, 1490, 1491, 1825, 3122, + 1824, 3160, 3178, 3162, 3054, 4100, 3405, 3055, 2703, 3503, + 1489, 2082, 1490, 1491, 2998, 1489, 738, 1490, 1491, 3173, + 3174, 3175, 3176, 2930, 732, 194, 1812, 3065, 2859, 1489, + 1791, 1490, 1491, 2075, 1185, 1489, 3196, 1490, 1491, 691, + 2858, 3310, 1489, 2580, 1490, 1491, 3185, 697, 1542, 2070, + 1489, 3215, 1490, 1491, 2945, 3187, 1492, 1095, 1087, 2393, + 2440, 2879, 2854, 3111, 1492, 1094, 3928, 3249, 1492, 3561, + 3227, 3229, 2897, 2343, 3232, 2343, 3158, 3225, 2345, 4033, + 2345, 3757, 2853, 2518, 3248, 1489, 87, 1490, 1491, 2440, + 2440, 2440, 2440, 2440, 1492, 4113, 2955, 1489, 1787, 1490, + 1491, 3196, 3168, 3169, 3170, 3171, 3172, 3523, 2675, 2440, + 2189, 1532, 2440, 763, 3253, 2439, 3186, 934, 3188, 1489, + 1773, 1490, 1491, 3724, 2109, 3223, 3195, 761, 760, 1492, + 758, 3270, 2442, 2881, 2911, 1496, 1495, 969, 2869, 1489, + 3213, 1490, 1491, 3208, 3210, 3212, 3207, 1799, 2852, 2922, + 1492, 2920, 2919, 2617, 2031, 1492, 2851, 3222, 1053, 3220, + 2850, 2442, 2442, 2442, 2442, 2442, 1492, 2447, 3235, 3236, + 1492, 3587, 3583, 4155, 3272, 3353, 2441, 3273, 2437, 2888, + 920, 2442, 3252, 919, 2442, 3361, 2849, 3255, 3256, 3254, + 3258, 770, 3257, 3266, 1054, 762, 1055, 106, 1492, 107, + 752, 983, 1492, 3274, 918, 1489, 917, 1490, 1491, 3363, + 3221, 3364, 3280, 1489, 3028, 1490, 1491, 1489, 1492, 1490, + 1491, 2840, 1492, 3378, 3311, 3030, 3313, 2956, 3374, 3312, + 3238, 1473, 1492, 2923, 2926, 2927, 2928, 2924, 1749, 2925, + 2929, 1752, 2839, 1489, 2401, 1490, 1491, 2838, 1114, 3314, + 3315, 3402, 4059, 3365, 3362, 3334, 2506, 3355, 2837, 3366, + 2643, 3431, 2834, 1748, 4066, 3344, 3372, 3652, 3325, 3004, + 2534, 1492, 69, 46, 4028, 4097, 1492, 912, 1489, 909, + 1490, 1491, 3726, 1492, 3727, 3392, 3244, 3390, 3728, 3181, + 2829, 3244, 3182, 4079, 2822, 4080, 908, 3400, 3393, 1489, + 4081, 1490, 1491, 2246, 1489, 1467, 1490, 1491, 3410, 1464, + 2821, 4176, 2084, 98, 2820, 1489, 36, 1490, 1491, 1489, + 35, 1490, 1491, 34, 2819, 33, 32, 3426, 3427, 3428, + 3429, 3430, 26, 3407, 3408, 25, 3409, 24, 23, 3411, + 22, 3413, 29, 3415, 19, 21, 20, 1489, 18, 1490, + 1491, 1489, 3347, 1490, 1491, 4198, 4243, 125, 55, 52, + 1545, 50, 2662, 2818, 1545, 133, 2667, 1489, 2817, 1490, + 1491, 1489, 132, 1490, 1491, 2816, 3335, 53, 49, 1228, + 3548, 1489, 3550, 1490, 1491, 47, 96, 31, 30, 2670, + 17, 2671, 16, 3518, 15, 14, 13, 2679, 12, 11, + 3522, 2681, 2682, 7, 6, 39, 38, 37, 28, 27, + 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, + 1489, 2699, 1490, 1491, 40, 1489, 4, 1490, 1491, 2991, + 3247, 2536, 1489, 3401, 1490, 1491, 0, 0, 0, 0, + 0, 0, 2440, 0, 2705, 2706, 2707, 2708, 1726, 2710, + 2711, 3549, 2713, 3551, 0, 3600, 2715, 3558, 3553, 0, + 2720, 2721, 3565, 2722, 0, 0, 2725, 2726, 2728, 2730, + 2731, 2732, 2733, 2734, 2735, 2737, 2739, 2740, 2741, 2743, + 3356, 2745, 2746, 2748, 2750, 2752, 2754, 2756, 2758, 2760, + 2762, 2764, 2766, 2768, 2770, 2772, 2774, 2776, 2778, 2780, + 2782, 2783, 2784, 750, 2786, 3592, 2788, 3595, 2790, 2791, + 3589, 2793, 2795, 2797, 2442, 3570, 3525, 2800, 3527, 3528, + 3529, 2804, 0, 3365, 3362, 2809, 2810, 2811, 2812, 3366, + 1733, 3601, 3594, 3395, 3396, 0, 0, 1492, 2823, 2824, + 2825, 2826, 2827, 2828, 3555, 1492, 2832, 2833, 0, 3662, + 3663, 0, 0, 0, 2835, 3617, 0, 3619, 1492, 2841, + 0, 0, 1492, 0, 2844, 2845, 2846, 2847, 2848, 0, + 3611, 3612, 1492, 0, 0, 2855, 2856, 3582, 2857, 1492, + 0, 2860, 2862, 2404, 1492, 2864, 0, 0, 1492, 683, + 0, 0, 1492, 0, 0, 2876, 3596, 3597, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1492, 0, 1037, + 0, 3664, 0, 0, 1074, 2894, 1492, 1080, 1080, 0, + 1492, 0, 3645, 0, 1492, 0, 3649, 3650, 3651, 2815, + 0, 0, 0, 0, 0, 1492, 0, 2814, 2923, 2926, + 2927, 2928, 2924, 0, 2925, 2929, 0, 0, 3585, 3586, + 2808, 0, 0, 1109, 2807, 0, 0, 0, 0, 1492, + 3680, 0, 0, 0, 2806, 1492, 0, 0, 0, 3691, + 1492, 2803, 0, 0, 0, 0, 2802, 0, 1492, 0, + 2801, 0, 1492, 0, 2799, 0, 1489, 0, 1490, 1491, + 1492, 0, 0, 0, 1489, 0, 1490, 1491, 3713, 2792, + 1492, 3732, 0, 3733, 3734, 3735, 0, 1489, 2789, 1490, + 1491, 1489, 2787, 1490, 1491, 1492, 2785, 3742, 0, 0, + 3749, 1489, 3751, 1490, 1491, 0, 0, 2744, 1489, 0, + 1490, 1491, 0, 1489, 3722, 1490, 1491, 1489, 0, 1490, + 1491, 1489, 0, 1490, 1491, 3248, 0, 3752, 87, 0, + 3248, 2724, 3685, 0, 0, 0, 1489, 2723, 1490, 1491, + 0, 0, 2719, 0, 0, 1489, 2153, 1490, 1491, 1489, + 2717, 1490, 1491, 1489, 2709, 1490, 1491, 0, 0, 2151, + 0, 3782, 2680, 3753, 1489, 3772, 1490, 1491, 3762, 3761, + 0, 0, 2674, 0, 0, 0, 3774, 3769, 0, 3771, + 0, 0, 0, 0, 0, 3641, 3642, 2669, 1489, 0, + 1490, 1491, 0, 0, 1489, 3934, 1490, 1491, 0, 1489, + 42, 1490, 1491, 0, 0, 0, 3786, 1489, 0, 1490, + 1491, 1489, 0, 1490, 1491, 0, 0, 0, 0, 1489, + 0, 1490, 1491, 0, 0, 0, 0, 0, 0, 1489, + 0, 1490, 1491, 0, 0, 0, 0, 3926, 3925, 0, + 3953, 3941, 0, 0, 1489, 0, 1490, 1491, 3924, 0, + 0, 3946, 3945, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1754, 0, 0, 0, 0, 3096, 3097, + 3098, 3099, 3100, 3992, 2153, 3993, 3776, 1762, 0, 0, + 1755, 3750, 0, 0, 0, 0, 0, 2151, 3115, 3996, + 0, 0, 0, 0, 0, 0, 0, 0, 3783, 3784, + 0, 0, 3936, 3937, 3938, 2398, 2399, 1761, 1759, 1760, + 1756, 0, 1757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4041, 3248, 3244, 3999, 3778, 0, 0, + 4002, 0, 0, 0, 0, 1758, 4032, 0, 1563, 1564, + 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, + 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, @@ -1788,1090 +2095,751 @@ var yyAct = [...]int{ 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, - 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, - 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, - 1676, 1677, 1440, 1522, 1271, 2550, 1678, 4036, 1680, 1681, - 1682, 1683, 1684, 1441, 1442, 2974, 3331, 3332, 3588, 3589, - 1551, 1551, 1551, 1551, 1551, 1551, 1535, 1121, 4150, 3335, - 1515, 975, 4082, 975, 724, 1691, 1692, 1693, 1694, 1695, - 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1518, - 1519, 1520, 1521, 1526, 2997, 715, 4121, 975, 1515, 1532, - 3657, 4121, 1467, 3700, 3700, 1083, 1718, 165, 3331, 3332, - 716, 1224, 4149, 1547, 177, 1548, 1549, 1234, 1459, 94, - 2624, 3335, 1977, 1976, 1978, 1979, 1980, 1717, 4120, 1221, - 94, 94, 165, 4120, 1552, 1553, 3541, 1216, 2996, 177, - 2977, 1897, 1083, 2993, 1233, 1142, 1239, 1240, 1241, 1242, - 2008, 1865, 89, 1172, 2623, 185, 3044, 3485, 1228, 1135, - 1724, 674, 3385, 1171, 1753, 4160, 2548, 2854, 2856, 1042, - 1279, 1280, 3021, 1042, 4024, 3020, 1467, 1516, 1517, 1042, - 185, 4231, 3579, 3561, 2640, 2924, 2889, 2826, 2143, 1782, - 3031, 719, 1679, 1179, 1227, 1142, 1715, 3172, 166, 171, - 168, 174, 175, 176, 178, 180, 181, 182, 183, 1716, - 1477, 1247, 2884, 2494, 184, 186, 187, 188, 1142, 682, - 2444, 1515, 124, 166, 171, 168, 174, 175, 176, 178, - 180, 181, 182, 183, 2402, 3257, 1512, 1142, 2184, 184, - 186, 187, 188, 2651, 1260, 1495, 3265, 1058, 1141, 1274, - 1896, 2176, 4050, 1165, 2495, 2185, 119, 3620, 3553, 1754, - 1732, 2493, 94, 1232, 1736, 2023, 2568, 1734, 1735, 2077, - 1041, 104, 105, 2004, 1796, 3071, 2510, 1716, 1685, 1686, - 1687, 1688, 1689, 1690, 1477, 1995, 4196, 3749, 1722, 1507, - 1508, 1510, 1509, 1511, 1512, 2496, 1482, 3266, 1141, 1115, - 1211, 3595, 4188, 1145, 1135, 2492, 1481, 1482, 1147, 3594, - 2535, 107, 1148, 1146, 1906, 1483, 1142, 2176, 1905, 2660, - 1895, 1141, 3268, 1473, 2540, 3034, 1465, 1135, 1138, 1139, - 3033, 1099, 2540, 1149, 120, 1132, 1136, 1873, 1874, 1875, - 1141, 2855, 3263, 2651, 1730, 1142, 1135, 1138, 1139, 2545, - 1099, 1889, 2543, 1153, 1132, 1136, 1131, 1151, 1053, 1756, - 3580, 3034, 3279, 3280, 1215, 1733, 3033, 2544, 1719, 3264, - 1960, 4233, 1882, 2547, 2016, 2542, 1038, 4083, 1759, 4016, - 1040, 1911, 1731, 1912, 1985, 1914, 1916, 3921, 1901, 1920, - 1922, 1924, 1926, 1928, 2182, 1942, 3920, 1473, 3051, 2332, - 1282, 1983, 1261, 3270, 1950, 1951, 720, 1787, 1788, 2167, - 1956, 1957, 1900, 4229, 1856, 1217, 4230, 1231, 4228, 1141, - 2111, 1178, 3654, 2024, 3655, 1175, 4084, 1246, 4017, 1864, - 2400, 2401, 1899, 1899, 2112, 1513, 1514, 2110, 1248, 4239, - 1992, 3911, 1993, 1879, 3671, 1994, 3670, 1880, 1141, 1892, - 3602, 1878, 2332, 1145, 1135, 1984, 2329, 1972, 1147, 1737, - 3601, 1754, 1148, 1146, 1480, 2331, 1481, 1482, 725, 2181, - 1903, 3278, 1982, 3073, 1214, 3591, 1946, 2099, 2100, 2097, - 2098, 973, 3053, 3281, 977, 978, 979, 1483, 3308, 3297, - 1114, 2949, 1483, 2099, 2100, 2630, 2631, 1938, 2012, 1483, - 1941, 2948, 1943, 2947, 2096, 2500, 2697, 1986, 2159, 2148, - 2149, 2150, 2151, 2161, 2152, 2153, 2154, 2166, 2162, 2155, - 2156, 2163, 2164, 2165, 2157, 2158, 2160, 1483, 1971, 1970, - 190, 1969, 128, 1483, 1968, 4240, 1118, 1117, 1116, 1483, - 1958, 2978, 1505, 1506, 1507, 1508, 1510, 1509, 1511, 1512, - 1790, 2029, 1952, 129, 1949, 151, 3063, 3062, 3061, 2407, - 2408, 3055, 1948, 3059, 1947, 3054, 1918, 3052, 1729, 172, - 1282, 1282, 3057, 1483, 3360, 1446, 2025, 2026, 1483, 4201, - 1754, 3056, 2875, 4216, 2051, 1754, 87, 4189, 4045, 87, - 2030, 4199, 1754, 3552, 3585, 3402, 725, 2037, 2038, 2039, - 3058, 3060, 4044, 162, 3267, 4020, 2931, 2050, 725, 150, - 1489, 1490, 1491, 1492, 1493, 1494, 1488, 1485, 4019, 1472, - 1469, 1470, 1471, 1476, 1478, 1475, 2516, 1474, 2515, 169, - 4018, 3943, 170, 1754, 1767, 2699, 1480, 1468, 1481, 1482, - 2514, 1480, 2513, 1481, 1482, 1479, 1754, 2942, 1480, 101, - 1481, 1482, 4176, 1754, 1885, 1886, 161, 160, 189, 102, - 3916, 1483, 2138, 2138, 2136, 2136, 1754, 2139, 2875, 1754, - 4129, 1754, 1483, 2512, 3900, 2511, 1480, 42, 1481, 1482, - 42, 3899, 1480, 1768, 1481, 1482, 3748, 2101, 1480, 1717, - 1481, 1482, 1483, 1472, 1469, 1470, 1471, 1476, 1478, 1475, - 3746, 1474, 4038, 2027, 1479, 1754, 2875, 4114, 2875, 4093, - 2031, 1468, 2033, 2034, 2035, 2036, 2687, 3667, 1501, 2040, - 1754, 1497, 1480, 1498, 1481, 1482, 1714, 1480, 1713, 1481, - 1482, 2052, 2222, 1483, 2875, 4089, 2236, 1499, 1513, 1514, - 1496, 1712, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1510, - 1509, 1511, 1512, 4127, 1754, 1483, 85, 3599, 1715, 85, - 155, 1887, 158, 2078, 1884, 1754, 156, 157, 4001, 1754, - 3948, 1716, 3584, 173, 2108, 3370, 1483, 2058, 2059, 2171, - 3638, 4035, 179, 1503, 1504, 1505, 1506, 1507, 1508, 1510, - 1509, 1511, 1512, 2114, 1483, 2116, 2117, 2118, 2119, 2120, - 2121, 2123, 2125, 2126, 2127, 2128, 2129, 2130, 1483, 2113, - 1480, 3367, 1481, 1482, 3300, 2649, 2319, 2320, 2321, 2322, - 2323, 1480, 2656, 1481, 1482, 2648, 2342, 110, 2142, 2115, - 2341, 3924, 1754, 2344, 2246, 2340, 2347, 2348, 109, 101, - 108, 1480, 3299, 1481, 1482, 103, 3271, 4125, 1754, 102, - 3275, 3025, 1526, 2186, 2187, 2188, 2189, 3274, 2875, 3912, - 3947, 2328, 2330, 3638, 1754, 2875, 3636, 2200, 3994, 1754, - 2177, 2365, 2221, 2540, 1754, 3559, 1754, 2781, 1754, 3904, - 2238, 1483, 1480, 2958, 1481, 1482, 3992, 1754, 3290, 3289, - 3903, 3276, 2945, 2920, 1483, 1711, 3272, 3287, 3288, 103, - 2655, 3273, 3285, 3286, 1480, 2647, 1481, 1482, 3285, 3284, - 1754, 164, 1483, 1754, 2899, 1754, 2623, 3006, 2423, 2339, - 1705, 1711, 2345, 2346, 1483, 1480, 1709, 1481, 1482, 2342, - 2613, 1707, 1483, 2412, 1708, 1706, 2605, 1710, 2340, 1860, - 2987, 104, 105, 1480, 2604, 1481, 1482, 2980, 2981, 3646, - 1501, 2562, 3043, 1771, 2561, 1483, 2453, 1480, 2397, 1481, - 1482, 2921, 104, 105, 1754, 2375, 1483, 2376, 1501, 2387, - 2054, 2923, 2020, 2107, 1502, 1503, 1504, 1505, 1506, 1507, - 1508, 1510, 1509, 1511, 1512, 1981, 3989, 1754, 2875, 2874, - 2701, 1104, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1510, - 1509, 1511, 1512, 1973, 3971, 1754, 2984, 159, 1963, 2425, - 2963, 2462, 2463, 2464, 2465, 2457, 3574, 2458, 2459, 2460, - 2461, 2447, 1054, 2448, 1770, 1104, 2891, 2872, 1959, 2363, - 1480, 2467, 1481, 1482, 2469, 2470, 2471, 2472, 2429, 2388, - 2381, 103, 2382, 1480, 1955, 1481, 1482, 3526, 1754, 2452, - 2390, 1954, 2483, 2141, 1754, 95, 1953, 1769, 3521, 2451, - 109, 1480, 1272, 1481, 1482, 3556, 1501, 2529, 2639, 2410, - 1483, 2489, 2891, 1480, 1483, 1481, 1482, 1479, 2434, 2435, - 2433, 1480, 1088, 1481, 1482, 1089, 2450, 2920, 2449, 2541, - 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1510, 1509, 1511, - 1512, 1860, 1859, 2899, 1480, 2870, 1481, 1482, 4077, 2526, - 1802, 1801, 2499, 2898, 4049, 1480, 152, 1481, 1482, 153, - 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1510, 1509, 1511, - 1512, 3222, 2484, 3555, 1479, 2480, 2473, 2475, 2476, 2875, - 2899, 2498, 3552, 2534, 1483, 2503, 2537, 2502, 2538, 3552, - 165, 3252, 3505, 2540, 3287, 2921, 3195, 177, 3603, 2436, - 2781, 2623, 2554, 4190, 2684, 2623, 3519, 1754, 2484, 2533, - 2536, 2532, 1143, 2683, 2899, 1501, 2540, 1483, 2523, 2405, - 1758, 1144, 1483, 2366, 2141, 2079, 2063, 2555, 1483, 2558, - 2006, 1899, 1483, 2559, 2560, 1789, 1483, 1126, 185, 1502, - 1503, 1504, 1505, 1506, 1507, 1508, 1510, 1509, 1511, 1512, - 1483, 1755, 1757, 1125, 1483, 3604, 3605, 3606, 1483, 1480, - 4155, 1481, 1482, 1480, 2628, 1481, 1482, 4096, 3935, 1043, - 1761, 3901, 3311, 1042, 1042, 1042, 3516, 1754, 2565, 3761, - 3619, 166, 171, 168, 174, 175, 176, 178, 180, 181, - 182, 183, 110, 1536, 3616, 1536, 3597, 184, 186, 187, - 188, 3418, 1483, 109, 3417, 108, 1862, 2482, 3572, 3514, - 1754, 2643, 3358, 103, 3477, 1754, 3313, 3309, 2988, 1483, - 3475, 1754, 2598, 1483, 3471, 1754, 2479, 2955, 3468, 1754, - 2342, 1501, 1483, 1480, 2341, 1481, 1482, 1483, 2474, 2646, - 2468, 1483, 3466, 1754, 2466, 1483, 3464, 1754, 1988, 1483, - 3462, 1754, 95, 1894, 1483, 1502, 1503, 1504, 1505, 1506, - 1507, 1508, 1510, 1509, 1511, 1512, 1480, 1890, 1481, 1482, - 1483, 1480, 1858, 1481, 1482, 2615, 2666, 1480, 1754, 1481, - 1482, 1480, 121, 1481, 1482, 1480, 1216, 1481, 1482, 2954, - 2621, 3566, 3567, 2681, 3460, 1754, 3362, 3936, 1483, 1480, - 2497, 1481, 1482, 1480, 2629, 1481, 1482, 1480, 1934, 1481, - 1482, 3458, 1754, 2379, 4211, 3456, 1754, 2635, 2056, 4209, - 2632, 2633, 2634, 1483, 3454, 1754, 4053, 1483, 2108, 3452, - 1754, 1483, 4183, 3450, 1754, 679, 4057, 3448, 1754, 3976, - 1483, 3446, 1754, 2955, 1483, 3569, 2636, 4033, 2638, 3305, - 3304, 1480, 1483, 1481, 1482, 3303, 3222, 2641, 2967, 2642, - 1483, 2599, 3444, 1754, 1483, 1935, 1936, 1937, 1480, 1766, - 1481, 1482, 1480, 3244, 1481, 1482, 3571, 1483, 3245, 2659, - 3241, 1480, 2637, 1481, 1482, 2057, 1480, 3240, 1481, 1482, - 1480, 3908, 1481, 1482, 1480, 1056, 1481, 1482, 1480, 3242, - 1481, 1482, 3937, 1480, 3243, 1481, 1482, 1483, 2644, 742, - 2396, 2825, 2385, 1483, 3560, 3442, 1754, 3200, 3199, 1480, - 3621, 1481, 1482, 3440, 1754, 2607, 2608, 4015, 1483, 3739, - 2610, 3548, 3438, 1754, 3545, 2695, 3517, 2167, 1483, 2611, - 3741, 2813, 3544, 2857, 3424, 1754, 1057, 1480, 3209, 1481, - 1482, 2005, 3400, 1754, 1026, 3283, 2846, 1754, 3246, 2938, - 2908, 2909, 1042, 2138, 3726, 2136, 3725, 2860, 1483, 2844, - 1754, 2959, 1480, 2184, 1481, 1482, 1480, 2591, 1481, 1482, - 1480, 1483, 1481, 1482, 2590, 2896, 2897, 1182, 2858, 1480, - 2185, 1481, 1482, 1480, 2423, 1481, 1482, 1042, 2916, 2819, - 1754, 1480, 2589, 1481, 1482, 2796, 1754, 2588, 2861, 1480, - 2863, 1481, 1482, 1480, 2587, 1481, 1482, 1059, 1483, 3724, - 2788, 1754, 1483, 2895, 2586, 1060, 1480, 2107, 1481, 1482, - 2779, 1754, 1483, 2876, 2585, 1181, 2159, 2148, 2149, 2150, - 2151, 2161, 2152, 2153, 2154, 2166, 2162, 2155, 2156, 2163, - 2164, 2165, 2157, 2158, 2160, 3378, 1480, 2954, 1481, 1482, - 2777, 1754, 1480, 3037, 1481, 1482, 1483, 1722, 2848, 1445, - 2885, 2914, 1068, 2764, 1754, 2994, 42, 1480, 129, 1481, - 1482, 101, 3550, 1483, 103, 2913, 1067, 1480, 2915, 1481, - 1482, 102, 2868, 4225, 2941, 2943, 2971, 1483, 1716, 3212, - 3214, 1483, 2104, 2102, 2103, 2888, 2934, 1483, 3215, 2873, - 2762, 1754, 2992, 1483, 2760, 1754, 101, 1480, 2918, 1481, - 1482, 2602, 103, 4132, 2758, 1754, 102, 4034, 3931, 2922, - 1480, 3528, 1481, 1482, 2925, 1483, 110, 2407, 2408, 2489, - 2932, 3282, 2912, 2391, 1483, 2935, 2627, 109, 2957, 108, - 3003, 2179, 3198, 2960, 2961, 2062, 2180, 103, 2756, 1754, - 3197, 2061, 2946, 108, 4000, 3999, 3607, 1480, 1483, 1481, - 1482, 1480, 3979, 1481, 1482, 2754, 1754, 1483, 3747, 2956, - 3745, 1480, 3744, 1481, 1482, 1483, 3737, 3736, 3617, 2752, - 1754, 3549, 2964, 3483, 2242, 2968, 2969, 2970, 2965, 2750, - 1754, 110, 1483, 3547, 3000, 2748, 1754, 1483, 3314, 1882, - 2524, 1483, 109, 1930, 108, 1480, 1877, 1481, 1482, 3608, - 3609, 3610, 110, 2989, 2990, 1066, 109, 2746, 1754, 3538, - 4212, 2891, 1480, 109, 1481, 1482, 2744, 1754, 3710, 2999, - 3047, 3048, 4213, 4212, 4213, 3067, 1480, 2872, 1481, 1482, - 1480, 1483, 1481, 1482, 3101, 1483, 1480, 2685, 1481, 1482, - 2742, 1754, 1480, 1483, 1481, 1482, 1931, 1932, 1933, 2740, - 1754, 2377, 1483, 3026, 2325, 1783, 3064, 2738, 1754, 1483, - 3045, 1775, 114, 115, 1480, 4021, 1481, 1482, 3029, 1483, - 3583, 3, 97, 1480, 3479, 1481, 1482, 1, 2076, 2736, - 1754, 10, 1034, 3415, 2357, 3082, 3083, 3084, 3085, 3086, - 3087, 3088, 3089, 3090, 3091, 2074, 1448, 1480, 9, 1481, - 1482, 1755, 2364, 3001, 2075, 3099, 1480, 8, 1481, 1482, - 1447, 3587, 3065, 4144, 1480, 695, 1481, 1482, 2367, 1720, - 4184, 4140, 4141, 2734, 1754, 1974, 1964, 2732, 1754, 3649, - 2293, 1480, 1483, 1481, 1482, 3414, 1480, 3932, 1481, 1482, - 1480, 2389, 1481, 1482, 2730, 1754, 1483, 3317, 2530, 3615, - 1483, 2725, 1754, 2487, 1483, 1134, 154, 3141, 3049, 3143, - 2445, 3406, 3103, 2446, 1483, 3159, 3066, 3035, 4109, 118, - 3036, 1092, 117, 1137, 1483, 3154, 3155, 3156, 3157, 1245, - 1480, 2979, 1481, 1482, 1480, 2525, 1481, 1482, 1483, 3639, - 3046, 2939, 1480, 2454, 1481, 1482, 1808, 1806, 1807, 1805, - 1810, 1480, 3177, 1481, 1482, 1809, 4081, 3386, 1480, 2686, - 1481, 1482, 3166, 3168, 3484, 2067, 732, 2911, 1480, 726, - 1481, 1482, 192, 2423, 2721, 1754, 3092, 2328, 2330, 2328, - 2330, 1483, 1797, 1776, 2060, 1176, 685, 3291, 2719, 1754, - 2563, 691, 3404, 3139, 1533, 3229, 2842, 87, 2501, 2055, - 2423, 2423, 2423, 2423, 2423, 3196, 2841, 3149, 3150, 3151, - 3152, 3153, 2926, 1086, 1078, 3177, 2712, 1754, 2378, 2862, - 2423, 1085, 3909, 2423, 3230, 3542, 3167, 3208, 3169, 3210, - 2837, 1480, 1483, 1481, 1482, 2878, 3176, 1483, 3234, 3213, - 3206, 2016, 3251, 4014, 3738, 1480, 4094, 1481, 1482, 1480, - 3204, 1481, 1482, 1480, 2936, 1481, 1482, 1483, 3194, 3188, - 1772, 1483, 3504, 1480, 2425, 1481, 1482, 1483, 2658, 2174, - 3203, 1523, 3201, 1480, 2950, 1481, 1482, 757, 2422, 3216, - 3217, 3705, 2094, 755, 754, 752, 3334, 1480, 1045, 1481, - 1482, 2425, 2425, 2425, 2425, 2425, 3342, 3253, 3233, 1483, - 3254, 1046, 3202, 3236, 3237, 3235, 3239, 1483, 3238, 104, - 105, 2425, 3247, 1047, 2425, 1483, 2864, 3255, 3189, 3191, - 3193, 2892, 1487, 3261, 2710, 1754, 1486, 963, 2852, 2836, - 1480, 1784, 1481, 1482, 1483, 2903, 3292, 2901, 3294, 2900, - 2600, 2430, 3295, 3296, 3568, 3293, 1483, 3564, 4136, 2835, - 2424, 2420, 2871, 2834, 914, 3346, 913, 764, 756, 2833, - 746, 976, 912, 3343, 911, 3344, 3345, 3219, 3009, 2489, - 3336, 3315, 3359, 3011, 2937, 3347, 3355, 1464, 3353, 1739, - 1742, 1480, 2386, 1481, 1482, 1105, 1480, 3383, 1481, 1482, - 3225, 2832, 4040, 2626, 3412, 3225, 1483, 1738, 4047, 2823, - 3325, 3371, 3374, 3373, 3633, 3306, 1480, 2822, 1481, 1482, - 1480, 2985, 1481, 1482, 3381, 2517, 1480, 69, 1481, 1482, - 46, 4009, 3391, 4078, 906, 903, 2821, 3388, 3389, 3707, - 3390, 3708, 3709, 3392, 3162, 3394, 3163, 3396, 2820, 4060, - 4061, 3407, 3408, 3409, 3410, 3411, 902, 4062, 1480, 2231, - 1481, 1482, 1458, 1455, 4157, 2069, 1480, 96, 1481, 1482, - 36, 35, 34, 33, 1480, 32, 1481, 1482, 26, 25, - 24, 1536, 23, 22, 29, 1536, 19, 2645, 21, 20, - 3316, 2650, 18, 1480, 3328, 1481, 1482, 4179, 2817, 4224, - 123, 3529, 55, 3531, 52, 1480, 50, 1481, 1482, 131, - 130, 53, 49, 1219, 2653, 47, 2654, 3499, 31, 30, - 17, 16, 2662, 15, 3503, 14, 2664, 2665, 13, 12, - 11, 7, 6, 39, 38, 2671, 2672, 2673, 2674, 2675, - 2676, 2677, 2678, 2679, 2680, 37, 2682, 28, 27, 40, - 4, 3228, 2972, 2519, 3382, 1480, 0, 1481, 1482, 0, - 0, 0, 1717, 2423, 0, 0, 3534, 1483, 0, 2688, - 2689, 2690, 2691, 744, 2693, 2694, 3581, 2696, 3530, 3539, - 3532, 2698, 3546, 0, 0, 2703, 2704, 0, 2705, 3551, - 0, 2708, 2709, 2711, 2713, 2714, 2715, 2716, 2717, 2718, - 2720, 2722, 2723, 2724, 2726, 3337, 2728, 2729, 2731, 2733, - 2735, 2737, 2739, 2741, 2743, 2745, 2747, 2749, 2751, 2753, - 2755, 2757, 2759, 2761, 2763, 2765, 2766, 2767, 3573, 2769, - 3575, 2771, 3570, 2773, 2774, 3346, 2776, 2778, 2780, 0, - 3576, 0, 2783, 3343, 3536, 3506, 2787, 3508, 3509, 3510, - 2792, 2793, 2794, 2795, 2425, 3347, 3582, 1483, 0, 2812, - 3598, 0, 3600, 2806, 2807, 2808, 2809, 2810, 2811, 1483, - 0, 2815, 2816, 3592, 3593, 3376, 3377, 3563, 1483, 2818, - 0, 0, 1065, 1483, 2824, 1071, 1071, 0, 1483, 2827, - 2828, 2829, 2830, 2831, 0, 0, 3577, 3578, 0, 0, - 2838, 2839, 0, 2840, 0, 1483, 2843, 2845, 2389, 1483, - 2847, 0, 0, 3643, 3644, 0, 1480, 0, 1481, 1482, - 2859, 1483, 0, 0, 0, 3626, 0, 1483, 0, 3630, - 3631, 3632, 1483, 0, 3645, 0, 1483, 0, 0, 0, - 0, 1483, 0, 0, 2904, 2907, 2908, 2909, 2905, 2805, - 2906, 2910, 0, 0, 3566, 3567, 0, 0, 0, 0, - 1483, 2804, 0, 0, 0, 3661, 0, 1483, 0, 0, - 2803, 1483, 0, 0, 0, 2802, 0, 0, 0, 0, - 2801, 0, 0, 1483, 0, 0, 0, 0, 1483, 0, - 0, 0, 0, 3672, 0, 0, 0, 2800, 0, 1483, - 0, 2799, 0, 1483, 0, 0, 1480, 0, 1481, 1482, - 0, 0, 3694, 2798, 0, 0, 0, 0, 1480, 2797, - 1481, 1482, 1483, 0, 2791, 0, 0, 1480, 2790, 1481, - 1482, 0, 1480, 2789, 1481, 1482, 1483, 1480, 3723, 1481, - 1482, 3730, 0, 3732, 0, 3713, 0, 3714, 3715, 3716, - 1483, 0, 2786, 3703, 1480, 1483, 1481, 1482, 1480, 2785, - 1481, 1482, 0, 2784, 0, 0, 3229, 0, 3733, 87, - 1480, 3229, 1481, 1482, 0, 2782, 1480, 0, 1481, 1482, - 2775, 1480, 0, 1481, 1482, 1480, 1483, 1481, 1482, 0, - 1480, 2772, 1481, 1482, 0, 2770, 0, 1483, 0, 3666, - 2138, 1483, 2136, 0, 3763, 3734, 3743, 3755, 3742, 1480, - 3753, 1481, 1482, 0, 2768, 3750, 1480, 3752, 1481, 1482, - 1480, 0, 1481, 1482, 1483, 0, 0, 0, 2727, 0, - 3622, 3623, 1480, 0, 1481, 1482, 3915, 1480, 0, 1481, - 1482, 0, 2707, 3767, 0, 0, 0, 2706, 1480, 0, - 1481, 1482, 1480, 0, 1481, 1482, 0, 0, 0, 0, - 42, 2904, 2907, 2908, 2909, 2905, 0, 2906, 2910, 0, - 0, 1480, 0, 1481, 1482, 0, 3907, 3906, 2702, 0, - 0, 0, 0, 0, 3934, 1480, 3922, 1481, 1482, 2700, - 0, 3905, 0, 2692, 3926, 3927, 0, 0, 0, 1480, - 0, 1481, 1482, 0, 1480, 0, 1481, 1482, 0, 3973, - 3974, 3077, 3078, 3079, 3080, 3081, 2663, 3757, 3764, 3765, - 0, 0, 3731, 0, 0, 3917, 3918, 3919, 2138, 0, - 2136, 3096, 3977, 0, 0, 1480, 0, 1481, 1482, 0, - 0, 0, 0, 0, 0, 0, 1480, 0, 1481, 1482, - 1480, 0, 1481, 1482, 0, 0, 0, 0, 0, 3225, - 0, 0, 3980, 0, 4022, 3229, 3983, 0, 3759, 0, - 4013, 0, 0, 1480, 0, 1481, 1482, 0, 0, 1554, - 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, - 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1574, 1575, - 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, - 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, - 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, - 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, - 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, - 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, - 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, - 1646, 1647, 1648, 1649, 1650, 1651, 1653, 1654, 1655, 1656, - 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, - 1667, 1668, 1674, 1675, 1676, 1677, 1691, 1692, 1693, 1694, - 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, - 3978, 4023, 3228, 4007, 3997, 4006, 1483, 3228, 1744, 0, - 0, 4003, 0, 4005, 4041, 0, 0, 0, 0, 0, - 0, 0, 1752, 0, 0, 1745, 3910, 0, 0, 0, - 0, 3231, 87, 0, 0, 0, 4026, 0, 1717, 1483, - 0, 0, 0, 4025, 0, 0, 1744, 0, 0, 3249, - 2383, 2384, 1751, 1749, 1750, 1746, 0, 1747, 0, 4030, - 1752, 4043, 0, 1745, 0, 0, 0, 4046, 0, 0, - 4048, 0, 3914, 0, 0, 0, 0, 0, 0, 0, - 1748, 0, 0, 0, 0, 0, 0, 0, 1740, 1741, - 1751, 1749, 1750, 1746, 4055, 1747, 0, 0, 2657, 0, - 0, 0, 4065, 0, 0, 0, 0, 0, 0, 1484, - 0, 0, 0, 0, 0, 0, 0, 0, 1748, 0, - 0, 0, 0, 42, 0, 0, 4066, 0, 0, 4067, - 4091, 2652, 0, 0, 0, 87, 0, 0, 0, 0, - 1542, 0, 0, 0, 0, 0, 0, 0, 4076, 0, - 0, 0, 0, 0, 0, 1480, 0, 1481, 1482, 0, - 0, 4085, 0, 0, 1717, 0, 0, 0, 4027, 4097, - 0, 0, 0, 4095, 0, 3934, 4111, 3380, 4100, 4108, - 4105, 4102, 4101, 4099, 4104, 4103, 0, 0, 1480, 0, - 1481, 1482, 0, 0, 0, 0, 0, 0, 0, 3397, - 3398, 3228, 3399, 3401, 3403, 4130, 0, 0, 4153, 0, - 0, 0, 0, 4143, 0, 4135, 0, 4122, 4148, 0, - 0, 0, 0, 0, 4161, 0, 42, 0, 4163, 0, - 3416, 0, 0, 4174, 0, 3419, 0, 3421, 3422, 3423, - 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434, - 3435, 3436, 3437, 3439, 3441, 3443, 3445, 3447, 3449, 3451, - 3453, 3455, 3457, 3459, 3461, 3463, 3465, 3467, 3469, 3470, - 3472, 3473, 3474, 3476, 4122, 4194, 3478, 2016, 3480, 3481, - 3482, 4193, 4204, 3486, 3487, 3488, 3489, 3490, 3491, 3492, - 3493, 3494, 3495, 3496, 4210, 2138, 4208, 2136, 4197, 4207, - 4206, 4203, 3502, 4178, 4173, 4218, 3507, 4092, 4032, 4087, - 3511, 3512, 0, 3513, 3515, 4226, 3518, 3520, 3225, 3522, - 3523, 3524, 3525, 4234, 4232, 0, 0, 0, 0, 3533, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4051, 4243, 4244, 3974, 4242, 0, 0, 0, - 0, 4122, 0, 2138, 0, 2136, 0, 4241, 0, 0, - 4039, 0, 0, 0, 3557, 3558, 0, 0, 3562, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4169, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4086, - 1774, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 86, 44, 45, 88, 0, 0, 1863, 0, - 0, 0, 0, 3637, 0, 0, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 48, 76, 77, 0, 74, - 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 75, 0, 0, 0, 0, 0, 1723, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3656, 0, - 0, 3660, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 95, 0, 1024, 0, 0, - 2332, 0, 0, 1025, 0, 3673, 0, 0, 0, 0, - 0, 0, 4191, 2137, 0, 0, 677, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1029, 0, 0, 0, - 0, 0, 0, 0, 0, 83, 2021, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3696, - 0, 0, 0, 0, 0, 0, 0, 0, 1100, 0, - 0, 0, 3704, 0, 0, 0, 0, 0, 0, 3711, - 0, 0, 982, 983, 984, 985, 986, 987, 988, 989, - 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, - 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, - 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, - 1020, 1021, 1022, 1023, 0, 0, 0, 0, 0, 0, - 51, 54, 57, 56, 59, 0, 73, 0, 0, 82, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 61, 91, 90, 0, 0, 71, 72, - 58, 0, 0, 0, 0, 0, 80, 81, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3923, 0, - 0, 0, 0, 0, 0, 0, 0, 3930, 0, 0, - 63, 64, 0, 65, 66, 67, 68, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3940, 3941, 3942, - 0, 3944, 0, 3945, 3946, 0, 0, 0, 0, 3949, - 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, - 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, - 3970, 0, 3972, 3975, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2089, 2090, 2091, 2092, 60, 3984, 3985, - 3986, 3987, 3988, 3990, 3991, 3993, 3995, 3996, 3998, 2105, - 0, 0, 4002, 0, 0, 0, 4004, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2144, 2145, 0, 0, 0, 0, - 2168, 4031, 0, 2172, 2173, 0, 0, 0, 2178, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2190, 2191, 2192, 2193, 2194, 2195, 2196, - 2197, 2198, 2199, 0, 2201, 0, 0, 89, 2223, 2224, - 2225, 2226, 2227, 2228, 2229, 2230, 2232, 0, 2237, 0, - 2239, 2240, 2241, 0, 2243, 2244, 2245, 0, 2247, 2248, - 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, - 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, - 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, - 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, - 2289, 2290, 2291, 2292, 2296, 2297, 2298, 2299, 2300, 2301, - 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, - 2312, 2313, 2314, 2315, 2316, 2317, 2318, 0, 0, 0, - 0, 0, 2324, 0, 2326, 0, 2333, 2334, 2335, 2336, - 2337, 2338, 0, 0, 0, 0, 0, 94, 0, 0, - 0, 0, 0, 0, 0, 2349, 2350, 2351, 2352, 2353, - 2354, 2355, 2356, 0, 2358, 2359, 2360, 2361, 2362, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 190, 0, 0, 1071, 4177, 0, 0, 0, 4056, 0, - 0, 0, 0, 1826, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 129, 0, 151, 0, 0, 0, 0, - 0, 0, 4071, 0, 2403, 2404, 0, 0, 4074, 172, - 4075, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, - 2442, 0, 0, 4090, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 162, 0, 190, 0, 0, 1826, 150, - 0, 0, 1220, 0, 1226, 0, 1881, 0, 0, 4116, - 4117, 0, 0, 0, 959, 0, 0, 0, 129, 169, - 151, 0, 170, 4124, 4126, 4128, 0, 0, 0, 0, - 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, - 0, 4134, 2485, 0, 138, 139, 161, 160, 189, 0, - 0, 0, 0, 4156, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1454, 0, 162, 0, - 195, 0, 0, 195, 150, 0, 0, 730, 0, 0, - 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, - 1813, 4175, 0, 195, 169, 0, 0, 170, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1885, - 1886, 161, 160, 189, 0, 4198, 4200, 4202, 0, 0, - 0, 0, 0, 0, 736, 195, 736, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 155, 136, 158, 143, 135, 1813, 156, 157, 4223, 0, - 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, - 0, 0, 179, 144, 1827, 0, 4235, 4236, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 147, 145, 140, - 141, 142, 146, 0, 0, 0, 0, 0, 0, 137, - 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 155, 1887, 158, 0, 1884, - 0, 156, 157, 0, 0, 0, 0, 0, 173, 1827, - 1840, 1843, 1844, 1845, 1846, 1847, 1848, 179, 1849, 1850, - 1852, 1853, 1851, 1854, 1855, 1828, 1829, 1830, 1831, 1811, - 1812, 1841, 0, 1814, 0, 1815, 1816, 1817, 1818, 1819, - 1820, 1821, 1822, 1823, 0, 0, 1824, 1832, 1833, 1834, - 1835, 0, 1836, 1837, 1838, 1839, 0, 0, 1825, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 164, 0, 0, 0, 1840, 1843, 1844, 1845, 1846, - 1847, 1848, 0, 1849, 1850, 1852, 1853, 1851, 1854, 1855, - 1828, 1829, 1830, 1831, 1811, 1812, 1841, 0, 1814, 0, - 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 0, - 0, 1824, 1832, 1833, 1834, 1835, 0, 1836, 1837, 1838, - 1839, 0, 0, 1825, 0, 0, 0, 0, 0, 0, - 2661, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2667, 2668, 2669, 2670, 0, 0, 164, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, - 0, 0, 1786, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1542, 0, 0, 0, 0, - 0, 1803, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1842, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1944, 0, 152, 0, 0, 153, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1989, - 165, 0, 0, 0, 0, 0, 0, 177, 0, 0, - 0, 0, 0, 0, 0, 0, 2017, 0, 1842, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2028, 0, 0, 0, 0, 0, 0, 2032, - 0, 152, 0, 0, 153, 0, 0, 0, 185, 1774, - 2043, 2044, 2045, 2046, 2047, 2048, 2049, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, - 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, - 0, 166, 171, 168, 174, 175, 176, 178, 180, 181, - 182, 183, 0, 0, 0, 0, 0, 184, 186, 187, - 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, - 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 166, 171, 168, 174, - 175, 176, 178, 180, 181, 182, 183, 0, 0, 0, - 0, 0, 184, 186, 187, 188, 0, 0, 736, 0, - 736, 736, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 736, 195, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1528, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2082, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3042, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3068, - 3069, 3070, 0, 0, 3072, 0, 0, 3074, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3093, 3094, 3095, - 0, 0, 0, 0, 0, 0, 3100, 0, 0, 0, - 0, 3102, 0, 0, 3104, 3105, 3106, 0, 0, 0, - 3107, 3108, 0, 0, 3109, 0, 3110, 0, 0, 0, - 0, 0, 0, 3111, 0, 3112, 0, 0, 0, 3113, - 0, 3114, 0, 0, 3115, 0, 3116, 0, 3117, 0, - 3118, 0, 3119, 0, 3120, 0, 3121, 0, 3122, 0, - 3123, 0, 3124, 0, 3125, 0, 3126, 0, 3127, 0, - 3128, 0, 3129, 0, 3130, 0, 3131, 0, 3132, 0, - 0, 0, 3133, 0, 3134, 0, 3135, 0, 0, 3136, - 0, 3137, 0, 3138, 0, 2296, 3140, 0, 0, 3142, - 0, 0, 3144, 3145, 3146, 3147, 0, 0, 0, 0, - 3148, 2296, 2296, 2296, 2296, 2296, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3158, 0, 0, 0, - 0, 0, 0, 0, 3171, 0, 0, 3175, 0, 0, - 0, 0, 0, 0, 0, 0, 3178, 3179, 3180, 3181, - 3182, 3183, 0, 0, 0, 3184, 3185, 0, 3186, 0, - 3187, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 195, 0, 0, 0, 736, 736, 0, 0, - 0, 0, 0, 0, 1071, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3220, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 736, 0, 0, 195, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3250, 736, 0, 2409, 0, 0, 0, 0, 195, 0, - 0, 2413, 736, 2416, 0, 0, 2082, 0, 0, 0, - 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 736, 0, 736, 0, 0, - 0, 0, 0, 0, 0, 736, 0, 0, 1528, 736, - 3312, 0, 736, 736, 736, 736, 0, 736, 0, 736, - 736, 0, 736, 736, 736, 736, 736, 736, 0, 0, - 0, 0, 0, 0, 0, 1528, 736, 736, 1528, 736, - 1528, 195, 736, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 736, 0, 195, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, - 736, 0, 195, 195, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3405, 0, 195, - 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, - 0, 0, 0, 0, 0, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 736, 3420, 0, 0, 0, 1024, - 0, 0, 0, 0, 0, 1025, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2137, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2082, 0, 0, 0, - 0, 0, 0, 2575, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2596, 2597, 0, 0, 2601, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2606, 0, 0, 0, 0, 0, 0, 2609, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2612, 982, 983, 984, 985, 986, 987, - 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, - 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, - 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, - 1018, 1019, 1020, 1021, 1022, 1023, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 736, 736, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3618, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3642, 0, 0, 0, - 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1528, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1528, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3662, 0, 3663, 0, 3664, 0, - 3665, 0, 0, 0, 0, 0, 0, 0, 3668, 3669, - 0, 0, 0, 0, 0, 0, 0, 0, 3674, 0, - 0, 958, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3675, 0, 3676, 0, 3677, 0, 3678, 0, - 3679, 0, 3680, 0, 3681, 0, 3682, 0, 3683, 0, - 3684, 0, 3685, 0, 3686, 0, 3687, 0, 3688, 0, - 3689, 0, 3690, 0, 0, 3691, 0, 0, 0, 3692, - 0, 3693, 0, 0, 0, 0, 0, 3695, 0, 0, - 0, 0, 0, 713, 0, 0, 0, 0, 0, 735, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3712, - 0, 0, 0, 0, 2343, 0, 0, 0, 3717, 0, - 3718, 3719, 0, 3720, 0, 3721, 0, 0, 0, 0, - 3722, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 735, 0, 735, 0, 0, 0, 3751, 195, 0, - 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, - 3760, 0, 0, 3762, 0, 0, 2917, 0, 0, 0, - 0, 0, 0, 0, 0, 3766, 0, 0, 0, 0, - 0, 0, 0, 195, 0, 0, 736, 0, 0, 0, - 0, 3902, 0, 0, 0, 0, 0, 0, 0, 0, - 195, 0, 0, 0, 736, 0, 0, 2343, 195, 0, - 195, 0, 195, 195, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2966, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, - 0, 0, 736, 736, 736, 195, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3014, 3015, 3016, - 3017, 3018, 3019, 736, 0, 0, 0, 0, 0, 736, - 736, 0, 0, 736, 0, 736, 0, 0, 0, 0, - 4012, 736, 0, 0, 0, 0, 2082, 3030, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3038, 0, 0, 0, 0, 736, 0, 0, 0, - 0, 736, 0, 0, 0, 736, 736, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, - 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 195, 195, 0, 0, 195, 0, 195, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, - 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 195, 0, 0, 0, 0, 0, 0, 195, 0, 0, - 0, 0, 736, 95, 0, 0, 1024, 0, 0, 0, - 0, 964, 1025, 977, 978, 979, 965, 0, 0, 966, - 967, 0, 968, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 973, 0, - 980, 981, 0, 0, 0, 0, 0, 4054, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1528, 0, 2343, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3348, - 3349, 0, 0, 4068, 0, 0, 4069, 0, 4070, 0, - 0, 982, 983, 984, 985, 986, 987, 988, 989, 990, - 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3350, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4154, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3302, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4170, - 0, 4171, 0, 4172, 0, 0, 0, 0, 0, 0, - 0, 3340, 0, 0, 0, 735, 1439, 735, 735, 0, - 0, 0, 0, 0, 0, 3354, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3351, 3352, 0, 0, 735, - 0, 0, 0, 0, 0, 0, 3372, 0, 0, 3375, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1527, 0, - 0, 195, 0, 4221, 0, 4222, 0, 0, 0, 195, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 929, 0, 0, 0, 0, 0, 933, 0, 195, 0, - 930, 931, 0, 195, 0, 932, 934, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 915, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 736, 0, 0, 0, 0, 0, 195, 0, - 0, 0, 0, 0, 3535, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 734, 736, - 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, - 736, 736, 0, 0, 0, 736, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1528, 736, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 195, 195, 195, 195, 195, 195, - 1096, 0, 1103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3596, - 0, 0, 0, 195, 195, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3611, - 0, 3612, 3613, 3614, 0, 0, 0, 0, 195, 0, - 0, 0, 0, 735, 735, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, - 0, 0, 0, 0, 736, 0, 0, 0, 0, 735, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 735, 0, 735, 0, 0, 0, 0, 0, - 0, 0, 735, 0, 0, 1527, 735, 0, 0, 735, - 735, 735, 735, 0, 735, 0, 735, 735, 0, 735, - 735, 735, 735, 735, 735, 0, 0, 0, 0, 0, - 0, 0, 1527, 735, 735, 1527, 735, 1527, 0, 735, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 735, 0, 0, 0, 0, 0, 0, 0, 736, - 0, 0, 0, 0, 735, 0, 0, 735, 0, 0, - 0, 736, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, - 0, 735, 0, 0, 0, 0, 0, 195, 0, 0, - 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 736, 0, 0, 0, 1528, 0, - 0, 736, 736, 1528, 195, 195, 195, 195, 195, 0, - 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, - 0, 0, 195, 0, 195, 0, 0, 195, 195, 195, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 736, 0, 0, 1528, 0, - 0, 0, 0, 736, 0, 0, 0, 0, 195, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 195, 0, 0, 195, 0, 0, 0, - 0, 735, 735, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1527, 0, 0, - 0, 0, 0, 0, 0, 0, 2146, 0, 0, 0, - 0, 0, 0, 0, 0, 1527, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1284, 0, 1284, 1284, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1453, 0, - 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 916, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4052, 0, 0, 195, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 735, 0, 0, 0, 0, 195, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 193, 0, 0, 678, 0, 0, 195, 0, 195, 195, - 195, 0, 0, 0, 0, 0, 0, 0, 736, 736, - 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, - 735, 0, 0, 0, 0, 0, 0, 0, 0, 1052, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1072, 1072, 0, 0, - 0, 0, 0, 735, 0, 678, 0, 736, 736, 736, - 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 735, 0, 0, 735, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 735, 0, 0, 0, 0, 0, 0, 735, - 735, 735, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 735, 0, 1726, 1727, 0, 0, 735, 735, 0, 0, - 735, 0, 735, 0, 0, 0, 0, 0, 735, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1780, 0, 736, 0, 736, 0, 195, 0, - 0, 0, 0, 735, 0, 0, 0, 1798, 735, 0, - 0, 0, 735, 735, 0, 0, 0, 1528, 1857, 0, - 0, 195, 0, 0, 736, 0, 736, 0, 1866, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1096, 0, 1893, 0, 0, 0, 0, 0, 0, - 0, 1902, 0, 0, 0, 1904, 0, 0, 1907, 1908, - 1910, 1910, 0, 1910, 0, 1910, 1910, 0, 1919, 1910, - 1910, 1910, 1910, 1910, 736, 0, 0, 0, 0, 0, - 0, 0, 1939, 1940, 0, 1096, 0, 195, 1945, 0, - 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, - 1987, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2009, 0, 0, 2013, 0, 0, 0, + 1656, 1657, 1658, 1659, 1660, 1662, 1663, 1664, 1665, 1666, + 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, + 1677, 1683, 1684, 1685, 1686, 1700, 1701, 1702, 1703, 1704, + 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 3997, + 4042, 3247, 4026, 4016, 4025, 0, 3247, 0, 1754, 4045, + 4022, 0, 4024, 4060, 0, 0, 0, 0, 0, 0, + 0, 3929, 1762, 0, 0, 1755, 0, 0, 0, 0, + 3250, 87, 0, 0, 0, 0, 0, 0, 0, 0, + 4044, 0, 0, 0, 1726, 0, 0, 0, 3268, 0, + 1750, 1751, 1761, 1759, 1760, 1756, 4062, 1757, 4049, 0, + 0, 0, 4065, 0, 0, 0, 0, 0, 0, 0, + 0, 3933, 0, 0, 0, 0, 0, 0, 0, 4067, + 1758, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4074, 0, 0, 42, 0, 0, 0, 0, 4084, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1229, 4085, 1235, 0, 4086, 0, 0, 0, 4110, + 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4095, 0, 0, 4104, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4046, 0, 1493, 0, 0, 0, 0, + 1726, 3953, 4130, 4141, 4127, 4119, 3399, 4124, 4121, 4120, + 4118, 4123, 4114, 4122, 4116, 1463, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1551, 0, 3416, 3417, + 3247, 3418, 3420, 3422, 4149, 4172, 42, 0, 4162, 0, + 0, 0, 0, 0, 4154, 4167, 0, 0, 0, 0, + 0, 0, 0, 4180, 0, 0, 0, 0, 0, 3435, + 4141, 4182, 4193, 0, 3438, 0, 3440, 3441, 3442, 3444, + 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, + 3455, 3456, 3458, 3460, 3462, 3464, 3466, 3468, 3470, 3472, + 3474, 3476, 3478, 3480, 3482, 3484, 3486, 3488, 3489, 3491, + 3492, 3493, 3495, 4197, 4216, 3497, 4192, 3499, 3500, 3501, + 4111, 2153, 3505, 3506, 3507, 3508, 3509, 3510, 3511, 3512, + 3513, 3514, 3515, 4222, 2151, 4229, 4226, 4227, 4225, 4223, + 2031, 3521, 4213, 4051, 4212, 3526, 4106, 4141, 4237, 3530, + 3531, 0, 3532, 3534, 0, 3537, 3539, 4251, 3541, 3542, + 3543, 3544, 0, 4253, 3244, 4245, 0, 0, 3552, 0, + 1032, 0, 0, 2347, 0, 0, 1033, 4070, 0, 2153, + 0, 0, 4261, 0, 0, 0, 2152, 4262, 4263, 0, + 3993, 0, 2151, 0, 4260, 0, 0, 0, 0, 4058, + 0, 0, 0, 3576, 3577, 0, 0, 3581, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4188, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4196, 0, 0, 0, 0, 0, 0, 0, 0, 1841, + 0, 0, 0, 0, 4105, 989, 990, 991, 992, 993, + 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, + 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, + 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, + 1024, 1025, 1026, 1027, 1028, 1029, 1030, 0, 0, 0, + 0, 0, 3656, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1789, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3675, 0, 0, + 3679, 0, 0, 0, 1801, 0, 0, 1878, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1818, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3692, 0, 0, 4210, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1828, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 965, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3715, 0, + 0, 0, 0, 0, 0, 0, 1959, 0, 0, 0, + 0, 3723, 0, 0, 0, 0, 0, 0, 3730, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2036, 197, 0, 0, 197, + 1842, 2004, 0, 736, 0, 0, 0, 0, 742, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2032, 197, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2043, 197, 0, 0, 0, 0, + 0, 2047, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 0, + 0, 0, 742, 197, 742, 0, 1855, 1858, 1859, 1860, + 1861, 1862, 1863, 0, 1864, 1865, 1867, 1868, 1866, 1869, + 1870, 1843, 1844, 1845, 1846, 1826, 1827, 1856, 0, 1829, + 0, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, + 0, 0, 1839, 1847, 1848, 1849, 1850, 3942, 1851, 1852, + 1853, 1854, 0, 0, 1840, 0, 3949, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3959, 3960, 3961, 0, + 3963, 0, 3964, 3965, 0, 0, 0, 0, 3968, 3969, + 3970, 3971, 3972, 3973, 3974, 3975, 3976, 3977, 3978, 3979, + 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, + 0, 3991, 3994, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4003, 4004, 4005, + 4006, 4007, 4009, 4010, 4012, 4014, 4015, 4017, 0, 0, + 0, 4021, 0, 0, 0, 4023, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4050, 0, 2104, 2105, 2106, 2107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2097, 0, 0, 2120, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2159, 2160, 0, 0, 0, 0, 2183, + 0, 0, 2187, 2188, 0, 0, 0, 2193, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1857, + 0, 0, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, + 2213, 2214, 0, 2216, 0, 0, 0, 2238, 2239, 2240, + 2241, 2242, 2243, 2244, 2245, 2247, 0, 2252, 0, 2254, + 2255, 2256, 0, 2258, 2259, 2260, 0, 2262, 2263, 2264, + 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, + 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, + 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, + 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, + 2305, 2306, 2307, 2311, 2312, 2313, 2314, 2315, 2316, 2317, + 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, + 2328, 2329, 2330, 2331, 2332, 2333, 0, 0, 0, 0, + 0, 2339, 0, 2341, 0, 2348, 2349, 2350, 2351, 2352, + 2353, 0, 0, 0, 0, 0, 0, 4075, 0, 0, + 0, 0, 0, 0, 2364, 2365, 2366, 2367, 2368, 2369, + 2370, 2371, 0, 2373, 2374, 2375, 2376, 2377, 0, 0, + 0, 4090, 0, 0, 0, 0, 0, 4093, 0, 4094, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4109, 1080, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 192, 4135, 4136, + 0, 0, 0, 0, 0, 0, 0, 0, 2997, 2420, + 2421, 0, 4143, 4145, 4147, 0, 0, 0, 0, 0, + 131, 0, 153, 0, 0, 0, 0, 0, 0, 0, + 4153, 0, 192, 0, 0, 2459, 174, 0, 0, 0, + 0, 2426, 4175, 0, 0, 0, 0, 0, 0, 2430, + 0, 2433, 0, 0, 2097, 131, 0, 153, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 164, 174, 0, 0, 0, 0, 152, 0, 0, 0, + 4194, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 197, 0, 0, 171, 2502, 0, 172, + 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, + 0, 152, 0, 0, 4217, 4219, 4221, 0, 0, 0, + 0, 1900, 1901, 163, 162, 191, 0, 0, 0, 0, + 742, 171, 742, 742, 172, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4242, 0, 0, + 0, 0, 0, 0, 742, 197, 140, 141, 163, 162, + 191, 0, 0, 0, 0, 4254, 4255, 0, 0, 0, + 0, 0, 0, 0, 86, 44, 45, 88, 0, 0, + 0, 0, 0, 1537, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 92, 0, 0, 0, 48, 76, 77, + 0, 74, 78, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97, 0, 157, 1902, 160, + 1032, 1899, 0, 158, 159, 0, 1033, 0, 0, 0, + 175, 0, 0, 0, 0, 62, 2152, 0, 0, 181, + 0, 0, 0, 0, 2097, 0, 0, 95, 0, 0, + 0, 2592, 157, 138, 160, 145, 137, 0, 158, 159, + 0, 0, 2613, 2614, 0, 175, 2618, 0, 0, 0, + 0, 0, 0, 0, 181, 146, 0, 0, 2623, 0, + 0, 0, 0, 0, 0, 2626, 0, 0, 0, 149, + 147, 142, 143, 144, 148, 0, 0, 83, 0, 0, + 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, + 150, 2629, 0, 0, 0, 989, 990, 991, 992, 993, + 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, + 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, + 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, + 1024, 1025, 1026, 1027, 1028, 1029, 1030, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 54, 57, 56, 59, 0, 73, 0, + 0, 82, 79, 166, 0, 2678, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2684, 2685, 2686, 2687, 0, + 0, 0, 0, 0, 0, 61, 91, 90, 0, 0, + 71, 72, 58, 0, 0, 0, 197, 0, 80, 81, + 742, 742, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1841, 0, 0, 0, 197, + 1551, 0, 0, 0, 161, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 742, 63, 64, 197, 65, 66, 67, 68, 0, + 0, 0, 0, 0, 0, 0, 742, 0, 0, 161, + 0, 0, 0, 197, 0, 0, 0, 742, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 742, 0, 742, 0, 0, 0, 0, 0, 0, 60, + 742, 0, 0, 1537, 742, 0, 0, 742, 742, 742, + 742, 0, 742, 0, 742, 742, 0, 742, 742, 742, + 742, 742, 742, 154, 0, 0, 155, 0, 0, 0, + 1537, 742, 742, 1537, 742, 1537, 197, 742, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 167, 154, 0, + 0, 155, 1828, 0, 179, 0, 0, 0, 0, 742, + 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 742, 0, 0, 742, 1789, 197, 197, 89, + 0, 0, 167, 0, 0, 0, 0, 0, 0, 179, + 0, 0, 0, 0, 197, 187, 0, 0, 0, 0, + 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 742, + 0, 0, 0, 0, 0, 0, 2936, 0, 0, 0, + 187, 0, 0, 0, 0, 0, 1842, 0, 0, 0, + 0, 0, 168, 173, 170, 176, 177, 178, 180, 182, + 183, 184, 185, 0, 0, 0, 0, 0, 186, 188, + 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 168, 173, 170, + 176, 177, 178, 180, 182, 183, 184, 185, 0, 94, + 0, 0, 0, 186, 188, 189, 190, 0, 0, 0, + 0, 2985, 1855, 1858, 1859, 1860, 1861, 1862, 1863, 0, + 1864, 1865, 1867, 1868, 1866, 1869, 1870, 1843, 1844, 1845, + 1846, 1826, 1827, 1856, 0, 1829, 0, 1830, 1831, 1832, + 1833, 1834, 1835, 1836, 1837, 1838, 0, 0, 1839, 1847, + 1848, 1849, 1850, 0, 1851, 1852, 1853, 1854, 0, 0, + 1840, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3033, 3034, 3035, + 3036, 3037, 3038, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, + 742, 0, 0, 0, 0, 0, 2097, 3049, 0, 3061, + 70, 0, 0, 0, 742, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, + 0, 3057, 0, 0, 0, 0, 3087, 3088, 3089, 0, + 0, 3091, 0, 0, 3093, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3112, 3113, 3114, 0, 0, 0, + 0, 0, 0, 3119, 0, 742, 0, 0, 3121, 0, + 0, 3123, 3124, 3125, 0, 1537, 0, 3126, 3127, 0, + 0, 3128, 0, 3129, 0, 0, 0, 0, 0, 0, + 3130, 0, 3131, 1537, 0, 0, 3132, 0, 3133, 0, + 0, 3134, 0, 3135, 0, 3136, 0, 3137, 0, 3138, + 0, 3139, 0, 3140, 0, 3141, 0, 3142, 0, 3143, + 0, 3144, 0, 3145, 0, 3146, 0, 3147, 0, 3148, + 0, 3149, 0, 3150, 0, 3151, 0, 0, 0, 3152, + 0, 3153, 0, 3154, 0, 0, 3155, 0, 3156, 0, + 3157, 0, 2311, 3159, 0, 1857, 3161, 0, 0, 3163, + 3164, 3165, 3166, 0, 0, 0, 0, 3167, 2311, 2311, + 2311, 2311, 2311, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3177, 0, 0, 0, 0, 0, 0, + 0, 3190, 0, 0, 3194, 0, 0, 0, 0, 0, + 0, 0, 0, 3197, 3198, 3199, 3200, 3201, 3202, 0, + 0, 0, 3203, 3204, 0, 3205, 0, 3206, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2358, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1080, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 964, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3239, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 197, 0, 0, 0, 0, 742, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3269, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, + 0, 0, 742, 0, 0, 0, 719, 0, 0, 0, + 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 0, 0, 742, 0, 0, 2358, 197, + 0, 197, 0, 197, 197, 0, 0, 0, 0, 3331, + 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, + 0, 0, 0, 0, 0, 0, 0, 3321, 0, 0, + 0, 0, 0, 0, 0, 0, 741, 0, 741, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3359, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3373, 0, 0, + 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, + 0, 0, 0, 742, 742, 742, 197, 0, 3391, 0, + 0, 3394, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 742, 0, 3424, 0, 0, 0, + 742, 742, 0, 0, 742, 0, 742, 0, 0, 0, + 0, 0, 742, 0, 921, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3439, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, + 0, 0, 742, 0, 0, 0, 742, 742, 0, 0, + 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1896, 0, 0, 0, 0, + 0, 0, 740, 0, 0, 0, 0, 131, 0, 153, + 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, + 0, 197, 0, 174, 0, 0, 0, 0, 0, 0, + 0, 0, 197, 197, 0, 0, 197, 0, 197, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, + 0, 0, 0, 0, 0, 197, 1105, 164, 1112, 0, + 0, 0, 0, 152, 0, 0, 3554, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 171, 0, 0, 172, 0, 197, 0, + 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1900, 1901, + 163, 162, 191, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3615, 3637, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1537, 0, 2358, + 0, 3630, 0, 3631, 3632, 3633, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3661, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 157, 1902, 160, 0, 1899, 0, + 158, 159, 0, 0, 0, 0, 0, 175, 0, 0, + 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, + 0, 0, 0, 3681, 0, 3682, 0, 3683, 0, 3684, + 0, 0, 0, 0, 0, 0, 0, 3687, 3688, 0, + 0, 0, 0, 0, 0, 0, 0, 3693, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3694, 0, 3695, 0, 3696, 0, 3697, 0, 3698, + 0, 3699, 0, 3700, 0, 3701, 0, 3702, 0, 3703, + 0, 3704, 0, 3705, 0, 3706, 0, 3707, 0, 3708, + 0, 3709, 0, 0, 3710, 0, 0, 0, 3711, 0, + 3712, 0, 0, 0, 0, 0, 3714, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3731, 0, + 0, 0, 0, 0, 0, 0, 0, 3736, 0, 3737, + 3738, 0, 3739, 0, 3740, 166, 0, 0, 0, 3741, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 197, 0, 0, 0, 3770, 0, 0, 0, + 197, 0, 0, 0, 0, 0, 0, 0, 0, 3779, + 0, 742, 3781, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3785, 0, 0, 742, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3921, 0, 0, 0, 741, 1448, 741, 741, 0, 0, + 0, 197, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 161, 0, 0, 0, 0, 0, 0, 741, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1536, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, + 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 742, 0, 0, 0, 0, 0, 0, 742, + 0, 0, 0, 742, 742, 0, 0, 0, 742, 0, + 154, 0, 0, 155, 0, 0, 0, 0, 0, 4031, + 0, 0, 0, 0, 1537, 742, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 197, 197, 197, + 197, 197, 197, 0, 167, 0, 0, 0, 0, 0, + 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 197, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 187, 0, 1293, 0, 1293, 1293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 742, 1462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, + 173, 170, 176, 177, 178, 180, 182, 183, 184, 185, + 0, 0, 0, 0, 0, 186, 188, 189, 190, 0, + 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, - 1284, 0, 0, 0, 0, 736, 0, 736, 0, 0, - 0, 0, 0, 1527, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 741, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 741, 4071, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 741, 4087, 0, 0, 4088, 0, 4089, 0, 0, + 0, 741, 742, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 741, 0, 741, 0, 0, 0, + 0, 0, 0, 0, 741, 0, 0, 1536, 741, 0, + 0, 741, 741, 741, 741, 742, 741, 0, 741, 741, + 0, 741, 741, 741, 741, 741, 741, 0, 0, 0, + 197, 0, 0, 742, 1536, 741, 741, 1536, 741, 1536, + 0, 741, 0, 0, 0, 0, 0, 0, 0, 742, + 0, 0, 0, 1537, 0, 0, 742, 742, 1537, 197, + 197, 197, 197, 197, 0, 0, 0, 0, 0, 4173, + 0, 197, 0, 741, 0, 0, 0, 197, 0, 197, + 0, 0, 197, 197, 197, 0, 741, 0, 0, 741, + 0, 0, 0, 0, 0, 0, 0, 0, 4189, 0, + 4190, 0, 4191, 0, 1736, 1737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, + 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, + 742, 0, 0, 1537, 0, 1795, 0, 0, 742, 0, + 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, + 1813, 0, 0, 0, 0, 0, 0, 197, 0, 0, + 0, 1872, 4240, 0, 4241, 0, 0, 0, 0, 0, + 0, 1881, 0, 0, 0, 0, 0, 0, 197, 0, + 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1105, 0, 1908, 0, 0, 0, + 0, 0, 0, 0, 1917, 0, 0, 0, 1919, 0, + 0, 1922, 1923, 1925, 1925, 0, 1925, 0, 1925, 1925, + 0, 1934, 1925, 1925, 1925, 1925, 1925, 0, 0, 0, + 0, 0, 0, 0, 0, 1954, 1955, 0, 1105, 0, + 0, 1960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 922, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2002, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2024, 0, 0, 2028, + 0, 0, 0, 741, 741, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 741, 742, + 0, 0, 0, 0, 0, 0, 195, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1293, 0, 0, 0, 0, 0, 684, + 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 1060, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, + 0, 0, 0, 0, 1081, 1081, 0, 0, 0, 1536, + 0, 0, 0, 684, 0, 0, 0, 0, 2161, 0, + 0, 0, 0, 0, 0, 0, 0, 1536, 0, 0, + 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 197, 197, 197, 0, 0, 0, 0, + 0, 0, 0, 742, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1284, 1284, 0, 0, 0, 0, 736, 0, 0, 0, - 0, 0, 0, 0, 0, 2070, 0, 0, 0, 678, - 0, 678, 195, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1293, 1293, 0, 0, 0, 0, 0, + 0, 0, 742, 742, 742, 742, 0, 0, 2085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 736, 195, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2132, 0, 0, 0, - 0, 0, 0, 678, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 735, 0, 0, 0, 0, 736, 0, 0, 0, - 0, 1529, 0, 0, 0, 0, 736, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1528, 736, 0, 736, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147, + 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2930, 0, 0, 0, - 0, 0, 0, 0, 736, 2343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, + 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 195, 736, 0, 0, 735, + 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, + 0, 742, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1537, 0, 0, 0, 197, 0, 0, 742, + 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, + 741, 0, 0, 0, 0, 0, 0, 741, 741, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, - 0, 0, 0, 735, 0, 0, 736, 735, 735, 0, - 1284, 0, 735, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1527, 735, - 736, 0, 0, 0, 0, 195, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, - 0, 736, 0, 0, 0, 0, 0, 0, 0, 2380, + 0, 0, 0, 1293, 0, 0, 0, 0, 741, 0, + 0, 0, 0, 0, 741, 741, 0, 0, 741, 0, + 741, 0, 0, 0, 0, 0, 741, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 197, 0, 0, 742, 0, 0, 0, 0, + 0, 0, 0, 2395, 0, 0, 0, 0, 742, 0, + 0, 741, 0, 0, 0, 0, 741, 0, 0, 0, + 741, 741, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1795, + 0, 0, 1293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2393, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1105, 742, 0, 0, 0, 0, 0, 0, + 742, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1780, 0, 0, 1284, 0, 0, 0, 0, 0, 0, - 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1096, 0, 0, 0, 0, 0, 0, - 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1052, 0, 0, 0, 0, - 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, - 0, 1103, 0, 0, 0, 0, 0, 0, 2506, 2507, - 2508, 0, 0, 0, 0, 0, 0, 0, 678, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1096, - 0, 0, 0, 0, 0, 1103, 1902, 0, 0, 1902, - 0, 1902, 0, 0, 0, 0, 0, 2539, 0, 0, + 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, + 1112, 0, 0, 0, 0, 0, 0, 2523, 2524, 2525, + 0, 684, 0, 684, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1105, 0, + 0, 0, 0, 0, 1112, 1917, 0, 0, 1917, 0, + 1917, 0, 0, 0, 0, 0, 2556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1096, 0, 0, 0, 0, 2132, 0, 0, - 0, 2132, 2132, 0, 0, 1529, 735, 0, 1529, 0, - 1529, 678, 0, 0, 0, 0, 0, 0, 735, 0, + 0, 1536, 0, 741, 0, 684, 0, 0, 0, 0, + 0, 1105, 0, 0, 0, 0, 2147, 0, 0, 0, + 2147, 2147, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1961, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 678, 0, 0, 735, + 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2015, 678, 0, 0, 0, 735, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, - 0, 735, 0, 0, 0, 1527, 678, 0, 735, 735, - 1527, 0, 0, 0, 0, 2041, 2042, 678, 678, 678, - 678, 678, 678, 678, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2617, 0, + 0, 0, 0, 0, 0, 742, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 735, 0, 0, 1527, 0, 0, 0, 0, - 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1284, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1537, 742, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, + 2358, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 197, 742, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 684, 0, 0, 0, + 0, 0, 0, 0, 0, 742, 2949, 0, 0, 0, + 197, 0, 0, 0, 0, 0, 0, 0, 0, 1060, + 0, 0, 0, 0, 742, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, + 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, + 0, 0, 0, 741, 0, 0, 0, 741, 741, 0, + 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1538, 0, 0, 0, 0, 1536, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1538, 0, 0, 1538, 0, 1538, 684, 0, 0, 0, + 0, 0, 0, 0, 0, 2882, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1976, 0, 0, 0, + 0, 2899, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2030, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 741, 0, 0, 684, 0, 0, 0, 0, 0, + 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, + 2056, 2057, 684, 684, 684, 684, 684, 684, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, - 1529, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1529, 0, + 0, 741, 0, 0, 0, 0, 0, 0, 0, 2981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2408, 0, 0, 0, + 0, 0, 0, 3005, 0, 0, 0, 1917, 1917, 0, + 0, 0, 3010, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2880, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3586, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, + 0, 2147, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 684, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 735, 735, 0, 0, 0, - 0, 0, 0, 0, 2015, 0, 0, 0, 0, 0, + 0, 0, 0, 741, 0, 0, 0, 1536, 0, 0, + 741, 741, 1536, 0, 0, 0, 0, 0, 0, 0, + 0, 2147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2962, 0, - 0, 0, 0, 0, 735, 735, 735, 735, 1961, 0, + 0, 0, 0, 1538, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1072, 2393, 0, 0, 0, 0, - 0, 0, 2986, 0, 0, 0, 1902, 1902, 0, 0, - 0, 2991, 0, 1052, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3002, 0, - 678, 0, 0, 0, 0, 0, 0, 2015, 678, 0, - 678, 0, 678, 2432, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 741, 0, 0, 1536, 0, 0, + 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3179, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1293, 0, + 0, 0, 0, 0, 0, 3398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3224, 0, 2030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1293, 0, 0, 0, 0, 0, 0, + 3251, 1925, 0, 0, 0, 0, 0, 0, 0, 95, + 0, 0, 1032, 0, 0, 0, 0, 970, 1033, 984, + 985, 986, 971, 0, 1976, 972, 973, 0, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1081, 0, 0, 0, 979, 0, 987, 988, 0, 0, + 0, 0, 0, 741, 0, 0, 0, 0, 0, 1060, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2132, 0, 0, 0, 0, 2509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 735, 0, 735, 0, 0, 0, 0, 0, 0, + 0, 684, 0, 0, 1105, 0, 0, 0, 2030, 684, + 0, 684, 2408, 684, 2449, 3367, 3368, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 989, 990, 991, + 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, + 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, + 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, + 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1527, 0, 0, 0, 0, 0, - 2132, 735, 0, 735, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3605, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3369, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 741, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 678, 0, 0, 0, 735, 0, 0, - 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 735, 678, 678, 0, 0, 678, 0, 2603, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, - 0, 0, 0, 0, 678, 3160, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1284, 0, 0, + 0, 0, 0, 0, 0, 0, 741, 741, 741, 741, + 0, 0, 0, 1872, 0, 0, 0, 0, 0, 0, + 0, 3370, 3371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 678, 0, 0, 0, 0, 0, 0, 2614, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1910, 0, - 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, - 0, 0, 735, 0, 735, 0, 3205, 0, 0, 0, + 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, + 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 684, 684, 0, 0, 684, 0, 2620, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, + 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1284, 0, 0, 0, 0, 0, 0, 3232, 1910, 0, - 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 935, 0, 0, 0, + 0, 684, 939, 0, 0, 0, 936, 937, 2631, 0, + 0, 938, 940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1529, 0, 2015, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2408, 2408, 0, + 0, 0, 0, 741, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1536, 1538, 0, 2030, + 0, 0, 0, 741, 0, 741, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3669, 3670, 3671, 3672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1096, 0, 0, 0, 0, 0, 0, 0, 2393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, + 0, 0, 0, 0, 741, 0, 741, 0, 0, 0, + 0, 0, 0, 3747, 0, 3747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, + 0, 0, 0, 3775, 0, 3777, 0, 0, 0, 0, + 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, + 1976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, - 0, 678, 0, 735, 0, 0, 0, 0, 0, 1961, - 1857, 0, 0, 1527, 735, 0, 735, 0, 0, 0, + 0, 0, 0, 2408, 0, 0, 0, 0, 0, 0, + 0, 684, 0, 0, 0, 0, 684, 0, 0, 3944, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 735, 735, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, - 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3747, 0, 741, + 0, 0, 0, 0, 3747, 0, 3747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, - 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2393, 2393, 735, 0, 735, 0, + 0, 0, 0, 0, 1538, 2408, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 684, 684, 684, + 684, 684, 684, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 741, 684, 684, 0, 0, + 0, 0, 0, 0, 0, 1536, 741, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 741, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 678, 678, 678, 678, 678, 678, - 0, 0, 0, 3650, 3651, 3652, 3653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 678, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, + 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2408, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, + 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4091, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4099, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2408, 0, 4107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1293, 1293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1081, 0, + 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4157, 0, 0, 0, 0, + 0, 0, 0, 1538, 0, 0, 0, 0, 1538, 684, + 684, 684, 684, 684, 0, 0, 0, 0, 0, 0, + 0, 3267, 0, 0, 0, 0, 0, 1976, 0, 684, + 0, 0, 684, 3275, 2030, 4099, 0, 0, 0, 3807, + 3809, 3808, 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3810, + 3811, 812, 0, 0, 0, 0, 0, 0, 0, 2408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 684, 1872, 0, + 4157, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1538, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, + 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3728, 0, 3728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3756, 0, 3758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2393, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3925, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1284, - 0, 0, 0, 0, 0, 1072, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1529, 0, - 0, 0, 0, 1529, 678, 678, 678, 678, 678, 0, - 0, 0, 0, 0, 0, 0, 3248, 0, 0, 0, - 0, 0, 1961, 0, 678, 0, 0, 678, 3256, 2015, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3728, 0, 0, 0, 0, 0, - 0, 3728, 0, 3728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2393, 0, 0, 0, 0, 0, 1529, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3815, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3823, 3824, + 0, 0, 3899, 3898, 3897, 0, 684, 3895, 3896, 3894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 678, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 684, 3900, 935, 0, 788, 789, 3901, 3902, + 939, 3903, 791, 792, 936, 937, 0, 786, 790, 938, + 940, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 684, 0, 684, 684, 684, 3804, 3805, 3806, 3812, + 3813, 3814, 3825, 3872, 3873, 3881, 3883, 891, 3882, 3884, + 3885, 3886, 3889, 3890, 3891, 3892, 3887, 3888, 3893, 3787, + 3791, 3788, 3789, 3790, 3802, 3792, 3793, 3794, 3795, 3796, + 3797, 3798, 3799, 3800, 3801, 3803, 3904, 3905, 3906, 3907, + 3908, 3909, 3818, 3822, 3821, 3819, 3820, 3816, 3817, 3844, + 3843, 3845, 3846, 3847, 3848, 3849, 3850, 3852, 3851, 3853, + 3854, 3855, 3856, 3857, 3858, 3826, 3827, 3830, 3831, 3829, + 3828, 3832, 3841, 3842, 3833, 3834, 3835, 3836, 3837, 3838, + 3840, 3839, 3859, 3860, 3861, 3862, 3863, 3865, 3864, 3868, + 3869, 3867, 3866, 3871, 3870, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 941, 0, + 942, 0, 0, 946, 0, 0, 0, 948, 947, 0, + 949, 911, 910, 0, 0, 943, 944, 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3910, 3911, 3912, + 3913, 3914, 3915, 3916, 3917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1538, 0, 0, 0, 1976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4072, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4080, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2393, 0, 4088, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1284, 1284, 3788, 3790, 3789, 3855, 3856, 3857, 3858, 3859, - 3860, 3861, 3791, 3792, 806, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 678, 0, 678, 678, - 678, 0, 4138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4080, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1857, 0, 4138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2883,4546 +2851,4543 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3804, 3805, 0, 0, 3880, 3879, 3878, 1961, 0, - 3876, 3877, 3875, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1529, 0, 0, - 0, 1961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3881, 929, 0, 782, - 783, 3882, 3883, 933, 3884, 785, 786, 930, 931, 0, - 780, 784, 932, 934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1961, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3785, - 3786, 3787, 3793, 3794, 3795, 3806, 3853, 3854, 3862, 3864, - 885, 3863, 3865, 3866, 3867, 3870, 3871, 3872, 3873, 3868, - 3869, 3874, 3768, 3772, 3769, 3770, 3771, 3783, 3773, 3774, - 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3784, 3885, - 3886, 3887, 3888, 3889, 3890, 3799, 3803, 3802, 3800, 3801, - 3797, 3798, 3825, 3824, 3826, 3827, 3828, 3829, 3830, 3831, - 3833, 3832, 3834, 3835, 3836, 3837, 3838, 3839, 3807, 3808, - 3811, 3812, 3810, 3809, 3813, 3822, 3823, 3814, 3815, 3816, - 3817, 3818, 3819, 3821, 3820, 3840, 3841, 3842, 3843, 3844, - 3846, 3845, 3849, 3850, 3848, 3847, 3852, 3851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 935, 0, 936, 0, 0, 940, 0, 0, 0, - 942, 941, 0, 943, 905, 904, 0, 0, 937, 938, - 0, 939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3891, 3892, 3893, 3894, - 3895, 3896, 3897, 3898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1976, 0, 0, 400, 0, 0, 0, 0, 0, 0, + 1431, 1415, 534, 0, 1357, 1434, 1325, 1344, 1444, 1347, + 1350, 1394, 1303, 1372, 420, 1341, 1329, 1298, 1336, 1299, + 1327, 1359, 273, 1324, 1417, 1376, 1433, 369, 270, 1305, + 1296, 206, 511, 1330, 435, 1346, 205, 1396, 493, 255, + 380, 377, 590, 285, 276, 272, 252, 320, 389, 432, + 524, 426, 1440, 373, 1382, 0, 503, 405, 0, 0, + 2030, 1421, 1420, 1351, 1361, 1423, 1370, 1408, 1356, 1395, + 1313, 1381, 1435, 1342, 1391, 1436, 326, 250, 328, 204, + 417, 504, 289, 0, 0, 0, 0, 4131, 513, 966, + 0, 0, 0, 0, 4132, 0, 0, 0, 0, 240, + 0, 0, 247, 0, 0, 0, 354, 363, 362, 342, + 343, 345, 347, 353, 360, 366, 339, 348, 1338, 1388, + 616, 1430, 1339, 1390, 268, 324, 275, 267, 587, 1441, + 1422, 1302, 1369, 1429, 1364, 603, 0, 0, 231, 1432, + 1363, 0, 1393, 0, 1447, 1297, 1384, 0, 1300, 1304, + 1443, 1427, 1333, 278, 0, 0, 0, 0, 0, 0, + 0, 1360, 1371, 1405, 1409, 1354, 0, 0, 0, 0, + 0, 0, 0, 0, 1331, 0, 1380, 0, 0, 0, + 1309, 1301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1961, 0, 0, 397, 0, - 0, 0, 0, 0, 0, 1422, 1406, 529, 0, 1348, - 1425, 1316, 1335, 1435, 1338, 1341, 1385, 1294, 1363, 417, - 1332, 1320, 1289, 1327, 1290, 1318, 1350, 271, 1315, 1408, - 1367, 1424, 367, 268, 1296, 1287, 204, 506, 1321, 431, - 1337, 203, 1387, 488, 253, 378, 375, 584, 283, 274, - 270, 250, 318, 386, 429, 519, 423, 1431, 371, 1373, - 0, 498, 402, 0, 0, 2015, 1412, 1411, 1342, 1352, - 1414, 1361, 1399, 1347, 1386, 1304, 1372, 1426, 1333, 1382, - 1427, 324, 248, 326, 202, 414, 499, 287, 0, 0, - 0, 0, 4112, 508, 960, 0, 0, 0, 0, 4113, - 0, 0, 0, 0, 238, 0, 0, 245, 0, 0, - 0, 352, 361, 360, 340, 341, 343, 345, 351, 358, - 364, 337, 346, 1329, 1379, 610, 1421, 1330, 1381, 266, - 322, 273, 265, 581, 1432, 1413, 1293, 1360, 1420, 1355, - 597, 0, 0, 229, 1423, 1354, 0, 1384, 0, 1438, - 1288, 1375, 0, 1291, 1295, 1434, 1418, 1324, 276, 0, - 0, 0, 0, 0, 0, 0, 1351, 1362, 1396, 1400, - 1345, 0, 0, 0, 0, 0, 0, 0, 0, 1322, - 0, 1371, 0, 0, 0, 1300, 1292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1349, - 0, 0, 0, 0, 1303, 0, 1323, 1397, 0, 1286, - 298, 1297, 403, 258, 0, 454, 1404, 1417, 1346, 630, - 1419, 1344, 1343, 1391, 1301, 1410, 1336, 366, 1299, 331, - 197, 225, 0, 1334, 413, 462, 474, 1409, 1319, 1328, - 254, 1326, 472, 427, 605, 233, 285, 459, 433, 470, - 441, 288, 1370, 1389, 471, 373, 586, 451, 602, 631, - 632, 264, 407, 616, 523, 624, 649, 226, 261, 421, - 507, 608, 495, 398, 582, 583, 330, 494, 296, 201, - 370, 637, 224, 480, 372, 242, 231, 588, 613, 300, - 252, 290, 457, 644, 213, 518, 599, 239, 484, 0, - 0, 652, 247, 505, 611, 600, 215, 595, 504, 394, - 327, 328, 214, 0, 458, 269, 294, 0, 0, 259, - 416, 590, 591, 257, 653, 228, 623, 220, 1298, 622, - 409, 585, 596, 395, 384, 219, 594, 393, 383, 335, - 356, 357, 281, 308, 448, 376, 449, 307, 309, 405, - 404, 406, 207, 609, 627, 0, 208, 0, 500, 612, - 654, 453, 212, 234, 235, 237, 1314, 280, 284, 292, - 295, 304, 305, 314, 368, 420, 447, 443, 452, 1405, - 580, 603, 617, 629, 635, 636, 638, 639, 640, 641, - 642, 645, 643, 408, 312, 496, 334, 374, 1394, 1437, - 426, 473, 240, 607, 497, 199, 1308, 1313, 1306, 0, - 255, 256, 1376, 576, 1309, 1307, 1365, 1366, 1310, 1428, - 1429, 1430, 1415, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 650, 509, 515, 510, 511, 512, 513, 514, 0, - 516, 1398, 1302, 0, 1311, 1312, 399, 1407, 592, 593, - 673, 385, 487, 604, 336, 350, 353, 342, 362, 0, - 363, 338, 339, 344, 347, 348, 349, 354, 355, 359, - 365, 249, 210, 391, 400, 579, 313, 216, 217, 218, - 525, 526, 527, 528, 620, 621, 625, 205, 463, 464, - 465, 466, 293, 615, 310, 469, 468, 332, 333, 380, - 450, 541, 543, 554, 558, 560, 562, 568, 571, 542, - 544, 555, 559, 561, 563, 569, 572, 531, 533, 535, - 537, 550, 549, 546, 574, 575, 552, 557, 536, 548, - 553, 566, 573, 570, 530, 534, 538, 547, 565, 564, - 545, 556, 567, 551, 539, 532, 540, 1369, 196, 221, - 369, 1433, 455, 289, 651, 619, 485, 614, 206, 223, - 1305, 263, 1317, 1325, 0, 1331, 1339, 1340, 1353, 1356, - 1357, 1358, 1359, 1377, 1378, 1380, 1388, 1390, 1393, 1395, - 1402, 1416, 1436, 198, 200, 209, 222, 232, 236, 243, - 262, 277, 279, 286, 299, 311, 319, 320, 323, 329, - 381, 387, 388, 389, 390, 410, 411, 412, 415, 418, - 419, 422, 424, 425, 428, 432, 436, 437, 438, 440, - 442, 444, 456, 461, 475, 476, 477, 478, 479, 482, - 483, 489, 490, 491, 492, 493, 501, 502, 517, 587, - 589, 606, 626, 633, 481, 302, 303, 445, 446, 315, - 316, 647, 648, 301, 601, 634, 598, 646, 628, 439, - 379, 1368, 1374, 382, 282, 306, 321, 1383, 618, 503, - 227, 467, 291, 251, 1401, 1403, 211, 246, 230, 260, - 275, 278, 325, 392, 401, 430, 435, 297, 272, 244, - 460, 241, 486, 520, 521, 522, 524, 396, 267, 434, - 1364, 1392, 377, 577, 578, 317, 397, 0, 0, 0, - 0, 0, 0, 1422, 1406, 529, 0, 1348, 1425, 1316, - 1335, 1435, 1338, 1341, 1385, 1294, 1363, 417, 1332, 1320, - 1289, 1327, 1290, 1318, 1350, 271, 1315, 1408, 1367, 1424, - 367, 268, 1296, 1287, 204, 506, 1321, 431, 1337, 203, - 1387, 488, 253, 378, 375, 584, 283, 274, 270, 250, - 318, 386, 429, 519, 423, 1431, 371, 1373, 0, 498, - 402, 0, 0, 0, 1412, 1411, 1342, 1352, 1414, 1361, - 1399, 1347, 1386, 1304, 1372, 1426, 1333, 1382, 1427, 324, - 248, 326, 202, 414, 499, 287, 0, 0, 0, 0, - 0, 508, 194, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 238, 0, 0, 245, 0, 0, 0, 352, - 361, 360, 340, 341, 343, 345, 351, 358, 364, 337, - 346, 1329, 1379, 610, 1421, 1330, 1381, 266, 322, 273, - 265, 581, 1432, 1413, 1293, 1360, 1420, 1355, 597, 0, - 0, 229, 1423, 1354, 0, 1384, 0, 1438, 1288, 1375, - 0, 1291, 1295, 1434, 1418, 1324, 276, 0, 0, 0, - 0, 0, 0, 0, 1351, 1362, 1396, 1400, 1345, 0, - 0, 0, 0, 0, 0, 3257, 0, 1322, 0, 1371, - 0, 0, 0, 1300, 1292, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1349, 0, 0, - 0, 0, 1303, 0, 1323, 1397, 0, 1286, 298, 1297, - 403, 258, 0, 454, 1404, 1417, 1346, 630, 1419, 1344, - 1343, 1391, 1301, 1410, 1336, 366, 1299, 331, 197, 225, - 0, 1334, 413, 462, 474, 1409, 1319, 1328, 254, 1326, - 472, 427, 605, 233, 285, 459, 433, 470, 441, 288, - 1370, 1389, 471, 373, 586, 451, 602, 631, 632, 264, - 407, 616, 523, 624, 649, 226, 261, 421, 507, 608, - 495, 398, 582, 583, 330, 494, 296, 201, 370, 637, - 224, 480, 372, 242, 231, 588, 613, 300, 252, 290, - 457, 644, 213, 518, 599, 239, 484, 0, 0, 652, - 247, 505, 611, 600, 215, 595, 504, 394, 327, 328, - 214, 0, 458, 269, 294, 0, 0, 259, 416, 590, - 591, 257, 653, 228, 623, 220, 1298, 622, 409, 585, - 596, 395, 384, 219, 594, 393, 383, 335, 356, 357, - 281, 308, 448, 376, 449, 307, 309, 405, 404, 406, - 207, 609, 627, 0, 208, 0, 500, 612, 654, 453, - 212, 234, 235, 237, 1314, 280, 284, 292, 295, 304, - 305, 314, 368, 420, 447, 443, 452, 1405, 580, 603, - 617, 629, 635, 636, 638, 639, 640, 641, 642, 645, - 643, 408, 312, 496, 334, 374, 1394, 1437, 426, 473, - 240, 607, 497, 199, 1308, 1313, 1306, 0, 255, 256, - 1376, 576, 1309, 1307, 1365, 1366, 1310, 1428, 1429, 1430, - 1415, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 650, - 509, 515, 510, 511, 512, 513, 514, 0, 516, 1398, - 1302, 0, 1311, 1312, 399, 1407, 592, 593, 673, 385, - 487, 604, 336, 350, 353, 342, 362, 0, 363, 338, - 339, 344, 347, 348, 349, 354, 355, 359, 365, 249, - 210, 391, 400, 579, 313, 216, 217, 218, 525, 526, - 527, 528, 620, 621, 625, 205, 463, 464, 465, 466, - 293, 615, 310, 469, 468, 332, 333, 380, 450, 541, - 543, 554, 558, 560, 562, 568, 571, 542, 544, 555, - 559, 561, 563, 569, 572, 531, 533, 535, 537, 550, - 549, 546, 574, 575, 552, 557, 536, 548, 553, 566, - 573, 570, 530, 534, 538, 547, 565, 564, 545, 556, - 567, 551, 539, 532, 540, 1369, 196, 221, 369, 1433, - 455, 289, 651, 619, 485, 614, 206, 223, 1305, 263, - 1317, 1325, 0, 1331, 1339, 1340, 1353, 1356, 1357, 1358, - 1359, 1377, 1378, 1380, 1388, 1390, 1393, 1395, 1402, 1416, - 1436, 198, 200, 209, 222, 232, 236, 243, 262, 277, - 279, 286, 299, 311, 319, 320, 323, 329, 381, 387, - 388, 389, 390, 410, 411, 412, 415, 418, 419, 422, - 424, 425, 428, 432, 436, 437, 438, 440, 442, 444, - 456, 461, 475, 476, 477, 478, 479, 482, 483, 489, - 490, 491, 492, 493, 501, 502, 517, 587, 589, 606, - 626, 633, 481, 302, 303, 445, 446, 315, 316, 647, - 648, 301, 601, 634, 598, 646, 628, 439, 379, 1368, - 1374, 382, 282, 306, 321, 1383, 618, 503, 227, 467, - 291, 251, 1401, 1403, 211, 246, 230, 260, 275, 278, - 325, 392, 401, 430, 435, 297, 272, 244, 460, 241, - 486, 520, 521, 522, 524, 396, 267, 434, 1364, 1392, - 377, 577, 578, 317, 397, 0, 0, 0, 0, 0, - 0, 1422, 1406, 529, 0, 1348, 1425, 1316, 1335, 1435, - 1338, 1341, 1385, 1294, 1363, 417, 1332, 1320, 1289, 1327, - 1290, 1318, 1350, 271, 1315, 1408, 1367, 1424, 367, 268, - 1296, 1287, 204, 506, 1321, 431, 1337, 203, 1387, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 1431, 371, 1373, 0, 498, 402, 0, - 0, 0, 1412, 1411, 1342, 1352, 1414, 1361, 1399, 1347, - 1386, 1304, 1372, 1426, 1333, 1382, 1427, 324, 248, 326, - 202, 414, 499, 287, 0, 0, 0, 0, 0, 508, - 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 0, 245, 0, 0, 0, 352, 361, 360, - 340, 341, 343, 345, 351, 358, 364, 337, 346, 1329, - 1379, 610, 1421, 1330, 1381, 266, 322, 273, 265, 581, - 1432, 1413, 1293, 1360, 1420, 1355, 597, 0, 0, 229, - 1423, 1354, 0, 1384, 0, 1438, 1288, 1375, 0, 1291, - 1295, 1434, 1418, 1324, 276, 0, 0, 0, 0, 0, - 0, 0, 1351, 1362, 1396, 1400, 1345, 0, 0, 0, - 0, 0, 0, 3218, 0, 1322, 0, 1371, 0, 0, - 0, 1300, 1292, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1349, 0, 0, 0, 0, - 1303, 0, 1323, 1397, 0, 1286, 298, 1297, 403, 258, - 0, 454, 1404, 1417, 1346, 630, 1419, 1344, 1343, 1391, - 1301, 1410, 1336, 366, 1299, 331, 197, 225, 0, 1334, - 413, 462, 474, 1409, 1319, 1328, 254, 1326, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 1370, 1389, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 590, 591, 257, - 653, 228, 623, 220, 1298, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 356, 357, 281, 308, - 448, 376, 449, 307, 309, 405, 404, 406, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 1314, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 1405, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 1394, 1437, 426, 473, 240, 607, - 497, 199, 1308, 1313, 1306, 0, 255, 256, 1376, 576, - 1309, 1307, 1365, 1366, 1310, 1428, 1429, 1430, 1415, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 1398, 1302, 0, - 1311, 1312, 399, 1407, 592, 593, 673, 385, 487, 604, - 336, 350, 353, 342, 362, 0, 363, 338, 339, 344, - 347, 348, 349, 354, 355, 359, 365, 249, 210, 391, - 400, 579, 313, 216, 217, 218, 525, 526, 527, 528, - 620, 621, 625, 205, 463, 464, 465, 466, 293, 615, - 310, 469, 468, 332, 333, 380, 450, 541, 543, 554, - 558, 560, 562, 568, 571, 542, 544, 555, 559, 561, - 563, 569, 572, 531, 533, 535, 537, 550, 549, 546, - 574, 575, 552, 557, 536, 548, 553, 566, 573, 570, - 530, 534, 538, 547, 565, 564, 545, 556, 567, 551, - 539, 532, 540, 1369, 196, 221, 369, 1433, 455, 289, - 651, 619, 485, 614, 206, 223, 1305, 263, 1317, 1325, - 0, 1331, 1339, 1340, 1353, 1356, 1357, 1358, 1359, 1377, - 1378, 1380, 1388, 1390, 1393, 1395, 1402, 1416, 1436, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 302, 303, 445, 446, 315, 316, 647, 648, 301, - 601, 634, 598, 646, 628, 439, 379, 1368, 1374, 382, - 282, 306, 321, 1383, 618, 503, 227, 467, 291, 251, - 1401, 1403, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 1364, 1392, 377, 577, - 578, 317, 397, 0, 0, 0, 0, 0, 0, 1422, - 1406, 529, 0, 1348, 1425, 1316, 1335, 1435, 1338, 1341, - 1385, 1294, 1363, 417, 1332, 1320, 1289, 1327, 1290, 1318, - 1350, 271, 1315, 1408, 1367, 1424, 367, 268, 1296, 1287, - 204, 506, 1321, 431, 1337, 203, 1387, 488, 253, 378, - 375, 584, 283, 274, 270, 250, 318, 386, 429, 519, - 423, 1431, 371, 1373, 0, 498, 402, 0, 0, 0, - 1412, 1411, 1342, 1352, 1414, 1361, 1399, 1347, 1386, 1304, - 1372, 1426, 1333, 1382, 1427, 324, 248, 326, 202, 414, - 499, 287, 0, 0, 0, 0, 0, 508, 960, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, - 0, 245, 0, 0, 0, 352, 361, 360, 340, 341, - 343, 345, 351, 358, 364, 337, 346, 1329, 1379, 610, - 1421, 1330, 1381, 266, 322, 273, 265, 581, 1432, 1413, - 1293, 1360, 1420, 1355, 597, 0, 0, 229, 1423, 1354, - 0, 1384, 0, 1438, 1288, 1375, 0, 1291, 1295, 1434, - 1418, 1324, 276, 0, 0, 0, 0, 0, 0, 0, - 1351, 1362, 1396, 1400, 1345, 0, 0, 0, 0, 0, - 0, 2411, 0, 1322, 0, 1371, 0, 0, 0, 1300, - 1292, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1349, 0, 0, 0, 0, 1303, 0, - 1323, 1397, 0, 1286, 298, 1297, 403, 258, 0, 454, - 1404, 1417, 1346, 630, 1419, 1344, 1343, 1391, 1301, 1410, - 1336, 366, 1299, 331, 197, 225, 0, 1334, 413, 462, - 474, 1409, 1319, 1328, 254, 1326, 472, 427, 605, 233, - 285, 459, 433, 470, 441, 288, 1370, 1389, 471, 373, - 586, 451, 602, 631, 632, 264, 407, 616, 523, 624, - 649, 226, 261, 421, 507, 608, 495, 398, 582, 583, - 330, 494, 296, 201, 370, 637, 224, 480, 372, 242, - 231, 588, 613, 300, 252, 290, 457, 644, 213, 518, - 599, 239, 484, 0, 0, 652, 247, 505, 611, 600, - 215, 595, 504, 394, 327, 328, 214, 0, 458, 269, - 294, 0, 0, 259, 416, 590, 591, 257, 653, 228, - 623, 220, 1298, 622, 409, 585, 596, 395, 384, 219, - 594, 393, 383, 335, 356, 357, 281, 308, 448, 376, - 449, 307, 309, 405, 404, 406, 207, 609, 627, 0, - 208, 0, 500, 612, 654, 453, 212, 234, 235, 237, - 1314, 280, 284, 292, 295, 304, 305, 314, 368, 420, - 447, 443, 452, 1405, 580, 603, 617, 629, 635, 636, - 638, 639, 640, 641, 642, 645, 643, 408, 312, 496, - 334, 374, 1394, 1437, 426, 473, 240, 607, 497, 199, - 1308, 1313, 1306, 0, 255, 256, 1376, 576, 1309, 1307, - 1365, 1366, 1310, 1428, 1429, 1430, 1415, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 650, 509, 515, 510, 511, - 512, 513, 514, 0, 516, 1398, 1302, 0, 1311, 1312, - 399, 1407, 592, 593, 673, 385, 487, 604, 336, 350, - 353, 342, 362, 0, 363, 338, 339, 344, 347, 348, - 349, 354, 355, 359, 365, 249, 210, 391, 400, 579, - 313, 216, 217, 218, 525, 526, 527, 528, 620, 621, - 625, 205, 463, 464, 465, 466, 293, 615, 310, 469, - 468, 332, 333, 380, 450, 541, 543, 554, 558, 560, - 562, 568, 571, 542, 544, 555, 559, 561, 563, 569, - 572, 531, 533, 535, 537, 550, 549, 546, 574, 575, - 552, 557, 536, 548, 553, 566, 573, 570, 530, 534, - 538, 547, 565, 564, 545, 556, 567, 551, 539, 532, - 540, 1369, 196, 221, 369, 1433, 455, 289, 651, 619, - 485, 614, 206, 223, 1305, 263, 1317, 1325, 0, 1331, - 1339, 1340, 1353, 1356, 1357, 1358, 1359, 1377, 1378, 1380, - 1388, 1390, 1393, 1395, 1402, 1416, 1436, 198, 200, 209, - 222, 232, 236, 243, 262, 277, 279, 286, 299, 311, - 319, 320, 323, 329, 381, 387, 388, 389, 390, 410, - 411, 412, 415, 418, 419, 422, 424, 425, 428, 432, - 436, 437, 438, 440, 442, 444, 456, 461, 475, 476, - 477, 478, 479, 482, 483, 489, 490, 491, 492, 493, - 501, 502, 517, 587, 589, 606, 626, 633, 481, 302, - 303, 445, 446, 315, 316, 647, 648, 301, 601, 634, - 598, 646, 628, 439, 379, 1368, 1374, 382, 282, 306, - 321, 1383, 618, 503, 227, 467, 291, 251, 1401, 1403, - 211, 246, 230, 260, 275, 278, 325, 392, 401, 430, - 435, 297, 272, 244, 460, 241, 486, 520, 521, 522, - 524, 396, 267, 434, 1364, 1392, 377, 577, 578, 317, - 397, 0, 0, 0, 0, 0, 0, 1422, 1406, 529, - 0, 1348, 1425, 1316, 1335, 1435, 1338, 1341, 1385, 1294, - 1363, 417, 1332, 1320, 1289, 1327, 1290, 1318, 1350, 271, - 1315, 1408, 1367, 1424, 367, 268, 1296, 1287, 204, 506, - 1321, 431, 1337, 203, 1387, 488, 253, 378, 375, 584, - 283, 274, 270, 250, 318, 386, 429, 519, 423, 1431, - 371, 1373, 0, 498, 402, 0, 0, 0, 1412, 1411, - 1342, 1352, 1414, 1361, 1399, 1347, 1386, 1304, 1372, 1426, - 1333, 1382, 1427, 324, 248, 326, 202, 414, 499, 287, - 0, 95, 0, 0, 0, 508, 725, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 238, 0, 0, 245, - 0, 0, 0, 352, 361, 360, 340, 341, 343, 345, - 351, 358, 364, 337, 346, 1329, 1379, 610, 1421, 1330, - 1381, 266, 322, 273, 265, 581, 1432, 1413, 1293, 1360, - 1420, 1355, 597, 0, 0, 229, 1423, 1354, 0, 1384, - 0, 1438, 1288, 1375, 0, 1291, 1295, 1434, 1418, 1324, - 276, 0, 0, 0, 0, 0, 0, 0, 1351, 1362, - 1396, 1400, 1345, 0, 0, 0, 0, 0, 0, 0, - 0, 1322, 0, 1371, 0, 0, 0, 1300, 1292, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1349, 0, 0, 0, 0, 1303, 0, 1323, 1397, - 0, 1286, 298, 1297, 403, 258, 0, 454, 1404, 1417, - 1346, 630, 1419, 1344, 1343, 1391, 1301, 1410, 1336, 366, - 1299, 331, 197, 225, 0, 1334, 413, 462, 474, 1409, - 1319, 1328, 254, 1326, 472, 427, 605, 233, 285, 459, - 433, 470, 441, 288, 1370, 1389, 471, 373, 586, 451, - 602, 631, 632, 264, 407, 616, 523, 624, 649, 226, - 261, 421, 507, 608, 495, 398, 582, 583, 330, 494, - 296, 201, 370, 637, 224, 480, 372, 242, 231, 588, - 613, 300, 252, 290, 457, 644, 213, 518, 599, 239, - 484, 0, 0, 652, 247, 505, 611, 600, 215, 595, - 504, 394, 327, 328, 214, 0, 458, 269, 294, 0, - 0, 259, 416, 590, 591, 257, 653, 228, 623, 220, - 1298, 622, 409, 585, 596, 395, 384, 219, 594, 393, - 383, 335, 356, 357, 281, 308, 448, 376, 449, 307, - 309, 405, 404, 406, 207, 609, 627, 0, 208, 0, - 500, 612, 654, 453, 212, 234, 235, 237, 1314, 280, - 284, 292, 295, 304, 305, 314, 368, 420, 447, 443, - 452, 1405, 580, 603, 617, 629, 635, 636, 638, 639, - 640, 641, 642, 645, 643, 408, 312, 496, 334, 374, - 1394, 1437, 426, 473, 240, 607, 497, 199, 1308, 1313, - 1306, 0, 255, 256, 1376, 576, 1309, 1307, 1365, 1366, - 1310, 1428, 1429, 1430, 1415, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 650, 509, 515, 510, 511, 512, 513, - 514, 0, 516, 1398, 1302, 0, 1311, 1312, 399, 1407, - 592, 593, 673, 385, 487, 604, 336, 350, 353, 342, - 362, 0, 363, 338, 339, 344, 347, 348, 349, 354, - 355, 359, 365, 249, 210, 391, 400, 579, 313, 216, - 217, 218, 525, 526, 527, 528, 620, 621, 625, 205, - 463, 464, 465, 466, 293, 615, 310, 469, 468, 332, - 333, 380, 450, 541, 543, 554, 558, 560, 562, 568, - 571, 542, 544, 555, 559, 561, 563, 569, 572, 531, - 533, 535, 537, 550, 549, 546, 574, 575, 552, 557, - 536, 548, 553, 566, 573, 570, 530, 534, 538, 547, - 565, 564, 545, 556, 567, 551, 539, 532, 540, 1369, - 196, 221, 369, 1433, 455, 289, 651, 619, 485, 614, - 206, 223, 1305, 263, 1317, 1325, 0, 1331, 1339, 1340, - 1353, 1356, 1357, 1358, 1359, 1377, 1378, 1380, 1388, 1390, - 1393, 1395, 1402, 1416, 1436, 198, 200, 209, 222, 232, - 236, 243, 262, 277, 279, 286, 299, 311, 319, 320, - 323, 329, 381, 387, 388, 389, 390, 410, 411, 412, - 415, 418, 419, 422, 424, 425, 428, 432, 436, 437, - 438, 440, 442, 444, 456, 461, 475, 476, 477, 478, - 479, 482, 483, 489, 490, 491, 492, 493, 501, 502, - 517, 587, 589, 606, 626, 633, 481, 302, 303, 445, - 446, 315, 316, 647, 648, 301, 601, 634, 598, 646, - 628, 439, 379, 1368, 1374, 382, 282, 306, 321, 1383, - 618, 503, 227, 467, 291, 251, 1401, 1403, 211, 246, - 230, 260, 275, 278, 325, 392, 401, 430, 435, 297, - 272, 244, 460, 241, 486, 520, 521, 522, 524, 396, - 267, 434, 1364, 1392, 377, 577, 578, 317, 397, 0, - 0, 0, 0, 0, 0, 1422, 1406, 529, 0, 1348, - 1425, 1316, 1335, 1435, 1338, 1341, 1385, 1294, 1363, 417, - 1332, 1320, 1289, 1327, 1290, 1318, 1350, 271, 1315, 1408, - 1367, 1424, 367, 268, 1296, 1287, 204, 506, 1321, 431, - 1337, 203, 1387, 488, 253, 378, 375, 584, 283, 274, - 270, 250, 318, 386, 429, 519, 423, 1431, 371, 1373, - 0, 498, 402, 0, 0, 0, 1412, 1411, 1342, 1352, - 1414, 1361, 1399, 1347, 1386, 1304, 1372, 1426, 1333, 1382, - 1427, 324, 248, 326, 202, 414, 499, 287, 0, 0, - 0, 0, 0, 508, 194, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 238, 0, 0, 245, 0, 0, - 0, 352, 361, 360, 340, 341, 343, 345, 351, 358, - 364, 337, 346, 1329, 1379, 610, 1421, 1330, 1381, 266, - 322, 273, 265, 581, 1432, 1413, 1293, 1360, 1420, 1355, - 597, 0, 0, 229, 1423, 1354, 0, 1384, 0, 1438, - 1288, 1375, 0, 1291, 1295, 1434, 1418, 1324, 276, 0, - 0, 0, 0, 0, 0, 0, 1351, 1362, 1396, 1400, - 1345, 0, 0, 0, 0, 0, 0, 0, 0, 1322, - 0, 1371, 0, 0, 0, 1300, 1292, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1349, - 0, 0, 0, 0, 1303, 0, 1323, 1397, 0, 1286, - 298, 1297, 403, 258, 0, 454, 1404, 1417, 1346, 630, - 1419, 1344, 1343, 1391, 1301, 1410, 1336, 366, 1299, 331, - 197, 225, 0, 1334, 413, 462, 474, 1409, 1319, 1328, - 254, 1326, 472, 427, 605, 233, 285, 459, 433, 470, - 441, 288, 1370, 1389, 471, 373, 586, 451, 602, 631, - 632, 264, 407, 616, 523, 624, 649, 226, 261, 421, - 507, 608, 495, 398, 582, 583, 330, 494, 296, 201, - 370, 637, 224, 480, 372, 242, 231, 588, 613, 300, - 252, 290, 457, 644, 213, 518, 599, 239, 484, 0, - 0, 652, 247, 505, 611, 600, 215, 595, 504, 394, - 327, 328, 214, 0, 458, 269, 294, 0, 0, 259, - 416, 590, 591, 257, 653, 228, 623, 220, 1298, 622, - 409, 585, 596, 395, 384, 219, 594, 393, 383, 335, - 356, 357, 281, 308, 448, 376, 449, 307, 309, 405, - 404, 406, 207, 609, 627, 0, 208, 0, 500, 612, - 654, 453, 212, 234, 235, 237, 1314, 280, 284, 292, - 295, 304, 305, 314, 368, 420, 447, 443, 452, 1405, - 580, 603, 617, 629, 635, 636, 638, 639, 640, 641, - 642, 645, 643, 408, 312, 496, 334, 374, 1394, 1437, - 426, 473, 240, 607, 497, 199, 1308, 1313, 1306, 0, - 255, 256, 1376, 576, 1309, 1307, 1365, 1366, 1310, 1428, - 1429, 1430, 1415, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 650, 509, 515, 510, 511, 512, 513, 514, 0, - 516, 1398, 1302, 0, 1311, 1312, 399, 1407, 592, 593, - 673, 385, 487, 604, 336, 350, 353, 342, 362, 0, - 363, 338, 339, 344, 347, 348, 349, 354, 355, 359, - 365, 249, 210, 391, 400, 579, 313, 216, 217, 218, - 525, 526, 527, 528, 620, 621, 625, 205, 463, 464, - 465, 466, 293, 615, 310, 469, 468, 332, 333, 380, - 450, 541, 543, 554, 558, 560, 562, 568, 571, 542, - 544, 555, 559, 561, 563, 569, 572, 531, 533, 535, - 537, 550, 549, 546, 574, 575, 552, 557, 536, 548, - 553, 566, 573, 570, 530, 534, 538, 547, 565, 564, - 545, 556, 567, 551, 539, 532, 540, 1369, 196, 221, - 369, 1433, 455, 289, 651, 619, 485, 614, 206, 223, - 1305, 263, 1317, 1325, 0, 1331, 1339, 1340, 1353, 1356, - 1357, 1358, 1359, 1377, 1378, 1380, 1388, 1390, 1393, 1395, - 1402, 1416, 1436, 198, 200, 209, 222, 232, 236, 243, - 262, 277, 279, 286, 299, 311, 319, 320, 323, 329, - 381, 387, 388, 389, 390, 410, 411, 412, 415, 418, - 419, 422, 424, 425, 428, 432, 436, 437, 438, 440, - 442, 444, 456, 461, 475, 476, 477, 478, 479, 482, - 483, 489, 490, 491, 492, 493, 501, 502, 517, 587, - 589, 606, 626, 633, 481, 302, 303, 445, 446, 315, - 316, 647, 648, 301, 601, 634, 598, 646, 628, 439, - 379, 1368, 1374, 382, 282, 306, 321, 1383, 618, 503, - 227, 467, 291, 251, 1401, 1403, 211, 246, 230, 260, - 275, 278, 325, 392, 401, 430, 435, 297, 272, 244, - 460, 241, 486, 520, 521, 522, 524, 396, 267, 434, - 1364, 1392, 377, 577, 578, 317, 397, 0, 0, 0, - 0, 0, 0, 1422, 1406, 529, 0, 1348, 1425, 1316, - 1335, 1435, 1338, 1341, 1385, 1294, 1363, 417, 1332, 1320, - 1289, 1327, 1290, 1318, 1350, 271, 1315, 1408, 1367, 1424, - 367, 268, 1296, 1287, 204, 506, 1321, 431, 1337, 203, - 1387, 488, 253, 378, 375, 584, 283, 274, 270, 250, - 318, 386, 429, 519, 423, 1431, 371, 1373, 0, 498, - 402, 0, 0, 0, 1412, 1411, 1342, 1352, 1414, 1361, - 1399, 1347, 1386, 1304, 1372, 1426, 1333, 1382, 1427, 324, - 248, 326, 202, 414, 499, 287, 0, 0, 0, 0, - 0, 508, 725, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 238, 0, 0, 245, 0, 0, 0, 352, - 361, 360, 340, 341, 343, 345, 351, 358, 364, 337, - 346, 1329, 1379, 610, 1421, 1330, 1381, 266, 322, 273, - 265, 581, 1432, 1413, 1293, 1360, 1420, 1355, 597, 0, - 0, 229, 1423, 1354, 0, 1384, 0, 1438, 1288, 1375, - 0, 1291, 1295, 1434, 1418, 1324, 276, 0, 0, 0, - 0, 0, 0, 0, 1351, 1362, 1396, 1400, 1345, 0, - 0, 0, 0, 0, 0, 0, 0, 1322, 0, 1371, - 0, 0, 0, 1300, 1292, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1349, 0, 0, - 0, 0, 1303, 0, 1323, 1397, 0, 1286, 298, 1297, - 403, 258, 0, 454, 1404, 1417, 1346, 630, 1419, 1344, - 1343, 1391, 1301, 1410, 1336, 366, 1299, 331, 197, 225, - 0, 1334, 413, 462, 474, 1409, 1319, 1328, 254, 1326, - 472, 427, 605, 233, 285, 459, 433, 470, 441, 288, - 1370, 1389, 471, 373, 586, 451, 602, 631, 632, 264, - 407, 616, 523, 624, 649, 226, 261, 421, 507, 608, - 495, 398, 582, 583, 330, 494, 296, 201, 370, 637, - 224, 480, 372, 242, 231, 588, 613, 300, 252, 290, - 457, 644, 213, 518, 599, 239, 484, 0, 0, 652, - 247, 505, 611, 600, 215, 595, 504, 394, 327, 328, - 214, 0, 458, 269, 294, 0, 0, 259, 416, 590, - 591, 257, 653, 228, 623, 220, 1298, 622, 409, 585, - 596, 395, 384, 219, 594, 393, 383, 335, 356, 357, - 281, 308, 448, 376, 449, 307, 309, 405, 404, 406, - 207, 609, 627, 0, 208, 0, 500, 612, 654, 453, - 212, 234, 235, 237, 1314, 280, 284, 292, 295, 304, - 305, 314, 368, 420, 447, 443, 452, 1405, 580, 603, - 617, 629, 635, 636, 638, 639, 640, 641, 642, 645, - 643, 408, 312, 496, 334, 374, 1394, 1437, 426, 473, - 240, 607, 497, 199, 1308, 1313, 1306, 0, 255, 256, - 1376, 576, 1309, 1307, 1365, 1366, 1310, 1428, 1429, 1430, - 1415, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 650, - 509, 515, 510, 511, 512, 513, 514, 0, 516, 1398, - 1302, 0, 1311, 1312, 399, 1407, 592, 593, 673, 385, - 487, 604, 336, 350, 353, 342, 362, 0, 363, 338, - 339, 344, 347, 348, 349, 354, 355, 359, 365, 249, - 210, 391, 400, 579, 313, 216, 217, 218, 525, 526, - 527, 528, 620, 621, 625, 205, 463, 464, 465, 466, - 293, 615, 310, 469, 468, 332, 333, 380, 450, 541, - 543, 554, 558, 560, 562, 568, 571, 542, 544, 555, - 559, 561, 563, 569, 572, 531, 533, 535, 537, 550, - 549, 546, 574, 575, 552, 557, 536, 548, 553, 566, - 573, 570, 530, 534, 538, 547, 565, 564, 545, 556, - 567, 551, 539, 532, 540, 1369, 196, 221, 369, 1433, - 455, 289, 651, 619, 485, 614, 206, 223, 1305, 263, - 1317, 1325, 0, 1331, 1339, 1340, 1353, 1356, 1357, 1358, - 1359, 1377, 1378, 1380, 1388, 1390, 1393, 1395, 1402, 1416, - 1436, 198, 200, 209, 222, 232, 236, 243, 262, 277, - 279, 286, 299, 311, 319, 320, 323, 329, 381, 387, - 388, 389, 390, 410, 411, 412, 415, 418, 419, 422, - 424, 425, 428, 432, 436, 437, 438, 440, 442, 444, - 456, 461, 475, 476, 477, 478, 479, 482, 483, 489, - 490, 491, 492, 493, 501, 502, 517, 587, 589, 606, - 626, 633, 481, 302, 303, 445, 446, 315, 316, 647, - 648, 301, 601, 634, 598, 646, 628, 439, 379, 1368, - 1374, 382, 282, 306, 321, 1383, 618, 503, 227, 467, - 291, 251, 1401, 1403, 211, 246, 230, 260, 275, 278, - 325, 392, 401, 430, 435, 297, 272, 244, 460, 241, - 486, 520, 521, 522, 524, 396, 267, 434, 1364, 1392, - 377, 577, 578, 317, 397, 0, 0, 0, 0, 0, - 0, 1422, 1406, 529, 0, 1348, 1425, 1316, 1335, 1435, - 1338, 1341, 1385, 1294, 1363, 417, 1332, 1320, 1289, 1327, - 1290, 1318, 1350, 271, 1315, 1408, 1367, 1424, 367, 268, - 1296, 1287, 204, 506, 1321, 431, 1337, 203, 1387, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 1431, 371, 1373, 0, 498, 402, 0, - 0, 0, 1412, 1411, 1342, 1352, 1414, 1361, 1399, 1347, - 1386, 1304, 1372, 1426, 1333, 1382, 1427, 324, 248, 326, - 202, 414, 499, 287, 0, 0, 0, 0, 0, 508, - 960, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 0, 245, 0, 0, 0, 352, 361, 360, - 340, 341, 343, 345, 351, 358, 364, 337, 346, 1329, - 1379, 610, 1421, 1330, 1381, 266, 322, 273, 265, 581, - 1432, 1413, 1293, 1360, 1420, 1355, 597, 0, 0, 229, - 1423, 1354, 0, 1384, 0, 1438, 1288, 1375, 0, 1291, - 1295, 1434, 1418, 1324, 276, 0, 0, 0, 0, 0, - 0, 0, 1351, 1362, 1396, 1400, 1345, 0, 0, 0, - 0, 0, 0, 0, 0, 1322, 0, 1371, 0, 0, - 0, 1300, 1292, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1349, 0, 0, 0, 0, - 1303, 0, 1323, 1397, 0, 1286, 298, 1297, 403, 258, - 0, 454, 1404, 1417, 1346, 630, 1419, 1344, 1343, 1391, - 1301, 1410, 1336, 366, 1299, 331, 197, 225, 0, 1334, - 413, 462, 474, 1409, 1319, 1328, 254, 1326, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 1370, 1389, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 590, 591, 257, - 653, 228, 623, 220, 1298, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 356, 357, 281, 308, - 448, 376, 449, 307, 309, 405, 404, 406, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 1314, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 1405, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 1394, 1437, 426, 473, 240, 607, - 497, 199, 1308, 1313, 1306, 0, 255, 256, 1376, 576, - 1309, 1307, 1365, 1366, 1310, 1428, 1429, 1430, 1415, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 1398, 1302, 0, - 1311, 1312, 399, 1407, 592, 593, 673, 385, 487, 604, - 336, 350, 353, 342, 362, 0, 363, 338, 339, 344, - 347, 348, 349, 354, 355, 359, 365, 249, 210, 391, - 400, 579, 313, 216, 217, 218, 525, 526, 527, 528, - 620, 621, 625, 205, 463, 464, 465, 466, 293, 615, - 310, 469, 468, 332, 333, 380, 450, 541, 543, 554, - 558, 560, 562, 568, 571, 542, 544, 555, 559, 561, - 563, 569, 572, 531, 533, 535, 537, 550, 549, 546, - 574, 575, 552, 557, 536, 548, 553, 566, 573, 570, - 530, 534, 538, 547, 565, 564, 545, 556, 567, 551, - 539, 532, 540, 1369, 196, 221, 369, 1433, 455, 289, - 651, 619, 485, 614, 206, 223, 1305, 263, 1317, 1325, - 0, 1331, 1339, 1340, 1353, 1356, 1357, 1358, 1359, 1377, - 1378, 1380, 1388, 1390, 1393, 1395, 1402, 1416, 1436, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 302, 303, 445, 446, 315, 316, 647, 648, 301, - 601, 634, 598, 646, 628, 439, 379, 1368, 1374, 382, - 282, 306, 321, 1383, 618, 503, 227, 467, 291, 251, - 1401, 1403, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 1364, 1392, 377, 577, - 578, 317, 397, 0, 0, 0, 0, 0, 0, 0, - 0, 529, 0, 778, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 417, 0, 0, 0, 765, 0, 0, - 0, 271, 770, 0, 0, 0, 367, 268, 0, 0, - 204, 506, 0, 431, 0, 203, 0, 488, 253, 378, - 375, 584, 283, 274, 270, 250, 318, 386, 429, 519, - 423, 777, 371, 0, 0, 498, 402, 0, 0, 0, - 0, 0, 0, 0, 0, 772, 773, 0, 0, 0, - 0, 0, 0, 0, 0, 324, 248, 326, 202, 414, - 499, 287, 0, 95, 0, 0, 1024, 508, 960, 749, - 926, 964, 1025, 977, 978, 979, 965, 0, 238, 966, - 967, 245, 968, 0, 925, 808, 810, 809, 875, 876, - 877, 878, 879, 880, 881, 811, 812, 806, 973, 610, - 980, 981, 0, 266, 322, 273, 265, 581, 0, 0, - 2233, 2234, 2235, 0, 597, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 745, 762, 0, 776, 0, - 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 759, - 760, 0, 0, 0, 0, 920, 0, 761, 0, 0, - 769, 982, 983, 984, 985, 986, 987, 988, 989, 990, + 0, 0, 0, 0, 1358, 0, 0, 0, 0, 1312, + 0, 1332, 1406, 0, 1295, 300, 1306, 406, 260, 0, + 459, 1413, 1426, 1355, 636, 1428, 1353, 1352, 1400, 1310, + 1419, 1345, 368, 1308, 333, 199, 227, 0, 1343, 416, + 467, 479, 1418, 1328, 1337, 256, 1335, 477, 430, 611, + 235, 287, 464, 437, 475, 445, 290, 1379, 1398, 476, + 375, 592, 455, 608, 637, 638, 266, 410, 622, 528, + 630, 655, 228, 263, 424, 512, 614, 500, 401, 588, + 589, 332, 499, 298, 203, 372, 643, 226, 485, 374, + 244, 233, 594, 619, 302, 254, 292, 462, 650, 215, + 523, 605, 241, 489, 0, 0, 658, 249, 510, 617, + 606, 217, 601, 509, 397, 329, 330, 216, 0, 463, + 271, 296, 0, 0, 261, 419, 596, 597, 259, 659, + 230, 629, 222, 1307, 628, 412, 591, 602, 398, 386, + 221, 600, 396, 385, 337, 358, 359, 283, 310, 452, + 378, 453, 309, 311, 408, 407, 409, 209, 615, 633, + 0, 210, 0, 505, 618, 660, 457, 214, 236, 237, + 239, 1323, 282, 286, 294, 297, 306, 307, 316, 370, + 423, 451, 447, 456, 1414, 585, 609, 623, 635, 641, + 642, 644, 645, 646, 647, 648, 651, 649, 411, 314, + 501, 336, 376, 1403, 1446, 429, 478, 242, 613, 502, + 201, 1317, 1322, 1315, 0, 257, 258, 1385, 581, 1318, + 1316, 1374, 1375, 1319, 1437, 1438, 1439, 1424, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 656, 514, 520, 515, + 516, 517, 518, 519, 0, 521, 1407, 1311, 0, 1320, + 1321, 402, 1416, 598, 599, 679, 387, 492, 610, 338, + 352, 355, 344, 364, 0, 365, 340, 341, 346, 349, + 350, 351, 356, 357, 361, 367, 251, 212, 394, 403, + 584, 315, 218, 219, 220, 530, 531, 532, 533, 626, + 627, 631, 207, 468, 469, 470, 471, 295, 621, 312, + 474, 473, 334, 335, 382, 454, 546, 548, 559, 563, + 565, 567, 573, 576, 547, 549, 560, 564, 566, 568, + 574, 577, 536, 538, 540, 542, 555, 554, 551, 579, + 580, 557, 562, 541, 553, 558, 571, 578, 575, 535, + 539, 543, 552, 570, 569, 550, 561, 572, 556, 544, + 537, 545, 1378, 198, 223, 371, 1442, 460, 291, 657, + 625, 490, 620, 208, 225, 1314, 265, 1326, 1334, 0, + 1340, 1348, 1349, 1362, 1365, 1366, 1367, 1368, 1386, 1387, + 1389, 1397, 1399, 1402, 1404, 1411, 1425, 1445, 200, 202, + 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, + 313, 321, 322, 325, 331, 383, 390, 391, 392, 393, + 413, 414, 415, 418, 421, 422, 425, 427, 428, 431, + 436, 440, 441, 442, 444, 446, 448, 461, 466, 480, + 481, 482, 483, 484, 487, 488, 494, 495, 496, 497, + 498, 506, 507, 522, 593, 595, 612, 632, 639, 486, + 388, 434, 458, 586, 304, 305, 449, 450, 317, 318, + 653, 654, 303, 607, 640, 604, 652, 634, 443, 381, + 1377, 1383, 384, 284, 308, 323, 1392, 624, 508, 229, + 472, 293, 253, 1410, 1412, 213, 248, 232, 262, 277, + 280, 327, 395, 404, 433, 439, 299, 274, 246, 465, + 243, 491, 525, 526, 527, 529, 399, 269, 438, 1373, + 1401, 379, 582, 583, 319, 400, 0, 0, 0, 0, + 0, 0, 1431, 1415, 534, 0, 1357, 1434, 1325, 1344, + 1444, 1347, 1350, 1394, 1303, 1372, 420, 1341, 1329, 1298, + 1336, 1299, 1327, 1359, 273, 1324, 1417, 1376, 1433, 369, + 270, 1305, 1296, 206, 511, 1330, 435, 1346, 205, 1396, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 1440, 373, 1382, 0, 503, 405, + 0, 0, 0, 1421, 1420, 1351, 1361, 1423, 1370, 1408, + 1356, 1395, 1313, 1381, 1435, 1342, 1391, 1436, 326, 250, + 328, 204, 417, 504, 289, 0, 0, 0, 0, 0, + 513, 196, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 240, 0, 0, 247, 0, 0, 0, 354, 363, + 362, 342, 343, 345, 347, 353, 360, 366, 339, 348, + 1338, 1388, 616, 1430, 1339, 1390, 268, 324, 275, 267, + 587, 1441, 1422, 1302, 1369, 1429, 1364, 603, 0, 0, + 231, 1432, 1363, 0, 1393, 0, 1447, 1297, 1384, 0, + 1300, 1304, 1443, 1427, 1333, 278, 0, 0, 0, 0, + 0, 0, 0, 1360, 1371, 1405, 1409, 1354, 0, 0, + 0, 0, 0, 0, 3276, 0, 1331, 0, 1380, 0, + 0, 0, 1309, 1301, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1358, 0, 0, 0, + 0, 1312, 0, 1332, 1406, 0, 1295, 300, 1306, 406, + 260, 0, 459, 1413, 1426, 1355, 636, 1428, 1353, 1352, + 1400, 1310, 1419, 1345, 368, 1308, 333, 199, 227, 0, + 1343, 416, 467, 479, 1418, 1328, 1337, 256, 1335, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 1379, + 1398, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 596, 597, + 259, 659, 230, 629, 222, 1307, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 358, 359, 283, + 310, 452, 378, 453, 309, 311, 408, 407, 409, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 1323, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 1414, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 1403, 1446, 429, 478, 242, + 613, 502, 201, 1317, 1322, 1315, 0, 257, 258, 1385, + 581, 1318, 1316, 1374, 1375, 1319, 1437, 1438, 1439, 1424, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 1407, 1311, + 0, 1320, 1321, 402, 1416, 598, 599, 679, 387, 492, + 610, 338, 352, 355, 344, 364, 0, 365, 340, 341, + 346, 349, 350, 351, 356, 357, 361, 367, 251, 212, + 394, 403, 584, 315, 218, 219, 220, 530, 531, 532, + 533, 626, 627, 631, 207, 468, 469, 470, 471, 295, + 621, 312, 474, 473, 334, 335, 382, 454, 546, 548, + 559, 563, 565, 567, 573, 576, 547, 549, 560, 564, + 566, 568, 574, 577, 536, 538, 540, 542, 555, 554, + 551, 579, 580, 557, 562, 541, 553, 558, 571, 578, + 575, 535, 539, 543, 552, 570, 569, 550, 561, 572, + 556, 544, 537, 545, 1378, 198, 223, 371, 1442, 460, + 291, 657, 625, 490, 620, 208, 225, 1314, 265, 1326, + 1334, 0, 1340, 1348, 1349, 1362, 1365, 1366, 1367, 1368, + 1386, 1387, 1389, 1397, 1399, 1402, 1404, 1411, 1425, 1445, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 304, 305, 449, 450, + 317, 318, 653, 654, 303, 607, 640, 604, 652, 634, + 443, 381, 1377, 1383, 384, 284, 308, 323, 1392, 624, + 508, 229, 472, 293, 253, 1410, 1412, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 1373, 1401, 379, 582, 583, 319, 400, 0, 0, + 0, 0, 0, 0, 1431, 1415, 534, 0, 1357, 1434, + 1325, 1344, 1444, 1347, 1350, 1394, 1303, 1372, 420, 1341, + 1329, 1298, 1336, 1299, 1327, 1359, 273, 1324, 1417, 1376, + 1433, 369, 270, 1305, 1296, 206, 511, 1330, 435, 1346, + 205, 1396, 493, 255, 380, 377, 590, 285, 276, 272, + 252, 320, 389, 432, 524, 426, 1440, 373, 1382, 0, + 503, 405, 0, 0, 0, 1421, 1420, 1351, 1361, 1423, + 1370, 1408, 1356, 1395, 1313, 1381, 1435, 1342, 1391, 1436, + 326, 250, 328, 204, 417, 504, 289, 0, 0, 0, + 0, 0, 513, 731, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, + 354, 363, 362, 342, 343, 345, 347, 353, 360, 366, + 339, 348, 1338, 1388, 616, 1430, 1339, 1390, 268, 324, + 275, 267, 587, 1441, 1422, 1302, 1369, 1429, 1364, 603, + 0, 0, 231, 1432, 1363, 0, 1393, 0, 1447, 1297, + 1384, 0, 1300, 1304, 1443, 1427, 1333, 278, 0, 0, + 0, 0, 0, 0, 0, 1360, 1371, 1405, 1409, 1354, + 0, 0, 0, 0, 0, 0, 3237, 0, 1331, 0, + 1380, 0, 0, 0, 1309, 1301, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1358, 0, + 0, 0, 0, 1312, 0, 1332, 1406, 0, 1295, 300, + 1306, 406, 260, 0, 459, 1413, 1426, 1355, 636, 1428, + 1353, 1352, 1400, 1310, 1419, 1345, 368, 1308, 333, 199, + 227, 0, 1343, 416, 467, 479, 1418, 1328, 1337, 256, + 1335, 477, 430, 611, 235, 287, 464, 437, 475, 445, + 290, 1379, 1398, 476, 375, 592, 455, 608, 637, 638, + 266, 410, 622, 528, 630, 655, 228, 263, 424, 512, + 614, 500, 401, 588, 589, 332, 499, 298, 203, 372, + 643, 226, 485, 374, 244, 233, 594, 619, 302, 254, + 292, 462, 650, 215, 523, 605, 241, 489, 0, 0, + 658, 249, 510, 617, 606, 217, 601, 509, 397, 329, + 330, 216, 0, 463, 271, 296, 0, 0, 261, 419, + 596, 597, 259, 659, 230, 629, 222, 1307, 628, 412, + 591, 602, 398, 386, 221, 600, 396, 385, 337, 358, + 359, 283, 310, 452, 378, 453, 309, 311, 408, 407, + 409, 209, 615, 633, 0, 210, 0, 505, 618, 660, + 457, 214, 236, 237, 239, 1323, 282, 286, 294, 297, + 306, 307, 316, 370, 423, 451, 447, 456, 1414, 585, + 609, 623, 635, 641, 642, 644, 645, 646, 647, 648, + 651, 649, 411, 314, 501, 336, 376, 1403, 1446, 429, + 478, 242, 613, 502, 201, 1317, 1322, 1315, 0, 257, + 258, 1385, 581, 1318, 1316, 1374, 1375, 1319, 1437, 1438, + 1439, 1424, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 656, 514, 520, 515, 516, 517, 518, 519, 0, 521, + 1407, 1311, 0, 1320, 1321, 402, 1416, 598, 599, 679, + 387, 492, 610, 338, 352, 355, 344, 364, 0, 365, + 340, 341, 346, 349, 350, 351, 356, 357, 361, 367, + 251, 212, 394, 403, 584, 315, 218, 219, 220, 530, + 531, 532, 533, 626, 627, 631, 207, 468, 469, 470, + 471, 295, 621, 312, 474, 473, 334, 335, 382, 454, + 546, 548, 559, 563, 565, 567, 573, 576, 547, 549, + 560, 564, 566, 568, 574, 577, 536, 538, 540, 542, + 555, 554, 551, 579, 580, 557, 562, 541, 553, 558, + 571, 578, 575, 535, 539, 543, 552, 570, 569, 550, + 561, 572, 556, 544, 537, 545, 1378, 198, 223, 371, + 1442, 460, 291, 657, 625, 490, 620, 208, 225, 1314, + 265, 1326, 1334, 0, 1340, 1348, 1349, 1362, 1365, 1366, + 1367, 1368, 1386, 1387, 1389, 1397, 1399, 1402, 1404, 1411, + 1425, 1445, 200, 202, 211, 224, 234, 238, 245, 264, + 279, 281, 288, 301, 313, 321, 322, 325, 331, 383, + 390, 391, 392, 393, 413, 414, 415, 418, 421, 422, + 425, 427, 428, 431, 436, 440, 441, 442, 444, 446, + 448, 461, 466, 480, 481, 482, 483, 484, 487, 488, + 494, 495, 496, 497, 498, 506, 507, 522, 593, 595, + 612, 632, 639, 486, 388, 434, 458, 586, 304, 305, + 449, 450, 317, 318, 653, 654, 303, 607, 640, 604, + 652, 634, 443, 381, 1377, 1383, 384, 284, 308, 323, + 1392, 624, 508, 229, 472, 293, 253, 1410, 1412, 213, + 248, 232, 262, 277, 280, 327, 395, 404, 433, 439, + 299, 274, 246, 465, 243, 491, 525, 526, 527, 529, + 399, 269, 438, 1373, 1401, 379, 582, 583, 319, 400, + 0, 0, 0, 0, 0, 0, 1431, 1415, 534, 0, + 1357, 1434, 1325, 1344, 1444, 1347, 1350, 1394, 1303, 1372, + 420, 1341, 1329, 1298, 1336, 1299, 1327, 1359, 273, 1324, + 1417, 1376, 1433, 369, 270, 1305, 1296, 206, 511, 1330, + 435, 1346, 205, 1396, 493, 255, 380, 377, 590, 285, + 276, 272, 252, 320, 389, 432, 524, 426, 1440, 373, + 1382, 0, 503, 405, 0, 0, 0, 1421, 1420, 1351, + 1361, 1423, 1370, 1408, 1356, 1395, 1313, 1381, 1435, 1342, + 1391, 1436, 326, 250, 328, 204, 417, 504, 289, 0, + 0, 0, 0, 0, 513, 966, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, + 0, 0, 354, 363, 362, 342, 343, 345, 347, 353, + 360, 366, 339, 348, 1338, 1388, 616, 1430, 1339, 1390, + 268, 324, 275, 267, 587, 1441, 1422, 1302, 1369, 1429, + 1364, 603, 0, 0, 231, 1432, 1363, 0, 1393, 0, + 1447, 1297, 1384, 0, 1300, 1304, 1443, 1427, 1333, 278, + 0, 0, 0, 0, 0, 0, 0, 1360, 1371, 1405, + 1409, 1354, 0, 0, 0, 0, 0, 0, 2428, 0, + 1331, 0, 1380, 0, 0, 0, 1309, 1301, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1358, 0, 0, 0, 0, 1312, 0, 1332, 1406, 0, + 1295, 300, 1306, 406, 260, 0, 459, 1413, 1426, 1355, + 636, 1428, 1353, 1352, 1400, 1310, 1419, 1345, 368, 1308, + 333, 199, 227, 0, 1343, 416, 467, 479, 1418, 1328, + 1337, 256, 1335, 477, 430, 611, 235, 287, 464, 437, + 475, 445, 290, 1379, 1398, 476, 375, 592, 455, 608, + 637, 638, 266, 410, 622, 528, 630, 655, 228, 263, + 424, 512, 614, 500, 401, 588, 589, 332, 499, 298, + 203, 372, 643, 226, 485, 374, 244, 233, 594, 619, + 302, 254, 292, 462, 650, 215, 523, 605, 241, 489, + 0, 0, 658, 249, 510, 617, 606, 217, 601, 509, + 397, 329, 330, 216, 0, 463, 271, 296, 0, 0, + 261, 419, 596, 597, 259, 659, 230, 629, 222, 1307, + 628, 412, 591, 602, 398, 386, 221, 600, 396, 385, + 337, 358, 359, 283, 310, 452, 378, 453, 309, 311, + 408, 407, 409, 209, 615, 633, 0, 210, 0, 505, + 618, 660, 457, 214, 236, 237, 239, 1323, 282, 286, + 294, 297, 306, 307, 316, 370, 423, 451, 447, 456, + 1414, 585, 609, 623, 635, 641, 642, 644, 645, 646, + 647, 648, 651, 649, 411, 314, 501, 336, 376, 1403, + 1446, 429, 478, 242, 613, 502, 201, 1317, 1322, 1315, + 0, 257, 258, 1385, 581, 1318, 1316, 1374, 1375, 1319, + 1437, 1438, 1439, 1424, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 656, 514, 520, 515, 516, 517, 518, 519, + 0, 521, 1407, 1311, 0, 1320, 1321, 402, 1416, 598, + 599, 679, 387, 492, 610, 338, 352, 355, 344, 364, + 0, 365, 340, 341, 346, 349, 350, 351, 356, 357, + 361, 367, 251, 212, 394, 403, 584, 315, 218, 219, + 220, 530, 531, 532, 533, 626, 627, 631, 207, 468, + 469, 470, 471, 295, 621, 312, 474, 473, 334, 335, + 382, 454, 546, 548, 559, 563, 565, 567, 573, 576, + 547, 549, 560, 564, 566, 568, 574, 577, 536, 538, + 540, 542, 555, 554, 551, 579, 580, 557, 562, 541, + 553, 558, 571, 578, 575, 535, 539, 543, 552, 570, + 569, 550, 561, 572, 556, 544, 537, 545, 1378, 198, + 223, 371, 1442, 460, 291, 657, 625, 490, 620, 208, + 225, 1314, 265, 1326, 1334, 0, 1340, 1348, 1349, 1362, + 1365, 1366, 1367, 1368, 1386, 1387, 1389, 1397, 1399, 1402, + 1404, 1411, 1425, 1445, 200, 202, 211, 224, 234, 238, + 245, 264, 279, 281, 288, 301, 313, 321, 322, 325, + 331, 383, 390, 391, 392, 393, 413, 414, 415, 418, + 421, 422, 425, 427, 428, 431, 436, 440, 441, 442, + 444, 446, 448, 461, 466, 480, 481, 482, 483, 484, + 487, 488, 494, 495, 496, 497, 498, 506, 507, 522, + 593, 595, 612, 632, 639, 486, 388, 434, 458, 586, + 304, 305, 449, 450, 317, 318, 653, 654, 303, 607, + 640, 604, 652, 634, 443, 381, 1377, 1383, 384, 284, + 308, 323, 1392, 624, 508, 229, 472, 293, 253, 1410, + 1412, 213, 248, 232, 262, 277, 280, 327, 395, 404, + 433, 439, 299, 274, 246, 465, 243, 491, 525, 526, + 527, 529, 399, 269, 438, 1373, 1401, 379, 582, 583, + 319, 400, 0, 0, 0, 0, 0, 0, 1431, 1415, + 534, 0, 1357, 1434, 1325, 1344, 1444, 1347, 1350, 1394, + 1303, 1372, 420, 1341, 1329, 1298, 1336, 1299, 1327, 1359, + 273, 1324, 1417, 1376, 1433, 369, 270, 1305, 1296, 206, + 511, 1330, 435, 1346, 205, 1396, 493, 255, 380, 377, + 590, 285, 276, 272, 252, 320, 389, 432, 524, 426, + 1440, 373, 1382, 0, 503, 405, 0, 0, 0, 1421, + 1420, 1351, 1361, 1423, 1370, 1408, 1356, 1395, 1313, 1381, + 1435, 1342, 1391, 1436, 326, 250, 328, 204, 417, 504, + 289, 0, 95, 0, 0, 0, 513, 731, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, + 247, 0, 0, 0, 354, 363, 362, 342, 343, 345, + 347, 353, 360, 366, 339, 348, 1338, 1388, 616, 1430, + 1339, 1390, 268, 324, 275, 267, 587, 1441, 1422, 1302, + 1369, 1429, 1364, 603, 0, 0, 231, 1432, 1363, 0, + 1393, 0, 1447, 1297, 1384, 0, 1300, 1304, 1443, 1427, + 1333, 278, 0, 0, 0, 0, 0, 0, 0, 1360, + 1371, 1405, 1409, 1354, 0, 0, 0, 0, 0, 0, + 0, 0, 1331, 0, 1380, 0, 0, 0, 1309, 1301, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1358, 0, 0, 0, 0, 1312, 0, 1332, + 1406, 0, 1295, 300, 1306, 406, 260, 0, 459, 1413, + 1426, 1355, 636, 1428, 1353, 1352, 1400, 1310, 1419, 1345, + 368, 1308, 333, 199, 227, 0, 1343, 416, 467, 479, + 1418, 1328, 1337, 256, 1335, 477, 430, 611, 235, 287, + 464, 437, 475, 445, 290, 1379, 1398, 476, 375, 592, + 455, 608, 637, 638, 266, 410, 622, 528, 630, 655, + 228, 263, 424, 512, 614, 500, 401, 588, 589, 332, + 499, 298, 203, 372, 643, 226, 485, 374, 244, 233, + 594, 619, 302, 254, 292, 462, 650, 215, 523, 605, + 241, 489, 0, 0, 658, 249, 510, 617, 606, 217, + 601, 509, 397, 329, 330, 216, 0, 463, 271, 296, + 0, 0, 261, 419, 596, 597, 259, 659, 230, 629, + 222, 1307, 628, 412, 591, 602, 398, 386, 221, 600, + 396, 385, 337, 358, 359, 283, 310, 452, 378, 453, + 309, 311, 408, 407, 409, 209, 615, 633, 0, 210, + 0, 505, 618, 660, 457, 214, 236, 237, 239, 1323, + 282, 286, 294, 297, 306, 307, 316, 370, 423, 451, + 447, 456, 1414, 585, 609, 623, 635, 641, 642, 644, + 645, 646, 647, 648, 651, 649, 411, 314, 501, 336, + 376, 1403, 1446, 429, 478, 242, 613, 502, 201, 1317, + 1322, 1315, 0, 257, 258, 1385, 581, 1318, 1316, 1374, + 1375, 1319, 1437, 1438, 1439, 1424, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 656, 514, 520, 515, 516, 517, + 518, 519, 0, 521, 1407, 1311, 0, 1320, 1321, 402, + 1416, 598, 599, 679, 387, 492, 610, 338, 352, 355, + 344, 364, 0, 365, 340, 341, 346, 349, 350, 351, + 356, 357, 361, 367, 251, 212, 394, 403, 584, 315, + 218, 219, 220, 530, 531, 532, 533, 626, 627, 631, + 207, 468, 469, 470, 471, 295, 621, 312, 474, 473, + 334, 335, 382, 454, 546, 548, 559, 563, 565, 567, + 573, 576, 547, 549, 560, 564, 566, 568, 574, 577, + 536, 538, 540, 542, 555, 554, 551, 579, 580, 557, + 562, 541, 553, 558, 571, 578, 575, 535, 539, 543, + 552, 570, 569, 550, 561, 572, 556, 544, 537, 545, + 1378, 198, 223, 371, 1442, 460, 291, 657, 625, 490, + 620, 208, 225, 1314, 265, 1326, 1334, 0, 1340, 1348, + 1349, 1362, 1365, 1366, 1367, 1368, 1386, 1387, 1389, 1397, + 1399, 1402, 1404, 1411, 1425, 1445, 200, 202, 211, 224, + 234, 238, 245, 264, 279, 281, 288, 301, 313, 321, + 322, 325, 331, 383, 390, 391, 392, 393, 413, 414, + 415, 418, 421, 422, 425, 427, 428, 431, 436, 440, + 441, 442, 444, 446, 448, 461, 466, 480, 481, 482, + 483, 484, 487, 488, 494, 495, 496, 497, 498, 506, + 507, 522, 593, 595, 612, 632, 639, 486, 388, 434, + 458, 586, 304, 305, 449, 450, 317, 318, 653, 654, + 303, 607, 640, 604, 652, 634, 443, 381, 1377, 1383, + 384, 284, 308, 323, 1392, 624, 508, 229, 472, 293, + 253, 1410, 1412, 213, 248, 232, 262, 277, 280, 327, + 395, 404, 433, 439, 299, 274, 246, 465, 243, 491, + 525, 526, 527, 529, 399, 269, 438, 1373, 1401, 379, + 582, 583, 319, 400, 0, 0, 0, 0, 0, 0, + 1431, 1415, 534, 0, 1357, 1434, 1325, 1344, 1444, 1347, + 1350, 1394, 1303, 1372, 420, 1341, 1329, 1298, 1336, 1299, + 1327, 1359, 273, 1324, 1417, 1376, 1433, 369, 270, 1305, + 1296, 206, 511, 1330, 435, 1346, 205, 1396, 493, 255, + 380, 377, 590, 285, 276, 272, 252, 320, 389, 432, + 524, 426, 1440, 373, 1382, 0, 503, 405, 0, 0, + 0, 1421, 1420, 1351, 1361, 1423, 1370, 1408, 1356, 1395, + 1313, 1381, 1435, 1342, 1391, 1436, 326, 250, 328, 204, + 417, 504, 289, 0, 0, 0, 0, 0, 513, 196, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, + 0, 0, 247, 0, 0, 0, 354, 363, 362, 342, + 343, 345, 347, 353, 360, 366, 339, 348, 1338, 1388, + 616, 1430, 1339, 1390, 268, 324, 275, 267, 587, 1441, + 1422, 1302, 1369, 1429, 1364, 603, 0, 0, 231, 1432, + 1363, 0, 1393, 0, 1447, 1297, 1384, 0, 1300, 1304, + 1443, 1427, 1333, 278, 0, 0, 0, 0, 0, 0, + 0, 1360, 1371, 1405, 1409, 1354, 0, 0, 0, 0, + 0, 0, 0, 0, 1331, 0, 1380, 0, 0, 0, + 1309, 1301, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1358, 0, 0, 0, 0, 1312, + 0, 1332, 1406, 0, 1295, 300, 1306, 406, 260, 0, + 459, 1413, 1426, 1355, 636, 1428, 1353, 1352, 1400, 1310, + 1419, 1345, 368, 1308, 333, 199, 227, 0, 1343, 416, + 467, 479, 1418, 1328, 1337, 256, 1335, 477, 430, 611, + 235, 287, 464, 437, 475, 445, 290, 1379, 1398, 476, + 375, 592, 455, 608, 637, 638, 266, 410, 622, 528, + 630, 655, 228, 263, 424, 512, 614, 500, 401, 588, + 589, 332, 499, 298, 203, 372, 643, 226, 485, 374, + 244, 233, 594, 619, 302, 254, 292, 462, 650, 215, + 523, 605, 241, 489, 0, 0, 658, 249, 510, 617, + 606, 217, 601, 509, 397, 329, 330, 216, 0, 463, + 271, 296, 0, 0, 261, 419, 596, 597, 259, 659, + 230, 629, 222, 1307, 628, 412, 591, 602, 398, 386, + 221, 600, 396, 385, 337, 358, 359, 283, 310, 452, + 378, 453, 309, 311, 408, 407, 409, 209, 615, 633, + 0, 210, 0, 505, 618, 660, 457, 214, 236, 237, + 239, 1323, 282, 286, 294, 297, 306, 307, 316, 370, + 423, 451, 447, 456, 1414, 585, 609, 623, 635, 641, + 642, 644, 645, 646, 647, 648, 651, 649, 411, 314, + 501, 336, 376, 1403, 1446, 429, 478, 242, 613, 502, + 201, 1317, 1322, 1315, 0, 257, 258, 1385, 581, 1318, + 1316, 1374, 1375, 1319, 1437, 1438, 1439, 1424, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 656, 514, 520, 515, + 516, 517, 518, 519, 0, 521, 1407, 1311, 0, 1320, + 1321, 402, 1416, 598, 599, 679, 387, 492, 610, 338, + 352, 355, 344, 364, 0, 365, 340, 341, 346, 349, + 350, 351, 356, 357, 361, 367, 251, 212, 394, 403, + 584, 315, 218, 219, 220, 530, 531, 532, 533, 626, + 627, 631, 207, 468, 469, 470, 471, 295, 621, 312, + 474, 473, 334, 335, 382, 454, 546, 548, 559, 563, + 565, 567, 573, 576, 547, 549, 560, 564, 566, 568, + 574, 577, 536, 538, 540, 542, 555, 554, 551, 579, + 580, 557, 562, 541, 553, 558, 571, 578, 575, 535, + 539, 543, 552, 570, 569, 550, 561, 572, 556, 544, + 537, 545, 1378, 198, 223, 371, 1442, 460, 291, 657, + 625, 490, 620, 208, 225, 1314, 265, 1326, 1334, 0, + 1340, 1348, 1349, 1362, 1365, 1366, 1367, 1368, 1386, 1387, + 1389, 1397, 1399, 1402, 1404, 1411, 1425, 1445, 200, 202, + 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, + 313, 321, 322, 325, 331, 383, 390, 391, 392, 393, + 413, 414, 415, 418, 421, 422, 425, 427, 428, 431, + 436, 440, 441, 442, 444, 446, 448, 461, 466, 480, + 481, 482, 483, 484, 487, 488, 494, 495, 496, 497, + 498, 506, 507, 522, 593, 595, 612, 632, 639, 486, + 388, 434, 458, 586, 304, 305, 449, 450, 317, 318, + 653, 654, 303, 607, 640, 604, 652, 634, 443, 381, + 1377, 1383, 384, 284, 308, 323, 1392, 624, 508, 229, + 472, 293, 253, 1410, 1412, 213, 248, 232, 262, 277, + 280, 327, 395, 404, 433, 439, 299, 274, 246, 465, + 243, 491, 525, 526, 527, 529, 399, 269, 438, 1373, + 1401, 379, 582, 583, 319, 400, 0, 0, 0, 0, + 0, 0, 1431, 1415, 534, 0, 1357, 1434, 1325, 1344, + 1444, 1347, 1350, 1394, 1303, 1372, 420, 1341, 1329, 1298, + 1336, 1299, 1327, 1359, 273, 1324, 1417, 1376, 1433, 369, + 270, 1305, 1296, 206, 511, 1330, 435, 1346, 205, 1396, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 1440, 373, 1382, 0, 503, 405, + 0, 0, 0, 1421, 1420, 1351, 1361, 1423, 1370, 1408, + 1356, 1395, 1313, 1381, 1435, 1342, 1391, 1436, 326, 250, + 328, 204, 417, 504, 289, 0, 0, 0, 0, 0, + 513, 731, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 240, 0, 0, 247, 0, 0, 0, 354, 363, + 362, 342, 343, 345, 347, 353, 360, 366, 339, 348, + 1338, 1388, 616, 1430, 1339, 1390, 268, 324, 275, 267, + 587, 1441, 1422, 1302, 1369, 1429, 1364, 603, 0, 0, + 231, 1432, 1363, 0, 1393, 0, 1447, 1297, 1384, 0, + 1300, 1304, 1443, 1427, 1333, 278, 0, 0, 0, 0, + 0, 0, 0, 1360, 1371, 1405, 1409, 1354, 0, 0, + 0, 0, 0, 0, 0, 0, 1331, 0, 1380, 0, + 0, 0, 1309, 1301, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1358, 0, 0, 0, + 0, 1312, 0, 1332, 1406, 0, 1295, 300, 1306, 406, + 260, 0, 459, 1413, 1426, 1355, 636, 1428, 1353, 1352, + 1400, 1310, 1419, 1345, 368, 1308, 333, 199, 227, 0, + 1343, 416, 467, 479, 1418, 1328, 1337, 256, 1335, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 1379, + 1398, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 596, 597, + 259, 659, 230, 629, 222, 1307, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 358, 359, 283, + 310, 452, 378, 453, 309, 311, 408, 407, 409, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 1323, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 1414, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 1403, 1446, 429, 478, 242, + 613, 502, 201, 1317, 1322, 1315, 0, 257, 258, 1385, + 581, 1318, 1316, 1374, 1375, 1319, 1437, 1438, 1439, 1424, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 1407, 1311, + 0, 1320, 1321, 402, 1416, 598, 599, 679, 387, 492, + 610, 338, 352, 355, 344, 364, 0, 365, 340, 341, + 346, 349, 350, 351, 356, 357, 361, 367, 251, 212, + 394, 403, 584, 315, 218, 219, 220, 530, 531, 532, + 533, 626, 627, 631, 207, 468, 469, 470, 471, 295, + 621, 312, 474, 473, 334, 335, 382, 454, 546, 548, + 559, 563, 565, 567, 573, 576, 547, 549, 560, 564, + 566, 568, 574, 577, 536, 538, 540, 542, 555, 554, + 551, 579, 580, 557, 562, 541, 553, 558, 571, 578, + 575, 535, 539, 543, 552, 570, 569, 550, 561, 572, + 556, 544, 537, 545, 1378, 198, 223, 371, 1442, 460, + 291, 657, 625, 490, 620, 208, 225, 1314, 265, 1326, + 1334, 0, 1340, 1348, 1349, 1362, 1365, 1366, 1367, 1368, + 1386, 1387, 1389, 1397, 1399, 1402, 1404, 1411, 1425, 1445, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 304, 305, 449, 450, + 317, 318, 653, 654, 303, 607, 640, 604, 652, 634, + 443, 381, 1377, 1383, 384, 284, 308, 323, 1392, 624, + 508, 229, 472, 293, 253, 1410, 1412, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 1373, 1401, 379, 582, 583, 319, 400, 0, 0, + 0, 0, 0, 0, 1431, 1415, 534, 0, 1357, 1434, + 1325, 1344, 1444, 1347, 1350, 1394, 1303, 1372, 420, 1341, + 1329, 1298, 1336, 1299, 1327, 1359, 273, 1324, 1417, 1376, + 1433, 369, 270, 1305, 1296, 206, 511, 1330, 435, 1346, + 205, 1396, 493, 255, 380, 377, 590, 285, 276, 272, + 252, 320, 389, 432, 524, 426, 1440, 373, 1382, 0, + 503, 405, 0, 0, 0, 1421, 1420, 1351, 1361, 1423, + 1370, 1408, 1356, 1395, 1313, 1381, 1435, 1342, 1391, 1436, + 326, 250, 328, 204, 417, 504, 289, 0, 0, 0, + 0, 0, 513, 966, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, + 354, 363, 362, 342, 343, 345, 347, 353, 360, 366, + 339, 348, 1338, 1388, 616, 1430, 1339, 1390, 268, 324, + 275, 267, 587, 1441, 1422, 1302, 1369, 1429, 1364, 603, + 0, 0, 231, 1432, 1363, 0, 1393, 0, 1447, 1297, + 1384, 0, 1300, 1304, 1443, 1427, 1333, 278, 0, 0, + 0, 0, 0, 0, 0, 1360, 1371, 1405, 1409, 1354, + 0, 0, 0, 0, 0, 0, 0, 0, 1331, 0, + 1380, 0, 0, 0, 1309, 1301, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1358, 0, + 0, 0, 0, 1312, 0, 1332, 1406, 0, 1295, 300, + 1306, 406, 260, 0, 459, 1413, 1426, 1355, 636, 1428, + 1353, 1352, 1400, 1310, 1419, 1345, 368, 1308, 333, 199, + 227, 0, 1343, 416, 467, 479, 1418, 1328, 1337, 256, + 1335, 477, 430, 611, 235, 287, 464, 437, 475, 445, + 290, 1379, 1398, 476, 375, 592, 455, 608, 637, 638, + 266, 410, 622, 528, 630, 655, 228, 263, 424, 512, + 614, 500, 401, 588, 589, 332, 499, 298, 203, 372, + 643, 226, 485, 374, 244, 233, 594, 619, 302, 254, + 292, 462, 650, 215, 523, 605, 241, 489, 0, 0, + 658, 249, 510, 617, 606, 217, 601, 509, 397, 329, + 330, 216, 0, 463, 271, 296, 0, 0, 261, 419, + 596, 597, 259, 659, 230, 629, 222, 1307, 628, 412, + 591, 602, 398, 386, 221, 600, 396, 385, 337, 358, + 359, 283, 310, 452, 378, 453, 309, 311, 408, 407, + 409, 209, 615, 633, 0, 210, 0, 505, 618, 660, + 457, 214, 236, 237, 239, 1323, 282, 286, 294, 297, + 306, 307, 316, 370, 423, 451, 447, 456, 1414, 585, + 609, 623, 635, 641, 642, 644, 645, 646, 647, 648, + 651, 649, 411, 314, 501, 336, 376, 1403, 1446, 429, + 478, 242, 613, 502, 201, 1317, 1322, 1315, 0, 257, + 258, 1385, 581, 1318, 1316, 1374, 1375, 1319, 1437, 1438, + 1439, 1424, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 656, 514, 520, 515, 516, 517, 518, 519, 0, 521, + 1407, 1311, 0, 1320, 1321, 402, 1416, 598, 599, 679, + 387, 492, 610, 338, 352, 355, 344, 364, 0, 365, + 340, 341, 346, 349, 350, 351, 356, 357, 361, 367, + 251, 212, 394, 403, 584, 315, 218, 219, 220, 530, + 531, 532, 533, 626, 627, 631, 207, 468, 469, 470, + 471, 295, 621, 312, 474, 473, 334, 335, 382, 454, + 546, 548, 559, 563, 565, 567, 573, 576, 547, 549, + 560, 564, 566, 568, 574, 577, 536, 538, 540, 542, + 555, 554, 551, 579, 580, 557, 562, 541, 553, 558, + 571, 578, 575, 535, 539, 543, 552, 570, 569, 550, + 561, 572, 556, 544, 537, 545, 1378, 198, 223, 371, + 1442, 460, 291, 657, 625, 490, 620, 208, 225, 1314, + 265, 1326, 1334, 0, 1340, 1348, 1349, 1362, 1365, 1366, + 1367, 1368, 1386, 1387, 1389, 1397, 1399, 1402, 1404, 1411, + 1425, 1445, 200, 202, 211, 224, 234, 238, 245, 264, + 279, 281, 288, 301, 313, 321, 322, 325, 331, 383, + 390, 391, 392, 393, 413, 414, 415, 418, 421, 422, + 425, 427, 428, 431, 436, 440, 441, 442, 444, 446, + 448, 461, 466, 480, 481, 482, 483, 484, 487, 488, + 494, 495, 496, 497, 498, 506, 507, 522, 593, 595, + 612, 632, 639, 486, 388, 434, 458, 586, 304, 305, + 449, 450, 317, 318, 653, 654, 303, 607, 640, 604, + 652, 634, 443, 381, 1377, 1383, 384, 284, 308, 323, + 1392, 624, 508, 229, 472, 293, 253, 1410, 1412, 213, + 248, 232, 262, 277, 280, 327, 395, 404, 433, 439, + 299, 274, 246, 465, 243, 491, 525, 526, 527, 529, + 399, 269, 438, 1373, 1401, 379, 582, 583, 319, 400, + 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, + 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 420, 0, 0, 0, 771, 0, 0, 0, 273, 776, + 0, 0, 0, 369, 270, 0, 0, 206, 511, 0, + 435, 0, 205, 0, 493, 255, 380, 377, 590, 285, + 276, 272, 252, 320, 389, 432, 524, 426, 783, 373, + 0, 0, 503, 405, 0, 0, 0, 0, 0, 0, + 0, 0, 778, 779, 0, 0, 0, 0, 0, 0, + 0, 0, 326, 250, 328, 204, 417, 504, 289, 0, + 95, 0, 0, 1032, 513, 966, 755, 932, 970, 1033, + 984, 985, 986, 971, 0, 240, 972, 973, 247, 974, + 0, 931, 814, 816, 815, 881, 882, 883, 884, 885, + 886, 887, 817, 818, 812, 979, 616, 987, 988, 0, + 268, 324, 275, 267, 587, 0, 0, 2248, 2249, 2250, + 0, 603, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 751, 768, 0, 782, 0, 0, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 765, 766, 0, 0, + 0, 0, 926, 0, 767, 0, 0, 775, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 771, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 298, 0, 403, 258, 0, 454, - 919, 0, 0, 630, 0, 0, 917, 0, 0, 0, - 0, 366, 0, 331, 197, 225, 0, 0, 413, 462, - 474, 0, 0, 0, 970, 0, 472, 427, 605, 233, - 285, 459, 433, 470, 441, 288, 0, 0, 471, 373, - 586, 451, 602, 631, 632, 264, 407, 616, 523, 624, - 649, 226, 261, 421, 507, 608, 495, 398, 582, 583, - 330, 494, 296, 201, 370, 637, 224, 480, 372, 242, - 231, 588, 613, 300, 252, 290, 457, 644, 213, 518, - 599, 239, 484, 0, 0, 652, 247, 505, 611, 600, - 215, 595, 504, 394, 327, 328, 214, 0, 458, 269, - 294, 0, 0, 259, 416, 971, 972, 257, 653, 816, - 623, 220, 0, 622, 409, 585, 596, 395, 384, 219, - 594, 393, 383, 335, 824, 825, 281, 308, 901, 900, - 899, 307, 309, 897, 898, 896, 207, 609, 627, 0, - 208, 0, 500, 612, 654, 453, 212, 234, 235, 237, - 0, 280, 284, 292, 295, 304, 305, 314, 368, 420, - 447, 443, 452, 0, 580, 603, 617, 629, 635, 636, - 638, 639, 640, 641, 642, 645, 643, 408, 312, 496, - 334, 374, 0, 0, 426, 473, 240, 607, 497, 907, - 929, 918, 782, 783, 908, 909, 933, 910, 785, 786, - 930, 931, 779, 780, 784, 932, 934, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 650, 509, 515, 510, 511, - 512, 513, 514, 0, 516, 921, 768, 767, 0, 774, - 775, 0, 804, 805, 807, 813, 814, 815, 826, 873, - 874, 882, 884, 885, 883, 886, 887, 888, 891, 892, - 893, 894, 889, 890, 895, 787, 791, 788, 789, 790, - 802, 792, 793, 794, 795, 796, 797, 798, 799, 800, - 801, 803, 944, 945, 946, 947, 948, 949, 819, 823, - 822, 820, 821, 817, 818, 845, 844, 846, 847, 848, - 849, 850, 851, 853, 852, 854, 855, 856, 857, 858, - 859, 827, 828, 831, 832, 830, 829, 833, 842, 843, - 834, 835, 836, 837, 838, 839, 841, 840, 860, 861, - 862, 863, 864, 866, 865, 869, 870, 868, 867, 872, - 871, 766, 196, 221, 369, 0, 455, 289, 651, 619, - 485, 614, 206, 223, 935, 263, 936, 0, 0, 940, - 0, 0, 0, 942, 941, 0, 943, 905, 904, 0, - 0, 937, 938, 0, 939, 0, 0, 198, 200, 209, - 222, 232, 236, 243, 262, 277, 279, 286, 299, 311, - 319, 320, 323, 329, 381, 387, 388, 389, 390, 410, - 411, 412, 415, 418, 419, 422, 424, 425, 428, 432, - 436, 437, 438, 440, 442, 444, 456, 461, 475, 476, - 477, 478, 479, 482, 483, 489, 490, 491, 492, 493, - 501, 502, 517, 587, 589, 606, 626, 633, 481, 950, - 951, 952, 953, 954, 955, 956, 957, 301, 601, 634, - 598, 646, 628, 439, 379, 0, 0, 382, 282, 306, - 321, 0, 618, 503, 227, 467, 291, 251, 975, 0, - 211, 246, 230, 260, 275, 278, 325, 392, 401, 430, - 435, 297, 272, 244, 460, 241, 486, 520, 521, 522, - 524, 396, 267, 434, 397, 0, 377, 577, 578, 317, - 0, 0, 0, 529, 0, 778, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 765, - 0, 0, 0, 271, 770, 0, 0, 0, 367, 268, - 0, 0, 204, 506, 0, 431, 0, 203, 0, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 777, 371, 0, 0, 498, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 772, 773, 0, - 0, 0, 0, 0, 0, 2440, 0, 324, 248, 326, - 202, 414, 499, 287, 0, 95, 0, 0, 1024, 508, - 960, 749, 926, 964, 1025, 977, 978, 979, 965, 0, - 238, 966, 967, 245, 968, 0, 925, 808, 810, 809, - 875, 876, 877, 878, 879, 880, 881, 811, 812, 806, - 973, 610, 980, 981, 2441, 266, 322, 273, 265, 581, - 0, 0, 0, 0, 0, 0, 597, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 745, 762, 0, - 776, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 759, 760, 0, 0, 0, 0, 920, 0, 761, - 0, 0, 769, 982, 983, 984, 985, 986, 987, 988, + 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, + 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 300, 0, 406, 260, 0, 459, 925, 0, 0, + 636, 0, 0, 923, 0, 0, 0, 0, 368, 0, + 333, 199, 227, 0, 0, 416, 467, 479, 0, 0, + 0, 976, 0, 477, 430, 611, 235, 287, 464, 437, + 475, 445, 290, 0, 0, 476, 375, 592, 455, 608, + 637, 638, 266, 410, 622, 528, 630, 655, 228, 263, + 424, 512, 614, 500, 401, 588, 589, 332, 499, 298, + 203, 372, 643, 226, 485, 374, 244, 233, 594, 619, + 302, 254, 292, 462, 650, 215, 523, 605, 241, 489, + 0, 0, 658, 249, 510, 617, 606, 217, 601, 509, + 397, 329, 330, 216, 0, 463, 271, 296, 0, 0, + 261, 419, 977, 978, 259, 659, 822, 629, 222, 0, + 628, 412, 591, 602, 398, 386, 221, 600, 396, 385, + 337, 830, 831, 283, 310, 907, 906, 905, 309, 311, + 903, 904, 902, 209, 615, 633, 0, 210, 0, 505, + 618, 660, 457, 214, 236, 237, 239, 0, 282, 286, + 294, 297, 306, 307, 316, 370, 423, 451, 447, 456, + 0, 585, 609, 623, 635, 641, 642, 644, 645, 646, + 647, 648, 651, 649, 411, 314, 501, 336, 376, 0, + 0, 429, 478, 242, 613, 502, 913, 935, 924, 788, + 789, 914, 915, 939, 916, 791, 792, 936, 937, 785, + 786, 790, 938, 940, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 656, 514, 520, 515, 516, 517, 518, 519, + 0, 521, 927, 774, 773, 0, 780, 781, 0, 810, + 811, 813, 819, 820, 821, 832, 879, 880, 888, 890, + 891, 889, 892, 893, 894, 897, 898, 899, 900, 895, + 896, 901, 793, 797, 794, 795, 796, 808, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 809, 950, + 951, 952, 953, 954, 955, 825, 829, 828, 826, 827, + 823, 824, 851, 850, 852, 853, 854, 855, 856, 857, + 859, 858, 860, 861, 862, 863, 864, 865, 833, 834, + 837, 838, 836, 835, 839, 848, 849, 840, 841, 842, + 843, 844, 845, 847, 846, 866, 867, 868, 869, 870, + 872, 871, 875, 876, 874, 873, 878, 877, 772, 198, + 223, 371, 0, 460, 291, 657, 625, 490, 620, 208, + 225, 941, 265, 942, 0, 0, 946, 0, 0, 0, + 948, 947, 0, 949, 911, 910, 0, 0, 943, 944, + 0, 945, 0, 0, 200, 202, 211, 224, 234, 238, + 245, 264, 279, 281, 288, 301, 313, 321, 322, 325, + 331, 383, 390, 391, 392, 393, 413, 414, 415, 418, + 421, 422, 425, 427, 428, 431, 436, 440, 441, 442, + 444, 446, 448, 461, 466, 480, 481, 482, 483, 484, + 487, 488, 494, 495, 496, 497, 498, 506, 507, 522, + 593, 595, 612, 632, 639, 486, 388, 434, 458, 586, + 956, 957, 958, 959, 960, 961, 962, 963, 303, 607, + 640, 604, 652, 634, 443, 381, 0, 0, 384, 284, + 308, 323, 0, 624, 508, 229, 472, 293, 253, 1031, + 0, 213, 248, 232, 262, 277, 280, 327, 395, 404, + 433, 439, 299, 274, 246, 465, 243, 491, 525, 526, + 527, 529, 399, 269, 438, 400, 0, 379, 582, 583, + 319, 0, 0, 0, 534, 0, 784, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 771, 0, 0, 0, 273, 776, 0, 0, 0, 369, + 270, 0, 0, 206, 511, 0, 435, 0, 205, 0, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 783, 373, 0, 0, 503, 405, + 0, 0, 0, 0, 0, 0, 0, 0, 778, 779, + 0, 0, 0, 0, 0, 0, 2457, 0, 326, 250, + 328, 204, 417, 504, 289, 0, 95, 0, 0, 1032, + 513, 966, 755, 932, 970, 1033, 984, 985, 986, 971, + 0, 240, 972, 973, 247, 974, 0, 931, 814, 816, + 815, 881, 882, 883, 884, 885, 886, 887, 817, 818, + 812, 979, 616, 987, 988, 2458, 268, 324, 275, 267, + 587, 0, 0, 0, 0, 0, 0, 603, 0, 0, + 231, 0, 0, 0, 0, 0, 0, 0, 751, 768, + 0, 782, 0, 0, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 765, 766, 0, 0, 0, 0, 926, 0, + 767, 0, 0, 775, 989, 990, 991, 992, 993, 994, + 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, + 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, + 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, + 1025, 1026, 1027, 1028, 1029, 1030, 777, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 0, 406, + 260, 0, 459, 925, 0, 0, 636, 0, 0, 923, + 0, 0, 0, 0, 368, 0, 333, 199, 227, 0, + 0, 416, 467, 479, 0, 0, 0, 976, 0, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 0, + 0, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 977, 978, + 259, 659, 822, 629, 222, 0, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 830, 831, 283, + 310, 907, 906, 905, 309, 311, 903, 904, 902, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 0, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 0, 0, 429, 478, 242, + 613, 502, 913, 935, 924, 788, 789, 914, 915, 939, + 916, 791, 792, 936, 937, 785, 786, 790, 938, 940, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 927, 774, + 773, 0, 780, 781, 0, 810, 811, 813, 819, 820, + 821, 832, 879, 880, 888, 890, 891, 889, 892, 893, + 894, 897, 898, 899, 900, 895, 896, 901, 793, 797, + 794, 795, 796, 808, 798, 799, 800, 801, 802, 803, + 804, 805, 806, 807, 809, 950, 951, 952, 953, 954, + 955, 825, 829, 828, 826, 827, 823, 824, 851, 850, + 852, 853, 854, 855, 856, 857, 859, 858, 860, 861, + 862, 863, 864, 865, 833, 834, 837, 838, 836, 835, + 839, 848, 849, 840, 841, 842, 843, 844, 845, 847, + 846, 866, 867, 868, 869, 870, 872, 871, 875, 876, + 874, 873, 878, 877, 772, 198, 223, 371, 0, 460, + 291, 657, 625, 490, 620, 208, 225, 941, 265, 942, + 0, 0, 946, 0, 0, 0, 948, 947, 0, 949, + 911, 910, 0, 0, 943, 944, 0, 945, 0, 0, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 956, 957, 958, 959, + 960, 961, 962, 963, 303, 607, 640, 604, 652, 634, + 443, 381, 0, 0, 384, 284, 308, 323, 0, 624, + 508, 229, 472, 293, 253, 1031, 0, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 400, 0, 379, 582, 583, 319, 0, 0, 86, + 534, 0, 784, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 420, 0, 0, 0, 771, 0, 0, 0, + 273, 776, 0, 0, 0, 369, 270, 0, 0, 206, + 511, 0, 435, 0, 205, 0, 493, 255, 380, 377, + 590, 285, 276, 272, 252, 320, 389, 432, 524, 426, + 1727, 373, 0, 0, 503, 405, 0, 0, 0, 0, + 0, 0, 0, 0, 778, 779, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 250, 328, 204, 417, 504, + 289, 0, 95, 0, 0, 1032, 513, 966, 755, 932, + 970, 1033, 984, 985, 986, 971, 0, 240, 972, 973, + 247, 974, 0, 931, 814, 816, 815, 881, 882, 883, + 884, 885, 886, 887, 817, 818, 812, 979, 616, 987, + 988, 0, 268, 324, 275, 267, 587, 0, 0, 0, + 0, 0, 0, 603, 0, 0, 231, 0, 0, 0, + 0, 0, 0, 0, 751, 768, 0, 782, 0, 0, + 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 765, 766, + 0, 0, 0, 0, 926, 0, 767, 0, 0, 775, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, - 1019, 1020, 1021, 1022, 1023, 771, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 298, 0, 403, 258, - 0, 454, 919, 0, 0, 630, 0, 0, 917, 0, - 0, 0, 0, 366, 0, 331, 197, 225, 0, 0, - 413, 462, 474, 0, 0, 0, 970, 0, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 0, 0, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 971, 972, 257, - 653, 816, 623, 220, 0, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 824, 825, 281, 308, - 901, 900, 899, 307, 309, 897, 898, 896, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 0, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 0, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 0, 0, 426, 473, 240, 607, - 497, 907, 929, 918, 782, 783, 908, 909, 933, 910, - 785, 786, 930, 931, 779, 780, 784, 932, 934, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 921, 768, 767, - 0, 774, 775, 0, 804, 805, 807, 813, 814, 815, - 826, 873, 874, 882, 884, 885, 883, 886, 887, 888, - 891, 892, 893, 894, 889, 890, 895, 787, 791, 788, - 789, 790, 802, 792, 793, 794, 795, 796, 797, 798, - 799, 800, 801, 803, 944, 945, 946, 947, 948, 949, - 819, 823, 822, 820, 821, 817, 818, 845, 844, 846, - 847, 848, 849, 850, 851, 853, 852, 854, 855, 856, - 857, 858, 859, 827, 828, 831, 832, 830, 829, 833, - 842, 843, 834, 835, 836, 837, 838, 839, 841, 840, - 860, 861, 862, 863, 864, 866, 865, 869, 870, 868, - 867, 872, 871, 766, 196, 221, 369, 0, 455, 289, - 651, 619, 485, 614, 206, 223, 935, 263, 936, 0, - 0, 940, 0, 0, 0, 942, 941, 0, 943, 905, - 904, 0, 0, 937, 938, 0, 939, 0, 0, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 950, 951, 952, 953, 954, 955, 956, 957, 301, - 601, 634, 598, 646, 628, 439, 379, 0, 0, 382, - 282, 306, 321, 0, 618, 503, 227, 467, 291, 251, - 975, 0, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 397, 0, 377, 577, - 578, 317, 0, 0, 86, 529, 0, 778, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, - 0, 765, 0, 0, 0, 271, 770, 0, 0, 0, - 367, 268, 0, 0, 204, 506, 0, 431, 0, 203, - 0, 488, 253, 378, 375, 584, 283, 274, 270, 250, - 318, 386, 429, 519, 423, 777, 371, 0, 0, 498, - 402, 0, 0, 0, 0, 0, 0, 0, 0, 772, - 773, 0, 0, 0, 0, 0, 0, 0, 0, 324, - 248, 326, 202, 414, 499, 287, 0, 95, 0, 0, - 1024, 508, 960, 749, 926, 964, 1025, 977, 978, 979, - 965, 0, 238, 966, 967, 245, 968, 0, 925, 808, - 810, 809, 875, 876, 877, 878, 879, 880, 881, 811, - 812, 806, 973, 610, 980, 981, 0, 266, 322, 273, - 265, 581, 0, 0, 0, 0, 0, 0, 597, 0, - 0, 229, 0, 0, 0, 0, 0, 0, 0, 745, - 762, 0, 776, 0, 0, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 759, 760, 0, 0, 0, 0, 920, - 0, 761, 0, 0, 769, 982, 983, 984, 985, 986, - 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, - 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, - 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, - 1017, 1018, 1019, 1020, 1021, 1022, 1023, 771, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, - 403, 258, 0, 454, 919, 0, 0, 630, 0, 0, - 917, 0, 0, 0, 0, 366, 0, 331, 197, 225, - 0, 0, 413, 462, 474, 0, 0, 0, 970, 0, - 472, 427, 605, 233, 285, 459, 433, 470, 441, 288, - 0, 0, 471, 373, 586, 451, 602, 631, 632, 264, - 407, 616, 523, 624, 649, 226, 261, 421, 507, 608, - 495, 398, 582, 583, 330, 494, 296, 201, 370, 637, - 224, 480, 372, 242, 231, 588, 613, 300, 252, 290, - 457, 644, 213, 518, 599, 239, 484, 0, 0, 652, - 247, 505, 611, 600, 215, 595, 504, 394, 327, 328, - 214, 0, 458, 269, 294, 0, 0, 259, 416, 971, - 972, 257, 653, 816, 623, 220, 0, 622, 409, 585, - 596, 395, 384, 219, 594, 393, 383, 335, 824, 825, - 281, 308, 901, 900, 899, 307, 309, 897, 898, 896, - 207, 609, 627, 0, 208, 0, 500, 612, 654, 453, - 212, 234, 235, 237, 0, 280, 284, 292, 295, 304, - 305, 314, 368, 420, 447, 443, 452, 0, 580, 603, - 617, 629, 635, 636, 638, 639, 640, 641, 642, 645, - 643, 408, 312, 496, 334, 374, 0, 0, 426, 473, - 240, 607, 497, 907, 929, 918, 782, 783, 908, 909, - 933, 910, 785, 786, 930, 931, 779, 780, 784, 932, - 934, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 650, - 509, 515, 510, 511, 512, 513, 514, 0, 516, 921, - 768, 767, 0, 774, 775, 0, 804, 805, 807, 813, - 814, 815, 826, 873, 874, 882, 884, 885, 883, 886, - 887, 888, 891, 892, 893, 894, 889, 890, 895, 787, - 791, 788, 789, 790, 802, 792, 793, 794, 795, 796, - 797, 798, 799, 800, 801, 803, 944, 945, 946, 947, - 948, 949, 819, 823, 822, 820, 821, 817, 818, 845, - 844, 846, 847, 848, 849, 850, 851, 853, 852, 854, - 855, 856, 857, 858, 859, 827, 828, 831, 832, 830, - 829, 833, 842, 843, 834, 835, 836, 837, 838, 839, - 841, 840, 860, 861, 862, 863, 864, 866, 865, 869, - 870, 868, 867, 872, 871, 766, 196, 221, 369, 94, - 455, 289, 651, 619, 485, 614, 206, 223, 935, 263, - 936, 0, 0, 940, 0, 0, 0, 942, 941, 0, - 943, 905, 904, 0, 0, 937, 938, 0, 939, 0, - 0, 198, 200, 209, 222, 232, 236, 243, 262, 277, - 279, 286, 299, 311, 319, 320, 323, 329, 381, 387, - 388, 389, 390, 410, 411, 412, 415, 418, 419, 422, - 424, 425, 428, 432, 436, 437, 438, 440, 442, 444, - 456, 461, 475, 476, 477, 478, 479, 482, 483, 489, - 490, 491, 492, 493, 501, 502, 517, 587, 589, 606, - 626, 633, 481, 950, 951, 952, 953, 954, 955, 956, - 957, 301, 601, 634, 598, 646, 628, 439, 379, 0, - 0, 382, 282, 306, 321, 0, 618, 503, 227, 467, - 291, 251, 975, 0, 211, 246, 230, 260, 275, 278, - 325, 392, 401, 430, 435, 297, 272, 244, 460, 241, - 486, 520, 521, 522, 524, 396, 267, 434, 397, 0, - 377, 577, 578, 317, 0, 0, 0, 529, 0, 778, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 0, 0, 0, 765, 0, 0, 0, 271, 770, 0, - 0, 0, 367, 268, 0, 0, 204, 506, 0, 431, - 0, 203, 0, 488, 253, 378, 375, 584, 283, 274, - 270, 250, 318, 386, 429, 519, 423, 777, 371, 0, - 0, 498, 402, 0, 0, 0, 0, 0, 0, 0, - 0, 772, 773, 0, 0, 0, 0, 0, 0, 0, - 0, 324, 248, 326, 202, 414, 499, 287, 0, 95, - 0, 0, 1024, 508, 960, 749, 926, 964, 1025, 977, - 978, 979, 965, 0, 238, 966, 967, 245, 968, 0, - 925, 808, 810, 809, 875, 876, 877, 878, 879, 880, - 881, 811, 812, 806, 973, 610, 980, 981, 0, 266, - 322, 273, 265, 581, 0, 0, 0, 0, 0, 0, - 597, 0, 0, 229, 0, 0, 0, 0, 0, 0, - 0, 745, 762, 0, 776, 0, 0, 0, 276, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 759, 760, 0, 0, 0, - 0, 920, 0, 761, 0, 0, 769, 982, 983, 984, - 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, - 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, - 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, - 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 771, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 298, 0, 403, 258, 0, 454, 919, 0, 0, 630, - 0, 0, 917, 0, 0, 0, 0, 366, 0, 331, - 197, 225, 0, 0, 413, 462, 474, 0, 0, 0, - 970, 0, 472, 427, 605, 233, 285, 459, 433, 470, - 441, 288, 4098, 0, 471, 373, 586, 451, 602, 631, - 632, 264, 407, 616, 523, 624, 649, 226, 261, 421, - 507, 608, 495, 398, 582, 583, 330, 494, 296, 201, - 370, 637, 224, 480, 372, 242, 231, 588, 613, 300, - 252, 290, 457, 644, 213, 518, 599, 239, 484, 0, - 0, 652, 247, 505, 611, 600, 215, 595, 504, 394, - 327, 328, 214, 0, 458, 269, 294, 0, 0, 259, - 416, 971, 972, 257, 653, 816, 623, 220, 0, 622, - 409, 585, 596, 395, 384, 219, 594, 393, 383, 335, - 824, 825, 281, 308, 901, 900, 899, 307, 309, 897, - 898, 896, 207, 609, 627, 0, 208, 0, 500, 612, - 654, 453, 212, 234, 235, 237, 0, 280, 284, 292, - 295, 304, 305, 314, 368, 420, 447, 443, 452, 0, - 580, 603, 617, 629, 635, 636, 638, 639, 640, 641, - 642, 645, 643, 408, 312, 496, 334, 374, 0, 0, - 426, 473, 240, 607, 497, 907, 929, 918, 782, 783, - 908, 909, 933, 910, 785, 786, 930, 931, 779, 780, - 784, 932, 934, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 650, 509, 515, 510, 511, 512, 513, 514, 0, - 516, 921, 768, 767, 0, 774, 775, 0, 804, 805, - 807, 813, 814, 815, 826, 873, 874, 882, 884, 885, - 883, 886, 887, 888, 891, 892, 893, 894, 889, 890, - 895, 787, 791, 788, 789, 790, 802, 792, 793, 794, - 795, 796, 797, 798, 799, 800, 801, 803, 944, 945, - 946, 947, 948, 949, 819, 823, 822, 820, 821, 817, - 818, 845, 844, 846, 847, 848, 849, 850, 851, 853, - 852, 854, 855, 856, 857, 858, 859, 827, 828, 831, - 832, 830, 829, 833, 842, 843, 834, 835, 836, 837, - 838, 839, 841, 840, 860, 861, 862, 863, 864, 866, - 865, 869, 870, 868, 867, 872, 871, 766, 196, 221, - 369, 0, 455, 289, 651, 619, 485, 614, 206, 223, - 935, 263, 936, 0, 0, 940, 0, 0, 0, 942, - 941, 0, 943, 905, 904, 0, 0, 937, 938, 0, - 939, 0, 0, 198, 200, 209, 222, 232, 236, 243, - 262, 277, 279, 286, 299, 311, 319, 320, 323, 329, - 381, 387, 388, 389, 390, 410, 411, 412, 415, 418, - 419, 422, 424, 425, 428, 432, 436, 437, 438, 440, - 442, 444, 456, 461, 475, 476, 477, 478, 479, 482, - 483, 489, 490, 491, 492, 493, 501, 502, 517, 587, - 589, 606, 626, 633, 481, 950, 951, 952, 953, 954, - 955, 956, 957, 301, 601, 634, 598, 646, 628, 439, - 379, 0, 0, 382, 282, 306, 321, 0, 618, 503, - 227, 467, 291, 251, 975, 0, 211, 246, 230, 260, - 275, 278, 325, 392, 401, 430, 435, 297, 272, 244, - 460, 241, 486, 520, 521, 522, 524, 396, 267, 434, - 397, 0, 377, 577, 578, 317, 0, 0, 0, 529, - 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 0, 765, 0, 0, 0, 271, - 770, 0, 0, 0, 367, 268, 0, 0, 204, 506, - 0, 431, 0, 203, 0, 488, 253, 378, 375, 584, - 283, 274, 270, 250, 318, 386, 429, 519, 423, 777, - 371, 0, 0, 498, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 772, 773, 0, 0, 0, 0, 0, - 0, 0, 0, 324, 248, 326, 202, 414, 499, 287, - 0, 95, 0, 1754, 1024, 508, 960, 749, 926, 964, - 1025, 977, 978, 979, 965, 0, 238, 966, 967, 245, - 968, 0, 925, 808, 810, 809, 875, 876, 877, 878, - 879, 880, 881, 811, 812, 806, 973, 610, 980, 981, - 0, 266, 322, 273, 265, 581, 0, 0, 0, 0, - 0, 0, 597, 0, 0, 229, 0, 0, 0, 0, - 0, 0, 0, 745, 762, 0, 776, 0, 0, 0, - 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 759, 760, 0, - 0, 0, 0, 920, 0, 761, 0, 0, 769, 982, - 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, + 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, + 1029, 1030, 777, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 300, 0, 406, 260, 0, 459, 925, + 0, 0, 636, 0, 0, 923, 0, 0, 0, 0, + 368, 0, 333, 199, 227, 0, 0, 416, 467, 479, + 0, 0, 0, 976, 0, 477, 430, 611, 235, 287, + 464, 437, 475, 445, 290, 0, 0, 476, 375, 592, + 455, 608, 637, 638, 266, 410, 622, 528, 630, 655, + 228, 263, 424, 512, 614, 500, 401, 588, 589, 332, + 499, 298, 203, 372, 643, 226, 485, 374, 244, 233, + 594, 619, 302, 254, 292, 462, 650, 215, 523, 605, + 241, 489, 0, 0, 658, 249, 510, 617, 606, 217, + 601, 509, 397, 329, 330, 216, 0, 463, 271, 296, + 0, 0, 261, 419, 977, 978, 259, 659, 822, 629, + 222, 0, 628, 412, 591, 602, 398, 386, 221, 600, + 396, 385, 337, 830, 831, 283, 310, 907, 906, 905, + 309, 311, 903, 904, 902, 209, 615, 633, 0, 210, + 0, 505, 618, 660, 457, 214, 236, 237, 239, 0, + 282, 286, 294, 297, 306, 307, 316, 370, 423, 451, + 447, 456, 0, 585, 609, 623, 635, 641, 642, 644, + 645, 646, 647, 648, 651, 649, 411, 314, 501, 336, + 376, 0, 0, 429, 478, 242, 613, 502, 913, 935, + 924, 788, 789, 914, 915, 939, 916, 791, 792, 936, + 937, 785, 786, 790, 938, 940, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 656, 514, 520, 515, 516, 517, + 518, 519, 0, 521, 927, 774, 773, 0, 780, 781, + 0, 810, 811, 813, 819, 820, 821, 832, 879, 880, + 888, 890, 891, 889, 892, 893, 894, 897, 898, 899, + 900, 895, 896, 901, 793, 797, 794, 795, 796, 808, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, + 809, 950, 951, 952, 953, 954, 955, 825, 829, 828, + 826, 827, 823, 824, 851, 850, 852, 853, 854, 855, + 856, 857, 859, 858, 860, 861, 862, 863, 864, 865, + 833, 834, 837, 838, 836, 835, 839, 848, 849, 840, + 841, 842, 843, 844, 845, 847, 846, 866, 867, 868, + 869, 870, 872, 871, 875, 876, 874, 873, 878, 877, + 772, 198, 223, 371, 94, 460, 291, 657, 625, 490, + 620, 208, 225, 941, 265, 942, 0, 0, 946, 0, + 0, 0, 948, 947, 0, 949, 911, 910, 0, 0, + 943, 944, 0, 945, 0, 0, 200, 202, 211, 224, + 234, 238, 245, 264, 279, 281, 288, 301, 313, 321, + 322, 325, 331, 383, 390, 391, 392, 393, 413, 414, + 415, 418, 421, 422, 425, 427, 428, 431, 436, 440, + 441, 442, 444, 446, 448, 461, 466, 480, 481, 482, + 483, 484, 487, 488, 494, 495, 496, 497, 498, 506, + 507, 522, 593, 595, 612, 632, 639, 486, 388, 434, + 458, 586, 956, 957, 958, 959, 960, 961, 962, 963, + 303, 607, 640, 604, 652, 634, 443, 381, 0, 0, + 384, 284, 308, 323, 0, 624, 508, 229, 472, 293, + 253, 1031, 0, 213, 248, 232, 262, 277, 280, 327, + 395, 404, 433, 439, 299, 274, 246, 465, 243, 491, + 525, 526, 527, 529, 399, 269, 438, 400, 0, 379, + 582, 583, 319, 0, 0, 0, 534, 0, 784, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, + 0, 0, 771, 0, 0, 0, 273, 776, 0, 0, + 0, 369, 270, 0, 0, 206, 511, 0, 435, 0, + 205, 0, 493, 255, 380, 377, 590, 285, 276, 272, + 252, 320, 389, 432, 524, 426, 783, 373, 0, 0, + 503, 405, 0, 0, 0, 0, 0, 0, 0, 0, + 778, 779, 0, 0, 0, 0, 0, 0, 0, 0, + 326, 250, 328, 204, 417, 504, 289, 0, 95, 0, + 0, 1032, 513, 966, 755, 932, 970, 1033, 984, 985, + 986, 971, 0, 240, 972, 973, 247, 974, 0, 931, + 814, 816, 815, 881, 882, 883, 884, 885, 886, 887, + 817, 818, 812, 979, 616, 987, 988, 0, 268, 324, + 275, 267, 587, 0, 0, 0, 0, 0, 0, 603, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 751, 768, 0, 782, 0, 0, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 765, 766, 0, 0, 0, 0, + 926, 0, 767, 0, 0, 775, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, - 1023, 771, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 0, 403, 258, 0, 454, 919, 0, - 0, 630, 0, 0, 917, 0, 0, 0, 0, 366, - 0, 331, 197, 225, 0, 0, 413, 462, 474, 0, - 0, 0, 970, 0, 472, 427, 605, 233, 285, 459, - 433, 470, 441, 288, 0, 0, 471, 373, 586, 451, - 602, 631, 632, 264, 407, 616, 523, 624, 649, 226, - 261, 421, 507, 608, 495, 398, 582, 583, 330, 494, - 296, 201, 370, 637, 224, 480, 372, 242, 231, 588, - 613, 300, 252, 290, 457, 644, 213, 518, 599, 239, - 484, 0, 0, 652, 247, 505, 611, 600, 215, 595, - 504, 394, 327, 328, 214, 0, 458, 269, 294, 0, - 0, 259, 416, 971, 972, 257, 653, 816, 623, 220, - 0, 622, 409, 585, 596, 395, 384, 219, 594, 393, - 383, 335, 824, 825, 281, 308, 901, 900, 899, 307, - 309, 897, 898, 896, 207, 609, 627, 0, 208, 0, - 500, 612, 654, 453, 212, 234, 235, 237, 0, 280, - 284, 292, 295, 304, 305, 314, 368, 420, 447, 443, - 452, 0, 580, 603, 617, 629, 635, 636, 638, 639, - 640, 641, 642, 645, 643, 408, 312, 496, 334, 374, - 0, 0, 426, 473, 240, 607, 497, 907, 929, 918, - 782, 783, 908, 909, 933, 910, 785, 786, 930, 931, - 779, 780, 784, 932, 934, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 650, 509, 515, 510, 511, 512, 513, - 514, 0, 516, 921, 768, 767, 0, 774, 775, 0, - 804, 805, 807, 813, 814, 815, 826, 873, 874, 882, - 884, 885, 883, 886, 887, 888, 891, 892, 893, 894, - 889, 890, 895, 787, 791, 788, 789, 790, 802, 792, - 793, 794, 795, 796, 797, 798, 799, 800, 801, 803, - 944, 945, 946, 947, 948, 949, 819, 823, 822, 820, - 821, 817, 818, 845, 844, 846, 847, 848, 849, 850, - 851, 853, 852, 854, 855, 856, 857, 858, 859, 827, - 828, 831, 832, 830, 829, 833, 842, 843, 834, 835, - 836, 837, 838, 839, 841, 840, 860, 861, 862, 863, - 864, 866, 865, 869, 870, 868, 867, 872, 871, 766, - 196, 221, 369, 0, 455, 289, 651, 619, 485, 614, - 206, 223, 935, 263, 936, 0, 0, 940, 0, 0, - 0, 942, 941, 0, 943, 905, 904, 0, 0, 937, - 938, 0, 939, 0, 0, 198, 200, 209, 222, 232, - 236, 243, 262, 277, 279, 286, 299, 311, 319, 320, - 323, 329, 381, 387, 388, 389, 390, 410, 411, 412, - 415, 418, 419, 422, 424, 425, 428, 432, 436, 437, - 438, 440, 442, 444, 456, 461, 475, 476, 477, 478, - 479, 482, 483, 489, 490, 491, 492, 493, 501, 502, - 517, 587, 589, 606, 626, 633, 481, 950, 951, 952, - 953, 954, 955, 956, 957, 301, 601, 634, 598, 646, - 628, 439, 379, 0, 0, 382, 282, 306, 321, 0, - 618, 503, 227, 467, 291, 251, 975, 0, 211, 246, - 230, 260, 275, 278, 325, 392, 401, 430, 435, 297, - 272, 244, 460, 241, 486, 520, 521, 522, 524, 396, - 267, 434, 397, 0, 377, 577, 578, 317, 0, 0, - 0, 529, 0, 778, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 417, 0, 0, 0, 765, 0, 0, - 0, 271, 770, 0, 0, 0, 367, 268, 0, 0, - 204, 506, 0, 431, 0, 203, 0, 488, 253, 378, - 375, 584, 283, 274, 270, 250, 318, 386, 429, 519, - 423, 777, 371, 0, 0, 498, 402, 0, 0, 0, - 0, 0, 0, 0, 0, 772, 773, 0, 0, 0, - 0, 0, 0, 0, 0, 324, 248, 326, 202, 414, - 499, 287, 0, 95, 0, 0, 1024, 508, 960, 749, - 926, 964, 1025, 977, 978, 979, 965, 0, 238, 966, - 967, 245, 968, 0, 925, 808, 810, 809, 875, 876, - 877, 878, 879, 880, 881, 811, 812, 806, 973, 610, - 980, 981, 0, 266, 322, 273, 265, 581, 0, 0, - 0, 0, 0, 0, 597, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 745, 762, 0, 776, 0, - 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 759, - 760, 1070, 0, 0, 0, 920, 0, 761, 0, 0, - 769, 982, 983, 984, 985, 986, 987, 988, 989, 990, + 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 777, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, + 0, 406, 260, 0, 459, 925, 0, 0, 636, 0, + 0, 923, 0, 0, 0, 0, 368, 0, 333, 199, + 227, 0, 0, 416, 467, 479, 0, 0, 0, 976, + 0, 477, 430, 611, 235, 287, 464, 437, 475, 445, + 290, 4117, 0, 476, 375, 592, 455, 608, 637, 638, + 266, 410, 622, 528, 630, 655, 228, 263, 424, 512, + 614, 500, 401, 588, 589, 332, 499, 298, 203, 372, + 643, 226, 485, 374, 244, 233, 594, 619, 302, 254, + 292, 462, 650, 215, 523, 605, 241, 489, 0, 0, + 658, 249, 510, 617, 606, 217, 601, 509, 397, 329, + 330, 216, 0, 463, 271, 296, 0, 0, 261, 419, + 977, 978, 259, 659, 822, 629, 222, 0, 628, 412, + 591, 602, 398, 386, 221, 600, 396, 385, 337, 830, + 831, 283, 310, 907, 906, 905, 309, 311, 903, 904, + 902, 209, 615, 633, 0, 210, 0, 505, 618, 660, + 457, 214, 236, 237, 239, 0, 282, 286, 294, 297, + 306, 307, 316, 370, 423, 451, 447, 456, 0, 585, + 609, 623, 635, 641, 642, 644, 645, 646, 647, 648, + 651, 649, 411, 314, 501, 336, 376, 0, 0, 429, + 478, 242, 613, 502, 913, 935, 924, 788, 789, 914, + 915, 939, 916, 791, 792, 936, 937, 785, 786, 790, + 938, 940, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 656, 514, 520, 515, 516, 517, 518, 519, 0, 521, + 927, 774, 773, 0, 780, 781, 0, 810, 811, 813, + 819, 820, 821, 832, 879, 880, 888, 890, 891, 889, + 892, 893, 894, 897, 898, 899, 900, 895, 896, 901, + 793, 797, 794, 795, 796, 808, 798, 799, 800, 801, + 802, 803, 804, 805, 806, 807, 809, 950, 951, 952, + 953, 954, 955, 825, 829, 828, 826, 827, 823, 824, + 851, 850, 852, 853, 854, 855, 856, 857, 859, 858, + 860, 861, 862, 863, 864, 865, 833, 834, 837, 838, + 836, 835, 839, 848, 849, 840, 841, 842, 843, 844, + 845, 847, 846, 866, 867, 868, 869, 870, 872, 871, + 875, 876, 874, 873, 878, 877, 772, 198, 223, 371, + 0, 460, 291, 657, 625, 490, 620, 208, 225, 941, + 265, 942, 0, 0, 946, 0, 0, 0, 948, 947, + 0, 949, 911, 910, 0, 0, 943, 944, 0, 945, + 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, + 279, 281, 288, 301, 313, 321, 322, 325, 331, 383, + 390, 391, 392, 393, 413, 414, 415, 418, 421, 422, + 425, 427, 428, 431, 436, 440, 441, 442, 444, 446, + 448, 461, 466, 480, 481, 482, 483, 484, 487, 488, + 494, 495, 496, 497, 498, 506, 507, 522, 593, 595, + 612, 632, 639, 486, 388, 434, 458, 586, 956, 957, + 958, 959, 960, 961, 962, 963, 303, 607, 640, 604, + 652, 634, 443, 381, 0, 0, 384, 284, 308, 323, + 0, 624, 508, 229, 472, 293, 253, 1031, 0, 213, + 248, 232, 262, 277, 280, 327, 395, 404, 433, 439, + 299, 274, 246, 465, 243, 491, 525, 526, 527, 529, + 399, 269, 438, 400, 0, 379, 582, 583, 319, 0, + 0, 0, 534, 0, 784, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 420, 0, 0, 0, 771, 0, + 0, 0, 273, 776, 0, 0, 0, 369, 270, 0, + 0, 206, 511, 0, 435, 0, 205, 0, 493, 255, + 380, 377, 590, 285, 276, 272, 252, 320, 389, 432, + 524, 426, 783, 373, 0, 0, 503, 405, 0, 0, + 0, 0, 0, 0, 0, 0, 778, 779, 0, 0, + 0, 0, 0, 0, 0, 0, 326, 250, 328, 204, + 417, 504, 289, 0, 95, 0, 1764, 1032, 513, 966, + 755, 932, 970, 1033, 984, 985, 986, 971, 0, 240, + 972, 973, 247, 974, 0, 931, 814, 816, 815, 881, + 882, 883, 884, 885, 886, 887, 817, 818, 812, 979, + 616, 987, 988, 0, 268, 324, 275, 267, 587, 0, + 0, 0, 0, 0, 0, 603, 0, 0, 231, 0, + 0, 0, 0, 0, 0, 0, 751, 768, 0, 782, + 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 765, 766, 0, 0, 0, 0, 926, 0, 767, 0, + 0, 775, 989, 990, 991, 992, 993, 994, 995, 996, + 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, + 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, + 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, + 1027, 1028, 1029, 1030, 777, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 300, 0, 406, 260, 0, + 459, 925, 0, 0, 636, 0, 0, 923, 0, 0, + 0, 0, 368, 0, 333, 199, 227, 0, 0, 416, + 467, 479, 0, 0, 0, 976, 0, 477, 430, 611, + 235, 287, 464, 437, 475, 445, 290, 0, 0, 476, + 375, 592, 455, 608, 637, 638, 266, 410, 622, 528, + 630, 655, 228, 263, 424, 512, 614, 500, 401, 588, + 589, 332, 499, 298, 203, 372, 643, 226, 485, 374, + 244, 233, 594, 619, 302, 254, 292, 462, 650, 215, + 523, 605, 241, 489, 0, 0, 658, 249, 510, 617, + 606, 217, 601, 509, 397, 329, 330, 216, 0, 463, + 271, 296, 0, 0, 261, 419, 977, 978, 259, 659, + 822, 629, 222, 0, 628, 412, 591, 602, 398, 386, + 221, 600, 396, 385, 337, 830, 831, 283, 310, 907, + 906, 905, 309, 311, 903, 904, 902, 209, 615, 633, + 0, 210, 0, 505, 618, 660, 457, 214, 236, 237, + 239, 0, 282, 286, 294, 297, 306, 307, 316, 370, + 423, 451, 447, 456, 0, 585, 609, 623, 635, 641, + 642, 644, 645, 646, 647, 648, 651, 649, 411, 314, + 501, 336, 376, 0, 0, 429, 478, 242, 613, 502, + 913, 935, 924, 788, 789, 914, 915, 939, 916, 791, + 792, 936, 937, 785, 786, 790, 938, 940, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 656, 514, 520, 515, + 516, 517, 518, 519, 0, 521, 927, 774, 773, 0, + 780, 781, 0, 810, 811, 813, 819, 820, 821, 832, + 879, 880, 888, 890, 891, 889, 892, 893, 894, 897, + 898, 899, 900, 895, 896, 901, 793, 797, 794, 795, + 796, 808, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 809, 950, 951, 952, 953, 954, 955, 825, + 829, 828, 826, 827, 823, 824, 851, 850, 852, 853, + 854, 855, 856, 857, 859, 858, 860, 861, 862, 863, + 864, 865, 833, 834, 837, 838, 836, 835, 839, 848, + 849, 840, 841, 842, 843, 844, 845, 847, 846, 866, + 867, 868, 869, 870, 872, 871, 875, 876, 874, 873, + 878, 877, 772, 198, 223, 371, 0, 460, 291, 657, + 625, 490, 620, 208, 225, 941, 265, 942, 0, 0, + 946, 0, 0, 0, 948, 947, 0, 949, 911, 910, + 0, 0, 943, 944, 0, 945, 0, 0, 200, 202, + 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, + 313, 321, 322, 325, 331, 383, 390, 391, 392, 393, + 413, 414, 415, 418, 421, 422, 425, 427, 428, 431, + 436, 440, 441, 442, 444, 446, 448, 461, 466, 480, + 481, 482, 483, 484, 487, 488, 494, 495, 496, 497, + 498, 506, 507, 522, 593, 595, 612, 632, 639, 486, + 388, 434, 458, 586, 956, 957, 958, 959, 960, 961, + 962, 963, 303, 607, 640, 604, 652, 634, 443, 381, + 0, 0, 384, 284, 308, 323, 0, 624, 508, 229, + 472, 293, 253, 1031, 0, 213, 248, 232, 262, 277, + 280, 327, 395, 404, 433, 439, 299, 274, 246, 465, + 243, 491, 525, 526, 527, 529, 399, 269, 438, 400, + 0, 379, 582, 583, 319, 0, 0, 0, 534, 0, + 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 420, 0, 0, 0, 771, 0, 0, 0, 273, 776, + 0, 0, 0, 369, 270, 0, 0, 206, 511, 0, + 435, 0, 205, 0, 493, 255, 380, 377, 590, 285, + 276, 272, 252, 320, 389, 432, 524, 426, 783, 373, + 0, 0, 503, 405, 0, 0, 0, 0, 0, 0, + 0, 0, 778, 779, 0, 0, 0, 0, 0, 0, + 0, 0, 326, 250, 328, 204, 417, 504, 289, 0, + 95, 0, 0, 1032, 513, 966, 755, 932, 970, 1033, + 984, 985, 986, 971, 0, 240, 972, 973, 247, 974, + 0, 931, 814, 816, 815, 881, 882, 883, 884, 885, + 886, 887, 817, 818, 812, 979, 616, 987, 988, 0, + 268, 324, 275, 267, 587, 0, 0, 0, 0, 0, + 0, 603, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 751, 768, 0, 782, 0, 0, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 765, 766, 1079, 0, + 0, 0, 926, 0, 767, 0, 0, 775, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 771, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 298, 0, 403, 258, 0, 454, - 919, 0, 0, 630, 0, 0, 917, 0, 0, 0, - 0, 366, 0, 331, 197, 225, 0, 0, 413, 462, - 474, 0, 0, 0, 970, 0, 472, 427, 605, 233, - 285, 459, 433, 470, 441, 288, 0, 0, 471, 373, - 586, 451, 602, 631, 632, 264, 407, 616, 523, 624, - 649, 226, 261, 421, 507, 608, 495, 398, 582, 583, - 330, 494, 296, 201, 370, 637, 224, 480, 372, 242, - 231, 588, 613, 300, 252, 290, 457, 644, 213, 518, - 599, 239, 484, 0, 0, 652, 247, 505, 611, 600, - 215, 595, 504, 394, 327, 328, 214, 0, 458, 269, - 294, 0, 0, 259, 416, 971, 972, 257, 653, 816, - 623, 220, 0, 622, 409, 585, 596, 395, 384, 219, - 594, 393, 383, 335, 824, 825, 281, 308, 901, 900, - 899, 307, 309, 897, 898, 896, 207, 609, 627, 0, - 208, 0, 500, 612, 654, 453, 212, 234, 235, 237, - 0, 280, 284, 292, 295, 304, 305, 314, 368, 420, - 447, 443, 452, 0, 580, 603, 617, 629, 635, 636, - 638, 639, 640, 641, 642, 645, 643, 408, 312, 496, - 334, 374, 0, 0, 426, 473, 240, 607, 497, 907, - 929, 918, 782, 783, 908, 909, 933, 910, 785, 786, - 930, 931, 779, 780, 784, 932, 934, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 650, 509, 515, 510, 511, - 512, 513, 514, 0, 516, 921, 768, 767, 0, 774, - 775, 0, 804, 805, 807, 813, 814, 815, 826, 873, - 874, 882, 884, 885, 883, 886, 887, 888, 891, 892, - 893, 894, 889, 890, 895, 787, 791, 788, 789, 790, - 802, 792, 793, 794, 795, 796, 797, 798, 799, 800, - 801, 803, 944, 945, 946, 947, 948, 949, 819, 823, - 822, 820, 821, 817, 818, 845, 844, 846, 847, 848, - 849, 850, 851, 853, 852, 854, 855, 856, 857, 858, - 859, 827, 828, 831, 832, 830, 829, 833, 842, 843, - 834, 835, 836, 837, 838, 839, 841, 840, 860, 861, - 862, 863, 864, 866, 865, 869, 870, 868, 867, 872, - 871, 766, 196, 221, 369, 0, 455, 289, 651, 619, - 485, 614, 206, 223, 935, 263, 936, 0, 0, 940, - 0, 0, 0, 942, 941, 0, 943, 905, 904, 0, - 0, 937, 938, 0, 939, 0, 0, 198, 200, 209, - 222, 232, 236, 243, 262, 277, 279, 286, 299, 311, - 319, 320, 323, 329, 381, 387, 388, 389, 390, 410, - 411, 412, 415, 418, 419, 422, 424, 425, 428, 432, - 436, 437, 438, 440, 442, 444, 456, 461, 475, 476, - 477, 478, 479, 482, 483, 489, 490, 491, 492, 493, - 501, 502, 517, 587, 589, 606, 626, 633, 481, 950, - 951, 952, 953, 954, 955, 956, 957, 301, 601, 634, - 598, 646, 628, 439, 379, 0, 0, 382, 282, 306, - 321, 0, 618, 503, 227, 467, 291, 251, 975, 0, - 211, 246, 230, 260, 275, 278, 325, 392, 401, 430, - 435, 297, 272, 244, 460, 241, 486, 520, 521, 522, - 524, 396, 267, 434, 397, 0, 377, 577, 578, 317, - 0, 0, 0, 529, 0, 778, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 765, - 0, 0, 0, 271, 770, 0, 0, 0, 367, 268, - 0, 0, 204, 506, 0, 431, 0, 203, 0, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 777, 371, 0, 0, 498, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 772, 773, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 248, 326, - 202, 414, 499, 287, 0, 95, 0, 0, 1024, 508, - 960, 749, 926, 964, 1025, 977, 978, 979, 965, 0, - 238, 966, 967, 245, 968, 0, 925, 808, 810, 809, - 875, 876, 877, 878, 879, 880, 881, 811, 812, 806, - 973, 610, 980, 981, 0, 266, 322, 273, 265, 581, - 0, 0, 0, 0, 0, 0, 597, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 745, 762, 0, - 776, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 759, 760, 0, 0, 0, 0, 920, 0, 761, - 0, 0, 769, 982, 983, 984, 985, 986, 987, 988, + 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, + 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 300, 0, 406, 260, 0, 459, 925, 0, 0, + 636, 0, 0, 923, 0, 0, 0, 0, 368, 0, + 333, 199, 227, 0, 0, 416, 467, 479, 0, 0, + 0, 976, 0, 477, 430, 611, 235, 287, 464, 437, + 475, 445, 290, 0, 0, 476, 375, 592, 455, 608, + 637, 638, 266, 410, 622, 528, 630, 655, 228, 263, + 424, 512, 614, 500, 401, 588, 589, 332, 499, 298, + 203, 372, 643, 226, 485, 374, 244, 233, 594, 619, + 302, 254, 292, 462, 650, 215, 523, 605, 241, 489, + 0, 0, 658, 249, 510, 617, 606, 217, 601, 509, + 397, 329, 330, 216, 0, 463, 271, 296, 0, 0, + 261, 419, 977, 978, 259, 659, 822, 629, 222, 0, + 628, 412, 591, 602, 398, 386, 221, 600, 396, 385, + 337, 830, 831, 283, 310, 907, 906, 905, 309, 311, + 903, 904, 902, 209, 615, 633, 0, 210, 0, 505, + 618, 660, 457, 214, 236, 237, 239, 0, 282, 286, + 294, 297, 306, 307, 316, 370, 423, 451, 447, 456, + 0, 585, 609, 623, 635, 641, 642, 644, 645, 646, + 647, 648, 651, 649, 411, 314, 501, 336, 376, 0, + 0, 429, 478, 242, 613, 502, 913, 935, 924, 788, + 789, 914, 915, 939, 916, 791, 792, 936, 937, 785, + 786, 790, 938, 940, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 656, 514, 520, 515, 516, 517, 518, 519, + 0, 521, 927, 774, 773, 0, 780, 781, 0, 810, + 811, 813, 819, 820, 821, 832, 879, 880, 888, 890, + 891, 889, 892, 893, 894, 897, 898, 899, 900, 895, + 896, 901, 793, 797, 794, 795, 796, 808, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 809, 950, + 951, 952, 953, 954, 955, 825, 829, 828, 826, 827, + 823, 824, 851, 850, 852, 853, 854, 855, 856, 857, + 859, 858, 860, 861, 862, 863, 864, 865, 833, 834, + 837, 838, 836, 835, 839, 848, 849, 840, 841, 842, + 843, 844, 845, 847, 846, 866, 867, 868, 869, 870, + 872, 871, 875, 876, 874, 873, 878, 877, 772, 198, + 223, 371, 0, 460, 291, 657, 625, 490, 620, 208, + 225, 941, 265, 942, 0, 0, 946, 0, 0, 0, + 948, 947, 0, 949, 911, 910, 0, 0, 943, 944, + 0, 945, 0, 0, 200, 202, 211, 224, 234, 238, + 245, 264, 279, 281, 288, 301, 313, 321, 322, 325, + 331, 383, 390, 391, 392, 393, 413, 414, 415, 418, + 421, 422, 425, 427, 428, 431, 436, 440, 441, 442, + 444, 446, 448, 461, 466, 480, 481, 482, 483, 484, + 487, 488, 494, 495, 496, 497, 498, 506, 507, 522, + 593, 595, 612, 632, 639, 486, 388, 434, 458, 586, + 956, 957, 958, 959, 960, 961, 962, 963, 303, 607, + 640, 604, 652, 634, 443, 381, 0, 0, 384, 284, + 308, 323, 0, 624, 508, 229, 472, 293, 253, 1031, + 0, 213, 248, 232, 262, 277, 280, 327, 395, 404, + 433, 439, 299, 274, 246, 465, 243, 491, 525, 526, + 527, 529, 399, 269, 438, 400, 0, 379, 582, 583, + 319, 0, 0, 0, 534, 0, 784, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 771, 0, 0, 0, 273, 776, 0, 0, 0, 369, + 270, 0, 0, 206, 511, 0, 435, 0, 205, 0, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 783, 373, 0, 0, 503, 405, + 0, 0, 0, 0, 0, 0, 0, 0, 778, 779, + 0, 0, 0, 0, 0, 0, 0, 0, 326, 250, + 328, 204, 417, 504, 289, 0, 95, 0, 0, 1032, + 513, 966, 755, 932, 970, 1033, 984, 985, 986, 971, + 0, 240, 972, 973, 247, 974, 0, 931, 814, 816, + 815, 881, 882, 883, 884, 885, 886, 887, 817, 818, + 812, 979, 616, 987, 988, 0, 268, 324, 275, 267, + 587, 0, 0, 0, 0, 0, 0, 603, 0, 0, + 231, 0, 0, 0, 0, 0, 0, 0, 751, 768, + 0, 782, 0, 0, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 765, 766, 0, 0, 0, 0, 926, 0, + 767, 0, 0, 775, 989, 990, 991, 992, 993, 994, + 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, + 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, + 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, + 1025, 1026, 1027, 1028, 1029, 1030, 777, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 0, 406, + 260, 0, 459, 925, 0, 0, 636, 0, 0, 923, + 0, 0, 0, 0, 368, 0, 333, 199, 227, 0, + 0, 416, 467, 479, 0, 0, 0, 976, 0, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 0, + 0, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 977, 978, + 259, 659, 822, 629, 222, 0, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 830, 831, 283, + 310, 907, 906, 905, 309, 311, 903, 904, 902, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 0, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 0, 0, 429, 478, 242, + 613, 502, 913, 935, 924, 788, 789, 914, 915, 939, + 916, 791, 792, 936, 937, 785, 786, 790, 938, 940, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 927, 774, + 773, 0, 780, 781, 0, 810, 811, 813, 819, 820, + 821, 832, 879, 880, 888, 890, 891, 889, 892, 893, + 894, 897, 898, 899, 900, 895, 896, 901, 793, 797, + 794, 795, 796, 808, 798, 799, 800, 801, 802, 803, + 804, 805, 806, 807, 809, 950, 951, 952, 953, 954, + 955, 825, 829, 828, 826, 827, 823, 824, 851, 850, + 852, 853, 854, 855, 856, 857, 859, 858, 860, 861, + 862, 863, 864, 865, 833, 834, 837, 838, 836, 835, + 839, 848, 849, 840, 841, 842, 843, 844, 845, 847, + 846, 866, 867, 868, 869, 870, 872, 871, 875, 876, + 874, 873, 878, 877, 772, 198, 223, 371, 0, 460, + 291, 657, 625, 490, 620, 208, 225, 941, 265, 942, + 0, 0, 946, 0, 0, 0, 948, 947, 0, 949, + 911, 910, 0, 0, 943, 944, 0, 945, 0, 0, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 956, 957, 958, 959, + 960, 961, 962, 963, 303, 607, 640, 604, 652, 634, + 443, 381, 0, 0, 384, 284, 308, 323, 0, 624, + 508, 229, 472, 293, 253, 1031, 0, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 400, 0, 379, 582, 583, 319, 0, 0, 0, + 534, 0, 784, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 420, 0, 0, 0, 771, 0, 0, 0, + 273, 776, 0, 0, 0, 369, 270, 0, 0, 206, + 511, 0, 435, 0, 205, 0, 493, 255, 380, 377, + 590, 285, 276, 272, 252, 320, 389, 432, 524, 426, + 783, 373, 0, 0, 503, 405, 0, 0, 0, 0, + 0, 0, 0, 0, 778, 779, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 250, 328, 204, 417, 504, + 289, 0, 95, 0, 0, 1032, 513, 966, 755, 932, + 970, 1033, 984, 985, 986, 971, 0, 240, 972, 973, + 247, 974, 0, 931, 814, 816, 815, 881, 882, 883, + 884, 885, 886, 887, 817, 818, 812, 979, 616, 987, + 988, 0, 268, 324, 275, 267, 587, 0, 0, 0, + 0, 0, 0, 603, 0, 0, 231, 0, 0, 0, + 0, 0, 0, 0, 751, 768, 0, 782, 0, 0, + 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 765, 766, + 0, 0, 0, 0, 926, 0, 767, 0, 0, 775, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, - 1019, 1020, 1021, 1022, 1023, 771, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 298, 0, 403, 258, - 0, 454, 919, 0, 0, 630, 0, 0, 917, 0, - 0, 0, 0, 366, 0, 331, 197, 225, 0, 0, - 413, 462, 474, 0, 0, 0, 970, 0, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 0, 0, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 971, 972, 257, - 653, 816, 623, 220, 0, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 824, 825, 281, 308, - 901, 900, 899, 307, 309, 897, 898, 896, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 0, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 0, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 0, 0, 426, 473, 240, 607, - 497, 907, 929, 918, 782, 783, 908, 909, 933, 910, - 785, 786, 930, 931, 779, 780, 784, 932, 934, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 921, 768, 767, - 0, 774, 775, 0, 804, 805, 807, 813, 814, 815, - 826, 873, 874, 882, 884, 885, 883, 886, 887, 888, - 891, 892, 893, 894, 889, 890, 895, 787, 791, 788, - 789, 790, 802, 792, 793, 794, 795, 796, 797, 798, - 799, 800, 801, 803, 944, 945, 946, 947, 948, 949, - 819, 823, 822, 820, 821, 817, 818, 845, 844, 846, - 847, 848, 849, 850, 851, 853, 852, 854, 855, 856, - 857, 858, 859, 827, 828, 831, 832, 830, 829, 833, - 842, 843, 834, 835, 836, 837, 838, 839, 841, 840, - 860, 861, 862, 863, 864, 866, 865, 869, 870, 868, - 867, 872, 871, 766, 196, 221, 369, 0, 455, 289, - 651, 619, 485, 614, 206, 223, 935, 263, 936, 0, - 0, 940, 0, 0, 0, 942, 941, 0, 943, 905, - 904, 0, 0, 937, 938, 0, 939, 0, 0, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 950, 951, 952, 953, 954, 955, 956, 957, 301, - 601, 634, 598, 646, 628, 439, 379, 0, 0, 382, - 282, 306, 321, 0, 618, 503, 227, 467, 291, 251, - 975, 0, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 397, 0, 377, 577, - 578, 317, 0, 0, 0, 529, 0, 778, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, - 0, 765, 0, 0, 0, 271, 770, 0, 0, 0, - 367, 268, 0, 0, 204, 506, 0, 431, 0, 203, - 0, 488, 253, 378, 375, 584, 283, 274, 270, 250, - 318, 386, 429, 519, 423, 777, 371, 0, 0, 498, - 402, 0, 0, 0, 0, 0, 0, 0, 0, 772, - 773, 0, 0, 0, 0, 0, 0, 0, 0, 324, - 248, 326, 202, 414, 499, 287, 0, 95, 0, 0, - 1024, 508, 960, 749, 926, 964, 1025, 977, 978, 979, - 965, 0, 238, 966, 967, 245, 968, 0, 925, 808, - 810, 809, 875, 876, 877, 878, 879, 880, 881, 811, - 812, 806, 973, 610, 980, 981, 0, 266, 322, 273, - 265, 581, 0, 0, 0, 0, 0, 0, 597, 0, - 0, 229, 0, 0, 0, 0, 0, 0, 0, 745, - 762, 0, 776, 0, 0, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 759, 760, 0, 0, 0, 0, 920, - 0, 761, 0, 0, 769, 982, 983, 984, 985, 986, - 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, - 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, - 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, - 1017, 1018, 1019, 1020, 1021, 1022, 1023, 3174, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, - 403, 258, 0, 454, 919, 0, 0, 630, 0, 0, - 917, 0, 0, 0, 0, 366, 0, 331, 197, 225, - 0, 0, 413, 462, 474, 0, 0, 0, 970, 0, - 472, 427, 605, 233, 285, 459, 433, 470, 441, 288, - 0, 0, 471, 373, 586, 451, 602, 631, 632, 264, - 407, 616, 523, 624, 649, 226, 261, 421, 507, 608, - 495, 398, 582, 583, 330, 494, 296, 201, 370, 637, - 224, 480, 372, 242, 231, 588, 613, 300, 252, 290, - 457, 644, 213, 518, 599, 239, 484, 0, 0, 652, - 247, 505, 611, 600, 215, 595, 504, 394, 327, 328, - 214, 0, 458, 269, 294, 0, 0, 259, 416, 971, - 972, 257, 653, 816, 623, 220, 0, 622, 409, 585, - 596, 395, 384, 219, 594, 393, 383, 335, 824, 825, - 281, 308, 901, 900, 899, 307, 309, 897, 898, 896, - 207, 609, 627, 0, 208, 0, 500, 612, 654, 453, - 212, 234, 235, 237, 0, 280, 284, 292, 295, 304, - 305, 314, 368, 420, 447, 443, 452, 0, 580, 603, - 617, 629, 635, 636, 638, 639, 640, 641, 642, 645, - 643, 408, 312, 496, 334, 374, 0, 0, 426, 473, - 240, 607, 497, 907, 929, 918, 782, 783, 908, 909, - 933, 910, 785, 786, 930, 931, 779, 780, 784, 932, - 934, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 650, - 509, 515, 510, 511, 512, 513, 514, 0, 516, 921, - 768, 767, 0, 774, 775, 0, 804, 805, 807, 813, - 814, 815, 826, 873, 874, 882, 884, 885, 883, 886, - 887, 888, 891, 892, 893, 894, 889, 890, 895, 787, - 791, 788, 789, 790, 802, 792, 793, 794, 795, 796, - 797, 798, 799, 800, 801, 803, 944, 945, 946, 947, - 948, 949, 819, 823, 822, 820, 821, 817, 818, 845, - 844, 846, 847, 848, 849, 850, 851, 853, 852, 854, - 855, 856, 857, 858, 859, 827, 828, 831, 832, 830, - 829, 833, 842, 843, 834, 835, 836, 837, 838, 839, - 841, 840, 860, 861, 862, 863, 864, 866, 865, 869, - 870, 868, 867, 872, 871, 766, 196, 221, 369, 0, - 455, 289, 651, 619, 485, 614, 206, 223, 935, 263, - 936, 0, 0, 940, 0, 0, 0, 942, 941, 0, - 943, 905, 904, 0, 0, 937, 938, 0, 939, 0, - 0, 198, 200, 209, 222, 232, 236, 243, 262, 277, - 279, 286, 299, 311, 319, 320, 323, 329, 381, 387, - 388, 389, 390, 410, 411, 412, 415, 418, 419, 422, - 424, 425, 428, 432, 436, 437, 438, 440, 442, 444, - 456, 461, 475, 476, 477, 478, 479, 482, 483, 489, - 490, 491, 492, 493, 501, 502, 517, 587, 589, 606, - 626, 633, 481, 950, 951, 952, 953, 954, 955, 956, - 957, 301, 601, 634, 598, 646, 628, 439, 379, 0, - 0, 382, 282, 306, 321, 0, 618, 503, 227, 467, - 291, 251, 975, 0, 211, 246, 230, 260, 275, 278, - 325, 392, 401, 430, 435, 297, 272, 244, 460, 241, - 486, 520, 521, 522, 524, 396, 267, 434, 397, 0, - 377, 577, 578, 317, 0, 0, 0, 529, 0, 778, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 0, 0, 0, 765, 0, 0, 0, 271, 770, 0, - 0, 0, 367, 268, 0, 0, 204, 506, 0, 431, - 0, 203, 0, 488, 253, 378, 375, 584, 283, 274, - 270, 250, 318, 386, 429, 519, 423, 777, 371, 0, - 0, 498, 402, 0, 0, 0, 0, 0, 0, 0, - 0, 772, 773, 0, 0, 0, 0, 0, 0, 0, - 0, 324, 248, 326, 202, 414, 499, 287, 0, 95, - 0, 0, 1024, 508, 960, 749, 926, 964, 1025, 977, - 978, 979, 965, 0, 238, 966, 967, 245, 968, 0, - 925, 808, 810, 809, 875, 876, 877, 878, 879, 880, - 881, 811, 812, 806, 973, 610, 980, 981, 0, 266, - 322, 273, 265, 581, 0, 0, 0, 0, 0, 0, - 597, 0, 0, 229, 0, 0, 0, 0, 0, 0, - 0, 745, 762, 0, 776, 0, 0, 0, 276, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 759, 760, 0, 0, 0, - 0, 920, 0, 761, 0, 0, 769, 982, 983, 984, - 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, - 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, - 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, - 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 3170, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 298, 0, 403, 258, 0, 454, 919, 0, 0, 630, - 0, 0, 917, 0, 0, 0, 0, 366, 0, 331, - 197, 225, 0, 0, 413, 462, 474, 0, 0, 0, - 970, 0, 472, 427, 605, 233, 285, 459, 433, 470, - 441, 288, 0, 0, 471, 373, 586, 451, 602, 631, - 632, 264, 407, 616, 523, 624, 649, 226, 261, 421, - 507, 608, 495, 398, 582, 583, 330, 494, 296, 201, - 370, 637, 224, 480, 372, 242, 231, 588, 613, 300, - 252, 290, 457, 644, 213, 518, 599, 239, 484, 0, - 0, 652, 247, 505, 611, 600, 215, 595, 504, 394, - 327, 328, 214, 0, 458, 269, 294, 0, 0, 259, - 416, 971, 972, 257, 653, 816, 623, 220, 0, 622, - 409, 585, 596, 395, 384, 219, 594, 393, 383, 335, - 824, 825, 281, 308, 901, 900, 899, 307, 309, 897, - 898, 896, 207, 609, 627, 0, 208, 0, 500, 612, - 654, 453, 212, 234, 235, 237, 0, 280, 284, 292, - 295, 304, 305, 314, 368, 420, 447, 443, 452, 0, - 580, 603, 617, 629, 635, 636, 638, 639, 640, 641, - 642, 645, 643, 408, 312, 496, 334, 374, 0, 0, - 426, 473, 240, 607, 497, 907, 929, 918, 782, 783, - 908, 909, 933, 910, 785, 786, 930, 931, 779, 780, - 784, 932, 934, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 650, 509, 515, 510, 511, 512, 513, 514, 0, - 516, 921, 768, 767, 0, 774, 775, 0, 804, 805, - 807, 813, 814, 815, 826, 873, 874, 882, 884, 885, - 883, 886, 887, 888, 891, 892, 893, 894, 889, 890, - 895, 787, 791, 788, 789, 790, 802, 792, 793, 794, - 795, 796, 797, 798, 799, 800, 801, 803, 944, 945, - 946, 947, 948, 949, 819, 823, 822, 820, 821, 817, - 818, 845, 844, 846, 847, 848, 849, 850, 851, 853, - 852, 854, 855, 856, 857, 858, 859, 827, 828, 831, - 832, 830, 829, 833, 842, 843, 834, 835, 836, 837, - 838, 839, 841, 840, 860, 861, 862, 863, 864, 866, - 865, 869, 870, 868, 867, 872, 871, 766, 196, 221, - 369, 0, 455, 289, 651, 619, 485, 614, 206, 223, - 935, 263, 936, 0, 0, 940, 0, 0, 0, 942, - 941, 0, 943, 905, 904, 0, 0, 937, 938, 0, - 939, 0, 0, 198, 200, 209, 222, 232, 236, 243, - 262, 277, 279, 286, 299, 311, 319, 320, 323, 329, - 381, 387, 388, 389, 390, 410, 411, 412, 415, 418, - 419, 422, 424, 425, 428, 432, 436, 437, 438, 440, - 442, 444, 456, 461, 475, 476, 477, 478, 479, 482, - 483, 489, 490, 491, 492, 493, 501, 502, 517, 587, - 589, 606, 626, 633, 481, 950, 951, 952, 953, 954, - 955, 956, 957, 301, 601, 634, 598, 646, 628, 439, - 379, 0, 0, 382, 282, 306, 321, 0, 618, 503, - 227, 467, 291, 251, 975, 0, 211, 246, 230, 260, - 275, 278, 325, 392, 401, 430, 435, 297, 272, 244, - 460, 241, 486, 520, 521, 522, 524, 396, 267, 434, - 397, 0, 377, 577, 578, 317, 0, 0, 0, 529, - 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 0, 765, 0, 0, 0, 271, - 770, 0, 0, 0, 367, 268, 0, 0, 204, 506, - 0, 431, 0, 203, 0, 488, 253, 378, 375, 584, - 283, 274, 270, 250, 318, 386, 429, 519, 423, 777, - 371, 0, 0, 498, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 772, 773, 0, 0, 0, 0, 0, - 0, 0, 0, 324, 248, 326, 202, 414, 499, 287, - 0, 95, 0, 0, 1024, 508, 960, 1091, 926, 964, - 1025, 977, 978, 979, 965, 0, 238, 966, 967, 245, - 968, 0, 925, 808, 810, 809, 875, 876, 877, 878, - 879, 880, 881, 811, 812, 806, 973, 610, 980, 981, - 0, 266, 322, 273, 265, 581, 0, 0, 0, 0, - 0, 0, 597, 0, 0, 229, 0, 0, 0, 0, - 0, 0, 0, 0, 762, 0, 776, 0, 0, 0, - 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 759, 760, 0, - 0, 0, 0, 920, 0, 761, 0, 0, 769, 982, - 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, + 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, + 1029, 1030, 3193, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 300, 0, 406, 260, 0, 459, 925, + 0, 0, 636, 0, 0, 923, 0, 0, 0, 0, + 368, 0, 333, 199, 227, 0, 0, 416, 467, 479, + 0, 0, 0, 976, 0, 477, 430, 611, 235, 287, + 464, 437, 475, 445, 290, 0, 0, 476, 375, 592, + 455, 608, 637, 638, 266, 410, 622, 528, 630, 655, + 228, 263, 424, 512, 614, 500, 401, 588, 589, 332, + 499, 298, 203, 372, 643, 226, 485, 374, 244, 233, + 594, 619, 302, 254, 292, 462, 650, 215, 523, 605, + 241, 489, 0, 0, 658, 249, 510, 617, 606, 217, + 601, 509, 397, 329, 330, 216, 0, 463, 271, 296, + 0, 0, 261, 419, 977, 978, 259, 659, 822, 629, + 222, 0, 628, 412, 591, 602, 398, 386, 221, 600, + 396, 385, 337, 830, 831, 283, 310, 907, 906, 905, + 309, 311, 903, 904, 902, 209, 615, 633, 0, 210, + 0, 505, 618, 660, 457, 214, 236, 237, 239, 0, + 282, 286, 294, 297, 306, 307, 316, 370, 423, 451, + 447, 456, 0, 585, 609, 623, 635, 641, 642, 644, + 645, 646, 647, 648, 651, 649, 411, 314, 501, 336, + 376, 0, 0, 429, 478, 242, 613, 502, 913, 935, + 924, 788, 789, 914, 915, 939, 916, 791, 792, 936, + 937, 785, 786, 790, 938, 940, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 656, 514, 520, 515, 516, 517, + 518, 519, 0, 521, 927, 774, 773, 0, 780, 781, + 0, 810, 811, 813, 819, 820, 821, 832, 879, 880, + 888, 890, 891, 889, 892, 893, 894, 897, 898, 899, + 900, 895, 896, 901, 793, 797, 794, 795, 796, 808, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, + 809, 950, 951, 952, 953, 954, 955, 825, 829, 828, + 826, 827, 823, 824, 851, 850, 852, 853, 854, 855, + 856, 857, 859, 858, 860, 861, 862, 863, 864, 865, + 833, 834, 837, 838, 836, 835, 839, 848, 849, 840, + 841, 842, 843, 844, 845, 847, 846, 866, 867, 868, + 869, 870, 872, 871, 875, 876, 874, 873, 878, 877, + 772, 198, 223, 371, 0, 460, 291, 657, 625, 490, + 620, 208, 225, 941, 265, 942, 0, 0, 946, 0, + 0, 0, 948, 947, 0, 949, 911, 910, 0, 0, + 943, 944, 0, 945, 0, 0, 200, 202, 211, 224, + 234, 238, 245, 264, 279, 281, 288, 301, 313, 321, + 322, 325, 331, 383, 390, 391, 392, 393, 413, 414, + 415, 418, 421, 422, 425, 427, 428, 431, 436, 440, + 441, 442, 444, 446, 448, 461, 466, 480, 481, 482, + 483, 484, 487, 488, 494, 495, 496, 497, 498, 506, + 507, 522, 593, 595, 612, 632, 639, 486, 388, 434, + 458, 586, 956, 957, 958, 959, 960, 961, 962, 963, + 303, 607, 640, 604, 652, 634, 443, 381, 0, 0, + 384, 284, 308, 323, 0, 624, 508, 229, 472, 293, + 253, 1031, 0, 213, 248, 232, 262, 277, 280, 327, + 395, 404, 433, 439, 299, 274, 246, 465, 243, 491, + 525, 526, 527, 529, 399, 269, 438, 400, 0, 379, + 582, 583, 319, 0, 0, 0, 534, 0, 784, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, + 0, 0, 771, 0, 0, 0, 273, 776, 0, 0, + 0, 369, 270, 0, 0, 206, 511, 0, 435, 0, + 205, 0, 493, 255, 380, 377, 590, 285, 276, 272, + 252, 320, 389, 432, 524, 426, 783, 373, 0, 0, + 503, 405, 0, 0, 0, 0, 0, 0, 0, 0, + 778, 779, 0, 0, 0, 0, 0, 0, 0, 0, + 326, 250, 328, 204, 417, 504, 289, 0, 95, 0, + 0, 1032, 513, 966, 755, 932, 970, 1033, 984, 985, + 986, 971, 0, 240, 972, 973, 247, 974, 0, 931, + 814, 816, 815, 881, 882, 883, 884, 885, 886, 887, + 817, 818, 812, 979, 616, 987, 988, 0, 268, 324, + 275, 267, 587, 0, 0, 0, 0, 0, 0, 603, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 751, 768, 0, 782, 0, 0, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 765, 766, 0, 0, 0, 0, + 926, 0, 767, 0, 0, 775, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, - 1023, 771, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 0, 403, 258, 0, 454, 919, 0, - 0, 630, 0, 0, 917, 0, 0, 0, 0, 366, - 0, 331, 197, 225, 0, 0, 413, 462, 474, 0, - 0, 0, 970, 0, 472, 427, 605, 233, 285, 459, - 433, 470, 441, 288, 0, 0, 471, 373, 586, 451, - 602, 631, 632, 264, 407, 616, 523, 624, 649, 226, - 261, 421, 507, 608, 495, 398, 582, 583, 330, 494, - 296, 201, 370, 637, 224, 480, 372, 242, 231, 588, - 613, 300, 252, 290, 457, 644, 213, 518, 599, 239, - 484, 0, 0, 652, 247, 505, 611, 600, 215, 595, - 504, 394, 327, 328, 214, 0, 458, 269, 294, 0, - 0, 259, 416, 971, 972, 257, 653, 816, 623, 220, - 0, 622, 409, 585, 596, 395, 384, 219, 594, 393, - 383, 335, 824, 825, 281, 308, 901, 900, 899, 307, - 309, 897, 898, 896, 207, 609, 627, 0, 208, 0, - 500, 612, 654, 453, 212, 234, 235, 237, 0, 280, - 284, 292, 295, 304, 305, 314, 368, 420, 447, 443, - 452, 0, 580, 603, 617, 629, 635, 636, 638, 639, - 640, 641, 642, 645, 643, 408, 312, 496, 334, 374, - 0, 0, 426, 473, 240, 607, 497, 907, 929, 918, - 782, 783, 908, 909, 933, 910, 785, 786, 930, 931, - 779, 780, 784, 932, 934, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 650, 509, 515, 510, 511, 512, 513, - 514, 0, 516, 921, 768, 767, 0, 774, 775, 0, - 804, 805, 807, 813, 814, 815, 826, 873, 874, 882, - 884, 885, 883, 886, 887, 888, 891, 892, 893, 894, - 889, 890, 895, 787, 791, 788, 789, 790, 802, 792, - 793, 794, 795, 796, 797, 798, 799, 800, 801, 803, - 944, 945, 946, 947, 948, 949, 819, 823, 822, 820, - 821, 817, 818, 845, 844, 846, 847, 848, 849, 850, - 851, 853, 852, 854, 855, 856, 857, 858, 859, 827, - 828, 831, 832, 830, 829, 833, 842, 843, 834, 835, - 836, 837, 838, 839, 841, 840, 860, 861, 862, 863, - 864, 866, 865, 869, 870, 868, 867, 872, 871, 766, - 196, 221, 369, 0, 455, 289, 651, 619, 485, 614, - 206, 223, 935, 263, 936, 0, 0, 940, 0, 0, - 0, 942, 941, 0, 943, 905, 904, 0, 0, 937, - 938, 0, 939, 0, 0, 198, 200, 209, 222, 232, - 236, 243, 262, 277, 279, 286, 299, 311, 319, 320, - 323, 329, 381, 387, 388, 389, 390, 410, 411, 412, - 415, 418, 419, 422, 424, 425, 428, 432, 436, 437, - 438, 440, 442, 444, 456, 461, 475, 476, 477, 478, - 479, 482, 483, 489, 490, 491, 492, 493, 501, 502, - 517, 587, 589, 606, 626, 633, 481, 950, 951, 952, - 953, 954, 955, 956, 957, 301, 601, 634, 598, 646, - 628, 439, 379, 0, 0, 382, 282, 306, 321, 0, - 618, 503, 227, 467, 291, 251, 975, 0, 211, 246, - 230, 260, 275, 278, 325, 392, 401, 430, 435, 297, - 272, 244, 460, 241, 486, 520, 521, 522, 524, 396, - 267, 434, 397, 0, 377, 577, 578, 317, 0, 0, - 0, 529, 0, 778, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 417, 0, 0, 0, 765, 0, 0, - 0, 271, 770, 0, 0, 0, 367, 268, 0, 0, - 204, 506, 0, 431, 0, 203, 0, 488, 253, 378, - 375, 584, 283, 274, 270, 250, 318, 386, 429, 519, - 423, 777, 371, 0, 0, 498, 402, 0, 0, 0, - 0, 0, 0, 0, 0, 772, 773, 0, 0, 0, - 0, 0, 0, 0, 0, 324, 248, 326, 202, 414, - 499, 287, 0, 95, 0, 0, 1024, 508, 960, 1091, - 926, 964, 1025, 977, 978, 979, 965, 0, 238, 966, - 967, 245, 968, 0, 925, 808, 810, 809, 875, 876, - 877, 878, 879, 880, 881, 811, 812, 806, 973, 610, - 980, 981, 0, 266, 322, 273, 265, 581, 0, 0, - 0, 0, 0, 0, 597, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 0, 762, 0, 776, 0, - 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 759, - 760, 0, 0, 0, 0, 920, 0, 761, 0, 0, - 769, 982, 983, 984, 985, 986, 987, 988, 989, 990, + 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 3189, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, + 0, 406, 260, 0, 459, 925, 0, 0, 636, 0, + 0, 923, 0, 0, 0, 0, 368, 0, 333, 199, + 227, 0, 0, 416, 467, 479, 0, 0, 0, 976, + 0, 477, 430, 611, 235, 287, 464, 437, 475, 445, + 290, 0, 0, 476, 375, 592, 455, 608, 637, 638, + 266, 410, 622, 528, 630, 655, 228, 263, 424, 512, + 614, 500, 401, 588, 589, 332, 499, 298, 203, 372, + 643, 226, 485, 374, 244, 233, 594, 619, 302, 254, + 292, 462, 650, 215, 523, 605, 241, 489, 0, 0, + 658, 249, 510, 617, 606, 217, 601, 509, 397, 329, + 330, 216, 0, 463, 271, 296, 0, 0, 261, 419, + 977, 978, 259, 659, 822, 629, 222, 0, 628, 412, + 591, 602, 398, 386, 221, 600, 396, 385, 337, 830, + 831, 283, 310, 907, 906, 905, 309, 311, 903, 904, + 902, 209, 615, 633, 0, 210, 0, 505, 618, 660, + 457, 214, 236, 237, 239, 0, 282, 286, 294, 297, + 306, 307, 316, 370, 423, 451, 447, 456, 0, 585, + 609, 623, 635, 641, 642, 644, 645, 646, 647, 648, + 651, 649, 411, 314, 501, 336, 376, 0, 0, 429, + 478, 242, 613, 502, 913, 935, 924, 788, 789, 914, + 915, 939, 916, 791, 792, 936, 937, 785, 786, 790, + 938, 940, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 656, 514, 520, 515, 516, 517, 518, 519, 0, 521, + 927, 774, 773, 0, 780, 781, 0, 810, 811, 813, + 819, 820, 821, 832, 879, 880, 888, 890, 891, 889, + 892, 893, 894, 897, 898, 899, 900, 895, 896, 901, + 793, 797, 794, 795, 796, 808, 798, 799, 800, 801, + 802, 803, 804, 805, 806, 807, 809, 950, 951, 952, + 953, 954, 955, 825, 829, 828, 826, 827, 823, 824, + 851, 850, 852, 853, 854, 855, 856, 857, 859, 858, + 860, 861, 862, 863, 864, 865, 833, 834, 837, 838, + 836, 835, 839, 848, 849, 840, 841, 842, 843, 844, + 845, 847, 846, 866, 867, 868, 869, 870, 872, 871, + 875, 876, 874, 873, 878, 877, 772, 198, 223, 371, + 0, 460, 291, 657, 625, 490, 620, 208, 225, 941, + 265, 942, 0, 0, 946, 0, 0, 0, 948, 947, + 0, 949, 911, 910, 0, 0, 943, 944, 0, 945, + 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, + 279, 281, 288, 301, 313, 321, 322, 325, 331, 383, + 390, 391, 392, 393, 413, 414, 415, 418, 421, 422, + 425, 427, 428, 431, 436, 440, 441, 442, 444, 446, + 448, 461, 466, 480, 481, 482, 483, 484, 487, 488, + 494, 495, 496, 497, 498, 506, 507, 522, 593, 595, + 612, 632, 639, 486, 388, 434, 458, 586, 956, 957, + 958, 959, 960, 961, 962, 963, 303, 607, 640, 604, + 652, 634, 443, 381, 0, 0, 384, 284, 308, 323, + 0, 624, 508, 229, 472, 293, 253, 1031, 0, 213, + 248, 232, 262, 277, 280, 327, 395, 404, 433, 439, + 299, 274, 246, 465, 243, 491, 525, 526, 527, 529, + 399, 269, 438, 400, 0, 379, 582, 583, 319, 0, + 0, 0, 534, 0, 784, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 420, 0, 0, 0, 771, 0, + 0, 0, 273, 776, 0, 0, 0, 369, 270, 0, + 0, 206, 511, 0, 435, 0, 205, 0, 493, 255, + 380, 377, 590, 285, 276, 272, 252, 320, 389, 432, + 524, 426, 783, 373, 0, 0, 503, 405, 0, 0, + 0, 0, 0, 0, 0, 0, 778, 779, 0, 0, + 0, 0, 0, 0, 0, 0, 326, 250, 328, 204, + 417, 504, 289, 0, 95, 0, 0, 1032, 513, 966, + 1100, 932, 970, 1033, 984, 985, 986, 971, 0, 240, + 972, 973, 247, 974, 0, 931, 814, 816, 815, 881, + 882, 883, 884, 885, 886, 887, 817, 818, 812, 979, + 616, 987, 988, 0, 268, 324, 275, 267, 587, 0, + 0, 0, 0, 0, 0, 603, 0, 0, 231, 0, + 0, 0, 0, 0, 0, 0, 0, 768, 0, 782, + 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 765, 766, 0, 0, 0, 0, 926, 0, 767, 0, + 0, 775, 989, 990, 991, 992, 993, 994, 995, 996, + 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, + 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, + 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, + 1027, 1028, 1029, 1030, 777, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 300, 0, 406, 260, 0, + 459, 925, 0, 0, 636, 0, 0, 923, 0, 0, + 0, 0, 368, 0, 333, 199, 227, 0, 0, 416, + 467, 479, 0, 0, 0, 976, 0, 477, 430, 611, + 235, 287, 464, 437, 475, 445, 290, 0, 0, 476, + 375, 592, 455, 608, 637, 638, 266, 410, 622, 528, + 630, 655, 228, 263, 424, 512, 614, 500, 401, 588, + 589, 332, 499, 298, 203, 372, 643, 226, 485, 374, + 244, 233, 594, 619, 302, 254, 292, 462, 650, 215, + 523, 605, 241, 489, 0, 0, 658, 249, 510, 617, + 606, 217, 601, 509, 397, 329, 330, 216, 0, 463, + 271, 296, 0, 0, 261, 419, 977, 978, 259, 659, + 822, 629, 222, 0, 628, 412, 591, 602, 398, 386, + 221, 600, 396, 385, 337, 830, 831, 283, 310, 907, + 906, 905, 309, 311, 903, 904, 902, 209, 615, 633, + 0, 210, 0, 505, 618, 660, 457, 214, 236, 237, + 239, 0, 282, 286, 294, 297, 306, 307, 316, 370, + 423, 451, 447, 456, 0, 585, 609, 623, 635, 641, + 642, 644, 645, 646, 647, 648, 651, 649, 411, 314, + 501, 336, 376, 0, 0, 429, 478, 242, 613, 502, + 913, 935, 924, 788, 789, 914, 915, 939, 916, 791, + 792, 936, 937, 785, 786, 790, 938, 940, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 656, 514, 520, 515, + 516, 517, 518, 519, 0, 521, 927, 774, 773, 0, + 780, 781, 0, 810, 811, 813, 819, 820, 821, 832, + 879, 880, 888, 890, 891, 889, 892, 893, 894, 897, + 898, 899, 900, 895, 896, 901, 793, 797, 794, 795, + 796, 808, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 809, 950, 951, 952, 953, 954, 955, 825, + 829, 828, 826, 827, 823, 824, 851, 850, 852, 853, + 854, 855, 856, 857, 859, 858, 860, 861, 862, 863, + 864, 865, 833, 834, 837, 838, 836, 835, 839, 848, + 849, 840, 841, 842, 843, 844, 845, 847, 846, 866, + 867, 868, 869, 870, 872, 871, 875, 876, 874, 873, + 878, 877, 772, 198, 223, 371, 0, 460, 291, 657, + 625, 490, 620, 208, 225, 941, 265, 942, 0, 0, + 946, 0, 0, 0, 948, 947, 0, 949, 911, 910, + 0, 0, 943, 944, 0, 945, 0, 0, 200, 202, + 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, + 313, 321, 322, 325, 331, 383, 390, 391, 392, 393, + 413, 414, 415, 418, 421, 422, 425, 427, 428, 431, + 436, 440, 441, 442, 444, 446, 448, 461, 466, 480, + 481, 482, 483, 484, 487, 488, 494, 495, 496, 497, + 498, 506, 507, 522, 593, 595, 612, 632, 639, 486, + 388, 434, 458, 586, 956, 957, 958, 959, 960, 961, + 962, 963, 303, 607, 640, 604, 652, 634, 443, 381, + 0, 0, 384, 284, 308, 323, 0, 624, 508, 229, + 472, 293, 253, 1031, 0, 213, 248, 232, 262, 277, + 280, 327, 395, 404, 433, 439, 299, 274, 246, 465, + 243, 491, 525, 526, 527, 529, 399, 269, 438, 400, + 0, 379, 582, 583, 319, 0, 0, 0, 534, 0, + 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 420, 0, 0, 0, 771, 0, 0, 0, 273, 776, + 0, 0, 0, 369, 270, 0, 0, 206, 511, 0, + 435, 0, 205, 0, 493, 255, 380, 377, 590, 285, + 276, 272, 252, 320, 389, 432, 524, 426, 783, 373, + 0, 0, 503, 405, 0, 0, 0, 0, 0, 0, + 0, 0, 778, 779, 0, 0, 0, 0, 0, 0, + 0, 0, 326, 250, 328, 204, 417, 504, 289, 0, + 95, 0, 0, 1032, 513, 966, 1100, 932, 970, 1033, + 984, 985, 986, 971, 0, 240, 972, 973, 247, 974, + 0, 931, 814, 816, 815, 881, 882, 883, 884, 885, + 886, 887, 817, 818, 812, 979, 616, 987, 988, 0, + 268, 324, 275, 267, 587, 0, 0, 0, 0, 0, + 0, 603, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 768, 0, 782, 0, 0, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 765, 766, 0, 0, + 0, 0, 926, 0, 767, 0, 0, 775, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 2124, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 298, 0, 403, 258, 0, 454, - 919, 0, 0, 630, 0, 0, 917, 0, 0, 0, - 0, 366, 0, 331, 197, 225, 0, 0, 413, 462, - 474, 0, 0, 0, 970, 0, 472, 427, 605, 233, - 285, 459, 433, 470, 441, 288, 0, 0, 471, 373, - 586, 451, 602, 631, 632, 264, 407, 616, 523, 624, - 649, 226, 261, 421, 507, 608, 495, 398, 582, 583, - 330, 494, 296, 201, 370, 637, 224, 480, 372, 242, - 231, 588, 613, 300, 252, 290, 457, 644, 213, 518, - 599, 239, 484, 0, 0, 652, 247, 505, 611, 600, - 215, 595, 504, 394, 327, 328, 214, 0, 458, 269, - 294, 0, 0, 259, 416, 971, 972, 257, 653, 816, - 623, 220, 0, 622, 409, 585, 596, 395, 384, 219, - 594, 393, 383, 335, 824, 825, 281, 308, 901, 900, - 899, 307, 309, 897, 898, 896, 207, 609, 627, 0, - 208, 0, 500, 612, 654, 453, 212, 234, 235, 237, - 0, 280, 284, 292, 295, 304, 305, 314, 368, 420, - 447, 443, 452, 0, 580, 603, 617, 629, 635, 636, - 638, 639, 640, 641, 642, 645, 643, 408, 312, 496, - 334, 374, 0, 0, 426, 473, 240, 607, 497, 907, - 929, 918, 782, 783, 908, 909, 933, 910, 785, 786, - 930, 931, 779, 780, 784, 932, 934, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 650, 509, 515, 510, 511, - 512, 513, 514, 0, 516, 921, 768, 767, 0, 774, - 775, 0, 804, 805, 807, 813, 814, 815, 826, 873, - 874, 882, 884, 885, 883, 886, 887, 888, 891, 892, - 893, 894, 889, 890, 895, 787, 791, 788, 789, 790, - 802, 792, 793, 794, 795, 796, 797, 798, 799, 800, - 801, 803, 944, 945, 946, 947, 948, 949, 819, 823, - 822, 820, 821, 817, 818, 845, 844, 846, 847, 848, - 849, 850, 851, 853, 852, 854, 855, 856, 857, 858, - 859, 827, 828, 831, 832, 830, 829, 833, 842, 843, - 834, 835, 836, 837, 838, 839, 841, 840, 860, 861, - 862, 863, 864, 866, 865, 869, 870, 868, 867, 872, - 871, 766, 196, 221, 369, 0, 455, 289, 651, 619, - 485, 614, 206, 223, 935, 263, 936, 0, 0, 940, - 0, 0, 0, 942, 941, 0, 943, 905, 904, 0, - 0, 937, 938, 0, 939, 0, 0, 198, 200, 209, - 222, 232, 236, 243, 262, 277, 279, 286, 299, 311, - 319, 320, 323, 329, 381, 387, 388, 389, 390, 410, - 411, 412, 415, 418, 419, 422, 424, 425, 428, 432, - 436, 437, 438, 440, 442, 444, 456, 461, 475, 476, - 477, 478, 479, 482, 483, 489, 490, 491, 492, 493, - 501, 502, 517, 587, 589, 606, 626, 633, 481, 950, - 951, 952, 953, 954, 955, 956, 957, 301, 601, 634, - 598, 646, 628, 439, 379, 0, 0, 382, 282, 306, - 321, 0, 618, 503, 227, 467, 291, 251, 975, 0, - 211, 246, 230, 260, 275, 278, 325, 392, 401, 430, - 435, 297, 272, 244, 460, 241, 486, 520, 521, 522, - 524, 396, 267, 434, 397, 0, 377, 577, 578, 317, - 0, 0, 0, 529, 0, 778, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 765, - 0, 0, 0, 271, 770, 0, 0, 0, 367, 268, - 0, 0, 204, 506, 0, 431, 0, 203, 0, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 777, 371, 0, 0, 498, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 772, 773, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 248, 326, - 202, 414, 499, 287, 0, 95, 0, 0, 1024, 508, - 960, 1091, 926, 964, 1025, 977, 978, 979, 965, 0, - 238, 966, 967, 245, 968, 0, 925, 808, 810, 809, - 875, 876, 877, 878, 879, 880, 881, 811, 812, 806, - 973, 610, 980, 981, 0, 266, 322, 273, 265, 581, - 0, 0, 0, 0, 0, 0, 597, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, - 776, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 759, 760, 0, 0, 0, 0, 920, 0, 761, - 0, 0, 769, 982, 983, 984, 985, 986, 987, 988, - 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, - 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, - 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, - 1019, 1020, 1021, 1022, 1023, 2122, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 298, 0, 403, 258, - 0, 454, 919, 0, 0, 630, 0, 0, 917, 0, - 0, 0, 0, 366, 0, 331, 197, 225, 0, 0, - 413, 462, 474, 0, 0, 0, 970, 0, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 0, 0, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 971, 972, 257, - 653, 816, 623, 220, 0, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 824, 825, 281, 308, - 901, 900, 899, 307, 309, 897, 898, 896, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 0, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 0, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 0, 0, 426, 473, 240, 607, - 497, 907, 929, 918, 782, 783, 908, 909, 933, 910, - 785, 786, 930, 931, 779, 780, 784, 932, 934, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 921, 768, 767, - 0, 774, 775, 0, 804, 805, 807, 813, 814, 815, - 826, 873, 874, 882, 884, 885, 883, 886, 887, 888, - 891, 892, 893, 894, 889, 890, 895, 787, 791, 788, - 789, 790, 802, 792, 793, 794, 795, 796, 797, 798, - 799, 800, 801, 803, 944, 945, 946, 947, 948, 949, - 819, 823, 822, 820, 821, 817, 818, 845, 844, 846, - 847, 848, 849, 850, 851, 853, 852, 854, 855, 856, - 857, 858, 859, 827, 828, 831, 832, 830, 829, 833, - 842, 843, 834, 835, 836, 837, 838, 839, 841, 840, - 860, 861, 862, 863, 864, 866, 865, 869, 870, 868, - 867, 872, 871, 766, 196, 221, 369, 0, 455, 289, - 651, 619, 485, 614, 206, 223, 935, 263, 936, 0, - 0, 940, 0, 0, 0, 942, 941, 0, 943, 905, - 904, 0, 0, 937, 938, 0, 939, 0, 0, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 950, 951, 952, 953, 954, 955, 956, 957, 301, - 601, 634, 598, 646, 628, 439, 379, 0, 0, 382, - 282, 306, 321, 0, 618, 503, 227, 467, 291, 251, - 975, 0, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 397, 0, 377, 577, - 578, 317, 0, 0, 0, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, - 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, - 367, 268, 0, 0, 204, 506, 0, 431, 0, 203, - 0, 488, 253, 378, 375, 584, 283, 274, 270, 250, - 318, 386, 429, 519, 423, 0, 371, 0, 0, 498, - 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, - 248, 326, 202, 414, 499, 287, 0, 0, 0, 0, - 0, 508, 725, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 238, 0, 0, 245, 0, 0, 0, 352, - 361, 360, 340, 341, 343, 345, 351, 358, 364, 337, - 346, 0, 0, 610, 0, 0, 0, 266, 322, 273, - 265, 581, 0, 0, 0, 0, 0, 0, 597, 0, - 0, 229, 0, 1142, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, - 403, 258, 0, 454, 0, 0, 1141, 630, 0, 0, - 0, 0, 0, 1138, 1139, 366, 1099, 331, 197, 225, - 1132, 1136, 413, 462, 474, 0, 0, 0, 254, 0, - 472, 427, 605, 233, 285, 459, 433, 470, 441, 288, - 0, 0, 471, 373, 586, 451, 602, 631, 632, 264, - 407, 616, 523, 624, 649, 226, 261, 421, 507, 608, - 495, 398, 582, 583, 330, 494, 296, 201, 370, 637, - 224, 480, 372, 242, 231, 588, 613, 300, 252, 290, - 457, 644, 213, 518, 599, 239, 484, 0, 0, 652, - 247, 505, 611, 600, 215, 595, 504, 394, 327, 328, - 214, 0, 458, 269, 294, 0, 0, 259, 416, 590, - 591, 257, 653, 228, 623, 220, 0, 622, 409, 585, - 596, 395, 384, 219, 594, 393, 383, 335, 356, 357, - 281, 308, 448, 376, 449, 307, 309, 405, 404, 406, - 207, 609, 627, 0, 208, 0, 500, 612, 654, 453, - 212, 234, 235, 237, 0, 280, 284, 292, 295, 304, - 305, 314, 368, 420, 447, 443, 452, 0, 580, 603, - 617, 629, 635, 636, 638, 639, 640, 641, 642, 645, - 643, 408, 312, 496, 334, 374, 0, 0, 426, 473, - 240, 607, 497, 199, 0, 0, 0, 0, 255, 256, - 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 650, - 509, 515, 510, 511, 512, 513, 514, 0, 516, 0, - 0, 0, 0, 0, 399, 0, 592, 593, 673, 385, - 487, 604, 336, 350, 353, 342, 362, 0, 363, 338, - 339, 344, 347, 348, 349, 354, 355, 359, 365, 249, - 210, 391, 400, 579, 313, 216, 217, 218, 525, 526, - 527, 528, 620, 621, 625, 205, 463, 464, 465, 466, - 293, 615, 310, 469, 468, 332, 333, 380, 450, 541, - 543, 554, 558, 560, 562, 568, 571, 542, 544, 555, - 559, 561, 563, 569, 572, 531, 533, 535, 537, 550, - 549, 546, 574, 575, 552, 557, 536, 548, 553, 566, - 573, 570, 530, 534, 538, 547, 565, 564, 545, 556, - 567, 551, 539, 532, 540, 0, 196, 221, 369, 0, - 455, 289, 651, 619, 485, 614, 206, 223, 0, 263, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 200, 209, 222, 232, 236, 243, 262, 277, - 279, 286, 299, 311, 319, 320, 323, 329, 381, 387, - 388, 389, 390, 410, 411, 412, 415, 418, 419, 422, - 424, 425, 428, 432, 436, 437, 438, 440, 442, 444, - 456, 461, 475, 476, 477, 478, 479, 482, 483, 489, - 490, 491, 492, 493, 501, 502, 517, 587, 589, 606, - 626, 633, 481, 302, 303, 445, 446, 315, 316, 647, - 648, 301, 601, 634, 598, 646, 628, 439, 379, 0, - 0, 382, 282, 306, 321, 0, 618, 503, 227, 467, - 291, 251, 0, 0, 211, 246, 230, 260, 275, 278, - 325, 392, 401, 430, 435, 297, 272, 244, 460, 241, - 486, 520, 521, 522, 524, 396, 267, 434, 397, 0, - 377, 577, 578, 317, 0, 0, 86, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, - 0, 0, 367, 268, 0, 0, 204, 506, 0, 431, - 0, 203, 0, 488, 253, 378, 375, 584, 283, 274, - 270, 250, 318, 386, 429, 519, 423, 0, 371, 0, - 0, 498, 402, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 324, 248, 326, 202, 414, 499, 287, 0, 95, - 0, 0, 0, 508, 194, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 238, 0, 0, 245, 0, 0, - 0, 352, 361, 360, 340, 341, 343, 345, 351, 358, - 364, 337, 346, 0, 0, 610, 0, 0, 0, 266, - 322, 273, 265, 581, 0, 0, 0, 0, 0, 0, - 597, 0, 0, 229, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 298, 0, 403, 258, 0, 454, 0, 0, 0, 630, - 0, 0, 0, 0, 0, 0, 0, 366, 0, 331, - 197, 225, 0, 0, 413, 462, 474, 0, 0, 0, - 254, 0, 472, 427, 605, 233, 285, 459, 433, 470, - 441, 288, 0, 0, 471, 373, 586, 451, 602, 631, - 632, 264, 407, 616, 523, 624, 649, 226, 261, 421, - 507, 608, 495, 398, 582, 583, 330, 494, 296, 201, - 370, 637, 224, 480, 372, 242, 231, 588, 613, 300, - 252, 290, 457, 644, 213, 518, 599, 239, 484, 0, - 0, 652, 247, 505, 611, 600, 215, 595, 504, 394, - 327, 328, 214, 0, 458, 269, 294, 0, 0, 259, - 416, 590, 591, 257, 653, 228, 623, 220, 0, 622, - 409, 585, 596, 395, 384, 219, 594, 393, 383, 335, - 356, 357, 281, 308, 448, 376, 449, 307, 309, 405, - 404, 406, 207, 609, 627, 0, 208, 0, 500, 612, - 654, 453, 212, 234, 235, 237, 0, 280, 284, 292, - 295, 304, 305, 314, 368, 420, 447, 443, 452, 0, - 580, 603, 617, 629, 635, 636, 638, 639, 640, 641, - 642, 645, 643, 408, 312, 496, 334, 374, 0, 0, - 426, 473, 240, 607, 497, 199, 0, 0, 0, 0, - 255, 256, 0, 576, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 650, 509, 515, 510, 511, 512, 513, 514, 0, - 516, 0, 0, 0, 0, 0, 399, 0, 592, 593, - 673, 385, 487, 604, 336, 350, 353, 342, 362, 0, - 363, 338, 339, 344, 347, 348, 349, 354, 355, 359, - 365, 249, 210, 391, 400, 579, 313, 216, 217, 218, - 525, 526, 527, 528, 620, 621, 625, 205, 463, 464, - 465, 466, 293, 615, 310, 469, 468, 332, 333, 380, - 450, 541, 543, 554, 558, 560, 562, 568, 571, 542, - 544, 555, 559, 561, 563, 569, 572, 531, 533, 535, - 537, 550, 549, 546, 574, 575, 552, 557, 536, 548, - 553, 566, 573, 570, 530, 534, 538, 547, 565, 564, - 545, 556, 567, 551, 539, 532, 540, 0, 196, 221, - 369, 94, 455, 289, 651, 619, 485, 614, 206, 223, - 0, 263, 0, 0, 0, 0, 0, 0, 2427, 0, - 0, 2426, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 200, 209, 222, 232, 236, 243, - 262, 277, 279, 286, 299, 311, 319, 320, 323, 329, - 381, 387, 388, 389, 390, 410, 411, 412, 415, 418, - 419, 422, 424, 425, 428, 432, 436, 437, 438, 440, - 442, 444, 456, 461, 475, 476, 477, 478, 479, 482, - 483, 489, 490, 491, 492, 493, 501, 502, 517, 587, - 589, 606, 626, 633, 481, 302, 303, 445, 446, 315, - 316, 647, 648, 301, 601, 634, 598, 646, 628, 439, - 379, 0, 0, 382, 282, 306, 321, 0, 618, 503, - 227, 467, 291, 251, 0, 0, 211, 246, 230, 260, - 275, 278, 325, 392, 401, 430, 435, 297, 272, 244, - 460, 241, 486, 520, 521, 522, 524, 396, 267, 434, - 1777, 0, 377, 577, 578, 317, 0, 0, 0, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 1779, 0, 0, 0, 0, 271, - 0, 0, 0, 0, 367, 268, 0, 0, 204, 506, - 0, 431, 0, 203, 0, 488, 253, 378, 375, 584, - 283, 274, 270, 250, 318, 386, 429, 519, 423, 0, - 371, 0, 0, 498, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 324, 248, 326, 202, 414, 499, 287, - 0, 0, 0, 0, 1781, 508, 725, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 238, 0, 0, 245, - 0, 0, 0, 352, 361, 360, 340, 341, 343, 345, - 351, 358, 364, 337, 346, 0, 0, 610, 0, 0, - 0, 266, 322, 273, 265, 581, 0, 0, 0, 0, - 0, 0, 597, 0, 0, 229, 0, 0, 0, 1480, - 0, 1481, 1482, 0, 0, 0, 0, 0, 0, 0, - 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 0, 403, 258, 0, 454, 0, 0, - 0, 630, 0, 0, 0, 0, 0, 0, 0, 366, - 0, 331, 197, 225, 0, 0, 413, 462, 474, 0, - 0, 0, 254, 0, 472, 427, 605, 233, 285, 459, - 433, 470, 441, 288, 0, 0, 471, 373, 586, 451, - 602, 631, 632, 264, 407, 616, 523, 624, 649, 226, - 261, 421, 507, 608, 495, 398, 582, 583, 330, 494, - 296, 201, 370, 637, 224, 480, 372, 242, 231, 588, - 613, 300, 252, 290, 457, 644, 213, 518, 599, 239, - 484, 0, 0, 652, 247, 505, 611, 600, 215, 595, - 504, 394, 327, 328, 214, 0, 458, 269, 294, 0, - 0, 259, 416, 590, 591, 257, 653, 228, 623, 220, - 0, 622, 409, 585, 596, 395, 384, 219, 594, 393, - 383, 335, 356, 357, 281, 308, 448, 376, 449, 307, - 309, 405, 404, 406, 207, 609, 627, 0, 208, 0, - 500, 612, 654, 453, 212, 234, 235, 237, 0, 280, - 284, 292, 295, 304, 305, 314, 368, 420, 447, 443, - 452, 0, 580, 603, 617, 629, 635, 636, 638, 639, - 640, 641, 642, 645, 643, 408, 312, 496, 334, 374, - 0, 0, 426, 473, 240, 607, 497, 199, 0, 0, - 0, 0, 255, 256, 0, 576, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 650, 509, 515, 510, 511, 512, 513, - 514, 0, 516, 0, 0, 0, 0, 0, 399, 0, - 592, 593, 673, 385, 487, 604, 336, 350, 353, 342, - 362, 0, 363, 338, 339, 344, 347, 348, 349, 354, - 355, 359, 365, 249, 210, 391, 400, 579, 313, 216, - 217, 218, 525, 526, 527, 528, 620, 621, 625, 205, - 463, 464, 465, 466, 293, 615, 310, 469, 468, 332, - 333, 380, 450, 541, 543, 554, 558, 560, 562, 568, - 571, 542, 544, 555, 559, 561, 563, 569, 572, 531, - 533, 535, 537, 550, 549, 546, 574, 575, 552, 557, - 536, 548, 553, 566, 573, 570, 530, 534, 538, 547, - 565, 564, 545, 556, 567, 551, 539, 532, 540, 0, - 196, 221, 369, 0, 455, 289, 651, 619, 485, 614, - 206, 223, 0, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 198, 200, 209, 222, 232, - 236, 243, 262, 277, 279, 286, 299, 311, 319, 320, - 323, 329, 381, 387, 388, 389, 390, 410, 411, 412, - 415, 418, 419, 422, 424, 425, 428, 432, 436, 437, - 438, 440, 442, 444, 456, 461, 475, 476, 477, 478, - 479, 482, 483, 489, 490, 491, 492, 493, 501, 502, - 517, 587, 589, 606, 626, 633, 481, 302, 303, 445, - 446, 315, 316, 647, 648, 301, 601, 634, 598, 646, - 628, 439, 379, 0, 0, 382, 282, 306, 321, 0, - 618, 503, 227, 467, 291, 251, 0, 0, 211, 246, - 230, 260, 275, 278, 325, 392, 401, 430, 435, 297, - 272, 244, 460, 241, 486, 520, 521, 522, 524, 396, - 267, 434, 397, 0, 377, 577, 578, 317, 0, 0, - 86, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, - 0, 271, 0, 0, 0, 0, 367, 268, 0, 0, - 204, 506, 0, 431, 0, 203, 0, 488, 253, 378, - 375, 584, 283, 274, 270, 250, 318, 386, 429, 519, - 423, 0, 371, 0, 0, 498, 402, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 324, 248, 326, 202, 414, - 499, 287, 0, 95, 0, 1754, 0, 508, 725, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, - 0, 245, 0, 0, 0, 352, 361, 360, 340, 341, - 343, 345, 351, 358, 364, 337, 346, 0, 0, 610, - 0, 0, 0, 266, 322, 273, 265, 581, 0, 0, - 0, 0, 0, 0, 597, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 298, 0, 403, 258, 0, 454, - 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, - 0, 366, 0, 331, 197, 225, 0, 0, 413, 462, - 474, 0, 0, 0, 254, 0, 472, 427, 605, 233, - 285, 459, 433, 470, 441, 288, 0, 0, 471, 373, - 586, 451, 602, 631, 632, 264, 407, 616, 523, 624, - 649, 226, 261, 421, 507, 608, 495, 398, 582, 583, - 330, 494, 296, 201, 370, 637, 224, 480, 372, 242, - 231, 588, 613, 300, 252, 290, 457, 644, 213, 518, - 599, 239, 484, 0, 0, 652, 247, 505, 611, 600, - 215, 595, 504, 394, 327, 328, 214, 0, 458, 269, - 294, 0, 0, 259, 416, 590, 591, 257, 653, 228, - 623, 220, 0, 622, 409, 585, 596, 395, 384, 219, - 594, 393, 383, 335, 356, 357, 281, 308, 448, 376, - 449, 307, 309, 405, 404, 406, 207, 609, 627, 0, - 208, 0, 500, 612, 654, 453, 212, 234, 235, 237, - 0, 280, 284, 292, 295, 304, 305, 314, 368, 420, - 447, 443, 452, 0, 580, 603, 617, 629, 635, 636, - 638, 639, 640, 641, 642, 645, 643, 408, 312, 496, - 334, 374, 0, 0, 426, 473, 240, 607, 497, 199, - 0, 0, 0, 0, 255, 256, 0, 576, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 650, 509, 515, 510, 511, - 512, 513, 514, 0, 516, 0, 0, 0, 0, 0, - 399, 0, 592, 593, 673, 385, 487, 604, 336, 350, - 353, 342, 362, 0, 363, 338, 339, 344, 347, 348, - 349, 354, 355, 359, 365, 249, 210, 391, 400, 579, - 313, 216, 217, 218, 525, 526, 527, 528, 620, 621, - 625, 205, 463, 464, 465, 466, 293, 615, 310, 469, - 468, 332, 333, 380, 450, 541, 543, 554, 558, 560, - 562, 568, 571, 542, 544, 555, 559, 561, 563, 569, - 572, 531, 533, 535, 537, 550, 549, 546, 574, 575, - 552, 557, 536, 548, 553, 566, 573, 570, 530, 534, - 538, 547, 565, 564, 545, 556, 567, 551, 539, 532, - 540, 0, 196, 221, 369, 94, 455, 289, 651, 619, - 485, 614, 206, 223, 0, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 200, 209, - 222, 232, 236, 243, 262, 277, 279, 286, 299, 311, - 319, 320, 323, 329, 381, 387, 388, 389, 390, 410, - 411, 412, 415, 418, 419, 422, 424, 425, 428, 432, - 436, 437, 438, 440, 442, 444, 456, 461, 475, 476, - 477, 478, 479, 482, 483, 489, 490, 491, 492, 493, - 501, 502, 517, 587, 589, 606, 626, 633, 481, 302, - 303, 445, 446, 315, 316, 647, 648, 301, 601, 634, - 598, 646, 628, 439, 379, 0, 0, 382, 282, 306, - 321, 0, 618, 503, 227, 467, 291, 251, 0, 0, - 211, 246, 230, 260, 275, 278, 325, 392, 401, 430, - 435, 297, 272, 244, 460, 241, 486, 520, 521, 522, - 524, 396, 267, 434, 397, 0, 377, 577, 578, 317, - 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, - 0, 0, 0, 271, 0, 0, 0, 0, 367, 268, - 0, 0, 204, 506, 0, 431, 0, 203, 0, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 0, 371, 0, 0, 498, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 248, 326, - 202, 414, 499, 287, 0, 95, 0, 0, 0, 508, - 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 0, 245, 0, 0, 0, 352, 361, 360, - 340, 341, 343, 345, 351, 358, 364, 337, 346, 0, - 0, 610, 0, 0, 0, 266, 322, 273, 265, 581, - 0, 0, 0, 0, 0, 0, 597, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 298, 0, 403, 258, - 0, 454, 0, 0, 0, 630, 0, 0, 0, 0, - 0, 0, 0, 366, 0, 331, 197, 225, 0, 0, - 413, 462, 474, 0, 0, 0, 254, 0, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 0, 0, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 590, 591, 257, - 653, 228, 623, 220, 0, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 356, 357, 281, 308, - 448, 376, 449, 307, 309, 405, 404, 406, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 0, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 0, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 0, 0, 426, 473, 240, 607, - 497, 199, 0, 0, 0, 0, 255, 256, 0, 576, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 0, 0, 0, - 0, 0, 399, 0, 592, 593, 673, 385, 487, 604, - 336, 350, 353, 342, 362, 0, 363, 338, 339, 344, - 347, 348, 349, 354, 355, 359, 365, 249, 210, 391, - 400, 579, 313, 216, 217, 218, 525, 526, 527, 528, - 620, 621, 625, 205, 463, 464, 465, 466, 293, 615, - 310, 469, 468, 332, 333, 380, 450, 541, 543, 554, - 558, 560, 562, 568, 571, 542, 544, 555, 559, 561, - 563, 569, 572, 531, 533, 535, 537, 550, 549, 546, - 574, 575, 552, 557, 536, 548, 553, 566, 573, 570, - 530, 534, 538, 547, 565, 564, 545, 556, 567, 551, - 539, 532, 540, 0, 196, 221, 369, 0, 455, 289, - 651, 619, 485, 614, 206, 223, 0, 263, 0, 0, - 0, 0, 0, 0, 2427, 0, 0, 2426, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 302, 303, 445, 446, 315, 316, 647, 648, 301, - 601, 634, 598, 646, 628, 439, 379, 0, 0, 382, - 282, 306, 321, 0, 618, 503, 227, 467, 291, 251, - 0, 0, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 397, 0, 377, 577, - 578, 317, 0, 0, 0, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, - 2374, 0, 0, 0, 0, 271, 0, 0, 0, 0, - 367, 268, 0, 0, 204, 506, 0, 431, 0, 203, - 0, 488, 253, 378, 375, 584, 283, 274, 270, 250, - 318, 386, 429, 519, 423, 0, 371, 0, 0, 498, - 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, - 248, 326, 202, 414, 499, 287, 0, 0, 0, 0, - 1962, 508, 194, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 238, 0, 0, 245, 0, 0, 0, 352, - 361, 360, 340, 341, 343, 345, 351, 358, 364, 337, - 346, 0, 0, 610, 0, 0, 0, 266, 322, 273, - 265, 581, 0, 0, 0, 0, 0, 0, 597, 0, - 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, - 403, 258, 0, 454, 0, 0, 0, 630, 0, 0, - 0, 0, 0, 0, 0, 366, 0, 331, 197, 225, - 0, 0, 413, 462, 474, 0, 0, 0, 254, 0, - 472, 427, 605, 233, 285, 459, 433, 470, 441, 288, - 0, 2372, 471, 373, 586, 451, 602, 631, 632, 264, - 407, 616, 523, 624, 649, 226, 261, 421, 507, 608, - 495, 398, 582, 583, 330, 494, 296, 201, 370, 637, - 224, 480, 372, 242, 231, 588, 613, 300, 252, 290, - 457, 644, 213, 518, 599, 239, 484, 0, 0, 652, - 247, 505, 611, 600, 215, 595, 504, 394, 327, 328, - 214, 0, 458, 269, 294, 0, 0, 259, 416, 590, - 591, 257, 653, 228, 623, 220, 0, 622, 409, 585, - 596, 395, 384, 219, 594, 393, 383, 335, 356, 357, - 281, 308, 448, 376, 449, 307, 309, 405, 404, 406, - 207, 609, 627, 0, 208, 0, 500, 612, 654, 453, - 212, 234, 235, 237, 0, 280, 284, 292, 295, 304, - 305, 314, 368, 420, 447, 443, 452, 0, 580, 603, - 617, 629, 635, 636, 638, 639, 640, 641, 642, 645, - 643, 408, 312, 496, 334, 374, 0, 0, 426, 473, - 240, 607, 497, 199, 0, 0, 0, 0, 255, 256, - 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 650, - 509, 515, 510, 511, 512, 513, 514, 0, 516, 0, - 0, 0, 0, 0, 399, 0, 592, 593, 673, 385, - 487, 604, 336, 350, 353, 342, 362, 0, 363, 338, - 339, 344, 347, 348, 349, 354, 355, 359, 365, 249, - 210, 391, 400, 579, 313, 216, 217, 218, 525, 526, - 527, 528, 620, 621, 625, 205, 463, 464, 465, 466, - 293, 615, 310, 469, 468, 332, 333, 380, 450, 541, - 543, 554, 558, 560, 562, 568, 571, 542, 544, 555, - 559, 561, 563, 569, 572, 531, 533, 535, 537, 550, - 549, 546, 574, 575, 552, 557, 536, 548, 553, 566, - 573, 570, 530, 534, 538, 547, 565, 564, 545, 556, - 567, 551, 539, 532, 540, 0, 196, 221, 369, 0, - 455, 289, 651, 619, 485, 614, 206, 223, 0, 263, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 200, 209, 222, 232, 236, 243, 262, 277, - 279, 286, 299, 311, 319, 320, 323, 329, 381, 387, - 388, 389, 390, 410, 411, 412, 415, 418, 419, 422, - 424, 425, 428, 432, 436, 437, 438, 440, 442, 444, - 456, 461, 475, 476, 477, 478, 479, 482, 483, 489, - 490, 491, 492, 493, 501, 502, 517, 587, 589, 606, - 626, 633, 481, 302, 303, 445, 446, 315, 316, 647, - 648, 301, 601, 634, 598, 646, 628, 439, 379, 0, - 0, 382, 282, 306, 321, 0, 618, 503, 227, 467, - 291, 251, 0, 0, 211, 246, 230, 260, 275, 278, - 325, 392, 401, 430, 435, 297, 272, 244, 460, 241, - 486, 520, 521, 522, 524, 396, 267, 434, 397, 0, - 377, 577, 578, 317, 0, 0, 0, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, - 0, 0, 367, 268, 0, 0, 204, 506, 0, 431, - 0, 203, 0, 488, 253, 378, 375, 584, 283, 274, - 270, 250, 318, 386, 429, 519, 423, 0, 371, 0, - 0, 498, 402, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 324, 248, 326, 202, 414, 499, 287, 0, 0, - 0, 0, 0, 508, 725, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 238, 0, 0, 245, 0, 0, - 0, 352, 361, 360, 340, 341, 343, 345, 351, 358, - 364, 337, 346, 0, 0, 610, 0, 0, 0, 266, - 322, 273, 265, 581, 0, 0, 0, 0, 0, 0, - 597, 0, 0, 229, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, - 0, 0, 0, 0, 0, 0, 0, 1093, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 298, 0, 403, 258, 0, 454, 0, 0, 0, 630, - 0, 0, 0, 0, 0, 0, 0, 366, 1099, 331, - 197, 225, 1097, 0, 413, 462, 474, 0, 0, 0, - 254, 0, 472, 427, 605, 233, 285, 459, 433, 470, - 441, 288, 0, 0, 471, 373, 586, 451, 602, 631, - 632, 264, 407, 616, 523, 624, 649, 226, 261, 421, - 507, 608, 495, 398, 582, 583, 330, 494, 296, 201, - 370, 637, 224, 480, 372, 242, 231, 588, 613, 300, - 252, 290, 457, 644, 213, 518, 599, 239, 484, 0, - 0, 652, 247, 505, 611, 600, 215, 595, 504, 394, - 327, 328, 214, 0, 458, 269, 294, 0, 0, 259, - 416, 590, 591, 257, 653, 228, 623, 220, 0, 622, - 409, 585, 596, 395, 384, 219, 594, 393, 383, 335, - 356, 357, 281, 308, 448, 376, 449, 307, 309, 405, - 404, 406, 207, 609, 627, 0, 208, 0, 500, 612, - 654, 453, 212, 234, 235, 237, 0, 280, 284, 292, - 295, 304, 305, 314, 368, 420, 447, 443, 452, 0, - 580, 603, 617, 629, 635, 636, 638, 639, 640, 641, - 642, 645, 643, 408, 312, 496, 334, 374, 0, 0, - 426, 473, 240, 607, 497, 199, 0, 0, 0, 0, - 255, 256, 0, 576, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 650, 509, 515, 510, 511, 512, 513, 514, 0, - 516, 0, 0, 0, 0, 0, 399, 0, 592, 593, - 673, 385, 487, 604, 336, 350, 353, 342, 362, 0, - 363, 338, 339, 344, 347, 348, 349, 354, 355, 359, - 365, 249, 210, 391, 400, 579, 313, 216, 217, 218, - 525, 526, 527, 528, 620, 621, 625, 205, 463, 464, - 465, 466, 293, 615, 310, 469, 468, 332, 333, 380, - 450, 541, 543, 554, 558, 560, 562, 568, 571, 542, - 544, 555, 559, 561, 563, 569, 572, 531, 533, 535, - 537, 550, 549, 546, 574, 575, 552, 557, 536, 548, - 553, 566, 573, 570, 530, 534, 538, 547, 565, 564, - 545, 556, 567, 551, 539, 532, 540, 0, 196, 221, - 369, 0, 455, 289, 651, 619, 485, 614, 206, 223, - 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 200, 209, 222, 232, 236, 243, - 262, 277, 279, 286, 299, 311, 319, 320, 323, 329, - 381, 387, 388, 389, 390, 410, 411, 412, 415, 418, - 419, 422, 424, 425, 428, 432, 436, 437, 438, 440, - 442, 444, 456, 461, 475, 476, 477, 478, 479, 482, - 483, 489, 490, 491, 492, 493, 501, 502, 517, 587, - 589, 606, 626, 633, 481, 302, 303, 445, 446, 315, - 316, 647, 648, 301, 601, 634, 598, 646, 628, 439, - 379, 0, 0, 382, 282, 306, 321, 0, 618, 503, - 227, 467, 291, 251, 0, 0, 211, 246, 230, 260, - 275, 278, 325, 392, 401, 430, 435, 297, 272, 244, - 460, 241, 486, 520, 521, 522, 524, 396, 267, 434, - 397, 0, 377, 577, 578, 317, 0, 0, 0, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 2374, 0, 0, 0, 0, 271, - 0, 0, 0, 0, 367, 268, 0, 0, 204, 506, - 0, 431, 0, 203, 0, 488, 253, 378, 375, 584, - 283, 274, 270, 250, 318, 386, 429, 519, 423, 0, - 371, 0, 0, 498, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 324, 248, 326, 202, 414, 499, 287, - 0, 0, 0, 0, 1962, 508, 194, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 238, 0, 0, 245, - 0, 0, 0, 352, 361, 360, 340, 341, 343, 345, - 351, 358, 364, 337, 346, 0, 0, 610, 0, 0, - 0, 266, 322, 273, 265, 581, 0, 0, 0, 0, - 0, 0, 597, 0, 0, 229, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 0, 403, 258, 0, 454, 0, 0, - 0, 630, 0, 0, 0, 0, 0, 0, 0, 366, - 0, 331, 197, 225, 0, 0, 413, 462, 474, 0, - 0, 0, 254, 0, 472, 427, 605, 233, 285, 459, - 433, 470, 441, 288, 0, 0, 471, 373, 586, 451, - 602, 631, 632, 264, 407, 616, 523, 624, 649, 226, - 261, 421, 507, 608, 495, 398, 582, 583, 330, 494, - 296, 201, 370, 637, 224, 480, 372, 242, 231, 588, - 613, 300, 252, 290, 457, 644, 213, 518, 599, 239, - 484, 0, 0, 652, 247, 505, 611, 600, 215, 595, - 504, 394, 327, 328, 214, 0, 458, 269, 294, 0, - 0, 259, 416, 590, 591, 257, 653, 228, 623, 220, - 0, 622, 409, 585, 596, 395, 384, 219, 594, 393, - 383, 335, 356, 357, 281, 308, 448, 376, 449, 307, - 309, 405, 404, 406, 207, 609, 627, 0, 208, 0, - 500, 612, 654, 453, 212, 234, 235, 237, 0, 280, - 284, 292, 295, 304, 305, 314, 368, 420, 447, 443, - 452, 0, 580, 603, 617, 629, 635, 636, 638, 639, - 640, 641, 642, 645, 643, 408, 312, 496, 334, 374, - 0, 0, 426, 473, 240, 607, 497, 199, 0, 0, - 0, 0, 255, 256, 0, 576, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 650, 509, 515, 510, 511, 512, 513, - 514, 0, 516, 0, 0, 0, 0, 0, 399, 0, - 592, 593, 673, 385, 487, 604, 336, 350, 353, 342, - 362, 0, 363, 338, 339, 344, 347, 348, 349, 354, - 355, 359, 365, 249, 210, 391, 400, 579, 313, 216, - 217, 218, 525, 526, 527, 528, 620, 621, 625, 205, - 463, 464, 465, 466, 293, 615, 310, 469, 468, 332, - 333, 380, 450, 541, 543, 554, 558, 560, 562, 568, - 571, 542, 544, 555, 559, 561, 563, 569, 572, 531, - 533, 535, 537, 550, 549, 546, 574, 575, 552, 557, - 536, 548, 553, 566, 573, 570, 530, 534, 538, 547, - 565, 564, 545, 556, 567, 551, 539, 532, 540, 0, - 196, 221, 369, 0, 455, 289, 651, 619, 485, 614, - 206, 223, 0, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 198, 200, 209, 222, 232, - 236, 243, 262, 277, 279, 286, 299, 311, 319, 320, - 323, 329, 381, 387, 388, 389, 390, 410, 411, 412, - 415, 418, 419, 422, 424, 425, 428, 432, 436, 437, - 438, 440, 442, 444, 456, 461, 475, 476, 477, 478, - 479, 482, 483, 489, 490, 491, 492, 493, 501, 502, - 517, 587, 589, 606, 626, 633, 481, 302, 303, 445, - 446, 315, 316, 647, 648, 301, 601, 634, 598, 646, - 628, 439, 379, 0, 0, 382, 282, 306, 321, 0, - 618, 503, 227, 467, 291, 251, 0, 0, 211, 246, - 230, 260, 275, 278, 325, 392, 401, 430, 435, 297, - 272, 244, 460, 241, 486, 520, 521, 522, 524, 396, - 267, 434, 397, 0, 377, 577, 578, 317, 0, 0, - 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, - 0, 271, 0, 0, 0, 0, 367, 268, 0, 0, - 204, 506, 0, 431, 0, 203, 0, 488, 253, 378, - 375, 584, 283, 274, 270, 250, 318, 386, 429, 519, - 423, 0, 371, 0, 0, 498, 402, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 324, 248, 326, 202, 414, - 499, 287, 0, 0, 0, 1754, 0, 508, 725, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, - 0, 245, 0, 0, 0, 352, 361, 360, 340, 341, - 343, 345, 351, 358, 364, 337, 346, 0, 0, 610, - 0, 0, 0, 266, 322, 273, 265, 581, 0, 0, - 0, 0, 0, 0, 597, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 298, 0, 403, 258, 0, 454, - 0, 0, 0, 630, 0, 0, 0, 3729, 0, 0, - 0, 366, 0, 331, 197, 225, 0, 0, 413, 462, - 474, 0, 0, 0, 254, 0, 472, 427, 605, 233, - 285, 459, 433, 470, 441, 288, 0, 0, 471, 373, - 586, 451, 602, 631, 632, 264, 407, 616, 523, 624, - 649, 226, 261, 421, 507, 608, 495, 398, 582, 583, - 330, 494, 296, 201, 370, 637, 224, 480, 372, 242, - 231, 588, 613, 300, 252, 290, 457, 644, 213, 518, - 599, 239, 484, 0, 0, 652, 247, 505, 611, 600, - 215, 595, 504, 394, 327, 328, 214, 0, 458, 269, - 294, 0, 0, 259, 416, 590, 591, 257, 653, 228, - 623, 220, 0, 622, 409, 585, 596, 395, 384, 219, - 594, 393, 383, 335, 356, 357, 281, 308, 448, 376, - 449, 307, 309, 405, 404, 406, 207, 609, 627, 0, - 208, 0, 500, 612, 654, 453, 212, 234, 235, 237, - 0, 280, 284, 292, 295, 304, 305, 314, 368, 420, - 447, 443, 452, 0, 580, 603, 617, 629, 635, 636, - 638, 639, 640, 641, 642, 645, 643, 408, 312, 496, - 334, 374, 0, 0, 426, 473, 240, 607, 497, 199, - 0, 0, 0, 0, 255, 256, 0, 576, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 650, 509, 515, 510, 511, - 512, 513, 514, 0, 516, 0, 0, 0, 0, 0, - 399, 0, 592, 593, 673, 385, 487, 604, 336, 350, - 353, 342, 362, 0, 363, 338, 339, 344, 347, 348, - 349, 354, 355, 359, 365, 249, 210, 391, 400, 579, - 313, 216, 217, 218, 525, 526, 527, 528, 620, 621, - 625, 205, 463, 464, 465, 466, 293, 615, 310, 469, - 468, 332, 333, 380, 450, 541, 543, 554, 558, 560, - 562, 568, 571, 542, 544, 555, 559, 561, 563, 569, - 572, 531, 533, 535, 537, 550, 549, 546, 574, 575, - 552, 557, 536, 548, 553, 566, 573, 570, 530, 534, - 538, 547, 565, 564, 545, 556, 567, 551, 539, 532, - 540, 0, 196, 221, 369, 0, 455, 289, 651, 619, - 485, 614, 206, 223, 0, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 200, 209, - 222, 232, 236, 243, 262, 277, 279, 286, 299, 311, - 319, 320, 323, 329, 381, 387, 388, 389, 390, 410, - 411, 412, 415, 418, 419, 422, 424, 425, 428, 432, - 436, 437, 438, 440, 442, 444, 456, 461, 475, 476, - 477, 478, 479, 482, 483, 489, 490, 491, 492, 493, - 501, 502, 517, 587, 589, 606, 626, 633, 481, 302, - 303, 445, 446, 315, 316, 647, 648, 301, 601, 634, - 598, 646, 628, 439, 379, 0, 0, 382, 282, 306, - 321, 0, 618, 503, 227, 467, 291, 251, 0, 0, - 211, 246, 230, 260, 275, 278, 325, 392, 401, 430, - 435, 297, 272, 244, 460, 241, 486, 520, 521, 522, - 524, 396, 267, 434, 397, 0, 377, 577, 578, 317, - 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, - 0, 0, 0, 271, 0, 0, 0, 0, 367, 268, - 0, 0, 204, 506, 0, 431, 0, 203, 0, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 0, 371, 0, 0, 498, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 248, 326, - 202, 414, 499, 287, 0, 0, 0, 0, 2133, 508, - 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 0, 245, 0, 0, 0, 352, 361, 360, - 340, 341, 343, 345, 351, 358, 364, 337, 346, 0, - 0, 610, 0, 0, 0, 266, 322, 273, 265, 581, - 0, 0, 0, 0, 0, 0, 597, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2134, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 298, 0, 403, 258, - 0, 454, 0, 0, 0, 630, 0, 0, 0, 0, - 0, 0, 0, 366, 0, 331, 197, 225, 0, 0, - 413, 462, 474, 0, 0, 0, 254, 0, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 0, 0, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 590, 591, 257, - 653, 228, 623, 220, 0, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 356, 357, 281, 308, - 448, 376, 449, 307, 309, 405, 404, 406, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 0, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 0, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 0, 0, 426, 473, 240, 607, - 497, 199, 0, 0, 0, 0, 255, 256, 0, 576, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 0, 0, 0, - 0, 0, 399, 0, 592, 593, 673, 385, 487, 604, - 336, 350, 353, 342, 362, 0, 363, 338, 339, 344, - 347, 348, 349, 354, 355, 359, 365, 249, 210, 391, - 400, 579, 313, 216, 217, 218, 525, 526, 527, 528, - 620, 621, 625, 205, 463, 464, 465, 466, 293, 615, - 310, 469, 468, 332, 333, 380, 450, 541, 543, 554, - 558, 560, 562, 568, 571, 542, 544, 555, 559, 561, - 563, 569, 572, 531, 533, 535, 537, 550, 549, 546, - 574, 575, 552, 557, 536, 548, 553, 566, 573, 570, - 530, 534, 538, 547, 565, 564, 545, 556, 567, 551, - 539, 532, 540, 0, 196, 221, 369, 0, 455, 289, - 651, 619, 485, 614, 206, 223, 0, 263, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 302, 303, 445, 446, 315, 316, 647, 648, 301, - 601, 634, 598, 646, 628, 439, 379, 0, 0, 382, - 282, 306, 321, 0, 618, 503, 227, 467, 291, 251, - 0, 0, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 397, 0, 377, 577, - 578, 317, 0, 0, 0, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, - 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, - 367, 268, 0, 0, 204, 506, 0, 431, 0, 203, - 0, 488, 253, 378, 375, 584, 283, 274, 270, 250, - 318, 386, 429, 519, 423, 0, 371, 0, 0, 498, - 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, - 248, 326, 202, 414, 499, 287, 0, 0, 0, 0, - 2881, 508, 725, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 238, 0, 0, 245, 0, 0, 0, 352, - 361, 360, 340, 341, 343, 345, 351, 358, 364, 337, - 346, 0, 0, 610, 0, 0, 0, 266, 322, 273, - 265, 581, 0, 0, 0, 0, 0, 0, 597, 0, - 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2882, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, - 403, 258, 0, 454, 0, 0, 0, 630, 0, 0, - 0, 0, 0, 0, 0, 366, 0, 331, 197, 225, - 0, 0, 413, 462, 474, 0, 0, 0, 254, 0, - 472, 427, 605, 233, 285, 459, 433, 470, 441, 288, - 0, 0, 471, 373, 586, 451, 602, 631, 632, 264, - 407, 616, 523, 624, 649, 226, 261, 421, 507, 608, - 495, 398, 582, 583, 330, 494, 296, 201, 370, 637, - 224, 480, 372, 242, 231, 588, 613, 300, 252, 290, - 457, 644, 213, 518, 599, 239, 484, 0, 0, 652, - 247, 505, 611, 600, 215, 595, 504, 394, 327, 328, - 214, 0, 458, 269, 294, 0, 0, 259, 416, 590, - 591, 257, 653, 228, 623, 220, 0, 622, 409, 585, - 596, 395, 384, 219, 594, 393, 383, 335, 356, 357, - 281, 308, 448, 376, 449, 307, 309, 405, 404, 406, - 207, 609, 627, 0, 208, 0, 500, 612, 654, 453, - 212, 234, 235, 237, 0, 280, 284, 292, 295, 304, - 305, 314, 368, 420, 447, 443, 452, 0, 580, 603, - 617, 629, 635, 636, 638, 639, 640, 641, 642, 645, - 643, 408, 312, 496, 334, 374, 0, 0, 426, 473, - 240, 607, 497, 199, 0, 0, 0, 0, 255, 256, - 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 650, - 509, 515, 510, 511, 512, 513, 514, 0, 516, 0, - 0, 0, 0, 0, 399, 0, 592, 593, 673, 385, - 487, 604, 336, 350, 353, 342, 362, 0, 363, 338, - 339, 344, 347, 348, 349, 354, 355, 359, 365, 249, - 210, 391, 400, 579, 313, 216, 217, 218, 525, 526, - 527, 528, 620, 621, 625, 205, 463, 464, 465, 466, - 293, 615, 310, 469, 468, 332, 333, 380, 450, 541, - 543, 554, 558, 560, 562, 568, 571, 542, 544, 555, - 559, 561, 563, 569, 572, 531, 533, 535, 537, 550, - 549, 546, 574, 575, 552, 557, 536, 548, 553, 566, - 573, 570, 530, 534, 538, 547, 565, 564, 545, 556, - 567, 551, 539, 532, 540, 0, 196, 221, 369, 0, - 455, 289, 651, 619, 485, 614, 206, 223, 0, 263, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 200, 209, 222, 232, 236, 243, 262, 277, - 279, 286, 299, 311, 319, 320, 323, 329, 381, 387, - 388, 389, 390, 410, 411, 412, 415, 418, 419, 422, - 424, 425, 428, 432, 436, 437, 438, 440, 442, 444, - 456, 461, 475, 476, 477, 478, 479, 482, 483, 489, - 490, 491, 492, 493, 501, 502, 517, 587, 589, 606, - 626, 633, 481, 302, 303, 445, 446, 315, 316, 647, - 648, 301, 601, 634, 598, 646, 628, 439, 379, 0, - 0, 382, 282, 306, 321, 0, 618, 503, 227, 467, - 291, 251, 0, 0, 211, 246, 230, 260, 275, 278, - 325, 392, 401, 430, 435, 297, 272, 244, 460, 241, - 486, 520, 521, 522, 524, 396, 267, 434, 397, 0, - 377, 577, 578, 317, 0, 0, 0, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, - 0, 0, 367, 268, 0, 0, 204, 506, 0, 431, - 0, 203, 0, 488, 253, 378, 375, 584, 283, 274, - 270, 250, 318, 386, 429, 519, 423, 0, 371, 0, - 0, 498, 402, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 324, 248, 326, 202, 414, 499, 287, 0, 0, - 0, 0, 0, 508, 725, 0, 0, 0, 0, 2866, - 0, 0, 0, 0, 238, 0, 0, 245, 2867, 0, - 0, 352, 361, 360, 340, 341, 343, 345, 351, 358, - 364, 337, 346, 0, 0, 610, 0, 0, 0, 266, - 322, 273, 265, 581, 0, 0, 0, 0, 0, 0, - 597, 0, 0, 229, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 298, 0, 403, 258, 0, 454, 0, 0, 0, 630, - 0, 0, 0, 0, 0, 0, 0, 366, 0, 331, - 197, 225, 0, 0, 413, 462, 474, 0, 0, 0, - 254, 0, 472, 427, 605, 233, 285, 459, 433, 470, - 441, 288, 0, 0, 471, 373, 586, 451, 602, 631, - 632, 264, 407, 616, 523, 624, 649, 226, 261, 421, - 507, 608, 495, 398, 582, 583, 330, 494, 296, 201, - 370, 637, 224, 480, 372, 242, 231, 588, 613, 300, - 252, 290, 457, 644, 213, 518, 599, 239, 484, 0, - 0, 652, 247, 505, 611, 600, 215, 595, 504, 394, - 327, 328, 214, 0, 458, 269, 294, 0, 0, 259, - 416, 590, 591, 257, 653, 228, 623, 220, 0, 622, - 409, 585, 596, 395, 384, 219, 594, 393, 383, 335, - 356, 357, 281, 308, 448, 376, 449, 307, 309, 405, - 404, 406, 207, 609, 627, 0, 208, 0, 500, 612, - 654, 453, 212, 234, 235, 237, 0, 280, 284, 292, - 295, 304, 305, 314, 368, 420, 447, 443, 452, 0, - 580, 603, 617, 629, 635, 636, 638, 639, 640, 641, - 642, 645, 643, 408, 312, 496, 334, 374, 0, 0, - 426, 473, 240, 607, 497, 199, 0, 0, 0, 0, - 255, 256, 0, 576, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 650, 509, 515, 510, 511, 512, 513, 514, 0, - 516, 0, 0, 0, 0, 0, 399, 0, 592, 593, - 673, 385, 487, 604, 336, 350, 353, 342, 362, 0, - 363, 338, 339, 344, 347, 348, 349, 354, 355, 359, - 365, 249, 210, 391, 400, 579, 313, 216, 217, 218, - 525, 526, 527, 528, 620, 621, 625, 205, 463, 464, - 465, 466, 293, 615, 310, 469, 468, 332, 333, 380, - 450, 541, 543, 554, 558, 560, 562, 568, 571, 542, - 544, 555, 559, 561, 563, 569, 572, 531, 533, 535, - 537, 550, 549, 546, 574, 575, 552, 557, 536, 548, - 553, 566, 573, 570, 530, 534, 538, 547, 565, 564, - 545, 556, 567, 551, 539, 532, 540, 0, 196, 221, - 369, 0, 455, 289, 651, 619, 485, 614, 206, 223, - 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 200, 209, 222, 232, 236, 243, - 262, 277, 279, 286, 299, 311, 319, 320, 323, 329, - 381, 387, 388, 389, 390, 410, 411, 412, 415, 418, - 419, 422, 424, 425, 428, 432, 436, 437, 438, 440, - 442, 444, 456, 461, 475, 476, 477, 478, 479, 482, - 483, 489, 490, 491, 492, 493, 501, 502, 517, 587, - 589, 606, 626, 633, 481, 302, 303, 445, 446, 315, - 316, 647, 648, 301, 601, 634, 598, 646, 628, 439, - 379, 0, 0, 382, 282, 306, 321, 0, 618, 503, - 227, 467, 291, 251, 0, 0, 211, 246, 230, 260, - 275, 278, 325, 392, 401, 430, 435, 297, 272, 244, - 460, 241, 486, 520, 521, 522, 524, 396, 267, 434, - 397, 0, 377, 577, 578, 317, 0, 0, 0, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 0, 0, 0, 0, 0, 271, - 1800, 0, 0, 0, 367, 268, 0, 0, 204, 506, - 0, 431, 0, 203, 0, 488, 253, 378, 375, 584, - 283, 274, 270, 250, 318, 386, 429, 519, 423, 0, - 371, 0, 0, 498, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 324, 248, 326, 202, 414, 499, 287, - 0, 0, 0, 0, 1799, 508, 725, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 238, 0, 0, 245, - 0, 0, 0, 352, 361, 360, 340, 341, 343, 345, - 351, 358, 364, 337, 346, 0, 0, 610, 0, 0, - 0, 266, 322, 273, 265, 581, 0, 0, 0, 0, - 0, 0, 597, 0, 0, 229, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 0, 403, 258, 0, 454, 0, 0, - 0, 630, 0, 0, 0, 0, 0, 0, 0, 366, - 0, 331, 197, 225, 0, 0, 413, 462, 474, 0, - 0, 0, 254, 0, 472, 427, 605, 233, 285, 459, - 433, 470, 441, 288, 0, 0, 471, 373, 586, 451, - 602, 631, 632, 264, 407, 616, 523, 624, 649, 226, - 261, 421, 507, 608, 495, 398, 582, 583, 330, 494, - 296, 201, 370, 637, 224, 480, 372, 242, 231, 588, - 613, 300, 252, 290, 457, 644, 213, 518, 599, 239, - 484, 0, 0, 652, 247, 505, 611, 600, 215, 595, - 504, 394, 327, 328, 214, 0, 458, 269, 294, 0, - 0, 259, 416, 590, 591, 257, 653, 228, 623, 220, - 0, 622, 409, 585, 596, 395, 384, 219, 594, 393, - 383, 335, 356, 357, 281, 308, 448, 376, 449, 307, - 309, 405, 404, 406, 207, 609, 627, 0, 208, 0, - 500, 612, 654, 453, 212, 234, 235, 237, 0, 280, - 284, 292, 295, 304, 305, 314, 368, 420, 447, 443, - 452, 0, 580, 603, 617, 629, 635, 636, 638, 639, - 640, 641, 642, 645, 643, 408, 312, 496, 334, 374, - 0, 0, 426, 473, 240, 607, 497, 199, 0, 0, - 0, 0, 255, 256, 0, 576, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 650, 509, 515, 510, 511, 512, 513, - 514, 0, 516, 0, 0, 0, 0, 0, 399, 0, - 592, 593, 673, 385, 487, 604, 336, 350, 353, 342, - 362, 0, 363, 338, 339, 344, 347, 348, 349, 354, - 355, 359, 365, 249, 210, 391, 400, 579, 313, 216, - 217, 218, 525, 526, 527, 528, 620, 621, 625, 205, - 463, 464, 465, 466, 293, 615, 310, 469, 468, 332, - 333, 380, 450, 541, 543, 554, 558, 560, 562, 568, - 571, 542, 544, 555, 559, 561, 563, 569, 572, 531, - 533, 535, 537, 550, 549, 546, 574, 575, 552, 557, - 536, 548, 553, 566, 573, 570, 530, 534, 538, 547, - 565, 564, 545, 556, 567, 551, 539, 532, 540, 0, - 196, 221, 369, 0, 455, 289, 651, 619, 485, 614, - 206, 223, 0, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 198, 200, 209, 222, 232, - 236, 243, 262, 277, 279, 286, 299, 311, 319, 320, - 323, 329, 381, 387, 388, 389, 390, 410, 411, 412, - 415, 418, 419, 422, 424, 425, 428, 432, 436, 437, - 438, 440, 442, 444, 456, 461, 475, 476, 477, 478, - 479, 482, 483, 489, 490, 491, 492, 493, 501, 502, - 517, 587, 589, 606, 626, 633, 481, 302, 303, 445, - 446, 315, 316, 647, 648, 301, 601, 634, 598, 646, - 628, 439, 379, 0, 0, 382, 282, 306, 321, 0, - 618, 503, 227, 467, 291, 251, 0, 0, 211, 246, - 230, 260, 275, 278, 325, 392, 401, 430, 435, 297, - 272, 244, 460, 241, 486, 520, 521, 522, 524, 396, - 267, 434, 397, 0, 377, 577, 578, 317, 0, 0, - 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, - 0, 271, 0, 0, 0, 0, 367, 268, 0, 0, - 204, 506, 0, 431, 0, 203, 0, 488, 253, 378, - 375, 584, 283, 274, 270, 250, 318, 386, 429, 519, - 423, 0, 371, 0, 0, 498, 402, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 324, 248, 326, 202, 414, - 499, 287, 0, 0, 0, 0, 0, 508, 727, 728, - 729, 0, 0, 0, 0, 0, 0, 0, 238, 0, - 0, 245, 0, 0, 0, 352, 361, 360, 340, 341, - 343, 345, 351, 358, 364, 337, 346, 0, 0, 610, - 0, 0, 0, 266, 322, 273, 265, 581, 0, 0, - 0, 0, 0, 0, 597, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 298, 0, 403, 258, 0, 454, - 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, - 0, 366, 0, 331, 197, 225, 0, 0, 413, 462, - 474, 0, 0, 0, 254, 0, 472, 427, 605, 233, - 285, 459, 433, 470, 441, 288, 0, 0, 471, 373, - 586, 451, 602, 631, 632, 264, 407, 616, 523, 624, - 649, 226, 261, 421, 507, 608, 495, 398, 582, 583, - 330, 494, 296, 201, 370, 637, 224, 480, 372, 242, - 231, 588, 613, 300, 252, 290, 457, 644, 213, 518, - 599, 239, 484, 0, 0, 652, 247, 505, 611, 600, - 215, 595, 504, 394, 327, 328, 214, 0, 458, 269, - 294, 0, 0, 259, 416, 590, 591, 257, 653, 228, - 623, 220, 0, 622, 409, 585, 596, 395, 384, 219, - 594, 393, 383, 335, 356, 357, 281, 308, 448, 376, - 449, 307, 309, 405, 404, 406, 207, 609, 627, 0, - 208, 0, 500, 612, 654, 453, 212, 234, 235, 237, - 0, 280, 284, 292, 295, 304, 305, 314, 368, 420, - 447, 443, 452, 0, 580, 603, 617, 629, 635, 636, - 638, 639, 640, 641, 642, 645, 643, 408, 312, 496, - 334, 374, 0, 0, 426, 473, 240, 607, 497, 199, - 0, 0, 0, 0, 255, 256, 0, 576, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 650, 509, 515, 510, 511, - 512, 513, 514, 0, 516, 0, 0, 0, 0, 0, - 399, 0, 592, 593, 673, 385, 487, 604, 336, 350, - 353, 342, 362, 0, 363, 338, 339, 344, 347, 348, - 349, 354, 355, 359, 365, 249, 210, 391, 400, 579, - 313, 216, 217, 218, 525, 526, 527, 528, 620, 621, - 625, 205, 463, 464, 465, 466, 293, 615, 310, 469, - 468, 332, 333, 380, 450, 541, 543, 554, 558, 560, - 562, 568, 571, 542, 544, 555, 559, 561, 563, 569, - 572, 531, 533, 535, 537, 550, 549, 546, 574, 575, - 552, 557, 536, 548, 553, 566, 573, 570, 530, 534, - 538, 547, 565, 564, 545, 556, 567, 551, 539, 532, - 540, 0, 196, 221, 369, 0, 455, 289, 651, 619, - 485, 614, 206, 223, 0, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 200, 209, - 222, 232, 236, 243, 262, 277, 279, 286, 299, 311, - 319, 320, 323, 329, 381, 387, 388, 389, 390, 410, - 411, 412, 415, 418, 419, 422, 424, 425, 428, 432, - 436, 437, 438, 440, 442, 444, 456, 461, 475, 476, - 477, 478, 479, 482, 483, 489, 490, 491, 492, 493, - 501, 502, 517, 587, 589, 606, 626, 633, 481, 302, - 303, 445, 446, 315, 316, 647, 648, 301, 601, 634, - 598, 646, 628, 439, 379, 0, 0, 382, 282, 306, - 321, 0, 618, 503, 227, 467, 291, 251, 0, 0, - 211, 246, 230, 260, 275, 278, 325, 392, 401, 430, - 435, 297, 272, 244, 460, 241, 486, 520, 521, 522, - 524, 396, 267, 434, 397, 0, 377, 577, 578, 317, - 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, - 0, 0, 0, 271, 0, 0, 0, 0, 367, 268, - 0, 0, 204, 506, 0, 431, 0, 203, 0, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 0, 371, 0, 0, 498, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 248, 326, - 202, 414, 499, 287, 0, 0, 0, 0, 0, 508, - 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 0, 245, 0, 0, 0, 352, 361, 360, - 340, 341, 343, 345, 351, 358, 364, 337, 346, 0, - 0, 610, 0, 0, 0, 266, 322, 273, 265, 581, - 0, 0, 0, 0, 0, 0, 597, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 298, 0, 403, 258, - 0, 454, 0, 0, 0, 630, 0, 0, 0, 4073, - 0, 0, 0, 366, 0, 331, 197, 225, 0, 0, - 413, 462, 474, 0, 0, 0, 254, 0, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 0, 0, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 590, 591, 257, - 653, 228, 623, 220, 0, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 356, 357, 281, 308, - 448, 376, 449, 307, 309, 405, 404, 406, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 0, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 0, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 0, 0, 426, 473, 240, 607, - 497, 199, 0, 0, 0, 0, 255, 256, 0, 576, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 0, 0, 0, - 0, 0, 399, 0, 592, 593, 673, 385, 487, 604, - 336, 350, 353, 342, 362, 0, 363, 338, 339, 344, - 347, 348, 349, 354, 355, 359, 365, 249, 210, 391, - 400, 579, 313, 216, 217, 218, 525, 526, 527, 528, - 620, 621, 625, 205, 463, 464, 465, 466, 293, 615, - 310, 469, 468, 332, 333, 380, 450, 541, 543, 554, - 558, 560, 562, 568, 571, 542, 544, 555, 559, 561, - 563, 569, 572, 531, 533, 535, 537, 550, 549, 546, - 574, 575, 552, 557, 536, 548, 553, 566, 573, 570, - 530, 534, 538, 547, 565, 564, 545, 556, 567, 551, - 539, 532, 540, 0, 196, 221, 369, 0, 455, 289, - 651, 619, 485, 614, 206, 223, 0, 263, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 302, 303, 445, 446, 315, 316, 647, 648, 301, - 601, 634, 598, 646, 628, 439, 379, 0, 0, 382, - 282, 306, 321, 0, 618, 503, 227, 467, 291, 251, - 0, 0, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 397, 0, 377, 577, - 578, 317, 0, 0, 0, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, - 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, - 367, 268, 0, 0, 204, 506, 0, 431, 0, 203, - 0, 488, 253, 378, 375, 584, 283, 274, 270, 250, - 318, 386, 429, 519, 423, 0, 371, 0, 0, 498, - 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, - 248, 326, 202, 414, 499, 287, 0, 0, 0, 0, - 1962, 508, 194, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 238, 0, 0, 245, 0, 0, 0, 352, - 361, 360, 340, 341, 343, 345, 351, 358, 364, 337, - 346, 0, 0, 610, 0, 0, 0, 266, 322, 273, - 265, 581, 0, 0, 0, 0, 0, 0, 597, 0, - 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, - 403, 258, 0, 454, 0, 0, 0, 630, 0, 0, - 0, 0, 0, 0, 0, 366, 0, 331, 197, 225, - 0, 0, 413, 462, 474, 0, 0, 0, 254, 0, - 472, 427, 605, 233, 285, 459, 433, 470, 441, 288, - 0, 0, 471, 373, 586, 451, 602, 631, 632, 264, - 407, 616, 523, 624, 649, 226, 261, 421, 507, 608, - 495, 398, 582, 583, 330, 494, 296, 201, 370, 637, - 224, 480, 372, 242, 231, 588, 613, 300, 252, 290, - 457, 644, 213, 518, 599, 239, 484, 0, 0, 652, - 247, 505, 611, 600, 215, 595, 504, 394, 327, 328, - 214, 0, 458, 269, 294, 0, 0, 259, 416, 590, - 591, 257, 653, 228, 623, 220, 0, 622, 409, 585, - 596, 395, 384, 219, 594, 393, 383, 335, 356, 357, - 281, 308, 448, 376, 449, 307, 309, 405, 404, 406, - 207, 609, 627, 0, 208, 0, 500, 612, 654, 453, - 212, 234, 235, 237, 0, 280, 284, 292, 295, 304, - 305, 314, 368, 420, 447, 443, 452, 0, 580, 603, - 617, 629, 635, 636, 638, 639, 640, 641, 642, 645, - 643, 408, 312, 496, 334, 374, 0, 0, 426, 473, - 240, 607, 497, 199, 0, 0, 0, 0, 255, 256, - 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 650, - 509, 515, 510, 511, 512, 513, 514, 0, 516, 0, - 0, 0, 0, 0, 399, 0, 592, 593, 673, 385, - 487, 604, 336, 350, 353, 342, 362, 0, 363, 338, - 339, 344, 347, 348, 349, 354, 355, 359, 365, 249, - 210, 391, 400, 579, 313, 216, 217, 218, 525, 526, - 527, 528, 620, 621, 625, 205, 463, 464, 465, 466, - 293, 615, 310, 469, 468, 332, 333, 380, 450, 541, - 543, 554, 558, 560, 562, 568, 571, 542, 544, 555, - 559, 561, 563, 569, 572, 531, 533, 535, 537, 550, - 549, 546, 574, 575, 552, 557, 536, 548, 553, 566, - 573, 570, 530, 534, 538, 547, 565, 564, 545, 556, - 567, 551, 539, 532, 540, 0, 196, 221, 369, 0, - 455, 289, 651, 619, 485, 614, 206, 223, 0, 263, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 200, 209, 222, 232, 236, 243, 262, 277, - 279, 286, 299, 311, 319, 320, 323, 329, 381, 387, - 388, 389, 390, 410, 411, 412, 415, 418, 419, 422, - 424, 425, 428, 432, 436, 437, 438, 440, 442, 444, - 456, 461, 475, 476, 477, 478, 479, 482, 483, 489, - 490, 491, 492, 493, 501, 502, 517, 587, 589, 606, - 626, 633, 481, 302, 303, 445, 446, 315, 316, 647, - 648, 301, 601, 634, 598, 646, 628, 439, 379, 0, - 0, 382, 282, 306, 321, 0, 618, 503, 227, 467, - 291, 251, 0, 0, 211, 246, 230, 260, 275, 278, - 325, 392, 401, 430, 435, 297, 272, 244, 460, 241, - 486, 520, 521, 522, 524, 396, 267, 434, 397, 0, - 377, 577, 578, 317, 0, 0, 0, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, - 0, 0, 367, 268, 0, 0, 204, 506, 0, 431, - 0, 203, 0, 488, 253, 378, 375, 584, 283, 274, - 270, 250, 318, 386, 429, 519, 423, 0, 371, 0, - 0, 498, 402, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 324, 248, 326, 202, 414, 499, 287, 0, 0, - 0, 0, 0, 508, 725, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 238, 0, 0, 245, 0, 0, - 0, 352, 361, 360, 340, 341, 343, 345, 351, 358, - 364, 337, 346, 0, 0, 610, 0, 0, 0, 266, - 322, 273, 265, 581, 0, 0, 0, 0, 0, 0, - 597, 0, 0, 229, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 298, 0, 403, 258, 0, 454, 0, 0, 0, 630, - 0, 0, 0, 3729, 0, 0, 0, 366, 0, 331, - 197, 225, 0, 0, 413, 462, 474, 0, 0, 0, - 254, 0, 472, 427, 605, 233, 285, 459, 433, 470, - 441, 288, 0, 0, 471, 373, 586, 451, 602, 631, - 632, 264, 407, 616, 523, 624, 649, 226, 261, 421, - 507, 608, 495, 398, 582, 583, 330, 494, 296, 201, - 370, 637, 224, 480, 372, 242, 231, 588, 613, 300, - 252, 290, 457, 644, 213, 518, 599, 239, 484, 0, - 0, 652, 247, 505, 611, 600, 215, 595, 504, 394, - 327, 328, 214, 0, 458, 269, 294, 0, 0, 259, - 416, 590, 591, 257, 653, 228, 623, 220, 0, 622, - 409, 585, 596, 395, 384, 219, 594, 393, 383, 335, - 356, 357, 281, 308, 448, 376, 449, 307, 309, 405, - 404, 406, 207, 609, 627, 0, 208, 0, 500, 612, - 654, 453, 212, 234, 235, 237, 0, 280, 284, 292, - 295, 304, 305, 314, 368, 420, 447, 443, 452, 0, - 580, 603, 617, 629, 635, 636, 638, 639, 640, 641, - 642, 645, 643, 408, 312, 496, 334, 374, 0, 0, - 426, 473, 240, 607, 497, 199, 0, 0, 0, 0, - 255, 256, 0, 576, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 650, 509, 515, 510, 511, 512, 513, 514, 0, - 516, 0, 0, 0, 0, 0, 399, 0, 592, 593, - 673, 385, 487, 604, 336, 350, 353, 342, 362, 0, - 363, 338, 339, 344, 347, 348, 349, 354, 355, 359, - 365, 249, 210, 391, 400, 579, 313, 216, 217, 218, - 525, 526, 527, 528, 620, 621, 625, 205, 463, 464, - 465, 466, 293, 615, 310, 469, 468, 332, 333, 380, - 450, 541, 543, 554, 558, 560, 562, 568, 571, 542, - 544, 555, 559, 561, 563, 569, 572, 531, 533, 535, - 537, 550, 549, 546, 574, 575, 552, 557, 536, 548, - 553, 566, 573, 570, 530, 534, 538, 547, 565, 564, - 545, 556, 567, 551, 539, 532, 540, 0, 196, 221, - 369, 0, 455, 289, 651, 619, 485, 614, 206, 223, - 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 200, 209, 222, 232, 236, 243, - 262, 277, 279, 286, 299, 311, 319, 320, 323, 329, - 381, 387, 388, 389, 390, 410, 411, 412, 415, 418, - 419, 422, 424, 425, 428, 432, 436, 437, 438, 440, - 442, 444, 456, 461, 475, 476, 477, 478, 479, 482, - 483, 489, 490, 491, 492, 493, 501, 502, 517, 587, - 589, 606, 626, 633, 481, 302, 303, 445, 446, 315, - 316, 647, 648, 301, 601, 634, 598, 646, 628, 439, - 379, 0, 0, 382, 282, 306, 321, 0, 618, 503, - 227, 467, 291, 251, 0, 0, 211, 246, 230, 260, - 275, 278, 325, 392, 401, 430, 435, 297, 272, 244, - 460, 241, 486, 520, 521, 522, 524, 396, 267, 434, - 397, 0, 377, 577, 578, 317, 0, 0, 0, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 0, 0, 0, 0, 0, 271, - 0, 0, 0, 0, 367, 268, 0, 0, 204, 506, - 0, 431, 0, 203, 0, 488, 253, 378, 375, 584, - 283, 274, 270, 250, 318, 386, 429, 519, 423, 0, - 371, 0, 0, 498, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 324, 248, 326, 202, 414, 499, 287, - 0, 95, 0, 0, 0, 508, 725, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 238, 0, 0, 245, - 0, 0, 0, 352, 361, 360, 340, 341, 343, 345, - 351, 358, 364, 337, 346, 0, 0, 610, 0, 0, - 0, 266, 322, 273, 265, 581, 0, 0, 0, 0, - 0, 0, 597, 0, 0, 229, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 0, 403, 258, 0, 454, 0, 0, - 0, 630, 0, 0, 0, 0, 0, 0, 0, 366, - 0, 331, 197, 225, 0, 0, 413, 462, 474, 0, - 0, 0, 254, 0, 472, 427, 605, 233, 285, 459, - 433, 470, 441, 288, 0, 0, 471, 373, 586, 451, - 602, 631, 632, 264, 407, 616, 523, 624, 649, 226, - 261, 421, 507, 608, 495, 398, 582, 583, 330, 494, - 296, 201, 370, 637, 224, 480, 372, 242, 231, 588, - 613, 300, 252, 290, 457, 644, 213, 518, 599, 239, - 484, 0, 0, 652, 247, 505, 611, 600, 215, 595, - 504, 394, 327, 328, 214, 0, 458, 269, 294, 0, - 0, 259, 416, 590, 591, 257, 653, 228, 623, 220, - 0, 622, 409, 585, 596, 395, 384, 219, 594, 393, - 383, 335, 356, 357, 281, 308, 448, 376, 449, 307, - 309, 405, 404, 406, 207, 609, 627, 0, 208, 0, - 500, 612, 654, 453, 212, 234, 235, 237, 0, 280, - 284, 292, 295, 304, 305, 314, 368, 420, 447, 443, - 452, 0, 580, 603, 617, 629, 635, 636, 638, 639, - 640, 641, 642, 645, 643, 408, 312, 496, 334, 374, - 0, 0, 426, 473, 240, 607, 497, 199, 0, 0, - 0, 0, 255, 256, 0, 576, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 650, 509, 515, 510, 511, 512, 513, - 514, 0, 516, 0, 0, 0, 0, 0, 399, 0, - 592, 593, 673, 385, 487, 604, 336, 350, 353, 342, - 362, 0, 363, 338, 339, 344, 347, 348, 349, 354, - 355, 359, 365, 249, 210, 391, 400, 579, 313, 216, - 217, 218, 525, 526, 527, 528, 620, 621, 625, 205, - 463, 464, 465, 466, 293, 615, 310, 469, 468, 332, - 333, 380, 450, 541, 543, 554, 558, 560, 562, 568, - 571, 542, 544, 555, 559, 561, 563, 569, 572, 531, - 533, 535, 537, 550, 549, 546, 574, 575, 552, 557, - 536, 548, 553, 566, 573, 570, 530, 534, 538, 547, - 565, 564, 545, 556, 567, 551, 539, 532, 540, 0, - 196, 221, 369, 0, 455, 289, 651, 619, 485, 614, - 206, 223, 0, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 198, 200, 209, 222, 232, - 236, 243, 262, 277, 279, 286, 299, 311, 319, 320, - 323, 329, 381, 387, 388, 389, 390, 410, 411, 412, - 415, 418, 419, 422, 424, 425, 428, 432, 436, 437, - 438, 440, 442, 444, 456, 461, 475, 476, 477, 478, - 479, 482, 483, 489, 490, 491, 492, 493, 501, 502, - 517, 587, 589, 606, 626, 633, 481, 302, 303, 445, - 446, 315, 316, 647, 648, 301, 601, 634, 598, 646, - 628, 439, 379, 0, 0, 382, 282, 306, 321, 0, - 618, 503, 227, 467, 291, 251, 0, 0, 211, 246, - 230, 260, 275, 278, 325, 392, 401, 430, 435, 297, - 272, 244, 460, 241, 486, 520, 521, 522, 524, 396, - 267, 434, 397, 0, 377, 577, 578, 317, 0, 0, - 0, 529, 0, 0, 0, 0, 2428, 0, 0, 0, - 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, - 0, 271, 0, 0, 0, 0, 367, 268, 0, 0, - 204, 506, 0, 431, 0, 203, 0, 488, 253, 378, - 375, 584, 283, 274, 270, 250, 318, 386, 429, 519, - 423, 0, 371, 0, 0, 498, 402, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 324, 248, 326, 202, 414, - 499, 287, 0, 0, 0, 0, 0, 508, 194, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, - 0, 245, 0, 0, 0, 352, 361, 360, 340, 341, - 343, 345, 351, 358, 364, 337, 346, 0, 0, 610, - 0, 0, 0, 266, 322, 273, 265, 581, 0, 0, - 0, 0, 0, 0, 597, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 298, 0, 403, 258, 0, 454, - 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, - 0, 366, 0, 331, 197, 225, 0, 0, 413, 462, - 474, 0, 0, 0, 254, 0, 472, 427, 605, 233, - 285, 459, 433, 470, 441, 288, 0, 0, 471, 373, - 586, 451, 602, 631, 632, 264, 407, 616, 523, 624, - 649, 226, 261, 421, 507, 608, 495, 398, 582, 583, - 330, 494, 296, 201, 370, 637, 224, 480, 372, 242, - 231, 588, 613, 300, 252, 290, 457, 644, 213, 518, - 599, 239, 484, 0, 0, 652, 247, 505, 611, 600, - 215, 595, 504, 394, 327, 328, 214, 0, 458, 269, - 294, 0, 0, 259, 416, 590, 591, 257, 653, 228, - 623, 220, 0, 622, 409, 585, 596, 395, 384, 219, - 594, 393, 383, 335, 356, 357, 281, 308, 448, 376, - 449, 307, 309, 405, 404, 406, 207, 609, 627, 0, - 208, 0, 500, 612, 654, 453, 212, 234, 235, 237, - 0, 280, 284, 292, 295, 304, 305, 314, 368, 420, - 447, 443, 452, 0, 580, 603, 617, 629, 635, 636, - 638, 639, 640, 641, 642, 645, 643, 408, 312, 496, - 334, 374, 0, 0, 426, 473, 240, 607, 497, 199, - 0, 0, 0, 0, 255, 256, 0, 576, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 650, 509, 515, 510, 511, - 512, 513, 514, 0, 516, 0, 0, 0, 0, 0, - 399, 0, 592, 593, 673, 385, 487, 604, 336, 350, - 353, 342, 362, 0, 363, 338, 339, 344, 347, 348, - 349, 354, 355, 359, 365, 249, 210, 391, 400, 579, - 313, 216, 217, 218, 525, 526, 527, 528, 620, 621, - 625, 205, 463, 464, 465, 466, 293, 615, 310, 469, - 468, 332, 333, 380, 450, 541, 543, 554, 558, 560, - 562, 568, 571, 542, 544, 555, 559, 561, 563, 569, - 572, 531, 533, 535, 537, 550, 549, 546, 574, 575, - 552, 557, 536, 548, 553, 566, 573, 570, 530, 534, - 538, 547, 565, 564, 545, 556, 567, 551, 539, 532, - 540, 0, 196, 221, 369, 0, 455, 289, 651, 619, - 485, 614, 206, 223, 0, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 200, 209, - 222, 232, 236, 243, 262, 277, 279, 286, 299, 311, - 319, 320, 323, 329, 381, 387, 388, 389, 390, 410, - 411, 412, 415, 418, 419, 422, 424, 425, 428, 432, - 436, 437, 438, 440, 442, 444, 456, 461, 475, 476, - 477, 478, 479, 482, 483, 489, 490, 491, 492, 493, - 501, 502, 517, 587, 589, 606, 626, 633, 481, 302, - 303, 445, 446, 315, 316, 647, 648, 301, 601, 634, - 598, 646, 628, 439, 379, 0, 0, 382, 282, 306, - 321, 0, 618, 503, 227, 467, 291, 251, 0, 0, - 211, 246, 230, 260, 275, 278, 325, 392, 401, 430, - 435, 297, 272, 244, 460, 241, 486, 520, 521, 522, - 524, 396, 267, 434, 397, 0, 377, 577, 578, 317, - 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, - 0, 0, 0, 271, 0, 0, 0, 0, 367, 268, - 0, 0, 204, 506, 0, 431, 0, 203, 0, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 0, 371, 0, 0, 498, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 248, 326, - 202, 414, 499, 287, 0, 0, 0, 0, 1781, 508, - 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 0, 245, 0, 0, 0, 352, 361, 360, - 340, 341, 343, 345, 351, 358, 364, 337, 346, 0, - 0, 610, 0, 0, 0, 266, 322, 273, 265, 581, - 0, 0, 0, 0, 0, 0, 597, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 298, 0, 403, 258, - 0, 454, 0, 0, 0, 630, 0, 0, 0, 0, - 0, 0, 0, 366, 0, 331, 197, 225, 0, 0, - 413, 462, 474, 0, 0, 0, 254, 0, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 0, 0, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 590, 591, 257, - 653, 228, 623, 220, 0, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 356, 357, 281, 308, - 448, 376, 449, 307, 309, 405, 404, 406, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 0, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 0, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 0, 0, 426, 473, 240, 607, - 497, 199, 0, 0, 0, 0, 255, 256, 0, 576, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 0, 0, 0, - 0, 0, 399, 0, 592, 593, 673, 385, 487, 604, - 336, 350, 353, 342, 362, 0, 363, 338, 339, 344, - 347, 348, 349, 354, 355, 359, 365, 249, 210, 391, - 400, 579, 313, 216, 217, 218, 525, 526, 527, 528, - 620, 621, 625, 205, 463, 464, 465, 466, 293, 615, - 310, 469, 468, 332, 333, 380, 450, 541, 543, 554, - 558, 560, 562, 568, 571, 542, 544, 555, 559, 561, - 563, 569, 572, 531, 533, 535, 537, 550, 549, 546, - 574, 575, 552, 557, 536, 548, 553, 566, 573, 570, - 530, 534, 538, 547, 565, 564, 545, 556, 567, 551, - 539, 532, 540, 0, 196, 221, 369, 0, 455, 289, - 651, 619, 485, 614, 206, 223, 0, 263, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 302, 303, 445, 446, 315, 316, 647, 648, 301, - 601, 634, 598, 646, 628, 439, 379, 0, 0, 382, - 282, 306, 321, 0, 618, 503, 227, 467, 291, 251, - 0, 0, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 397, 0, 377, 577, - 578, 317, 0, 0, 0, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, - 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, - 367, 268, 0, 0, 204, 506, 0, 431, 0, 203, - 0, 488, 253, 378, 375, 584, 283, 274, 270, 250, - 318, 386, 429, 519, 423, 0, 371, 0, 0, 498, - 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, - 248, 326, 202, 414, 499, 287, 0, 0, 0, 0, - 0, 508, 194, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 238, 0, 0, 245, 0, 0, 0, 352, - 361, 360, 340, 341, 343, 345, 351, 358, 364, 337, - 346, 0, 0, 610, 0, 0, 0, 266, 322, 273, - 265, 581, 0, 0, 0, 0, 0, 0, 597, 0, - 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, - 403, 258, 0, 454, 0, 0, 0, 630, 0, 0, - 0, 0, 0, 0, 0, 366, 0, 331, 197, 225, - 0, 0, 413, 462, 474, 0, 0, 0, 254, 0, - 472, 427, 605, 233, 285, 459, 433, 470, 441, 288, - 0, 0, 471, 373, 586, 451, 602, 631, 632, 264, - 407, 616, 523, 624, 649, 226, 261, 421, 507, 608, - 495, 398, 582, 583, 330, 494, 296, 201, 370, 637, - 224, 480, 372, 242, 231, 588, 613, 300, 252, 290, - 457, 644, 213, 518, 599, 239, 484, 0, 0, 652, - 247, 505, 611, 600, 215, 595, 504, 394, 327, 328, - 214, 0, 458, 269, 294, 0, 0, 259, 416, 590, - 591, 257, 653, 228, 623, 220, 0, 622, 409, 585, - 596, 395, 384, 219, 594, 393, 383, 335, 356, 357, - 281, 308, 448, 376, 449, 307, 309, 405, 404, 406, - 207, 609, 627, 0, 208, 0, 500, 612, 654, 453, - 212, 234, 235, 237, 0, 280, 284, 292, 295, 304, - 305, 314, 368, 420, 447, 443, 452, 0, 580, 603, - 617, 629, 635, 636, 638, 639, 640, 641, 642, 645, - 643, 408, 312, 496, 334, 374, 0, 0, 426, 473, - 240, 607, 497, 199, 0, 0, 0, 0, 255, 256, - 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 650, - 509, 515, 510, 511, 512, 513, 514, 0, 516, 0, - 0, 0, 0, 0, 399, 0, 592, 593, 673, 385, - 487, 604, 336, 350, 353, 342, 362, 0, 363, 338, - 339, 344, 347, 348, 349, 354, 355, 359, 365, 249, - 210, 391, 400, 579, 313, 216, 217, 218, 525, 526, - 527, 528, 620, 621, 625, 205, 463, 464, 465, 466, - 293, 615, 310, 469, 468, 332, 333, 380, 450, 541, - 543, 554, 558, 560, 562, 568, 571, 542, 544, 555, - 559, 561, 563, 569, 572, 531, 533, 535, 537, 550, - 549, 546, 574, 575, 552, 557, 536, 548, 553, 566, - 573, 570, 530, 534, 538, 547, 565, 564, 545, 556, - 567, 551, 539, 532, 540, 0, 196, 221, 369, 2080, - 455, 289, 651, 619, 485, 614, 206, 223, 0, 263, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 200, 209, 222, 232, 236, 243, 262, 277, - 279, 286, 299, 311, 319, 320, 323, 329, 381, 387, - 388, 389, 390, 410, 411, 412, 415, 418, 419, 422, - 424, 425, 428, 432, 436, 437, 438, 440, 442, 444, - 456, 461, 475, 476, 477, 478, 479, 482, 483, 489, - 490, 491, 492, 493, 501, 502, 517, 587, 589, 606, - 626, 633, 481, 302, 303, 445, 446, 315, 316, 647, - 648, 301, 601, 634, 598, 646, 628, 439, 379, 0, - 0, 382, 282, 306, 321, 0, 618, 503, 227, 467, - 291, 251, 0, 0, 211, 246, 230, 260, 275, 278, - 325, 392, 401, 430, 435, 297, 272, 244, 460, 241, - 486, 520, 521, 522, 524, 396, 267, 434, 397, 0, - 377, 577, 578, 317, 0, 0, 0, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, - 0, 0, 367, 268, 0, 0, 204, 506, 0, 431, - 0, 203, 0, 488, 253, 378, 375, 584, 283, 274, - 270, 250, 318, 386, 429, 519, 423, 0, 371, 0, - 0, 498, 402, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 324, 248, 326, 202, 414, 499, 287, 0, 0, - 0, 0, 2071, 508, 725, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 238, 0, 0, 245, 0, 0, - 0, 352, 361, 360, 340, 341, 343, 345, 351, 358, - 364, 337, 346, 0, 0, 610, 0, 0, 0, 266, - 322, 273, 265, 581, 0, 0, 0, 0, 0, 0, - 597, 0, 0, 229, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 298, 0, 403, 258, 0, 454, 0, 0, 0, 630, - 0, 0, 0, 0, 0, 0, 0, 366, 0, 331, - 197, 225, 0, 0, 413, 462, 474, 0, 0, 0, - 254, 0, 472, 427, 605, 233, 285, 459, 433, 470, - 441, 288, 0, 0, 471, 373, 586, 451, 602, 631, - 632, 264, 407, 616, 523, 624, 649, 226, 261, 421, - 507, 608, 495, 398, 582, 583, 330, 494, 296, 201, - 370, 637, 224, 480, 372, 242, 231, 588, 613, 300, - 252, 290, 457, 644, 213, 518, 599, 239, 484, 0, - 0, 652, 247, 505, 611, 600, 215, 595, 504, 394, - 327, 328, 214, 0, 458, 269, 294, 0, 0, 259, - 416, 590, 591, 257, 653, 228, 623, 220, 0, 622, - 409, 585, 596, 395, 384, 219, 594, 393, 383, 335, - 356, 357, 281, 308, 448, 376, 449, 307, 309, 405, - 404, 406, 207, 609, 627, 0, 208, 0, 500, 612, - 654, 453, 212, 234, 235, 237, 0, 280, 284, 292, - 295, 304, 305, 314, 368, 420, 447, 443, 452, 0, - 580, 603, 617, 629, 635, 636, 638, 639, 640, 641, - 642, 645, 643, 408, 312, 496, 334, 374, 0, 0, - 426, 473, 240, 607, 497, 199, 0, 0, 0, 0, - 255, 256, 0, 576, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 650, 509, 515, 510, 511, 512, 513, 514, 0, - 516, 0, 0, 0, 0, 0, 399, 0, 592, 593, - 673, 385, 487, 604, 336, 350, 353, 342, 362, 0, - 363, 338, 339, 344, 347, 348, 349, 354, 355, 359, - 365, 249, 210, 391, 400, 579, 313, 216, 217, 218, - 525, 526, 527, 528, 620, 621, 625, 205, 463, 464, - 465, 466, 293, 615, 310, 469, 468, 332, 333, 380, - 450, 541, 543, 554, 558, 560, 562, 568, 571, 542, - 544, 555, 559, 561, 563, 569, 572, 531, 533, 535, - 537, 550, 549, 546, 574, 575, 552, 557, 536, 548, - 553, 566, 573, 570, 530, 534, 538, 547, 565, 564, - 545, 556, 567, 551, 539, 532, 540, 0, 196, 221, - 369, 0, 455, 289, 651, 619, 485, 614, 206, 223, - 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 200, 209, 222, 232, 236, 243, - 262, 277, 279, 286, 299, 311, 319, 320, 323, 329, - 381, 387, 388, 389, 390, 410, 411, 412, 415, 418, - 419, 422, 424, 425, 428, 432, 436, 437, 438, 440, - 442, 444, 456, 461, 475, 476, 477, 478, 479, 482, - 483, 489, 490, 491, 492, 493, 501, 502, 517, 587, - 589, 606, 626, 633, 481, 302, 303, 445, 446, 315, - 316, 647, 648, 301, 601, 634, 598, 646, 628, 439, - 379, 0, 0, 382, 282, 306, 321, 0, 618, 503, - 227, 467, 291, 251, 0, 0, 211, 246, 230, 260, - 275, 278, 325, 392, 401, 430, 435, 297, 272, 244, - 460, 241, 486, 520, 521, 522, 524, 396, 267, 434, - 397, 0, 377, 577, 578, 317, 0, 0, 0, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 0, 0, 0, 0, 0, 271, - 0, 0, 0, 0, 367, 268, 0, 1929, 204, 506, - 0, 431, 0, 203, 0, 488, 253, 378, 375, 584, - 283, 274, 270, 250, 318, 386, 429, 519, 423, 0, - 371, 0, 0, 498, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 324, 248, 326, 202, 414, 499, 287, - 0, 0, 0, 0, 0, 508, 725, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 238, 0, 0, 245, - 0, 0, 0, 352, 361, 360, 340, 341, 343, 345, - 351, 358, 364, 337, 346, 0, 0, 610, 0, 0, - 0, 266, 322, 273, 265, 581, 0, 0, 0, 0, - 0, 0, 597, 0, 0, 229, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 0, 403, 258, 0, 454, 0, 0, - 0, 630, 0, 0, 0, 0, 0, 0, 0, 366, - 0, 331, 197, 225, 0, 0, 413, 462, 474, 0, - 0, 0, 254, 0, 472, 427, 605, 233, 285, 459, - 433, 470, 441, 288, 0, 0, 471, 373, 586, 451, - 602, 631, 632, 264, 407, 616, 523, 624, 649, 226, - 261, 421, 507, 608, 495, 398, 582, 583, 330, 494, - 296, 201, 370, 637, 224, 480, 372, 242, 231, 588, - 613, 300, 252, 290, 457, 644, 213, 518, 599, 239, - 484, 0, 0, 652, 247, 505, 611, 600, 215, 595, - 504, 394, 327, 328, 214, 0, 458, 269, 294, 0, - 0, 259, 416, 590, 591, 257, 653, 228, 623, 220, - 0, 622, 409, 585, 596, 395, 384, 219, 594, 393, - 383, 335, 356, 357, 281, 308, 448, 376, 449, 307, - 309, 405, 404, 406, 207, 609, 627, 0, 208, 0, - 500, 612, 654, 453, 212, 234, 235, 237, 0, 280, - 284, 292, 295, 304, 305, 314, 368, 420, 447, 443, - 452, 0, 580, 603, 617, 629, 635, 636, 638, 639, - 640, 641, 642, 645, 643, 408, 312, 496, 334, 374, - 0, 0, 426, 473, 240, 607, 497, 199, 0, 0, - 0, 0, 255, 256, 0, 576, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 650, 509, 515, 510, 511, 512, 513, - 514, 0, 516, 0, 0, 0, 0, 0, 399, 0, - 592, 593, 673, 385, 487, 604, 336, 350, 353, 342, - 362, 0, 363, 338, 339, 344, 347, 348, 349, 354, - 355, 359, 365, 249, 210, 391, 400, 579, 313, 216, - 217, 218, 525, 526, 527, 528, 620, 621, 625, 205, - 463, 464, 465, 466, 293, 615, 310, 469, 468, 332, - 333, 380, 450, 541, 543, 554, 558, 560, 562, 568, - 571, 542, 544, 555, 559, 561, 563, 569, 572, 531, - 533, 535, 537, 550, 549, 546, 574, 575, 552, 557, - 536, 548, 553, 566, 573, 570, 530, 534, 538, 547, - 565, 564, 545, 556, 567, 551, 539, 532, 540, 0, - 196, 221, 369, 0, 455, 289, 651, 619, 485, 614, - 206, 223, 0, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 198, 200, 209, 222, 232, - 236, 243, 262, 277, 279, 286, 299, 311, 319, 320, - 323, 329, 381, 387, 388, 389, 390, 410, 411, 412, - 415, 418, 419, 422, 424, 425, 428, 432, 436, 437, - 438, 440, 442, 444, 456, 461, 475, 476, 477, 478, - 479, 482, 483, 489, 490, 491, 492, 493, 501, 502, - 517, 587, 589, 606, 626, 633, 481, 302, 303, 445, - 446, 315, 316, 647, 648, 301, 601, 634, 598, 646, - 628, 439, 379, 0, 0, 382, 282, 306, 321, 0, - 618, 503, 227, 467, 291, 251, 0, 0, 211, 246, - 230, 260, 275, 278, 325, 392, 401, 430, 435, 297, - 272, 244, 460, 241, 486, 520, 521, 522, 524, 396, - 267, 434, 397, 0, 377, 577, 578, 317, 0, 0, - 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, - 0, 271, 0, 0, 0, 0, 367, 268, 0, 1927, - 204, 506, 0, 431, 0, 203, 0, 488, 253, 378, - 375, 584, 283, 274, 270, 250, 318, 386, 429, 519, - 423, 0, 371, 0, 0, 498, 402, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 324, 248, 326, 202, 414, - 499, 287, 0, 0, 0, 0, 0, 508, 725, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, - 0, 245, 0, 0, 0, 352, 361, 360, 340, 341, - 343, 345, 351, 358, 364, 337, 346, 0, 0, 610, - 0, 0, 0, 266, 322, 273, 265, 581, 0, 0, - 0, 0, 0, 0, 597, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 298, 0, 403, 258, 0, 454, - 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, - 0, 366, 0, 331, 197, 225, 0, 0, 413, 462, - 474, 0, 0, 0, 254, 0, 472, 427, 605, 233, - 285, 459, 433, 470, 441, 288, 0, 0, 471, 373, - 586, 451, 602, 631, 632, 264, 407, 616, 523, 624, - 649, 226, 261, 421, 507, 608, 495, 398, 582, 583, - 330, 494, 296, 201, 370, 637, 224, 480, 372, 242, - 231, 588, 613, 300, 252, 290, 457, 644, 213, 518, - 599, 239, 484, 0, 0, 652, 247, 505, 611, 600, - 215, 595, 504, 394, 327, 328, 214, 0, 458, 269, - 294, 0, 0, 259, 416, 590, 591, 257, 653, 228, - 623, 220, 0, 622, 409, 585, 596, 395, 384, 219, - 594, 393, 383, 335, 356, 357, 281, 308, 448, 376, - 449, 307, 309, 405, 404, 406, 207, 609, 627, 0, - 208, 0, 500, 612, 654, 453, 212, 234, 235, 237, - 0, 280, 284, 292, 295, 304, 305, 314, 368, 420, - 447, 443, 452, 0, 580, 603, 617, 629, 635, 636, - 638, 639, 640, 641, 642, 645, 643, 408, 312, 496, - 334, 374, 0, 0, 426, 473, 240, 607, 497, 199, - 0, 0, 0, 0, 255, 256, 0, 576, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 650, 509, 515, 510, 511, - 512, 513, 514, 0, 516, 0, 0, 0, 0, 0, - 399, 0, 592, 593, 673, 385, 487, 604, 336, 350, - 353, 342, 362, 0, 363, 338, 339, 344, 347, 348, - 349, 354, 355, 359, 365, 249, 210, 391, 400, 579, - 313, 216, 217, 218, 525, 526, 527, 528, 620, 621, - 625, 205, 463, 464, 465, 466, 293, 615, 310, 469, - 468, 332, 333, 380, 450, 541, 543, 554, 558, 560, - 562, 568, 571, 542, 544, 555, 559, 561, 563, 569, - 572, 531, 533, 535, 537, 550, 549, 546, 574, 575, - 552, 557, 536, 548, 553, 566, 573, 570, 530, 534, - 538, 547, 565, 564, 545, 556, 567, 551, 539, 532, - 540, 0, 196, 221, 369, 0, 455, 289, 651, 619, - 485, 614, 206, 223, 0, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 200, 209, - 222, 232, 236, 243, 262, 277, 279, 286, 299, 311, - 319, 320, 323, 329, 381, 387, 388, 389, 390, 410, - 411, 412, 415, 418, 419, 422, 424, 425, 428, 432, - 436, 437, 438, 440, 442, 444, 456, 461, 475, 476, - 477, 478, 479, 482, 483, 489, 490, 491, 492, 493, - 501, 502, 517, 587, 589, 606, 626, 633, 481, 302, - 303, 445, 446, 315, 316, 647, 648, 301, 601, 634, - 598, 646, 628, 439, 379, 0, 0, 382, 282, 306, - 321, 0, 618, 503, 227, 467, 291, 251, 0, 0, - 211, 246, 230, 260, 275, 278, 325, 392, 401, 430, - 435, 297, 272, 244, 460, 241, 486, 520, 521, 522, - 524, 396, 267, 434, 397, 0, 377, 577, 578, 317, - 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, - 0, 0, 0, 271, 0, 0, 0, 0, 367, 268, - 0, 1925, 204, 506, 0, 431, 0, 203, 0, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 0, 371, 0, 0, 498, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 248, 326, - 202, 414, 499, 287, 0, 0, 0, 0, 0, 508, - 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 0, 245, 0, 0, 0, 352, 361, 360, - 340, 341, 343, 345, 351, 358, 364, 337, 346, 0, - 0, 610, 0, 0, 0, 266, 322, 273, 265, 581, - 0, 0, 0, 0, 0, 0, 597, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 298, 0, 403, 258, - 0, 454, 0, 0, 0, 630, 0, 0, 0, 0, - 0, 0, 0, 366, 0, 331, 197, 225, 0, 0, - 413, 462, 474, 0, 0, 0, 254, 0, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 0, 0, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 590, 591, 257, - 653, 228, 623, 220, 0, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 356, 357, 281, 308, - 448, 376, 449, 307, 309, 405, 404, 406, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 0, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 0, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 0, 0, 426, 473, 240, 607, - 497, 199, 0, 0, 0, 0, 255, 256, 0, 576, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 0, 0, 0, - 0, 0, 399, 0, 592, 593, 673, 385, 487, 604, - 336, 350, 353, 342, 362, 0, 363, 338, 339, 344, - 347, 348, 349, 354, 355, 359, 365, 249, 210, 391, - 400, 579, 313, 216, 217, 218, 525, 526, 527, 528, - 620, 621, 625, 205, 463, 464, 465, 466, 293, 615, - 310, 469, 468, 332, 333, 380, 450, 541, 543, 554, - 558, 560, 562, 568, 571, 542, 544, 555, 559, 561, - 563, 569, 572, 531, 533, 535, 537, 550, 549, 546, - 574, 575, 552, 557, 536, 548, 553, 566, 573, 570, - 530, 534, 538, 547, 565, 564, 545, 556, 567, 551, - 539, 532, 540, 0, 196, 221, 369, 0, 455, 289, - 651, 619, 485, 614, 206, 223, 0, 263, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 302, 303, 445, 446, 315, 316, 647, 648, 301, - 601, 634, 598, 646, 628, 439, 379, 0, 0, 382, - 282, 306, 321, 0, 618, 503, 227, 467, 291, 251, - 0, 0, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 397, 0, 377, 577, - 578, 317, 0, 0, 0, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, - 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, - 367, 268, 0, 1923, 204, 506, 0, 431, 0, 203, - 0, 488, 253, 378, 375, 584, 283, 274, 270, 250, - 318, 386, 429, 519, 423, 0, 371, 0, 0, 498, - 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, - 248, 326, 202, 414, 499, 287, 0, 0, 0, 0, - 0, 508, 725, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 238, 0, 0, 245, 0, 0, 0, 352, - 361, 360, 340, 341, 343, 345, 351, 358, 364, 337, - 346, 0, 0, 610, 0, 0, 0, 266, 322, 273, - 265, 581, 0, 0, 0, 0, 0, 0, 597, 0, - 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, - 403, 258, 0, 454, 0, 0, 0, 630, 0, 0, - 0, 0, 0, 0, 0, 366, 0, 331, 197, 225, - 0, 0, 413, 462, 474, 0, 0, 0, 254, 0, - 472, 427, 605, 233, 285, 459, 433, 470, 441, 288, - 0, 0, 471, 373, 586, 451, 602, 631, 632, 264, - 407, 616, 523, 624, 649, 226, 261, 421, 507, 608, - 495, 398, 582, 583, 330, 494, 296, 201, 370, 637, - 224, 480, 372, 242, 231, 588, 613, 300, 252, 290, - 457, 644, 213, 518, 599, 239, 484, 0, 0, 652, - 247, 505, 611, 600, 215, 595, 504, 394, 327, 328, - 214, 0, 458, 269, 294, 0, 0, 259, 416, 590, - 591, 257, 653, 228, 623, 220, 0, 622, 409, 585, - 596, 395, 384, 219, 594, 393, 383, 335, 356, 357, - 281, 308, 448, 376, 449, 307, 309, 405, 404, 406, - 207, 609, 627, 0, 208, 0, 500, 612, 654, 453, - 212, 234, 235, 237, 0, 280, 284, 292, 295, 304, - 305, 314, 368, 420, 447, 443, 452, 0, 580, 603, - 617, 629, 635, 636, 638, 639, 640, 641, 642, 645, - 643, 408, 312, 496, 334, 374, 0, 0, 426, 473, - 240, 607, 497, 199, 0, 0, 0, 0, 255, 256, - 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 650, - 509, 515, 510, 511, 512, 513, 514, 0, 516, 0, - 0, 0, 0, 0, 399, 0, 592, 593, 673, 385, - 487, 604, 336, 350, 353, 342, 362, 0, 363, 338, - 339, 344, 347, 348, 349, 354, 355, 359, 365, 249, - 210, 391, 400, 579, 313, 216, 217, 218, 525, 526, - 527, 528, 620, 621, 625, 205, 463, 464, 465, 466, - 293, 615, 310, 469, 468, 332, 333, 380, 450, 541, - 543, 554, 558, 560, 562, 568, 571, 542, 544, 555, - 559, 561, 563, 569, 572, 531, 533, 535, 537, 550, - 549, 546, 574, 575, 552, 557, 536, 548, 553, 566, - 573, 570, 530, 534, 538, 547, 565, 564, 545, 556, - 567, 551, 539, 532, 540, 0, 196, 221, 369, 0, - 455, 289, 651, 619, 485, 614, 206, 223, 0, 263, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 200, 209, 222, 232, 236, 243, 262, 277, - 279, 286, 299, 311, 319, 320, 323, 329, 381, 387, - 388, 389, 390, 410, 411, 412, 415, 418, 419, 422, - 424, 425, 428, 432, 436, 437, 438, 440, 442, 444, - 456, 461, 475, 476, 477, 478, 479, 482, 483, 489, - 490, 491, 492, 493, 501, 502, 517, 587, 589, 606, - 626, 633, 481, 302, 303, 445, 446, 315, 316, 647, - 648, 301, 601, 634, 598, 646, 628, 439, 379, 0, - 0, 382, 282, 306, 321, 0, 618, 503, 227, 467, - 291, 251, 0, 0, 211, 246, 230, 260, 275, 278, - 325, 392, 401, 430, 435, 297, 272, 244, 460, 241, - 486, 520, 521, 522, 524, 396, 267, 434, 397, 0, - 377, 577, 578, 317, 0, 0, 0, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, - 0, 0, 367, 268, 0, 1921, 204, 506, 0, 431, - 0, 203, 0, 488, 253, 378, 375, 584, 283, 274, - 270, 250, 318, 386, 429, 519, 423, 0, 371, 0, - 0, 498, 402, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 324, 248, 326, 202, 414, 499, 287, 0, 0, - 0, 0, 0, 508, 725, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 238, 0, 0, 245, 0, 0, - 0, 352, 361, 360, 340, 341, 343, 345, 351, 358, - 364, 337, 346, 0, 0, 610, 0, 0, 0, 266, - 322, 273, 265, 581, 0, 0, 0, 0, 0, 0, - 597, 0, 0, 229, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 298, 0, 403, 258, 0, 454, 0, 0, 0, 630, - 0, 0, 0, 0, 0, 0, 0, 366, 0, 331, - 197, 225, 0, 0, 413, 462, 474, 0, 0, 0, - 254, 0, 472, 427, 605, 233, 285, 459, 433, 470, - 441, 288, 0, 0, 471, 373, 586, 451, 602, 631, - 632, 264, 407, 616, 523, 624, 649, 226, 261, 421, - 507, 608, 495, 398, 582, 583, 330, 494, 296, 201, - 370, 637, 224, 480, 372, 242, 231, 588, 613, 300, - 252, 290, 457, 644, 213, 518, 599, 239, 484, 0, - 0, 652, 247, 505, 611, 600, 215, 595, 504, 394, - 327, 328, 214, 0, 458, 269, 294, 0, 0, 259, - 416, 590, 591, 257, 653, 228, 623, 220, 0, 622, - 409, 585, 596, 395, 384, 219, 594, 393, 383, 335, - 356, 357, 281, 308, 448, 376, 449, 307, 309, 405, - 404, 406, 207, 609, 627, 0, 208, 0, 500, 612, - 654, 453, 212, 234, 235, 237, 0, 280, 284, 292, - 295, 304, 305, 314, 368, 420, 447, 443, 452, 0, - 580, 603, 617, 629, 635, 636, 638, 639, 640, 641, - 642, 645, 643, 408, 312, 496, 334, 374, 0, 0, - 426, 473, 240, 607, 497, 199, 0, 0, 0, 0, - 255, 256, 0, 576, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 650, 509, 515, 510, 511, 512, 513, 514, 0, - 516, 0, 0, 0, 0, 0, 399, 0, 592, 593, - 673, 385, 487, 604, 336, 350, 353, 342, 362, 0, - 363, 338, 339, 344, 347, 348, 349, 354, 355, 359, - 365, 249, 210, 391, 400, 579, 313, 216, 217, 218, - 525, 526, 527, 528, 620, 621, 625, 205, 463, 464, - 465, 466, 293, 615, 310, 469, 468, 332, 333, 380, - 450, 541, 543, 554, 558, 560, 562, 568, 571, 542, - 544, 555, 559, 561, 563, 569, 572, 531, 533, 535, - 537, 550, 549, 546, 574, 575, 552, 557, 536, 548, - 553, 566, 573, 570, 530, 534, 538, 547, 565, 564, - 545, 556, 567, 551, 539, 532, 540, 0, 196, 221, - 369, 0, 455, 289, 651, 619, 485, 614, 206, 223, - 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 200, 209, 222, 232, 236, 243, - 262, 277, 279, 286, 299, 311, 319, 320, 323, 329, - 381, 387, 388, 389, 390, 410, 411, 412, 415, 418, - 419, 422, 424, 425, 428, 432, 436, 437, 438, 440, - 442, 444, 456, 461, 475, 476, 477, 478, 479, 482, - 483, 489, 490, 491, 492, 493, 501, 502, 517, 587, - 589, 606, 626, 633, 481, 302, 303, 445, 446, 315, - 316, 647, 648, 301, 601, 634, 598, 646, 628, 439, - 379, 0, 0, 382, 282, 306, 321, 0, 618, 503, - 227, 467, 291, 251, 0, 0, 211, 246, 230, 260, - 275, 278, 325, 392, 401, 430, 435, 297, 272, 244, - 460, 241, 486, 520, 521, 522, 524, 396, 267, 434, - 397, 0, 377, 577, 578, 317, 0, 0, 0, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 0, 0, 0, 0, 0, 271, - 0, 0, 0, 0, 367, 268, 0, 1917, 204, 506, - 0, 431, 0, 203, 0, 488, 253, 378, 375, 584, - 283, 274, 270, 250, 318, 386, 429, 519, 423, 0, - 371, 0, 0, 498, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 324, 248, 326, 202, 414, 499, 287, - 0, 0, 0, 0, 0, 508, 725, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 238, 0, 0, 245, - 0, 0, 0, 352, 361, 360, 340, 341, 343, 345, - 351, 358, 364, 337, 346, 0, 0, 610, 0, 0, - 0, 266, 322, 273, 265, 581, 0, 0, 0, 0, - 0, 0, 597, 0, 0, 229, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 0, 403, 258, 0, 454, 0, 0, - 0, 630, 0, 0, 0, 0, 0, 0, 0, 366, - 0, 331, 197, 225, 0, 0, 413, 462, 474, 0, - 0, 0, 254, 0, 472, 427, 605, 233, 285, 459, - 433, 470, 441, 288, 0, 0, 471, 373, 586, 451, - 602, 631, 632, 264, 407, 616, 523, 624, 649, 226, - 261, 421, 507, 608, 495, 398, 582, 583, 330, 494, - 296, 201, 370, 637, 224, 480, 372, 242, 231, 588, - 613, 300, 252, 290, 457, 644, 213, 518, 599, 239, - 484, 0, 0, 652, 247, 505, 611, 600, 215, 595, - 504, 394, 327, 328, 214, 0, 458, 269, 294, 0, - 0, 259, 416, 590, 591, 257, 653, 228, 623, 220, - 0, 622, 409, 585, 596, 395, 384, 219, 594, 393, - 383, 335, 356, 357, 281, 308, 448, 376, 449, 307, - 309, 405, 404, 406, 207, 609, 627, 0, 208, 0, - 500, 612, 654, 453, 212, 234, 235, 237, 0, 280, - 284, 292, 295, 304, 305, 314, 368, 420, 447, 443, - 452, 0, 580, 603, 617, 629, 635, 636, 638, 639, - 640, 641, 642, 645, 643, 408, 312, 496, 334, 374, - 0, 0, 426, 473, 240, 607, 497, 199, 0, 0, - 0, 0, 255, 256, 0, 576, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 650, 509, 515, 510, 511, 512, 513, - 514, 0, 516, 0, 0, 0, 0, 0, 399, 0, - 592, 593, 673, 385, 487, 604, 336, 350, 353, 342, - 362, 0, 363, 338, 339, 344, 347, 348, 349, 354, - 355, 359, 365, 249, 210, 391, 400, 579, 313, 216, - 217, 218, 525, 526, 527, 528, 620, 621, 625, 205, - 463, 464, 465, 466, 293, 615, 310, 469, 468, 332, - 333, 380, 450, 541, 543, 554, 558, 560, 562, 568, - 571, 542, 544, 555, 559, 561, 563, 569, 572, 531, - 533, 535, 537, 550, 549, 546, 574, 575, 552, 557, - 536, 548, 553, 566, 573, 570, 530, 534, 538, 547, - 565, 564, 545, 556, 567, 551, 539, 532, 540, 0, - 196, 221, 369, 0, 455, 289, 651, 619, 485, 614, - 206, 223, 0, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 198, 200, 209, 222, 232, - 236, 243, 262, 277, 279, 286, 299, 311, 319, 320, - 323, 329, 381, 387, 388, 389, 390, 410, 411, 412, - 415, 418, 419, 422, 424, 425, 428, 432, 436, 437, - 438, 440, 442, 444, 456, 461, 475, 476, 477, 478, - 479, 482, 483, 489, 490, 491, 492, 493, 501, 502, - 517, 587, 589, 606, 626, 633, 481, 302, 303, 445, - 446, 315, 316, 647, 648, 301, 601, 634, 598, 646, - 628, 439, 379, 0, 0, 382, 282, 306, 321, 0, - 618, 503, 227, 467, 291, 251, 0, 0, 211, 246, - 230, 260, 275, 278, 325, 392, 401, 430, 435, 297, - 272, 244, 460, 241, 486, 520, 521, 522, 524, 396, - 267, 434, 397, 0, 377, 577, 578, 317, 0, 0, - 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, - 0, 271, 0, 0, 0, 0, 367, 268, 0, 1915, - 204, 506, 0, 431, 0, 203, 0, 488, 253, 378, - 375, 584, 283, 274, 270, 250, 318, 386, 429, 519, - 423, 0, 371, 0, 0, 498, 402, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 324, 248, 326, 202, 414, - 499, 287, 0, 0, 0, 0, 0, 508, 725, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, - 0, 245, 0, 0, 0, 352, 361, 360, 340, 341, - 343, 345, 351, 358, 364, 337, 346, 0, 0, 610, - 0, 0, 0, 266, 322, 273, 265, 581, 0, 0, - 0, 0, 0, 0, 597, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 298, 0, 403, 258, 0, 454, - 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, - 0, 366, 0, 331, 197, 225, 0, 0, 413, 462, - 474, 0, 0, 0, 254, 0, 472, 427, 605, 233, - 285, 459, 433, 470, 441, 288, 0, 0, 471, 373, - 586, 451, 602, 631, 632, 264, 407, 616, 523, 624, - 649, 226, 261, 421, 507, 608, 495, 398, 582, 583, - 330, 494, 296, 201, 370, 637, 224, 480, 372, 242, - 231, 588, 613, 300, 252, 290, 457, 644, 213, 518, - 599, 239, 484, 0, 0, 652, 247, 505, 611, 600, - 215, 595, 504, 394, 327, 328, 214, 0, 458, 269, - 294, 0, 0, 259, 416, 590, 591, 257, 653, 228, - 623, 220, 0, 622, 409, 585, 596, 395, 384, 219, - 594, 393, 383, 335, 356, 357, 281, 308, 448, 376, - 449, 307, 309, 405, 404, 406, 207, 609, 627, 0, - 208, 0, 500, 612, 654, 453, 212, 234, 235, 237, - 0, 280, 284, 292, 295, 304, 305, 314, 368, 420, - 447, 443, 452, 0, 580, 603, 617, 629, 635, 636, - 638, 639, 640, 641, 642, 645, 643, 408, 312, 496, - 334, 374, 0, 0, 426, 473, 240, 607, 497, 199, - 0, 0, 0, 0, 255, 256, 0, 576, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 650, 509, 515, 510, 511, - 512, 513, 514, 0, 516, 0, 0, 0, 0, 0, - 399, 0, 592, 593, 673, 385, 487, 604, 336, 350, - 353, 342, 362, 0, 363, 338, 339, 344, 347, 348, - 349, 354, 355, 359, 365, 249, 210, 391, 400, 579, - 313, 216, 217, 218, 525, 526, 527, 528, 620, 621, - 625, 205, 463, 464, 465, 466, 293, 615, 310, 469, - 468, 332, 333, 380, 450, 541, 543, 554, 558, 560, - 562, 568, 571, 542, 544, 555, 559, 561, 563, 569, - 572, 531, 533, 535, 537, 550, 549, 546, 574, 575, - 552, 557, 536, 548, 553, 566, 573, 570, 530, 534, - 538, 547, 565, 564, 545, 556, 567, 551, 539, 532, - 540, 0, 196, 221, 369, 0, 455, 289, 651, 619, - 485, 614, 206, 223, 0, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 200, 209, - 222, 232, 236, 243, 262, 277, 279, 286, 299, 311, - 319, 320, 323, 329, 381, 387, 388, 389, 390, 410, - 411, 412, 415, 418, 419, 422, 424, 425, 428, 432, - 436, 437, 438, 440, 442, 444, 456, 461, 475, 476, - 477, 478, 479, 482, 483, 489, 490, 491, 492, 493, - 501, 502, 517, 587, 589, 606, 626, 633, 481, 302, - 303, 445, 446, 315, 316, 647, 648, 301, 601, 634, - 598, 646, 628, 439, 379, 0, 0, 382, 282, 306, - 321, 0, 618, 503, 227, 467, 291, 251, 0, 0, - 211, 246, 230, 260, 275, 278, 325, 392, 401, 430, - 435, 297, 272, 244, 460, 241, 486, 520, 521, 522, - 524, 396, 267, 434, 397, 0, 377, 577, 578, 317, - 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, - 0, 0, 0, 271, 0, 0, 0, 0, 367, 268, - 0, 1913, 204, 506, 0, 431, 0, 203, 0, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 0, 371, 0, 0, 498, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 248, 326, - 202, 414, 499, 287, 0, 0, 0, 0, 0, 508, - 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 0, 245, 0, 0, 0, 352, 361, 360, - 340, 341, 343, 345, 351, 358, 364, 337, 346, 0, - 0, 610, 0, 0, 0, 266, 322, 273, 265, 581, - 0, 0, 0, 0, 0, 0, 597, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 298, 0, 403, 258, - 0, 454, 0, 0, 0, 630, 0, 0, 0, 0, - 0, 0, 0, 366, 0, 331, 197, 225, 0, 0, - 413, 462, 474, 0, 0, 0, 254, 0, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 0, 0, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 590, 591, 257, - 653, 228, 623, 220, 0, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 356, 357, 281, 308, - 448, 376, 449, 307, 309, 405, 404, 406, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 0, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 0, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 0, 0, 426, 473, 240, 607, - 497, 199, 0, 0, 0, 0, 255, 256, 0, 576, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 0, 0, 0, - 0, 0, 399, 0, 592, 593, 673, 385, 487, 604, - 336, 350, 353, 342, 362, 0, 363, 338, 339, 344, - 347, 348, 349, 354, 355, 359, 365, 249, 210, 391, - 400, 579, 313, 216, 217, 218, 525, 526, 527, 528, - 620, 621, 625, 205, 463, 464, 465, 466, 293, 615, - 310, 469, 468, 332, 333, 380, 450, 541, 543, 554, - 558, 560, 562, 568, 571, 542, 544, 555, 559, 561, - 563, 569, 572, 531, 533, 535, 537, 550, 549, 546, - 574, 575, 552, 557, 536, 548, 553, 566, 573, 570, - 530, 534, 538, 547, 565, 564, 545, 556, 567, 551, - 539, 532, 540, 0, 196, 221, 369, 0, 455, 289, - 651, 619, 485, 614, 206, 223, 0, 263, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 302, 303, 445, 446, 315, 316, 647, 648, 301, - 601, 634, 598, 646, 628, 439, 379, 0, 0, 382, - 282, 306, 321, 0, 618, 503, 227, 467, 291, 251, - 0, 0, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 397, 0, 377, 577, - 578, 317, 0, 0, 0, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, - 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, - 367, 268, 0, 0, 204, 506, 0, 431, 0, 203, - 0, 488, 253, 378, 375, 584, 283, 274, 270, 250, - 318, 386, 429, 519, 423, 0, 371, 0, 0, 498, - 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, - 248, 326, 202, 414, 499, 287, 0, 1888, 0, 0, - 0, 508, 725, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 238, 0, 0, 245, 0, 0, 0, 352, - 361, 360, 340, 341, 343, 345, 351, 358, 364, 337, - 346, 0, 0, 610, 0, 0, 0, 266, 322, 273, - 265, 581, 0, 0, 0, 0, 0, 0, 597, 0, - 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, - 403, 258, 0, 454, 0, 0, 0, 630, 0, 0, - 0, 0, 0, 0, 0, 366, 0, 331, 197, 225, - 0, 0, 413, 462, 474, 0, 0, 0, 254, 0, - 472, 427, 605, 233, 285, 459, 433, 470, 441, 288, - 0, 0, 471, 373, 586, 451, 602, 631, 632, 264, - 407, 616, 523, 624, 649, 226, 261, 421, 507, 608, - 495, 398, 582, 583, 330, 494, 296, 201, 370, 637, - 224, 480, 372, 242, 231, 588, 613, 300, 252, 290, - 457, 644, 213, 518, 599, 239, 484, 0, 0, 652, - 247, 505, 611, 600, 215, 595, 504, 394, 327, 328, - 214, 0, 458, 269, 294, 0, 0, 259, 416, 590, - 591, 257, 653, 228, 623, 220, 0, 622, 409, 585, - 596, 395, 384, 219, 594, 393, 383, 335, 356, 357, - 281, 308, 448, 376, 449, 307, 309, 405, 404, 406, - 207, 609, 627, 0, 208, 0, 500, 612, 654, 453, - 212, 234, 235, 237, 0, 280, 284, 292, 295, 304, - 305, 314, 368, 420, 447, 443, 452, 0, 580, 603, - 617, 629, 635, 636, 638, 639, 640, 641, 642, 645, - 643, 408, 312, 496, 334, 374, 0, 0, 426, 473, - 240, 607, 497, 199, 0, 0, 0, 0, 255, 256, - 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 650, - 509, 515, 510, 511, 512, 513, 514, 0, 516, 0, - 0, 0, 0, 0, 399, 0, 592, 593, 673, 385, - 487, 604, 336, 350, 353, 342, 362, 0, 363, 338, - 339, 344, 347, 348, 349, 354, 355, 359, 365, 249, - 210, 391, 400, 579, 313, 216, 217, 218, 525, 526, - 527, 528, 620, 621, 625, 205, 463, 464, 465, 466, - 293, 615, 310, 469, 468, 332, 333, 380, 450, 541, - 543, 554, 558, 560, 562, 568, 571, 542, 544, 555, - 559, 561, 563, 569, 572, 531, 533, 535, 537, 550, - 549, 546, 574, 575, 552, 557, 536, 548, 553, 566, - 573, 570, 530, 534, 538, 547, 565, 564, 545, 556, - 567, 551, 539, 532, 540, 0, 196, 221, 369, 0, - 455, 289, 651, 619, 485, 614, 206, 223, 0, 263, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 200, 209, 222, 232, 236, 243, 262, 277, - 279, 286, 299, 311, 319, 320, 323, 329, 381, 387, - 388, 389, 390, 410, 411, 412, 415, 418, 419, 422, - 424, 425, 428, 432, 436, 437, 438, 440, 442, 444, - 456, 461, 475, 476, 477, 478, 479, 482, 483, 489, - 490, 491, 492, 493, 501, 502, 517, 587, 589, 606, - 626, 633, 481, 302, 303, 445, 446, 315, 316, 647, - 648, 301, 601, 634, 598, 646, 628, 439, 379, 0, - 0, 382, 282, 306, 321, 0, 618, 503, 227, 467, - 291, 251, 0, 0, 211, 246, 230, 260, 275, 278, - 325, 392, 401, 430, 435, 297, 272, 244, 460, 241, - 486, 520, 521, 522, 524, 396, 267, 434, 397, 0, - 377, 577, 578, 317, 0, 0, 0, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 0, 0, 0, 0, 0, 0, 1785, 271, 0, 0, - 0, 0, 367, 268, 0, 0, 204, 506, 0, 431, - 0, 203, 0, 488, 253, 378, 375, 584, 283, 274, - 270, 250, 318, 386, 429, 519, 423, 0, 371, 0, - 0, 498, 402, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 324, 248, 326, 202, 414, 499, 287, 0, 0, - 0, 0, 0, 508, 194, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 238, 0, 0, 245, 0, 0, - 0, 352, 361, 360, 340, 341, 343, 345, 351, 358, - 364, 337, 346, 0, 0, 610, 0, 0, 0, 266, - 322, 273, 265, 581, 0, 0, 0, 0, 0, 0, - 597, 0, 0, 229, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 298, 0, 403, 258, 0, 454, 0, 0, 0, 630, - 0, 0, 0, 0, 0, 0, 0, 366, 0, 331, - 197, 225, 0, 0, 413, 462, 474, 0, 0, 0, - 254, 0, 472, 427, 605, 233, 285, 459, 433, 470, - 441, 288, 0, 0, 471, 373, 586, 451, 602, 631, - 632, 264, 407, 616, 523, 624, 649, 226, 261, 421, - 507, 608, 495, 398, 582, 583, 330, 494, 296, 201, - 370, 637, 224, 480, 372, 242, 231, 588, 613, 300, - 252, 290, 457, 644, 213, 518, 599, 239, 484, 0, - 0, 652, 247, 505, 611, 600, 215, 595, 504, 394, - 327, 328, 214, 0, 458, 269, 294, 0, 0, 259, - 416, 590, 591, 257, 653, 228, 623, 220, 0, 622, - 409, 585, 596, 395, 384, 219, 594, 393, 383, 335, - 356, 357, 281, 308, 448, 376, 449, 307, 309, 405, - 404, 406, 207, 609, 627, 0, 208, 0, 500, 612, - 654, 453, 212, 234, 235, 237, 0, 280, 284, 292, - 295, 304, 305, 314, 368, 420, 447, 443, 452, 0, - 580, 603, 617, 629, 635, 636, 638, 639, 640, 641, - 642, 645, 643, 408, 312, 496, 334, 374, 0, 0, - 426, 473, 240, 607, 497, 199, 0, 0, 0, 0, - 255, 256, 0, 576, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 650, 509, 515, 510, 511, 512, 513, 514, 0, - 516, 0, 0, 0, 0, 0, 399, 0, 592, 593, - 673, 385, 487, 604, 336, 350, 353, 342, 362, 0, - 363, 338, 339, 344, 347, 348, 349, 354, 355, 359, - 365, 249, 210, 391, 400, 579, 313, 216, 217, 218, - 525, 526, 527, 528, 620, 621, 625, 205, 463, 464, - 465, 466, 293, 615, 310, 469, 468, 332, 333, 380, - 450, 541, 543, 554, 558, 560, 562, 568, 571, 542, - 544, 555, 559, 561, 563, 569, 572, 531, 533, 535, - 537, 550, 549, 546, 574, 575, 552, 557, 536, 548, - 553, 566, 573, 570, 530, 534, 538, 547, 565, 564, - 545, 556, 567, 551, 539, 532, 540, 0, 196, 221, - 369, 0, 455, 289, 651, 619, 485, 614, 206, 223, - 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 200, 209, 222, 232, 236, 243, - 262, 277, 279, 286, 299, 311, 319, 320, 323, 329, - 381, 387, 388, 389, 390, 410, 411, 412, 415, 418, - 419, 422, 424, 425, 428, 432, 436, 437, 438, 440, - 442, 444, 456, 461, 475, 476, 477, 478, 479, 482, - 483, 489, 490, 491, 492, 493, 501, 502, 517, 587, - 589, 606, 626, 633, 481, 302, 303, 445, 446, 315, - 316, 647, 648, 301, 601, 634, 598, 646, 628, 439, - 379, 0, 0, 382, 282, 306, 321, 0, 618, 503, - 227, 467, 291, 251, 0, 0, 211, 246, 230, 260, - 275, 278, 325, 392, 401, 430, 435, 297, 272, 244, - 460, 241, 486, 520, 521, 522, 524, 396, 267, 434, - 397, 0, 377, 577, 578, 317, 0, 0, 0, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 0, 0, 0, 0, 0, 271, - 0, 0, 0, 0, 367, 268, 0, 0, 204, 506, - 0, 431, 0, 203, 0, 488, 253, 378, 375, 584, - 283, 274, 270, 250, 318, 386, 429, 519, 423, 0, - 371, 0, 0, 498, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 324, 248, 326, 202, 414, 499, 287, - 0, 95, 0, 0, 0, 508, 960, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 238, 0, 0, 245, - 0, 0, 0, 352, 361, 360, 340, 341, 343, 345, - 351, 358, 364, 337, 346, 0, 0, 610, 0, 0, - 0, 266, 322, 273, 265, 581, 0, 0, 0, 0, - 0, 0, 597, 0, 0, 229, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 0, 403, 258, 0, 454, 0, 0, - 0, 630, 0, 0, 0, 0, 0, 0, 0, 366, - 0, 331, 197, 225, 0, 0, 413, 462, 474, 0, - 0, 0, 254, 0, 472, 427, 605, 233, 285, 459, - 433, 470, 441, 288, 0, 0, 471, 373, 586, 451, - 602, 631, 632, 264, 407, 616, 523, 624, 649, 226, - 261, 421, 507, 608, 495, 398, 582, 583, 330, 494, - 296, 201, 370, 637, 224, 480, 372, 242, 231, 588, - 613, 300, 252, 290, 457, 644, 213, 518, 599, 239, - 484, 0, 0, 652, 247, 505, 611, 600, 215, 595, - 504, 394, 327, 328, 214, 0, 458, 269, 294, 0, - 0, 259, 416, 590, 591, 257, 653, 228, 623, 220, - 0, 622, 409, 585, 596, 395, 384, 219, 594, 393, - 383, 335, 356, 357, 281, 308, 448, 376, 449, 307, - 309, 405, 404, 406, 207, 609, 627, 0, 208, 0, - 500, 612, 654, 453, 212, 234, 235, 237, 0, 280, - 284, 292, 295, 304, 305, 314, 368, 420, 447, 443, - 452, 0, 580, 603, 617, 629, 635, 636, 638, 639, - 640, 641, 642, 645, 643, 408, 312, 496, 334, 374, - 0, 0, 426, 473, 240, 607, 497, 199, 0, 0, - 0, 0, 255, 256, 0, 576, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 650, 509, 515, 510, 511, 512, 513, - 514, 0, 516, 0, 0, 0, 0, 0, 399, 0, - 592, 593, 673, 385, 487, 604, 336, 350, 353, 342, - 362, 0, 363, 338, 339, 344, 347, 348, 349, 354, - 355, 359, 365, 249, 210, 391, 400, 579, 313, 216, - 217, 218, 525, 526, 527, 528, 620, 621, 625, 205, - 463, 464, 465, 466, 293, 615, 310, 469, 468, 332, - 333, 380, 450, 541, 543, 554, 558, 560, 562, 568, - 571, 542, 544, 555, 559, 561, 563, 569, 572, 531, - 533, 535, 537, 550, 549, 546, 574, 575, 552, 557, - 536, 548, 553, 566, 573, 570, 530, 534, 538, 547, - 565, 564, 545, 556, 567, 551, 539, 532, 540, 0, - 196, 221, 369, 0, 455, 289, 651, 619, 485, 614, - 206, 223, 0, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 198, 200, 209, 222, 232, - 236, 243, 262, 277, 279, 286, 299, 311, 319, 320, - 323, 329, 381, 387, 388, 389, 390, 410, 411, 412, - 415, 418, 419, 422, 424, 425, 428, 432, 436, 437, - 438, 440, 442, 444, 456, 461, 475, 476, 477, 478, - 479, 482, 483, 489, 490, 491, 492, 493, 501, 502, - 517, 587, 589, 606, 626, 633, 481, 302, 303, 445, - 446, 315, 316, 647, 648, 301, 601, 634, 598, 646, - 628, 439, 379, 0, 0, 382, 282, 306, 321, 0, - 618, 503, 227, 467, 291, 251, 0, 0, 211, 246, - 230, 260, 275, 278, 325, 392, 401, 430, 435, 297, - 272, 244, 460, 241, 486, 520, 521, 522, 524, 396, - 267, 434, 397, 0, 377, 577, 578, 317, 0, 0, - 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, - 0, 271, 0, 0, 0, 0, 367, 268, 0, 0, - 204, 506, 0, 431, 0, 203, 0, 488, 253, 378, - 375, 584, 283, 274, 270, 250, 318, 386, 429, 519, - 423, 0, 371, 0, 0, 498, 402, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 324, 248, 326, 202, 414, - 499, 287, 0, 0, 0, 0, 0, 508, 194, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, - 0, 245, 0, 0, 0, 352, 361, 360, 340, 341, - 343, 345, 351, 358, 364, 337, 346, 0, 0, 610, - 0, 0, 0, 266, 322, 273, 265, 581, 0, 0, - 0, 0, 0, 0, 597, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1457, 0, 298, 0, 403, 258, 0, 454, - 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, - 0, 366, 0, 331, 197, 225, 0, 0, 413, 462, - 474, 0, 0, 0, 254, 0, 472, 427, 605, 233, - 285, 459, 433, 470, 441, 288, 0, 0, 471, 373, - 586, 451, 602, 631, 632, 264, 407, 616, 523, 624, - 649, 226, 261, 421, 507, 608, 495, 398, 582, 583, - 330, 494, 296, 201, 370, 637, 224, 480, 372, 242, - 231, 588, 613, 300, 252, 290, 457, 644, 213, 518, - 599, 239, 484, 0, 0, 652, 247, 505, 611, 600, - 215, 595, 504, 394, 327, 328, 214, 0, 458, 269, - 294, 0, 0, 259, 416, 590, 591, 257, 653, 228, - 623, 220, 0, 622, 409, 585, 596, 395, 384, 219, - 594, 393, 383, 335, 356, 357, 281, 308, 448, 376, - 449, 307, 309, 405, 404, 406, 207, 609, 627, 0, - 208, 0, 500, 612, 654, 453, 212, 234, 235, 237, - 0, 280, 284, 292, 295, 304, 305, 314, 368, 420, - 447, 443, 452, 0, 580, 603, 617, 629, 635, 636, - 638, 639, 640, 641, 642, 645, 643, 408, 312, 496, - 334, 374, 0, 0, 426, 473, 240, 607, 497, 199, - 0, 0, 0, 0, 255, 256, 0, 576, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 650, 509, 515, 510, 511, - 512, 513, 514, 0, 516, 0, 0, 0, 0, 0, - 399, 0, 592, 593, 673, 385, 487, 604, 336, 350, - 353, 342, 362, 0, 363, 338, 339, 344, 347, 348, - 349, 354, 355, 359, 365, 249, 210, 391, 400, 579, - 313, 216, 217, 218, 525, 526, 527, 528, 620, 621, - 625, 205, 463, 464, 465, 466, 293, 615, 310, 469, - 468, 332, 333, 380, 450, 541, 543, 554, 558, 560, - 562, 568, 571, 542, 544, 555, 559, 561, 563, 569, - 572, 531, 533, 535, 537, 550, 549, 546, 574, 575, - 552, 557, 536, 548, 553, 566, 573, 570, 530, 534, - 538, 547, 565, 564, 545, 556, 567, 551, 539, 532, - 540, 0, 196, 221, 369, 0, 455, 289, 651, 619, - 485, 614, 206, 223, 0, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 200, 209, - 222, 232, 236, 243, 262, 277, 279, 286, 299, 311, - 319, 320, 323, 329, 381, 387, 388, 389, 390, 410, - 411, 412, 415, 418, 419, 422, 424, 425, 428, 432, - 436, 437, 438, 440, 442, 444, 456, 461, 475, 476, - 477, 478, 479, 482, 483, 489, 490, 491, 492, 493, - 501, 502, 517, 587, 589, 606, 626, 633, 481, 302, - 303, 445, 446, 315, 316, 647, 648, 1456, 601, 634, - 598, 646, 628, 439, 379, 0, 0, 382, 282, 306, - 321, 0, 618, 503, 227, 467, 291, 251, 0, 0, - 211, 246, 230, 260, 275, 278, 325, 392, 401, 430, - 435, 297, 272, 244, 460, 241, 486, 520, 521, 522, - 524, 396, 267, 434, 397, 0, 377, 577, 578, 317, - 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, - 0, 0, 0, 271, 0, 0, 0, 0, 367, 268, - 0, 0, 204, 506, 0, 431, 0, 203, 0, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 0, 371, 0, 0, 498, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 248, 326, - 202, 414, 499, 287, 0, 0, 0, 0, 0, 508, - 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 0, 245, 0, 0, 0, 352, 361, 360, - 340, 341, 343, 345, 351, 358, 364, 337, 346, 0, - 0, 610, 0, 0, 0, 266, 322, 273, 265, 581, - 0, 0, 0, 0, 0, 0, 597, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 298, 0, 403, 258, - 0, 454, 0, 0, 0, 630, 0, 0, 0, 0, - 0, 0, 0, 366, 0, 331, 197, 225, 0, 0, - 413, 462, 474, 0, 0, 0, 254, 0, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 0, 0, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 590, 591, 257, - 653, 228, 623, 220, 0, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 356, 357, 281, 308, - 448, 376, 449, 307, 309, 405, 404, 406, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 0, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 0, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 0, 0, 426, 473, 240, 607, - 497, 199, 0, 0, 0, 0, 255, 256, 0, 576, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 0, 0, 0, - 0, 0, 399, 0, 592, 593, 673, 385, 487, 604, - 336, 350, 353, 342, 362, 0, 363, 338, 339, 344, - 347, 348, 349, 354, 355, 359, 365, 249, 210, 391, - 400, 579, 313, 216, 217, 218, 525, 526, 527, 528, - 620, 621, 625, 205, 463, 464, 465, 466, 293, 615, - 310, 469, 468, 332, 333, 380, 450, 541, 543, 554, - 558, 560, 562, 568, 571, 542, 544, 555, 559, 561, - 563, 569, 572, 531, 533, 535, 537, 550, 549, 546, - 574, 575, 552, 557, 536, 548, 553, 566, 573, 570, - 530, 534, 538, 547, 565, 564, 545, 556, 567, 551, - 539, 532, 540, 0, 196, 221, 369, 0, 455, 289, - 651, 619, 485, 614, 206, 223, 0, 263, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1050, 0, 0, 0, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 302, 303, 445, 446, 315, 316, 647, 648, 301, - 601, 634, 598, 646, 628, 439, 379, 0, 0, 382, - 282, 306, 321, 0, 618, 503, 227, 467, 291, 251, - 0, 0, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 397, 0, 377, 577, - 578, 317, 0, 0, 0, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, - 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, - 367, 268, 0, 0, 204, 506, 0, 431, 0, 203, - 0, 488, 253, 378, 375, 584, 283, 274, 270, 250, - 318, 386, 429, 519, 423, 0, 371, 0, 0, 498, - 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, - 248, 326, 202, 414, 499, 287, 0, 0, 0, 0, - 0, 508, 194, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 238, 0, 0, 245, 0, 0, 0, 352, - 361, 360, 340, 341, 343, 345, 351, 358, 364, 337, - 346, 0, 0, 610, 0, 0, 0, 266, 322, 273, - 265, 581, 0, 0, 0, 0, 0, 0, 597, 0, - 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, - 403, 258, 0, 454, 0, 676, 0, 630, 0, 0, - 0, 0, 0, 0, 0, 366, 0, 331, 197, 225, - 0, 0, 413, 462, 474, 0, 0, 0, 254, 0, - 472, 427, 605, 233, 285, 459, 433, 470, 441, 288, - 0, 0, 471, 373, 586, 451, 602, 631, 632, 264, - 407, 616, 523, 624, 649, 226, 261, 421, 507, 608, - 495, 398, 582, 583, 330, 494, 296, 201, 370, 637, - 224, 480, 372, 242, 231, 588, 613, 300, 252, 290, - 457, 644, 213, 518, 599, 239, 484, 0, 0, 652, - 247, 505, 611, 600, 215, 595, 504, 394, 327, 328, - 214, 0, 458, 269, 294, 0, 0, 259, 416, 590, - 591, 257, 653, 228, 623, 220, 0, 622, 409, 585, - 596, 395, 384, 219, 594, 393, 383, 335, 356, 357, - 281, 308, 448, 376, 449, 307, 309, 405, 404, 406, - 207, 609, 627, 0, 208, 0, 500, 612, 654, 453, - 212, 234, 235, 237, 0, 280, 284, 292, 295, 304, - 305, 314, 368, 420, 447, 443, 452, 0, 580, 603, - 617, 629, 635, 636, 638, 639, 640, 641, 642, 645, - 643, 408, 312, 496, 334, 374, 0, 0, 426, 473, - 240, 607, 497, 199, 0, 0, 0, 0, 255, 256, - 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 650, - 509, 515, 510, 511, 512, 513, 514, 0, 516, 0, - 0, 0, 0, 0, 399, 0, 592, 593, 673, 385, - 487, 604, 336, 350, 353, 342, 362, 0, 363, 338, - 339, 344, 347, 348, 349, 354, 355, 359, 365, 249, - 210, 391, 400, 579, 313, 216, 217, 218, 525, 526, - 527, 528, 620, 621, 625, 205, 463, 464, 465, 466, - 293, 615, 310, 469, 468, 332, 333, 380, 450, 541, - 543, 554, 558, 560, 562, 568, 571, 542, 544, 555, - 559, 561, 563, 569, 572, 531, 533, 535, 537, 550, - 549, 546, 574, 575, 552, 557, 536, 548, 553, 566, - 573, 570, 530, 534, 538, 547, 565, 564, 545, 556, - 567, 551, 539, 532, 540, 0, 196, 221, 369, 0, - 455, 289, 651, 619, 485, 614, 206, 223, 0, 263, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 200, 209, 222, 232, 236, 243, 262, 277, - 279, 286, 299, 311, 319, 320, 323, 329, 381, 387, - 388, 389, 390, 410, 411, 412, 415, 418, 419, 422, - 424, 425, 428, 432, 436, 437, 438, 440, 442, 444, - 456, 461, 475, 476, 477, 478, 479, 482, 483, 489, - 490, 491, 492, 493, 501, 502, 517, 587, 589, 606, - 626, 633, 481, 302, 303, 445, 446, 315, 316, 647, - 648, 301, 601, 634, 598, 646, 628, 439, 379, 0, - 0, 382, 282, 306, 321, 0, 618, 503, 227, 467, - 291, 251, 0, 0, 211, 246, 230, 260, 275, 278, - 325, 392, 401, 430, 435, 297, 272, 244, 460, 241, - 486, 520, 521, 522, 524, 396, 267, 434, 397, 0, - 377, 577, 578, 317, 0, 0, 0, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, - 0, 0, 367, 268, 0, 0, 204, 506, 0, 431, - 0, 203, 0, 488, 253, 378, 375, 584, 283, 274, - 270, 250, 318, 386, 429, 519, 423, 0, 371, 0, - 0, 498, 402, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 324, 248, 326, 202, 414, 499, 287, 0, 0, - 0, 0, 0, 508, 725, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 238, 0, 0, 245, 0, 0, - 0, 352, 361, 360, 340, 341, 343, 345, 351, 358, - 364, 337, 346, 0, 0, 610, 0, 0, 0, 266, - 322, 273, 265, 581, 0, 0, 0, 0, 0, 0, - 597, 0, 0, 229, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 298, 0, 403, 258, 0, 454, 0, 0, 0, 630, - 0, 0, 0, 0, 0, 0, 0, 366, 0, 331, - 197, 225, 0, 0, 413, 462, 474, 0, 0, 0, - 254, 0, 472, 427, 605, 233, 285, 459, 433, 470, - 441, 288, 0, 0, 471, 373, 586, 451, 602, 631, - 632, 264, 407, 616, 523, 624, 649, 226, 261, 421, - 507, 608, 495, 398, 582, 583, 330, 494, 296, 201, - 370, 637, 224, 480, 372, 242, 231, 588, 613, 300, - 252, 290, 457, 644, 213, 518, 599, 239, 484, 0, - 0, 652, 247, 505, 611, 600, 215, 595, 504, 394, - 327, 328, 214, 0, 458, 269, 294, 0, 0, 259, - 416, 590, 591, 257, 653, 228, 623, 220, 0, 622, - 409, 585, 596, 395, 384, 219, 594, 393, 383, 335, - 356, 357, 281, 308, 448, 376, 449, 307, 309, 405, - 404, 406, 207, 609, 627, 0, 208, 0, 500, 612, - 654, 453, 212, 234, 235, 237, 0, 280, 284, 292, - 295, 304, 305, 314, 368, 420, 447, 443, 452, 0, - 580, 603, 617, 629, 635, 636, 638, 639, 640, 641, - 642, 645, 643, 408, 312, 496, 334, 374, 0, 0, - 426, 473, 240, 607, 497, 199, 0, 0, 0, 0, - 255, 256, 0, 576, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 650, 509, 515, 510, 511, 512, 513, 514, 0, - 516, 0, 0, 0, 0, 0, 399, 0, 592, 593, - 673, 385, 487, 604, 336, 350, 353, 342, 362, 0, - 363, 338, 339, 344, 347, 348, 349, 354, 355, 359, - 365, 249, 210, 391, 400, 579, 313, 216, 217, 218, - 525, 526, 527, 528, 620, 621, 625, 205, 463, 464, - 465, 466, 293, 615, 310, 469, 468, 332, 333, 380, - 450, 541, 543, 554, 558, 560, 562, 568, 571, 542, - 544, 555, 559, 561, 563, 569, 572, 531, 533, 535, - 537, 550, 549, 546, 574, 575, 552, 557, 536, 548, - 553, 566, 573, 570, 530, 534, 538, 547, 565, 564, - 545, 556, 567, 551, 539, 532, 540, 0, 196, 221, - 369, 0, 455, 289, 651, 619, 485, 614, 206, 223, - 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 200, 209, 222, 232, 236, 243, - 262, 277, 279, 286, 299, 311, 319, 320, 323, 329, - 381, 387, 388, 389, 390, 4139, 411, 412, 415, 418, - 419, 422, 424, 425, 428, 432, 436, 437, 438, 440, - 442, 444, 456, 461, 475, 476, 477, 478, 479, 482, - 483, 489, 490, 491, 492, 493, 501, 502, 517, 587, - 589, 606, 626, 633, 481, 302, 303, 445, 446, 315, - 316, 647, 648, 301, 601, 634, 598, 646, 628, 439, - 379, 0, 0, 382, 282, 306, 321, 0, 618, 503, - 227, 467, 291, 251, 0, 0, 211, 246, 230, 260, - 275, 278, 325, 392, 401, 430, 435, 297, 272, 244, - 460, 241, 486, 520, 521, 522, 524, 396, 267, 434, - 397, 0, 377, 577, 578, 317, 0, 0, 0, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 0, 0, 0, 0, 0, 271, - 0, 0, 0, 0, 367, 268, 0, 0, 204, 506, - 0, 431, 0, 203, 0, 488, 253, 378, 375, 584, - 283, 274, 270, 250, 318, 386, 429, 519, 423, 0, - 371, 0, 0, 498, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 324, 248, 326, 202, 414, 499, 287, - 0, 0, 0, 0, 0, 508, 725, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 238, 0, 0, 245, - 0, 0, 0, 352, 361, 360, 340, 341, 343, 345, - 351, 358, 364, 337, 346, 0, 0, 610, 0, 0, - 0, 266, 322, 273, 265, 581, 0, 0, 0, 0, - 0, 0, 597, 0, 0, 229, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 0, 403, 258, 0, 454, 0, 0, - 0, 630, 0, 0, 0, 0, 0, 0, 0, 366, - 0, 331, 197, 225, 0, 0, 413, 462, 474, 0, - 0, 0, 254, 0, 472, 427, 605, 233, 285, 459, - 433, 470, 441, 288, 0, 0, 471, 373, 586, 451, - 602, 631, 632, 264, 407, 616, 523, 624, 649, 226, - 261, 421, 507, 608, 495, 398, 582, 583, 330, 494, - 296, 201, 370, 637, 224, 480, 372, 242, 231, 588, - 613, 300, 252, 290, 457, 644, 213, 518, 599, 239, - 484, 0, 0, 652, 247, 505, 611, 600, 215, 595, - 504, 394, 327, 328, 214, 0, 458, 269, 294, 0, - 0, 259, 416, 590, 591, 257, 653, 228, 623, 220, - 0, 622, 409, 585, 596, 395, 384, 219, 594, 393, - 383, 335, 356, 357, 281, 308, 448, 376, 449, 307, - 309, 405, 404, 406, 207, 609, 627, 0, 208, 0, - 500, 612, 654, 453, 212, 234, 235, 237, 0, 280, - 284, 292, 295, 304, 305, 314, 368, 420, 447, 443, - 452, 0, 580, 603, 617, 629, 635, 636, 638, 639, - 640, 641, 642, 645, 643, 408, 312, 496, 334, 374, - 0, 0, 426, 473, 240, 607, 497, 199, 0, 0, - 0, 0, 255, 256, 0, 576, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 650, 509, 515, 510, 511, 512, 513, - 514, 0, 516, 0, 0, 0, 0, 0, 399, 0, - 592, 593, 673, 385, 487, 604, 336, 350, 353, 342, - 362, 0, 363, 338, 339, 344, 347, 348, 349, 354, - 355, 359, 365, 249, 210, 391, 400, 579, 313, 216, - 217, 218, 525, 526, 527, 528, 620, 621, 625, 205, - 463, 464, 465, 466, 293, 615, 310, 469, 468, 332, - 333, 380, 450, 541, 543, 554, 558, 560, 562, 568, - 571, 542, 544, 555, 559, 561, 563, 569, 572, 531, - 533, 535, 537, 550, 549, 546, 574, 575, 552, 557, - 536, 548, 553, 566, 573, 570, 530, 534, 538, 547, - 565, 564, 545, 556, 567, 551, 539, 532, 540, 0, - 196, 221, 369, 0, 455, 289, 651, 619, 485, 614, - 206, 223, 0, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 198, 200, 209, 222, 232, - 236, 243, 262, 277, 279, 286, 299, 311, 319, 320, - 323, 329, 381, 387, 388, 389, 390, 410, 411, 412, - 415, 418, 419, 422, 424, 425, 428, 432, 436, 437, - 438, 440, 442, 444, 456, 461, 475, 476, 477, 478, - 479, 482, 483, 489, 490, 491, 492, 493, 501, 502, - 517, 587, 589, 606, 626, 633, 481, 302, 303, 445, - 446, 315, 316, 647, 648, 301, 601, 634, 598, 646, - 628, 439, 379, 0, 0, 382, 282, 306, 321, 0, - 618, 503, 227, 467, 291, 251, 0, 0, 211, 246, - 230, 260, 275, 278, 325, 392, 401, 430, 435, 297, - 272, 244, 460, 241, 486, 520, 521, 522, 524, 396, - 267, 434, 397, 0, 377, 577, 578, 317, 0, 0, - 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, - 0, 271, 0, 0, 0, 0, 367, 268, 0, 0, - 204, 506, 0, 431, 0, 203, 0, 488, 253, 378, - 375, 584, 283, 274, 270, 250, 318, 386, 429, 519, - 423, 0, 371, 0, 0, 498, 402, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 324, 248, 326, 202, 414, - 499, 287, 0, 0, 0, 0, 0, 508, 960, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, - 0, 245, 0, 0, 0, 352, 361, 360, 340, 341, - 343, 345, 351, 358, 364, 337, 346, 0, 0, 610, - 0, 0, 0, 266, 322, 273, 265, 581, 0, 0, - 0, 0, 0, 0, 597, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 298, 0, 403, 258, 0, 454, - 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, - 0, 366, 0, 331, 197, 225, 0, 0, 413, 462, - 474, 0, 0, 0, 254, 0, 472, 427, 605, 233, - 285, 459, 433, 470, 441, 288, 0, 0, 471, 373, - 586, 451, 602, 631, 632, 264, 407, 616, 523, 624, - 649, 226, 261, 421, 507, 608, 495, 398, 582, 583, - 330, 494, 296, 201, 370, 637, 224, 480, 372, 242, - 231, 588, 613, 300, 252, 290, 457, 644, 213, 518, - 599, 239, 484, 0, 0, 652, 247, 505, 611, 600, - 215, 595, 504, 394, 327, 328, 214, 0, 458, 269, - 294, 0, 0, 259, 416, 590, 591, 257, 653, 228, - 623, 220, 0, 622, 409, 585, 596, 395, 384, 219, - 594, 393, 383, 335, 356, 357, 281, 308, 448, 376, - 449, 307, 309, 405, 404, 406, 207, 609, 627, 0, - 208, 0, 500, 612, 654, 453, 212, 234, 235, 237, - 0, 280, 284, 292, 295, 304, 305, 314, 368, 420, - 447, 443, 452, 0, 580, 603, 617, 629, 635, 636, - 638, 639, 640, 641, 642, 645, 643, 408, 312, 496, - 334, 374, 0, 0, 426, 473, 240, 607, 497, 199, - 0, 0, 0, 0, 255, 256, 0, 576, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 650, 509, 515, 510, 511, - 512, 513, 514, 0, 516, 0, 0, 0, 0, 0, - 399, 0, 592, 593, 673, 385, 487, 604, 336, 350, - 353, 342, 362, 0, 363, 338, 339, 344, 347, 348, - 349, 354, 355, 359, 365, 249, 210, 391, 400, 579, - 313, 216, 217, 218, 525, 526, 527, 528, 620, 621, - 625, 205, 463, 464, 465, 466, 293, 615, 310, 469, - 468, 332, 333, 380, 450, 541, 543, 554, 558, 560, - 562, 568, 571, 542, 544, 555, 559, 561, 563, 569, - 572, 531, 533, 535, 537, 550, 549, 546, 574, 575, - 552, 557, 536, 548, 553, 566, 573, 570, 530, 534, - 538, 547, 565, 564, 545, 556, 567, 551, 539, 532, - 540, 0, 196, 221, 369, 0, 455, 289, 651, 619, - 485, 614, 206, 223, 0, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 200, 209, - 222, 232, 236, 243, 262, 277, 279, 286, 299, 311, - 319, 320, 323, 329, 381, 387, 388, 389, 390, 410, - 411, 412, 415, 418, 419, 422, 424, 425, 428, 432, - 436, 437, 438, 440, 442, 444, 456, 461, 475, 476, - 477, 478, 479, 482, 483, 489, 490, 491, 492, 493, - 501, 502, 517, 587, 589, 606, 626, 633, 481, 302, - 303, 445, 446, 315, 316, 647, 648, 301, 601, 634, - 598, 646, 628, 439, 379, 0, 0, 382, 282, 306, - 321, 0, 618, 503, 227, 467, 291, 251, 0, 0, - 211, 246, 230, 260, 275, 278, 325, 392, 401, 430, - 435, 297, 272, 244, 460, 241, 486, 520, 521, 522, - 524, 396, 267, 434, 397, 0, 377, 577, 578, 317, - 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, - 0, 0, 0, 271, 0, 0, 0, 0, 367, 268, - 0, 0, 204, 506, 0, 431, 0, 203, 0, 488, - 253, 378, 375, 584, 283, 274, 270, 250, 318, 386, - 429, 519, 423, 0, 371, 0, 0, 498, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 248, 326, - 202, 414, 499, 287, 0, 0, 0, 0, 0, 508, - 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 0, 245, 0, 0, 0, 352, 361, 360, - 340, 341, 343, 345, 351, 358, 364, 337, 346, 0, - 0, 610, 0, 0, 0, 266, 322, 273, 265, 581, - 0, 0, 0, 0, 0, 0, 597, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 298, 0, 403, 258, - 0, 454, 0, 0, 0, 630, 0, 0, 0, 0, - 0, 0, 0, 366, 0, 331, 197, 225, 0, 0, - 413, 462, 474, 0, 0, 0, 254, 0, 472, 427, - 605, 233, 285, 459, 433, 470, 441, 288, 0, 0, - 471, 373, 586, 451, 602, 631, 632, 264, 407, 616, - 523, 624, 649, 226, 261, 421, 507, 608, 495, 398, - 582, 583, 330, 494, 296, 201, 370, 637, 224, 480, - 372, 242, 231, 588, 613, 300, 252, 290, 457, 644, - 213, 518, 599, 239, 484, 0, 0, 652, 247, 505, - 611, 600, 215, 595, 504, 394, 327, 328, 214, 0, - 458, 269, 294, 0, 0, 259, 416, 590, 591, 257, - 653, 228, 623, 220, 0, 622, 409, 585, 596, 395, - 384, 219, 594, 393, 383, 335, 356, 357, 281, 308, - 448, 376, 449, 307, 309, 405, 404, 406, 207, 609, - 627, 0, 208, 0, 500, 612, 654, 453, 212, 234, - 235, 237, 0, 280, 284, 292, 295, 304, 305, 314, - 368, 420, 447, 443, 452, 0, 580, 603, 617, 629, - 635, 636, 638, 639, 640, 641, 642, 645, 643, 408, - 312, 496, 334, 374, 0, 0, 426, 473, 240, 607, - 497, 199, 0, 0, 0, 0, 255, 256, 0, 576, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 650, 509, 515, - 510, 511, 512, 513, 514, 0, 516, 0, 0, 0, - 0, 0, 399, 0, 592, 593, 673, 385, 487, 604, - 336, 350, 353, 342, 362, 0, 363, 338, 339, 344, - 347, 348, 349, 354, 355, 359, 365, 249, 210, 391, - 400, 579, 313, 216, 217, 218, 525, 526, 527, 528, - 620, 621, 625, 205, 463, 464, 465, 466, 293, 615, - 310, 469, 468, 332, 333, 380, 450, 541, 543, 554, - 558, 560, 562, 568, 571, 542, 544, 555, 559, 561, - 563, 569, 572, 531, 533, 535, 537, 550, 549, 546, - 574, 575, 552, 557, 536, 548, 553, 566, 573, 570, - 530, 534, 538, 547, 565, 564, 545, 556, 567, 551, - 539, 532, 540, 0, 196, 221, 369, 0, 455, 289, - 651, 619, 485, 614, 206, 223, 0, 263, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, - 200, 209, 222, 232, 236, 243, 262, 277, 279, 286, - 299, 311, 319, 320, 323, 329, 381, 387, 388, 389, - 390, 410, 411, 412, 415, 418, 419, 422, 424, 425, - 428, 432, 436, 437, 438, 440, 442, 444, 456, 461, - 475, 476, 477, 478, 479, 482, 483, 489, 490, 491, - 492, 493, 501, 502, 517, 587, 589, 606, 626, 633, - 481, 302, 303, 445, 446, 315, 316, 647, 648, 301, - 601, 634, 598, 646, 628, 439, 379, 0, 0, 382, - 282, 306, 321, 0, 618, 503, 227, 467, 291, 251, - 0, 0, 211, 246, 230, 260, 275, 278, 325, 392, - 401, 430, 435, 297, 272, 244, 460, 241, 486, 520, - 521, 522, 524, 396, 267, 434, 0, 0, 377, 577, - 578, 317, + 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, + 2139, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 300, 0, 406, 260, 0, 459, 925, 0, 0, + 636, 0, 0, 923, 0, 0, 0, 0, 368, 0, + 333, 199, 227, 0, 0, 416, 467, 479, 0, 0, + 0, 976, 0, 477, 430, 611, 235, 287, 464, 437, + 475, 445, 290, 0, 0, 476, 375, 592, 455, 608, + 637, 638, 266, 410, 622, 528, 630, 655, 228, 263, + 424, 512, 614, 500, 401, 588, 589, 332, 499, 298, + 203, 372, 643, 226, 485, 374, 244, 233, 594, 619, + 302, 254, 292, 462, 650, 215, 523, 605, 241, 489, + 0, 0, 658, 249, 510, 617, 606, 217, 601, 509, + 397, 329, 330, 216, 0, 463, 271, 296, 0, 0, + 261, 419, 977, 978, 259, 659, 822, 629, 222, 0, + 628, 412, 591, 602, 398, 386, 221, 600, 396, 385, + 337, 830, 831, 283, 310, 907, 906, 905, 309, 311, + 903, 904, 902, 209, 615, 633, 0, 210, 0, 505, + 618, 660, 457, 214, 236, 237, 239, 0, 282, 286, + 294, 297, 306, 307, 316, 370, 423, 451, 447, 456, + 0, 585, 609, 623, 635, 641, 642, 644, 645, 646, + 647, 648, 651, 649, 411, 314, 501, 336, 376, 0, + 0, 429, 478, 242, 613, 502, 913, 935, 924, 788, + 789, 914, 915, 939, 916, 791, 792, 936, 937, 785, + 786, 790, 938, 940, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 656, 514, 520, 515, 516, 517, 518, 519, + 0, 521, 927, 774, 773, 0, 780, 781, 0, 810, + 811, 813, 819, 820, 821, 832, 879, 880, 888, 890, + 891, 889, 892, 893, 894, 897, 898, 899, 900, 895, + 896, 901, 793, 797, 794, 795, 796, 808, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 809, 950, + 951, 952, 953, 954, 955, 825, 829, 828, 826, 827, + 823, 824, 851, 850, 852, 853, 854, 855, 856, 857, + 859, 858, 860, 861, 862, 863, 864, 865, 833, 834, + 837, 838, 836, 835, 839, 848, 849, 840, 841, 842, + 843, 844, 845, 847, 846, 866, 867, 868, 869, 870, + 872, 871, 875, 876, 874, 873, 878, 877, 772, 198, + 223, 371, 0, 460, 291, 657, 625, 490, 620, 208, + 225, 941, 265, 942, 0, 0, 946, 0, 0, 0, + 948, 947, 0, 949, 911, 910, 0, 0, 943, 944, + 0, 945, 0, 0, 200, 202, 211, 224, 234, 238, + 245, 264, 279, 281, 288, 301, 313, 321, 322, 325, + 331, 383, 390, 391, 392, 393, 413, 414, 415, 418, + 421, 422, 425, 427, 428, 431, 436, 440, 441, 442, + 444, 446, 448, 461, 466, 480, 481, 482, 483, 484, + 487, 488, 494, 495, 496, 497, 498, 506, 507, 522, + 593, 595, 612, 632, 639, 486, 388, 434, 458, 586, + 956, 957, 958, 959, 960, 961, 962, 963, 303, 607, + 640, 604, 652, 634, 443, 381, 0, 0, 384, 284, + 308, 323, 0, 624, 508, 229, 472, 293, 253, 1031, + 0, 213, 248, 232, 262, 277, 280, 327, 395, 404, + 433, 439, 299, 274, 246, 465, 243, 491, 525, 526, + 527, 529, 399, 269, 438, 400, 0, 379, 582, 583, + 319, 0, 0, 0, 534, 0, 784, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 771, 0, 0, 0, 273, 776, 0, 0, 0, 369, + 270, 0, 0, 206, 511, 0, 435, 0, 205, 0, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 783, 373, 0, 0, 503, 405, + 0, 0, 0, 0, 0, 0, 0, 0, 778, 779, + 0, 0, 0, 0, 0, 0, 0, 0, 326, 250, + 328, 204, 417, 504, 289, 0, 95, 0, 0, 1032, + 513, 966, 1100, 932, 970, 1033, 984, 985, 986, 971, + 0, 240, 972, 973, 247, 974, 0, 931, 814, 816, + 815, 881, 882, 883, 884, 885, 886, 887, 817, 818, + 812, 979, 616, 987, 988, 0, 268, 324, 275, 267, + 587, 0, 0, 0, 0, 0, 0, 603, 0, 0, + 231, 0, 0, 0, 0, 0, 0, 0, 0, 768, + 0, 782, 0, 0, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 765, 766, 0, 0, 0, 0, 926, 0, + 767, 0, 0, 775, 989, 990, 991, 992, 993, 994, + 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, + 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, + 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, + 1025, 1026, 1027, 1028, 1029, 1030, 2137, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 0, 406, + 260, 0, 459, 925, 0, 0, 636, 0, 0, 923, + 0, 0, 0, 0, 368, 0, 333, 199, 227, 0, + 0, 416, 467, 479, 0, 0, 0, 976, 0, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 0, + 0, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 977, 978, + 259, 659, 822, 629, 222, 0, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 830, 831, 283, + 310, 907, 906, 905, 309, 311, 903, 904, 902, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 0, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 0, 0, 429, 478, 242, + 613, 502, 913, 935, 924, 788, 789, 914, 915, 939, + 916, 791, 792, 936, 937, 785, 786, 790, 938, 940, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 927, 774, + 773, 0, 780, 781, 0, 810, 811, 813, 819, 820, + 821, 832, 879, 880, 888, 890, 891, 889, 892, 893, + 894, 897, 898, 899, 900, 895, 896, 901, 793, 797, + 794, 795, 796, 808, 798, 799, 800, 801, 802, 803, + 804, 805, 806, 807, 809, 950, 951, 952, 953, 954, + 955, 825, 829, 828, 826, 827, 823, 824, 851, 850, + 852, 853, 854, 855, 856, 857, 859, 858, 860, 861, + 862, 863, 864, 865, 833, 834, 837, 838, 836, 835, + 839, 848, 849, 840, 841, 842, 843, 844, 845, 847, + 846, 866, 867, 868, 869, 870, 872, 871, 875, 876, + 874, 873, 878, 877, 772, 198, 223, 371, 0, 460, + 291, 657, 625, 490, 620, 208, 225, 941, 265, 942, + 0, 0, 946, 0, 0, 0, 948, 947, 0, 949, + 911, 910, 0, 0, 943, 944, 0, 945, 0, 0, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 956, 957, 958, 959, + 960, 961, 962, 963, 303, 607, 640, 604, 652, 634, + 443, 381, 0, 0, 384, 284, 308, 323, 0, 624, + 508, 229, 472, 293, 253, 1031, 0, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 400, 0, 379, 582, 583, 319, 0, 0, 0, + 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 273, 0, 0, 0, 0, 369, 270, 0, 0, 206, + 511, 0, 435, 0, 205, 0, 493, 255, 380, 377, + 590, 285, 276, 272, 252, 320, 389, 432, 524, 426, + 0, 373, 0, 0, 503, 405, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 250, 328, 204, 417, 504, + 289, 0, 0, 0, 0, 0, 513, 731, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, + 247, 0, 0, 0, 354, 363, 362, 342, 343, 345, + 347, 353, 360, 366, 339, 348, 0, 0, 616, 0, + 0, 0, 268, 324, 275, 267, 587, 0, 0, 0, + 0, 0, 0, 603, 0, 0, 231, 0, 1151, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 300, 0, 406, 260, 0, 459, 0, + 0, 1150, 636, 0, 0, 0, 0, 0, 1147, 1148, + 368, 1108, 333, 199, 227, 1141, 1145, 416, 467, 479, + 0, 0, 0, 256, 0, 477, 430, 611, 235, 287, + 464, 437, 475, 445, 290, 0, 0, 476, 375, 592, + 455, 608, 637, 638, 266, 410, 622, 528, 630, 655, + 228, 263, 424, 512, 614, 500, 401, 588, 589, 332, + 499, 298, 203, 372, 643, 226, 485, 374, 244, 233, + 594, 619, 302, 254, 292, 462, 650, 215, 523, 605, + 241, 489, 0, 0, 658, 249, 510, 617, 606, 217, + 601, 509, 397, 329, 330, 216, 0, 463, 271, 296, + 0, 0, 261, 419, 596, 597, 259, 659, 230, 629, + 222, 0, 628, 412, 591, 602, 398, 386, 221, 600, + 396, 385, 337, 358, 359, 283, 310, 452, 378, 453, + 309, 311, 408, 407, 409, 209, 615, 633, 0, 210, + 0, 505, 618, 660, 457, 214, 236, 237, 239, 0, + 282, 286, 294, 297, 306, 307, 316, 370, 423, 451, + 447, 456, 0, 585, 609, 623, 635, 641, 642, 644, + 645, 646, 647, 648, 651, 649, 411, 314, 501, 336, + 376, 0, 0, 429, 478, 242, 613, 502, 201, 0, + 0, 0, 0, 257, 258, 0, 581, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 656, 514, 520, 515, 516, 517, + 518, 519, 0, 521, 0, 0, 0, 0, 0, 402, + 0, 598, 599, 679, 387, 492, 610, 338, 352, 355, + 344, 364, 0, 365, 340, 341, 346, 349, 350, 351, + 356, 357, 361, 367, 251, 212, 394, 403, 584, 315, + 218, 219, 220, 530, 531, 532, 533, 626, 627, 631, + 207, 468, 469, 470, 471, 295, 621, 312, 474, 473, + 334, 335, 382, 454, 546, 548, 559, 563, 565, 567, + 573, 576, 547, 549, 560, 564, 566, 568, 574, 577, + 536, 538, 540, 542, 555, 554, 551, 579, 580, 557, + 562, 541, 553, 558, 571, 578, 575, 535, 539, 543, + 552, 570, 569, 550, 561, 572, 556, 544, 537, 545, + 0, 198, 223, 371, 0, 460, 291, 657, 625, 490, + 620, 208, 225, 0, 265, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 200, 202, 211, 224, + 234, 238, 245, 264, 279, 281, 288, 301, 313, 321, + 322, 325, 331, 383, 390, 391, 392, 393, 413, 414, + 415, 418, 421, 422, 425, 427, 428, 431, 436, 440, + 441, 442, 444, 446, 448, 461, 466, 480, 481, 482, + 483, 484, 487, 488, 494, 495, 496, 497, 498, 506, + 507, 522, 593, 595, 612, 632, 639, 486, 388, 434, + 458, 586, 304, 305, 449, 450, 317, 318, 653, 654, + 303, 607, 640, 604, 652, 634, 443, 381, 0, 0, + 384, 284, 308, 323, 0, 624, 508, 229, 472, 293, + 253, 0, 0, 213, 248, 232, 262, 277, 280, 327, + 395, 404, 433, 439, 299, 274, 246, 465, 243, 491, + 525, 526, 527, 529, 399, 269, 438, 400, 0, 379, + 582, 583, 319, 0, 0, 86, 534, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, + 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, + 0, 369, 270, 0, 0, 206, 511, 0, 435, 0, + 205, 0, 493, 255, 380, 377, 590, 285, 276, 272, + 252, 320, 389, 432, 524, 426, 97, 373, 0, 0, + 503, 405, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 326, 250, 328, 204, 417, 504, 289, 0, 95, 0, + 0, 0, 513, 196, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, + 354, 363, 362, 342, 343, 345, 347, 353, 360, 366, + 339, 348, 0, 0, 616, 0, 0, 0, 268, 324, + 275, 267, 587, 0, 0, 0, 0, 0, 0, 603, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, + 0, 406, 260, 0, 459, 0, 0, 0, 636, 0, + 0, 0, 0, 0, 0, 0, 368, 0, 333, 199, + 227, 0, 0, 416, 467, 479, 0, 0, 0, 256, + 0, 477, 430, 611, 235, 287, 464, 437, 475, 445, + 290, 0, 0, 476, 375, 592, 455, 608, 637, 638, + 266, 410, 622, 528, 630, 655, 228, 263, 424, 512, + 614, 500, 401, 588, 589, 332, 499, 298, 203, 372, + 643, 226, 485, 374, 244, 233, 594, 619, 302, 254, + 292, 462, 650, 215, 523, 605, 241, 489, 0, 0, + 658, 249, 510, 617, 606, 217, 601, 509, 397, 329, + 330, 216, 0, 463, 271, 296, 0, 0, 261, 419, + 596, 597, 259, 659, 230, 629, 222, 0, 628, 412, + 591, 602, 398, 386, 221, 600, 396, 385, 337, 358, + 359, 283, 310, 452, 378, 453, 309, 311, 408, 407, + 409, 209, 615, 633, 0, 210, 0, 505, 618, 660, + 457, 214, 236, 237, 239, 0, 282, 286, 294, 297, + 306, 307, 316, 370, 423, 451, 447, 456, 0, 585, + 609, 623, 635, 641, 642, 644, 645, 646, 647, 648, + 651, 649, 411, 314, 501, 336, 376, 0, 0, 429, + 478, 242, 613, 502, 201, 0, 0, 0, 0, 257, + 258, 0, 581, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 656, 514, 520, 515, 516, 517, 518, 519, 0, 521, + 0, 0, 0, 0, 0, 402, 0, 598, 599, 679, + 387, 492, 610, 338, 352, 355, 344, 364, 0, 365, + 340, 341, 346, 349, 350, 351, 356, 357, 361, 367, + 251, 212, 394, 403, 584, 315, 218, 219, 220, 530, + 531, 532, 533, 626, 627, 631, 207, 468, 469, 470, + 471, 295, 621, 312, 474, 473, 334, 335, 382, 454, + 546, 548, 559, 563, 565, 567, 573, 576, 547, 549, + 560, 564, 566, 568, 574, 577, 536, 538, 540, 542, + 555, 554, 551, 579, 580, 557, 562, 541, 553, 558, + 571, 578, 575, 535, 539, 543, 552, 570, 569, 550, + 561, 572, 556, 544, 537, 545, 0, 198, 223, 371, + 94, 460, 291, 657, 625, 490, 620, 208, 225, 0, + 265, 0, 0, 0, 0, 0, 0, 2444, 0, 0, + 2443, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, + 279, 281, 288, 301, 313, 321, 322, 325, 331, 383, + 390, 391, 392, 393, 413, 414, 415, 418, 421, 422, + 425, 427, 428, 431, 436, 440, 441, 442, 444, 446, + 448, 461, 466, 480, 481, 482, 483, 484, 487, 488, + 494, 495, 496, 497, 498, 506, 507, 522, 593, 595, + 612, 632, 639, 486, 388, 434, 458, 586, 304, 305, + 449, 450, 317, 318, 653, 654, 303, 607, 640, 604, + 652, 634, 443, 381, 0, 0, 384, 284, 308, 323, + 0, 624, 508, 229, 472, 293, 253, 0, 0, 213, + 248, 232, 262, 277, 280, 327, 395, 404, 433, 439, + 299, 274, 246, 465, 243, 491, 525, 526, 527, 529, + 399, 269, 438, 400, 0, 379, 582, 583, 319, 0, + 0, 86, 534, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 369, 270, 0, + 0, 206, 511, 0, 435, 0, 205, 0, 493, 255, + 380, 377, 590, 285, 276, 272, 252, 320, 389, 432, + 524, 426, 97, 373, 0, 0, 503, 405, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 326, 250, 328, 204, + 417, 504, 289, 0, 95, 0, 1764, 0, 513, 731, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, + 0, 0, 247, 0, 0, 0, 354, 363, 362, 342, + 343, 345, 347, 353, 360, 366, 339, 348, 0, 0, + 616, 0, 0, 0, 268, 324, 275, 267, 587, 0, + 0, 0, 0, 0, 0, 603, 0, 0, 231, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 300, 0, 406, 260, 0, + 459, 0, 0, 0, 636, 0, 0, 0, 0, 0, + 0, 0, 368, 0, 333, 199, 227, 0, 0, 416, + 467, 479, 0, 0, 0, 256, 0, 477, 430, 611, + 235, 287, 464, 437, 475, 445, 290, 0, 0, 476, + 375, 592, 455, 608, 637, 638, 266, 410, 622, 528, + 630, 655, 228, 263, 424, 512, 614, 500, 401, 588, + 589, 332, 499, 298, 203, 372, 643, 226, 485, 374, + 244, 233, 594, 619, 302, 254, 292, 462, 650, 215, + 523, 605, 241, 489, 0, 0, 658, 249, 510, 617, + 606, 217, 601, 509, 397, 329, 330, 216, 0, 463, + 271, 296, 0, 0, 261, 419, 596, 597, 259, 659, + 230, 629, 222, 0, 628, 412, 591, 602, 398, 386, + 221, 600, 396, 385, 337, 358, 359, 283, 310, 452, + 378, 453, 309, 311, 408, 407, 409, 209, 615, 633, + 0, 210, 0, 505, 618, 660, 457, 214, 236, 237, + 239, 0, 282, 286, 294, 297, 306, 307, 316, 370, + 423, 451, 447, 456, 0, 585, 609, 623, 635, 641, + 642, 644, 645, 646, 647, 648, 651, 649, 411, 314, + 501, 336, 376, 0, 0, 429, 478, 242, 613, 502, + 201, 0, 0, 0, 0, 257, 258, 0, 581, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 656, 514, 520, 515, + 516, 517, 518, 519, 0, 521, 0, 0, 0, 0, + 0, 402, 0, 598, 599, 679, 387, 492, 610, 338, + 352, 355, 344, 364, 0, 365, 340, 341, 346, 349, + 350, 351, 356, 357, 361, 367, 251, 212, 394, 403, + 584, 315, 218, 219, 220, 530, 531, 532, 533, 626, + 627, 631, 207, 468, 469, 470, 471, 295, 621, 312, + 474, 473, 334, 335, 382, 454, 546, 548, 559, 563, + 565, 567, 573, 576, 547, 549, 560, 564, 566, 568, + 574, 577, 536, 538, 540, 542, 555, 554, 551, 579, + 580, 557, 562, 541, 553, 558, 571, 578, 575, 535, + 539, 543, 552, 570, 569, 550, 561, 572, 556, 544, + 537, 545, 0, 198, 223, 371, 94, 460, 291, 657, + 625, 490, 620, 208, 225, 0, 265, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 200, 202, + 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, + 313, 321, 322, 325, 331, 383, 390, 391, 392, 393, + 413, 414, 415, 418, 421, 422, 425, 427, 428, 431, + 436, 440, 441, 442, 444, 446, 448, 461, 466, 480, + 481, 482, 483, 484, 487, 488, 494, 495, 496, 497, + 498, 506, 507, 522, 593, 595, 612, 632, 639, 486, + 388, 434, 458, 586, 304, 305, 449, 450, 317, 318, + 653, 654, 303, 607, 640, 604, 652, 634, 443, 381, + 0, 0, 384, 284, 308, 323, 0, 624, 508, 229, + 472, 293, 253, 0, 0, 213, 248, 232, 262, 277, + 280, 327, 395, 404, 433, 439, 299, 274, 246, 465, + 243, 491, 525, 526, 527, 529, 399, 269, 438, 1792, + 0, 379, 582, 583, 319, 0, 0, 0, 534, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 420, 0, 0, 1794, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 369, 270, 0, 0, 206, 511, 0, + 435, 0, 205, 0, 493, 255, 380, 377, 590, 285, + 276, 272, 252, 320, 389, 432, 524, 426, 0, 373, + 0, 0, 503, 405, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 326, 250, 328, 204, 417, 504, 289, 0, + 0, 0, 0, 1796, 513, 731, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, + 0, 0, 354, 363, 362, 342, 343, 345, 347, 353, + 360, 366, 339, 348, 0, 0, 616, 0, 0, 0, + 268, 324, 275, 267, 587, 0, 0, 0, 0, 0, + 0, 603, 0, 0, 231, 0, 0, 0, 1489, 0, + 1490, 1491, 0, 0, 0, 0, 0, 0, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 300, 0, 406, 260, 0, 459, 0, 0, 0, + 636, 0, 0, 0, 0, 0, 0, 0, 368, 0, + 333, 199, 227, 0, 0, 416, 467, 479, 0, 0, + 0, 256, 0, 477, 430, 611, 235, 287, 464, 437, + 475, 445, 290, 0, 0, 476, 375, 592, 455, 608, + 637, 638, 266, 410, 622, 528, 630, 655, 228, 263, + 424, 512, 614, 500, 401, 588, 589, 332, 499, 298, + 203, 372, 643, 226, 485, 374, 244, 233, 594, 619, + 302, 254, 292, 462, 650, 215, 523, 605, 241, 489, + 0, 0, 658, 249, 510, 617, 606, 217, 601, 509, + 397, 329, 330, 216, 0, 463, 271, 296, 0, 0, + 261, 419, 596, 597, 259, 659, 230, 629, 222, 0, + 628, 412, 591, 602, 398, 386, 221, 600, 396, 385, + 337, 358, 359, 283, 310, 452, 378, 453, 309, 311, + 408, 407, 409, 209, 615, 633, 0, 210, 0, 505, + 618, 660, 457, 214, 236, 237, 239, 0, 282, 286, + 294, 297, 306, 307, 316, 370, 423, 451, 447, 456, + 0, 585, 609, 623, 635, 641, 642, 644, 645, 646, + 647, 648, 651, 649, 411, 314, 501, 336, 376, 0, + 0, 429, 478, 242, 613, 502, 201, 0, 0, 0, + 0, 257, 258, 0, 581, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 656, 514, 520, 515, 516, 517, 518, 519, + 0, 521, 0, 0, 0, 0, 0, 402, 0, 598, + 599, 679, 387, 492, 610, 338, 352, 355, 344, 364, + 0, 365, 340, 341, 346, 349, 350, 351, 356, 357, + 361, 367, 251, 212, 394, 403, 584, 315, 218, 219, + 220, 530, 531, 532, 533, 626, 627, 631, 207, 468, + 469, 470, 471, 295, 621, 312, 474, 473, 334, 335, + 382, 454, 546, 548, 559, 563, 565, 567, 573, 576, + 547, 549, 560, 564, 566, 568, 574, 577, 536, 538, + 540, 542, 555, 554, 551, 579, 580, 557, 562, 541, + 553, 558, 571, 578, 575, 535, 539, 543, 552, 570, + 569, 550, 561, 572, 556, 544, 537, 545, 0, 198, + 223, 371, 0, 460, 291, 657, 625, 490, 620, 208, + 225, 0, 265, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 200, 202, 211, 224, 234, 238, + 245, 264, 279, 281, 288, 301, 313, 321, 322, 325, + 331, 383, 390, 391, 392, 393, 413, 414, 415, 418, + 421, 422, 425, 427, 428, 431, 436, 440, 441, 442, + 444, 446, 448, 461, 466, 480, 481, 482, 483, 484, + 487, 488, 494, 495, 496, 497, 498, 506, 507, 522, + 593, 595, 612, 632, 639, 486, 388, 434, 458, 586, + 304, 305, 449, 450, 317, 318, 653, 654, 303, 607, + 640, 604, 652, 634, 443, 381, 0, 0, 384, 284, + 308, 323, 0, 624, 508, 229, 472, 293, 253, 0, + 0, 213, 248, 232, 262, 277, 280, 327, 395, 404, + 433, 439, 299, 274, 246, 465, 243, 491, 525, 526, + 527, 529, 399, 269, 438, 400, 0, 379, 582, 583, + 319, 0, 0, 0, 534, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 0, 0, 0, 273, 0, 0, 0, 0, 369, + 270, 0, 0, 206, 511, 0, 435, 0, 205, 0, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 0, 373, 0, 0, 503, 405, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 326, 250, + 328, 204, 417, 504, 289, 0, 95, 0, 0, 0, + 513, 196, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 240, 0, 0, 247, 0, 0, 0, 354, 363, + 362, 342, 343, 345, 347, 353, 360, 366, 339, 348, + 0, 0, 616, 0, 0, 0, 268, 324, 275, 267, + 587, 0, 0, 0, 0, 0, 0, 603, 0, 0, + 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 0, 406, + 260, 0, 459, 0, 0, 0, 636, 0, 0, 0, + 0, 0, 0, 0, 368, 0, 333, 199, 227, 0, + 0, 416, 467, 479, 0, 0, 0, 256, 0, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 0, + 0, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 596, 597, + 259, 659, 230, 629, 222, 0, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 358, 359, 283, + 310, 452, 378, 453, 309, 311, 408, 407, 409, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 0, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 0, 0, 429, 478, 242, + 613, 502, 201, 0, 0, 0, 0, 257, 258, 0, + 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 0, 0, + 0, 0, 0, 402, 0, 598, 599, 679, 387, 492, + 610, 338, 352, 355, 344, 364, 0, 365, 340, 341, + 346, 349, 350, 351, 356, 357, 361, 367, 251, 212, + 394, 403, 584, 315, 218, 219, 220, 530, 531, 532, + 533, 626, 627, 631, 207, 468, 469, 470, 471, 295, + 621, 312, 474, 473, 334, 335, 382, 454, 546, 548, + 559, 563, 565, 567, 573, 576, 547, 549, 560, 564, + 566, 568, 574, 577, 536, 538, 540, 542, 555, 554, + 551, 579, 580, 557, 562, 541, 553, 558, 571, 578, + 575, 535, 539, 543, 552, 570, 569, 550, 561, 572, + 556, 544, 537, 545, 0, 198, 223, 371, 0, 460, + 291, 657, 625, 490, 620, 208, 225, 0, 265, 0, + 0, 0, 0, 0, 0, 2444, 0, 0, 2443, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 304, 305, 449, 450, + 317, 318, 653, 654, 303, 607, 640, 604, 652, 634, + 443, 381, 0, 0, 384, 284, 308, 323, 0, 624, + 508, 229, 472, 293, 253, 0, 0, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 400, 0, 379, 582, 583, 319, 0, 0, 0, + 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 420, 0, 0, 2389, 0, 0, 0, 0, + 273, 0, 0, 0, 0, 369, 270, 0, 0, 206, + 511, 0, 435, 0, 205, 0, 493, 255, 380, 377, + 590, 285, 276, 272, 252, 320, 389, 432, 524, 426, + 0, 373, 0, 0, 503, 405, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 250, 328, 204, 417, 504, + 289, 0, 0, 0, 0, 1977, 513, 196, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, + 247, 0, 0, 0, 354, 363, 362, 342, 343, 345, + 347, 353, 360, 366, 339, 348, 0, 0, 616, 0, + 0, 0, 268, 324, 275, 267, 587, 0, 0, 0, + 0, 0, 0, 603, 0, 0, 231, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 300, 0, 406, 260, 0, 459, 0, + 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, + 368, 0, 333, 199, 227, 0, 0, 416, 467, 479, + 0, 0, 0, 256, 0, 477, 430, 611, 235, 287, + 464, 437, 475, 445, 290, 0, 2387, 476, 375, 592, + 455, 608, 637, 638, 266, 410, 622, 528, 630, 655, + 228, 263, 424, 512, 614, 500, 401, 588, 589, 332, + 499, 298, 203, 372, 643, 226, 485, 374, 244, 233, + 594, 619, 302, 254, 292, 462, 650, 215, 523, 605, + 241, 489, 0, 0, 658, 249, 510, 617, 606, 217, + 601, 509, 397, 329, 330, 216, 0, 463, 271, 296, + 0, 0, 261, 419, 596, 597, 259, 659, 230, 629, + 222, 0, 628, 412, 591, 602, 398, 386, 221, 600, + 396, 385, 337, 358, 359, 283, 310, 452, 378, 453, + 309, 311, 408, 407, 409, 209, 615, 633, 0, 210, + 0, 505, 618, 660, 457, 214, 236, 237, 239, 0, + 282, 286, 294, 297, 306, 307, 316, 370, 423, 451, + 447, 456, 0, 585, 609, 623, 635, 641, 642, 644, + 645, 646, 647, 648, 651, 649, 411, 314, 501, 336, + 376, 0, 0, 429, 478, 242, 613, 502, 201, 0, + 0, 0, 0, 257, 258, 0, 581, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 656, 514, 520, 515, 516, 517, + 518, 519, 0, 521, 0, 0, 0, 0, 0, 402, + 0, 598, 599, 679, 387, 492, 610, 338, 352, 355, + 344, 364, 0, 365, 340, 341, 346, 349, 350, 351, + 356, 357, 361, 367, 251, 212, 394, 403, 584, 315, + 218, 219, 220, 530, 531, 532, 533, 626, 627, 631, + 207, 468, 469, 470, 471, 295, 621, 312, 474, 473, + 334, 335, 382, 454, 546, 548, 559, 563, 565, 567, + 573, 576, 547, 549, 560, 564, 566, 568, 574, 577, + 536, 538, 540, 542, 555, 554, 551, 579, 580, 557, + 562, 541, 553, 558, 571, 578, 575, 535, 539, 543, + 552, 570, 569, 550, 561, 572, 556, 544, 537, 545, + 0, 198, 223, 371, 0, 460, 291, 657, 625, 490, + 620, 208, 225, 0, 265, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 200, 202, 211, 224, + 234, 238, 245, 264, 279, 281, 288, 301, 313, 321, + 322, 325, 331, 383, 390, 391, 392, 393, 413, 414, + 415, 418, 421, 422, 425, 427, 428, 431, 436, 440, + 441, 442, 444, 446, 448, 461, 466, 480, 481, 482, + 483, 484, 487, 488, 494, 495, 496, 497, 498, 506, + 507, 522, 593, 595, 612, 632, 639, 486, 388, 434, + 458, 586, 304, 305, 449, 450, 317, 318, 653, 654, + 303, 607, 640, 604, 652, 634, 443, 381, 0, 0, + 384, 284, 308, 323, 0, 624, 508, 229, 472, 293, + 253, 0, 0, 213, 248, 232, 262, 277, 280, 327, + 395, 404, 433, 439, 299, 274, 246, 465, 243, 491, + 525, 526, 527, 529, 399, 269, 438, 400, 0, 379, + 582, 583, 319, 0, 0, 0, 534, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, + 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, + 0, 369, 270, 0, 0, 206, 511, 0, 435, 0, + 205, 0, 493, 255, 380, 377, 590, 285, 276, 272, + 252, 320, 389, 432, 524, 426, 0, 373, 0, 0, + 503, 405, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 326, 250, 328, 204, 417, 504, 289, 0, 0, 0, + 0, 0, 513, 731, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, + 354, 363, 362, 342, 343, 345, 347, 353, 360, 366, + 339, 348, 0, 0, 616, 0, 0, 0, 268, 324, + 275, 267, 587, 0, 0, 0, 0, 0, 0, 603, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 1102, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, + 0, 406, 260, 0, 459, 0, 0, 0, 636, 0, + 0, 0, 0, 0, 0, 0, 368, 1108, 333, 199, + 227, 1106, 0, 416, 467, 479, 0, 0, 0, 256, + 0, 477, 430, 611, 235, 287, 464, 437, 475, 445, + 290, 0, 0, 476, 375, 592, 455, 608, 637, 638, + 266, 410, 622, 528, 630, 655, 228, 263, 424, 512, + 614, 500, 401, 588, 589, 332, 499, 298, 203, 372, + 643, 226, 485, 374, 244, 233, 594, 619, 302, 254, + 292, 462, 650, 215, 523, 605, 241, 489, 0, 0, + 658, 249, 510, 617, 606, 217, 601, 509, 397, 329, + 330, 216, 0, 463, 271, 296, 0, 0, 261, 419, + 596, 597, 259, 659, 230, 629, 222, 0, 628, 412, + 591, 602, 398, 386, 221, 600, 396, 385, 337, 358, + 359, 283, 310, 452, 378, 453, 309, 311, 408, 407, + 409, 209, 615, 633, 0, 210, 0, 505, 618, 660, + 457, 214, 236, 237, 239, 0, 282, 286, 294, 297, + 306, 307, 316, 370, 423, 451, 447, 456, 0, 585, + 609, 623, 635, 641, 642, 644, 645, 646, 647, 648, + 651, 649, 411, 314, 501, 336, 376, 0, 0, 429, + 478, 242, 613, 502, 201, 0, 0, 0, 0, 257, + 258, 0, 581, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 656, 514, 520, 515, 516, 517, 518, 519, 0, 521, + 0, 0, 0, 0, 0, 402, 0, 598, 599, 679, + 387, 492, 610, 338, 352, 355, 344, 364, 0, 365, + 340, 341, 346, 349, 350, 351, 356, 357, 361, 367, + 251, 212, 394, 403, 584, 315, 218, 219, 220, 530, + 531, 532, 533, 626, 627, 631, 207, 468, 469, 470, + 471, 295, 621, 312, 474, 473, 334, 335, 382, 454, + 546, 548, 559, 563, 565, 567, 573, 576, 547, 549, + 560, 564, 566, 568, 574, 577, 536, 538, 540, 542, + 555, 554, 551, 579, 580, 557, 562, 541, 553, 558, + 571, 578, 575, 535, 539, 543, 552, 570, 569, 550, + 561, 572, 556, 544, 537, 545, 0, 198, 223, 371, + 0, 460, 291, 657, 625, 490, 620, 208, 225, 0, + 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, + 279, 281, 288, 301, 313, 321, 322, 325, 331, 383, + 390, 391, 392, 393, 413, 414, 415, 418, 421, 422, + 425, 427, 428, 431, 436, 440, 441, 442, 444, 446, + 448, 461, 466, 480, 481, 482, 483, 484, 487, 488, + 494, 495, 496, 497, 498, 506, 507, 522, 593, 595, + 612, 632, 639, 486, 388, 434, 458, 586, 304, 305, + 449, 450, 317, 318, 653, 654, 303, 607, 640, 604, + 652, 634, 443, 381, 0, 0, 384, 284, 308, 323, + 0, 624, 508, 229, 472, 293, 253, 0, 0, 213, + 248, 232, 262, 277, 280, 327, 395, 404, 433, 439, + 299, 274, 246, 465, 243, 491, 525, 526, 527, 529, + 399, 269, 438, 400, 0, 379, 582, 583, 319, 0, + 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 420, 0, 0, 2389, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 369, 270, 0, + 0, 206, 511, 0, 435, 0, 205, 0, 493, 255, + 380, 377, 590, 285, 276, 272, 252, 320, 389, 432, + 524, 426, 0, 373, 0, 0, 503, 405, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 326, 250, 328, 204, + 417, 504, 289, 0, 0, 0, 0, 1977, 513, 196, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, + 0, 0, 247, 0, 0, 0, 354, 363, 362, 342, + 343, 345, 347, 353, 360, 366, 339, 348, 0, 0, + 616, 0, 0, 0, 268, 324, 275, 267, 587, 0, + 0, 0, 0, 0, 0, 603, 0, 0, 231, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 300, 0, 406, 260, 0, + 459, 0, 0, 0, 636, 0, 0, 0, 0, 0, + 0, 0, 368, 0, 333, 199, 227, 0, 0, 416, + 467, 479, 0, 0, 0, 256, 0, 477, 430, 611, + 235, 287, 464, 437, 475, 445, 290, 0, 0, 476, + 375, 592, 455, 608, 637, 638, 266, 410, 622, 528, + 630, 655, 228, 263, 424, 512, 614, 500, 401, 588, + 589, 332, 499, 298, 203, 372, 643, 226, 485, 374, + 244, 233, 594, 619, 302, 254, 292, 462, 650, 215, + 523, 605, 241, 489, 0, 0, 658, 249, 510, 617, + 606, 217, 601, 509, 397, 329, 330, 216, 0, 463, + 271, 296, 0, 0, 261, 419, 596, 597, 259, 659, + 230, 629, 222, 0, 628, 412, 591, 602, 398, 386, + 221, 600, 396, 385, 337, 358, 359, 283, 310, 452, + 378, 453, 309, 311, 408, 407, 409, 209, 615, 633, + 0, 210, 0, 505, 618, 660, 457, 214, 236, 237, + 239, 0, 282, 286, 294, 297, 306, 307, 316, 370, + 423, 451, 447, 456, 0, 585, 609, 623, 635, 641, + 642, 644, 645, 646, 647, 648, 651, 649, 411, 314, + 501, 336, 376, 0, 0, 429, 478, 242, 613, 502, + 201, 0, 0, 0, 0, 257, 258, 0, 581, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 656, 514, 520, 515, + 516, 517, 518, 519, 0, 521, 0, 0, 0, 0, + 0, 402, 0, 598, 599, 679, 387, 492, 610, 338, + 352, 355, 344, 364, 0, 365, 340, 341, 346, 349, + 350, 351, 356, 357, 361, 367, 251, 212, 394, 403, + 584, 315, 218, 219, 220, 530, 531, 532, 533, 626, + 627, 631, 207, 468, 469, 470, 471, 295, 621, 312, + 474, 473, 334, 335, 382, 454, 546, 548, 559, 563, + 565, 567, 573, 576, 547, 549, 560, 564, 566, 568, + 574, 577, 536, 538, 540, 542, 555, 554, 551, 579, + 580, 557, 562, 541, 553, 558, 571, 578, 575, 535, + 539, 543, 552, 570, 569, 550, 561, 572, 556, 544, + 537, 545, 0, 198, 223, 371, 0, 460, 291, 657, + 625, 490, 620, 208, 225, 0, 265, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 200, 202, + 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, + 313, 321, 322, 325, 331, 383, 390, 391, 392, 393, + 413, 414, 415, 418, 421, 422, 425, 427, 428, 431, + 436, 440, 441, 442, 444, 446, 448, 461, 466, 480, + 481, 482, 483, 484, 487, 488, 494, 495, 496, 497, + 498, 506, 507, 522, 593, 595, 612, 632, 639, 486, + 388, 434, 458, 586, 304, 305, 449, 450, 317, 318, + 653, 654, 303, 607, 640, 604, 652, 634, 443, 381, + 0, 0, 384, 284, 308, 323, 0, 624, 508, 229, + 472, 293, 253, 0, 0, 213, 248, 232, 262, 277, + 280, 327, 395, 404, 433, 439, 299, 274, 246, 465, + 243, 491, 525, 526, 527, 529, 399, 269, 438, 400, + 0, 379, 582, 583, 319, 0, 0, 0, 534, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 420, 0, 0, 0, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 369, 270, 0, 0, 206, 511, 0, + 435, 0, 205, 0, 493, 255, 380, 377, 590, 285, + 276, 272, 252, 320, 389, 432, 524, 426, 0, 373, + 0, 0, 503, 405, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 326, 250, 328, 204, 417, 504, 289, 0, + 0, 0, 1764, 0, 513, 731, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, + 0, 0, 354, 363, 362, 342, 343, 345, 347, 353, + 360, 366, 339, 348, 0, 0, 616, 0, 0, 0, + 268, 324, 275, 267, 587, 0, 0, 0, 0, 0, + 0, 603, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 300, 0, 406, 260, 0, 459, 0, 0, 0, + 636, 0, 0, 0, 3748, 0, 0, 0, 368, 0, + 333, 199, 227, 0, 0, 416, 467, 479, 0, 0, + 0, 256, 0, 477, 430, 611, 235, 287, 464, 437, + 475, 445, 290, 0, 0, 476, 375, 592, 455, 608, + 637, 638, 266, 410, 622, 528, 630, 655, 228, 263, + 424, 512, 614, 500, 401, 588, 589, 332, 499, 298, + 203, 372, 643, 226, 485, 374, 244, 233, 594, 619, + 302, 254, 292, 462, 650, 215, 523, 605, 241, 489, + 0, 0, 658, 249, 510, 617, 606, 217, 601, 509, + 397, 329, 330, 216, 0, 463, 271, 296, 0, 0, + 261, 419, 596, 597, 259, 659, 230, 629, 222, 0, + 628, 412, 591, 602, 398, 386, 221, 600, 396, 385, + 337, 358, 359, 283, 310, 452, 378, 453, 309, 311, + 408, 407, 409, 209, 615, 633, 0, 210, 0, 505, + 618, 660, 457, 214, 236, 237, 239, 0, 282, 286, + 294, 297, 306, 307, 316, 370, 423, 451, 447, 456, + 0, 585, 609, 623, 635, 641, 642, 644, 645, 646, + 647, 648, 651, 649, 411, 314, 501, 336, 376, 0, + 0, 429, 478, 242, 613, 502, 201, 0, 0, 0, + 0, 257, 258, 0, 581, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 656, 514, 520, 515, 516, 517, 518, 519, + 0, 521, 0, 0, 0, 0, 0, 402, 0, 598, + 599, 679, 387, 492, 610, 338, 352, 355, 344, 364, + 0, 365, 340, 341, 346, 349, 350, 351, 356, 357, + 361, 367, 251, 212, 394, 403, 584, 315, 218, 219, + 220, 530, 531, 532, 533, 626, 627, 631, 207, 468, + 469, 470, 471, 295, 621, 312, 474, 473, 334, 335, + 382, 454, 546, 548, 559, 563, 565, 567, 573, 576, + 547, 549, 560, 564, 566, 568, 574, 577, 536, 538, + 540, 542, 555, 554, 551, 579, 580, 557, 562, 541, + 553, 558, 571, 578, 575, 535, 539, 543, 552, 570, + 569, 550, 561, 572, 556, 544, 537, 545, 0, 198, + 223, 371, 0, 460, 291, 657, 625, 490, 620, 208, + 225, 0, 265, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 200, 202, 211, 224, 234, 238, + 245, 264, 279, 281, 288, 301, 313, 321, 322, 325, + 331, 383, 390, 391, 392, 393, 413, 414, 415, 418, + 421, 422, 425, 427, 428, 431, 436, 440, 441, 442, + 444, 446, 448, 461, 466, 480, 481, 482, 483, 484, + 487, 488, 494, 495, 496, 497, 498, 506, 507, 522, + 593, 595, 612, 632, 639, 486, 388, 434, 458, 586, + 304, 305, 449, 450, 317, 318, 653, 654, 303, 607, + 640, 604, 652, 634, 443, 381, 0, 0, 384, 284, + 308, 323, 0, 624, 508, 229, 472, 293, 253, 0, + 0, 213, 248, 232, 262, 277, 280, 327, 395, 404, + 433, 439, 299, 274, 246, 465, 243, 491, 525, 526, + 527, 529, 399, 269, 438, 400, 0, 379, 582, 583, + 319, 0, 0, 0, 534, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 0, 0, 0, 273, 0, 0, 0, 0, 369, + 270, 0, 0, 206, 511, 0, 435, 0, 205, 0, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 0, 373, 0, 0, 503, 405, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 326, 250, + 328, 204, 417, 504, 289, 0, 0, 0, 0, 2148, + 513, 731, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 240, 0, 0, 247, 0, 0, 0, 354, 363, + 362, 342, 343, 345, 347, 353, 360, 366, 339, 348, + 0, 0, 616, 0, 0, 0, 268, 324, 275, 267, + 587, 0, 0, 0, 0, 0, 0, 603, 0, 0, + 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2149, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 0, 406, + 260, 0, 459, 0, 0, 0, 636, 0, 0, 0, + 0, 0, 0, 0, 368, 0, 333, 199, 227, 0, + 0, 416, 467, 479, 0, 0, 0, 256, 0, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 0, + 0, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 596, 597, + 259, 659, 230, 629, 222, 0, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 358, 359, 283, + 310, 452, 378, 453, 309, 311, 408, 407, 409, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 0, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 0, 0, 429, 478, 242, + 613, 502, 201, 0, 0, 0, 0, 257, 258, 0, + 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 0, 0, + 0, 0, 0, 402, 0, 598, 599, 679, 387, 492, + 610, 338, 352, 355, 344, 364, 0, 365, 340, 341, + 346, 349, 350, 351, 356, 357, 361, 367, 251, 212, + 394, 403, 584, 315, 218, 219, 220, 530, 531, 532, + 533, 626, 627, 631, 207, 468, 469, 470, 471, 295, + 621, 312, 474, 473, 334, 335, 382, 454, 546, 548, + 559, 563, 565, 567, 573, 576, 547, 549, 560, 564, + 566, 568, 574, 577, 536, 538, 540, 542, 555, 554, + 551, 579, 580, 557, 562, 541, 553, 558, 571, 578, + 575, 535, 539, 543, 552, 570, 569, 550, 561, 572, + 556, 544, 537, 545, 0, 198, 223, 371, 0, 460, + 291, 657, 625, 490, 620, 208, 225, 0, 265, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 304, 305, 449, 450, + 317, 318, 653, 654, 303, 607, 640, 604, 652, 634, + 443, 381, 0, 0, 384, 284, 308, 323, 0, 624, + 508, 229, 472, 293, 253, 0, 0, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 400, 0, 379, 582, 583, 319, 0, 0, 0, + 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 273, 0, 0, 0, 0, 369, 270, 0, 0, 206, + 511, 0, 435, 0, 205, 0, 493, 255, 380, 377, + 590, 285, 276, 272, 252, 320, 389, 432, 524, 426, + 0, 373, 0, 0, 503, 405, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 250, 328, 204, 417, 504, + 289, 0, 0, 0, 0, 2900, 513, 731, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, + 247, 0, 0, 0, 354, 363, 362, 342, 343, 345, + 347, 353, 360, 366, 339, 348, 0, 0, 616, 0, + 0, 0, 268, 324, 275, 267, 587, 0, 0, 0, + 0, 0, 0, 603, 0, 0, 231, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2901, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 300, 0, 406, 260, 0, 459, 0, + 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, + 368, 0, 333, 199, 227, 0, 0, 416, 467, 479, + 0, 0, 0, 256, 0, 477, 430, 611, 235, 287, + 464, 437, 475, 445, 290, 0, 0, 476, 375, 592, + 455, 608, 637, 638, 266, 410, 622, 528, 630, 655, + 228, 263, 424, 512, 614, 500, 401, 588, 589, 332, + 499, 298, 203, 372, 643, 226, 485, 374, 244, 233, + 594, 619, 302, 254, 292, 462, 650, 215, 523, 605, + 241, 489, 0, 0, 658, 249, 510, 617, 606, 217, + 601, 509, 397, 329, 330, 216, 0, 463, 271, 296, + 0, 0, 261, 419, 596, 597, 259, 659, 230, 629, + 222, 0, 628, 412, 591, 602, 398, 386, 221, 600, + 396, 385, 337, 358, 359, 283, 310, 452, 378, 453, + 309, 311, 408, 407, 409, 209, 615, 633, 0, 210, + 0, 505, 618, 660, 457, 214, 236, 237, 239, 0, + 282, 286, 294, 297, 306, 307, 316, 370, 423, 451, + 447, 456, 0, 585, 609, 623, 635, 641, 642, 644, + 645, 646, 647, 648, 651, 649, 411, 314, 501, 336, + 376, 0, 0, 429, 478, 242, 613, 502, 201, 0, + 0, 0, 0, 257, 258, 0, 581, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 656, 514, 520, 515, 516, 517, + 518, 519, 0, 521, 0, 0, 0, 0, 0, 402, + 0, 598, 599, 679, 387, 492, 610, 338, 352, 355, + 344, 364, 0, 365, 340, 341, 346, 349, 350, 351, + 356, 357, 361, 367, 251, 212, 394, 403, 584, 315, + 218, 219, 220, 530, 531, 532, 533, 626, 627, 631, + 207, 468, 469, 470, 471, 295, 621, 312, 474, 473, + 334, 335, 382, 454, 546, 548, 559, 563, 565, 567, + 573, 576, 547, 549, 560, 564, 566, 568, 574, 577, + 536, 538, 540, 542, 555, 554, 551, 579, 580, 557, + 562, 541, 553, 558, 571, 578, 575, 535, 539, 543, + 552, 570, 569, 550, 561, 572, 556, 544, 537, 545, + 0, 198, 223, 371, 0, 460, 291, 657, 625, 490, + 620, 208, 225, 0, 265, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 200, 202, 211, 224, + 234, 238, 245, 264, 279, 281, 288, 301, 313, 321, + 322, 325, 331, 383, 390, 391, 392, 393, 413, 414, + 415, 418, 421, 422, 425, 427, 428, 431, 436, 440, + 441, 442, 444, 446, 448, 461, 466, 480, 481, 482, + 483, 484, 487, 488, 494, 495, 496, 497, 498, 506, + 507, 522, 593, 595, 612, 632, 639, 486, 388, 434, + 458, 586, 304, 305, 449, 450, 317, 318, 653, 654, + 303, 607, 640, 604, 652, 634, 443, 381, 0, 0, + 384, 284, 308, 323, 0, 624, 508, 229, 472, 293, + 253, 0, 0, 213, 248, 232, 262, 277, 280, 327, + 395, 404, 433, 439, 299, 274, 246, 465, 243, 491, + 525, 526, 527, 529, 399, 269, 438, 400, 0, 379, + 582, 583, 319, 0, 0, 0, 534, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, + 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, + 0, 369, 270, 0, 0, 206, 511, 0, 435, 0, + 205, 0, 493, 255, 380, 377, 590, 285, 276, 272, + 252, 320, 389, 432, 524, 426, 0, 373, 0, 0, + 503, 405, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 326, 250, 328, 204, 417, 504, 289, 0, 0, 0, + 0, 0, 513, 731, 0, 0, 0, 0, 2883, 0, + 0, 0, 0, 240, 0, 0, 247, 2884, 0, 0, + 354, 363, 362, 342, 343, 345, 347, 353, 360, 366, + 339, 348, 0, 0, 616, 0, 0, 0, 268, 324, + 275, 267, 587, 0, 0, 0, 0, 0, 0, 603, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, + 0, 406, 260, 0, 459, 0, 0, 0, 636, 0, + 0, 0, 0, 0, 0, 0, 368, 0, 333, 199, + 227, 0, 0, 416, 467, 479, 0, 0, 0, 256, + 0, 477, 430, 611, 235, 287, 464, 437, 475, 445, + 290, 0, 0, 476, 375, 592, 455, 608, 637, 638, + 266, 410, 622, 528, 630, 655, 228, 263, 424, 512, + 614, 500, 401, 588, 589, 332, 499, 298, 203, 372, + 643, 226, 485, 374, 244, 233, 594, 619, 302, 254, + 292, 462, 650, 215, 523, 605, 241, 489, 0, 0, + 658, 249, 510, 617, 606, 217, 601, 509, 397, 329, + 330, 216, 0, 463, 271, 296, 0, 0, 261, 419, + 596, 597, 259, 659, 230, 629, 222, 0, 628, 412, + 591, 602, 398, 386, 221, 600, 396, 385, 337, 358, + 359, 283, 310, 452, 378, 453, 309, 311, 408, 407, + 409, 209, 615, 633, 0, 210, 0, 505, 618, 660, + 457, 214, 236, 237, 239, 0, 282, 286, 294, 297, + 306, 307, 316, 370, 423, 451, 447, 456, 0, 585, + 609, 623, 635, 641, 642, 644, 645, 646, 647, 648, + 651, 649, 411, 314, 501, 336, 376, 0, 0, 429, + 478, 242, 613, 502, 201, 0, 0, 0, 0, 257, + 258, 0, 581, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 656, 514, 520, 515, 516, 517, 518, 519, 0, 521, + 0, 0, 0, 0, 0, 402, 0, 598, 599, 679, + 387, 492, 610, 338, 352, 355, 344, 364, 0, 365, + 340, 341, 346, 349, 350, 351, 356, 357, 361, 367, + 251, 212, 394, 403, 584, 315, 218, 219, 220, 530, + 531, 532, 533, 626, 627, 631, 207, 468, 469, 470, + 471, 295, 621, 312, 474, 473, 334, 335, 382, 454, + 546, 548, 559, 563, 565, 567, 573, 576, 547, 549, + 560, 564, 566, 568, 574, 577, 536, 538, 540, 542, + 555, 554, 551, 579, 580, 557, 562, 541, 553, 558, + 571, 578, 575, 535, 539, 543, 552, 570, 569, 550, + 561, 572, 556, 544, 537, 545, 0, 198, 223, 371, + 0, 460, 291, 657, 625, 490, 620, 208, 225, 0, + 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, + 279, 281, 288, 301, 313, 321, 322, 325, 331, 383, + 390, 391, 392, 393, 413, 414, 415, 418, 421, 422, + 425, 427, 428, 431, 436, 440, 441, 442, 444, 446, + 448, 461, 466, 480, 481, 482, 483, 484, 487, 488, + 494, 495, 496, 497, 498, 506, 507, 522, 593, 595, + 612, 632, 639, 486, 388, 434, 458, 586, 304, 305, + 449, 450, 317, 318, 653, 654, 303, 607, 640, 604, + 652, 634, 443, 381, 0, 0, 384, 284, 308, 323, + 0, 624, 508, 229, 472, 293, 253, 0, 0, 213, + 248, 232, 262, 277, 280, 327, 395, 404, 433, 439, + 299, 274, 246, 465, 243, 491, 525, 526, 527, 529, + 399, 269, 438, 400, 0, 379, 582, 583, 319, 0, + 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 273, 1815, 0, 0, 0, 369, 270, 0, + 0, 206, 511, 0, 435, 0, 205, 0, 493, 255, + 380, 377, 590, 285, 276, 272, 252, 320, 389, 432, + 524, 426, 0, 373, 0, 0, 503, 405, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 326, 250, 328, 204, + 417, 504, 289, 0, 0, 0, 0, 1814, 513, 731, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, + 0, 0, 247, 0, 0, 0, 354, 363, 362, 342, + 343, 345, 347, 353, 360, 366, 339, 348, 0, 0, + 616, 0, 0, 0, 268, 324, 275, 267, 587, 0, + 0, 0, 0, 0, 0, 603, 0, 0, 231, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 300, 0, 406, 260, 0, + 459, 0, 0, 0, 636, 0, 0, 0, 0, 0, + 0, 0, 368, 0, 333, 199, 227, 0, 0, 416, + 467, 479, 0, 0, 0, 256, 0, 477, 430, 611, + 235, 287, 464, 437, 475, 445, 290, 0, 0, 476, + 375, 592, 455, 608, 637, 638, 266, 410, 622, 528, + 630, 655, 228, 263, 424, 512, 614, 500, 401, 588, + 589, 332, 499, 298, 203, 372, 643, 226, 485, 374, + 244, 233, 594, 619, 302, 254, 292, 462, 650, 215, + 523, 605, 241, 489, 0, 0, 658, 249, 510, 617, + 606, 217, 601, 509, 397, 329, 330, 216, 0, 463, + 271, 296, 0, 0, 261, 419, 596, 597, 259, 659, + 230, 629, 222, 0, 628, 412, 591, 602, 398, 386, + 221, 600, 396, 385, 337, 358, 359, 283, 310, 452, + 378, 453, 309, 311, 408, 407, 409, 209, 615, 633, + 0, 210, 0, 505, 618, 660, 457, 214, 236, 237, + 239, 0, 282, 286, 294, 297, 306, 307, 316, 370, + 423, 451, 447, 456, 0, 585, 609, 623, 635, 641, + 642, 644, 645, 646, 647, 648, 651, 649, 411, 314, + 501, 336, 376, 0, 0, 429, 478, 242, 613, 502, + 201, 0, 0, 0, 0, 257, 258, 0, 581, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 656, 514, 520, 515, + 516, 517, 518, 519, 0, 521, 0, 0, 0, 0, + 0, 402, 0, 598, 599, 679, 387, 492, 610, 338, + 352, 355, 344, 364, 0, 365, 340, 341, 346, 349, + 350, 351, 356, 357, 361, 367, 251, 212, 394, 403, + 584, 315, 218, 219, 220, 530, 531, 532, 533, 626, + 627, 631, 207, 468, 469, 470, 471, 295, 621, 312, + 474, 473, 334, 335, 382, 454, 546, 548, 559, 563, + 565, 567, 573, 576, 547, 549, 560, 564, 566, 568, + 574, 577, 536, 538, 540, 542, 555, 554, 551, 579, + 580, 557, 562, 541, 553, 558, 571, 578, 575, 535, + 539, 543, 552, 570, 569, 550, 561, 572, 556, 544, + 537, 545, 0, 198, 223, 371, 0, 460, 291, 657, + 625, 490, 620, 208, 225, 0, 265, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 200, 202, + 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, + 313, 321, 322, 325, 331, 383, 390, 391, 392, 393, + 413, 414, 415, 418, 421, 422, 425, 427, 428, 431, + 436, 440, 441, 442, 444, 446, 448, 461, 466, 480, + 481, 482, 483, 484, 487, 488, 494, 495, 496, 497, + 498, 506, 507, 522, 593, 595, 612, 632, 639, 486, + 388, 434, 458, 586, 304, 305, 449, 450, 317, 318, + 653, 654, 303, 607, 640, 604, 652, 634, 443, 381, + 0, 0, 384, 284, 308, 323, 0, 624, 508, 229, + 472, 293, 253, 0, 0, 213, 248, 232, 262, 277, + 280, 327, 395, 404, 433, 439, 299, 274, 246, 465, + 243, 491, 525, 526, 527, 529, 399, 269, 438, 400, + 0, 379, 582, 583, 319, 0, 0, 0, 534, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 420, 0, 0, 0, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 369, 270, 0, 0, 206, 511, 0, + 435, 0, 205, 0, 493, 255, 380, 377, 590, 285, + 276, 272, 252, 320, 389, 432, 524, 426, 0, 373, + 0, 0, 503, 405, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 326, 250, 328, 204, 417, 504, 289, 0, + 0, 0, 0, 0, 513, 733, 734, 735, 0, 0, + 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, + 0, 0, 354, 363, 362, 342, 343, 345, 347, 353, + 360, 366, 339, 348, 0, 0, 616, 0, 0, 0, + 268, 324, 275, 267, 587, 0, 0, 0, 0, 0, + 0, 603, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 300, 0, 406, 260, 0, 459, 0, 0, 0, + 636, 0, 0, 0, 0, 0, 0, 0, 368, 0, + 333, 199, 227, 0, 0, 416, 467, 479, 0, 0, + 0, 256, 0, 477, 430, 611, 235, 287, 464, 437, + 475, 445, 290, 0, 0, 476, 375, 592, 455, 608, + 637, 638, 266, 410, 622, 528, 630, 655, 228, 263, + 424, 512, 614, 500, 401, 588, 589, 332, 499, 298, + 203, 372, 643, 226, 485, 374, 244, 233, 594, 619, + 302, 254, 292, 462, 650, 215, 523, 605, 241, 489, + 0, 0, 658, 249, 510, 617, 606, 217, 601, 509, + 397, 329, 330, 216, 0, 463, 271, 296, 0, 0, + 261, 419, 596, 597, 259, 659, 230, 629, 222, 0, + 628, 412, 591, 602, 398, 386, 221, 600, 396, 385, + 337, 358, 359, 283, 310, 452, 378, 453, 309, 311, + 408, 407, 409, 209, 615, 633, 0, 210, 0, 505, + 618, 660, 457, 214, 236, 237, 239, 0, 282, 286, + 294, 297, 306, 307, 316, 370, 423, 451, 447, 456, + 0, 585, 609, 623, 635, 641, 642, 644, 645, 646, + 647, 648, 651, 649, 411, 314, 501, 336, 376, 0, + 0, 429, 478, 242, 613, 502, 201, 0, 0, 0, + 0, 257, 258, 0, 581, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 656, 514, 520, 515, 516, 517, 518, 519, + 0, 521, 0, 0, 0, 0, 0, 402, 0, 598, + 599, 679, 387, 492, 610, 338, 352, 355, 344, 364, + 0, 365, 340, 341, 346, 349, 350, 351, 356, 357, + 361, 367, 251, 212, 394, 403, 584, 315, 218, 219, + 220, 530, 531, 532, 533, 626, 627, 631, 207, 468, + 469, 470, 471, 295, 621, 312, 474, 473, 334, 335, + 382, 454, 546, 548, 559, 563, 565, 567, 573, 576, + 547, 549, 560, 564, 566, 568, 574, 577, 536, 538, + 540, 542, 555, 554, 551, 579, 580, 557, 562, 541, + 553, 558, 571, 578, 575, 535, 539, 543, 552, 570, + 569, 550, 561, 572, 556, 544, 537, 545, 0, 198, + 223, 371, 0, 460, 291, 657, 625, 490, 620, 208, + 225, 0, 265, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 200, 202, 211, 224, 234, 238, + 245, 264, 279, 281, 288, 301, 313, 321, 322, 325, + 331, 383, 390, 391, 392, 393, 413, 414, 415, 418, + 421, 422, 425, 427, 428, 431, 436, 440, 441, 442, + 444, 446, 448, 461, 466, 480, 481, 482, 483, 484, + 487, 488, 494, 495, 496, 497, 498, 506, 507, 522, + 593, 595, 612, 632, 639, 486, 388, 434, 458, 586, + 304, 305, 449, 450, 317, 318, 653, 654, 303, 607, + 640, 604, 652, 634, 443, 381, 0, 0, 384, 284, + 308, 323, 0, 624, 508, 229, 472, 293, 253, 0, + 0, 213, 248, 232, 262, 277, 280, 327, 395, 404, + 433, 439, 299, 274, 246, 465, 243, 491, 525, 526, + 527, 529, 399, 269, 438, 400, 0, 379, 582, 583, + 319, 0, 0, 0, 534, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 0, 0, 0, 273, 0, 0, 0, 0, 369, + 270, 0, 0, 206, 511, 0, 435, 0, 205, 0, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 0, 373, 0, 0, 503, 405, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 326, 250, + 328, 204, 417, 504, 289, 0, 0, 0, 0, 0, + 513, 731, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 240, 0, 0, 247, 0, 0, 0, 354, 363, + 362, 342, 343, 345, 347, 353, 360, 366, 339, 348, + 0, 0, 616, 0, 0, 0, 268, 324, 275, 267, + 587, 0, 0, 0, 0, 0, 0, 603, 0, 0, + 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 0, 406, + 260, 0, 459, 0, 0, 0, 636, 0, 0, 0, + 4092, 0, 0, 0, 368, 0, 333, 199, 227, 0, + 0, 416, 467, 479, 0, 0, 0, 256, 0, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 0, + 0, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 596, 597, + 259, 659, 230, 629, 222, 0, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 358, 359, 283, + 310, 452, 378, 453, 309, 311, 408, 407, 409, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 0, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 0, 0, 429, 478, 242, + 613, 502, 201, 0, 0, 0, 0, 257, 258, 0, + 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 0, 0, + 0, 0, 0, 402, 0, 598, 599, 679, 387, 492, + 610, 338, 352, 355, 344, 364, 0, 365, 340, 341, + 346, 349, 350, 351, 356, 357, 361, 367, 251, 212, + 394, 403, 584, 315, 218, 219, 220, 530, 531, 532, + 533, 626, 627, 631, 207, 468, 469, 470, 471, 295, + 621, 312, 474, 473, 334, 335, 382, 454, 546, 548, + 559, 563, 565, 567, 573, 576, 547, 549, 560, 564, + 566, 568, 574, 577, 536, 538, 540, 542, 555, 554, + 551, 579, 580, 557, 562, 541, 553, 558, 571, 578, + 575, 535, 539, 543, 552, 570, 569, 550, 561, 572, + 556, 544, 537, 545, 0, 198, 223, 371, 0, 460, + 291, 657, 625, 490, 620, 208, 225, 0, 265, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 304, 305, 449, 450, + 317, 318, 653, 654, 303, 607, 640, 604, 652, 634, + 443, 381, 0, 0, 384, 284, 308, 323, 0, 624, + 508, 229, 472, 293, 253, 0, 0, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 400, 0, 379, 582, 583, 319, 0, 0, 0, + 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 273, 0, 0, 0, 0, 369, 270, 0, 0, 206, + 511, 0, 435, 0, 205, 0, 493, 255, 380, 377, + 590, 285, 276, 272, 252, 320, 389, 432, 524, 426, + 0, 373, 0, 0, 503, 405, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 250, 328, 204, 417, 504, + 289, 0, 0, 0, 0, 1977, 513, 196, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, + 247, 0, 0, 0, 354, 363, 362, 342, 343, 345, + 347, 353, 360, 366, 339, 348, 0, 0, 616, 0, + 0, 0, 268, 324, 275, 267, 587, 0, 0, 0, + 0, 0, 0, 603, 0, 0, 231, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 300, 0, 406, 260, 0, 459, 0, + 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, + 368, 0, 333, 199, 227, 0, 0, 416, 467, 479, + 0, 0, 0, 256, 0, 477, 430, 611, 235, 287, + 464, 437, 475, 445, 290, 0, 0, 476, 375, 592, + 455, 608, 637, 638, 266, 410, 622, 528, 630, 655, + 228, 263, 424, 512, 614, 500, 401, 588, 589, 332, + 499, 298, 203, 372, 643, 226, 485, 374, 244, 233, + 594, 619, 302, 254, 292, 462, 650, 215, 523, 605, + 241, 489, 0, 0, 658, 249, 510, 617, 606, 217, + 601, 509, 397, 329, 330, 216, 0, 463, 271, 296, + 0, 0, 261, 419, 596, 597, 259, 659, 230, 629, + 222, 0, 628, 412, 591, 602, 398, 386, 221, 600, + 396, 385, 337, 358, 359, 283, 310, 452, 378, 453, + 309, 311, 408, 407, 409, 209, 615, 633, 0, 210, + 0, 505, 618, 660, 457, 214, 236, 237, 239, 0, + 282, 286, 294, 297, 306, 307, 316, 370, 423, 451, + 447, 456, 0, 585, 609, 623, 635, 641, 642, 644, + 645, 646, 647, 648, 651, 649, 411, 314, 501, 336, + 376, 0, 0, 429, 478, 242, 613, 502, 201, 0, + 0, 0, 0, 257, 258, 0, 581, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 656, 514, 520, 515, 516, 517, + 518, 519, 0, 521, 0, 0, 0, 0, 0, 402, + 0, 598, 599, 679, 387, 492, 610, 338, 352, 355, + 344, 364, 0, 365, 340, 341, 346, 349, 350, 351, + 356, 357, 361, 367, 251, 212, 394, 403, 584, 315, + 218, 219, 220, 530, 531, 532, 533, 626, 627, 631, + 207, 468, 469, 470, 471, 295, 621, 312, 474, 473, + 334, 335, 382, 454, 546, 548, 559, 563, 565, 567, + 573, 576, 547, 549, 560, 564, 566, 568, 574, 577, + 536, 538, 540, 542, 555, 554, 551, 579, 580, 557, + 562, 541, 553, 558, 571, 578, 575, 535, 539, 543, + 552, 570, 569, 550, 561, 572, 556, 544, 537, 545, + 0, 198, 223, 371, 0, 460, 291, 657, 625, 490, + 620, 208, 225, 0, 265, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 200, 202, 211, 224, + 234, 238, 245, 264, 279, 281, 288, 301, 313, 321, + 322, 325, 331, 383, 390, 391, 392, 393, 413, 414, + 415, 418, 421, 422, 425, 427, 428, 431, 436, 440, + 441, 442, 444, 446, 448, 461, 466, 480, 481, 482, + 483, 484, 487, 488, 494, 495, 496, 497, 498, 506, + 507, 522, 593, 595, 612, 632, 639, 486, 388, 434, + 458, 586, 304, 305, 449, 450, 317, 318, 653, 654, + 303, 607, 640, 604, 652, 634, 443, 381, 0, 0, + 384, 284, 308, 323, 0, 624, 508, 229, 472, 293, + 253, 0, 0, 213, 248, 232, 262, 277, 280, 327, + 395, 404, 433, 439, 299, 274, 246, 465, 243, 491, + 525, 526, 527, 529, 399, 269, 438, 400, 0, 379, + 582, 583, 319, 0, 0, 0, 534, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, + 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, + 0, 369, 270, 0, 0, 206, 511, 0, 435, 0, + 205, 0, 493, 255, 380, 377, 590, 285, 276, 272, + 252, 320, 389, 432, 524, 426, 0, 373, 0, 0, + 503, 405, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 326, 250, 328, 204, 417, 504, 289, 0, 0, 0, + 0, 0, 513, 731, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, + 354, 363, 362, 342, 343, 345, 347, 353, 360, 366, + 339, 348, 0, 0, 616, 0, 0, 0, 268, 324, + 275, 267, 587, 0, 0, 0, 0, 0, 0, 603, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, + 0, 406, 260, 0, 459, 0, 0, 0, 636, 0, + 0, 0, 3748, 0, 0, 0, 368, 0, 333, 199, + 227, 0, 0, 416, 467, 479, 0, 0, 0, 256, + 0, 477, 430, 611, 235, 287, 464, 437, 475, 445, + 290, 0, 0, 476, 375, 592, 455, 608, 637, 638, + 266, 410, 622, 528, 630, 655, 228, 263, 424, 512, + 614, 500, 401, 588, 589, 332, 499, 298, 203, 372, + 643, 226, 485, 374, 244, 233, 594, 619, 302, 254, + 292, 462, 650, 215, 523, 605, 241, 489, 0, 0, + 658, 249, 510, 617, 606, 217, 601, 509, 397, 329, + 330, 216, 0, 463, 271, 296, 0, 0, 261, 419, + 596, 597, 259, 659, 230, 629, 222, 0, 628, 412, + 591, 602, 398, 386, 221, 600, 396, 385, 337, 358, + 359, 283, 310, 452, 378, 453, 309, 311, 408, 407, + 409, 209, 615, 633, 0, 210, 0, 505, 618, 660, + 457, 214, 236, 237, 239, 0, 282, 286, 294, 297, + 306, 307, 316, 370, 423, 451, 447, 456, 0, 585, + 609, 623, 635, 641, 642, 644, 645, 646, 647, 648, + 651, 649, 411, 314, 501, 336, 376, 0, 0, 429, + 478, 242, 613, 502, 201, 0, 0, 0, 0, 257, + 258, 0, 581, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 656, 514, 520, 515, 516, 517, 518, 519, 0, 521, + 0, 0, 0, 0, 0, 402, 0, 598, 599, 679, + 387, 492, 610, 338, 352, 355, 344, 364, 0, 365, + 340, 341, 346, 349, 350, 351, 356, 357, 361, 367, + 251, 212, 394, 403, 584, 315, 218, 219, 220, 530, + 531, 532, 533, 626, 627, 631, 207, 468, 469, 470, + 471, 295, 621, 312, 474, 473, 334, 335, 382, 454, + 546, 548, 559, 563, 565, 567, 573, 576, 547, 549, + 560, 564, 566, 568, 574, 577, 536, 538, 540, 542, + 555, 554, 551, 579, 580, 557, 562, 541, 553, 558, + 571, 578, 575, 535, 539, 543, 552, 570, 569, 550, + 561, 572, 556, 544, 537, 545, 0, 198, 223, 371, + 0, 460, 291, 657, 625, 490, 620, 208, 225, 0, + 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, + 279, 281, 288, 301, 313, 321, 322, 325, 331, 383, + 390, 391, 392, 393, 413, 414, 415, 418, 421, 422, + 425, 427, 428, 431, 436, 440, 441, 442, 444, 446, + 448, 461, 466, 480, 481, 482, 483, 484, 487, 488, + 494, 495, 496, 497, 498, 506, 507, 522, 593, 595, + 612, 632, 639, 486, 388, 434, 458, 586, 304, 305, + 449, 450, 317, 318, 653, 654, 303, 607, 640, 604, + 652, 634, 443, 381, 0, 0, 384, 284, 308, 323, + 0, 624, 508, 229, 472, 293, 253, 0, 0, 213, + 248, 232, 262, 277, 280, 327, 395, 404, 433, 439, + 299, 274, 246, 465, 243, 491, 525, 526, 527, 529, + 399, 269, 438, 400, 0, 379, 582, 583, 319, 0, + 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 369, 270, 0, + 0, 206, 511, 0, 435, 0, 205, 0, 493, 255, + 380, 377, 590, 285, 276, 272, 252, 320, 389, 432, + 524, 426, 0, 373, 0, 0, 503, 405, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 326, 250, 328, 204, + 417, 504, 289, 0, 95, 0, 0, 0, 513, 731, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, + 0, 0, 247, 0, 0, 0, 354, 363, 362, 342, + 343, 345, 347, 353, 360, 366, 339, 348, 0, 0, + 616, 0, 0, 0, 268, 324, 275, 267, 587, 0, + 0, 0, 0, 0, 0, 603, 0, 0, 231, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 300, 0, 406, 260, 0, + 459, 0, 0, 0, 636, 0, 0, 0, 0, 0, + 0, 0, 368, 0, 333, 199, 227, 0, 0, 416, + 467, 479, 0, 0, 0, 256, 0, 477, 430, 611, + 235, 287, 464, 437, 475, 445, 290, 0, 0, 476, + 375, 592, 455, 608, 637, 638, 266, 410, 622, 528, + 630, 655, 228, 263, 424, 512, 614, 500, 401, 588, + 589, 332, 499, 298, 203, 372, 643, 226, 485, 374, + 244, 233, 594, 619, 302, 254, 292, 462, 650, 215, + 523, 605, 241, 489, 0, 0, 658, 249, 510, 617, + 606, 217, 601, 509, 397, 329, 330, 216, 0, 463, + 271, 296, 0, 0, 261, 419, 596, 597, 259, 659, + 230, 629, 222, 0, 628, 412, 591, 602, 398, 386, + 221, 600, 396, 385, 337, 358, 359, 283, 310, 452, + 378, 453, 309, 311, 408, 407, 409, 209, 615, 633, + 0, 210, 0, 505, 618, 660, 457, 214, 236, 237, + 239, 0, 282, 286, 294, 297, 306, 307, 316, 370, + 423, 451, 447, 456, 0, 585, 609, 623, 635, 641, + 642, 644, 645, 646, 647, 648, 651, 649, 411, 314, + 501, 336, 376, 0, 0, 429, 478, 242, 613, 502, + 201, 0, 0, 0, 0, 257, 258, 0, 581, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 656, 514, 520, 515, + 516, 517, 518, 519, 0, 521, 0, 0, 0, 0, + 0, 402, 0, 598, 599, 679, 387, 492, 610, 338, + 352, 355, 344, 364, 0, 365, 340, 341, 346, 349, + 350, 351, 356, 357, 361, 367, 251, 212, 394, 403, + 584, 315, 218, 219, 220, 530, 531, 532, 533, 626, + 627, 631, 207, 468, 469, 470, 471, 295, 621, 312, + 474, 473, 334, 335, 382, 454, 546, 548, 559, 563, + 565, 567, 573, 576, 547, 549, 560, 564, 566, 568, + 574, 577, 536, 538, 540, 542, 555, 554, 551, 579, + 580, 557, 562, 541, 553, 558, 571, 578, 575, 535, + 539, 543, 552, 570, 569, 550, 561, 572, 556, 544, + 537, 545, 0, 198, 223, 371, 0, 460, 291, 657, + 625, 490, 620, 208, 225, 0, 265, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 200, 202, + 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, + 313, 321, 322, 325, 331, 383, 390, 391, 392, 393, + 413, 414, 415, 418, 421, 422, 425, 427, 428, 431, + 436, 440, 441, 442, 444, 446, 448, 461, 466, 480, + 481, 482, 483, 484, 487, 488, 494, 495, 496, 497, + 498, 506, 507, 522, 593, 595, 612, 632, 639, 486, + 388, 434, 458, 586, 304, 305, 449, 450, 317, 318, + 653, 654, 303, 607, 640, 604, 652, 634, 443, 381, + 0, 0, 384, 284, 308, 323, 0, 624, 508, 229, + 472, 293, 253, 0, 0, 213, 248, 232, 262, 277, + 280, 327, 395, 404, 433, 439, 299, 274, 246, 465, + 243, 491, 525, 526, 527, 529, 399, 269, 438, 400, + 0, 379, 582, 583, 319, 0, 0, 0, 534, 0, + 0, 0, 0, 2445, 0, 0, 0, 0, 0, 0, + 420, 0, 0, 0, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 369, 270, 0, 0, 206, 511, 0, + 435, 0, 205, 0, 493, 255, 380, 377, 590, 285, + 276, 272, 252, 320, 389, 432, 524, 426, 0, 373, + 0, 0, 503, 405, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 326, 250, 328, 204, 417, 504, 289, 0, + 0, 0, 0, 0, 513, 196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, + 0, 0, 354, 363, 362, 342, 343, 345, 347, 353, + 360, 366, 339, 348, 0, 0, 616, 0, 0, 0, + 268, 324, 275, 267, 587, 0, 0, 0, 0, 0, + 0, 603, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 300, 0, 406, 260, 0, 459, 0, 0, 0, + 636, 0, 0, 0, 0, 0, 0, 0, 368, 0, + 333, 199, 227, 0, 0, 416, 467, 479, 0, 0, + 0, 256, 0, 477, 430, 611, 235, 287, 464, 437, + 475, 445, 290, 0, 0, 476, 375, 592, 455, 608, + 637, 638, 266, 410, 622, 528, 630, 655, 228, 263, + 424, 512, 614, 500, 401, 588, 589, 332, 499, 298, + 203, 372, 643, 226, 485, 374, 244, 233, 594, 619, + 302, 254, 292, 462, 650, 215, 523, 605, 241, 489, + 0, 0, 658, 249, 510, 617, 606, 217, 601, 509, + 397, 329, 330, 216, 0, 463, 271, 296, 0, 0, + 261, 419, 596, 597, 259, 659, 230, 629, 222, 0, + 628, 412, 591, 602, 398, 386, 221, 600, 396, 385, + 337, 358, 359, 283, 310, 452, 378, 453, 309, 311, + 408, 407, 409, 209, 615, 633, 0, 210, 0, 505, + 618, 660, 457, 214, 236, 237, 239, 0, 282, 286, + 294, 297, 306, 307, 316, 370, 423, 451, 447, 456, + 0, 585, 609, 623, 635, 641, 642, 644, 645, 646, + 647, 648, 651, 649, 411, 314, 501, 336, 376, 0, + 0, 429, 478, 242, 613, 502, 201, 0, 0, 0, + 0, 257, 258, 0, 581, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 656, 514, 520, 515, 516, 517, 518, 519, + 0, 521, 0, 0, 0, 0, 0, 402, 0, 598, + 599, 679, 387, 492, 610, 338, 352, 355, 344, 364, + 0, 365, 340, 341, 346, 349, 350, 351, 356, 357, + 361, 367, 251, 212, 394, 403, 584, 315, 218, 219, + 220, 530, 531, 532, 533, 626, 627, 631, 207, 468, + 469, 470, 471, 295, 621, 312, 474, 473, 334, 335, + 382, 454, 546, 548, 559, 563, 565, 567, 573, 576, + 547, 549, 560, 564, 566, 568, 574, 577, 536, 538, + 540, 542, 555, 554, 551, 579, 580, 557, 562, 541, + 553, 558, 571, 578, 575, 535, 539, 543, 552, 570, + 569, 550, 561, 572, 556, 544, 537, 545, 0, 198, + 223, 371, 0, 460, 291, 657, 625, 490, 620, 208, + 225, 0, 265, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 200, 202, 211, 224, 234, 238, + 245, 264, 279, 281, 288, 301, 313, 321, 322, 325, + 331, 383, 390, 391, 392, 393, 413, 414, 415, 418, + 421, 422, 425, 427, 428, 431, 436, 440, 441, 442, + 444, 446, 448, 461, 466, 480, 481, 482, 483, 484, + 487, 488, 494, 495, 496, 497, 498, 506, 507, 522, + 593, 595, 612, 632, 639, 486, 388, 434, 458, 586, + 304, 305, 449, 450, 317, 318, 653, 654, 303, 607, + 640, 604, 652, 634, 443, 381, 0, 0, 384, 284, + 308, 323, 0, 624, 508, 229, 472, 293, 253, 0, + 0, 213, 248, 232, 262, 277, 280, 327, 395, 404, + 433, 439, 299, 274, 246, 465, 243, 491, 525, 526, + 527, 529, 399, 269, 438, 400, 0, 379, 582, 583, + 319, 0, 0, 0, 534, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 0, 0, 0, 273, 0, 0, 0, 0, 369, + 270, 0, 0, 206, 511, 0, 435, 0, 205, 0, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 0, 373, 0, 0, 503, 405, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 326, 250, + 328, 204, 417, 504, 289, 0, 0, 0, 0, 1796, + 513, 731, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 240, 0, 0, 247, 0, 0, 0, 354, 363, + 362, 342, 343, 345, 347, 353, 360, 366, 339, 348, + 0, 0, 616, 0, 0, 0, 268, 324, 275, 267, + 587, 0, 0, 0, 0, 0, 0, 603, 0, 0, + 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 0, 406, + 260, 0, 459, 0, 0, 0, 636, 0, 0, 0, + 0, 0, 0, 0, 368, 0, 333, 199, 227, 0, + 0, 416, 467, 479, 0, 0, 0, 256, 0, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 0, + 0, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 596, 597, + 259, 659, 230, 629, 222, 0, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 358, 359, 283, + 310, 452, 378, 453, 309, 311, 408, 407, 409, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 0, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 0, 0, 429, 478, 242, + 613, 502, 201, 0, 0, 0, 0, 257, 258, 0, + 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 0, 0, + 0, 0, 0, 402, 0, 598, 599, 679, 387, 492, + 610, 338, 352, 355, 344, 364, 0, 365, 340, 341, + 346, 349, 350, 351, 356, 357, 361, 367, 251, 212, + 394, 403, 584, 315, 218, 219, 220, 530, 531, 532, + 533, 626, 627, 631, 207, 468, 469, 470, 471, 295, + 621, 312, 474, 473, 334, 335, 382, 454, 546, 548, + 559, 563, 565, 567, 573, 576, 547, 549, 560, 564, + 566, 568, 574, 577, 536, 538, 540, 542, 555, 554, + 551, 579, 580, 557, 562, 541, 553, 558, 571, 578, + 575, 535, 539, 543, 552, 570, 569, 550, 561, 572, + 556, 544, 537, 545, 0, 198, 223, 371, 0, 460, + 291, 657, 625, 490, 620, 208, 225, 0, 265, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 304, 305, 449, 450, + 317, 318, 653, 654, 303, 607, 640, 604, 652, 634, + 443, 381, 0, 0, 384, 284, 308, 323, 0, 624, + 508, 229, 472, 293, 253, 0, 0, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 400, 0, 379, 582, 583, 319, 0, 0, 0, + 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 273, 0, 0, 0, 0, 369, 270, 0, 0, 206, + 511, 0, 435, 0, 205, 0, 493, 255, 380, 377, + 590, 285, 276, 272, 252, 320, 389, 432, 524, 426, + 0, 373, 0, 0, 503, 405, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 250, 328, 204, 417, 504, + 289, 0, 0, 0, 0, 0, 513, 196, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, + 247, 0, 0, 0, 354, 363, 362, 342, 343, 345, + 347, 353, 360, 366, 339, 348, 0, 0, 616, 0, + 0, 0, 268, 324, 275, 267, 587, 0, 0, 0, + 0, 0, 0, 603, 0, 0, 231, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 300, 0, 406, 260, 0, 459, 0, + 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, + 368, 0, 333, 199, 227, 0, 0, 416, 467, 479, + 0, 0, 0, 256, 0, 477, 430, 611, 235, 287, + 464, 437, 475, 445, 290, 0, 0, 476, 375, 592, + 455, 608, 637, 638, 266, 410, 622, 528, 630, 655, + 228, 263, 424, 512, 614, 500, 401, 588, 589, 332, + 499, 298, 203, 372, 643, 226, 485, 374, 244, 233, + 594, 619, 302, 254, 292, 462, 650, 215, 523, 605, + 241, 489, 0, 0, 658, 249, 510, 617, 606, 217, + 601, 509, 397, 329, 330, 216, 0, 463, 271, 296, + 0, 0, 261, 419, 596, 597, 259, 659, 230, 629, + 222, 0, 628, 412, 591, 602, 398, 386, 221, 600, + 396, 385, 337, 358, 359, 283, 310, 452, 378, 453, + 309, 311, 408, 407, 409, 209, 615, 633, 0, 210, + 0, 505, 618, 660, 457, 214, 236, 237, 239, 0, + 282, 286, 294, 297, 306, 307, 316, 370, 423, 451, + 447, 456, 0, 585, 609, 623, 635, 641, 642, 644, + 645, 646, 647, 648, 651, 649, 411, 314, 501, 336, + 376, 0, 0, 429, 478, 242, 613, 502, 201, 0, + 0, 0, 0, 257, 258, 0, 581, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 656, 514, 520, 515, 516, 517, + 518, 519, 0, 521, 0, 0, 0, 0, 0, 402, + 0, 598, 599, 679, 387, 492, 610, 338, 352, 355, + 344, 364, 0, 365, 340, 341, 346, 349, 350, 351, + 356, 357, 361, 367, 251, 212, 394, 403, 584, 315, + 218, 219, 220, 530, 531, 532, 533, 626, 627, 631, + 207, 468, 469, 470, 471, 295, 621, 312, 474, 473, + 334, 335, 382, 454, 546, 548, 559, 563, 565, 567, + 573, 576, 547, 549, 560, 564, 566, 568, 574, 577, + 536, 538, 540, 542, 555, 554, 551, 579, 580, 557, + 562, 541, 553, 558, 571, 578, 575, 535, 539, 543, + 552, 570, 569, 550, 561, 572, 556, 544, 537, 545, + 0, 198, 223, 371, 2095, 460, 291, 657, 625, 490, + 620, 208, 225, 0, 265, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 200, 202, 211, 224, + 234, 238, 245, 264, 279, 281, 288, 301, 313, 321, + 322, 325, 331, 383, 390, 391, 392, 393, 413, 414, + 415, 418, 421, 422, 425, 427, 428, 431, 436, 440, + 441, 442, 444, 446, 448, 461, 466, 480, 481, 482, + 483, 484, 487, 488, 494, 495, 496, 497, 498, 506, + 507, 522, 593, 595, 612, 632, 639, 486, 388, 434, + 458, 586, 304, 305, 449, 450, 317, 318, 653, 654, + 303, 607, 640, 604, 652, 634, 443, 381, 0, 0, + 384, 284, 308, 323, 0, 624, 508, 229, 472, 293, + 253, 0, 0, 213, 248, 232, 262, 277, 280, 327, + 395, 404, 433, 439, 299, 274, 246, 465, 243, 491, + 525, 526, 527, 529, 399, 269, 438, 400, 0, 379, + 582, 583, 319, 0, 0, 0, 534, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, + 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, + 0, 369, 270, 0, 0, 206, 511, 0, 435, 0, + 205, 0, 493, 255, 380, 377, 590, 285, 276, 272, + 252, 320, 389, 432, 524, 426, 0, 373, 0, 0, + 503, 405, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 326, 250, 328, 204, 417, 504, 289, 0, 0, 0, + 0, 2086, 513, 731, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, + 354, 363, 362, 342, 343, 345, 347, 353, 360, 366, + 339, 348, 0, 0, 616, 0, 0, 0, 268, 324, + 275, 267, 587, 0, 0, 0, 0, 0, 0, 603, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, + 0, 406, 260, 0, 459, 0, 0, 0, 636, 0, + 0, 0, 0, 0, 0, 0, 368, 0, 333, 199, + 227, 0, 0, 416, 467, 479, 0, 0, 0, 256, + 0, 477, 430, 611, 235, 287, 464, 437, 475, 445, + 290, 0, 0, 476, 375, 592, 455, 608, 637, 638, + 266, 410, 622, 528, 630, 655, 228, 263, 424, 512, + 614, 500, 401, 588, 589, 332, 499, 298, 203, 372, + 643, 226, 485, 374, 244, 233, 594, 619, 302, 254, + 292, 462, 650, 215, 523, 605, 241, 489, 0, 0, + 658, 249, 510, 617, 606, 217, 601, 509, 397, 329, + 330, 216, 0, 463, 271, 296, 0, 0, 261, 419, + 596, 597, 259, 659, 230, 629, 222, 0, 628, 412, + 591, 602, 398, 386, 221, 600, 396, 385, 337, 358, + 359, 283, 310, 452, 378, 453, 309, 311, 408, 407, + 409, 209, 615, 633, 0, 210, 0, 505, 618, 660, + 457, 214, 236, 237, 239, 0, 282, 286, 294, 297, + 306, 307, 316, 370, 423, 451, 447, 456, 0, 585, + 609, 623, 635, 641, 642, 644, 645, 646, 647, 648, + 651, 649, 411, 314, 501, 336, 376, 0, 0, 429, + 478, 242, 613, 502, 201, 0, 0, 0, 0, 257, + 258, 0, 581, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 656, 514, 520, 515, 516, 517, 518, 519, 0, 521, + 0, 0, 0, 0, 0, 402, 0, 598, 599, 679, + 387, 492, 610, 338, 352, 355, 344, 364, 0, 365, + 340, 341, 346, 349, 350, 351, 356, 357, 361, 367, + 251, 212, 394, 403, 584, 315, 218, 219, 220, 530, + 531, 532, 533, 626, 627, 631, 207, 468, 469, 470, + 471, 295, 621, 312, 474, 473, 334, 335, 382, 454, + 546, 548, 559, 563, 565, 567, 573, 576, 547, 549, + 560, 564, 566, 568, 574, 577, 536, 538, 540, 542, + 555, 554, 551, 579, 580, 557, 562, 541, 553, 558, + 571, 578, 575, 535, 539, 543, 552, 570, 569, 550, + 561, 572, 556, 544, 537, 545, 0, 198, 223, 371, + 0, 460, 291, 657, 625, 490, 620, 208, 225, 0, + 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, + 279, 281, 288, 301, 313, 321, 322, 325, 331, 383, + 390, 391, 392, 393, 413, 414, 415, 418, 421, 422, + 425, 427, 428, 431, 436, 440, 441, 442, 444, 446, + 448, 461, 466, 480, 481, 482, 483, 484, 487, 488, + 494, 495, 496, 497, 498, 506, 507, 522, 593, 595, + 612, 632, 639, 486, 388, 434, 458, 586, 304, 305, + 449, 450, 317, 318, 653, 654, 303, 607, 640, 604, + 652, 634, 443, 381, 0, 0, 384, 284, 308, 323, + 0, 624, 508, 229, 472, 293, 253, 0, 0, 213, + 248, 232, 262, 277, 280, 327, 395, 404, 433, 439, + 299, 274, 246, 465, 243, 491, 525, 526, 527, 529, + 399, 269, 438, 400, 0, 379, 582, 583, 319, 0, + 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 369, 270, 0, + 1944, 206, 511, 0, 435, 0, 205, 0, 493, 255, + 380, 377, 590, 285, 276, 272, 252, 320, 389, 432, + 524, 426, 0, 373, 0, 0, 503, 405, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 326, 250, 328, 204, + 417, 504, 289, 0, 0, 0, 0, 0, 513, 731, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, + 0, 0, 247, 0, 0, 0, 354, 363, 362, 342, + 343, 345, 347, 353, 360, 366, 339, 348, 0, 0, + 616, 0, 0, 0, 268, 324, 275, 267, 587, 0, + 0, 0, 0, 0, 0, 603, 0, 0, 231, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 300, 0, 406, 260, 0, + 459, 0, 0, 0, 636, 0, 0, 0, 0, 0, + 0, 0, 368, 0, 333, 199, 227, 0, 0, 416, + 467, 479, 0, 0, 0, 256, 0, 477, 430, 611, + 235, 287, 464, 437, 475, 445, 290, 0, 0, 476, + 375, 592, 455, 608, 637, 638, 266, 410, 622, 528, + 630, 655, 228, 263, 424, 512, 614, 500, 401, 588, + 589, 332, 499, 298, 203, 372, 643, 226, 485, 374, + 244, 233, 594, 619, 302, 254, 292, 462, 650, 215, + 523, 605, 241, 489, 0, 0, 658, 249, 510, 617, + 606, 217, 601, 509, 397, 329, 330, 216, 0, 463, + 271, 296, 0, 0, 261, 419, 596, 597, 259, 659, + 230, 629, 222, 0, 628, 412, 591, 602, 398, 386, + 221, 600, 396, 385, 337, 358, 359, 283, 310, 452, + 378, 453, 309, 311, 408, 407, 409, 209, 615, 633, + 0, 210, 0, 505, 618, 660, 457, 214, 236, 237, + 239, 0, 282, 286, 294, 297, 306, 307, 316, 370, + 423, 451, 447, 456, 0, 585, 609, 623, 635, 641, + 642, 644, 645, 646, 647, 648, 651, 649, 411, 314, + 501, 336, 376, 0, 0, 429, 478, 242, 613, 502, + 201, 0, 0, 0, 0, 257, 258, 0, 581, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 656, 514, 520, 515, + 516, 517, 518, 519, 0, 521, 0, 0, 0, 0, + 0, 402, 0, 598, 599, 679, 387, 492, 610, 338, + 352, 355, 344, 364, 0, 365, 340, 341, 346, 349, + 350, 351, 356, 357, 361, 367, 251, 212, 394, 403, + 584, 315, 218, 219, 220, 530, 531, 532, 533, 626, + 627, 631, 207, 468, 469, 470, 471, 295, 621, 312, + 474, 473, 334, 335, 382, 454, 546, 548, 559, 563, + 565, 567, 573, 576, 547, 549, 560, 564, 566, 568, + 574, 577, 536, 538, 540, 542, 555, 554, 551, 579, + 580, 557, 562, 541, 553, 558, 571, 578, 575, 535, + 539, 543, 552, 570, 569, 550, 561, 572, 556, 544, + 537, 545, 0, 198, 223, 371, 0, 460, 291, 657, + 625, 490, 620, 208, 225, 0, 265, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 200, 202, + 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, + 313, 321, 322, 325, 331, 383, 390, 391, 392, 393, + 413, 414, 415, 418, 421, 422, 425, 427, 428, 431, + 436, 440, 441, 442, 444, 446, 448, 461, 466, 480, + 481, 482, 483, 484, 487, 488, 494, 495, 496, 497, + 498, 506, 507, 522, 593, 595, 612, 632, 639, 486, + 388, 434, 458, 586, 304, 305, 449, 450, 317, 318, + 653, 654, 303, 607, 640, 604, 652, 634, 443, 381, + 0, 0, 384, 284, 308, 323, 0, 624, 508, 229, + 472, 293, 253, 0, 0, 213, 248, 232, 262, 277, + 280, 327, 395, 404, 433, 439, 299, 274, 246, 465, + 243, 491, 525, 526, 527, 529, 399, 269, 438, 400, + 0, 379, 582, 583, 319, 0, 0, 0, 534, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 420, 0, 0, 0, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 369, 270, 0, 1942, 206, 511, 0, + 435, 0, 205, 0, 493, 255, 380, 377, 590, 285, + 276, 272, 252, 320, 389, 432, 524, 426, 0, 373, + 0, 0, 503, 405, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 326, 250, 328, 204, 417, 504, 289, 0, + 0, 0, 0, 0, 513, 731, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, + 0, 0, 354, 363, 362, 342, 343, 345, 347, 353, + 360, 366, 339, 348, 0, 0, 616, 0, 0, 0, + 268, 324, 275, 267, 587, 0, 0, 0, 0, 0, + 0, 603, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 300, 0, 406, 260, 0, 459, 0, 0, 0, + 636, 0, 0, 0, 0, 0, 0, 0, 368, 0, + 333, 199, 227, 0, 0, 416, 467, 479, 0, 0, + 0, 256, 0, 477, 430, 611, 235, 287, 464, 437, + 475, 445, 290, 0, 0, 476, 375, 592, 455, 608, + 637, 638, 266, 410, 622, 528, 630, 655, 228, 263, + 424, 512, 614, 500, 401, 588, 589, 332, 499, 298, + 203, 372, 643, 226, 485, 374, 244, 233, 594, 619, + 302, 254, 292, 462, 650, 215, 523, 605, 241, 489, + 0, 0, 658, 249, 510, 617, 606, 217, 601, 509, + 397, 329, 330, 216, 0, 463, 271, 296, 0, 0, + 261, 419, 596, 597, 259, 659, 230, 629, 222, 0, + 628, 412, 591, 602, 398, 386, 221, 600, 396, 385, + 337, 358, 359, 283, 310, 452, 378, 453, 309, 311, + 408, 407, 409, 209, 615, 633, 0, 210, 0, 505, + 618, 660, 457, 214, 236, 237, 239, 0, 282, 286, + 294, 297, 306, 307, 316, 370, 423, 451, 447, 456, + 0, 585, 609, 623, 635, 641, 642, 644, 645, 646, + 647, 648, 651, 649, 411, 314, 501, 336, 376, 0, + 0, 429, 478, 242, 613, 502, 201, 0, 0, 0, + 0, 257, 258, 0, 581, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 656, 514, 520, 515, 516, 517, 518, 519, + 0, 521, 0, 0, 0, 0, 0, 402, 0, 598, + 599, 679, 387, 492, 610, 338, 352, 355, 344, 364, + 0, 365, 340, 341, 346, 349, 350, 351, 356, 357, + 361, 367, 251, 212, 394, 403, 584, 315, 218, 219, + 220, 530, 531, 532, 533, 626, 627, 631, 207, 468, + 469, 470, 471, 295, 621, 312, 474, 473, 334, 335, + 382, 454, 546, 548, 559, 563, 565, 567, 573, 576, + 547, 549, 560, 564, 566, 568, 574, 577, 536, 538, + 540, 542, 555, 554, 551, 579, 580, 557, 562, 541, + 553, 558, 571, 578, 575, 535, 539, 543, 552, 570, + 569, 550, 561, 572, 556, 544, 537, 545, 0, 198, + 223, 371, 0, 460, 291, 657, 625, 490, 620, 208, + 225, 0, 265, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 200, 202, 211, 224, 234, 238, + 245, 264, 279, 281, 288, 301, 313, 321, 322, 325, + 331, 383, 390, 391, 392, 393, 413, 414, 415, 418, + 421, 422, 425, 427, 428, 431, 436, 440, 441, 442, + 444, 446, 448, 461, 466, 480, 481, 482, 483, 484, + 487, 488, 494, 495, 496, 497, 498, 506, 507, 522, + 593, 595, 612, 632, 639, 486, 388, 434, 458, 586, + 304, 305, 449, 450, 317, 318, 653, 654, 303, 607, + 640, 604, 652, 634, 443, 381, 0, 0, 384, 284, + 308, 323, 0, 624, 508, 229, 472, 293, 253, 0, + 0, 213, 248, 232, 262, 277, 280, 327, 395, 404, + 433, 439, 299, 274, 246, 465, 243, 491, 525, 526, + 527, 529, 399, 269, 438, 400, 0, 379, 582, 583, + 319, 0, 0, 0, 534, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 0, 0, 0, 273, 0, 0, 0, 0, 369, + 270, 0, 1940, 206, 511, 0, 435, 0, 205, 0, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 0, 373, 0, 0, 503, 405, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 326, 250, + 328, 204, 417, 504, 289, 0, 0, 0, 0, 0, + 513, 731, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 240, 0, 0, 247, 0, 0, 0, 354, 363, + 362, 342, 343, 345, 347, 353, 360, 366, 339, 348, + 0, 0, 616, 0, 0, 0, 268, 324, 275, 267, + 587, 0, 0, 0, 0, 0, 0, 603, 0, 0, + 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 0, 406, + 260, 0, 459, 0, 0, 0, 636, 0, 0, 0, + 0, 0, 0, 0, 368, 0, 333, 199, 227, 0, + 0, 416, 467, 479, 0, 0, 0, 256, 0, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 0, + 0, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 596, 597, + 259, 659, 230, 629, 222, 0, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 358, 359, 283, + 310, 452, 378, 453, 309, 311, 408, 407, 409, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 0, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 0, 0, 429, 478, 242, + 613, 502, 201, 0, 0, 0, 0, 257, 258, 0, + 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 0, 0, + 0, 0, 0, 402, 0, 598, 599, 679, 387, 492, + 610, 338, 352, 355, 344, 364, 0, 365, 340, 341, + 346, 349, 350, 351, 356, 357, 361, 367, 251, 212, + 394, 403, 584, 315, 218, 219, 220, 530, 531, 532, + 533, 626, 627, 631, 207, 468, 469, 470, 471, 295, + 621, 312, 474, 473, 334, 335, 382, 454, 546, 548, + 559, 563, 565, 567, 573, 576, 547, 549, 560, 564, + 566, 568, 574, 577, 536, 538, 540, 542, 555, 554, + 551, 579, 580, 557, 562, 541, 553, 558, 571, 578, + 575, 535, 539, 543, 552, 570, 569, 550, 561, 572, + 556, 544, 537, 545, 0, 198, 223, 371, 0, 460, + 291, 657, 625, 490, 620, 208, 225, 0, 265, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 304, 305, 449, 450, + 317, 318, 653, 654, 303, 607, 640, 604, 652, 634, + 443, 381, 0, 0, 384, 284, 308, 323, 0, 624, + 508, 229, 472, 293, 253, 0, 0, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 400, 0, 379, 582, 583, 319, 0, 0, 0, + 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 273, 0, 0, 0, 0, 369, 270, 0, 1938, 206, + 511, 0, 435, 0, 205, 0, 493, 255, 380, 377, + 590, 285, 276, 272, 252, 320, 389, 432, 524, 426, + 0, 373, 0, 0, 503, 405, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 250, 328, 204, 417, 504, + 289, 0, 0, 0, 0, 0, 513, 731, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, + 247, 0, 0, 0, 354, 363, 362, 342, 343, 345, + 347, 353, 360, 366, 339, 348, 0, 0, 616, 0, + 0, 0, 268, 324, 275, 267, 587, 0, 0, 0, + 0, 0, 0, 603, 0, 0, 231, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 300, 0, 406, 260, 0, 459, 0, + 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, + 368, 0, 333, 199, 227, 0, 0, 416, 467, 479, + 0, 0, 0, 256, 0, 477, 430, 611, 235, 287, + 464, 437, 475, 445, 290, 0, 0, 476, 375, 592, + 455, 608, 637, 638, 266, 410, 622, 528, 630, 655, + 228, 263, 424, 512, 614, 500, 401, 588, 589, 332, + 499, 298, 203, 372, 643, 226, 485, 374, 244, 233, + 594, 619, 302, 254, 292, 462, 650, 215, 523, 605, + 241, 489, 0, 0, 658, 249, 510, 617, 606, 217, + 601, 509, 397, 329, 330, 216, 0, 463, 271, 296, + 0, 0, 261, 419, 596, 597, 259, 659, 230, 629, + 222, 0, 628, 412, 591, 602, 398, 386, 221, 600, + 396, 385, 337, 358, 359, 283, 310, 452, 378, 453, + 309, 311, 408, 407, 409, 209, 615, 633, 0, 210, + 0, 505, 618, 660, 457, 214, 236, 237, 239, 0, + 282, 286, 294, 297, 306, 307, 316, 370, 423, 451, + 447, 456, 0, 585, 609, 623, 635, 641, 642, 644, + 645, 646, 647, 648, 651, 649, 411, 314, 501, 336, + 376, 0, 0, 429, 478, 242, 613, 502, 201, 0, + 0, 0, 0, 257, 258, 0, 581, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 656, 514, 520, 515, 516, 517, + 518, 519, 0, 521, 0, 0, 0, 0, 0, 402, + 0, 598, 599, 679, 387, 492, 610, 338, 352, 355, + 344, 364, 0, 365, 340, 341, 346, 349, 350, 351, + 356, 357, 361, 367, 251, 212, 394, 403, 584, 315, + 218, 219, 220, 530, 531, 532, 533, 626, 627, 631, + 207, 468, 469, 470, 471, 295, 621, 312, 474, 473, + 334, 335, 382, 454, 546, 548, 559, 563, 565, 567, + 573, 576, 547, 549, 560, 564, 566, 568, 574, 577, + 536, 538, 540, 542, 555, 554, 551, 579, 580, 557, + 562, 541, 553, 558, 571, 578, 575, 535, 539, 543, + 552, 570, 569, 550, 561, 572, 556, 544, 537, 545, + 0, 198, 223, 371, 0, 460, 291, 657, 625, 490, + 620, 208, 225, 0, 265, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 200, 202, 211, 224, + 234, 238, 245, 264, 279, 281, 288, 301, 313, 321, + 322, 325, 331, 383, 390, 391, 392, 393, 413, 414, + 415, 418, 421, 422, 425, 427, 428, 431, 436, 440, + 441, 442, 444, 446, 448, 461, 466, 480, 481, 482, + 483, 484, 487, 488, 494, 495, 496, 497, 498, 506, + 507, 522, 593, 595, 612, 632, 639, 486, 388, 434, + 458, 586, 304, 305, 449, 450, 317, 318, 653, 654, + 303, 607, 640, 604, 652, 634, 443, 381, 0, 0, + 384, 284, 308, 323, 0, 624, 508, 229, 472, 293, + 253, 0, 0, 213, 248, 232, 262, 277, 280, 327, + 395, 404, 433, 439, 299, 274, 246, 465, 243, 491, + 525, 526, 527, 529, 399, 269, 438, 400, 0, 379, + 582, 583, 319, 0, 0, 0, 534, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, + 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, + 0, 369, 270, 0, 1936, 206, 511, 0, 435, 0, + 205, 0, 493, 255, 380, 377, 590, 285, 276, 272, + 252, 320, 389, 432, 524, 426, 0, 373, 0, 0, + 503, 405, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 326, 250, 328, 204, 417, 504, 289, 0, 0, 0, + 0, 0, 513, 731, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, + 354, 363, 362, 342, 343, 345, 347, 353, 360, 366, + 339, 348, 0, 0, 616, 0, 0, 0, 268, 324, + 275, 267, 587, 0, 0, 0, 0, 0, 0, 603, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, + 0, 406, 260, 0, 459, 0, 0, 0, 636, 0, + 0, 0, 0, 0, 0, 0, 368, 0, 333, 199, + 227, 0, 0, 416, 467, 479, 0, 0, 0, 256, + 0, 477, 430, 611, 235, 287, 464, 437, 475, 445, + 290, 0, 0, 476, 375, 592, 455, 608, 637, 638, + 266, 410, 622, 528, 630, 655, 228, 263, 424, 512, + 614, 500, 401, 588, 589, 332, 499, 298, 203, 372, + 643, 226, 485, 374, 244, 233, 594, 619, 302, 254, + 292, 462, 650, 215, 523, 605, 241, 489, 0, 0, + 658, 249, 510, 617, 606, 217, 601, 509, 397, 329, + 330, 216, 0, 463, 271, 296, 0, 0, 261, 419, + 596, 597, 259, 659, 230, 629, 222, 0, 628, 412, + 591, 602, 398, 386, 221, 600, 396, 385, 337, 358, + 359, 283, 310, 452, 378, 453, 309, 311, 408, 407, + 409, 209, 615, 633, 0, 210, 0, 505, 618, 660, + 457, 214, 236, 237, 239, 0, 282, 286, 294, 297, + 306, 307, 316, 370, 423, 451, 447, 456, 0, 585, + 609, 623, 635, 641, 642, 644, 645, 646, 647, 648, + 651, 649, 411, 314, 501, 336, 376, 0, 0, 429, + 478, 242, 613, 502, 201, 0, 0, 0, 0, 257, + 258, 0, 581, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 656, 514, 520, 515, 516, 517, 518, 519, 0, 521, + 0, 0, 0, 0, 0, 402, 0, 598, 599, 679, + 387, 492, 610, 338, 352, 355, 344, 364, 0, 365, + 340, 341, 346, 349, 350, 351, 356, 357, 361, 367, + 251, 212, 394, 403, 584, 315, 218, 219, 220, 530, + 531, 532, 533, 626, 627, 631, 207, 468, 469, 470, + 471, 295, 621, 312, 474, 473, 334, 335, 382, 454, + 546, 548, 559, 563, 565, 567, 573, 576, 547, 549, + 560, 564, 566, 568, 574, 577, 536, 538, 540, 542, + 555, 554, 551, 579, 580, 557, 562, 541, 553, 558, + 571, 578, 575, 535, 539, 543, 552, 570, 569, 550, + 561, 572, 556, 544, 537, 545, 0, 198, 223, 371, + 0, 460, 291, 657, 625, 490, 620, 208, 225, 0, + 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, + 279, 281, 288, 301, 313, 321, 322, 325, 331, 383, + 390, 391, 392, 393, 413, 414, 415, 418, 421, 422, + 425, 427, 428, 431, 436, 440, 441, 442, 444, 446, + 448, 461, 466, 480, 481, 482, 483, 484, 487, 488, + 494, 495, 496, 497, 498, 506, 507, 522, 593, 595, + 612, 632, 639, 486, 388, 434, 458, 586, 304, 305, + 449, 450, 317, 318, 653, 654, 303, 607, 640, 604, + 652, 634, 443, 381, 0, 0, 384, 284, 308, 323, + 0, 624, 508, 229, 472, 293, 253, 0, 0, 213, + 248, 232, 262, 277, 280, 327, 395, 404, 433, 439, + 299, 274, 246, 465, 243, 491, 525, 526, 527, 529, + 399, 269, 438, 400, 0, 379, 582, 583, 319, 0, + 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 369, 270, 0, + 1932, 206, 511, 0, 435, 0, 205, 0, 493, 255, + 380, 377, 590, 285, 276, 272, 252, 320, 389, 432, + 524, 426, 0, 373, 0, 0, 503, 405, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 326, 250, 328, 204, + 417, 504, 289, 0, 0, 0, 0, 0, 513, 731, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, + 0, 0, 247, 0, 0, 0, 354, 363, 362, 342, + 343, 345, 347, 353, 360, 366, 339, 348, 0, 0, + 616, 0, 0, 0, 268, 324, 275, 267, 587, 0, + 0, 0, 0, 0, 0, 603, 0, 0, 231, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 300, 0, 406, 260, 0, + 459, 0, 0, 0, 636, 0, 0, 0, 0, 0, + 0, 0, 368, 0, 333, 199, 227, 0, 0, 416, + 467, 479, 0, 0, 0, 256, 0, 477, 430, 611, + 235, 287, 464, 437, 475, 445, 290, 0, 0, 476, + 375, 592, 455, 608, 637, 638, 266, 410, 622, 528, + 630, 655, 228, 263, 424, 512, 614, 500, 401, 588, + 589, 332, 499, 298, 203, 372, 643, 226, 485, 374, + 244, 233, 594, 619, 302, 254, 292, 462, 650, 215, + 523, 605, 241, 489, 0, 0, 658, 249, 510, 617, + 606, 217, 601, 509, 397, 329, 330, 216, 0, 463, + 271, 296, 0, 0, 261, 419, 596, 597, 259, 659, + 230, 629, 222, 0, 628, 412, 591, 602, 398, 386, + 221, 600, 396, 385, 337, 358, 359, 283, 310, 452, + 378, 453, 309, 311, 408, 407, 409, 209, 615, 633, + 0, 210, 0, 505, 618, 660, 457, 214, 236, 237, + 239, 0, 282, 286, 294, 297, 306, 307, 316, 370, + 423, 451, 447, 456, 0, 585, 609, 623, 635, 641, + 642, 644, 645, 646, 647, 648, 651, 649, 411, 314, + 501, 336, 376, 0, 0, 429, 478, 242, 613, 502, + 201, 0, 0, 0, 0, 257, 258, 0, 581, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 656, 514, 520, 515, + 516, 517, 518, 519, 0, 521, 0, 0, 0, 0, + 0, 402, 0, 598, 599, 679, 387, 492, 610, 338, + 352, 355, 344, 364, 0, 365, 340, 341, 346, 349, + 350, 351, 356, 357, 361, 367, 251, 212, 394, 403, + 584, 315, 218, 219, 220, 530, 531, 532, 533, 626, + 627, 631, 207, 468, 469, 470, 471, 295, 621, 312, + 474, 473, 334, 335, 382, 454, 546, 548, 559, 563, + 565, 567, 573, 576, 547, 549, 560, 564, 566, 568, + 574, 577, 536, 538, 540, 542, 555, 554, 551, 579, + 580, 557, 562, 541, 553, 558, 571, 578, 575, 535, + 539, 543, 552, 570, 569, 550, 561, 572, 556, 544, + 537, 545, 0, 198, 223, 371, 0, 460, 291, 657, + 625, 490, 620, 208, 225, 0, 265, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 200, 202, + 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, + 313, 321, 322, 325, 331, 383, 390, 391, 392, 393, + 413, 414, 415, 418, 421, 422, 425, 427, 428, 431, + 436, 440, 441, 442, 444, 446, 448, 461, 466, 480, + 481, 482, 483, 484, 487, 488, 494, 495, 496, 497, + 498, 506, 507, 522, 593, 595, 612, 632, 639, 486, + 388, 434, 458, 586, 304, 305, 449, 450, 317, 318, + 653, 654, 303, 607, 640, 604, 652, 634, 443, 381, + 0, 0, 384, 284, 308, 323, 0, 624, 508, 229, + 472, 293, 253, 0, 0, 213, 248, 232, 262, 277, + 280, 327, 395, 404, 433, 439, 299, 274, 246, 465, + 243, 491, 525, 526, 527, 529, 399, 269, 438, 400, + 0, 379, 582, 583, 319, 0, 0, 0, 534, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 420, 0, 0, 0, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 369, 270, 0, 1930, 206, 511, 0, + 435, 0, 205, 0, 493, 255, 380, 377, 590, 285, + 276, 272, 252, 320, 389, 432, 524, 426, 0, 373, + 0, 0, 503, 405, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 326, 250, 328, 204, 417, 504, 289, 0, + 0, 0, 0, 0, 513, 731, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, + 0, 0, 354, 363, 362, 342, 343, 345, 347, 353, + 360, 366, 339, 348, 0, 0, 616, 0, 0, 0, + 268, 324, 275, 267, 587, 0, 0, 0, 0, 0, + 0, 603, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 300, 0, 406, 260, 0, 459, 0, 0, 0, + 636, 0, 0, 0, 0, 0, 0, 0, 368, 0, + 333, 199, 227, 0, 0, 416, 467, 479, 0, 0, + 0, 256, 0, 477, 430, 611, 235, 287, 464, 437, + 475, 445, 290, 0, 0, 476, 375, 592, 455, 608, + 637, 638, 266, 410, 622, 528, 630, 655, 228, 263, + 424, 512, 614, 500, 401, 588, 589, 332, 499, 298, + 203, 372, 643, 226, 485, 374, 244, 233, 594, 619, + 302, 254, 292, 462, 650, 215, 523, 605, 241, 489, + 0, 0, 658, 249, 510, 617, 606, 217, 601, 509, + 397, 329, 330, 216, 0, 463, 271, 296, 0, 0, + 261, 419, 596, 597, 259, 659, 230, 629, 222, 0, + 628, 412, 591, 602, 398, 386, 221, 600, 396, 385, + 337, 358, 359, 283, 310, 452, 378, 453, 309, 311, + 408, 407, 409, 209, 615, 633, 0, 210, 0, 505, + 618, 660, 457, 214, 236, 237, 239, 0, 282, 286, + 294, 297, 306, 307, 316, 370, 423, 451, 447, 456, + 0, 585, 609, 623, 635, 641, 642, 644, 645, 646, + 647, 648, 651, 649, 411, 314, 501, 336, 376, 0, + 0, 429, 478, 242, 613, 502, 201, 0, 0, 0, + 0, 257, 258, 0, 581, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 656, 514, 520, 515, 516, 517, 518, 519, + 0, 521, 0, 0, 0, 0, 0, 402, 0, 598, + 599, 679, 387, 492, 610, 338, 352, 355, 344, 364, + 0, 365, 340, 341, 346, 349, 350, 351, 356, 357, + 361, 367, 251, 212, 394, 403, 584, 315, 218, 219, + 220, 530, 531, 532, 533, 626, 627, 631, 207, 468, + 469, 470, 471, 295, 621, 312, 474, 473, 334, 335, + 382, 454, 546, 548, 559, 563, 565, 567, 573, 576, + 547, 549, 560, 564, 566, 568, 574, 577, 536, 538, + 540, 542, 555, 554, 551, 579, 580, 557, 562, 541, + 553, 558, 571, 578, 575, 535, 539, 543, 552, 570, + 569, 550, 561, 572, 556, 544, 537, 545, 0, 198, + 223, 371, 0, 460, 291, 657, 625, 490, 620, 208, + 225, 0, 265, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 200, 202, 211, 224, 234, 238, + 245, 264, 279, 281, 288, 301, 313, 321, 322, 325, + 331, 383, 390, 391, 392, 393, 413, 414, 415, 418, + 421, 422, 425, 427, 428, 431, 436, 440, 441, 442, + 444, 446, 448, 461, 466, 480, 481, 482, 483, 484, + 487, 488, 494, 495, 496, 497, 498, 506, 507, 522, + 593, 595, 612, 632, 639, 486, 388, 434, 458, 586, + 304, 305, 449, 450, 317, 318, 653, 654, 303, 607, + 640, 604, 652, 634, 443, 381, 0, 0, 384, 284, + 308, 323, 0, 624, 508, 229, 472, 293, 253, 0, + 0, 213, 248, 232, 262, 277, 280, 327, 395, 404, + 433, 439, 299, 274, 246, 465, 243, 491, 525, 526, + 527, 529, 399, 269, 438, 400, 0, 379, 582, 583, + 319, 0, 0, 0, 534, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 0, 0, 0, 273, 0, 0, 0, 0, 369, + 270, 0, 1928, 206, 511, 0, 435, 0, 205, 0, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 0, 373, 0, 0, 503, 405, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 326, 250, + 328, 204, 417, 504, 289, 0, 0, 0, 0, 0, + 513, 731, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 240, 0, 0, 247, 0, 0, 0, 354, 363, + 362, 342, 343, 345, 347, 353, 360, 366, 339, 348, + 0, 0, 616, 0, 0, 0, 268, 324, 275, 267, + 587, 0, 0, 0, 0, 0, 0, 603, 0, 0, + 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 0, 406, + 260, 0, 459, 0, 0, 0, 636, 0, 0, 0, + 0, 0, 0, 0, 368, 0, 333, 199, 227, 0, + 0, 416, 467, 479, 0, 0, 0, 256, 0, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 0, + 0, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 596, 597, + 259, 659, 230, 629, 222, 0, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 358, 359, 283, + 310, 452, 378, 453, 309, 311, 408, 407, 409, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 0, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 0, 0, 429, 478, 242, + 613, 502, 201, 0, 0, 0, 0, 257, 258, 0, + 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 0, 0, + 0, 0, 0, 402, 0, 598, 599, 679, 387, 492, + 610, 338, 352, 355, 344, 364, 0, 365, 340, 341, + 346, 349, 350, 351, 356, 357, 361, 367, 251, 212, + 394, 403, 584, 315, 218, 219, 220, 530, 531, 532, + 533, 626, 627, 631, 207, 468, 469, 470, 471, 295, + 621, 312, 474, 473, 334, 335, 382, 454, 546, 548, + 559, 563, 565, 567, 573, 576, 547, 549, 560, 564, + 566, 568, 574, 577, 536, 538, 540, 542, 555, 554, + 551, 579, 580, 557, 562, 541, 553, 558, 571, 578, + 575, 535, 539, 543, 552, 570, 569, 550, 561, 572, + 556, 544, 537, 545, 0, 198, 223, 371, 0, 460, + 291, 657, 625, 490, 620, 208, 225, 0, 265, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 304, 305, 449, 450, + 317, 318, 653, 654, 303, 607, 640, 604, 652, 634, + 443, 381, 0, 0, 384, 284, 308, 323, 0, 624, + 508, 229, 472, 293, 253, 0, 0, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 400, 0, 379, 582, 583, 319, 0, 0, 0, + 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 273, 0, 0, 0, 0, 369, 270, 0, 0, 206, + 511, 0, 435, 0, 205, 0, 493, 255, 380, 377, + 590, 285, 276, 272, 252, 320, 389, 432, 524, 426, + 0, 373, 0, 0, 503, 405, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 250, 328, 204, 417, 504, + 289, 0, 1903, 0, 0, 0, 513, 731, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, + 247, 0, 0, 0, 354, 363, 362, 342, 343, 345, + 347, 353, 360, 366, 339, 348, 0, 0, 616, 0, + 0, 0, 268, 324, 275, 267, 587, 0, 0, 0, + 0, 0, 0, 603, 0, 0, 231, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 300, 0, 406, 260, 0, 459, 0, + 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, + 368, 0, 333, 199, 227, 0, 0, 416, 467, 479, + 0, 0, 0, 256, 0, 477, 430, 611, 235, 287, + 464, 437, 475, 445, 290, 0, 0, 476, 375, 592, + 455, 608, 637, 638, 266, 410, 622, 528, 630, 655, + 228, 263, 424, 512, 614, 500, 401, 588, 589, 332, + 499, 298, 203, 372, 643, 226, 485, 374, 244, 233, + 594, 619, 302, 254, 292, 462, 650, 215, 523, 605, + 241, 489, 0, 0, 658, 249, 510, 617, 606, 217, + 601, 509, 397, 329, 330, 216, 0, 463, 271, 296, + 0, 0, 261, 419, 596, 597, 259, 659, 230, 629, + 222, 0, 628, 412, 591, 602, 398, 386, 221, 600, + 396, 385, 337, 358, 359, 283, 310, 452, 378, 453, + 309, 311, 408, 407, 409, 209, 615, 633, 0, 210, + 0, 505, 618, 660, 457, 214, 236, 237, 239, 0, + 282, 286, 294, 297, 306, 307, 316, 370, 423, 451, + 447, 456, 0, 585, 609, 623, 635, 641, 642, 644, + 645, 646, 647, 648, 651, 649, 411, 314, 501, 336, + 376, 0, 0, 429, 478, 242, 613, 502, 201, 0, + 0, 0, 0, 257, 258, 0, 581, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 656, 514, 520, 515, 516, 517, + 518, 519, 0, 521, 0, 0, 0, 0, 0, 402, + 0, 598, 599, 679, 387, 492, 610, 338, 352, 355, + 344, 364, 0, 365, 340, 341, 346, 349, 350, 351, + 356, 357, 361, 367, 251, 212, 394, 403, 584, 315, + 218, 219, 220, 530, 531, 532, 533, 626, 627, 631, + 207, 468, 469, 470, 471, 295, 621, 312, 474, 473, + 334, 335, 382, 454, 546, 548, 559, 563, 565, 567, + 573, 576, 547, 549, 560, 564, 566, 568, 574, 577, + 536, 538, 540, 542, 555, 554, 551, 579, 580, 557, + 562, 541, 553, 558, 571, 578, 575, 535, 539, 543, + 552, 570, 569, 550, 561, 572, 556, 544, 537, 545, + 0, 198, 223, 371, 0, 460, 291, 657, 625, 490, + 620, 208, 225, 0, 265, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 200, 202, 211, 224, + 234, 238, 245, 264, 279, 281, 288, 301, 313, 321, + 322, 325, 331, 383, 390, 391, 392, 393, 413, 414, + 415, 418, 421, 422, 425, 427, 428, 431, 436, 440, + 441, 442, 444, 446, 448, 461, 466, 480, 481, 482, + 483, 484, 487, 488, 494, 495, 496, 497, 498, 506, + 507, 522, 593, 595, 612, 632, 639, 486, 388, 434, + 458, 586, 304, 305, 449, 450, 317, 318, 653, 654, + 303, 607, 640, 604, 652, 634, 443, 381, 0, 0, + 384, 284, 308, 323, 0, 624, 508, 229, 472, 293, + 253, 0, 0, 213, 248, 232, 262, 277, 280, 327, + 395, 404, 433, 439, 299, 274, 246, 465, 243, 491, + 525, 526, 527, 529, 399, 269, 438, 400, 0, 379, + 582, 583, 319, 0, 0, 0, 534, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, + 0, 0, 0, 0, 0, 1800, 273, 0, 0, 0, + 0, 369, 270, 0, 0, 206, 511, 0, 435, 0, + 205, 0, 493, 255, 380, 377, 590, 285, 276, 272, + 252, 320, 389, 432, 524, 426, 0, 373, 0, 0, + 503, 405, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 326, 250, 328, 204, 417, 504, 289, 0, 0, 0, + 0, 0, 513, 196, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, + 354, 363, 362, 342, 343, 345, 347, 353, 360, 366, + 339, 348, 0, 0, 616, 0, 0, 0, 268, 324, + 275, 267, 587, 0, 0, 0, 0, 0, 0, 603, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, + 0, 406, 260, 0, 459, 0, 0, 0, 636, 0, + 0, 0, 0, 0, 0, 0, 368, 0, 333, 199, + 227, 0, 0, 416, 467, 479, 0, 0, 0, 256, + 0, 477, 430, 611, 235, 287, 464, 437, 475, 445, + 290, 0, 0, 476, 375, 592, 455, 608, 637, 638, + 266, 410, 622, 528, 630, 655, 228, 263, 424, 512, + 614, 500, 401, 588, 589, 332, 499, 298, 203, 372, + 643, 226, 485, 374, 244, 233, 594, 619, 302, 254, + 292, 462, 650, 215, 523, 605, 241, 489, 0, 0, + 658, 249, 510, 617, 606, 217, 601, 509, 397, 329, + 330, 216, 0, 463, 271, 296, 0, 0, 261, 419, + 596, 597, 259, 659, 230, 629, 222, 0, 628, 412, + 591, 602, 398, 386, 221, 600, 396, 385, 337, 358, + 359, 283, 310, 452, 378, 453, 309, 311, 408, 407, + 409, 209, 615, 633, 0, 210, 0, 505, 618, 660, + 457, 214, 236, 237, 239, 0, 282, 286, 294, 297, + 306, 307, 316, 370, 423, 451, 447, 456, 0, 585, + 609, 623, 635, 641, 642, 644, 645, 646, 647, 648, + 651, 649, 411, 314, 501, 336, 376, 0, 0, 429, + 478, 242, 613, 502, 201, 0, 0, 0, 0, 257, + 258, 0, 581, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 656, 514, 520, 515, 516, 517, 518, 519, 0, 521, + 0, 0, 0, 0, 0, 402, 0, 598, 599, 679, + 387, 492, 610, 338, 352, 355, 344, 364, 0, 365, + 340, 341, 346, 349, 350, 351, 356, 357, 361, 367, + 251, 212, 394, 403, 584, 315, 218, 219, 220, 530, + 531, 532, 533, 626, 627, 631, 207, 468, 469, 470, + 471, 295, 621, 312, 474, 473, 334, 335, 382, 454, + 546, 548, 559, 563, 565, 567, 573, 576, 547, 549, + 560, 564, 566, 568, 574, 577, 536, 538, 540, 542, + 555, 554, 551, 579, 580, 557, 562, 541, 553, 558, + 571, 578, 575, 535, 539, 543, 552, 570, 569, 550, + 561, 572, 556, 544, 537, 545, 0, 198, 223, 371, + 0, 460, 291, 657, 625, 490, 620, 208, 225, 0, + 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, + 279, 281, 288, 301, 313, 321, 322, 325, 331, 383, + 390, 391, 392, 393, 413, 414, 415, 418, 421, 422, + 425, 427, 428, 431, 436, 440, 441, 442, 444, 446, + 448, 461, 466, 480, 481, 482, 483, 484, 487, 488, + 494, 495, 496, 497, 498, 506, 507, 522, 593, 595, + 612, 632, 639, 486, 388, 434, 458, 586, 304, 305, + 449, 450, 317, 318, 653, 654, 303, 607, 640, 604, + 652, 634, 443, 381, 0, 0, 384, 284, 308, 323, + 0, 624, 508, 229, 472, 293, 253, 0, 0, 213, + 248, 232, 262, 277, 280, 327, 395, 404, 433, 439, + 299, 274, 246, 465, 243, 491, 525, 526, 527, 529, + 399, 269, 438, 400, 0, 379, 582, 583, 319, 0, + 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 369, 270, 0, + 0, 206, 511, 0, 435, 0, 205, 0, 493, 255, + 380, 377, 590, 285, 276, 272, 252, 320, 389, 432, + 524, 426, 0, 373, 0, 0, 503, 405, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 326, 250, 328, 204, + 417, 504, 289, 0, 95, 0, 0, 0, 513, 966, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, + 0, 0, 247, 0, 0, 0, 354, 363, 362, 342, + 343, 345, 347, 353, 360, 366, 339, 348, 0, 0, + 616, 0, 0, 0, 268, 324, 275, 267, 587, 0, + 0, 0, 0, 0, 0, 603, 0, 0, 231, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 300, 0, 406, 260, 0, + 459, 0, 0, 0, 636, 0, 0, 0, 0, 0, + 0, 0, 368, 0, 333, 199, 227, 0, 0, 416, + 467, 479, 0, 0, 0, 256, 0, 477, 430, 611, + 235, 287, 464, 437, 475, 445, 290, 0, 0, 476, + 375, 592, 455, 608, 637, 638, 266, 410, 622, 528, + 630, 655, 228, 263, 424, 512, 614, 500, 401, 588, + 589, 332, 499, 298, 203, 372, 643, 226, 485, 374, + 244, 233, 594, 619, 302, 254, 292, 462, 650, 215, + 523, 605, 241, 489, 0, 0, 658, 249, 510, 617, + 606, 217, 601, 509, 397, 329, 330, 216, 0, 463, + 271, 296, 0, 0, 261, 419, 596, 597, 259, 659, + 230, 629, 222, 0, 628, 412, 591, 602, 398, 386, + 221, 600, 396, 385, 337, 358, 359, 283, 310, 452, + 378, 453, 309, 311, 408, 407, 409, 209, 615, 633, + 0, 210, 0, 505, 618, 660, 457, 214, 236, 237, + 239, 0, 282, 286, 294, 297, 306, 307, 316, 370, + 423, 451, 447, 456, 0, 585, 609, 623, 635, 641, + 642, 644, 645, 646, 647, 648, 651, 649, 411, 314, + 501, 336, 376, 0, 0, 429, 478, 242, 613, 502, + 201, 0, 0, 0, 0, 257, 258, 0, 581, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 656, 514, 520, 515, + 516, 517, 518, 519, 0, 521, 0, 0, 0, 0, + 0, 402, 0, 598, 599, 679, 387, 492, 610, 338, + 352, 355, 344, 364, 0, 365, 340, 341, 346, 349, + 350, 351, 356, 357, 361, 367, 251, 212, 394, 403, + 584, 315, 218, 219, 220, 530, 531, 532, 533, 626, + 627, 631, 207, 468, 469, 470, 471, 295, 621, 312, + 474, 473, 334, 335, 382, 454, 546, 548, 559, 563, + 565, 567, 573, 576, 547, 549, 560, 564, 566, 568, + 574, 577, 536, 538, 540, 542, 555, 554, 551, 579, + 580, 557, 562, 541, 553, 558, 571, 578, 575, 535, + 539, 543, 552, 570, 569, 550, 561, 572, 556, 544, + 537, 545, 0, 198, 223, 371, 0, 460, 291, 657, + 625, 490, 620, 208, 225, 0, 265, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 200, 202, + 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, + 313, 321, 322, 325, 331, 383, 390, 391, 392, 393, + 413, 414, 415, 418, 421, 422, 425, 427, 428, 431, + 436, 440, 441, 442, 444, 446, 448, 461, 466, 480, + 481, 482, 483, 484, 487, 488, 494, 495, 496, 497, + 498, 506, 507, 522, 593, 595, 612, 632, 639, 486, + 388, 434, 458, 586, 304, 305, 449, 450, 317, 318, + 653, 654, 303, 607, 640, 604, 652, 634, 443, 381, + 0, 0, 384, 284, 308, 323, 0, 624, 508, 229, + 472, 293, 253, 0, 0, 213, 248, 232, 262, 277, + 280, 327, 395, 404, 433, 439, 299, 274, 246, 465, + 243, 491, 525, 526, 527, 529, 399, 269, 438, 400, + 0, 379, 582, 583, 319, 0, 0, 0, 534, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 420, 0, 0, 0, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 369, 270, 0, 0, 206, 511, 0, + 435, 0, 205, 0, 493, 255, 380, 377, 590, 285, + 276, 272, 252, 320, 389, 432, 524, 426, 0, 373, + 0, 0, 503, 405, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 326, 250, 328, 204, 417, 504, 289, 0, + 0, 0, 0, 0, 513, 196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, + 0, 0, 354, 363, 362, 342, 343, 345, 347, 353, + 360, 366, 339, 348, 0, 0, 616, 0, 0, 0, + 268, 324, 275, 267, 587, 0, 0, 0, 0, 0, + 0, 603, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1466, + 0, 300, 0, 406, 260, 0, 459, 0, 0, 0, + 636, 0, 0, 0, 0, 0, 0, 0, 368, 0, + 333, 199, 227, 0, 0, 416, 467, 479, 0, 0, + 0, 256, 0, 477, 430, 611, 235, 287, 464, 437, + 475, 445, 290, 0, 0, 476, 375, 592, 455, 608, + 637, 638, 266, 410, 622, 528, 630, 655, 228, 263, + 424, 512, 614, 500, 401, 588, 589, 332, 499, 298, + 203, 372, 643, 226, 485, 374, 244, 233, 594, 619, + 302, 254, 292, 462, 650, 215, 523, 605, 241, 489, + 0, 0, 658, 249, 510, 617, 606, 217, 601, 509, + 397, 329, 330, 216, 0, 463, 271, 296, 0, 0, + 261, 419, 596, 597, 259, 659, 230, 629, 222, 0, + 628, 412, 591, 602, 398, 386, 221, 600, 396, 385, + 337, 358, 359, 283, 310, 452, 378, 453, 309, 311, + 408, 407, 409, 209, 615, 633, 0, 210, 0, 505, + 618, 660, 457, 214, 236, 237, 239, 0, 282, 286, + 294, 297, 306, 307, 316, 370, 423, 451, 447, 456, + 0, 585, 609, 623, 635, 641, 642, 644, 645, 646, + 647, 648, 651, 649, 411, 314, 501, 336, 376, 0, + 0, 429, 478, 242, 613, 502, 201, 0, 0, 0, + 0, 257, 258, 0, 581, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 656, 514, 520, 515, 516, 517, 518, 519, + 0, 521, 0, 0, 0, 0, 0, 402, 0, 598, + 599, 679, 387, 492, 610, 338, 352, 355, 344, 364, + 0, 365, 340, 341, 346, 349, 350, 351, 356, 357, + 361, 367, 251, 212, 394, 403, 584, 315, 218, 219, + 220, 530, 531, 532, 533, 626, 627, 631, 207, 468, + 469, 470, 471, 295, 621, 312, 474, 473, 334, 335, + 382, 454, 546, 548, 559, 563, 565, 567, 573, 576, + 547, 549, 560, 564, 566, 568, 574, 577, 536, 538, + 540, 542, 555, 554, 551, 579, 580, 557, 562, 541, + 553, 558, 571, 578, 575, 535, 539, 543, 552, 570, + 569, 550, 561, 572, 556, 544, 537, 545, 0, 198, + 223, 371, 0, 460, 291, 657, 625, 490, 620, 208, + 225, 0, 265, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 200, 202, 211, 224, 234, 238, + 245, 264, 279, 281, 288, 301, 313, 321, 322, 325, + 331, 383, 390, 391, 392, 393, 413, 414, 415, 418, + 421, 422, 425, 427, 428, 431, 436, 440, 441, 442, + 444, 446, 448, 461, 466, 480, 481, 482, 483, 484, + 487, 488, 494, 495, 496, 497, 498, 506, 507, 522, + 593, 595, 612, 632, 639, 486, 388, 434, 458, 586, + 304, 305, 449, 450, 317, 318, 653, 654, 1465, 607, + 640, 604, 652, 634, 443, 381, 0, 0, 384, 284, + 308, 323, 0, 624, 508, 229, 472, 293, 253, 0, + 0, 213, 248, 232, 262, 277, 280, 327, 395, 404, + 433, 439, 299, 274, 246, 465, 243, 491, 525, 526, + 527, 529, 399, 269, 438, 400, 0, 379, 582, 583, + 319, 0, 0, 0, 534, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 0, 0, 0, 273, 0, 0, 0, 0, 369, + 270, 0, 0, 206, 511, 0, 435, 0, 205, 0, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 0, 373, 0, 0, 503, 405, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 326, 250, + 328, 204, 417, 504, 289, 0, 0, 0, 0, 0, + 513, 196, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 240, 0, 0, 247, 0, 0, 0, 354, 363, + 362, 342, 343, 345, 347, 353, 360, 366, 339, 348, + 0, 0, 616, 0, 0, 0, 268, 324, 275, 267, + 587, 0, 0, 0, 0, 0, 0, 603, 0, 0, + 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 0, 406, + 260, 0, 459, 0, 0, 0, 636, 0, 0, 0, + 0, 0, 0, 0, 368, 0, 333, 199, 227, 0, + 0, 416, 467, 479, 0, 0, 0, 256, 0, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 0, + 0, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 596, 597, + 259, 659, 230, 629, 222, 0, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 358, 359, 283, + 310, 452, 378, 453, 309, 311, 408, 407, 409, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 0, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 0, 0, 429, 478, 242, + 613, 502, 201, 0, 0, 0, 0, 257, 258, 0, + 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 0, 0, + 0, 0, 0, 402, 0, 598, 599, 679, 387, 492, + 610, 338, 352, 355, 344, 364, 0, 365, 340, 341, + 346, 349, 350, 351, 356, 357, 361, 367, 251, 212, + 394, 403, 584, 315, 218, 219, 220, 530, 531, 532, + 533, 626, 627, 631, 207, 468, 469, 470, 471, 295, + 621, 312, 474, 473, 334, 335, 382, 454, 546, 548, + 559, 563, 565, 567, 573, 576, 547, 549, 560, 564, + 566, 568, 574, 577, 536, 538, 540, 542, 555, 554, + 551, 579, 580, 557, 562, 541, 553, 558, 571, 578, + 575, 535, 539, 543, 552, 570, 569, 550, 561, 572, + 556, 544, 537, 545, 0, 198, 223, 371, 0, 460, + 291, 657, 625, 490, 620, 208, 225, 0, 265, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1058, 0, 0, 0, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 304, 305, 449, 450, + 317, 318, 653, 654, 303, 607, 640, 604, 652, 634, + 443, 381, 0, 0, 384, 284, 308, 323, 0, 624, + 508, 229, 472, 293, 253, 0, 0, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 400, 0, 379, 582, 583, 319, 0, 0, 0, + 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 273, 0, 0, 0, 0, 369, 270, 0, 0, 206, + 511, 0, 435, 0, 205, 0, 493, 255, 380, 377, + 590, 285, 276, 272, 252, 320, 389, 432, 524, 426, + 0, 373, 0, 0, 503, 405, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 250, 328, 204, 417, 504, + 289, 0, 0, 0, 0, 0, 513, 196, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, + 247, 0, 0, 0, 354, 363, 362, 342, 343, 345, + 347, 353, 360, 366, 339, 348, 0, 0, 616, 0, + 0, 0, 268, 324, 275, 267, 587, 0, 0, 0, + 0, 0, 0, 603, 0, 0, 231, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 300, 0, 406, 260, 0, 459, 0, + 682, 0, 636, 0, 0, 0, 0, 0, 0, 0, + 368, 0, 333, 199, 227, 0, 0, 416, 467, 479, + 0, 0, 0, 256, 0, 477, 430, 611, 235, 287, + 464, 437, 475, 445, 290, 0, 0, 476, 375, 592, + 455, 608, 637, 638, 266, 410, 622, 528, 630, 655, + 228, 263, 424, 512, 614, 500, 401, 588, 589, 332, + 499, 298, 203, 372, 643, 226, 485, 374, 244, 233, + 594, 619, 302, 254, 292, 462, 650, 215, 523, 605, + 241, 489, 0, 0, 658, 249, 510, 617, 606, 217, + 601, 509, 397, 329, 330, 216, 0, 463, 271, 296, + 0, 0, 261, 419, 596, 597, 259, 659, 230, 629, + 222, 0, 628, 412, 591, 602, 398, 386, 221, 600, + 396, 385, 337, 358, 359, 283, 310, 452, 378, 453, + 309, 311, 408, 407, 409, 209, 615, 633, 0, 210, + 0, 505, 618, 660, 457, 214, 236, 237, 239, 0, + 282, 286, 294, 297, 306, 307, 316, 370, 423, 451, + 447, 456, 0, 585, 609, 623, 635, 641, 642, 644, + 645, 646, 647, 648, 651, 649, 411, 314, 501, 336, + 376, 0, 0, 429, 478, 242, 613, 502, 201, 0, + 0, 0, 0, 257, 258, 0, 581, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 656, 514, 520, 515, 516, 517, + 518, 519, 0, 521, 0, 0, 0, 0, 0, 402, + 0, 598, 599, 679, 387, 492, 610, 338, 352, 355, + 344, 364, 0, 365, 340, 341, 346, 349, 350, 351, + 356, 357, 361, 367, 251, 212, 394, 403, 584, 315, + 218, 219, 220, 530, 531, 532, 533, 626, 627, 631, + 207, 468, 469, 470, 471, 295, 621, 312, 474, 473, + 334, 335, 382, 454, 546, 548, 559, 563, 565, 567, + 573, 576, 547, 549, 560, 564, 566, 568, 574, 577, + 536, 538, 540, 542, 555, 554, 551, 579, 580, 557, + 562, 541, 553, 558, 571, 578, 575, 535, 539, 543, + 552, 570, 569, 550, 561, 572, 556, 544, 537, 545, + 0, 198, 223, 371, 0, 460, 291, 657, 625, 490, + 620, 208, 225, 0, 265, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 200, 202, 211, 224, + 234, 238, 245, 264, 279, 281, 288, 301, 313, 321, + 322, 325, 331, 383, 390, 391, 392, 393, 413, 414, + 415, 418, 421, 422, 425, 427, 428, 431, 436, 440, + 441, 442, 444, 446, 448, 461, 466, 480, 481, 482, + 483, 484, 487, 488, 494, 495, 496, 497, 498, 506, + 507, 522, 593, 595, 612, 632, 639, 486, 388, 434, + 458, 586, 304, 305, 449, 450, 317, 318, 653, 654, + 303, 607, 640, 604, 652, 634, 443, 381, 0, 0, + 384, 284, 308, 323, 0, 624, 508, 229, 472, 293, + 253, 0, 0, 213, 248, 232, 262, 277, 280, 327, + 395, 404, 433, 439, 299, 274, 246, 465, 243, 491, + 525, 526, 527, 529, 399, 269, 438, 400, 0, 379, + 582, 583, 319, 0, 0, 0, 534, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, + 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, + 0, 369, 270, 0, 0, 206, 511, 0, 435, 0, + 205, 0, 493, 255, 380, 377, 590, 285, 276, 272, + 252, 320, 389, 432, 524, 426, 0, 373, 0, 0, + 503, 405, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 326, 250, 328, 204, 417, 504, 289, 0, 0, 0, + 0, 0, 513, 731, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, + 354, 363, 362, 342, 343, 345, 347, 353, 360, 366, + 339, 348, 0, 0, 616, 0, 0, 0, 268, 324, + 275, 267, 587, 0, 0, 0, 0, 0, 0, 603, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, + 0, 406, 260, 0, 459, 0, 0, 0, 636, 0, + 0, 0, 0, 0, 0, 0, 368, 0, 333, 199, + 227, 0, 0, 416, 467, 479, 0, 0, 0, 256, + 0, 477, 430, 611, 235, 287, 464, 437, 475, 445, + 290, 0, 0, 476, 375, 592, 455, 608, 637, 638, + 266, 410, 622, 528, 630, 655, 228, 263, 424, 512, + 614, 500, 401, 588, 589, 332, 499, 298, 203, 372, + 643, 226, 485, 374, 244, 233, 594, 619, 302, 254, + 292, 462, 650, 215, 523, 605, 241, 489, 0, 0, + 658, 249, 510, 617, 606, 217, 601, 509, 397, 329, + 330, 216, 0, 463, 271, 296, 0, 0, 261, 419, + 596, 597, 259, 659, 230, 629, 222, 0, 628, 412, + 591, 602, 398, 386, 221, 600, 396, 385, 337, 358, + 359, 283, 310, 452, 378, 453, 309, 311, 408, 407, + 409, 209, 615, 633, 0, 210, 0, 505, 618, 660, + 457, 214, 236, 237, 239, 0, 282, 286, 294, 297, + 306, 307, 316, 370, 423, 451, 447, 456, 0, 585, + 609, 623, 635, 641, 642, 644, 645, 646, 647, 648, + 651, 649, 411, 314, 501, 336, 376, 0, 0, 429, + 478, 242, 613, 502, 201, 0, 0, 0, 0, 257, + 258, 0, 581, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 656, 514, 520, 515, 516, 517, 518, 519, 0, 521, + 0, 0, 0, 0, 0, 402, 0, 598, 599, 679, + 387, 492, 610, 338, 352, 355, 344, 364, 0, 365, + 340, 341, 346, 349, 350, 351, 356, 357, 361, 367, + 251, 212, 394, 403, 584, 315, 218, 219, 220, 530, + 531, 532, 533, 626, 627, 631, 207, 468, 469, 470, + 471, 295, 621, 312, 474, 473, 334, 335, 382, 454, + 546, 548, 559, 563, 565, 567, 573, 576, 547, 549, + 560, 564, 566, 568, 574, 577, 536, 538, 540, 542, + 555, 554, 551, 579, 580, 557, 562, 541, 553, 558, + 571, 578, 575, 535, 539, 543, 552, 570, 569, 550, + 561, 572, 556, 544, 537, 545, 0, 198, 223, 371, + 0, 460, 291, 657, 625, 490, 620, 208, 225, 0, + 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, + 279, 281, 288, 301, 313, 321, 322, 325, 331, 383, + 390, 391, 392, 393, 4158, 414, 415, 418, 421, 422, + 425, 427, 428, 431, 436, 440, 441, 442, 444, 446, + 448, 461, 466, 480, 481, 482, 483, 484, 487, 488, + 494, 495, 496, 497, 498, 506, 507, 522, 593, 595, + 612, 632, 639, 486, 388, 434, 458, 586, 304, 305, + 449, 450, 317, 318, 653, 654, 303, 607, 640, 604, + 652, 634, 443, 381, 0, 0, 384, 284, 308, 323, + 0, 624, 508, 229, 472, 293, 253, 0, 0, 213, + 248, 232, 262, 277, 280, 327, 395, 404, 433, 439, + 299, 274, 246, 465, 243, 491, 525, 526, 527, 529, + 399, 269, 438, 400, 0, 379, 582, 583, 319, 0, + 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 369, 270, 0, + 0, 206, 511, 0, 435, 0, 205, 0, 493, 255, + 380, 377, 590, 285, 276, 272, 252, 320, 389, 432, + 524, 426, 0, 373, 0, 0, 503, 405, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 326, 250, 328, 204, + 417, 504, 289, 0, 0, 0, 0, 0, 513, 731, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, + 0, 0, 247, 0, 0, 0, 354, 363, 362, 342, + 343, 345, 347, 353, 360, 366, 339, 348, 0, 0, + 616, 0, 0, 0, 268, 324, 275, 267, 587, 0, + 0, 0, 0, 0, 0, 603, 0, 0, 231, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 300, 0, 406, 260, 0, + 459, 0, 0, 0, 636, 0, 0, 0, 0, 0, + 0, 0, 368, 0, 333, 199, 227, 0, 0, 416, + 467, 479, 0, 0, 0, 256, 0, 477, 430, 611, + 235, 287, 464, 437, 475, 445, 290, 0, 0, 476, + 375, 592, 455, 608, 637, 638, 266, 410, 622, 528, + 630, 655, 228, 263, 424, 512, 614, 500, 401, 588, + 589, 332, 499, 298, 203, 372, 643, 226, 485, 374, + 244, 233, 594, 619, 302, 254, 292, 462, 650, 215, + 523, 605, 241, 489, 0, 0, 658, 249, 510, 617, + 606, 217, 601, 509, 397, 329, 330, 216, 0, 463, + 271, 296, 0, 0, 261, 419, 596, 597, 259, 659, + 230, 629, 222, 0, 628, 412, 591, 602, 398, 386, + 221, 600, 396, 385, 337, 358, 359, 283, 310, 452, + 378, 453, 309, 311, 408, 407, 409, 209, 615, 633, + 0, 210, 0, 505, 618, 660, 457, 214, 236, 237, + 239, 0, 282, 286, 294, 297, 306, 307, 316, 370, + 423, 451, 447, 456, 0, 585, 609, 623, 635, 641, + 642, 644, 645, 646, 647, 648, 651, 649, 411, 314, + 501, 336, 376, 0, 0, 429, 478, 242, 613, 502, + 201, 0, 0, 0, 0, 257, 258, 0, 581, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 656, 514, 520, 515, + 516, 517, 518, 519, 0, 521, 0, 0, 0, 0, + 0, 402, 0, 598, 599, 679, 387, 492, 610, 338, + 352, 355, 344, 364, 0, 365, 340, 341, 346, 349, + 350, 351, 356, 357, 361, 367, 251, 212, 394, 403, + 584, 315, 218, 219, 220, 530, 531, 532, 533, 626, + 627, 631, 207, 468, 469, 470, 471, 295, 621, 312, + 474, 473, 334, 335, 382, 454, 546, 548, 559, 563, + 565, 567, 573, 576, 547, 549, 560, 564, 566, 568, + 574, 577, 536, 538, 540, 542, 555, 554, 551, 579, + 580, 557, 562, 541, 553, 558, 571, 578, 575, 535, + 539, 543, 552, 570, 569, 550, 561, 572, 556, 544, + 537, 545, 0, 198, 223, 371, 0, 460, 291, 657, + 625, 490, 620, 208, 225, 0, 265, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 200, 202, + 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, + 313, 321, 322, 325, 331, 383, 390, 391, 392, 393, + 413, 414, 415, 418, 421, 422, 425, 427, 428, 431, + 436, 440, 441, 442, 444, 446, 448, 461, 466, 480, + 481, 482, 483, 484, 487, 488, 494, 495, 496, 497, + 498, 506, 507, 522, 593, 595, 612, 632, 639, 486, + 388, 434, 458, 586, 304, 305, 449, 450, 317, 318, + 653, 654, 303, 607, 640, 604, 652, 634, 443, 381, + 0, 0, 384, 284, 308, 323, 0, 624, 508, 229, + 472, 293, 253, 0, 0, 213, 248, 232, 262, 277, + 280, 327, 395, 404, 433, 439, 299, 274, 246, 465, + 243, 491, 525, 526, 527, 529, 399, 269, 438, 400, + 0, 379, 582, 583, 319, 0, 0, 0, 534, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 420, 0, 0, 0, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 369, 270, 0, 0, 206, 511, 0, + 435, 0, 205, 0, 493, 255, 380, 377, 590, 285, + 276, 272, 252, 320, 389, 432, 524, 426, 0, 373, + 0, 0, 503, 405, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 326, 250, 328, 204, 417, 504, 289, 0, + 0, 0, 0, 0, 513, 966, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, + 0, 0, 354, 363, 362, 342, 343, 345, 347, 353, + 360, 366, 339, 348, 0, 0, 616, 0, 0, 0, + 268, 324, 275, 267, 587, 0, 0, 0, 0, 0, + 0, 603, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 300, 0, 406, 260, 0, 459, 0, 0, 0, + 636, 0, 0, 0, 0, 0, 0, 0, 368, 0, + 333, 199, 227, 0, 0, 416, 467, 479, 0, 0, + 0, 256, 0, 477, 430, 611, 235, 287, 464, 437, + 475, 445, 290, 0, 0, 476, 375, 592, 455, 608, + 637, 638, 266, 410, 622, 528, 630, 655, 228, 263, + 424, 512, 614, 500, 401, 588, 589, 332, 499, 298, + 203, 372, 643, 226, 485, 374, 244, 233, 594, 619, + 302, 254, 292, 462, 650, 215, 523, 605, 241, 489, + 0, 0, 658, 249, 510, 617, 606, 217, 601, 509, + 397, 329, 330, 216, 0, 463, 271, 296, 0, 0, + 261, 419, 596, 597, 259, 659, 230, 629, 222, 0, + 628, 412, 591, 602, 398, 386, 221, 600, 396, 385, + 337, 358, 359, 283, 310, 452, 378, 453, 309, 311, + 408, 407, 409, 209, 615, 633, 0, 210, 0, 505, + 618, 660, 457, 214, 236, 237, 239, 0, 282, 286, + 294, 297, 306, 307, 316, 370, 423, 451, 447, 456, + 0, 585, 609, 623, 635, 641, 642, 644, 645, 646, + 647, 648, 651, 649, 411, 314, 501, 336, 376, 0, + 0, 429, 478, 242, 613, 502, 201, 0, 0, 0, + 0, 257, 258, 0, 581, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 656, 514, 520, 515, 516, 517, 518, 519, + 0, 521, 0, 0, 0, 0, 0, 402, 0, 598, + 599, 679, 387, 492, 610, 338, 352, 355, 344, 364, + 0, 365, 340, 341, 346, 349, 350, 351, 356, 357, + 361, 367, 251, 212, 394, 403, 584, 315, 218, 219, + 220, 530, 531, 532, 533, 626, 627, 631, 207, 468, + 469, 470, 471, 295, 621, 312, 474, 473, 334, 335, + 382, 454, 546, 548, 559, 563, 565, 567, 573, 576, + 547, 549, 560, 564, 566, 568, 574, 577, 536, 538, + 540, 542, 555, 554, 551, 579, 580, 557, 562, 541, + 553, 558, 571, 578, 575, 535, 539, 543, 552, 570, + 569, 550, 561, 572, 556, 544, 537, 545, 0, 198, + 223, 371, 0, 460, 291, 657, 625, 490, 620, 208, + 225, 0, 265, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 200, 202, 211, 224, 234, 238, + 245, 264, 279, 281, 288, 301, 313, 321, 322, 325, + 331, 383, 390, 391, 392, 393, 413, 414, 415, 418, + 421, 422, 425, 427, 428, 431, 436, 440, 441, 442, + 444, 446, 448, 461, 466, 480, 481, 482, 483, 484, + 487, 488, 494, 495, 496, 497, 498, 506, 507, 522, + 593, 595, 612, 632, 639, 486, 388, 434, 458, 586, + 304, 305, 449, 450, 317, 318, 653, 654, 303, 607, + 640, 604, 652, 634, 443, 381, 0, 0, 384, 284, + 308, 323, 0, 624, 508, 229, 472, 293, 253, 0, + 0, 213, 248, 232, 262, 277, 280, 327, 395, 404, + 433, 439, 299, 274, 246, 465, 243, 491, 525, 526, + 527, 529, 399, 269, 438, 400, 0, 379, 582, 583, + 319, 0, 0, 0, 534, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 0, 0, 0, 273, 0, 0, 0, 0, 369, + 270, 0, 0, 206, 511, 0, 435, 0, 205, 0, + 493, 255, 380, 377, 590, 285, 276, 272, 252, 320, + 389, 432, 524, 426, 0, 373, 0, 0, 503, 405, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 326, 250, + 328, 204, 417, 504, 289, 0, 0, 0, 0, 0, + 513, 196, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 240, 0, 0, 247, 0, 0, 0, 354, 363, + 362, 342, 343, 345, 347, 353, 360, 366, 339, 348, + 0, 0, 616, 0, 0, 0, 268, 324, 275, 267, + 587, 0, 0, 0, 0, 0, 0, 603, 0, 0, + 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 0, 406, + 260, 0, 459, 0, 0, 0, 636, 0, 0, 0, + 0, 0, 0, 0, 368, 0, 333, 199, 227, 0, + 0, 416, 467, 479, 0, 0, 0, 256, 0, 477, + 430, 611, 235, 287, 464, 437, 475, 445, 290, 0, + 0, 476, 375, 592, 455, 608, 637, 638, 266, 410, + 622, 528, 630, 655, 228, 263, 424, 512, 614, 500, + 401, 588, 589, 332, 499, 298, 203, 372, 643, 226, + 485, 374, 244, 233, 594, 619, 302, 254, 292, 462, + 650, 215, 523, 605, 241, 489, 0, 0, 658, 249, + 510, 617, 606, 217, 601, 509, 397, 329, 330, 216, + 0, 463, 271, 296, 0, 0, 261, 419, 596, 597, + 259, 659, 230, 629, 222, 0, 628, 412, 591, 602, + 398, 386, 221, 600, 396, 385, 337, 358, 359, 283, + 310, 452, 378, 453, 309, 311, 408, 407, 409, 209, + 615, 633, 0, 210, 0, 505, 618, 660, 457, 214, + 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, + 316, 370, 423, 451, 447, 456, 0, 585, 609, 623, + 635, 641, 642, 644, 645, 646, 647, 648, 651, 649, + 411, 314, 501, 336, 376, 0, 0, 429, 478, 242, + 613, 502, 201, 0, 0, 0, 0, 257, 258, 0, + 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 656, 514, + 520, 515, 516, 517, 518, 519, 0, 521, 0, 0, + 0, 0, 0, 402, 0, 598, 599, 679, 387, 492, + 610, 338, 352, 355, 344, 364, 0, 365, 340, 341, + 346, 349, 350, 351, 356, 357, 361, 367, 251, 212, + 394, 403, 584, 315, 218, 219, 220, 530, 531, 532, + 533, 626, 627, 631, 207, 468, 469, 470, 471, 295, + 621, 312, 474, 473, 334, 335, 382, 454, 546, 548, + 559, 563, 565, 567, 573, 576, 547, 549, 560, 564, + 566, 568, 574, 577, 536, 538, 540, 542, 555, 554, + 551, 579, 580, 557, 562, 541, 553, 558, 571, 578, + 575, 535, 539, 543, 552, 570, 569, 550, 561, 572, + 556, 544, 537, 545, 0, 198, 223, 371, 0, 460, + 291, 657, 625, 490, 620, 208, 225, 0, 265, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, + 288, 301, 313, 321, 322, 325, 331, 383, 390, 391, + 392, 393, 413, 414, 415, 418, 421, 422, 425, 427, + 428, 431, 436, 440, 441, 442, 444, 446, 448, 461, + 466, 480, 481, 482, 483, 484, 487, 488, 494, 495, + 496, 497, 498, 506, 507, 522, 593, 595, 612, 632, + 639, 486, 388, 434, 458, 586, 304, 305, 449, 450, + 317, 318, 653, 654, 303, 607, 640, 604, 652, 634, + 443, 381, 0, 0, 384, 284, 308, 323, 0, 624, + 508, 229, 472, 293, 253, 0, 0, 213, 248, 232, + 262, 277, 280, 327, 395, 404, 433, 439, 299, 274, + 246, 465, 243, 491, 525, 526, 527, 529, 399, 269, + 438, 0, 0, 379, 582, 583, 319, } var yyPact = [...]int{ - -1000, -1000, 4350, -1000, -549, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 5272, -1000, -551, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 2520, 2555, -1000, -1000, -1000, -1000, 2696, -1000, 1031, - 2117, -1000, 2474, 4989, -1000, 56250, 778, -1000, 53282, -420, - 897, 238, 36958, -1000, 193, -1000, 186, 54766, 189, -1000, - -1000, -1000, -1000, -420, 22860, 2334, 57, 55, 56250, -1000, - -1000, -1000, -1000, -373, 2641, 2087, -1000, 392, -1000, -1000, - -1000, -1000, -1000, -1000, 52540, -1000, 1119, -1000, -1000, 2482, - 2485, 2309, 941, 2399, -1000, 2569, 2087, -1000, 22860, 2632, - 2475, 22118, 22118, 456, -1000, -1000, 269, -1000, -1000, 31764, - 56250, 39926, 322, -1000, 2474, -1000, -1000, -1000, 211, -1000, - 342, 1987, -1000, 1971, -1000, 937, 914, 389, 473, 471, - 386, 385, 384, 368, 367, 363, 358, 355, 399, -1000, - 958, 958, -218, -220, 371, 769, 460, 460, 1035, 490, - 2427, 2379, -1000, -1000, 958, 958, 958, 339, 958, 958, - 958, 958, 311, 310, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, - 958, 917, 2474, 270, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 2469, 2576, -1000, -1000, -1000, -1000, 2667, -1000, 1033, + 2110, -1000, 2476, 5131, -1000, 55821, 518, -1000, 52837, -455, + 883, 238, 36425, -1000, 185, -1000, 159, 54329, 181, -1000, + -1000, -1000, -1000, -455, 22251, 2336, 37, 35, 55821, -1000, + -1000, -1000, -1000, -370, 2640, 2031, -1000, 400, -1000, -1000, + -1000, -1000, -1000, -1000, 52091, -1000, -1000, -1000, 1120, -1000, + -1000, 2480, 2501, 2332, 946, 2398, -1000, 2565, 2031, -1000, + 22251, 2620, 2438, 21505, 21505, 470, -1000, -1000, 275, -1000, + -1000, 31203, 55821, 39409, 909, -1000, 2476, -1000, -1000, -1000, + 193, -1000, 324, 1990, -1000, 1989, -1000, 913, 964, 387, + 469, 467, 386, 385, 383, 382, 367, 365, 363, 355, + 394, -1000, 962, 962, -241, -242, 1369, 796, 442, 442, + 1140, 483, 2444, 2443, -1000, -1000, 962, 962, 962, 360, + 962, 962, 962, 962, 301, 293, 962, 962, 962, 962, + 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, + 962, 962, 962, 884, 2476, 276, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -7470,68 +7435,68 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 56250, 194, 56250, -1000, 828, 775, - -1000, -1000, -459, 1114, 1114, 101, 1114, 1114, 1114, 1114, - 183, 1043, 54, -1000, 182, 261, 168, 271, 1096, 304, - -1000, -1000, 257, 1096, 1834, -1000, 946, 266, 169, -1000, - 1114, 1114, -1000, 15416, 203, 15416, 15416, 265, 172, -1000, - 2464, -1000, -1000, -1000, -1000, -1000, 1344, -1000, -1000, -1000, - -1000, -37, 489, -1000, -1000, -1000, -1000, 54766, 51798, 283, - -1000, -1000, 780, 1851, 1393, 22860, 1315, 938, -1000, -1000, - 1434, 900, -1000, -1000, -1000, -1000, -1000, 809, -1000, 25086, - 25086, 25086, 25086, -1000, -1000, 1830, 51056, 1830, 1830, 25086, - 1830, 25086, 1830, 1830, 1830, 1830, 22860, 1830, 1830, 1830, - 1830, -1000, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, -1000, -1000, -1000, -1000, 1830, 826, 1830, 1830, 1830, - 1830, 1830, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1830, - 1830, 1830, 1830, 1830, 1830, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, -1000, -1000, - -1000, 1692, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1693, - 1513, 1500, 1498, -1000, 19892, 1830, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 55821, 252, 55821, -1000, 835, 517, -1000, -1000, -459, 1107, + 1107, 96, 1107, 1107, 1107, 1107, 172, 1028, 32, -1000, + 160, 294, 167, 277, 1099, 299, -1000, -1000, 265, 1099, + 1868, -1000, 951, 273, 158, -1000, 1107, 1107, -1000, 14767, + 206, 14767, 14767, 269, 147, -1000, 2457, -1000, -1000, -1000, + -1000, -1000, 1365, -1000, -1000, -1000, -1000, -39, 482, -1000, + -1000, -1000, -1000, 54329, 51345, 291, -1000, -1000, 33, 1892, + 1527, 22251, 1574, 944, -1000, -1000, 1428, 906, -1000, -1000, + -1000, -1000, -1000, 816, -1000, 24489, 24489, 24489, 24489, -1000, + -1000, 1998, 50599, 1998, 1998, 24489, 1998, 24489, 1998, 1998, + 1998, 1998, 22251, 1998, 1998, 1998, 1998, -1000, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, -1000, -1000, -1000, + -1000, 1998, 834, 1998, 1998, 1998, 1998, 1998, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1998, 1998, 1998, 1998, 1998, + 1998, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, -1000, -1000, -1000, 1684, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1652, 1611, 1609, 1588, -1000, + 19267, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 56250, -1000, 1830, - 216, 54766, 54766, 340, 1333, -1000, -1000, 2569, 2087, -1000, - 2641, 2620, 392, -1000, 3919, 2111, 1683, 1406, 2087, 1954, - 56250, -1000, 2005, -1000, -1000, -1000, -357, -364, 2232, 1455, - 1829, -1000, -1000, -1000, -1000, 1798, 22860, -1000, -1000, 2693, - -1000, 28796, 823, 2687, 50314, -1000, 456, 456, 1969, 421, - 13, -1000, -1000, -1000, -1000, 979, 36216, -1000, -1000, -1000, - -1000, -1000, 1884, 56250, -1000, -1000, 5043, 54766, -1000, 2107, - -1000, 1875, -1000, 2041, 22860, 2126, 768, 54766, 523, 516, - 510, 475, -62, -1000, -1000, -1000, -1000, -1000, -1000, 958, - 958, 958, -1000, 395, 2623, 4989, 5064, -1000, -1000, -1000, - 49572, 2102, 54766, -1000, 2088, -1000, 1039, 861, 864, 864, - 54766, -1000, -1000, 55508, 54766, 1037, 1033, 54766, 54766, 54766, - 54766, -1000, 48830, -1000, 48088, 47346, 1331, 54766, 46604, 45862, - 45120, 44378, 43636, -1000, 2609, -1000, 2204, -1000, -1000, -1000, - 55508, 54766, 54766, 55508, 54766, 55508, 56250, 54766, -1000, -1000, - 357, -1000, -1000, 1329, 1327, 1319, 958, 958, 1317, 1828, - 1823, 1816, 958, 958, 1305, 1800, 38442, 1780, 276, 1299, - 1296, 1294, 1293, 1775, 259, 1757, 1237, 1220, 1272, 54766, - 2083, 56250, -1000, 250, 1070, 434, 978, 2474, 2331, 1964, - 488, 767, 54766, 474, 474, 54766, -1000, 16164, 56250, 230, - -1000, 1744, 22860, -1000, 1117, 1096, 1096, -1000, -1000, -1000, - -1000, -1000, -1000, 1114, 56250, 1117, -1000, -1000, -1000, 1096, - 1114, 56250, 1114, 1114, 1114, 1114, 1096, 1096, 1096, 1114, - 56250, 56250, 56250, 56250, 56250, 56250, 56250, 56250, 56250, 15416, - 946, 1114, -460, -1000, 1742, -1000, -1000, -1000, 2230, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1998, -1000, -1000, -1000, 55821, -1000, 1998, 217, 54329, + 54329, 331, 1347, -1000, -1000, 2565, 2031, -1000, 2640, 2644, + 400, -1000, 3901, 1759, 1695, 1378, 2031, 1967, 55821, -1000, + 2015, 211, -1000, -1000, -1000, -309, -330, 2272, 1486, 1864, + -1000, -1000, -1000, -1000, 2347, 22251, -1000, -1000, 2662, -1000, + 28965, 833, 2658, 49853, -1000, 470, 470, 1986, 423, 9, + -1000, -1000, -1000, -1000, 982, 35679, -1000, -1000, -1000, -1000, + -1000, 1878, 55821, -1000, -1000, 5540, 54329, -1000, 2109, -1000, + 1862, -1000, 2072, 22251, 2125, 516, 54329, 513, 509, 499, + 463, -71, -1000, -1000, -1000, -1000, -1000, -1000, 962, 962, + 962, -1000, 393, 2614, 5131, 6483, -1000, -1000, -1000, 49107, + 2107, 54329, -1000, 2102, -1000, 1046, 842, 877, 877, 54329, + -1000, -1000, 55075, 54329, 1043, 1040, 54329, 54329, 54329, 54329, + -1000, 48361, -1000, 47615, 46869, 1346, 54329, 46123, 45377, 44631, + 43885, 43139, -1000, 2527, -1000, 2143, -1000, -1000, -1000, 55075, + 54329, 54329, 55075, 54329, 55075, 55821, 54329, -1000, -1000, 328, + -1000, -1000, 1343, 1340, 1338, 962, 962, 1337, 1857, 1852, + 1831, 962, 962, 1309, 1820, 37917, 1818, 266, 1303, 1296, + 1294, 1290, 1813, 205, 1809, 1288, 1272, 1280, 54329, 2093, + 55821, -1000, 260, 1006, 1015, 980, 2476, 2335, 1984, 480, + 515, 54329, 461, 461, 54329, -1000, 15519, 55821, 213, -1000, + 1770, 22251, -1000, 1102, 1099, 1099, -1000, -1000, -1000, -1000, + -1000, -1000, 1107, 55821, 1102, -1000, -1000, -1000, 1099, 1107, + 55821, 1107, 1107, 1107, 1107, 1099, 1099, 1099, 1107, 55821, + 55821, 55821, 55821, 55821, 55821, 55821, 55821, 55821, 14767, 951, + 1107, -460, -1000, 1757, -1000, -1000, -1000, 2231, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -7546,337 +7511,339 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 15416, - 15416, -1000, -1000, 2565, 2559, -1000, -1000, -1000, 1960, -1000, - 184, 17, 185, -1000, 42894, 535, 974, -1000, 535, -1000, - -1000, -1000, -1000, -1000, 1959, 42152, -1000, -461, -464, -467, - -469, -1000, -1000, -1000, -471, -473, -1000, -1000, -1000, 22860, - 22860, 22860, 22860, -257, -1000, 1217, 25086, 2491, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 22860, 247, 1131, 25086, 25086, - 25086, 25086, 25086, 25086, 25086, 26570, 25828, 25086, 25086, 25086, - 25086, 25086, 25086, -1000, -1000, 33990, 6271, 6271, 900, 900, - 900, 900, -1000, -174, 1958, 55508, -1000, -1000, -1000, 822, - 22860, 22860, 900, -1000, 1238, 2007, 19892, 22860, 22860, 22860, - 22860, 960, 1393, 55508, 22860, -1000, 1406, -1000, -1000, -1000, - -1000, 1234, -1000, -1000, 1081, 2376, 2376, 2376, 2376, 22860, - 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 2376, - 22860, 208, 208, 919, 22860, 22860, 22860, 22860, 22860, 22860, - 22860, 22860, 18408, 22860, 22860, 25086, 22860, 22860, 22860, 1406, - 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, - 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, - 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, - 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, - 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, - 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, - 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, - 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 1406, - 22860, 1221, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 17660, - 22860, 22860, 22860, 22860, 22860, -1000, -1000, -1000, -1000, -1000, - -1000, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 1406, - 22860, 22860, 22860, 22860, 22860, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1686, 1493, 1478, 22860, -1000, - 1957, -1000, -202, 31022, 22860, 1739, 2683, 2157, 54766, -1000, - -1000, -1000, -1000, 2569, -1000, 2569, 1686, 3881, 2277, 22118, - -1000, -1000, 3881, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1737, -1000, 56250, 1954, - 2545, 54766, -1000, -294, -1000, -295, 2272, 1730, 351, -1000, - 22860, 22860, 1953, -1000, 1399, 56250, -1000, -257, -1000, 41410, - -1000, -1000, 14668, 56250, 350, 56250, -1000, 30280, 40668, 306, - -1000, 13, 1933, -1000, 29, 1, 19150, 899, -1000, -1000, - -1000, 371, 27312, 1822, 899, 100, -1000, -1000, -1000, 2041, - -1000, 2041, 2041, 2041, 2041, 351, 351, 351, 351, -1000, - -1000, -1000, -1000, -1000, 2079, 2041, 2075, -1000, 2041, 2041, - 2041, 2041, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2073, - 2073, 2073, 2061, 2061, 2042, 2042, 447, -1000, 22860, 486, - 39926, 2537, 1270, 1538, 250, 475, 2144, 54766, 54766, 54766, - 56250, 989, -1000, 1445, 1412, 1398, -1000, -532, 1952, -1000, - -1000, 2617, -1000, -1000, 956, 1088, 1084, 1064, 54766, 214, - 335, -1000, 433, -1000, 39926, 54766, 1029, 864, 54766, -1000, - 54766, -1000, -1000, -1000, -1000, -1000, 54766, -1000, -1000, 1950, - -1000, 1927, 1106, 1083, 1098, 1080, 1950, -1000, -1000, -183, - 1950, -1000, 1950, -1000, 1950, -1000, 1950, -1000, 1950, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1001, 278, - -350, 54766, 214, 487, -1000, 485, 33990, -1000, -1000, -1000, - 33990, 33990, -1000, -1000, -1000, -1000, 1726, 1723, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 14767, 14767, + -1000, -1000, 2562, 2560, -1000, -1000, -1000, 1981, -1000, 175, + 4, 179, -1000, 42393, 493, 969, -1000, 493, -1000, -1000, + -1000, -1000, -1000, 1977, 41647, -1000, -463, -464, -468, -470, + -1000, -1000, -1000, -471, -477, -1000, -1000, -1000, 22251, 22251, + 22251, 22251, -276, -1000, 1426, 24489, 2456, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 22251, 1195, 1144, 24489, 24489, 24489, + 24489, 24489, 24489, 24489, 25981, 25235, 24489, 24489, 24489, 24489, + 24489, 24489, -1000, -1000, 33441, 5242, 5242, 906, 906, 906, + 906, -1000, -181, 1973, 55075, -1000, -1000, -1000, 832, 22251, + 22251, 906, -1000, 1196, 1029, 19267, 22251, 22251, 22251, 22251, + 990, 1527, 55075, 22251, -1000, 1378, -1000, -1000, -1000, -1000, + 1200, -1000, -1000, 1091, 2403, 2403, 2403, 2403, 22251, 22251, + 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 2403, 22251, + 151, 151, 961, 22251, 22251, 22251, 22251, 22251, 22251, 22251, + 22251, 17775, 22251, 22251, 24489, 22251, 22251, 22251, 1378, 22251, + 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, + 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, + 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, + 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, + 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, + 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, + 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, + 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 1378, 22251, + 1199, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 17023, 22251, + 22251, 22251, 22251, 22251, -1000, -1000, -1000, -1000, -1000, -1000, + 22251, 22251, 22251, 22251, 22251, 22251, 22251, 22251, 1378, 22251, + 22251, 22251, 22251, 22251, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1764, 1721, 1554, 1998, 22251, -1000, + 1972, -1000, -183, 30457, 22251, 1755, 2651, 2147, 54329, -1000, + -1000, -1000, -1000, 2565, -1000, 2565, 1764, 3686, 2279, 21505, + -1000, -1000, 3686, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 1783, -1000, 55821, 1967, + 2544, 54329, -1000, 1958, -1000, -1000, 1998, -1000, -315, -1000, + -343, 2265, 1752, 371, -1000, 22251, 22251, 1951, -1000, 1409, + 55821, -1000, -276, -1000, 40901, -1000, -1000, 14015, 55821, 337, + 55821, -1000, 29711, 40155, 303, -1000, 9, 1923, -1000, 11, + -15, 18521, 901, -1000, -1000, -1000, 1369, 26727, 1879, 901, + 85, -1000, -1000, -1000, 2072, -1000, 2072, 2072, 2072, 2072, + 371, 371, 371, 371, -1000, -1000, -1000, -1000, -1000, 2092, + 2072, 2091, -1000, 2072, 2072, 2072, 2072, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -520, 56250, -1000, - 236, 971, 268, 376, 291, 56250, 405, 2423, 2413, 2403, - 2396, 2391, 2373, 2366, 242, 298, 56250, 56250, 474, 2206, - 56250, 2522, 56250, -1000, -1000, -1000, -1000, -1000, 1716, 1708, - -1000, 1393, 56250, -1000, -1000, 1114, 1114, -1000, -1000, 56250, - 1114, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1114, + -1000, -1000, -1000, -1000, 2089, 2089, 2089, 2088, 2088, 2074, + 2074, 437, -1000, 22251, 384, 39409, 2517, 1279, 1681, 260, + 463, 2144, 54329, 54329, 54329, 55821, 1005, -1000, 1476, 1469, + 1425, -1000, -533, 1950, -1000, -1000, 2606, -1000, -1000, 1105, + 1087, 1082, 1138, 54329, 229, 323, -1000, 429, -1000, 39409, + 54329, 1038, 877, 54329, -1000, 54329, -1000, -1000, -1000, -1000, + -1000, 54329, -1000, -1000, 1949, -1000, 1959, 1103, 1081, 1088, + 1065, 1949, -1000, -1000, -189, 1949, -1000, 1949, -1000, 1949, + -1000, 1949, -1000, 1949, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 963, 336, -384, 54329, 229, 475, -1000, + 473, 33441, -1000, -1000, -1000, 33441, 33441, -1000, -1000, -1000, + -1000, 1741, 1737, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 56250, -1000, -1000, -1000, -1000, - 1702, -1000, 56250, -37, 177, -1000, -1000, 54766, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -114, -1000, 854, - 26, 393, -1000, -1000, -1000, -1000, -1000, 2550, -1000, 1393, - 1021, 1010, -1000, 1830, -1000, -1000, 1233, -1000, -1000, -1000, - -1000, -1000, 1830, 1830, 1830, -1000, -1000, -1000, -1000, -1000, - 247, 25086, 25086, 25086, 1782, 777, 1891, 1812, 1474, 1231, - 1231, 976, 25086, 976, 25086, 918, 918, 918, 918, 918, - -1000, -1000, -1000, -1000, -1000, -1000, 1692, -1000, 1667, -1000, - 1830, 55508, 1827, 17660, 1747, 1599, 1406, 932, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 3935, 1406, - 1851, 1406, 1674, 3902, 1026, -1000, 22860, 1406, 3610, -1000, - -1000, 1406, 1406, 22860, -1000, -1000, 22860, 22860, 22860, 22860, - 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, - 22860, 1538, 1947, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -522, 55821, -1000, 254, 968, 304, 296, 308, + 55821, 390, 2432, 2430, 2426, 2408, 2401, 2395, 2383, 239, + 288, 55821, 55821, 461, 2208, 55821, 2507, 55821, -1000, -1000, + -1000, -1000, -1000, 1733, 1704, -1000, 1527, 55821, -1000, -1000, + 1107, 1107, -1000, -1000, 55821, 1107, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1107, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 1938, 2669, 1558, 1538, 1538, 1538, 1538, 3587, 1538, - 1538, 22860, 1358, -1000, -1000, -1000, 1419, 3583, 1684, 3572, - 1538, 1538, -1000, 1538, 3541, 3536, 1406, 2928, 2820, 1538, - 1538, 1538, 1538, 1538, 2792, 2778, 1538, 1538, 2705, 1538, - 3522, 1538, 2698, 2681, 2677, 2633, 2611, 2603, 2594, 2570, - 2561, 2539, 2533, 2523, 2509, 2492, 2458, 2448, 2444, 2407, - 1538, 1538, 1538, 3508, 1538, 3489, 1538, 3485, 1538, 1538, - 3474, 2394, 2364, 1406, 1934, -1000, 3469, 1538, 3457, 3453, - 3446, 2354, 3427, 3422, 3418, 1538, 1538, 1538, 2339, 3413, - 3407, 3395, 3391, 3374, 3369, 3364, 3355, 3343, 1538, 1478, - 1478, 1478, 1478, 1478, 3253, -259, 1538, 1406, -1000, -1000, - -1000, -1000, -1000, 3092, 2333, 3042, 3030, 3011, 3003, 1406, - 1830, 821, -1000, -1000, 1478, 1406, 1406, 1478, 1478, 2995, - 2963, 2957, 2953, 2933, 2834, 1538, 1538, -1000, 1538, 2810, - 2800, 2303, 2290, 1406, -1000, 1478, 56250, -1000, -451, -1000, - -8, 954, 1830, -1000, 38442, 1406, -1000, 4349, -1000, 1168, - -1000, -1000, -1000, -1000, -1000, 35474, 1879, -1000, -1000, -1000, - -1000, 1830, 1762, -1000, -1000, -1000, -1000, 351, 73, 34732, - 890, 890, 123, 1393, 1393, 22860, -1000, -1000, -1000, -1000, - -1000, -1000, 820, 2642, 404, 1830, -1000, 1948, 3576, -1000, - -1000, -1000, 2544, 28054, -1000, -1000, 1830, 1830, 56250, 1939, - 1745, -1000, 819, -1000, 1320, 1933, 13, 24, -1000, -1000, - -1000, -1000, 1393, -1000, 1378, 353, 346, -1000, 437, -1000, - -1000, -1000, -1000, 2343, 81, -1000, -1000, -1000, 912, 351, - -1000, -1000, -1000, -1000, -1000, -1000, 1664, -1000, 1664, -1000, - -1000, -1000, -1000, -1000, 1268, -1000, -1000, -1000, -1000, 1266, - -1000, -1000, 1256, -1000, -1000, 2877, 2183, 486, -1000, -1000, - 958, 1655, -1000, -1000, 2356, 958, 958, 54766, -1000, -1000, - 1783, 2537, 236, 56250, 2203, -1000, 2144, 2144, 2144, -1000, - 2497, -1000, -1000, -1000, -1000, -1000, -1000, -522, 174, 609, - -1000, -1000, -1000, 1389, 54766, 1721, -1000, 224, -1000, 1779, - -1000, 54766, -1000, 1713, 2053, 54766, 54766, -1000, -1000, -1000, - 54766, 1830, -1000, -1000, -1000, -1000, 760, 2471, 319, -1000, - -1000, -283, -1000, -1000, 214, 224, 55508, 54766, 899, -1000, - -1000, -1000, -1000, -1000, -523, 1690, 506, 228, 328, 56250, - 56250, 56250, 56250, 56250, 56250, 800, -1000, -1000, 39, -1000, - -1000, 202, -1000, -1000, 1623, -1000, -1000, -1000, -1000, 202, - -1000, -1000, -1000, -1000, -1000, 275, 478, -1000, 56250, 56250, - 964, -1000, -1000, -1000, -1000, -1000, 1096, -1000, -1000, 1096, + 55821, -1000, -1000, -1000, -1000, 1689, -1000, 55821, -39, 153, + -1000, -1000, 54329, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -117, -1000, 327, 2, 419, -1000, -1000, -1000, + -1000, -1000, 2553, -1000, 1527, 1009, 1020, -1000, 1998, -1000, + -1000, 1108, -1000, -1000, -1000, -1000, -1000, 1998, 1998, 1998, + -1000, -1000, -1000, -1000, -1000, 1195, 24489, 24489, 24489, 1509, + 799, 1412, 924, 1454, 1443, 1443, 955, 24489, 955, 24489, + 910, 910, 910, 910, 910, -1000, -1000, -1000, -1000, -1000, + -1000, 1684, -1000, 1682, -1000, 1998, 55075, 1844, 17023, 2023, + 1371, 1378, 933, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 2457, 56250, 20, -490, -1000, -486, 22860, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1666, 749, 1891, 25086, - 25086, 2007, 2007, 25086, -1000, -1000, -1000, 1076, 1076, 33990, - -1000, 25086, 22860, -1000, -1000, 22860, 22860, 22860, 981, -1000, - 22860, 1181, -1000, 22860, -1000, -259, 1478, 1538, 1538, 1538, - 1538, -259, -259, -259, -259, -259, -259, -259, -259, -259, - -259, 1908, -1000, 22860, 22860, 22860, 1406, 334, -1000, -1000, - -1000, -259, 22860, -1000, -1000, 2666, -1000, 22860, -1000, 33990, - 22860, 22860, 22860, -1000, -1000, -1000, 22860, 22860, -1000, -1000, - 22860, -1000, 22860, -1000, -1000, -1000, -1000, -1000, -1000, 22860, - -1000, 22860, -1000, -1000, -1000, 22860, -1000, 22860, -1000, -1000, - 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, - 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, - 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, - 22860, -1000, 22860, -1000, 22860, -1000, -1000, -1000, 22860, -1000, - 22860, -1000, 22860, -1000, -1000, 22860, -1000, 22860, -1000, 22860, - -1000, 22860, 22860, -1000, 22860, 22860, 22860, -1000, 22860, 22860, - 22860, 22860, -1000, -1000, -1000, -1000, 22860, 22860, 22860, 22860, - 22860, 22860, 22860, 22860, 22860, 22860, -1000, -1000, -1000, -1000, - -1000, -1000, 22860, -1000, 39926, 47, -259, 1221, 47, 1221, - 24344, 832, 507, 23602, -1000, 22860, 16912, -1000, -1000, -1000, - -1000, -1000, 22860, 22860, 22860, 22860, 22860, 22860, -1000, -1000, - -1000, 22860, 22860, -1000, 22860, -1000, 22860, -1000, -1000, -1000, - -1000, -1000, 954, -1000, 455, 453, 864, 54766, -1000, -1000, - -1000, -1000, 1930, -1000, 2564, -1000, 2285, 2284, 2659, 2642, - 22118, -1000, 30280, -1000, -1000, 54766, -419, -1000, 2326, 2476, - 890, 890, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 13920, - 2569, 22860, 2201, 55508, 223, -1000, 29538, 54766, 55508, 30280, - 30280, 30280, 30280, 30280, -1000, 2242, 2235, -1000, 2254, 2228, - 2313, 56250, -1000, 1686, 1688, -1000, 22860, 32506, 1935, 30280, - -1000, -1000, 30280, 56250, 13172, -1000, -1000, 6, -7, -1000, - -1000, -1000, -1000, 371, -1000, -1000, 1082, 2543, 2338, -1000, - -1000, -1000, -1000, -1000, 1682, -1000, 1676, 1928, 1671, 1662, - 278, -1000, 2067, 2451, 958, 958, -1000, 1254, -1000, 1238, - 1614, 1586, -1000, -1000, -1000, 496, -1000, 56250, 2200, 2195, - 2194, -1000, -540, 1253, 2052, 2012, 22860, 2051, 2615, 1913, - 54766, -1000, -1000, 55508, -1000, 197, -1000, 486, 54766, -1000, - -1000, -1000, 335, 56250, -1000, 7068, -1000, -1000, -1000, 224, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 56250, 233, -1000, - 2047, 1343, -1000, -1000, 2140, -1000, -1000, -1000, -1000, -1000, - 213, 201, 1583, 199, 1547, -1000, 199, -1000, 56250, 928, - 2183, 56250, -1000, -1000, -1000, 1114, 1114, -1000, -1000, 2449, - -1000, 1238, 1538, 25086, 25086, -1000, 900, -1000, -1000, 435, - -229, 2041, 2041, -1000, 2041, 2042, -1000, 2041, 171, 2041, - 154, 2041, -1000, -1000, 1406, 1406, -1000, 1478, 2286, 1439, - 2796, -1000, 1393, 22860, 2715, -1000, -1000, -259, -259, -259, - -259, -259, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -69, 2689, 2637, 1538, -1000, 2039, 2036, -1000, - 1538, 22860, 1538, 1406, 2278, 1538, 1538, 1538, 1538, 1538, - 1538, 1538, 1538, 1538, 1538, 1538, 1538, 2266, 2257, 2249, - 2196, 2175, 2171, 2167, 2163, 2158, 2149, 2145, 2128, 2084, - 2080, 2076, 2062, 1538, 1538, 2058, 1538, 2054, 2048, -1000, - 1393, 1478, 2628, 1478, 1538, 1538, 2527, 337, 1538, 1651, - 1651, 1651, 1651, 1651, 1478, 1478, 1478, 1478, 1538, 54766, - -1000, -259, -1000, -1000, -307, -309, -1000, 1406, -259, 1926, - 25086, 1538, 25086, 25086, 25086, 1538, 1406, -1000, 2043, 2010, - 2270, 1940, 1538, 1832, 1538, 1538, 1538, 1821, -1000, 2535, - 1830, 2535, 1830, 2535, 1647, 1168, 56250, -1000, -1000, -1000, - -1000, 2642, 2639, -1000, 1914, -1000, 73, 639, -1000, 2311, - 2476, -1000, 2610, 2306, 2598, -1000, -1000, -1000, -1000, -1000, - 1393, -1000, 2479, 1916, -1000, 963, 1907, -1000, -1000, 21376, - 1649, 2281, 817, 1647, 1923, 3576, 2136, 2190, 3359, -1000, - -1000, -1000, -1000, 2231, -1000, 2063, -1000, -1000, 2005, -1000, - 1790, 350, 30280, 1877, 1877, -1000, 816, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1100, 7068, 2704, -1000, 1544, -1000, - 1366, 195, 1240, -1000, -1000, 958, 958, -1000, 1028, 1020, - -1000, 56250, 2031, -1000, 351, 1529, 351, 1225, -1000, -1000, - 1215, -1000, -1000, -1000, -1000, 1994, 2562, -1000, -1000, -1000, - -1000, 56250, -1000, 56250, 56250, 56250, 2029, 2595, -1000, 22860, - 2015, 962, 2253, 54766, 54766, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 427, 958, -503, 297, - 294, 958, 958, 958, -541, -1000, -1000, 1639, 1637, -1000, - -205, -1000, 22860, -1000, -1000, -1000, -1000, -1000, 1249, 1249, - 1513, 1500, 1498, -1000, 2005, -1000, -1000, -1000, 1722, -1000, - -1000, -186, 54766, 54766, 54766, 54766, -1000, -1000, -1000, 1187, + -1000, -1000, -1000, 3541, 1378, 1892, 1378, 2206, 3526, 997, + -1000, 22251, 1378, 3516, -1000, -1000, 1378, 1378, 22251, -1000, + -1000, 22251, 22251, 22251, 22251, 1681, 1681, 1681, 1681, 1681, + 1681, 1681, 1681, 1681, 1681, 22251, 1681, 1945, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 900, 1406, 375, -188, 1406, -1000, -1000, 351, + -1000, -1000, -1000, -1000, -1000, -1000, 1935, 2649, 2008, 1681, + 1681, 1681, 1681, 3508, 1681, 1681, 22251, 1308, -1000, -1000, + -1000, 1562, 3504, 1367, 3496, 1681, 1681, -1000, 1681, 3491, + 3485, 1378, 2671, 2666, 1681, 1681, 1681, 1681, 1681, 2650, + 2632, 1681, 1681, 2581, 1681, 3461, 1681, 2564, 2556, 2551, + 2542, 2534, 2526, 2479, 2454, 2448, 2427, 2418, 2411, 2373, + 2338, 2331, 2322, 2308, 2304, 1681, 1681, 1681, 3450, 1681, + 3446, 1681, 3442, 1681, 1681, 3433, 2300, 2295, 1378, 1932, + -1000, 3418, 1681, 3414, 3410, 3405, 2270, 3398, 3388, 3384, + 1681, 1681, 1681, 2261, 3371, 3363, 3109, 3102, 3097, 3058, + 3048, 3044, 3028, 1681, 1554, 1554, 1554, 1554, 1554, 3024, + -279, 1681, 1378, -1000, -1000, -1000, -1000, -1000, 2996, 2256, + 2992, 2981, 2976, 2955, 1378, 1998, 831, -1000, -1000, 1554, + 1378, 1378, 1554, 1554, 2920, 2894, 2890, 2882, 2816, 2796, + 1681, 1681, -1000, 1681, 2774, 2762, 2234, 2190, 1378, -1000, + 1554, 55821, -1000, -454, -1000, -12, 912, 1998, -1000, 37917, + 1378, -1000, 4152, -1000, 1353, -1000, -1000, -1000, -1000, -1000, + 34933, 1828, -1000, -1000, -1000, -1000, 1998, 1802, -1000, -494, + 20759, -1000, -1000, -1000, 371, 56, 34187, 882, 882, 111, + 1527, 1527, 22251, -1000, -1000, -1000, -1000, -1000, -1000, 829, + 2639, 438, 1998, -1000, 1944, 2988, -1000, -1000, -1000, 2541, + 27473, -1000, -1000, 1998, 1998, 55821, 1839, 1799, -1000, 825, + -1000, 1370, 1923, 9, -9, -1000, -1000, -1000, -1000, 1527, + -1000, 1422, 353, 351, -1000, 462, -1000, -1000, -1000, -1000, + 2357, 75, -1000, -1000, -1000, 373, 371, -1000, -1000, -1000, + -1000, -1000, -1000, 1678, -1000, 1678, -1000, -1000, -1000, -1000, + -1000, 1277, -1000, -1000, -1000, -1000, 1274, -1000, -1000, 1271, + -1000, -1000, 2692, 2171, 384, -1000, -1000, 962, 1667, -1000, + -1000, 2375, 962, 962, 54329, -1000, -1000, 1829, 2517, 254, + 55821, 2207, -1000, 2144, 2144, 2144, -1000, 2503, -1000, -1000, + -1000, -1000, -1000, -1000, -526, 176, 364, -1000, -1000, -1000, + 5096, 54329, 1794, -1000, 226, -1000, 1765, -1000, 54329, -1000, + 1792, 2087, 54329, 54329, -1000, -1000, -1000, 54329, 1998, -1000, + -1000, -1000, -1000, 504, 2475, 332, -1000, -1000, -301, -1000, + -1000, 229, 226, 55075, 54329, 901, -1000, -1000, -1000, -1000, + -1000, -527, 1787, 490, 231, 334, 55821, 55821, 55821, 55821, + 55821, 55821, 791, -1000, -1000, 18, -1000, -1000, 203, -1000, + -1000, 1664, -1000, -1000, -1000, -1000, 203, -1000, -1000, -1000, + -1000, -1000, 274, 472, -1000, 55821, 55821, 931, -1000, -1000, + -1000, -1000, -1000, 1099, -1000, -1000, 1099, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2453, + 55821, -1, -491, -1000, -488, 22251, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1331, 506, 1412, 24489, 24489, 1029, 1029, + 24489, -1000, -1000, -1000, 996, 996, 33441, -1000, 24489, 22251, + -1000, -1000, 22251, 22251, 22251, 985, -1000, 22251, 1291, -1000, + 22251, -1000, -279, 1554, 1681, 1681, 1681, 1681, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, 1926, -1000, + 22251, 22251, 22251, 1378, 333, -1000, -1000, -1000, -279, 22251, + -1000, -1000, 2645, -1000, 22251, -1000, 33441, 22251, 22251, 22251, + -1000, -1000, -1000, 22251, 22251, -1000, -1000, 22251, -1000, 22251, + -1000, -1000, -1000, -1000, -1000, -1000, 22251, -1000, 22251, -1000, + -1000, -1000, 22251, -1000, 22251, -1000, -1000, 22251, -1000, 22251, + -1000, 22251, -1000, 22251, -1000, 22251, -1000, 22251, -1000, 22251, + -1000, 22251, -1000, 22251, -1000, 22251, -1000, 22251, -1000, 22251, + -1000, 22251, -1000, 22251, -1000, 22251, -1000, 22251, -1000, 22251, + -1000, 22251, -1000, -1000, -1000, 22251, -1000, 22251, -1000, 22251, + -1000, -1000, 22251, -1000, 22251, -1000, 22251, -1000, 22251, 22251, + -1000, 22251, 22251, 22251, -1000, 22251, 22251, 22251, 22251, -1000, + -1000, -1000, -1000, 22251, 22251, 22251, 22251, 22251, 22251, 22251, + 22251, 22251, 22251, -1000, -1000, -1000, -1000, -1000, -1000, 22251, + -1000, 39409, 8, -279, 1199, 8, 1199, 23743, 837, 817, + 22997, -1000, 22251, 16271, -1000, -1000, -1000, -1000, -1000, 22251, + 22251, 22251, 22251, 22251, 22251, -1000, -1000, -1000, 22251, 22251, + -1000, 22251, -1000, 22251, -1000, -1000, -1000, -1000, -1000, 912, + -1000, 471, 446, 877, 54329, -1000, -1000, -1000, -1000, 1922, + -1000, 2552, -1000, 2301, 2292, 2641, 2639, 21505, -1000, 29711, + -1000, -1000, 54329, -1000, -1000, -443, -1000, 2328, 2340, 882, + 882, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 13263, 2565, + 22251, 2204, 55075, 1998, -1000, 28219, 54329, 55075, 29711, 29711, + 29711, 29711, 29711, -1000, 2222, 2220, -1000, 2249, 2248, 2296, + 55821, -1000, 1764, 1781, -1000, 22251, 31949, 1886, 29711, -1000, + -1000, 29711, 55821, 12511, -1000, -1000, -5, -20, -1000, -1000, + -1000, -1000, 1369, -1000, -1000, 1213, 2535, 2351, -1000, -1000, + -1000, -1000, -1000, 1777, -1000, 1748, 1921, 1732, 1730, 336, + -1000, 2118, 2449, 962, 962, -1000, 1263, -1000, 1196, 1661, + 1655, -1000, -1000, -1000, 489, -1000, 55821, 2199, 2191, 2186, + -1000, -544, 1255, 2085, 2116, 22251, 2078, 2604, 1905, 54329, + -1000, -1000, 55075, -1000, 278, -1000, 384, 54329, -1000, -1000, + -1000, 323, 55821, -1000, 9274, -1000, -1000, -1000, 226, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 55821, 241, -1000, 2076, + 1361, -1000, -1000, 2131, -1000, -1000, -1000, -1000, -1000, 208, + 189, 1634, 196, 1622, -1000, 196, -1000, 55821, 923, 2171, + 55821, -1000, -1000, -1000, 1107, 1107, -1000, -1000, 2440, -1000, + 1196, 1681, 24489, 24489, -1000, 906, -1000, -1000, 503, -256, + 2072, 2072, -1000, 2072, 2074, -1000, 2072, 134, 2072, 127, + 2072, -1000, -1000, 1378, 1378, -1000, 1554, 2185, 1383, 2727, + -1000, 1527, 22251, 2719, -1000, -1000, -279, -279, -279, -279, + -279, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -78, 2712, 2706, 1681, -1000, 2070, 2062, -1000, 1681, + 22251, 1681, 1378, 2166, 1681, 1681, 1681, 1681, 1681, 1681, + 1681, 1681, 1681, 1681, 1681, 1681, 2162, 2158, 2154, 2150, + 2145, 2135, 2124, 2117, 2063, 2056, 2045, 2040, 2019, 1995, + 1991, 1979, 1681, 1681, 1974, 1681, 1969, 1928, -1000, 1527, + 1554, 2687, 1554, 1681, 1681, 2637, 330, 1681, 1728, 1728, + 1728, 1728, 1728, 1554, 1554, 1554, 1554, 1681, 54329, -1000, + -279, -1000, -1000, -373, -379, -1000, 1378, -279, 1913, 24489, + 1681, 24489, 24489, 24489, 1681, 1378, -1000, 1897, 1860, 2589, + 1855, 1681, 2378, 1681, 1681, 1681, 1812, -1000, 2536, 1998, + 2536, 1998, 2536, 1712, 1353, 55821, -1000, -1000, -1000, -1000, + 2639, 2629, -1000, 1906, -1000, 56, 616, -1000, 2360, 2340, + -1000, 2603, 2320, 2602, -1000, -1000, -1000, -1000, -1000, 1527, + -1000, 2478, 1896, -1000, 967, 1925, -1000, -1000, 20759, 1717, + 2284, 803, 1712, 1966, 2988, 2140, 2179, 3393, -1000, -1000, + -1000, -1000, 2168, -1000, 2164, -1000, -1000, 2015, -1000, 2366, + 337, 29711, 1965, 1965, -1000, 801, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1100, 9274, 2678, -1000, 1619, -1000, 1360, + 195, 1253, -1000, -1000, 962, 962, -1000, 1035, 1034, -1000, + 55821, 2060, -1000, 371, 1617, 371, 1249, -1000, -1000, 1244, + -1000, -1000, -1000, -1000, 2099, 2350, -1000, -1000, -1000, -1000, + 55821, -1000, 55821, 55821, 55821, 2050, 2601, -1000, 22251, 2048, + 965, 2617, 54329, 54329, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 427, 962, -505, 286, 282, + 962, 962, 962, -545, -1000, -1000, 1703, 1701, -1000, -190, + -1000, 22251, -1000, -1000, -1000, -1000, -1000, 1305, 1305, 1611, + 1609, 1588, -1000, 2015, -1000, -1000, -1000, 1696, -1000, -1000, + -203, 54329, 54329, 54329, 54329, -1000, -1000, -1000, 1209, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 22860, -1000, 22860, -1000, 22860, 1393, 22860, -1000, -1000, -1000, - -1000, -1000, 2569, 1489, 22860, 22860, -1000, 1211, 1209, -259, - 1538, -1000, -1000, -1000, 22860, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 22860, -1000, - 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, - 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, - 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, - -1000, 22860, -1000, -1000, -1000, 22860, -1000, 22860, -1000, 22860, - -1000, -1000, -1000, 22860, 264, 1076, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1406, 347, -1000, - -1000, -1000, 2650, -1000, 1406, 22860, 2007, -1000, 2007, 2007, - 2007, -1000, -1000, -1000, 22860, -1000, 22860, 22860, -1000, 22860, - -1000, 22860, -1000, -1000, -1000, -1000, 22860, 1830, 2374, 39184, - 1830, 39184, 1830, 32506, -1000, -1000, 2639, 2596, 2593, 2300, - 2312, 2312, 2311, -1000, 2589, 2587, -1000, 1472, 2585, 1458, - 1006, -1000, 55508, 22860, -1000, 223, 38442, -1000, 403, 54766, - 223, 54766, -1000, 2634, -1000, -1000, 22860, 2014, -1000, 22860, - -1000, -1000, -1000, -1000, 6271, 2642, 1877, -1000, -1000, 922, - -1000, 22860, -1000, 11485, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1453, 1446, -1000, -1000, 2006, 22860, -1000, -1000, - -1000, 1663, 1652, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 2005, -1000, -1000, -1000, -1000, 335, -527, 2224, 54766, - 1206, -1000, 1632, 1913, 288, 223, 1432, 958, 958, 958, - 1161, 1152, 38442, 1605, -1000, 54766, 364, -1000, 335, -1000, - -222, -223, 1538, -1000, -1000, 2530, -1000, -1000, 16912, -1000, - -1000, 2003, 2141, -1000, -1000, -1000, -1000, 2264, -179, -200, - -1000, -1000, 1538, 1538, 1538, 1405, 1406, -1000, 1538, 1538, - 1633, 1543, -1000, -1000, 1538, 1538, 1538, 1538, 1538, 1538, - 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, - 1538, 1538, 1538, 1538, 1478, 1778, -1000, 264, 1406, 2184, - -1000, -1000, 6271, -1000, -1000, 2634, 2579, 47, -1000, -1000, - 222, 47, 1393, 1032, 1406, 1406, 1032, 1760, 1538, 1660, - 1642, 1538, 1538, 33248, -1000, 2572, 2571, 1542, -1000, -1000, - 39184, 1542, 39184, 954, 2596, -270, 22860, 22860, 2297, 1164, - -1000, -1000, -1000, -1000, 1402, 1390, -1000, 1377, -1000, 2699, - -1000, 1393, -1000, 1830, 223, -1000, 808, 1907, -1000, 2569, - 1393, 54766, 1393, 75, 2634, -1000, 1538, -1000, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, -1000, - -1000, 54766, 2180, -1000, -1000, 2529, 1554, 166, -1000, 1475, - 1913, -1000, -1000, 221, -1000, 22860, -1000, 38442, 1374, 1360, - -1000, -1000, -1000, -1000, -541, -1000, -1000, -1000, -1000, -1000, - -1000, 392, 1888, -1000, 957, 54766, 56250, -1000, 2188, -1000, - -1000, -1000, -1000, 22860, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 906, 1378, 376, -205, 1378, -1000, -1000, 371, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 22251, + -1000, 22251, -1000, 22251, 1527, 22251, -1000, -1000, -1000, -1000, + -1000, 2565, 1581, 22251, 22251, -1000, 1226, 1204, -279, 1681, + -1000, -1000, -1000, 22251, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 22251, -1000, 22251, + -1000, 22251, -1000, 22251, -1000, 22251, -1000, 22251, -1000, 22251, + -1000, 22251, -1000, 22251, -1000, 22251, -1000, 22251, -1000, 22251, + -1000, 22251, -1000, 22251, -1000, 22251, -1000, 22251, -1000, -1000, + 22251, -1000, -1000, -1000, 22251, -1000, 22251, -1000, 22251, -1000, + -1000, -1000, 22251, 233, 996, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 1378, 329, -1000, -1000, + -1000, 2638, -1000, 1378, 22251, 1029, -1000, 1029, 1029, 1029, + -1000, -1000, -1000, 22251, -1000, 22251, 22251, -1000, 22251, -1000, + 22251, -1000, -1000, -1000, -1000, 22251, 1998, 2468, 38663, 1998, + 38663, 1998, 31949, -1000, -1000, 2629, 2591, 2597, 2309, 2311, + 2311, 2360, -1000, 2594, 2583, -1000, 1564, 2582, 1555, 1027, + -1000, 55075, 22251, -1000, 1998, 37917, -1000, 426, 54329, 1998, + 54329, -1000, 2577, -1000, -1000, 22251, 2036, -1000, 22251, -1000, + -1000, -1000, -1000, 5242, 2639, 1965, -1000, -1000, 916, -1000, + 22251, -1000, 10482, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1549, 1523, -1000, -1000, 2022, 22251, -1000, -1000, -1000, + 1629, 1563, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 2015, -1000, -1000, -1000, -1000, 323, -538, 2223, 54329, 1153, + -1000, 1699, 1905, 309, 1998, 1521, 962, 962, 962, 1139, + 1132, 37917, 1693, -1000, 54329, 350, -1000, 323, -1000, -250, + -251, 1681, -1000, -1000, 2524, -1000, -1000, 16271, -1000, -1000, + 2013, 2137, -1000, -1000, -1000, -1000, 2188, -187, -221, -1000, + -1000, 1681, 1681, 1681, 1189, 1378, -1000, 1681, 1681, 1548, + 1410, -1000, -1000, 1681, 1681, 1681, 1681, 1681, 1681, 1681, + 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, + 1681, 1681, 1681, 1554, 1808, -1000, 233, 1378, 2172, -1000, + -1000, 5242, -1000, -1000, 2577, 2579, 8, -1000, -1000, 221, + 8, 1527, 1019, 1378, 1378, 1019, 1790, 1681, 1775, 1726, + 1681, 1681, 32695, -1000, 2574, 2571, 1671, -1000, -1000, 38663, + 1671, 38663, 912, 2591, -288, 22251, 22251, 2305, 1207, -1000, + -1000, -1000, -1000, 1519, 1488, -1000, 1465, -1000, 2677, -1000, + 1527, -1000, 1998, 1998, -1000, 795, 1925, -1000, 2565, 1527, + 54329, 1527, 55, 2577, -1000, 1681, -1000, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, -1000, -1000, + 54329, 2181, -1000, -1000, 2513, 1688, 163, -1000, 1384, 1905, + -1000, -1000, 892, -1000, 22251, -1000, 37917, 1436, 1385, -1000, + -1000, -1000, -1000, -545, -1000, -1000, -1000, -1000, -1000, -1000, + 400, 1901, -1000, 960, 54329, 55821, -1000, 2161, -1000, -1000, + -1000, -1000, 22251, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 22860, -1000, 1406, 2181, -1000, -375, -1000, -504, 22860, - -259, -1000, -1000, -259, -1000, -1000, -1000, -1000, -1000, 22860, - -1000, -1000, 22860, -1000, 22860, -1000, -1000, 1542, -1000, -1000, - -1000, 37700, -1000, 1542, -1000, 1542, -1000, -270, -1000, 1882, - -1000, 54766, 1393, 345, -1000, 1162, -1000, -1000, -1000, -1000, - -1000, 55508, 54766, 1907, 54766, -1000, -1000, 1508, 1406, 1830, - 2569, -1000, 1482, -1000, 392, -1000, 2002, 2012, -1000, -1000, - -1000, 20634, -1000, -1000, -1000, -1000, -1000, 249, -185, 16912, - 12424, 1480, -1000, -184, 1538, 1478, -1000, -479, -1000, -1000, - -1000, -1000, 279, -1000, -1000, 1851, -1000, -1000, 1621, 1527, - 1444, -1000, -1000, -1000, -1000, -1000, -1000, -270, -1000, -1000, - 2525, -1000, -226, -1000, -1000, 1367, 1442, -1000, -1000, -1000, - 32506, 54024, -1000, -171, 293, -185, 22860, 1995, 1406, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -52, -1000, -1000, - 799, -1000, -1000, -1000, 2140, -189, -1000, -1000, -1000, 284, - -494, -291, -292, 25086, -1000, 22860, -1000, 22860, -1000, 22860, - -1000, 54766, 1830, -1000, -1000, -1000, 1426, -1000, 4978, -334, - 2177, -1000, -126, -1000, -1000, -1000, 1042, 1359, -1000, -1000, - -1000, -1000, -1000, -1000, 1936, 54766, -1000, 446, -1000, -1000, - 16164, -186, -201, 1000, -1000, -1000, -1000, -1000, -1000, 2007, - 1365, 1353, 1538, -1000, 54766, -1000, 54024, -314, 899, 6271, - -1000, 2164, 2159, 2656, -1000, -1000, -1000, -1000, -1000, -1000, - -544, 1356, 243, -1000, -1000, -1000, 284, -338, -1000, 22860, - -1000, 22860, -1000, 1406, -1000, -1000, 2494, 75, -1000, 2658, - -1000, 2643, 1016, 1016, -1000, 1136, -544, -1000, -1000, -1000, - -1000, 1538, 1538, -1000, -354, -1000, -1000, -1000, -1000, -1000, - 440, 1275, -1000, -1000, -1000, -1000, -1000, 6271, -1000, -1000, - -1000, 263, 263, -1000, -1000, + 22251, -1000, 1378, 2167, -1000, -375, -1000, -514, 22251, -279, + -1000, -1000, -279, -1000, -1000, -1000, -1000, -1000, 22251, -1000, + -1000, 22251, -1000, 22251, -1000, -1000, 1671, -1000, -1000, -1000, + 37171, -1000, 1671, -1000, 1671, -1000, -288, -1000, 1900, -1000, + 54329, 1527, 391, -1000, 1191, -1000, -1000, -1000, -1000, -1000, + 55075, 54329, 1925, 54329, -1000, -1000, 1628, 1378, 1998, 2565, + -1000, 1604, -1000, 400, -1000, 2012, 2116, -1000, -1000, -1000, + 20013, -1000, -1000, -1000, -1000, -1000, 272, -197, 16271, 11759, + 1602, -1000, -195, 1681, 1554, -1000, -481, -1000, -1000, -1000, + -1000, 263, -1000, -1000, 1892, -1000, -1000, 1714, 1710, 1677, + -1000, -1000, -1000, -1000, -1000, -1000, -288, -1000, -1000, 2511, + -1000, -253, -1000, -1000, 1890, 1547, -1000, -1000, -1000, 31949, + 53583, -1000, -179, 325, -197, 22251, 2011, 1378, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -40, -1000, -1000, 540, + -1000, -1000, -1000, 2131, -212, -1000, -1000, -1000, 292, -497, + -259, -293, 24489, -1000, 22251, -1000, 22251, -1000, 22251, -1000, + 54329, 1998, -1000, -1000, -1000, 1484, -1000, 4304, -394, 2163, + -1000, -143, -1000, -1000, -1000, 1049, 1373, -1000, -1000, -1000, + -1000, -1000, -1000, 1850, 54329, -1000, 435, -1000, -1000, 15519, + -203, -228, 1010, -1000, -1000, -1000, -1000, -1000, 1029, 1616, + 1377, 1681, -1000, 54329, -1000, 53583, -387, 901, 5242, -1000, + 2159, 2155, 2657, -1000, -1000, -1000, -1000, -1000, -1000, -548, + 1482, 242, -1000, -1000, -1000, 292, -328, -1000, 22251, -1000, + 22251, -1000, 1378, -1000, -1000, 2496, 55, -1000, 2672, -1000, + 2675, 1014, 1014, -1000, 1126, -548, -1000, -1000, -1000, -1000, + 1681, 1681, -1000, -396, -1000, -1000, -1000, -1000, -1000, 430, + 1220, -1000, -1000, -1000, -1000, -1000, 5242, -1000, -1000, -1000, + 235, 235, -1000, -1000, } var yyPgo = [...]int{ - 0, 3243, 3242, 31, 6, 37, 36, 3240, 3239, 3238, - 174, 3237, 3235, 3224, 3223, 3222, 3221, 2754, 2745, 2728, - 3220, 3219, 3218, 3215, 3213, 3211, 3210, 3209, 3208, 38, - 116, 91, 104, 201, 213, 3205, 170, 161, 197, 3203, - 3202, 3201, 115, 187, 84, 92, 195, 3200, 3199, 71, - 3196, 3194, 3192, 190, 189, 188, 1092, 3190, 184, 114, - 48, 3189, 3187, 3184, 3182, 3179, 3178, 3176, 3174, 3173, - 3172, 3170, 3169, 3168, 3165, 3163, 3162, 3161, 3160, 285, - 3157, 3155, 12, 3154, 73, 3153, 3152, 3149, 3147, 3146, - 8, 3140, 3139, 26, 45, 63, 3136, 3134, 44, 3132, - 3131, 3129, 3125, 3124, 72, 3123, 27, 3121, 40, 3120, - 3117, 124, 3115, 3111, 3105, 42, 3104, 3100, 3098, 28, - 169, 3097, 3094, 140, 3093, 3092, 3087, 167, 205, 3085, - 2265, 3082, 99, 3080, 3079, 3077, 166, 193, 3076, 125, - 3074, 3073, 3072, 152, 3068, 3263, 3066, 3065, 59, 80, - 164, 3064, 3062, 199, 79, 54, 3061, 17, 19, 3060, - 3058, 67, 70, 3057, 108, 3056, 3054, 103, 77, 3052, - 105, 102, 3051, 3050, 5, 7, 3048, 1, 4, 2, - 83, 3047, 3044, 119, 3041, 3040, 3039, 101, 3037, 3035, - 4407, 3031, 93, 130, 106, 76, 3028, 171, 132, 3027, - 3026, 3022, 3021, 3016, 2985, 49, 2984, 2983, 2982, 136, - 22, 110, 2981, 146, 346, 51, 147, 2978, 196, 78, - 2977, 172, 2971, 2969, 134, 133, 2968, 2962, 58, 168, - 194, 2960, 96, 129, 120, 176, 95, 135, 2954, 2946, - 56, 62, 2944, 2943, 2940, 2939, 181, 2935, 2929, 61, - 2927, 53, 2925, 182, 2924, 306, 69, 2922, 180, 162, - 2921, 60, 2919, 2918, 68, 100, 55, 39, 2914, 157, - 160, 127, 165, 2913, 2912, 52, 2905, 2899, 2894, 200, - 301, 2891, 2890, 329, 183, 143, 149, 85, 2887, 323, - 2886, 2885, 2884, 16, 5094, 7550, 186, 25, 159, 2883, - 2882, 8334, 20, 43, 24, 2872, 210, 2869, 185, 2867, - 2866, 2865, 211, 207, 112, 158, 57, 2864, 2859, 2857, - 2856, 64, 2855, 2850, 2849, 2848, 2847, 2846, 35, 34, - 33, 75, 218, 65, 21, 98, 156, 151, 66, 2843, - 2841, 2839, 123, 90, 2835, 155, 153, 126, 163, 2829, - 175, 142, 117, 2823, 87, 32, 2822, 2821, 2819, 2818, - 89, 2813, 2810, 2806, 2805, 150, 144, 121, 81, 2803, - 82, 118, 148, 145, 50, 2799, 46, 2798, 2797, 30, - 191, 29, 2787, 13, 111, 109, 2780, 6691, 2779, 9, - 305, 154, 2776, 2775, 10, 11, 14, 2772, 2771, 2770, - 2769, 131, 2768, 2765, 2763, 2761, 23, 47, 18, 15, - 113, 137, 74, 2760, 2746, 141, 2732, 2727, 2722, 0, - 1034, 128, 2721, 202, + 0, 3261, 3259, 47, 7, 36, 34, 3256, 3254, 3239, + 178, 3238, 3237, 3236, 3235, 3234, 3233, 2715, 2702, 2700, + 3229, 3228, 3226, 3225, 3224, 3222, 3220, 3218, 3217, 48, + 110, 72, 108, 213, 215, 3216, 3215, 184, 173, 202, + 3209, 3208, 3207, 116, 193, 83, 87, 197, 3202, 3195, + 78, 3191, 3189, 3188, 191, 190, 189, 1088, 3187, 188, + 114, 50, 3186, 3185, 3182, 3178, 3176, 3175, 3174, 3172, + 3170, 3168, 3167, 3165, 3162, 3156, 3155, 3153, 3150, 3146, + 309, 3143, 3142, 10, 3141, 66, 3139, 3135, 3133, 3130, + 3126, 12, 3125, 3123, 19, 42, 60, 3122, 3119, 49, + 3118, 3114, 3112, 3109, 3107, 45, 3105, 27, 3104, 37, + 3103, 3102, 128, 3100, 3099, 3098, 38, 3097, 3095, 3094, + 5, 170, 3093, 3091, 142, 3090, 3082, 3081, 169, 222, + 3078, 2332, 3074, 99, 3071, 3068, 3061, 174, 200, 3058, + 122, 3057, 3055, 3053, 155, 3044, 3333, 3041, 3039, 68, + 76, 156, 3036, 3034, 199, 74, 11, 3031, 15, 17, + 3030, 3025, 69, 64, 3021, 111, 3013, 3010, 103, 65, + 3009, 100, 97, 3008, 3006, 23, 18, 3003, 6, 1, + 8, 82, 3002, 3001, 119, 2997, 2983, 2982, 93, 2981, + 2979, 3360, 2977, 90, 136, 106, 70, 2968, 171, 153, + 2967, 2966, 2965, 2964, 2963, 2960, 53, 2958, 2957, 2954, + 140, 29, 113, 2953, 2950, 146, 346, 130, 54, 132, + 2947, 149, 2945, 203, 77, 2943, 175, 2941, 2940, 135, + 134, 2938, 2937, 57, 168, 194, 2928, 96, 131, 121, + 150, 94, 133, 2926, 2925, 58, 61, 2911, 2909, 2907, + 2904, 177, 2902, 2901, 62, 2900, 56, 2899, 167, 2897, + 302, 67, 2896, 180, 185, 2895, 73, 2891, 2889, 91, + 95, 102, 26, 2888, 163, 166, 127, 182, 2887, 2884, + 55, 2881, 2879, 2878, 201, 280, 2877, 2873, 308, 179, + 144, 152, 84, 2871, 325, 2869, 2864, 2863, 40, 4520, + 6444, 192, 22, 165, 2860, 2856, 7650, 44, 39, 24, + 2855, 210, 2854, 183, 2853, 2846, 2841, 238, 207, 112, + 164, 59, 2839, 2838, 2836, 2835, 35, 2830, 2828, 2818, + 2816, 2814, 2813, 33, 32, 31, 92, 216, 81, 20, + 98, 172, 157, 63, 2812, 2811, 2810, 125, 85, 2809, + 162, 159, 126, 101, 2807, 186, 145, 118, 2804, 105, + 30, 2799, 2798, 2797, 2796, 89, 2795, 2794, 2791, 2786, + 154, 147, 123, 79, 2784, 80, 120, 151, 148, 52, + 2782, 43, 2781, 2780, 28, 195, 25, 2776, 41, 107, + 117, 2775, 6234, 2774, 9, 335, 161, 2771, 2765, 4, + 13, 16, 2764, 2759, 2748, 2741, 138, 2740, 2739, 2738, + 2732, 21, 46, 14, 2, 115, 141, 71, 2730, 2727, + 143, 2726, 2724, 2708, 0, 1034, 129, 2701, 204, } -//line sql.y:8764 +//line sql.y:8811 type yySymType struct { union any empty struct{} @@ -8490,6 +8457,11 @@ func (st *yySymType) tableSpecUnion() *TableSpec { return v } +func (st *yySymType) tableStmtUnion() TableStatement { + v, _ := st.union.(TableStatement) + return v +} + func (st *yySymType) trimTypeUnion() TrimType { v, _ := st.union.(TrimType) return v @@ -8576,235 +8548,237 @@ func (st *yySymType) withUnion() *With { } var yyR1 = [...]int{ - 0, 417, 418, 418, 7, 7, 7, 7, 7, 7, + 0, 422, 423, 423, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 261, 387, 259, 259, 28, 74, 36, 36, 35, - 35, 38, 38, 37, 31, 31, 31, 32, 32, 32, + 7, 266, 392, 264, 264, 28, 75, 37, 37, 36, + 36, 39, 39, 38, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, - 29, 29, 29, 29, 30, 30, 30, 30, 30, 15, - 16, 34, 34, 17, 17, 109, 109, 18, 19, 19, - 19, 19, 421, 421, 185, 185, 183, 183, 184, 184, - 264, 264, 20, 268, 268, 270, 270, 270, 270, 260, - 260, 260, 21, 21, 269, 269, 271, 271, 271, 274, - 274, 274, 274, 315, 315, 315, 22, 22, 22, 22, - 22, 129, 129, 389, 389, 388, 383, 383, 382, 382, - 381, 386, 386, 385, 385, 384, 40, 41, 50, 50, - 50, 50, 51, 52, 390, 390, 356, 57, 57, 56, - 56, 56, 56, 56, 56, 58, 58, 54, 54, 53, - 53, 55, 55, 358, 358, 344, 344, 357, 357, 357, - 357, 357, 357, 357, 343, 343, 140, 140, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 405, 405, 405, 404, 404, - 239, 239, 239, 239, 239, 239, 239, 239, 149, 149, - 161, 161, 161, 161, 161, 161, 147, 147, 148, 146, - 146, 146, 154, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 154, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, - 160, 160, 155, 155, 155, 157, 157, 156, 156, 156, - 158, 158, 406, 406, 406, 406, 321, 321, 321, 321, - 324, 324, 322, 322, 322, 322, 322, 322, 322, 322, - 322, 323, 323, 323, 323, 323, 323, 323, 325, 325, - 325, 325, 325, 326, 326, 326, 326, 326, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, - 327, 327, 327, 327, 327, 327, 327, 327, 342, 342, - 331, 331, 336, 336, 337, 337, 338, 338, 338, 339, - 339, 339, 340, 340, 333, 333, 333, 333, 333, 333, - 333, 333, 333, 335, 335, 334, 334, 334, 345, 370, - 370, 369, 369, 367, 367, 367, 367, 367, 367, 367, - 367, 354, 354, 364, 364, 364, 364, 364, 353, 353, - 349, 349, 349, 350, 350, 351, 351, 348, 348, 352, - 352, 366, 366, 365, 365, 346, 346, 347, 347, 372, - 407, 407, 407, 407, 407, 408, 408, 373, 397, 399, - 399, 399, 398, 398, 395, 396, 394, 394, 394, 394, - 394, 84, 84, 84, 287, 287, 288, 288, 362, 362, - 361, 361, 361, 363, 363, 360, 360, 360, 360, 360, - 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, - 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, - 360, 360, 360, 360, 360, 360, 282, 282, 282, 393, - 393, 393, 393, 393, 393, 392, 392, 392, 359, 359, - 359, 359, 391, 391, 59, 59, 219, 219, 410, 410, - 412, 412, 412, 47, 47, 47, 47, 47, 47, 46, - 46, 46, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 48, 48, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 23, 23, 23, 23, 23, + 29, 29, 29, 29, 30, 30, 30, 30, 30, 35, + 35, 15, 16, 34, 34, 34, 17, 17, 110, 110, + 18, 19, 19, 19, 19, 426, 426, 186, 186, 184, + 184, 185, 185, 269, 269, 20, 273, 273, 275, 275, + 275, 275, 265, 265, 265, 21, 21, 274, 274, 276, + 276, 276, 279, 279, 279, 279, 320, 320, 320, 22, + 22, 22, 22, 22, 130, 130, 394, 394, 393, 388, + 388, 387, 387, 386, 391, 391, 390, 390, 389, 41, + 42, 51, 51, 51, 51, 52, 53, 395, 395, 361, + 58, 58, 57, 57, 57, 57, 57, 57, 59, 59, + 55, 55, 54, 54, 56, 56, 363, 363, 349, 349, + 362, 362, 362, 362, 362, 362, 362, 348, 348, 141, + 141, 243, 243, 243, 243, 243, 243, 243, 243, 243, + 243, 243, 243, 243, 243, 243, 243, 243, 410, 410, + 410, 409, 409, 244, 244, 244, 244, 244, 244, 244, + 244, 150, 150, 162, 162, 162, 162, 162, 162, 148, + 148, 149, 147, 147, 147, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 414, 414, 414, 414, 414, 414, 414, 414, 414, + 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, + 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, + 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, + 414, 414, 414, 161, 161, 156, 156, 156, 158, 158, + 157, 157, 157, 159, 159, 411, 411, 411, 411, 326, + 326, 326, 326, 329, 329, 327, 327, 327, 327, 327, + 327, 327, 327, 327, 328, 328, 328, 328, 328, 328, + 328, 330, 330, 330, 330, 330, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 332, 332, 332, 332, 332, 332, 332, + 332, 347, 347, 336, 336, 341, 341, 342, 342, 343, + 343, 343, 344, 344, 344, 345, 345, 338, 338, 338, + 338, 338, 338, 338, 338, 338, 340, 340, 339, 339, + 339, 350, 375, 375, 374, 374, 372, 372, 372, 372, + 372, 372, 372, 372, 359, 359, 369, 369, 369, 369, + 369, 358, 358, 354, 354, 354, 355, 355, 356, 356, + 353, 353, 357, 357, 371, 371, 370, 370, 351, 351, + 352, 352, 377, 412, 412, 412, 412, 412, 413, 413, + 378, 402, 404, 404, 404, 403, 403, 400, 401, 399, + 399, 399, 399, 399, 85, 85, 85, 292, 292, 293, + 293, 367, 367, 366, 366, 366, 368, 368, 365, 365, + 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, + 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, + 365, 365, 365, 365, 365, 365, 365, 365, 365, 287, + 287, 287, 398, 398, 398, 398, 398, 398, 397, 397, + 397, 364, 364, 364, 364, 396, 396, 60, 60, 224, + 224, 415, 415, 417, 417, 417, 48, 48, 48, 48, + 48, 48, 47, 47, 47, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 49, 49, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 111, - 111, 112, 112, 112, 112, 114, 114, 114, 375, 375, - 60, 60, 3, 3, 173, 175, 176, 176, 174, 174, - 174, 174, 174, 174, 62, 62, 61, 61, 178, 177, - 179, 179, 179, 1, 1, 2, 2, 4, 4, 380, - 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, - 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, - 380, 341, 341, 341, 374, 374, 376, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 117, 116, 116, - 115, 118, 118, 118, 118, 118, 118, 118, 118, 378, - 378, 378, 63, 63, 379, 328, 329, 330, 5, 6, - 355, 377, 125, 125, 24, 39, 39, 25, 25, 25, - 25, 26, 26, 64, 67, 67, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 292, 292, 281, 281, 290, 290, 280, 280, - 306, 306, 306, 283, 283, 283, 284, 284, 403, 403, - 403, 277, 277, 66, 66, 66, 307, 307, 307, 307, - 69, 69, 413, 413, 414, 414, 415, 415, 415, 70, - 71, 71, 310, 310, 311, 311, 72, 73, 85, 85, - 85, 85, 85, 86, 86, 86, 86, 86, 86, 110, - 110, 110, 10, 10, 10, 10, 81, 81, 81, 9, - 9, 11, 68, 68, 75, 400, 400, 401, 402, 402, - 402, 402, 76, 78, 27, 27, 27, 27, 27, 27, - 135, 135, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 130, 130, 130, 124, 124, 422, - 79, 80, 80, 128, 128, 128, 121, 121, 121, 127, - 127, 127, 12, 12, 13, 263, 263, 14, 14, 134, - 134, 133, 133, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 131, 131, 132, 132, 132, 132, - 299, 299, 299, 298, 298, 167, 167, 169, 168, 168, - 170, 170, 171, 171, 171, 171, 217, 217, 193, 193, - 256, 256, 257, 257, 255, 255, 262, 262, 258, 258, - 258, 258, 265, 265, 172, 172, 172, 172, 180, 180, - 181, 181, 182, 182, 309, 309, 304, 304, 304, 303, - 303, 186, 186, 186, 188, 187, 187, 187, 187, 189, - 189, 191, 191, 190, 190, 192, 197, 197, 196, 196, - 194, 194, 194, 194, 194, 194, 195, 195, 195, 195, - 198, 198, 145, 145, 145, 145, 145, 145, 145, 145, - 411, 411, 159, 159, 159, 159, 159, 159, 159, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 246, 246, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 222, 222, 221, 221, 87, 87, 87, 88, - 88, 89, 89, 89, 89, 89, 90, 90, 90, 90, - 90, 90, 90, 92, 92, 91, 91, 212, 212, 296, - 296, 93, 94, 94, 95, 95, 98, 98, 97, 96, - 96, 102, 102, 99, 99, 101, 101, 100, 103, 103, - 104, 105, 105, 278, 278, 199, 199, 208, 208, 208, - 208, 200, 200, 201, 201, 201, 201, 201, 201, 209, - 209, 209, 216, 210, 210, 206, 206, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 164, 164, 164, 164, 227, 227, 151, 151, 151, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 112, 112, 113, 113, 113, 113, 115, 115, + 115, 380, 380, 61, 61, 3, 3, 174, 176, 177, + 177, 175, 175, 175, 175, 175, 175, 63, 63, 62, + 62, 179, 178, 180, 180, 180, 1, 1, 2, 2, + 4, 4, 385, 385, 385, 385, 385, 385, 385, 385, + 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, + 385, 385, 385, 385, 346, 346, 346, 379, 379, 381, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 118, 117, 117, 116, 119, 119, 119, 119, 119, 119, + 119, 119, 383, 383, 383, 64, 64, 384, 333, 334, + 335, 5, 6, 360, 382, 126, 126, 24, 40, 40, + 25, 25, 25, 25, 26, 26, 65, 68, 68, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 297, 297, 286, 286, 295, + 295, 285, 285, 311, 311, 311, 288, 288, 288, 289, + 289, 408, 408, 408, 282, 282, 67, 67, 67, 312, + 312, 312, 312, 70, 70, 418, 418, 419, 419, 420, + 420, 420, 71, 72, 72, 315, 315, 316, 316, 73, + 74, 86, 86, 86, 86, 86, 87, 87, 87, 87, + 87, 87, 111, 111, 111, 10, 10, 10, 10, 82, + 82, 82, 9, 9, 11, 69, 69, 76, 405, 405, + 406, 407, 407, 407, 407, 77, 79, 27, 27, 27, + 27, 27, 27, 136, 136, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 131, 131, 131, + 125, 125, 427, 80, 81, 81, 129, 129, 129, 122, + 122, 122, 128, 128, 128, 12, 12, 13, 268, 268, + 14, 14, 135, 135, 134, 134, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 132, 132, 133, + 133, 133, 133, 304, 304, 304, 303, 303, 168, 168, + 170, 169, 169, 171, 171, 172, 172, 172, 172, 222, + 222, 194, 194, 261, 261, 262, 262, 260, 260, 267, + 267, 263, 263, 263, 263, 270, 270, 173, 173, 173, + 173, 181, 181, 182, 182, 183, 183, 314, 314, 309, + 309, 309, 308, 308, 187, 187, 187, 189, 188, 188, + 188, 188, 190, 190, 192, 192, 191, 191, 193, 198, + 198, 197, 197, 195, 195, 195, 195, 195, 195, 196, + 196, 196, 196, 199, 199, 146, 146, 146, 146, 146, + 146, 146, 146, 416, 416, 160, 160, 160, 160, 160, + 160, 160, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 251, 251, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 152, 152, 165, 165, 165, 165, 166, 166, - 166, 166, 166, 166, 166, 317, 317, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 227, 227, 226, 226, 88, + 88, 88, 89, 89, 90, 90, 90, 90, 90, 91, + 91, 91, 91, 91, 91, 91, 93, 93, 92, 92, + 213, 213, 301, 301, 94, 95, 95, 96, 96, 99, + 99, 98, 97, 97, 103, 103, 100, 100, 102, 102, + 101, 104, 104, 105, 106, 106, 283, 283, 200, 200, + 209, 209, 209, 209, 201, 201, 202, 202, 202, 202, + 202, 202, 210, 210, 210, 221, 211, 211, 207, 207, + 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, + 205, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 165, 165, 165, 165, 232, 232, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 153, 153, 166, 166, 166, + 166, 167, 167, 167, 167, 167, 167, 167, 322, 322, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 423, 423, 332, 332, 332, - 207, 207, 207, 207, 207, 126, 126, 126, 126, 126, - 314, 314, 314, 318, 318, 318, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 319, 319, 225, 225, 122, 122, 223, 223, 224, - 226, 226, 218, 218, 218, 218, 220, 220, 203, 203, - 203, 228, 228, 320, 320, 229, 229, 106, 107, 107, - 108, 108, 230, 230, 232, 231, 231, 233, 234, 234, - 234, 235, 235, 236, 236, 236, 49, 49, 49, 49, - 49, 44, 44, 44, 44, 45, 45, 45, 45, 137, - 137, 137, 137, 139, 139, 138, 138, 82, 82, 83, - 83, 83, 143, 143, 144, 144, 144, 141, 141, 142, - 142, 253, 253, 253, 253, 253, 253, 253, 237, 237, - 237, 244, 244, 244, 240, 240, 242, 242, 242, 243, - 243, 243, 241, 250, 250, 252, 252, 251, 251, 247, - 247, 248, 248, 249, 249, 249, 245, 245, 202, 202, - 202, 202, 202, 254, 254, 254, 254, 308, 308, 308, - 266, 266, 213, 213, 215, 215, 214, 214, 163, 267, - 267, 275, 272, 272, 273, 273, 300, 300, 300, 276, - 276, 289, 289, 285, 285, 286, 286, 279, 279, 291, - 291, 291, 77, 211, 211, 371, 371, 368, 295, 295, - 297, 297, 301, 301, 305, 305, 302, 302, 8, 416, - 416, 416, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 419, 420, 312, 313, 313, 313, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 428, 428, + 337, 337, 337, 208, 208, 208, 208, 208, 127, 127, + 127, 127, 127, 319, 319, 319, 323, 323, 323, 321, + 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, + 321, 321, 321, 321, 324, 324, 230, 230, 123, 123, + 228, 228, 229, 231, 231, 223, 223, 223, 223, 225, + 225, 204, 204, 204, 233, 233, 325, 325, 234, 234, + 107, 108, 108, 109, 109, 235, 235, 237, 236, 236, + 238, 239, 239, 239, 240, 240, 241, 241, 241, 50, + 50, 50, 50, 50, 45, 45, 45, 45, 46, 46, + 46, 46, 138, 138, 138, 138, 140, 140, 139, 139, + 83, 83, 84, 84, 84, 144, 144, 145, 145, 145, + 142, 142, 143, 143, 258, 258, 258, 258, 258, 258, + 258, 242, 242, 242, 249, 249, 249, 245, 245, 247, + 247, 247, 248, 248, 248, 246, 255, 255, 257, 257, + 256, 256, 252, 252, 253, 253, 254, 254, 254, 250, + 250, 203, 203, 203, 203, 203, 259, 259, 259, 259, + 313, 313, 313, 271, 271, 214, 214, 215, 215, 219, + 219, 218, 218, 216, 217, 220, 220, 164, 272, 272, + 280, 277, 277, 278, 278, 305, 305, 305, 281, 281, + 294, 294, 290, 290, 291, 291, 284, 284, 296, 296, + 296, 78, 212, 212, 376, 376, 373, 300, 300, 302, + 302, 306, 306, 310, 310, 307, 307, 8, 421, 421, + 421, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 424, 425, 317, 318, + 318, 318, } var yyR2 = [...]int{ @@ -8815,164 +8789,165 @@ var yyR2 = [...]int{ 0, 1, 1, 1, 1, 2, 3, 2, 3, 0, 1, 3, 1, 4, 3, 3, 4, 3, 2, 3, 4, 3, 4, 2, 7, 1, 3, 3, 3, 3, - 1, 2, 1, 1, 3, 2, 3, 3, 2, 5, - 7, 10, 9, 7, 8, 1, 1, 10, 11, 9, - 8, 8, 1, 1, 1, 3, 1, 3, 1, 3, - 0, 4, 3, 1, 3, 3, 3, 3, 3, 1, - 1, 2, 5, 4, 1, 3, 3, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 2, 2, 6, 12, - 2, 0, 2, 0, 2, 1, 0, 2, 1, 3, - 3, 0, 1, 1, 3, 3, 6, 4, 7, 8, - 8, 8, 5, 3, 1, 1, 5, 0, 1, 1, - 1, 1, 2, 2, 2, 0, 1, 4, 4, 4, - 4, 4, 4, 2, 4, 1, 3, 1, 1, 3, - 4, 3, 3, 3, 5, 10, 0, 2, 0, 2, - 3, 5, 3, 4, 2, 3, 2, 3, 3, 3, - 3, 2, 2, 4, 4, 1, 1, 1, 1, 1, - 0, 2, 2, 3, 3, 2, 2, 2, 1, 1, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 1, 3, 2, 3, 3, 2, 3, + 3, 5, 7, 10, 9, 1, 7, 8, 1, 1, + 10, 11, 9, 8, 8, 1, 1, 1, 3, 1, + 3, 1, 3, 0, 4, 3, 1, 3, 3, 3, + 3, 3, 1, 1, 2, 5, 4, 1, 3, 3, + 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, + 2, 6, 12, 2, 0, 2, 0, 2, 1, 0, + 2, 1, 3, 3, 0, 1, 1, 3, 3, 6, + 4, 7, 8, 8, 8, 5, 3, 1, 1, 5, + 0, 1, 1, 1, 1, 2, 2, 2, 0, 1, + 4, 4, 4, 4, 4, 4, 2, 4, 1, 3, + 1, 1, 3, 4, 3, 3, 3, 5, 10, 0, + 2, 0, 2, 3, 5, 3, 4, 2, 3, 2, + 3, 3, 3, 3, 2, 2, 4, 4, 1, 1, + 1, 1, 1, 0, 2, 2, 3, 3, 2, 2, + 2, 1, 1, 2, 2, 2, 2, 2, 2, 1, + 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, - 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 5, 2, 5, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 0, 3, 0, 5, 1, 3, 0, 3, 5, 0, - 1, 1, 0, 1, 0, 3, 3, 2, 2, 2, - 1, 2, 2, 0, 1, 0, 2, 2, 5, 0, - 1, 1, 2, 1, 3, 2, 1, 1, 3, 3, - 3, 0, 1, 4, 3, 3, 4, 2, 0, 2, - 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, - 1, 1, 3, 3, 4, 3, 1, 3, 1, 7, - 6, 7, 7, 8, 8, 0, 1, 5, 2, 1, - 1, 1, 0, 1, 3, 3, 1, 1, 2, 2, - 2, 0, 1, 1, 1, 2, 0, 1, 0, 1, - 1, 3, 2, 1, 2, 3, 3, 3, 4, 4, - 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 2, 1, 1, 2, 1, 2, 1, 3, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 1, 2, 2, 2, 2, 3, 3, 3, 2, + 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, + 5, 2, 5, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 0, 3, 0, 5, 1, 3, 0, + 3, 5, 0, 1, 1, 0, 1, 0, 3, 3, + 2, 2, 2, 1, 2, 2, 0, 1, 0, 2, + 2, 5, 0, 1, 1, 2, 1, 3, 2, 1, + 1, 3, 3, 3, 0, 1, 4, 3, 3, 4, + 2, 0, 2, 1, 1, 1, 1, 1, 0, 1, + 1, 1, 0, 1, 1, 3, 3, 4, 3, 1, + 3, 1, 7, 6, 7, 7, 8, 8, 0, 1, + 5, 2, 1, 1, 1, 0, 1, 3, 3, 1, + 1, 2, 2, 2, 0, 1, 1, 1, 2, 0, + 1, 0, 1, 1, 3, 2, 1, 2, 3, 3, + 3, 4, 4, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 4, 5, 0, 2, 2, 1, + 3, 3, 3, 3, 3, 3, 3, 4, 5, 0, + 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 1, 1, 1, 0, 1, 0, 1, 0, + 2, 0, 2, 0, 2, 2, 0, 1, 5, 1, + 3, 7, 1, 3, 3, 1, 2, 2, 2, 5, + 5, 5, 6, 8, 5, 5, 4, 4, 4, 6, + 5, 5, 5, 2, 2, 2, 2, 3, 3, 3, + 4, 3, 3, 1, 3, 5, 1, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 2, 2, 3, 4, + 4, 2, 11, 3, 6, 8, 6, 6, 6, 13, + 8, 6, 6, 10, 7, 5, 5, 5, 5, 7, + 5, 5, 5, 5, 5, 7, 7, 5, 5, 5, + 5, 6, 0, 6, 5, 6, 4, 5, 0, 8, + 9, 0, 3, 0, 1, 0, 3, 8, 4, 1, + 3, 3, 6, 7, 7, 8, 4, 0, 1, 0, + 1, 3, 3, 1, 1, 2, 1, 1, 0, 2, + 0, 2, 5, 3, 7, 4, 4, 4, 4, 3, + 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 0, 2, 2, 1, 3, 2, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 1, 3, 3, 0, 2, 2, 2, 2, 2, + 2, 2, 4, 4, 3, 0, 1, 4, 3, 4, + 4, 3, 3, 3, 2, 1, 3, 3, 3, 5, + 7, 7, 6, 5, 3, 2, 4, 5, 5, 3, + 3, 7, 3, 3, 3, 3, 4, 7, 5, 2, + 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, + 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, + 4, 4, 2, 3, 3, 3, 3, 3, 5, 2, + 3, 3, 2, 3, 4, 4, 4, 3, 4, 4, + 5, 3, 5, 3, 5, 0, 1, 0, 1, 0, + 1, 1, 1, 0, 2, 2, 0, 2, 2, 0, + 2, 0, 1, 1, 1, 1, 2, 1, 3, 1, + 1, 1, 1, 1, 3, 0, 1, 1, 3, 3, + 2, 2, 1, 1, 5, 0, 1, 0, 1, 2, + 3, 0, 3, 3, 3, 1, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 4, 4, 4, 2, 2, 3, 1, 3, + 2, 1, 2, 1, 2, 2, 4, 3, 3, 6, + 4, 7, 6, 1, 3, 2, 2, 2, 2, 1, + 1, 1, 3, 2, 1, 1, 1, 0, 1, 1, + 0, 3, 0, 2, 0, 2, 1, 2, 2, 0, + 1, 1, 0, 1, 1, 5, 5, 4, 0, 2, + 4, 4, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, - 1, 1, 0, 1, 0, 1, 0, 2, 0, 2, - 0, 2, 2, 0, 1, 5, 1, 3, 7, 1, - 3, 3, 1, 2, 2, 2, 5, 5, 5, 6, - 8, 5, 5, 4, 4, 4, 6, 5, 5, 5, - 2, 2, 2, 2, 3, 3, 3, 4, 3, 3, - 1, 3, 5, 1, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 2, 2, 3, 4, 4, 2, 11, - 3, 6, 8, 6, 6, 6, 13, 8, 6, 6, - 10, 7, 5, 5, 5, 5, 7, 5, 5, 5, - 5, 5, 7, 7, 5, 5, 5, 5, 6, 0, - 6, 5, 6, 4, 5, 0, 8, 9, 0, 3, - 0, 1, 0, 3, 8, 4, 1, 3, 3, 6, - 7, 7, 8, 4, 0, 1, 0, 1, 3, 3, - 1, 1, 2, 1, 1, 0, 2, 0, 2, 5, - 3, 7, 4, 4, 4, 4, 3, 3, 3, 7, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 0, 2, 2, 1, 3, 2, 0, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 3, 1, 3, - 3, 0, 2, 2, 2, 2, 2, 2, 2, 4, - 4, 3, 0, 1, 4, 3, 4, 4, 3, 3, - 3, 2, 1, 3, 3, 3, 5, 7, 7, 6, - 5, 3, 2, 4, 5, 5, 3, 3, 7, 3, - 3, 3, 3, 4, 7, 5, 2, 4, 4, 4, - 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, - 4, 4, 2, 2, 4, 4, 4, 4, 4, 2, - 3, 3, 3, 3, 3, 5, 2, 3, 3, 2, - 3, 4, 4, 4, 3, 4, 4, 5, 3, 5, - 3, 5, 0, 1, 0, 1, 0, 1, 1, 1, - 0, 2, 2, 0, 2, 2, 0, 2, 0, 1, - 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, - 1, 3, 0, 1, 1, 3, 3, 2, 2, 1, - 1, 5, 0, 1, 0, 1, 2, 3, 0, 3, - 3, 3, 1, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 1, 1, 4, - 4, 4, 2, 2, 3, 1, 3, 2, 1, 2, - 1, 2, 2, 4, 3, 3, 6, 4, 7, 6, - 1, 3, 2, 2, 2, 2, 1, 1, 1, 3, - 2, 1, 1, 1, 0, 1, 1, 0, 3, 0, - 2, 0, 2, 1, 2, 2, 0, 1, 1, 0, - 1, 1, 5, 5, 4, 0, 2, 4, 4, 0, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 1, 2, 3, 5, - 0, 1, 2, 1, 1, 0, 1, 2, 1, 3, - 1, 1, 1, 4, 3, 1, 1, 2, 3, 7, - 0, 3, 0, 1, 1, 3, 1, 3, 1, 1, - 3, 3, 1, 3, 4, 4, 4, 3, 2, 4, - 0, 1, 0, 2, 0, 1, 0, 1, 2, 1, - 1, 1, 2, 2, 1, 2, 3, 2, 3, 2, - 2, 2, 1, 1, 3, 3, 0, 1, 1, 2, - 6, 5, 6, 6, 5, 5, 0, 2, 3, 3, - 0, 2, 3, 3, 3, 2, 3, 1, 3, 6, - 1, 1, 3, 4, 3, 4, 4, 4, 1, 3, - 4, 5, 6, 3, 4, 5, 6, 3, 4, 1, - 1, 1, 3, 3, 3, 3, 3, 3, 5, 5, - 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, - 1, 3, 1, 1, 1, 2, 2, 2, 2, 1, - 1, 2, 7, 7, 6, 6, 2, 2, 5, 6, - 3, 3, 1, 3, 1, 3, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 4, 2, 4, 0, 1, 2, 5, 0, 3, 0, - 1, 4, 4, 2, 1, 0, 0, 1, 1, 2, - 2, 1, 1, 2, 2, 0, 1, 1, 1, 1, - 5, 1, 3, 0, 3, 1, 1, 1, 2, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 4, 6, 4, 4, 8, - 8, 6, 8, 6, 5, 4, 10, 2, 2, 1, - 2, 2, 2, 2, 2, 5, 6, 6, 6, 6, - 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 8, 4, 8, 8, 6, 5, 4, 4, 4, - 5, 7, 4, 4, 7, 4, 4, 6, 6, 6, - 8, 6, 6, 4, 4, 3, 4, 6, 6, 4, - 4, 6, 4, 6, 4, 4, 4, 4, 4, 4, - 6, 4, 6, 4, 4, 4, 6, 4, 6, 4, - 4, 6, 4, 6, 4, 6, 8, 4, 6, 8, + 2, 3, 5, 0, 1, 2, 1, 1, 0, 1, + 2, 1, 3, 1, 1, 1, 4, 3, 1, 1, + 2, 3, 7, 0, 3, 0, 1, 1, 3, 1, + 3, 1, 1, 3, 3, 1, 3, 4, 4, 4, + 3, 2, 4, 0, 1, 0, 2, 0, 1, 0, + 1, 2, 1, 1, 1, 2, 2, 1, 2, 3, + 2, 3, 2, 2, 2, 1, 1, 3, 3, 0, + 1, 1, 2, 6, 5, 6, 6, 5, 5, 0, + 2, 3, 3, 0, 2, 3, 3, 3, 2, 3, + 1, 3, 6, 1, 1, 3, 4, 3, 4, 4, + 4, 1, 3, 4, 5, 6, 3, 4, 5, 6, + 3, 4, 1, 1, 1, 3, 3, 3, 3, 3, + 3, 5, 5, 3, 3, 3, 3, 3, 3, 1, + 1, 1, 1, 1, 3, 1, 1, 1, 2, 2, + 2, 2, 1, 1, 2, 7, 7, 6, 6, 2, + 2, 5, 6, 3, 3, 1, 3, 1, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 4, 2, 4, 0, 1, 2, 5, + 0, 3, 0, 1, 4, 4, 2, 1, 0, 0, + 1, 1, 2, 2, 1, 1, 2, 2, 0, 1, + 1, 1, 1, 5, 1, 3, 0, 3, 1, 1, + 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 4, 6, + 4, 4, 8, 8, 6, 8, 6, 5, 4, 10, + 2, 2, 1, 2, 2, 2, 2, 2, 5, 6, + 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 8, 4, 8, 8, 6, 5, + 4, 4, 4, 5, 7, 4, 4, 7, 4, 4, + 6, 6, 6, 8, 6, 6, 4, 4, 3, 4, + 6, 6, 4, 4, 6, 4, 6, 4, 4, 4, + 4, 4, 4, 6, 4, 6, 4, 4, 4, 6, + 4, 6, 4, 4, 6, 4, 6, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, - 6, 8, 4, 4, 4, 6, 4, 6, 4, 8, - 6, 4, 4, 6, 4, 6, 8, 4, 6, 8, - 4, 4, 6, 8, 6, 4, 6, 6, 8, 10, - 7, 8, 8, 9, 4, 4, 4, 4, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, - 4, 4, 4, 4, 6, 4, 6, 5, 9, 6, - 9, 8, 6, 8, 8, 8, 6, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 2, 6, 8, 10, - 12, 14, 6, 8, 8, 10, 12, 14, 6, 8, - 10, 12, 6, 8, 4, 4, 3, 4, 6, 6, - 4, 6, 4, 6, 8, 0, 2, 1, 1, 1, + 6, 8, 4, 6, 8, 4, 4, 4, 6, 4, + 6, 4, 8, 6, 4, 4, 6, 4, 6, 8, + 4, 6, 8, 4, 4, 6, 8, 6, 4, 6, + 6, 8, 10, 7, 8, 8, 9, 4, 4, 4, + 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 4, 4, 4, 4, 4, 4, 6, 4, 6, + 5, 9, 6, 9, 8, 6, 8, 8, 8, 6, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, + 6, 8, 10, 12, 14, 6, 8, 8, 10, 12, + 14, 6, 8, 10, 12, 6, 8, 4, 4, 3, + 4, 6, 6, 4, 6, 4, 6, 8, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 2, 0, 2, 3, - 4, 4, 4, 4, 4, 0, 3, 4, 7, 3, - 1, 1, 1, 0, 5, 5, 2, 3, 1, 2, - 2, 1, 2, 1, 2, 2, 1, 2, 2, 1, - 1, 0, 1, 0, 1, 0, 2, 1, 2, 4, - 0, 2, 1, 1, 3, 5, 1, 1, 1, 2, - 2, 0, 4, 0, 2, 0, 2, 2, 1, 3, - 0, 1, 0, 1, 3, 1, 3, 2, 0, 1, - 1, 0, 1, 2, 4, 4, 0, 2, 2, 1, - 1, 3, 3, 3, 3, 3, 3, 3, 3, 0, - 3, 3, 3, 0, 3, 1, 1, 0, 4, 0, - 1, 1, 0, 3, 1, 3, 2, 1, 1, 0, - 1, 2, 3, 4, 2, 3, 4, 4, 9, 3, - 5, 0, 3, 3, 0, 1, 0, 2, 2, 0, - 2, 2, 2, 0, 2, 1, 2, 3, 3, 0, - 2, 1, 2, 3, 4, 3, 0, 1, 3, 1, - 6, 5, 4, 1, 3, 3, 5, 0, 2, 5, - 0, 5, 1, 3, 1, 2, 3, 4, 1, 1, - 3, 3, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 0, 1, 0, 2, 0, 3, 0, 1, 0, - 1, 1, 5, 0, 1, 0, 1, 2, 1, 1, - 1, 1, 1, 1, 0, 1, 1, 1, 3, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, + 0, 2, 3, 4, 4, 4, 4, 4, 0, 3, + 4, 7, 3, 1, 1, 1, 0, 5, 5, 2, + 3, 1, 2, 2, 1, 2, 1, 2, 2, 1, + 2, 2, 1, 1, 0, 1, 0, 1, 0, 2, + 1, 2, 4, 0, 2, 1, 1, 3, 5, 1, + 1, 1, 2, 2, 0, 4, 0, 2, 0, 2, + 2, 1, 3, 0, 1, 0, 1, 3, 1, 3, + 2, 0, 1, 1, 0, 1, 2, 4, 4, 0, + 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 0, 3, 3, 3, 0, 3, 1, 1, + 0, 4, 0, 1, 1, 0, 3, 1, 3, 2, + 1, 1, 0, 1, 2, 3, 4, 2, 3, 4, + 4, 9, 3, 5, 0, 3, 3, 0, 1, 0, + 2, 2, 0, 2, 2, 2, 0, 2, 1, 2, + 3, 3, 0, 2, 1, 2, 3, 4, 3, 0, + 1, 3, 1, 6, 5, 4, 1, 3, 3, 5, + 0, 2, 5, 0, 5, 1, 3, 1, 3, 1, + 3, 1, 2, 3, 4, 1, 1, 1, 1, 3, + 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 0, 2, 0, 3, 0, 1, 0, 1, + 1, 5, 0, 1, 0, 1, 2, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 1, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -9036,568 +9011,571 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, } var yyChk = [...]int{ - -1000, -417, -79, -422, -7, -29, -15, -16, -17, -18, - -19, -20, -21, -22, -23, -24, -25, -26, -64, -67, - -65, -66, -69, -70, -71, -72, -73, -9, -11, -68, - -27, -28, -74, -75, -76, -77, -78, -12, -13, -14, - -8, -32, -31, -30, 13, 14, -109, -35, 35, -40, - -50, 240, -51, -41, 241, -52, 243, 242, 280, 244, - 397, 273, 83, 330, 331, 333, 334, 335, 336, -110, - 704, 278, 279, 246, 39, 51, 36, 37, 40, 250, - 286, 287, 249, 145, -33, -36, 12, -419, 15, 487, - 275, 274, 31, -34, 597, 95, -80, -418, 752, -253, - -237, 26, 36, 32, -236, -232, -128, -237, 24, 22, - 11, -79, -79, -79, 16, 17, -79, -356, -358, 95, - 173, 95, -79, -57, -56, -54, -53, -55, -58, 34, - -47, -48, -380, -46, -43, 245, 242, 290, 135, 136, - 280, 281, 282, 244, 264, 279, 283, 278, 299, -42, - 90, 36, 597, 600, -363, 241, 247, 248, 243, 488, - 138, 137, 84, -360, 392, 631, 722, -58, 724, 110, - 113, 723, 50, 254, 725, 726, 727, 638, 728, 263, - 729, 730, 731, 732, 738, 679, 739, 740, 741, 139, - 11, -79, -305, -301, 100, -294, 594, 266, 629, 441, - 630, 315, 90, 47, 42, 533, 604, 388, 392, 631, - 518, 722, 398, 330, 348, 342, 523, 524, 525, 371, - 363, 595, 632, 605, 318, 267, 303, 716, 361, 149, - 724, 322, 633, 281, 399, 400, 634, 401, 110, 333, - 438, 737, 321, 635, 735, 113, 723, 338, 88, 517, - 57, 719, 326, 50, 276, 446, 447, 359, 249, 355, - 725, 304, 636, 607, 297, 138, 135, 744, 39, 351, - 56, 33, 734, 137, 55, 726, 164, 637, 727, 638, - 403, 378, 710, 54, 404, 282, 639, 93, 287, 599, - 327, 718, 405, 538, 352, 406, 314, 733, 246, 640, - 325, 699, 691, 692, 407, 408, 711, 383, 379, 384, - 540, 641, 430, 522, 409, 695, 696, 751, 58, 642, - 643, 712, 136, 644, 87, 728, 89, 346, 347, 645, - 312, 265, 543, 544, 432, 375, 500, 127, 507, 508, - 120, 121, 503, 122, 509, 123, 128, 510, 511, 512, - 501, 124, 117, 502, 513, 514, 376, 377, 125, 515, - 119, 118, 504, 506, 126, 516, 263, 38, 410, 596, - 316, 64, 320, 291, 433, 52, 381, 748, 51, 706, - 545, 646, 709, 374, 370, 497, 59, 647, 648, 649, - 650, 519, 729, 373, 345, 369, 743, 4, 309, 492, - 520, 730, 68, 248, 386, 385, 387, 298, 429, 366, - 651, 652, 653, 270, 91, 654, 356, 25, 655, 656, - 411, 305, 657, 62, 658, 659, 436, 279, 660, 60, - 731, 45, 661, 284, 745, 732, 662, 663, 664, 705, - 665, 286, 666, 413, 667, 693, 694, 412, 380, 382, - 546, 293, 414, 397, 251, 598, 668, 328, 350, 283, - 736, 669, 271, 534, 535, 536, 537, 717, 542, 541, - 285, 290, 278, 437, 272, 670, 671, 672, 673, 674, - 319, 690, 675, 676, 334, 602, 738, 498, 49, 677, - 678, 679, 680, 681, 313, 308, 431, 440, 67, 92, - 394, 682, 683, 715, 344, 339, 43, 306, 99, 478, - 480, 481, 482, 483, 484, 479, 486, 684, 331, 61, - 739, 740, 741, 300, 742, 526, 527, 528, 529, 13, - 580, 563, 591, 564, 581, 565, 574, 566, 582, 590, - 592, 547, 555, 548, 556, 586, 569, 583, 575, 568, - 567, 589, 572, 576, 549, 557, 587, 573, 550, 558, - 551, 559, 552, 560, 585, 584, 577, 588, 553, 561, - 579, 554, 562, 578, 570, 571, 449, 749, 750, 521, - 416, 139, 310, 311, 53, 367, 292, 685, 323, 686, - 357, 358, 494, 495, 372, 343, 368, 146, 702, 332, - 341, 700, 294, 417, 499, 280, 687, 439, 307, 389, - 131, 340, 395, 324, 603, 539, 299, 418, 714, 601, - 530, 531, 365, 362, 301, 532, 688, 390, 704, 419, - 255, 295, 296, 689, 701, 420, 421, 317, 422, 423, - 424, 425, 426, 428, 329, 427, 703, 697, 698, 302, - 477, 600, 337, 360, 396, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 496, 253, -79, 253, -190, -301, -130, - 706, 708, 192, -272, 400, -290, 402, 415, 410, 420, - 408, -281, 411, 413, 293, -403, 430, 253, 417, 240, - 403, 412, 421, 422, 317, 428, 423, 329, 427, 302, - 424, 425, 426, -387, 192, 727, 742, 332, 340, 149, - 364, 407, 405, 431, 706, 100, -307, 100, 101, 102, - -294, 332, -310, 337, -295, -387, -294, 335, -79, -79, - -312, -312, -130, -210, -145, 157, -159, -261, -162, 101, - -150, -153, -204, -205, -206, -207, -160, -220, -259, 181, - 182, 189, 158, -216, -163, 29, 593, 489, 488, 192, - 34, 235, 77, 78, 491, 492, 160, 63, 15, 454, - 455, -161, 444, 445, 456, 450, 451, 517, 519, 520, + -1000, -422, -80, -427, -7, -29, -15, -16, -17, -18, + -19, -20, -21, -22, -23, -24, -25, -26, -65, -68, + -66, -67, -70, -71, -72, -73, -74, -9, -11, -69, + -27, -28, -75, -76, -77, -78, -79, -12, -13, -14, + -8, -32, -31, -30, 13, 14, -110, -36, 35, -41, + -51, 240, -52, -42, 241, -53, 243, 242, 280, 244, + 397, 273, 83, 330, 331, 333, 334, 335, 336, -111, + 708, 278, 279, 246, 39, 51, 36, 37, 40, 250, + 286, 287, 249, 145, -33, -37, 12, -424, 15, 487, + 275, 274, 31, -34, 597, 95, -35, 63, -81, -423, + 756, -258, -242, 26, 36, 32, -241, -237, -129, -242, + 24, 22, 11, -80, -80, -80, 16, 17, -80, -361, + -363, 95, 173, 95, -80, -58, -57, -55, -54, -56, + -59, 34, -48, -49, -385, -47, -44, 245, 242, 290, + 135, 136, 280, 281, 282, 244, 264, 279, 283, 278, + 299, -43, 90, 36, 597, 600, -368, 241, 247, 248, + 243, 488, 138, 137, 84, -365, 392, 631, 726, -59, + 728, 110, 113, 727, 50, 254, 729, 730, 731, 638, + 732, 263, 733, 734, 735, 736, 742, 679, 743, 744, + 745, 139, 11, -80, -310, -306, 100, -299, 594, 266, + 629, 441, 630, 315, 90, 47, 42, 533, 604, 388, + 392, 631, 518, 726, 398, 330, 348, 342, 523, 524, + 525, 371, 363, 595, 632, 605, 318, 267, 303, 720, + 361, 149, 728, 322, 633, 281, 399, 400, 634, 401, + 110, 333, 438, 741, 321, 635, 739, 113, 727, 338, + 88, 517, 57, 723, 326, 50, 276, 446, 447, 359, + 249, 355, 729, 304, 636, 607, 297, 138, 135, 748, + 39, 351, 56, 33, 738, 137, 55, 730, 164, 637, + 731, 638, 403, 378, 714, 54, 404, 282, 639, 93, + 287, 599, 327, 722, 405, 538, 352, 406, 314, 737, + 246, 640, 325, 703, 695, 696, 407, 408, 715, 383, + 379, 384, 540, 641, 430, 522, 409, 699, 700, 755, + 58, 642, 643, 716, 136, 644, 87, 732, 89, 346, + 347, 645, 312, 265, 543, 544, 432, 375, 500, 127, + 507, 508, 120, 121, 503, 122, 509, 123, 128, 510, + 511, 512, 501, 124, 117, 502, 513, 514, 376, 377, + 125, 515, 119, 118, 504, 506, 126, 516, 263, 38, + 410, 596, 316, 64, 320, 291, 433, 52, 381, 752, + 51, 710, 545, 646, 713, 374, 370, 497, 691, 59, + 647, 648, 649, 650, 519, 733, 373, 345, 369, 747, + 4, 309, 492, 520, 734, 68, 248, 386, 385, 387, + 298, 429, 366, 651, 652, 653, 270, 91, 654, 356, + 25, 655, 656, 411, 305, 657, 62, 658, 659, 436, + 279, 660, 60, 735, 692, 45, 661, 284, 749, 736, + 662, 663, 664, 709, 665, 286, 666, 413, 667, 697, + 698, 412, 380, 382, 546, 293, 414, 397, 693, 251, + 598, 668, 328, 350, 283, 740, 669, 271, 534, 535, + 536, 537, 721, 542, 541, 285, 290, 278, 437, 272, + 670, 671, 672, 673, 674, 319, 690, 675, 676, 334, + 602, 742, 498, 49, 677, 678, 679, 680, 681, 313, + 308, 431, 440, 67, 92, 394, 682, 683, 719, 344, + 339, 43, 306, 99, 478, 480, 481, 482, 483, 484, + 479, 486, 684, 331, 61, 743, 744, 745, 300, 746, + 526, 527, 528, 529, 13, 580, 563, 591, 564, 581, + 565, 574, 566, 582, 590, 592, 547, 555, 548, 556, + 586, 569, 583, 575, 568, 567, 589, 572, 576, 549, + 557, 587, 573, 550, 558, 551, 559, 552, 560, 585, + 584, 577, 588, 553, 561, 579, 554, 562, 578, 570, + 571, 449, 753, 754, 521, 416, 694, 139, 310, 311, + 53, 367, 292, 685, 323, 686, 357, 358, 494, 495, + 372, 343, 368, 146, 706, 332, 341, 704, 294, 417, + 499, 280, 687, 439, 307, 389, 131, 340, 395, 324, + 603, 539, 299, 418, 718, 601, 530, 531, 365, 362, + 301, 532, 688, 390, 708, 419, 255, 295, 296, 689, + 705, 420, 421, 317, 422, 423, 424, 425, 426, 428, + 329, 427, 707, 701, 702, 302, 477, 600, 337, 360, + 396, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 496, + 253, -80, 253, -191, -306, -131, 710, 712, 192, -277, + 400, -295, 402, 415, 410, 420, 408, -286, 411, 413, + 293, -408, 430, 253, 417, 240, 403, 412, 421, 422, + 317, 428, 423, 329, 427, 302, 424, 425, 426, -392, + 192, 731, 746, 332, 340, 149, 364, 407, 405, 431, + 710, 100, -312, 100, 101, 102, -299, 332, -315, 337, + -300, -392, -299, 335, -80, -80, -317, -317, -131, -211, + -146, 157, -160, -266, -163, 101, -151, -154, -205, -206, + -207, -208, -161, -225, -264, 181, 182, 189, 158, -221, + -164, 29, 593, 489, 488, 192, 34, 235, 77, 78, + 491, 492, 160, 63, 15, 454, 455, -162, 444, 445, + 456, 450, 451, 517, 519, 520, 521, 518, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 522, 533, + 494, 495, 129, 496, 117, 119, 118, 127, 128, 497, + 498, 499, 361, 545, 546, 540, 543, 544, 542, 541, + 376, 377, 500, 563, 564, 568, 567, 565, 566, 569, + 572, 573, 574, 575, 576, 577, 579, 578, 570, 571, + 548, 547, 549, 550, 551, 552, 553, 554, 556, 555, + 557, 558, 559, 560, 561, 562, 580, 581, 582, 583, + 584, 586, 585, 590, 589, 587, 588, 592, 591, 501, + 502, 120, 121, 122, 123, 124, 125, 126, 503, 506, + 504, 505, 507, 508, 509, 514, 515, 510, 511, 512, + 513, 516, 387, 385, 386, 382, 381, 380, -90, -103, + 620, 619, -104, 441, 446, 447, 449, -152, -153, -166, + -167, -300, -306, 258, 443, 252, 187, 487, -155, -149, + -223, 116, 102, -31, -220, 442, 452, 453, 457, 448, + 458, 606, 608, 623, 624, 626, 611, 616, 615, 618, + 534, 535, 536, 537, 538, 539, 695, 696, 697, 698, + 699, 700, 701, 702, -392, -299, 100, -158, -156, -200, + 103, 108, 111, 112, 114, -414, 276, 357, 358, 130, + -424, -216, -217, -157, 105, 106, 107, 132, 133, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 724, 98, 104, 50, 416, 416, -191, -80, -80, + -80, -80, -421, 727, 598, -235, -129, -237, -33, -31, + -424, 12, -80, -31, -32, -30, -37, -39, 625, -38, + -306, -80, 109, -242, -258, 16, 67, 176, 48, 56, + -240, -241, -34, -31, -146, 23, 41, 27, -133, 183, + -146, -306, -133, -284, 257, -80, -80, -273, -320, 332, + -275, 431, 710, 430, -265, -278, 100, -264, -277, 429, + 101, -362, 173, -348, -352, -300, 268, -378, 264, -191, + -371, -370, -300, -424, -130, -294, 254, 262, 261, 150, + -395, 153, 310, 443, 252, -54, -55, -56, -277, 191, + 730, -112, 285, 289, 96, 96, -352, -351, -350, -396, + 289, 268, -377, -369, 260, 269, -358, 261, 262, -353, + 254, 151, -396, -353, 259, 269, 264, 268, 289, 289, + 139, 289, 139, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 284, -359, 165, -359, 601, 601, -365, -396, + 264, 254, -396, -396, 260, -296, -353, 256, 28, 256, + 38, 38, -359, -359, -359, -277, 191, -359, -359, -359, + -359, 297, 297, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + 253, -395, -138, 427, 317, 90, -57, 299, -40, -191, + -294, 254, 255, -395, 286, -191, 236, 253, 713, -288, + 173, 19, -288, -285, 416, 414, 401, 406, -288, -288, + -288, -288, 300, 399, -354, 254, 38, 265, 416, 300, + 399, 300, 301, 300, 301, 409, 419, 300, -311, 18, + 176, 443, 404, 408, 293, 253, 294, 255, 418, 301, + -311, 98, -289, 173, 300, 416, 410, 296, -288, -288, + -318, -424, -302, -300, -298, 245, 41, 156, 28, 30, + 159, 192, 142, 23, 160, 40, 247, 364, 264, 191, + 260, 488, 240, 81, 606, 444, 451, 442, 450, 454, + 490, 491, 443, 402, 34, 17, 608, 31, 274, 27, + 44, 185, 242, 163, 609, 277, 29, 275, 129, 133, + 611, 26, 84, 269, 18, 262, 46, 20, 612, 613, + 21, 74, 258, 257, 176, 254, 79, 15, 235, 32, + 172, 75, 614, 151, 145, 615, 616, 617, 618, 143, + 77, 173, 24, 750, 452, 453, 36, 711, 593, 288, + 187, 82, 65, 712, 157, 448, 619, 620, 130, 621, + 134, 85, 717, 153, 22, 80, 48, 622, 289, 623, + 259, 751, 624, 434, 625, 174, 243, 487, 78, 175, + 724, 626, 725, 252, 415, 12, 493, 35, 273, 261, + 73, 72, 141, 76, 458, 627, 253, 162, 256, 144, + 132, 11, 150, 37, 16, 83, 86, 455, 456, 457, + 63, 140, 597, 161, 19, 628, 435, 155, -392, 713, + -318, -318, 300, 341, 35, 101, -418, -419, -420, 597, + 434, 256, -300, -191, -86, 703, 244, -87, 709, 41, + 251, 146, 38, -136, 416, -124, 192, 731, 714, 715, + 716, 713, 413, 721, 719, 717, 300, 718, 96, 153, + 155, 156, 4, -146, 172, -201, -202, 171, 165, 166, + 167, 168, 169, 170, 177, 176, 157, 159, 173, -251, + 154, 178, 179, 180, 181, 182, 183, 184, 186, 185, + 187, 188, 174, 175, 191, 238, 239, -154, -154, -154, + -154, -221, -227, -226, -424, -223, -392, -299, -306, -424, + -424, -154, -283, -424, -151, -424, -424, -424, -424, -424, + -230, -146, -424, -424, -428, -424, -428, -428, -428, -337, + -424, -337, -337, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, 236, -424, + -424, -424, -424, -424, -337, -337, -337, -337, -337, -337, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, 98, 112, 108, 111, 103, 114, + 98, 98, 98, 98, -31, -32, -211, 63, -424, -317, + -405, -406, -194, -191, -424, 317, -300, -300, 286, 105, + -240, -34, -31, -235, -241, -237, -31, -80, -122, -135, + 69, 70, -134, -137, 27, 44, 74, 76, 99, 72, + 73, 71, 41, -425, 97, -425, -258, -425, 96, -39, + -261, 95, 115, -214, -219, -217, 724, 653, 683, 653, + 683, 67, 49, 98, 98, 96, 25, -236, -238, -146, + 18, -304, 4, -303, 28, -300, 98, 236, 18, -192, + 32, -191, -284, -284, 96, 100, 332, -274, -276, 432, + 434, 165, -305, -300, 98, 34, 97, 96, -191, -326, + -329, -331, -330, -332, -327, -328, 361, 362, 192, 365, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 378, + 390, 35, 276, 357, 358, 359, 360, 379, 380, 381, + 382, 384, 385, 386, 387, 342, 363, 595, 343, 344, + 345, 346, 347, 348, 350, 351, 354, 352, 353, 355, + 356, -301, -300, 95, 97, 96, -336, 95, -146, -138, + 253, -300, 254, 254, 254, -291, 258, 487, -359, -359, + -359, 284, 23, -47, -44, -385, 22, -43, -44, 245, + 135, 136, 242, 95, -348, 95, -357, -301, -300, 95, + 151, 259, 150, -356, -353, -356, -357, -300, -223, -300, + 151, 151, -300, -300, -270, -300, -270, -270, 41, -270, + 41, -270, 41, 105, -300, -270, 41, -270, 41, -270, + 41, -270, 41, -270, 41, 34, 87, 88, 89, 34, + 91, 92, 93, -223, -300, -300, -223, -348, -223, -191, + -300, -277, 105, 105, 105, -359, -359, 105, 98, 98, + 98, -359, -359, 105, 98, -308, -306, 98, 98, -397, + 270, 314, 316, 105, 105, 105, 105, 34, 98, -398, + 34, 738, 737, 739, 740, 741, 98, 105, 34, 105, + 34, 105, -300, 95, -191, -144, 304, 240, 242, 245, + 85, 98, 322, 320, 321, 318, 323, 324, 325, 165, + 50, 96, 256, 253, -300, -290, 258, -290, -300, -307, + -306, -298, -191, 256, 398, 98, -146, -355, 18, 176, + -311, -311, -288, -191, -355, -311, -288, -191, -288, -288, + -288, -288, -311, -311, -311, -288, -306, -306, -191, -191, + -191, -191, -191, -191, -191, -318, -289, -288, 713, 98, + -282, 18, 85, -318, -318, -297, 26, 26, 96, 338, + 435, 436, -316, 335, -82, -300, 98, -10, -29, -18, + -17, -19, 165, -10, 96, 597, -184, -191, 713, 713, + 713, 713, 713, 713, -146, -146, -146, -146, 621, -209, + -416, 157, 132, 133, 130, 131, -163, 42, 43, 41, + -146, -210, -216, -221, 115, 176, 159, 173, -251, -151, + -154, -151, -151, -151, -151, -151, -151, 235, -151, 235, + -151, -151, -151, -151, -151, -151, -319, -300, 98, 192, + -159, -158, 114, -414, -159, 594, 96, -226, 236, -146, + -146, -392, -120, 460, 461, 462, 463, 465, 466, 467, + 470, 471, 475, 476, 459, 477, 464, 469, 472, 473, + 474, 468, 360, -146, -212, -211, -212, -146, -146, -228, + -229, 161, -223, -146, -425, -425, 105, 183, -128, 27, + 44, -128, -128, -128, -128, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -128, -146, -121, 459, 477, + 464, 469, 472, 473, 474, 468, 360, 478, 479, 480, + 481, 482, 483, 484, 485, 486, -121, -120, -146, -146, + -146, -146, -146, -146, -146, -146, -88, -146, 142, 143, + 144, -211, -146, -151, -146, -146, -146, -425, -146, -146, + -146, -212, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -391, -390, + -389, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -211, -211, -211, -211, -211, -146, + -425, -146, -165, -149, 105, -266, 114, 101, -146, -146, + -146, -146, -146, -146, -212, -302, -307, -298, -299, -211, + -212, -212, -211, -211, -146, -146, -146, -146, -146, -146, + -146, -146, -425, -146, -146, -146, -146, -146, -258, -425, + -211, 96, -407, 434, 435, 711, -309, 289, -308, 28, + -212, 98, 18, -268, 86, -300, -240, -240, 69, 70, + 65, -132, -133, -137, -425, -38, 28, -260, -300, 96, + -424, 646, 646, 68, 98, -338, -277, 388, 389, 192, + -146, -146, 96, -239, 30, 31, -191, -303, 183, -307, + -191, -269, 289, -191, -169, -171, -172, -173, -194, -222, + -424, -174, -31, 617, 614, 18, -184, -185, -193, -306, + -275, -320, -274, 96, 433, 435, 436, 85, 134, -146, + -339, 191, -367, -366, -365, -348, -350, -351, -352, 97, + -339, -344, 395, 394, -336, -336, -336, -336, -336, -338, + -338, -338, -338, 95, -336, 95, -336, -336, -336, -336, + -341, 95, -341, -341, -342, -341, 95, -342, -343, 95, + -343, -378, -146, -375, -374, -372, -373, 263, 110, 689, + 645, 597, 638, 679, 86, -370, -239, 105, -425, -144, + -291, -376, -373, -300, -300, -300, -306, 157, 100, 98, + 100, 98, 100, 98, -113, -61, -1, 750, 751, 752, + 96, 23, -349, -348, -60, 314, -381, -382, 289, -377, + -371, -357, 151, -356, -357, -357, -300, 96, 32, 139, + 139, 139, 139, 597, 242, 35, -292, 637, 157, 689, + 645, -348, -60, 256, 256, -319, -319, -319, 98, 98, + -287, 746, -184, -140, 306, 165, 295, 295, 253, 308, + 253, 308, -191, 319, 322, 320, 321, 318, 323, 324, + 325, 326, 41, 41, 41, 41, 41, 41, 41, 307, + 309, 311, 297, -191, -191, -290, 85, -186, -191, 29, + -306, 98, 98, -191, -288, -288, -191, -288, -288, -191, + 98, -306, -420, 339, -300, 375, 704, 706, -124, 434, + 96, 597, 26, -125, 26, -424, -416, 132, 133, -221, + -221, -221, -210, -151, -154, -151, 156, 277, -151, -151, + -424, -223, -425, -302, 28, 96, 86, -425, 181, 96, + -425, -425, 96, 18, 96, -231, -229, 163, -146, -425, + 96, -425, -425, -211, -146, -146, -146, -146, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -211, -425, + 96, 96, 18, -323, 28, -425, -425, -425, -425, 96, + -425, -425, -230, -425, 18, -425, 86, 96, 176, 96, + -425, -425, -425, 96, 96, -425, -425, 96, -425, 96, + -425, -425, -425, -425, -425, -425, 96, -425, 96, -425, + -425, -425, 96, -425, 96, -425, -425, 96, -425, 96, + -425, 96, -425, 96, -425, 96, -425, 96, -425, 96, + -425, 96, -425, 96, -425, 96, -425, 96, -425, 96, + -425, 96, -425, 96, -425, 96, -425, 96, -425, 96, + -425, 96, -425, -425, -425, 96, -425, 96, -425, 96, + -425, -425, 96, -425, 96, -425, 96, -425, 96, 96, + -425, 96, 96, 96, -425, 96, 96, 96, 96, -425, + -425, -425, -425, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, -425, -425, -425, -425, -425, -425, 96, + -95, 622, -425, -425, 96, -425, 96, 96, 96, 96, + 96, -425, -424, 236, -425, -425, -425, -425, -425, 96, + 96, 96, 96, 96, 96, -425, -425, -425, 96, 96, + -425, 96, -425, 96, -425, -406, 710, 435, -198, -197, + -195, 83, 257, 84, -424, -308, -425, -159, -266, -267, + -266, -204, -300, 105, 114, -242, -168, 96, -170, 18, + -221, 97, 96, -219, -425, -338, -246, -252, -285, -300, + 98, 192, -340, 192, -340, 388, 389, -238, 236, -199, + 19, -203, 35, 63, -29, -424, -424, 35, 96, -187, + -189, -188, -190, 75, 79, 81, 76, 77, 78, 82, + -314, 28, -31, -169, -31, -424, -191, -184, -426, 18, + 86, -426, 96, 236, -276, -279, 437, 434, 440, -392, + 98, -112, 96, -365, -352, -243, -141, 46, -345, 396, + -338, 605, -338, -347, 98, -347, 105, 105, 105, 97, + -50, -45, -46, 36, 90, -372, -359, 98, 45, -359, + -359, -300, 97, -239, -140, -191, 85, -376, -376, -376, + 29, -2, 749, 755, 151, 95, 401, 22, -260, 96, + 97, -224, 315, 97, -114, -300, 97, 95, -357, -357, + -300, -424, 253, 34, 34, 689, 645, 637, -60, -224, + -223, -300, -339, 748, 747, 97, 255, 313, -145, 454, + -142, 98, 100, -191, -191, -191, -191, -191, -191, 245, + 242, 424, -415, 327, 98, -415, 298, 256, -184, -191, + 96, -85, 272, 267, -311, -311, 36, -191, 434, 722, + 720, -146, 156, 277, -163, -154, -120, -120, -151, -321, + 192, 361, 276, 359, 355, 375, 366, 394, 357, 395, + 352, 351, 350, -321, -319, -151, -211, -146, -146, -146, + 164, -146, 162, -146, -96, -95, -425, -425, -425, -425, + -425, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -235, -146, -146, -146, -425, 192, 361, -96, -146, + 18, -146, -319, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -389, -146, + -211, -146, -211, -146, -146, -146, -146, -146, -390, -390, + -390, -390, -390, -211, -211, -211, -211, -146, -424, -300, + -99, -98, -97, 672, 257, -95, -165, -99, -165, 235, + -146, 235, 235, 235, -146, -212, -302, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -195, -353, 295, + -353, 295, -353, -270, 96, -281, 26, 18, 63, 63, + -168, -199, -133, -169, -300, -249, 703, -255, 52, -253, + -254, 53, -250, 54, 62, -340, -340, 183, -240, -146, + -271, 85, -272, -280, -223, -215, -218, -216, -424, -259, + -425, -300, -270, -272, -171, -172, -172, -171, -172, 75, + 75, 75, 80, 75, 80, 75, -188, -306, -425, -146, + -309, 86, -169, -169, -193, -306, 183, 434, 438, 439, + -365, -413, 130, 157, 34, 85, 392, 110, -411, 191, + 634, 684, 689, 645, 638, 679, -412, 259, 150, 151, + 271, 28, 47, 97, 96, 97, 96, 97, 97, 96, + -293, -292, -46, -45, -359, -359, 105, -392, 98, 98, + 255, -191, 85, 85, 85, -115, 753, 105, 95, -3, + 90, -146, 95, 23, -348, -223, -383, -333, -384, -334, + -335, -5, -6, -360, -118, 63, 110, -64, 50, 254, + 733, 734, 139, -424, 746, -375, -260, -379, -381, -191, + -150, -424, -162, -148, -147, -149, -155, 181, 182, 276, + 357, 358, -224, -191, -139, 304, 312, 95, -143, 101, + -394, 86, 295, 392, 295, 392, 98, -417, 328, 98, + -417, -191, -85, -50, -191, -288, -288, 36, -392, -425, + -163, -154, -127, 176, 597, -324, 604, -336, -336, -336, + -343, -336, 347, -336, 347, -336, -425, -425, -425, 96, + -425, 26, -425, 96, -146, 96, -96, -96, -96, -96, + -96, -123, 493, 96, 96, -425, 95, 95, -425, -146, + -425, -425, -425, 96, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, 96, -425, 96, + -425, 96, -425, 96, -425, 96, -425, 96, -425, 96, + -425, 96, -425, 96, -425, 96, -425, 96, -425, 96, + -425, 96, -425, 96, -425, 96, -425, 96, -425, -425, + 96, -425, -425, -425, 96, -425, 96, -425, 96, -425, + -425, -425, 96, -322, 690, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -94, -301, -95, 654, + 654, -425, -95, -232, 96, -151, -425, -151, -151, -151, + -425, -425, -425, 96, -425, 96, 96, -425, 96, -425, + 96, -425, -425, -425, -425, 96, -196, 26, -424, -196, + -424, -196, -425, -266, -191, -199, -233, 20, -246, 57, + 367, -257, -256, 61, 53, -254, 23, 55, 23, 33, + -271, 96, 165, -313, 96, 28, -425, -425, 96, 63, + 236, -425, -199, -182, -181, 85, 86, -183, 85, -181, + 75, 75, -261, 96, -269, -169, -199, -199, 236, 130, + -424, -150, 16, 98, 98, -392, -410, 737, 738, 34, + 105, -359, -359, 151, 151, -191, 95, -338, 98, -338, + 105, 105, 34, 91, 92, 93, 34, 87, 88, 89, + -191, -191, -191, -191, -380, 95, 23, -146, 95, 165, + 97, -260, -260, 291, 176, -359, 731, 297, 297, -359, + -359, -359, -117, -116, 753, 97, -425, 96, -346, 597, + 600, -146, -156, -156, -261, 97, -388, 597, -393, -300, + -300, -300, -300, 105, 107, -425, 595, 82, 598, -425, + -338, -146, -146, -146, -146, -240, 98, -146, -146, 105, + 105, -96, -425, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -211, -146, -425, -179, -178, -180, 714, + 130, 34, -321, -425, -213, 289, -102, -101, -100, 18, + -425, -146, -120, -120, -120, -120, -146, -146, -146, -146, + -146, -146, -424, 75, 22, 20, -263, -300, 259, -424, + -263, -424, -309, -233, -234, 21, 23, -247, 59, -245, + 58, -245, -256, 23, 23, 98, 23, 98, 151, -280, + -146, -218, -308, 63, -29, -300, -215, -300, -235, -146, + 95, -146, -159, -199, -199, -146, -206, 517, 519, 520, 521, 518, 523, 524, 525, 526, 527, 528, 529, 530, - 531, 532, 522, 533, 494, 495, 129, 496, 117, 119, - 118, 127, 128, 497, 498, 499, 361, 545, 546, 540, - 543, 544, 542, 541, 376, 377, 500, 563, 564, 568, - 567, 565, 566, 569, 572, 573, 574, 575, 576, 577, - 579, 578, 570, 571, 548, 547, 549, 550, 551, 552, - 553, 554, 556, 555, 557, 558, 559, 560, 561, 562, - 580, 581, 582, 583, 584, 586, 585, 590, 589, 587, - 588, 592, 591, 501, 502, 120, 121, 122, 123, 124, - 125, 126, 503, 506, 504, 505, 507, 508, 509, 514, - 515, 510, 511, 512, 513, 516, 387, 385, 386, 382, - 381, 380, -89, -102, 620, 619, -103, 441, 446, 447, - 449, -151, -152, -165, -166, -295, -301, 258, 443, 252, - 187, 487, -154, -148, -218, 116, 102, -31, -214, 442, - 452, 453, 457, 448, 458, 606, 608, 623, 624, 626, - 611, 616, 615, 618, 534, 535, 536, 537, 538, 539, - 691, 692, 693, 694, 695, 696, 697, 698, -387, -294, - 100, -157, -155, -199, 103, 108, 111, 112, 114, -409, - 276, 357, 358, 130, -419, 720, -156, 105, 106, 107, - 132, 133, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, - 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 98, 104, 50, 416, 416, -190, - -79, -79, -79, -79, -416, 723, 598, -230, -128, -232, - -33, -31, -419, 12, -79, -31, -32, -30, -36, -38, - 625, -37, -301, 109, -237, -253, 16, 67, 176, 48, - 56, -235, -236, -34, -31, -145, 23, 41, 27, -132, - 183, -145, -301, -132, -279, 257, -79, -79, -268, -315, - 332, -270, 431, 706, 430, -260, -273, 100, -259, -272, - 429, 101, -357, 173, -343, -347, -295, 268, -373, 264, - -190, -366, -365, -295, -419, -129, -289, 254, 262, 261, - 150, -390, 153, 310, 443, 252, -53, -54, -55, -272, - 191, 726, -111, 285, 289, 96, 96, -347, -346, -345, - -391, 289, 268, -372, -364, 260, 269, -353, 261, 262, - -348, 254, 151, -391, -348, 259, 269, 264, 268, 289, - 289, 139, 289, 139, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 284, -354, 165, -354, 601, 601, -360, - -391, 264, 254, -391, -391, 260, -291, -348, 256, 28, - 256, 38, 38, -354, -354, -354, -272, 191, -354, -354, - -354, -354, 297, 297, -354, -354, -354, -354, -354, -354, - -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, - -354, 253, -390, -137, 427, 317, 90, -56, 299, -39, - -190, -289, 254, 255, -390, 286, -190, 236, 253, 709, - -283, 173, 19, -283, -280, 416, 414, 401, 406, -283, - -283, -283, -283, 300, 399, -349, 254, 38, 265, 416, - 300, 399, 300, 301, 300, 301, 409, 419, 300, -306, - 18, 176, 443, 404, 408, 293, 253, 294, 255, 418, - 301, -306, 98, -284, 173, 300, 416, 410, 296, -283, - -283, -313, -419, -297, -295, -293, 245, 41, 156, 28, - 30, 159, 192, 142, 23, 160, 40, 247, 364, 264, - 191, 260, 488, 240, 81, 606, 444, 451, 442, 450, - 454, 490, 491, 443, 402, 34, 17, 608, 31, 274, - 27, 44, 185, 242, 163, 609, 277, 29, 275, 129, - 133, 611, 26, 84, 269, 18, 262, 46, 20, 612, - 613, 21, 74, 258, 257, 176, 254, 79, 15, 235, - 32, 172, 75, 614, 151, 145, 615, 616, 617, 618, - 143, 77, 173, 24, 746, 452, 453, 36, 707, 593, - 288, 187, 82, 65, 708, 157, 448, 619, 620, 130, - 621, 134, 85, 713, 153, 22, 80, 48, 622, 289, - 623, 259, 747, 624, 434, 625, 174, 243, 487, 78, - 175, 720, 626, 721, 252, 415, 12, 493, 35, 273, - 261, 73, 72, 141, 76, 458, 627, 253, 162, 256, - 144, 132, 11, 150, 37, 16, 83, 86, 455, 456, - 457, 63, 140, 597, 161, 19, 628, 435, 155, -387, - 709, -313, -313, 300, 341, 35, 101, -413, -414, -415, - 597, 434, 256, -295, -190, -85, 699, 244, -86, 705, - 41, 251, 146, 38, -135, 416, -123, 192, 727, 710, - 711, 712, 709, 413, 717, 715, 713, 300, 714, 96, - 153, 155, 156, 4, -145, 172, -200, -201, 171, 165, - 166, 167, 168, 169, 170, 177, 176, 157, 159, 173, - -246, 154, 178, 179, 180, 181, 182, 183, 184, 186, - 185, 187, 188, 174, 175, 191, 238, 239, -153, -153, - -153, -153, -216, -222, -221, -419, -218, -387, -294, -301, - -419, -419, -153, -278, -419, -150, -419, -419, -419, -419, - -419, -225, -145, -419, -419, -423, -419, -423, -423, -423, - -332, -419, -332, -332, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, 236, - -419, -419, -419, -419, -419, -332, -332, -332, -332, -332, - -332, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, 98, 112, 108, 111, 103, - 114, 98, 98, 98, 98, -31, -32, -210, -419, -312, - -400, -401, -193, -190, -419, 317, -295, -295, 286, 105, - -235, -34, -31, -230, -236, -232, -31, -79, -121, -134, - 69, 70, -133, -136, 27, 44, 74, 76, 99, 72, - 73, 71, 41, -420, 97, -420, -253, -420, 96, -38, - -256, 95, 653, 683, 653, 683, 67, 49, 98, 98, - 96, 25, -231, -233, -145, 18, -299, 4, -298, 28, - -295, 98, 236, 18, -191, 32, -190, -279, -279, 96, - 100, 332, -269, -271, 432, 434, 165, -300, -295, 98, - 34, 97, 96, -190, -321, -324, -326, -325, -327, -322, - -323, 361, 362, 192, 365, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 378, 390, 35, 276, 357, 358, - 359, 360, 379, 380, 381, 382, 384, 385, 386, 387, - 342, 363, 595, 343, 344, 345, 346, 347, 348, 350, - 351, 354, 352, 353, 355, 356, -296, -295, 95, 97, - 96, -331, 95, -145, -137, 253, -295, 254, 254, 254, - -286, 258, 487, -354, -354, -354, 284, 23, -46, -43, - -380, 22, -42, -43, 245, 135, 136, 242, 95, -343, - 95, -352, -296, -295, 95, 151, 259, 150, -351, -348, - -351, -352, -295, -218, -295, 151, 151, -295, -295, -265, - -295, -265, -265, 41, -265, 41, -265, 41, 105, -295, - -265, 41, -265, 41, -265, 41, -265, 41, -265, 41, - 34, 87, 88, 89, 34, 91, 92, 93, -218, -295, - -295, -218, -343, -218, -190, -295, -272, 105, 105, 105, - -354, -354, 105, 98, 98, 98, -354, -354, 105, 98, - -303, -301, 98, 98, -392, 270, 314, 316, 105, 105, - 105, 105, 34, 98, -393, 34, 734, 733, 735, 736, - 737, 98, 105, 34, 105, 34, 105, -295, 95, -190, - -143, 304, 240, 242, 245, 85, 98, 322, 320, 321, - 318, 323, 324, 325, 165, 50, 96, 256, 253, -295, - -285, 258, -285, -295, -302, -301, -293, -190, 256, 398, - 98, -145, -350, 18, 176, -306, -306, -283, -190, -350, - -306, -283, -190, -283, -283, -283, -283, -306, -306, -306, - -283, -301, -301, -190, -190, -190, -190, -190, -190, -190, - -313, -284, -283, 709, 98, -277, 18, 85, -313, -313, - -292, 26, 26, 96, 338, 435, 436, -311, 335, -81, - -295, 98, -10, -29, -18, -17, -19, 165, -10, 96, - 597, -183, -190, 709, 709, 709, 709, 709, 709, -145, - -145, -145, -145, 621, -208, -411, 157, 132, 133, 130, - 131, -162, 42, 43, 41, -145, -209, -214, -216, 115, - 176, 159, 173, -246, -150, -153, -150, -150, -150, -150, - -150, -150, 235, -150, 235, -150, -150, -150, -150, -150, - -150, -314, -295, 98, 192, -158, -157, 114, -409, -158, - 594, 96, -221, 236, -145, -145, -387, -119, 460, 461, - 462, 463, 465, 466, 467, 470, 471, 475, 476, 459, - 477, 464, 469, 472, 473, 474, 468, 360, -145, -211, - -210, -211, -145, -145, -223, -224, 161, -218, -145, -420, - -420, 105, 183, -127, 27, 44, -127, -127, -127, -127, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -127, -145, -120, 459, 477, 464, 469, 472, 473, 474, - 468, 360, 478, 479, 480, 481, 482, 483, 484, 485, - 486, -120, -119, -145, -145, -145, -145, -145, -145, -145, - -145, -87, -145, 142, 143, 144, -210, -145, -150, -145, - -145, -145, -420, -145, -145, -145, -211, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -386, -385, -384, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -210, - -210, -210, -210, -210, -145, -420, -145, -164, -148, 105, - -261, 114, 101, -145, -145, -145, -145, -145, -145, -211, - -297, -302, -293, -294, -210, -211, -211, -210, -210, -145, - -145, -145, -145, -145, -145, -145, -145, -420, -145, -145, - -145, -145, -145, -253, -420, -210, 96, -402, 434, 435, - 707, -304, 289, -303, 28, -211, 98, 18, -263, 86, - -295, -235, -235, 69, 70, 65, -131, -132, -136, -420, - -37, 28, -255, -295, 646, 646, 68, 98, -333, -272, - 388, 389, 192, -145, -145, 96, -234, 30, 31, -190, - -298, 183, -302, -190, -264, 289, -190, -168, -170, -171, - -172, -193, -217, -419, -173, -31, 617, 614, 18, -183, - -184, -192, -301, -270, -315, -269, 96, 433, 435, 436, - 85, 134, -145, -334, 191, -362, -361, -360, -343, -345, - -346, -347, 97, -334, -339, 395, 394, -331, -331, -331, - -331, -331, -333, -333, -333, -333, 95, -331, 95, -331, - -331, -331, -331, -336, 95, -336, -336, -337, -336, 95, - -337, -338, 95, -338, -373, -145, -370, -369, -367, -368, - 263, 110, 689, 645, 597, 638, 679, 86, -365, -234, - 105, -420, -143, -286, -371, -368, -295, -295, -295, -301, - 157, 100, 98, 100, 98, 100, 98, -112, -60, -1, - 746, 747, 748, 96, 23, -344, -343, -59, 314, -376, - -377, 289, -372, -366, -352, 151, -351, -352, -352, -295, - 96, 32, 139, 139, 139, 139, 597, 242, 35, -287, - 637, 157, 689, 645, -343, -59, 256, 256, -314, -314, - -314, 98, 98, -282, 742, -183, -139, 306, 165, 295, - 295, 253, 308, 253, 308, -190, 319, 322, 320, 321, - 318, 323, 324, 325, 326, 41, 41, 41, 41, 41, - 41, 41, 307, 309, 311, 297, -190, -190, -285, 85, - -185, -190, 29, -301, 98, 98, -190, -283, -283, -190, - -283, -283, -190, 98, -301, -415, 339, -295, 375, 700, - 702, -123, 434, 96, 597, 26, -124, 26, -419, -411, - 132, 133, -216, -216, -216, -209, -150, -153, -150, 156, - 277, -150, -150, -419, -218, -420, -297, 28, 96, 86, - -420, 181, 96, -420, -420, 96, 18, 96, -226, -224, - 163, -145, -420, 96, -420, -420, -210, -145, -145, -145, - -145, -420, -420, -420, -420, -420, -420, -420, -420, -420, - -420, -210, -420, 96, 96, 18, -318, 28, -420, -420, - -420, -420, 96, -420, -420, -225, -420, 18, -420, 86, - 96, 176, 96, -420, -420, -420, 96, 96, -420, -420, - 96, -420, 96, -420, -420, -420, -420, -420, -420, 96, - -420, 96, -420, -420, -420, 96, -420, 96, -420, -420, - 96, -420, 96, -420, 96, -420, 96, -420, 96, -420, - 96, -420, 96, -420, 96, -420, 96, -420, 96, -420, - 96, -420, 96, -420, 96, -420, 96, -420, 96, -420, - 96, -420, 96, -420, 96, -420, -420, -420, 96, -420, - 96, -420, 96, -420, -420, 96, -420, 96, -420, 96, - -420, 96, 96, -420, 96, 96, 96, -420, 96, 96, - 96, 96, -420, -420, -420, -420, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, -420, -420, -420, -420, - -420, -420, 96, -94, 622, -420, -420, 96, -420, 96, - 96, 96, 96, 96, -420, -419, 236, -420, -420, -420, - -420, -420, 96, 96, 96, 96, 96, 96, -420, -420, - -420, 96, 96, -420, 96, -420, 96, -420, -401, 706, - 435, -197, -196, -194, 83, 257, 84, -419, -303, -420, - -158, -261, -262, -261, -203, -295, 105, 114, -237, -167, - 96, -169, 18, -216, 97, 96, -333, -241, -247, -280, - -295, 98, 192, -335, 192, -335, 388, 389, -233, 236, - -198, 19, -202, 35, 63, -29, -419, -419, 35, 96, - -186, -188, -187, -189, 75, 79, 81, 76, 77, 78, - 82, -309, 28, -31, -168, -31, -419, -190, -183, -421, - 18, 86, -421, 96, 236, -271, -274, 437, 434, 440, - -387, 98, -111, 96, -360, -347, -238, -140, 46, -340, - 396, -333, 605, -333, -342, 98, -342, 105, 105, 105, - 97, -49, -44, -45, 36, 90, -367, -354, 98, 45, - -354, -354, -295, 97, -234, -139, -190, 85, -371, -371, - -371, 29, -2, 745, 751, 151, 95, 401, 22, -255, - 96, 97, -219, 315, 97, -113, -295, 97, 95, -352, - -352, -295, -419, 253, 34, 34, 689, 645, 637, -59, - -219, -218, -295, -334, 744, 743, 97, 255, 313, -144, - 454, -141, 98, 100, -190, -190, -190, -190, -190, -190, - 245, 242, 424, -410, 327, 98, -410, 298, 256, -183, - -190, 96, -84, 272, 267, -306, -306, 36, -190, 434, - 718, 716, -145, 156, 277, -162, -153, -119, -119, -150, - -316, 192, 361, 276, 359, 355, 375, 366, 394, 357, - 395, 352, 351, 350, -316, -314, -150, -210, -145, -145, - -145, 164, -145, 162, -145, -95, -94, -420, -420, -420, - -420, -420, -95, -95, -95, -95, -95, -95, -95, -95, - -95, -95, -230, -145, -145, -145, -420, 192, 361, -95, - -145, 18, -145, -314, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -384, - -145, -210, -145, -210, -145, -145, -145, -145, -145, -385, - -385, -385, -385, -385, -210, -210, -210, -210, -145, -419, - -295, -98, -97, -96, 672, 257, -94, -164, -98, -164, - 235, -145, 235, 235, 235, -145, -211, -297, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -194, -348, - 295, -348, 295, -348, -265, 96, -276, 26, 18, 63, - 63, -167, -198, -132, -168, -295, -244, 699, -250, 52, - -248, -249, 53, -245, 54, 62, -335, -335, 183, -235, - -145, -266, 85, -267, -275, -218, -213, -215, -214, -419, - -254, -420, -295, -265, -267, -170, -171, -171, -170, -171, - 75, 75, 75, 80, 75, 80, 75, -187, -301, -420, - -145, -304, 86, -168, -168, -192, -301, 183, 434, 438, - 439, -360, -408, 130, 157, 34, 85, 392, 110, -406, - 191, 634, 684, 689, 645, 638, 679, -407, 259, 150, - 151, 271, 28, 47, 97, 96, 97, 96, 97, 97, - 96, -288, -287, -45, -44, -354, -354, 105, -387, 98, - 98, 255, -190, 85, 85, 85, -114, 749, 105, 95, - -3, 90, -145, 95, 23, -343, -218, -378, -328, -379, - -329, -330, -5, -6, -355, -117, 63, 110, -63, 50, - 254, 729, 730, 139, -419, 742, -370, -255, -374, -376, - -190, -149, -419, -161, -147, -146, -148, -154, 181, 182, - 276, 357, 358, -219, -190, -138, 304, 312, 95, -142, - 101, -389, 86, 295, 392, 295, 392, 98, -412, 328, - 98, -412, -190, -84, -49, -190, -283, -283, 36, -387, - -420, -162, -153, -126, 176, 597, -319, 604, -331, -331, - -331, -338, -331, 347, -331, 347, -331, -420, -420, -420, - 96, -420, 26, -420, 96, -145, 96, -95, -95, -95, - -95, -95, -122, 493, 96, 96, -420, 95, 95, -420, - -145, -420, -420, -420, 96, -420, -420, -420, -420, -420, - -420, -420, -420, -420, -420, -420, -420, -420, 96, -420, - 96, -420, 96, -420, 96, -420, 96, -420, 96, -420, - 96, -420, 96, -420, 96, -420, 96, -420, 96, -420, - 96, -420, 96, -420, 96, -420, 96, -420, 96, -420, - -420, 96, -420, -420, -420, 96, -420, 96, -420, 96, - -420, -420, -420, 96, -317, 690, -420, -420, -420, -420, - -420, -420, -420, -420, -420, -420, -420, -93, -296, -94, - 654, 654, -420, -94, -227, 96, -150, -420, -150, -150, - -150, -420, -420, -420, 96, -420, 96, 96, -420, 96, - -420, 96, -420, -420, -420, -420, 96, -195, 26, -419, - -195, -419, -195, -420, -261, -190, -198, -228, 20, -241, - 57, 367, -252, -251, 61, 53, -249, 23, 55, 23, - 33, -266, 96, 165, -308, 96, 28, -420, -420, 96, - 63, 236, -420, -198, -181, -180, 85, 86, -182, 85, - -180, 75, 75, -256, 96, -264, -168, -198, -198, 236, - 130, -419, -149, 16, 98, 98, -387, -405, 733, 734, - 34, 105, -354, -354, 151, 151, -190, 95, -333, 98, - -333, 105, 105, 34, 91, 92, 93, 34, 87, 88, - 89, -190, -190, -190, -190, -375, 95, 23, -145, 95, - 165, 97, -255, -255, 291, 176, -354, 727, 297, 297, - -354, -354, -354, -116, -115, 749, 97, -420, 96, -341, - 597, 600, -145, -155, -155, -256, 97, -383, 597, -388, - -295, -295, -295, -295, 105, 107, -420, 595, 82, 598, - -420, -333, -145, -145, -145, -145, -235, 98, -145, -145, - 105, 105, -95, -420, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -210, -145, -420, -178, -177, -179, - 710, 130, 34, -316, -420, -212, 289, -101, -100, -99, - 18, -420, -145, -119, -119, -119, -119, -145, -145, -145, - -145, -145, -145, -419, 75, 22, 20, -258, -295, 259, - -419, -258, -419, -304, -228, -229, 21, 23, -242, 59, - -240, 58, -240, -251, 23, 23, 98, 23, 98, 151, - -275, -145, -215, -303, 63, -29, -295, -213, -295, -230, - -145, 95, -145, -158, -198, -198, -145, -205, 517, 519, - 520, 521, 518, 523, 524, 525, 526, 527, 528, 529, - 530, 531, 532, 522, 533, 494, 495, 496, 117, 119, - 118, 127, 128, 497, 498, 499, 361, 545, 546, 540, - 543, 544, 542, 541, 376, 377, 500, 563, 564, 568, - 567, 565, 566, 569, 572, 573, 574, 575, 576, 577, - 579, 578, 570, 571, 548, 547, 549, 550, 551, 552, - 553, 554, 556, 555, 557, 558, 559, 560, 561, 562, - 580, 581, 582, 583, 584, 586, 585, 590, 589, 587, - 588, 592, 591, 501, 502, 120, 121, 122, 123, 124, - 125, 126, 503, 506, 504, 507, 508, 509, 514, 515, - 510, 511, 512, 513, 516, 387, 385, 386, 382, 381, - 380, 441, 446, 447, 449, 534, 535, 536, 537, 538, - 539, 691, 692, 693, 694, 695, 696, 697, 698, 98, - 98, 95, -145, 97, 97, -256, -374, -60, 97, -257, - -255, 105, 97, 292, -214, -419, 98, -354, -354, -354, - 105, 105, -303, -420, 96, -295, -407, -376, 601, 601, - -420, 28, -382, -381, -297, 95, 86, 68, 596, 599, - -420, -420, -420, 96, -420, -420, -420, 97, 97, -420, - -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, - -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, - -420, 96, -420, -177, -179, -420, 85, -158, -230, 23, - -98, 314, 316, -98, -420, -420, -420, -420, -420, 96, - -420, -420, 96, -420, 96, -420, -420, -258, -420, 23, - 23, 96, -420, -258, -420, -258, -197, -229, -108, -107, - -106, 628, -145, -210, -243, 60, 85, 134, 98, 98, - 98, 16, -419, -213, 236, -308, -235, -255, -175, 401, - -230, -420, -255, 97, 28, 97, 751, 151, 97, -214, - -125, -419, 288, -303, 98, 98, -115, -118, -29, 96, - 165, -255, -190, 68, -145, -210, -420, 85, 609, 710, - -92, -91, -88, 721, 747, -210, -94, -94, -145, -145, - -145, -420, -295, 259, -420, -420, -108, 96, -105, -104, - -295, -320, 597, 85, 134, -267, -255, -308, -295, 97, - -420, -419, -235, 97, -239, -29, 95, -3, 288, -328, - -379, -329, -330, -5, -6, -355, -82, 597, -381, -359, - -301, -297, 98, 105, 97, 597, -420, -420, -90, 159, - 719, 687, -155, 235, -420, 96, -420, 96, -420, 96, - -106, 96, 28, 602, -420, -304, -176, -174, -295, 651, - -398, -397, 593, -408, -404, 130, 157, 110, -406, 689, - 645, 140, 141, -82, -145, 95, -420, -83, 303, 706, - 236, -389, 598, -90, 720, 665, 640, 665, 640, -150, - -145, -145, -145, -104, -419, -420, 96, 26, -321, -62, - 662, -395, -396, 85, -399, 407, 661, 682, 130, 98, - 97, -255, 264, -302, -383, 599, 156, -119, -420, 96, - -420, 96, -420, -93, -174, 658, -334, -158, -396, 85, - -395, 85, 17, 16, -4, 750, 97, 305, -90, 665, - 640, -145, -145, -420, -61, 29, -175, -394, 272, 267, - 270, 35, -394, 105, -4, -420, -420, 662, 266, 34, - 130, -158, -178, -177, -177, + 531, 532, 522, 533, 494, 495, 496, 117, 119, 118, + 127, 128, 497, 498, 499, 361, 545, 546, 540, 543, + 544, 542, 541, 376, 377, 500, 563, 564, 568, 567, + 565, 566, 569, 572, 573, 574, 575, 576, 577, 579, + 578, 570, 571, 548, 547, 549, 550, 551, 552, 553, + 554, 556, 555, 557, 558, 559, 560, 561, 562, 580, + 581, 582, 583, 584, 586, 585, 590, 589, 587, 588, + 592, 591, 501, 502, 120, 121, 122, 123, 124, 125, + 126, 503, 506, 504, 507, 508, 509, 514, 515, 510, + 511, 512, 513, 516, 387, 385, 386, 382, 381, 380, + 441, 446, 447, 449, 534, 535, 536, 537, 538, 539, + 695, 696, 697, 698, 699, 700, 701, 702, 98, 98, + 95, -146, 97, 97, -261, -379, -61, 97, -262, -260, + 105, 97, 292, -216, -424, 98, -359, -359, -359, 105, + 105, -308, -425, 96, -300, -412, -381, 601, 601, -425, + 28, -387, -386, -302, 95, 86, 68, 596, 599, -425, + -425, -425, 96, -425, -425, -425, 97, 97, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + 96, -425, -178, -180, -425, 85, -159, -235, 23, -99, + 314, 316, -99, -425, -425, -425, -425, -425, 96, -425, + -425, 96, -425, 96, -425, -425, -263, -425, 23, 23, + 96, -425, -263, -425, -263, -198, -234, -109, -108, -107, + 628, -146, -211, -248, 60, 85, 134, 98, 98, 98, + 16, -424, -215, 236, -313, -240, -260, -176, 401, -235, + -425, -260, 97, 28, 97, 755, 151, 97, -216, -126, + -424, 288, -308, 98, 98, -116, -119, -29, 96, 165, + -260, -191, 68, -146, -211, -425, 85, 609, 714, -93, + -92, -89, 725, 751, -211, -95, -95, -146, -146, -146, + -425, -300, 259, -425, -425, -109, 96, -106, -105, -300, + -325, 597, 85, 134, -272, -260, -313, -300, 97, -425, + -424, -240, 97, -244, -29, 95, -3, 288, -333, -384, + -334, -335, -5, -6, -360, -83, 597, -386, -364, -306, + -302, 98, 105, 97, 597, -425, -425, -91, 159, 723, + 687, -156, 235, -425, 96, -425, 96, -425, 96, -107, + 96, 28, 602, -425, -309, -177, -175, -300, 651, -403, + -402, 593, -413, -409, 130, 157, 110, -411, 689, 645, + 140, 141, -83, -146, 95, -425, -84, 303, 710, 236, + -394, 598, -91, 724, 665, 640, 665, 640, -151, -146, + -146, -146, -105, -424, -425, 96, 26, -326, -63, 662, + -400, -401, 85, -404, 407, 661, 682, 130, 98, 97, + -260, 264, -307, -388, 599, 156, -120, -425, 96, -425, + 96, -425, -94, -175, 658, -339, -159, -401, 85, -400, + 85, 17, 16, -4, 754, 97, 305, -91, 665, 640, + -146, -146, -425, -62, 29, -176, -399, 272, 267, 270, + 35, -399, 105, -4, -425, -425, 662, 266, 34, 130, + -159, -179, -178, -178, } var yyDef = [...]int{ - 889, -2, -2, 891, 2, 4, 5, 6, 7, 8, + 892, -2, -2, 894, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 70, 72, 73, 889, 889, 889, 0, 889, 0, - 0, 889, -2, -2, 889, 1644, 0, 889, 0, 884, - 0, -2, 804, 810, 0, 819, -2, 0, 0, 889, - 889, 2285, 2285, 884, 0, 0, 0, 0, 0, 889, - 889, 889, 889, 1649, 1502, 50, 889, 0, 85, 86, - 839, 840, 841, 65, 0, 2283, 890, 1, 3, 71, - 75, 0, 0, 0, 58, 1511, 0, 78, 0, 0, - 893, 0, 0, 1627, 889, 889, 0, 126, 127, 0, - 0, 0, -2, 130, -2, 159, 160, 161, 0, 166, - 609, 526, 578, 524, 563, -2, 512, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, - 401, 401, 0, 0, -2, 512, 512, 512, 1629, 0, - 0, 0, 560, 463, 401, 401, 401, 0, 401, 401, - 401, 401, 0, 0, 401, 401, 401, 401, 401, 401, - 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, - 401, 1529, 165, 1645, 1642, 1643, 1805, 1806, 1807, 1808, - 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, - 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, - 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, - 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, - 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, - 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, - 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, - 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, - 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, - 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, - 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, - 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, - 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, - 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, - 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, - 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, - 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, - 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, - 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, - 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, - 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, - 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, - 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, - 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, - 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, - 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, - 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, - 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, - 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, - 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, - 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, - 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, - 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, - 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, - 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, - 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, - 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, - 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, - 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, - 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, - 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, - 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, - 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, - 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, - 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, - 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, - 2279, 2280, 2281, 2282, 0, 1621, 0, 722, 993, 0, - 885, 886, 0, 793, 793, 0, 793, 793, 793, 793, - 0, 0, 0, 736, 0, 0, 0, 0, 790, 0, - 752, 753, 0, 790, 0, 759, 796, 0, 0, 766, - 793, 793, 769, 2286, 0, 2286, 2286, 0, 0, 1612, - 0, 787, 785, 799, 800, 42, 803, 806, 807, 808, - 809, 812, 0, 823, 826, 1638, 1639, 0, 828, 833, - 852, 853, 0, 45, 1153, 0, 1017, 0, 1028, -2, - 1039, 1056, 1057, 1058, 1059, 1060, 1062, 1063, 1064, 0, - 0, 0, 0, 1069, 1070, 0, 0, 0, 0, 0, - 1133, 0, 0, 0, 0, 2008, 1473, 0, 0, 1435, - 1435, 1169, 1435, 1435, 1437, 1437, 1437, 1858, 2000, 2009, - 2188, 1819, 1825, 1826, 1827, 2134, 2135, 2136, 2137, 2229, - 2230, 2234, 1922, 1814, 2201, 2202, 0, 2282, 1961, 1969, - 1970, 1946, 1955, 1994, 2096, 2213, 1837, 1989, 2059, 1919, - 1941, 1942, 2077, 2078, 1965, 1966, 1945, 2140, 2142, 2158, - 2159, 2144, 2146, 2155, 2161, 2166, 2145, 2157, 2162, 2175, - 2179, 2182, 2183, 2184, 2152, 2150, 2163, 2167, 2169, 2171, - 2177, 2180, 2153, 2151, 2164, 2168, 2170, 2172, 2178, 2181, - 2139, 2143, 2147, 2156, 2174, 2154, 2173, 2148, 2160, 2165, - 2176, 2149, 2141, 1959, 1962, 1949, 1950, 1952, 1954, 1960, - 1967, 1973, 1951, 1972, 1971, 0, 1947, 1948, 1953, 1964, - 1968, 1956, 1957, 1958, 1963, 1974, 2015, 2014, 2013, 2058, - 1985, 2057, 0, 0, 0, 0, 0, 1808, 1864, 1865, - 2185, 1357, 1358, 1359, 1360, 0, 0, 0, 0, 0, - 0, 0, 290, 291, 1486, 1487, 44, 1152, 1608, 1437, - 1437, 1437, 1437, 1437, 1437, 1091, 1092, 1093, 1094, 1095, - 1121, 1122, 1128, 1129, 2072, 2073, 2074, 2075, 1902, 2224, - 1911, 1912, 2054, 2055, 1924, 1925, 2256, 2257, -2, -2, - -2, 232, 233, 234, 235, 236, 237, 238, 239, 0, - 1863, 2199, 2200, 228, 0, 0, 295, 292, 293, 294, - 1135, 1136, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 297, 298, 2285, 0, 862, 0, - 0, 0, 0, 0, 0, 1650, 1651, 1511, 0, 1503, - 1502, 63, 0, 889, -2, 0, 0, 0, 0, 47, - 0, 52, 950, 892, 77, 76, 1551, 1554, 0, 0, - 0, 59, 1512, 67, 69, 1513, 0, 894, 895, 0, - 926, 930, 0, 0, 0, 1628, 1627, 1627, 102, 0, - 0, 103, 123, 124, 125, 0, 0, 109, 110, 1614, - 1615, 43, 0, 0, 177, 178, 0, 1109, 428, 0, - 173, 0, 421, 360, 0, 1529, 0, 0, 0, 0, - 0, 1625, 0, 1622, 154, 155, 162, 163, 164, 401, - 401, 401, 575, 0, 0, 165, 165, 533, 534, 535, - 0, 0, -2, 426, 0, 513, 0, 0, 415, 415, - 419, 417, 418, 0, 0, 0, 0, 0, 0, 0, - 0, 552, 0, 553, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 670, 0, 402, 0, 573, 574, 464, - 0, 0, 0, 0, 0, 0, 0, 0, 1630, 1631, - 0, 550, 551, 0, 0, 0, 401, 401, 0, 0, - 0, 0, 401, 401, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 153, 1542, 0, 0, 0, -2, 0, 714, - 0, 0, 0, 1623, 1623, 0, 721, 0, 0, 0, - 726, 0, 0, 727, 0, 790, 790, 788, 789, 729, - 730, 731, 732, 793, 0, 0, 410, 411, 412, 790, - 793, 0, 793, 793, 793, 793, 790, 790, 790, 793, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2286, - 796, 793, 0, 760, 0, 761, 762, 763, 764, 767, - 768, 770, 2287, 2288, 1640, 1641, 1652, 1653, 1654, 1655, - 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, + 39, 70, 72, 73, 892, 892, 892, 0, 892, 0, + 0, 892, -2, -2, 892, 1653, 0, 892, 0, 887, + 0, -2, 807, 813, 0, 822, -2, 0, 0, 892, + 892, 2298, 2298, 887, 0, 0, 0, 0, 0, 892, + 892, 892, 892, 1658, 1505, 50, 892, 0, 88, 89, + 842, 843, 844, 65, 0, 2296, 85, 892, 893, 1, + 3, 71, 75, 0, 0, 0, 58, 1514, 0, 78, + 0, 0, 896, 0, 0, 1636, 892, 892, 0, 129, + 130, 0, 0, 0, -2, 133, -2, 162, 163, 164, + 0, 169, 612, 529, 581, 527, 566, -2, 515, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 532, 404, 404, 0, 0, -2, 515, 515, 515, + 1638, 0, 0, 0, 563, 466, 404, 404, 404, 0, + 404, 404, 404, 404, 0, 0, 404, 404, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 404, 404, 1532, 168, 1654, 1651, 1652, 1814, 1815, + 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, + 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, + 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, + 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, + 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, + 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, + 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, + 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, + 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, + 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, + 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, + 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, + 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, + 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, + 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, + 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, + 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, + 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, + 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, + 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, + 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, + 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, + 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, + 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, + 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, + 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, + 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, + 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, + 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, + 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, + 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, + 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, + 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, + 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, + 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, + 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, + 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, + 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, + 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, + 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, + 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, + 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, + 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, + 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, + 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, + 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, + 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, + 0, 1630, 0, 725, 996, 0, 888, 889, 0, 796, + 796, 0, 796, 796, 796, 796, 0, 0, 0, 739, + 0, 0, 0, 0, 793, 0, 755, 756, 0, 793, + 0, 762, 799, 0, 0, 769, 796, 796, 772, 2299, + 0, 2299, 2299, 0, 0, 1621, 0, 790, 788, 802, + 803, 42, 806, 809, 810, 811, 812, 815, 0, 826, + 829, 1647, 1648, 0, 831, 836, 855, 856, 0, 45, + 1156, 0, 1020, 0, 1031, -2, 1042, 1059, 1060, 1061, + 1062, 1063, 1065, 1066, 1067, 0, 0, 0, 0, 1072, + 1073, 0, 0, 0, 0, 0, 1136, 0, 0, 0, + 0, 2018, 1476, 0, 0, 1438, 1438, 1172, 1438, 1438, + 1440, 1440, 1440, 1867, 2010, 2019, 2200, 1828, 1834, 1835, + 1836, 2146, 2147, 2148, 2149, 2242, 2243, 2247, 1931, 1823, + 2214, 2215, 0, 2295, 1970, 1978, 1979, 1955, 1964, 2003, + 2108, 2226, 1846, 1998, 2070, 1928, 1950, 1951, 2089, 2090, + 1974, 1975, 1954, 2152, 2154, 2170, 2171, 2156, 2158, 2167, + 2173, 2178, 2157, 2169, 2174, 2187, 2191, 2194, 2195, 2196, + 2164, 2162, 2175, 2179, 2181, 2183, 2189, 2192, 2165, 2163, + 2176, 2180, 2182, 2184, 2190, 2193, 2151, 2155, 2159, 2168, + 2186, 2166, 2185, 2160, 2172, 2177, 2188, 2161, 2153, 1968, + 1971, 1958, 1959, 1961, 1963, 1969, 1976, 1982, 1960, 1981, + 1980, 0, 1956, 1957, 1962, 1973, 1977, 1965, 1966, 1967, + 1972, 1983, 2025, 2024, 2023, 2069, 1994, 2068, 0, 0, + 0, 0, 0, 1817, 1873, 1874, 2197, 1360, 1361, 1362, + 1363, 0, 0, 0, 0, 0, 0, 0, 293, 294, + 1489, 1490, 44, 1155, 1617, 1440, 1440, 1440, 1440, 1440, + 1440, 1094, 1095, 1096, 1097, 1098, 1124, 1125, 1131, 1132, + 2084, 2085, 2086, 2087, 1911, 2237, 1920, 1921, 2065, 2066, + 1933, 1934, 2269, 2270, -2, -2, -2, 235, 236, 237, + 238, 239, 240, 241, 242, 0, 1872, 2212, 2213, 231, + 0, 1615, 1616, 298, 295, 296, 297, 1138, 1139, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 0, 300, 301, 2298, 0, 865, 0, 0, 0, + 0, 0, 0, 1659, 1660, 1514, 0, 1506, 1505, 63, + 0, 892, -2, 0, 0, 0, 0, 47, 0, 52, + 953, 0, 895, 77, 76, 1554, 1557, 0, 0, 0, + 59, 1515, 67, 69, 1516, 0, 897, 898, 0, 929, + 933, 0, 0, 0, 1637, 1636, 1636, 105, 0, 0, + 106, 126, 127, 128, 0, 0, 112, 113, 1623, 1624, + 43, 0, 0, 180, 181, 0, 1112, 431, 0, 176, + 0, 424, 363, 0, 1532, 0, 0, 0, 0, 0, + 1634, 0, 1631, 157, 158, 165, 166, 167, 404, 404, + 404, 578, 0, 0, 168, 168, 536, 537, 538, 0, + 0, -2, 429, 0, 516, 0, 0, 418, 418, 422, + 420, 421, 0, 0, 0, 0, 0, 0, 0, 0, + 555, 0, 556, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 673, 0, 405, 0, 576, 577, 467, 0, + 0, 0, 0, 0, 0, 0, 0, 1639, 1640, 0, + 553, 554, 0, 0, 0, 404, 404, 0, 0, 0, + 0, 404, 404, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 156, 1545, 0, 0, 0, -2, 0, 717, 0, + 0, 0, 1632, 1632, 0, 724, 0, 0, 0, 729, + 0, 0, 730, 0, 793, 793, 791, 792, 732, 733, + 734, 735, 796, 0, 0, 413, 414, 415, 793, 796, + 0, 796, 796, 796, 796, 793, 793, 793, 796, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2299, 799, + 796, 0, 763, 0, 764, 765, 766, 767, 770, 771, + 773, 2300, 2301, 1649, 1650, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, @@ -9611,288 +9589,290 @@ var yyDef = [...]int{ 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, - 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 2286, - 2286, 774, 778, 782, 780, 1613, 805, 811, 813, 814, - 0, 0, 824, 827, 846, 49, 1910, 832, 49, 834, - 835, 836, 837, 838, 864, 865, 870, 0, 0, 0, - 0, 876, 877, 878, 0, 0, 881, 882, 883, 0, - 0, 0, 0, 0, 1015, 0, 0, 1141, 1142, 1143, - 1144, 1145, 1146, 1147, 1148, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1040, 1041, 0, 0, 0, 1065, 1066, - 1067, 1068, 1071, 0, 1082, 0, 1084, 1482, -2, 0, - 0, 0, 1076, 1077, 0, 0, 0, 1633, 1633, 0, - 0, 0, 1474, 0, 0, 1167, 0, 1168, 1170, 1171, - 1172, 0, 1173, 1174, 899, 899, 899, 899, 899, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 899, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1633, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1633, 0, - 0, 1633, 1633, 0, 0, 220, 221, 222, 223, 224, - 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 240, 241, 242, 243, - 244, 299, 245, 246, 247, 1152, 0, 0, 0, 46, - 854, 855, 0, 976, 1633, 0, 0, 905, 0, 1648, - 57, 66, 68, 1511, 61, 1511, 0, 909, 0, 0, - -2, -2, 910, 911, 915, 916, 917, 918, 919, 920, - 921, 922, 923, 54, 2284, 55, 0, 74, 0, 48, - 0, 0, 1552, 0, 1555, 0, 0, 0, 374, 1559, - 0, 0, 1504, 1505, 1508, 0, 927, 2006, 931, 0, - 933, 934, 0, 0, 100, 0, 992, 0, 0, 0, - 111, 0, 113, 114, 0, 0, 0, 385, 1616, 1617, - 1618, -2, 408, 0, 385, 369, 307, 308, 309, 360, - 311, 360, 360, 360, 360, 374, 374, 374, 374, 342, - 343, 344, 345, 346, 0, 360, 0, 328, 360, 360, - 360, 360, 350, 351, 352, 353, 354, 355, 356, 357, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 362, - 362, 362, 362, 362, 366, 366, 0, 1110, 0, 389, - 0, 1508, 0, 0, 1542, 1625, 1635, 0, 0, 0, - 0, 0, 132, 0, 0, 0, 576, 620, 527, 564, - 577, 0, 530, 531, -2, 0, 0, 512, 0, 514, - 0, 409, 0, -2, 0, 419, 0, 415, 419, 416, - 419, 407, 420, 554, 555, 556, 0, 558, 559, 650, - 962, 0, 0, 0, 0, 0, 656, 657, 658, 0, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 565, 566, 567, 568, 569, 570, 571, 572, 0, 0, - 0, 0, 514, 0, 561, 0, 0, 465, 466, 467, - 0, 0, 470, 471, 472, 473, 0, 0, 476, 477, - 478, 979, 980, 479, 480, 505, 506, 507, 481, 482, - 483, 484, 485, 486, 487, 499, 500, 501, 502, 503, - 504, 488, 489, 490, 491, 492, 493, 496, 0, 147, - 1533, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1623, 0, - 0, 0, 0, 908, 994, 1646, 1647, 723, 0, 0, - 794, 795, 0, 413, 414, 793, 793, 733, 775, 0, - 793, 737, 776, 738, 740, 739, 741, 754, 755, 793, - 744, 791, 792, 745, 746, 747, 748, 749, 750, 751, - 771, 756, 757, 758, 797, 0, 801, 802, 772, 773, - 0, 783, 0, 0, 0, 817, 818, 0, 825, 849, - 847, 848, 850, 842, 843, 844, 845, 0, 851, 0, - 0, 867, 96, 872, 873, 874, 875, 887, 880, 1154, - 1012, 1013, 1014, 0, 1016, 1022, 0, 1137, 1139, 1020, - 1021, 1024, 0, 0, 0, 1018, 1029, 1149, 1150, 1151, - 0, 0, 0, 0, 0, 1033, 1037, 1042, 1043, 1044, - 1045, 1046, 0, 1047, 0, 1050, 1051, 1052, 1053, 1054, - 1055, 1061, 1450, 1451, 1452, 1080, 300, 301, 0, 1081, - 0, 0, 0, 0, 0, 0, 0, 0, 1397, 1398, - 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, - 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1153, 0, - 1634, 0, 0, 0, 1480, 1477, 0, 0, 0, 1436, - 1438, 0, 0, 0, 900, 901, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1417, 1418, 1419, 1420, 1421, 1422, 1423, - 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, - 1434, 0, 0, 1453, 0, 0, 0, 0, 0, 0, - 0, 1473, 0, 1086, 1087, 1088, 0, 0, 0, 0, - 0, 0, 1215, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 142, 143, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1361, 1362, - 1363, 1364, 41, 0, 0, 0, 0, 0, 0, 0, - 1484, 0, -2, -2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1386, 0, 0, - 0, 0, 0, 0, 1606, 0, 0, 857, 858, 860, - 0, 996, 0, 977, 0, 0, 863, 0, 904, 0, - 907, 60, 62, 913, 914, 0, 935, 924, 912, 56, - 51, 0, 0, 954, 1553, 1556, 1557, 374, 1579, 0, - 383, 383, 380, 1514, 1515, 0, 1507, 1509, 1510, 79, - 932, 928, 0, 1010, 0, 0, 991, 0, 938, 940, - 941, 942, 974, 0, 945, 946, 0, 0, 0, 0, - 0, 98, 993, 104, 0, 112, 0, 0, 117, 118, - 105, 106, 107, 108, 0, 609, -2, 460, 179, 181, - 182, 183, 174, -2, 372, 370, 371, 310, 374, 374, - 336, 337, 338, 339, 340, 341, 0, 348, 0, 329, - 330, 331, 332, 321, 0, 322, 323, 324, 364, 0, - 325, 326, 0, 327, 427, 0, 1516, 390, 391, 393, - 401, 0, 396, 397, 0, 401, 401, 0, 422, 423, - 0, 1508, 1533, 0, 0, 1636, 1635, 1635, 1635, 152, - 0, 167, 168, 169, 170, 171, 172, 645, 0, 0, - 621, 643, 644, 165, 0, 0, 175, 516, 515, 0, - 677, 0, 425, 0, 0, 419, 419, 404, 405, 557, - 0, 0, 652, 653, 654, 655, 0, 0, 0, 543, - 454, 0, 544, 545, 514, 516, 0, 0, 385, 468, - 469, 474, 475, 494, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 592, 593, 595, 598, - 600, 518, 604, 606, 0, 594, 597, 599, 601, 518, - 605, 607, 1530, 1531, 1532, 0, 0, 715, 0, 0, - 451, 94, 1624, 720, 724, 725, 790, 743, 777, 790, - 735, 742, 765, 779, 781, 815, 816, 821, 829, 830, - 831, 871, 0, 0, 0, 0, 879, 0, 0, 1023, - 1138, 1140, 1025, 1026, 1027, 1030, 0, 1034, 1038, 0, - 0, 0, 0, 0, 1085, 1083, 1484, 0, 0, 0, - 1134, 0, 0, 1157, 1158, 0, 0, 0, 0, 1478, - 0, 0, 1165, 0, 1439, 1115, 0, 0, 0, 0, - 0, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, - 1115, 1502, 1192, 0, 0, 0, 0, 0, 1197, 1198, - 1199, 1115, 0, 1202, 1203, 0, 1205, 0, 1206, 0, - 0, 0, 0, 1213, 1214, 1216, 0, 0, 1219, 1220, - 0, 1222, 0, 1224, 1225, 1226, 1227, 1228, 1229, 0, - 1231, 0, 1233, 1234, 1235, 0, 1237, 0, 1239, 1240, - 0, 1242, 0, 1244, 0, 1247, 0, 1250, 0, 1253, - 0, 1256, 0, 1259, 0, 1262, 0, 1265, 0, 1268, - 0, 1271, 0, 1274, 0, 1277, 0, 1280, 0, 1283, - 0, 1286, 0, 1289, 0, 1292, 1293, 1294, 0, 1296, - 0, 1298, 0, 1301, 1302, 0, 1304, 0, 1307, 0, - 1310, 0, 0, 1311, 0, 0, 0, 1315, 0, 0, - 0, 0, 1324, 1325, 1326, 1327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1338, 1339, 1340, 1341, - 1342, 1343, 0, 1345, 0, 1116, 0, 0, 1116, 0, - 0, 0, 0, 0, 1155, 1633, 0, 1440, 1441, 1442, - 1443, 1444, 0, 0, 0, 0, 0, 0, 1384, 1385, - 1387, 0, 0, 1390, 0, 1392, 0, 1607, 856, 859, - 861, 948, 997, 998, 0, 0, 0, 0, 978, 1632, - 902, 903, 906, 956, 0, 1488, 0, 0, 935, 1010, - 0, 936, 0, 53, 951, 0, 1561, 1560, 1573, 1586, - 383, 383, 377, 378, 384, 379, 381, 382, 1506, 0, - 1511, 0, 1600, 0, 0, 1589, 0, 0, 0, 0, - 0, 0, 0, 0, 981, 0, 0, 984, 0, 0, - 0, 0, 975, 946, 0, 947, 0, -2, 0, 0, - 92, 93, 0, 0, 0, 115, 116, 0, 0, 122, - 386, 387, 156, 165, 462, 180, 435, 0, 0, 306, - 373, 333, 334, 335, 0, 358, 0, 0, 0, 0, - 456, 128, 1520, 1519, 401, 401, 392, 0, 395, 0, - 0, 0, 1637, 361, 424, 0, 146, 0, 0, 0, - 0, 1626, 615, 0, 0, 622, 0, 0, 0, 525, - 0, 536, 537, 0, 649, -2, 711, 389, 0, 403, - 406, 963, 0, 0, 538, 0, 541, 542, 455, 516, - 547, 548, 562, 549, 497, 498, 495, 0, 0, 1543, - 1544, 1549, 1547, 1548, 133, 583, 585, 589, 584, 588, - 0, 0, 0, 520, 0, 608, 520, 581, 0, 451, - 1516, 0, 719, 452, 453, 793, 793, 866, 97, 0, - 869, 0, 0, 0, 0, 1031, 1035, 1048, 1049, 1445, - 1471, 360, 360, 1458, 360, 366, 1461, 360, 1463, 360, - 1466, 360, 1469, 1470, 0, 0, 1078, 0, 0, 0, - 0, 1164, 1481, 0, 0, 1175, 1114, 1115, 1115, 1115, - 1115, 1115, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, - 1189, 1190, 1475, 0, 0, 0, 1196, 0, 0, 1200, + 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, + 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 2299, 2299, + 777, 781, 785, 783, 1622, 808, 814, 816, 817, 0, + 0, 827, 830, 849, 49, 1919, 835, 49, 837, 838, + 839, 840, 841, 867, 868, 873, 0, 0, 0, 0, + 879, 880, 881, 0, 0, 884, 885, 886, 0, 0, + 0, 0, 0, 1018, 0, 0, 1144, 1145, 1146, 1147, + 1148, 1149, 1150, 1151, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1043, 1044, 0, 0, 0, 1068, 1069, 1070, + 1071, 1074, 0, 1085, 0, 1087, 1485, -2, 0, 0, + 0, 1079, 1080, 0, 0, 0, 1642, 1642, 0, 0, + 0, 1477, 0, 0, 1170, 0, 1171, 1173, 1174, 1175, + 0, 1176, 1177, 902, 902, 902, 902, 902, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 902, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, - 145, 0, 0, 0, 0, 0, 0, 1395, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1109, - 1113, 0, 1117, 1118, 0, 0, 1347, 0, 0, 1365, - 0, 0, 0, 0, 0, 0, 0, 1485, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 999, 1006, - 0, 1006, 0, 1006, 0, 0, 0, 1619, 1620, 1489, - 1490, 1010, 1491, 925, 937, 955, 1579, 0, 1572, 0, - -2, 1581, 0, 0, 0, 1587, 375, 376, 929, 80, - 1011, 83, 0, 1600, 1609, 0, 1597, 1602, 1604, 0, - 0, 0, 1593, 0, 1010, 939, 970, 972, 0, 967, - 982, 983, 985, 0, 987, 0, 989, 990, 950, 944, - 0, 100, 0, 1010, 1010, 99, 0, 995, 119, 120, - 121, 461, 184, 189, 0, 0, 0, 194, 0, 196, - 0, 0, 0, 201, 202, 401, 401, 436, 0, 303, - 305, 0, 0, 187, 374, 0, 374, 0, 365, 367, - 0, 437, 457, 1517, 1518, 0, 0, 394, 398, 399, - 400, 0, 148, 0, 0, 0, 618, 0, 646, 0, - 0, 0, 0, 0, 0, 176, 517, 678, 679, 680, - 681, 682, 683, 684, 685, 686, 0, 401, 0, 0, - 0, 401, 401, 401, 0, 703, 388, 0, 0, 674, - 671, 539, 0, 218, 219, 226, 227, 229, 0, 0, - 0, 0, 0, 546, 950, 1534, 1535, 1536, 0, 1546, - 1550, 136, 0, 0, 0, 0, 591, 596, 602, 0, - 519, 603, 716, 717, 718, 95, 728, 734, 868, 888, - 1019, 1032, 1036, 0, 0, 0, 0, 1472, 1456, 374, - 1459, 1460, 1462, 1464, 1465, 1467, 1468, 1074, 1075, 1079, - 0, 1161, 0, 1163, 0, 1479, 0, 1176, 1177, 1178, - 1179, 1180, 1511, 0, 0, 0, 1195, 0, 0, 1115, - 0, 1208, 1207, 1209, 0, 1211, 1212, 1217, 1218, 1221, - 1223, 1230, 1232, 1236, 1238, 1241, 1243, 1245, 0, 1248, - 0, 1251, 0, 1254, 0, 1257, 0, 1260, 0, 1263, - 0, 1266, 0, 1269, 0, 1272, 0, 1275, 0, 1278, - 0, 1281, 0, 1284, 0, 1287, 0, 1290, 0, 1295, - 1297, 0, 1300, 1303, 1305, 0, 1308, 0, 1312, 0, - 1314, 1316, 1317, 0, 0, 0, 1328, 1329, 1330, 1331, - 1332, 1333, 1334, 1335, 1336, 1337, 1344, 0, 1107, 1346, - 1119, 1120, 1125, 1349, 0, 0, 0, 1352, 0, 0, - 0, 1356, 1156, 1367, 0, 1372, 0, 0, 1378, 0, - 1382, 0, 1388, 1389, 1391, 1393, 0, 0, 0, 0, - 0, 0, 0, 976, 957, 64, 1491, 1495, 0, 1566, - 1564, 1564, 1574, 1575, 0, 0, 1582, 0, 0, 0, - 0, 84, 0, 0, 1588, 0, 0, 1605, 0, 0, - 0, 0, 101, 1502, 964, 971, 0, 0, 965, 0, - 966, 986, 988, 943, 0, 1010, 1010, 90, 91, 0, - 190, 0, 192, 0, 195, 197, 198, 199, 205, 206, - 207, 200, 0, 0, 302, 304, 0, 0, 347, 359, - 349, 0, 0, 1521, 1522, 1523, 1524, 1525, 1526, 1527, - 1528, 950, 149, 150, 151, 610, 0, 620, 0, 952, - 0, 613, 0, 528, 0, 0, 0, 401, 401, 401, - 0, 0, 0, 0, 688, 0, 0, 651, 0, 659, - 0, 0, 0, 230, 231, 0, 1545, 582, 0, 134, - 135, 0, 0, 587, 521, 522, 1072, 0, 0, 0, - 1073, 1457, 0, 0, 0, 0, 0, 1476, 0, 0, - 0, 0, 1201, 1204, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1320, 0, 0, 0, - 640, 641, 0, 1396, 1112, 1502, 0, 1116, 1126, 1127, - 0, 1116, 1366, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1007, 0, 0, 0, 958, 959, - 0, 0, 0, 996, 1495, 1500, 0, 0, 1569, 0, - 1562, 1565, 1563, 1576, 0, 0, 1583, 0, 1585, 0, - 1610, 1611, 1603, 1598, 0, 1592, 1595, 1597, 1594, 1511, - 968, 0, 973, 0, 1502, 89, 0, 193, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 204, 0, 0, 363, 368, 0, 0, 0, 611, 0, - 953, 623, 614, 0, 701, 0, 705, 0, 0, 0, - 708, 709, 710, 687, 0, 691, 429, 675, 672, 673, - 540, 0, 137, 138, 0, 0, 0, 1446, 0, 1449, - 1159, 1162, 1160, 0, 1191, 1193, 1194, 1454, 1455, 1210, - 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, - 1276, 1279, 1282, 1285, 1288, 1291, 1299, 1306, 1309, 1313, - 1318, 0, 1321, 0, 0, 1322, 0, 642, 1103, 0, - 0, 1123, 1124, 0, 1351, 1353, 1354, 1355, 1368, 0, - 1373, 1374, 0, 1379, 0, 1383, 1394, 0, 1001, 1008, - 1009, 0, 1004, 0, 1005, 0, 949, 1500, 82, 1501, - 1498, 0, 1496, 1493, 1558, 0, 1567, 1568, 1577, 1578, - 1584, 0, 0, 1597, 0, 1591, 87, 0, 0, 0, - 1511, 191, 0, 210, 0, 619, 0, 622, 612, 699, - 700, 0, 712, 704, 706, 707, 689, -2, 1537, 0, - 0, 0, 590, 1447, 0, 0, 1323, 0, 638, 639, - 1111, 1104, 0, 1089, 1090, 1108, 1348, 1350, 0, 0, - 0, 1000, 960, 961, 1002, 1003, 81, 0, 1497, 1131, - 0, 1492, 0, 1570, 1571, 1601, 0, 1590, 1596, 969, - 976, 0, 88, 442, 435, 1537, 0, 0, 0, 692, - 693, 694, 695, 696, 697, 698, 579, 1539, 139, 140, - 0, 509, 510, 511, 133, 0, 1166, 1319, 1105, 0, - 0, 0, 0, 0, 1369, 0, 1375, 0, 1380, 0, - 1499, 0, 0, 1494, 1599, 624, 0, 626, 0, -2, - 430, 443, 0, 185, 211, 212, 0, 0, 215, 216, - 217, 208, 209, 129, 0, 0, 713, 0, 1540, 1541, - 0, 136, 0, 0, 1096, 1097, 1098, 1099, 1101, 0, - 0, 0, 0, 1132, 1109, 625, 0, 0, 385, 0, - 635, 431, 432, 0, 438, 439, 440, 441, 213, 214, - 647, 0, 0, 508, 586, 1448, 0, 0, 1370, 0, - 1376, 0, 1381, 0, 627, 628, 636, 0, 433, 0, - 434, 0, 0, 0, 616, 0, 647, 1538, 1106, 1100, - 1102, 0, 0, 1130, 0, 637, 633, 444, 446, 447, - 0, 0, 445, 648, 617, 1371, 1377, 0, 448, 449, - 450, 629, 630, 631, 632, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1642, 0, 0, + 1642, 1642, 0, 0, 223, 224, 225, 226, 227, 228, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 299, 243, 244, 245, 246, 247, + 302, 248, 249, 250, 1155, 0, 0, 892, 0, 46, + 857, 858, 0, 979, 1642, 0, 0, 908, 0, 1657, + 57, 66, 68, 1514, 61, 1514, 0, 912, 0, 0, + -2, -2, 913, 914, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 54, 2297, 55, 0, 74, 0, 48, + 0, 0, 79, 80, 1605, 1609, 0, 1555, 0, 1558, + 0, 0, 0, 377, 1562, 0, 0, 1507, 1508, 1511, + 0, 930, 2016, 934, 0, 936, 937, 0, 0, 103, + 0, 995, 0, 0, 0, 114, 0, 116, 117, 0, + 0, 0, 388, 1625, 1626, 1627, -2, 411, 0, 388, + 372, 310, 311, 312, 363, 314, 363, 363, 363, 363, + 377, 377, 377, 377, 345, 346, 347, 348, 349, 0, + 363, 0, 331, 363, 363, 363, 363, 353, 354, 355, + 356, 357, 358, 359, 360, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 365, 365, 365, 365, 365, 369, + 369, 0, 1113, 0, 392, 0, 1511, 0, 0, 1545, + 1634, 1644, 0, 0, 0, 0, 0, 135, 0, 0, + 0, 579, 623, 530, 567, 580, 0, 533, 534, -2, + 0, 0, 515, 0, 517, 0, 412, 0, -2, 0, + 422, 0, 418, 422, 419, 422, 410, 423, 557, 558, + 559, 0, 561, 562, 653, 965, 0, 0, 0, 0, + 0, 659, 660, 661, 0, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 568, 569, 570, 571, 572, + 573, 574, 575, 0, 0, 0, 0, 517, 0, 564, + 0, 0, 468, 469, 470, 0, 0, 473, 474, 475, + 476, 0, 0, 479, 480, 481, 982, 983, 482, 483, + 508, 509, 510, 484, 485, 486, 487, 488, 489, 490, + 502, 503, 504, 505, 506, 507, 491, 492, 493, 494, + 495, 496, 499, 0, 150, 1536, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1632, 0, 0, 0, 0, 911, 997, + 1655, 1656, 726, 0, 0, 797, 798, 0, 416, 417, + 796, 796, 736, 778, 0, 796, 740, 779, 741, 743, + 742, 744, 757, 758, 796, 747, 794, 795, 748, 749, + 750, 751, 752, 753, 754, 774, 759, 760, 761, 800, + 0, 804, 805, 775, 776, 0, 786, 0, 0, 0, + 820, 821, 0, 828, 852, 850, 851, 853, 845, 846, + 847, 848, 0, 854, 0, 0, 870, 99, 875, 876, + 877, 878, 890, 883, 1157, 1015, 1016, 1017, 0, 1019, + 1025, 0, 1140, 1142, 1023, 1024, 1027, 0, 0, 0, + 1021, 1032, 1152, 1153, 1154, 0, 0, 0, 0, 0, + 1036, 1040, 1045, 1046, 1047, 1048, 1049, 0, 1050, 0, + 1053, 1054, 1055, 1056, 1057, 1058, 1064, 1453, 1454, 1455, + 1083, 303, 304, 0, 1084, 0, 0, 0, 0, 0, + 0, 0, 0, 1400, 1401, 1402, 1403, 1404, 1405, 1406, + 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, + 1417, 1418, 1419, 1156, 0, 1643, 0, 0, 0, 1483, + 1480, 0, 0, 0, 1439, 1441, 0, 0, 0, 903, + 904, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1420, 1421, + 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, + 1432, 1433, 1434, 1435, 1436, 1437, 0, 0, 1456, 0, + 0, 0, 0, 0, 0, 0, 1476, 0, 1089, 1090, + 1091, 0, 0, 0, 0, 0, 0, 1218, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, + 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1364, 1365, 1366, 1367, 41, 0, 0, + 0, 0, 0, 0, 0, 1487, 0, -2, -2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1389, 0, 0, 0, 0, 0, 0, 1613, + 0, 0, 860, 861, 863, 0, 999, 0, 980, 0, + 0, 866, 0, 907, 0, 910, 60, 62, 916, 917, + 0, 938, 927, 915, 56, 51, 0, 0, 957, 0, + 0, 1556, 1559, 1560, 377, 1582, 0, 386, 386, 383, + 1517, 1518, 0, 1510, 1512, 1513, 81, 935, 931, 0, + 1013, 0, 0, 994, 0, 941, 943, 944, 945, 977, + 0, 948, 949, 0, 0, 0, 0, 0, 101, 996, + 107, 0, 115, 0, 0, 120, 121, 108, 109, 110, + 111, 0, 612, -2, 463, 182, 184, 185, 186, 177, + -2, 375, 373, 374, 313, 377, 377, 339, 340, 341, + 342, 343, 344, 0, 351, 0, 332, 333, 334, 335, + 324, 0, 325, 326, 327, 367, 0, 328, 329, 0, + 330, 430, 0, 1519, 393, 394, 396, 404, 0, 399, + 400, 0, 404, 404, 0, 425, 426, 0, 1511, 1536, + 0, 0, 1645, 1644, 1644, 1644, 155, 0, 170, 171, + 172, 173, 174, 175, 648, 0, 0, 624, 646, 647, + 168, 0, 0, 178, 519, 518, 0, 680, 0, 428, + 0, 0, 422, 422, 407, 408, 560, 0, 0, 655, + 656, 657, 658, 0, 0, 0, 546, 457, 0, 547, + 548, 517, 519, 0, 0, 388, 471, 472, 477, 478, + 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 595, 596, 598, 601, 603, 521, 607, + 609, 0, 597, 600, 602, 604, 521, 608, 610, 1533, + 1534, 1535, 0, 0, 718, 0, 0, 454, 97, 1633, + 723, 727, 728, 793, 746, 780, 793, 738, 745, 768, + 782, 784, 818, 819, 824, 832, 833, 834, 874, 0, + 0, 0, 0, 882, 0, 0, 1026, 1141, 1143, 1028, + 1029, 1030, 1033, 0, 1037, 1041, 0, 0, 0, 0, + 0, 1088, 1086, 1487, 0, 0, 0, 1137, 0, 0, + 1160, 1161, 0, 0, 0, 0, 1481, 0, 0, 1168, + 0, 1442, 1118, 0, 0, 0, 0, 0, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1505, 1195, + 0, 0, 0, 0, 0, 1200, 1201, 1202, 1118, 0, + 1205, 1206, 0, 1208, 0, 1209, 0, 0, 0, 0, + 1216, 1217, 1219, 0, 0, 1222, 1223, 0, 1225, 0, + 1227, 1228, 1229, 1230, 1231, 1232, 0, 1234, 0, 1236, + 1237, 1238, 0, 1240, 0, 1242, 1243, 0, 1245, 0, + 1247, 0, 1250, 0, 1253, 0, 1256, 0, 1259, 0, + 1262, 0, 1265, 0, 1268, 0, 1271, 0, 1274, 0, + 1277, 0, 1280, 0, 1283, 0, 1286, 0, 1289, 0, + 1292, 0, 1295, 1296, 1297, 0, 1299, 0, 1301, 0, + 1304, 1305, 0, 1307, 0, 1310, 0, 1313, 0, 0, + 1314, 0, 0, 0, 1318, 0, 0, 0, 0, 1327, + 1328, 1329, 1330, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1341, 1342, 1343, 1344, 1345, 1346, 0, + 1348, 0, 1119, 0, 0, 1119, 0, 0, 0, 0, + 0, 1158, 1642, 0, 1443, 1444, 1445, 1446, 1447, 0, + 0, 0, 0, 0, 0, 1387, 1388, 1390, 0, 0, + 1393, 0, 1395, 0, 1614, 859, 862, 864, 951, 1000, + 1001, 0, 0, 0, 0, 981, 1641, 905, 906, 909, + 959, 0, 1491, 0, 0, 938, 1013, 0, 939, 0, + 53, 954, 0, 1606, 1610, 1564, 1563, 1576, 1589, 386, + 386, 380, 381, 387, 382, 384, 385, 1509, 0, 1514, + 0, 1603, 0, 892, 1592, 0, 0, 0, 0, 0, + 0, 0, 0, 984, 0, 0, 987, 0, 0, 0, + 0, 978, 949, 0, 950, 0, -2, 0, 0, 95, + 96, 0, 0, 0, 118, 119, 0, 0, 125, 389, + 390, 159, 168, 465, 183, 438, 0, 0, 309, 376, + 336, 337, 338, 0, 361, 0, 0, 0, 0, 459, + 131, 1523, 1522, 404, 404, 395, 0, 398, 0, 0, + 0, 1646, 364, 427, 0, 149, 0, 0, 0, 0, + 1635, 618, 0, 0, 625, 0, 0, 0, 528, 0, + 539, 540, 0, 652, -2, 714, 392, 0, 406, 409, + 966, 0, 0, 541, 0, 544, 545, 458, 519, 550, + 551, 565, 552, 500, 501, 498, 0, 0, 1546, 1547, + 1552, 1550, 1551, 136, 586, 588, 592, 587, 591, 0, + 0, 0, 523, 0, 611, 523, 584, 0, 454, 1519, + 0, 722, 455, 456, 796, 796, 869, 100, 0, 872, + 0, 0, 0, 0, 1034, 1038, 1051, 1052, 1448, 1474, + 363, 363, 1461, 363, 369, 1464, 363, 1466, 363, 1469, + 363, 1472, 1473, 0, 0, 1081, 0, 0, 0, 0, + 1167, 1484, 0, 0, 1178, 1117, 1118, 1118, 1118, 1118, + 1118, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, + 1193, 1478, 0, 0, 0, 1199, 0, 0, 1203, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 147, 148, + 0, 0, 0, 0, 0, 0, 1398, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1112, 1116, + 0, 1120, 1121, 0, 0, 1350, 0, 0, 1368, 0, + 0, 0, 0, 0, 0, 0, 1488, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1002, 1009, 0, + 1009, 0, 1009, 0, 0, 0, 1628, 1629, 1492, 1493, + 1013, 1494, 928, 940, 958, 1582, 0, 1575, 0, -2, + 1584, 0, 0, 0, 1590, 378, 379, 932, 82, 1014, + 86, 0, 1603, 1618, 0, 1600, 1607, 1611, 0, 0, + 0, 1596, 0, 1013, 942, 973, 975, 0, 970, 985, + 986, 988, 0, 990, 0, 992, 993, 953, 947, 0, + 103, 0, 1013, 1013, 102, 0, 998, 122, 123, 124, + 464, 187, 192, 0, 0, 0, 197, 0, 199, 0, + 0, 0, 204, 205, 404, 404, 439, 0, 306, 308, + 0, 0, 190, 377, 0, 377, 0, 368, 370, 0, + 440, 460, 1520, 1521, 0, 0, 397, 401, 402, 403, + 0, 151, 0, 0, 0, 621, 0, 649, 0, 0, + 0, 0, 0, 0, 179, 520, 681, 682, 683, 684, + 685, 686, 687, 688, 689, 0, 404, 0, 0, 0, + 404, 404, 404, 0, 706, 391, 0, 0, 677, 674, + 542, 0, 221, 222, 229, 230, 232, 0, 0, 0, + 0, 0, 549, 953, 1537, 1538, 1539, 0, 1549, 1553, + 139, 0, 0, 0, 0, 594, 599, 605, 0, 522, + 606, 719, 720, 721, 98, 731, 737, 871, 891, 1022, + 1035, 1039, 0, 0, 0, 0, 1475, 1459, 377, 1462, + 1463, 1465, 1467, 1468, 1470, 1471, 1077, 1078, 1082, 0, + 1164, 0, 1166, 0, 1482, 0, 1179, 1180, 1181, 1182, + 1183, 1514, 0, 0, 0, 1198, 0, 0, 1118, 0, + 1211, 1210, 1212, 0, 1214, 1215, 1220, 1221, 1224, 1226, + 1233, 1235, 1239, 1241, 1244, 1246, 1248, 0, 1251, 0, + 1254, 0, 1257, 0, 1260, 0, 1263, 0, 1266, 0, + 1269, 0, 1272, 0, 1275, 0, 1278, 0, 1281, 0, + 1284, 0, 1287, 0, 1290, 0, 1293, 0, 1298, 1300, + 0, 1303, 1306, 1308, 0, 1311, 0, 1315, 0, 1317, + 1319, 1320, 0, 0, 0, 1331, 1332, 1333, 1334, 1335, + 1336, 1337, 1338, 1339, 1340, 1347, 0, 1110, 1349, 1122, + 1123, 1128, 1352, 0, 0, 0, 1355, 0, 0, 0, + 1359, 1159, 1370, 0, 1375, 0, 0, 1381, 0, 1385, + 0, 1391, 1392, 1394, 1396, 0, 0, 0, 0, 0, + 0, 0, 979, 960, 64, 1494, 1498, 0, 1569, 1567, + 1567, 1577, 1578, 0, 0, 1585, 0, 0, 0, 0, + 87, 0, 0, 1591, 0, 0, 1612, 0, 0, 0, + 0, 104, 1505, 967, 974, 0, 0, 968, 0, 969, + 989, 991, 946, 0, 1013, 1013, 93, 94, 0, 193, + 0, 195, 0, 198, 200, 201, 202, 208, 209, 210, + 203, 0, 0, 305, 307, 0, 0, 350, 362, 352, + 0, 0, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, + 953, 152, 153, 154, 613, 0, 623, 0, 955, 0, + 616, 0, 531, 0, 0, 0, 404, 404, 404, 0, + 0, 0, 0, 691, 0, 0, 654, 0, 662, 0, + 0, 0, 233, 234, 0, 1548, 585, 0, 137, 138, + 0, 0, 590, 524, 525, 1075, 0, 0, 0, 1076, + 1460, 0, 0, 0, 0, 0, 1479, 0, 0, 0, + 0, 1204, 1207, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1323, 0, 0, 0, 643, + 644, 0, 1399, 1115, 1505, 0, 1119, 1129, 1130, 0, + 1119, 1369, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1010, 0, 0, 0, 961, 962, 0, + 0, 0, 999, 1498, 1503, 0, 0, 1572, 0, 1565, + 1568, 1566, 1579, 0, 0, 1586, 0, 1588, 0, 1619, + 1620, 1608, 1601, 892, 1595, 1598, 1600, 1597, 1514, 971, + 0, 976, 0, 1505, 92, 0, 196, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 206, 207, + 0, 0, 366, 371, 0, 0, 0, 614, 0, 956, + 626, 617, 0, 704, 0, 708, 0, 0, 0, 711, + 712, 713, 690, 0, 694, 432, 678, 675, 676, 543, + 0, 140, 141, 0, 0, 0, 1449, 0, 1452, 1162, + 1165, 1163, 0, 1194, 1196, 1197, 1457, 1458, 1213, 1249, + 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, + 1282, 1285, 1288, 1291, 1294, 1302, 1309, 1312, 1316, 1321, + 0, 1324, 0, 0, 1325, 0, 645, 1106, 0, 0, + 1126, 1127, 0, 1354, 1356, 1357, 1358, 1371, 0, 1376, + 1377, 0, 1382, 0, 1386, 1397, 0, 1004, 1011, 1012, + 0, 1007, 0, 1008, 0, 952, 1503, 84, 1504, 1501, + 0, 1499, 1496, 1561, 0, 1570, 1571, 1580, 1581, 1587, + 0, 0, 1600, 0, 1594, 90, 0, 0, 0, 1514, + 194, 0, 213, 0, 622, 0, 625, 615, 702, 703, + 0, 715, 707, 709, 710, 692, -2, 1540, 0, 0, + 0, 593, 1450, 0, 0, 1326, 0, 641, 642, 1114, + 1107, 0, 1092, 1093, 1111, 1351, 1353, 0, 0, 0, + 1003, 963, 964, 1005, 1006, 83, 0, 1500, 1134, 0, + 1495, 0, 1573, 1574, 1604, 0, 1593, 1599, 972, 979, + 0, 91, 445, 438, 1540, 0, 0, 0, 695, 696, + 697, 698, 699, 700, 701, 582, 1542, 142, 143, 0, + 512, 513, 514, 136, 0, 1169, 1322, 1108, 0, 0, + 0, 0, 0, 1372, 0, 1378, 0, 1383, 0, 1502, + 0, 0, 1497, 1602, 627, 0, 629, 0, -2, 433, + 446, 0, 188, 214, 215, 0, 0, 218, 219, 220, + 211, 212, 132, 0, 0, 716, 0, 1543, 1544, 0, + 139, 0, 0, 1099, 1100, 1101, 1102, 1104, 0, 0, + 0, 0, 1135, 1112, 628, 0, 0, 388, 0, 638, + 434, 435, 0, 441, 442, 443, 444, 216, 217, 650, + 0, 0, 511, 589, 1451, 0, 0, 1373, 0, 1379, + 0, 1384, 0, 630, 631, 639, 0, 436, 0, 437, + 0, 0, 0, 619, 0, 650, 1541, 1109, 1103, 1105, + 0, 0, 1133, 0, 640, 636, 447, 449, 450, 0, + 0, 448, 651, 620, 1374, 1380, 0, 451, 452, 453, + 632, 633, 634, 635, } var yyTok1 = [...]int{ @@ -9901,7 +9881,7 @@ var yyTok1 = [...]int{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 158, 3, 3, 3, 186, 178, 3, 95, 97, 183, 181, 96, 182, 236, 184, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 752, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 756, 166, 165, 167, 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, @@ -10036,7 +10016,8 @@ var yyTok3 = [...]int{ 58060, 735, 58061, 736, 58062, 737, 58063, 738, 58064, 739, 58065, 740, 58066, 741, 58067, 742, 58068, 743, 58069, 744, 58070, 745, 58071, 746, 58072, 747, 58073, 748, 58074, 749, - 58075, 750, 58076, 751, 0, + 58075, 750, 58076, 751, 58077, 752, 58078, 753, 58079, 754, + 58080, 755, 0, } var yyErrorMessages = [...]struct { @@ -10386,7 +10367,7 @@ yydefault: case 1: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:631 +//line sql.y:633 { stmt := yyDollar[2].statementUnion() // If the statement is empty and we have comments @@ -10400,46 +10381,46 @@ yydefault: } case 2: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:644 +//line sql.y:646 { } case 3: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:645 +//line sql.y:647 { } case 4: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:649 +//line sql.y:651 { - yyLOCAL = yyDollar[1].selStmtUnion() + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 40: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:688 +//line sql.y:690 { setParseTree(yylex, nil) } case 41: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:694 +//line sql.y:696 { yyLOCAL = NewVariableExpression(yyDollar[1].str, SingleAt) } yyVAL.union = yyLOCAL case 42: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:700 +//line sql.y:702 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } case 43: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:706 +//line sql.y:708 { yyLOCAL = NewVariableExpression(string(yyDollar[1].str), SingleAt) } @@ -10447,7 +10428,7 @@ yydefault: case 44: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:710 +//line sql.y:712 { yyLOCAL = NewVariableExpression(string(yyDollar[1].str), DoubleAt) } @@ -10455,7 +10436,7 @@ yydefault: case 45: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:716 +//line sql.y:718 { yyLOCAL = &OtherAdmin{} } @@ -10463,7 +10444,7 @@ yydefault: case 46: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:722 +//line sql.y:724 { yyLOCAL = &Load{} } @@ -10471,7 +10452,7 @@ yydefault: case 47: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *With -//line sql.y:728 +//line sql.y:730 { yyLOCAL = &With{CTEs: yyDollar[2].ctesUnion(), Recursive: false} } @@ -10479,7 +10460,7 @@ yydefault: case 48: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *With -//line sql.y:732 +//line sql.y:734 { yyLOCAL = &With{CTEs: yyDollar[3].ctesUnion(), Recursive: true} } @@ -10487,7 +10468,7 @@ yydefault: case 49: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *With -//line sql.y:737 +//line sql.y:739 { yyLOCAL = nil } @@ -10495,14 +10476,14 @@ yydefault: case 50: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *With -//line sql.y:741 +//line sql.y:743 { yyLOCAL = yyDollar[1].withUnion() } yyVAL.union = yyLOCAL case 51: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:747 +//line sql.y:749 { yySLICE := (*[]*CommonTableExpr)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].cteUnion()) @@ -10510,7 +10491,7 @@ yydefault: case 52: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*CommonTableExpr -//line sql.y:751 +//line sql.y:753 { yyLOCAL = []*CommonTableExpr{yyDollar[1].cteUnion()} } @@ -10518,266 +10499,290 @@ yydefault: case 53: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *CommonTableExpr -//line sql.y:757 +//line sql.y:759 { yyLOCAL = &CommonTableExpr{ID: yyDollar[1].identifierCS, Columns: yyDollar[2].columnsUnion(), Subquery: yyDollar[4].subqueryUnion().Select} } yyVAL.union = yyLOCAL case 54: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:763 + var yyLOCAL TableStatement +//line sql.y:765 { - yyLOCAL = yyDollar[2].selStmtUnion() + yyLOCAL = yyDollar[2].tableStmtUnion() } yyVAL.union = yyLOCAL case 55: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:767 + var yyLOCAL TableStatement +//line sql.y:769 { - yyLOCAL = yyDollar[2].selStmtUnion() + yyLOCAL = yyDollar[2].tableStmtUnion() } yyVAL.union = yyLOCAL case 56: yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:771 + var yyLOCAL TableStatement +//line sql.y:773 { - setLockInSelect(yyDollar[2].selStmtUnion(), yyDollar[3].lockUnion()) - yyLOCAL = yyDollar[2].selStmtUnion() + setLockIfPossible(yylex, yyDollar[2].tableStmtUnion(), yyDollar[3].lockUnion()) + yyLOCAL = yyDollar[2].tableStmtUnion() } yyVAL.union = yyLOCAL case 57: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:794 + var yyLOCAL TableStatement +//line sql.y:796 { - yyDollar[1].selStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) - yyDollar[1].selStmtUnion().SetLimit(yyDollar[3].limitUnion()) - yyLOCAL = yyDollar[1].selStmtUnion() + yyDollar[1].tableStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) + yyDollar[1].tableStmtUnion().SetLimit(yyDollar[3].limitUnion()) + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 58: yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:800 + var yyLOCAL TableStatement +//line sql.y:802 { - yyDollar[1].selStmtUnion().SetLimit(yyDollar[2].limitUnion()) - yyLOCAL = yyDollar[1].selStmtUnion() + yyDollar[1].tableStmtUnion().SetLimit(yyDollar[2].limitUnion()) + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 59: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:805 + var yyLOCAL TableStatement +//line sql.y:807 { - yyDollar[1].selStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) - yyDollar[1].selStmtUnion().SetLimit(yyDollar[3].limitUnion()) - yyLOCAL = yyDollar[1].selStmtUnion() + yyDollar[1].tableStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) + yyDollar[1].tableStmtUnion().SetLimit(yyDollar[3].limitUnion()) + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 60: yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:811 + var yyLOCAL TableStatement +//line sql.y:813 { - yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) - yyDollar[2].selStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) - yyDollar[2].selStmtUnion().SetLimit(yyDollar[4].limitUnion()) - yyLOCAL = yyDollar[2].selStmtUnion() + yyDollar[2].tableStmtUnion().SetWith(yyDollar[1].withUnion()) + yyDollar[2].tableStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) + yyDollar[2].tableStmtUnion().SetLimit(yyDollar[4].limitUnion()) + yyLOCAL = yyDollar[2].tableStmtUnion() } yyVAL.union = yyLOCAL case 61: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:818 + var yyLOCAL TableStatement +//line sql.y:820 { - yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) - yyDollar[2].selStmtUnion().SetLimit(yyDollar[3].limitUnion()) - yyLOCAL = yyDollar[2].selStmtUnion() + yyDollar[2].tableStmtUnion().SetWith(yyDollar[1].withUnion()) + yyDollar[2].tableStmtUnion().SetLimit(yyDollar[3].limitUnion()) + yyLOCAL = yyDollar[2].tableStmtUnion() } yyVAL.union = yyLOCAL case 62: yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:824 + var yyLOCAL TableStatement +//line sql.y:826 { - yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) - yyDollar[2].selStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) - yyDollar[2].selStmtUnion().SetLimit(yyDollar[4].limitUnion()) - yyLOCAL = yyDollar[2].selStmtUnion() + yyDollar[2].tableStmtUnion().SetWith(yyDollar[1].withUnion()) + yyDollar[2].tableStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) + yyDollar[2].tableStmtUnion().SetLimit(yyDollar[4].limitUnion()) + yyLOCAL = yyDollar[2].tableStmtUnion() } yyVAL.union = yyLOCAL case 63: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:831 +//line sql.y:833 { - yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) + yyDollar[2].tableStmtUnion().SetWith(yyDollar[1].withUnion()) } case 64: yyDollar = yyS[yypt-7 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:835 + var yyLOCAL TableStatement +//line sql.y:837 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), SelectExprs{&Nextval{Expr: yyDollar[5].exprUnion()}}, []string{yyDollar[3].str} /*options*/, nil, TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}, nil /*where*/, nil /*groupBy*/, nil /*having*/, nil) } yyVAL.union = yyLOCAL case 65: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:841 + var yyLOCAL TableStatement +//line sql.y:843 { - yyLOCAL = yyDollar[1].selStmtUnion() + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 66: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:845 + var yyLOCAL TableStatement +//line sql.y:847 { - yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} + yyLOCAL = &Union{Left: yyDollar[1].tableStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].tableStmtUnion()} } yyVAL.union = yyLOCAL case 67: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:849 + var yyLOCAL TableStatement +//line sql.y:851 { - yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} + yyLOCAL = &Union{Left: yyDollar[1].tableStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].tableStmtUnion()} } yyVAL.union = yyLOCAL case 68: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:853 + var yyLOCAL TableStatement +//line sql.y:855 { - yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} + yyLOCAL = &Union{Left: yyDollar[1].tableStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].tableStmtUnion()} } yyVAL.union = yyLOCAL case 69: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:857 + var yyLOCAL TableStatement +//line sql.y:859 { - yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} + yyLOCAL = &Union{Left: yyDollar[1].tableStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].tableStmtUnion()} } yyVAL.union = yyLOCAL case 70: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:863 + var yyLOCAL TableStatement +//line sql.y:865 { - yyLOCAL = yyDollar[1].selStmtUnion() + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 71: yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:867 + var yyLOCAL TableStatement +//line sql.y:869 { - setLockInSelect(yyDollar[1].selStmtUnion(), yyDollar[2].lockUnion()) - yyLOCAL = yyDollar[1].selStmtUnion() + setLockIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].lockUnion()) + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 72: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:872 + var yyLOCAL TableStatement +//line sql.y:874 { - yyLOCAL = yyDollar[1].selStmtUnion() + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 73: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:876 + var yyLOCAL TableStatement +//line sql.y:878 { - yyLOCAL = yyDollar[1].selStmtUnion() + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 74: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:882 + var yyLOCAL TableStatement +//line sql.y:884 { - yyLOCAL = yyDollar[2].selStmtUnion() + yyLOCAL = yyDollar[2].tableStmtUnion() } yyVAL.union = yyLOCAL case 75: yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:886 + var yyLOCAL TableStatement +//line sql.y:888 { - yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion()) - yyLOCAL = yyDollar[1].selStmtUnion() + setIntoIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].selectIntoUnion()) + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 76: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:891 + var yyLOCAL TableStatement +//line sql.y:893 { - yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion()) - yyDollar[1].selStmtUnion().SetLock(yyDollar[3].lockUnion()) - yyLOCAL = yyDollar[1].selStmtUnion() + setIntoIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].selectIntoUnion()) + setLockIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[3].lockUnion()) + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 77: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:897 + var yyLOCAL TableStatement +//line sql.y:899 { - yyDollar[1].selStmtUnion().SetInto(yyDollar[3].selectIntoUnion()) - yyDollar[1].selStmtUnion().SetLock(yyDollar[2].lockUnion()) - yyLOCAL = yyDollar[1].selStmtUnion() + setLockIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].lockUnion()) + setIntoIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[3].selectIntoUnion()) + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 78: yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:903 + var yyLOCAL TableStatement +//line sql.y:905 { - yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion()) - yyLOCAL = yyDollar[1].selStmtUnion() + setIntoIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].selectIntoUnion()) + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL case 79: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL TableStatement +//line sql.y:912 + { + yyLOCAL = &ValuesStatement{Comments: Comments(yyDollar[2].strs).Parsed(), ListArg: ListArg(yyDollar[3].str[2:])} + } + yyVAL.union = yyLOCAL + case 80: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL TableStatement +//line sql.y:916 + { + yyLOCAL = &ValuesStatement{Comments: Comments(yyDollar[2].strs).Parsed(), Rows: yyDollar[3].valuesUnion()} + } + yyVAL.union = yyLOCAL + case 81: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:910 +//line sql.y:922 { yyLOCAL = &Stream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName} } yyVAL.union = yyLOCAL - case 80: + case 82: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:916 +//line sql.y:928 { yyLOCAL = &VStream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName, Where: NewWhere(WhereClause, yyDollar[6].exprUnion()), Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL - case 81: + case 83: yyDollar = yyS[yypt-10 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:924 + var yyLOCAL TableStatement +//line sql.y:936 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, yyDollar[5].selectIntoUnion() /*into*/, yyDollar[6].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[7].exprUnion()), yyDollar[8].groupByUnion(), NewWhere(HavingClause, yyDollar[9].exprUnion()), yyDollar[10].namedWindowsUnion()) } yyVAL.union = yyLOCAL - case 82: + case 84: yyDollar = yyS[yypt-9 : yypt+1] - var yyLOCAL SelectStatement -//line sql.y:928 + var yyLOCAL TableStatement +//line sql.y:940 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, nil, yyDollar[5].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[6].exprUnion()), yyDollar[7].groupByUnion(), NewWhere(HavingClause, yyDollar[8].exprUnion()), yyDollar[9].namedWindowsUnion()) } yyVAL.union = yyLOCAL - case 83: + case 85: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL TableStatement +//line sql.y:944 + { + yyLOCAL = yyDollar[1].tableStmtUnion() + } + yyVAL.union = yyLOCAL + case 86: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:934 +//line sql.y:950 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[6].insUnion() @@ -10790,10 +10795,10 @@ yydefault: yyLOCAL = ins } yyVAL.union = yyLOCAL - case 84: + case 87: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:946 +//line sql.y:962 { cols := make(Columns, 0, len(yyDollar[7].updateExprsUnion())) vals := make(ValTuple, 0, len(yyDollar[8].updateExprsUnion())) @@ -10804,329 +10809,329 @@ yydefault: yyLOCAL = &Insert{Action: yyDollar[1].insertActionUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Ignore: yyDollar[3].ignoreUnion(), Table: getAliasedTableExprFromTableName(yyDollar[4].tableName), Partitions: yyDollar[5].partitionsUnion(), Columns: cols, Rows: Values{vals}, OnDup: OnDup(yyDollar[8].updateExprsUnion())} } yyVAL.union = yyLOCAL - case 85: + case 88: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL InsertAction -//line sql.y:958 +//line sql.y:974 { yyLOCAL = InsertAct } yyVAL.union = yyLOCAL - case 86: + case 89: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL InsertAction -//line sql.y:962 +//line sql.y:978 { yyLOCAL = ReplaceAct } yyVAL.union = yyLOCAL - case 87: + case 90: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement -//line sql.y:968 +//line sql.y:984 { yyLOCAL = &Update{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: yyDollar[5].tableExprsUnion(), Exprs: yyDollar[7].updateExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion()), OrderBy: yyDollar[9].orderByUnion(), Limit: yyDollar[10].limitUnion()} } yyVAL.union = yyLOCAL - case 88: + case 91: yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement -//line sql.y:974 +//line sql.y:990 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: TableExprs{&AliasedTableExpr{Expr: yyDollar[6].tableName, As: yyDollar[7].identifierCS}}, Partitions: yyDollar[8].partitionsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion()), OrderBy: yyDollar[10].orderByUnion(), Limit: yyDollar[11].limitUnion()} } yyVAL.union = yyLOCAL - case 89: + case 92: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Statement -//line sql.y:978 +//line sql.y:994 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[6].tableNamesUnion(), TableExprs: yyDollar[8].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion())} } yyVAL.union = yyLOCAL - case 90: + case 93: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:982 +//line sql.y:998 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())} } yyVAL.union = yyLOCAL - case 91: + case 94: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:986 +//line sql.y:1002 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())} } yyVAL.union = yyLOCAL - case 92: + case 95: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:991 +//line sql.y:1007 { } - case 93: + case 96: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:992 +//line sql.y:1008 { } - case 94: + case 97: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:996 +//line sql.y:1012 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL - case 95: + case 98: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1000 +//line sql.y:1016 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) } - case 96: + case 99: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1006 +//line sql.y:1022 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL - case 97: + case 100: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1010 +//line sql.y:1026 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) } - case 98: + case 101: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1016 +//line sql.y:1032 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL - case 99: + case 102: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1020 +//line sql.y:1036 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) } - case 100: + case 103: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Partitions -//line sql.y:1025 +//line sql.y:1041 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 101: + case 104: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Partitions -//line sql.y:1029 +//line sql.y:1045 { yyLOCAL = yyDollar[3].partitionsUnion() } yyVAL.union = yyLOCAL - case 102: + case 105: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:1035 +//line sql.y:1051 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[3].setExprsUnion()) } yyVAL.union = yyLOCAL - case 103: + case 106: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SetExprs -//line sql.y:1041 +//line sql.y:1057 { yyLOCAL = SetExprs{yyDollar[1].setExprUnion()} } yyVAL.union = yyLOCAL - case 104: + case 107: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1045 +//line sql.y:1061 { yySLICE := (*SetExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].setExprUnion()) } - case 105: + case 108: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1051 +//line sql.y:1067 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("on")} } yyVAL.union = yyLOCAL - case 106: + case 109: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1055 +//line sql.y:1071 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("off")} } yyVAL.union = yyLOCAL - case 107: + case 110: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1059 +//line sql.y:1075 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 108: + case 111: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1063 +//line sql.y:1079 { yyLOCAL = &SetExpr{Var: NewSetVariable(string(yyDollar[1].str), SessionScope), Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 109: + case 112: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1069 +//line sql.y:1085 { yyLOCAL = NewSetVariable(string(yyDollar[1].str), SessionScope) } yyVAL.union = yyLOCAL - case 110: + case 113: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1073 +//line sql.y:1089 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 111: + case 114: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Variable -//line sql.y:1077 +//line sql.y:1093 { yyLOCAL = NewSetVariable(string(yyDollar[2].str), yyDollar[1].scopeUnion()) } yyVAL.union = yyLOCAL - case 112: + case 115: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:1083 +//line sql.y:1099 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), UpdateSetExprsScope(yyDollar[5].setExprsUnion(), yyDollar[3].scopeUnion())) } yyVAL.union = yyLOCAL - case 113: + case 116: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:1087 +//line sql.y:1103 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[4].setExprsUnion()) } yyVAL.union = yyLOCAL - case 114: + case 117: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SetExprs -//line sql.y:1093 +//line sql.y:1109 { yyLOCAL = SetExprs{yyDollar[1].setExprUnion()} } yyVAL.union = yyLOCAL - case 115: + case 118: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1097 +//line sql.y:1113 { yySLICE := (*SetExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].setExprUnion()) } - case 116: + case 119: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1103 +//line sql.y:1119 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionIsolationStr, NextTxScope), Expr: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 117: + case 120: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1107 +//line sql.y:1123 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("off")} } yyVAL.union = yyLOCAL - case 118: + case 121: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1111 +//line sql.y:1127 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("on")} } yyVAL.union = yyLOCAL - case 119: + case 122: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1117 +//line sql.y:1133 { yyVAL.str = RepeatableReadStr } - case 120: + case 123: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1121 +//line sql.y:1137 { yyVAL.str = ReadCommittedStr } - case 121: + case 124: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1125 +//line sql.y:1141 { yyVAL.str = ReadUncommittedStr } - case 122: + case 125: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1129 +//line sql.y:1145 { yyVAL.str = SerializableStr } - case 123: + case 126: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1135 +//line sql.y:1151 { yyLOCAL = SessionScope } yyVAL.union = yyLOCAL - case 124: + case 127: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1139 +//line sql.y:1155 { yyLOCAL = SessionScope } yyVAL.union = yyLOCAL - case 125: + case 128: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1143 +//line sql.y:1159 { yyLOCAL = GlobalScope } yyVAL.union = yyLOCAL - case 126: + case 129: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1149 +//line sql.y:1165 { yyDollar[1].createTableUnion().TableSpec = yyDollar[2].tableSpecUnion() yyDollar[1].createTableUnion().FullyParsed = true yyLOCAL = yyDollar[1].createTableUnion() } yyVAL.union = yyLOCAL - case 127: + case 130: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1155 +//line sql.y:1171 { // Create table [name] like [name] yyDollar[1].createTableUnion().OptLike = yyDollar[2].optLikeUnion() @@ -11134,10 +11139,10 @@ yydefault: yyLOCAL = yyDollar[1].createTableUnion() } yyVAL.union = yyLOCAL - case 128: + case 131: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:1162 +//line sql.y:1178 { indexDef := yyDollar[1].alterTableUnion().AlterOptions[0].(*AddIndexDefinition).IndexDefinition indexDef.Columns = yyDollar[3].indexColumnsUnion() @@ -11147,413 +11152,413 @@ yydefault: yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 129: + case 132: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Statement -//line sql.y:1171 +//line sql.y:1187 { - yyLOCAL = &CreateView{ViewName: yyDollar[8].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), IsReplace: yyDollar[3].booleanUnion(), Algorithm: yyDollar[4].str, Definer: yyDollar[5].definerUnion(), Security: yyDollar[6].str, Columns: yyDollar[9].columnsUnion(), Select: yyDollar[11].selStmtUnion(), CheckOption: yyDollar[12].str} + yyLOCAL = &CreateView{ViewName: yyDollar[8].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), IsReplace: yyDollar[3].booleanUnion(), Algorithm: yyDollar[4].str, Definer: yyDollar[5].definerUnion(), Security: yyDollar[6].str, Columns: yyDollar[9].columnsUnion(), Select: yyDollar[11].tableStmtUnion(), CheckOption: yyDollar[12].str} } yyVAL.union = yyLOCAL - case 130: + case 133: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1175 +//line sql.y:1191 { yyDollar[1].createDatabaseUnion().FullyParsed = true yyDollar[1].createDatabaseUnion().CreateOptions = yyDollar[2].databaseOptionsUnion() yyLOCAL = yyDollar[1].createDatabaseUnion() } yyVAL.union = yyLOCAL - case 131: + case 134: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:1182 +//line sql.y:1198 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 132: + case 135: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:1186 +//line sql.y:1202 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 133: + case 136: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1191 +//line sql.y:1207 { yyVAL.identifierCI = NewIdentifierCI("") } - case 134: + case 137: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1195 +//line sql.y:1211 { yyVAL.identifierCI = yyDollar[2].identifierCI } - case 135: + case 138: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1201 +//line sql.y:1217 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 136: + case 139: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1206 +//line sql.y:1222 { var v []VindexParam yyLOCAL = v } yyVAL.union = yyLOCAL - case 137: + case 140: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1211 +//line sql.y:1227 { yyLOCAL = yyDollar[2].vindexParamsUnion() } yyVAL.union = yyLOCAL - case 138: + case 141: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1217 +//line sql.y:1233 { yyLOCAL = make([]VindexParam, 0, 4) yyLOCAL = append(yyLOCAL, yyDollar[1].vindexParam) } yyVAL.union = yyLOCAL - case 139: + case 142: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1222 +//line sql.y:1238 { yySLICE := (*[]VindexParam)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].vindexParam) } - case 140: + case 143: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1228 +//line sql.y:1244 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].identifierCI, Val: yyDollar[3].str} } - case 141: + case 144: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1233 +//line sql.y:1249 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 142: + case 145: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1237 +//line sql.y:1253 { yyLOCAL = yyDollar[1].jsonObjectParamsUnion() } yyVAL.union = yyLOCAL - case 143: + case 146: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1243 +//line sql.y:1259 { yyLOCAL = []*JSONObjectParam{yyDollar[1].jsonObjectParam} } yyVAL.union = yyLOCAL - case 144: + case 147: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1247 +//line sql.y:1263 { yySLICE := (*[]*JSONObjectParam)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jsonObjectParam) } - case 145: + case 148: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1253 +//line sql.y:1269 { yyVAL.jsonObjectParam = &JSONObjectParam{Key: yyDollar[1].exprUnion(), Value: yyDollar[3].exprUnion()} } - case 146: + case 149: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *CreateTable -//line sql.y:1259 +//line sql.y:1275 { yyLOCAL = &CreateTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[6].tableName, IfNotExists: yyDollar[5].booleanUnion(), Temp: yyDollar[3].booleanUnion()} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 147: + case 150: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1266 +//line sql.y:1282 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[4].tableName} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 148: + case 151: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1273 +//line sql.y:1289 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[7].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[4].identifierCI}, Options: yyDollar[5].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 149: + case 152: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1278 +//line sql.y:1294 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: IndexTypeFullText}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 150: + case 153: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1283 +//line sql.y:1299 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: IndexTypeSpatial}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 151: + case 154: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1288 +//line sql.y:1304 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: IndexTypeUnique}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 152: + case 155: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *CreateDatabase -//line sql.y:1295 +//line sql.y:1311 { yyLOCAL = &CreateDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfNotExists: yyDollar[4].booleanUnion()} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 153: + case 156: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AlterDatabase -//line sql.y:1302 +//line sql.y:1318 { yyLOCAL = &AlterDatabase{Comments: Comments(yyDollar[2].strs).Parsed()} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 156: + case 159: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1313 +//line sql.y:1329 { yyLOCAL = yyDollar[2].tableSpecUnion() yyLOCAL.Options = yyDollar[4].tableOptionsUnion() yyLOCAL.PartitionOption = yyDollar[5].partitionOptionUnion() } yyVAL.union = yyLOCAL - case 157: + case 160: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1320 +//line sql.y:1336 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 158: + case 161: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1324 +//line sql.y:1340 { yyLOCAL = yyDollar[1].databaseOptionsUnion() } yyVAL.union = yyLOCAL - case 159: + case 162: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1330 +//line sql.y:1346 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } yyVAL.union = yyLOCAL - case 160: + case 163: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1334 +//line sql.y:1350 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } yyVAL.union = yyLOCAL - case 161: + case 164: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1338 +//line sql.y:1354 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } yyVAL.union = yyLOCAL - case 162: + case 165: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1342 +//line sql.y:1358 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } - case 163: + case 166: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1346 +//line sql.y:1362 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } - case 164: + case 167: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1350 +//line sql.y:1366 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } - case 165: + case 168: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:1356 +//line sql.y:1372 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 166: + case 169: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:1360 +//line sql.y:1376 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 167: + case 170: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1366 +//line sql.y:1382 { yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 168: + case 171: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1370 +//line sql.y:1386 { yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 169: + case 172: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1376 +//line sql.y:1392 { yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 170: + case 173: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1380 +//line sql.y:1396 { yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 171: + case 174: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1386 +//line sql.y:1402 { yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 172: + case 175: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1390 +//line sql.y:1406 { yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 173: + case 176: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OptLike -//line sql.y:1396 +//line sql.y:1412 { yyLOCAL = &OptLike{LikeTable: yyDollar[2].tableName} } yyVAL.union = yyLOCAL - case 174: + case 177: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OptLike -//line sql.y:1400 +//line sql.y:1416 { yyLOCAL = &OptLike{LikeTable: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 175: + case 178: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColumnDefinition -//line sql.y:1406 +//line sql.y:1422 { yyLOCAL = []*ColumnDefinition{yyDollar[1].columnDefinitionUnion()} } yyVAL.union = yyLOCAL - case 176: + case 179: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1410 +//line sql.y:1426 { yySLICE := (*[]*ColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].columnDefinitionUnion()) } - case 177: + case 180: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1416 +//line sql.y:1432 { yyLOCAL = &TableSpec{} yyLOCAL.AddColumn(yyDollar[1].columnDefinitionUnion()) } yyVAL.union = yyLOCAL - case 178: + case 181: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1421 +//line sql.y:1437 { yyLOCAL = &TableSpec{} yyLOCAL.AddConstraint(yyDollar[1].constraintDefinitionUnion()) } yyVAL.union = yyLOCAL - case 179: + case 182: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1426 +//line sql.y:1442 { yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion()) } - case 180: + case 183: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1430 +//line sql.y:1446 { yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion()) yyVAL.tableSpecUnion().AddConstraint(yyDollar[4].constraintDefinitionUnion()) } - case 181: + case 184: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1435 +//line sql.y:1451 { yyVAL.tableSpecUnion().AddIndex(yyDollar[3].indexDefinitionUnion()) } - case 182: + case 185: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1439 +//line sql.y:1455 { yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion()) } - case 183: + case 186: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1443 +//line sql.y:1459 { yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion()) } - case 184: + case 187: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColumnDefinition -//line sql.y:1454 +//line sql.y:1470 { yyDollar[2].columnType.Options = yyDollar[4].columnTypeOptionsUnion() if yyDollar[2].columnType.Options.Collate == "" { @@ -11563,10 +11568,10 @@ yydefault: yyLOCAL = &ColumnDefinition{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType} } yyVAL.union = yyLOCAL - case 185: + case 188: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL *ColumnDefinition -//line sql.y:1463 +//line sql.y:1479 { yyDollar[2].columnType.Options = yyDollar[9].columnTypeOptionsUnion() yyDollar[2].columnType.Options.As = yyDollar[7].exprUnion() @@ -11575,945 +11580,921 @@ yydefault: yyLOCAL = &ColumnDefinition{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType} } yyVAL.union = yyLOCAL - case 186: + case 189: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1472 +//line sql.y:1488 { yyVAL.str = "" } - case 187: + case 190: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1476 +//line sql.y:1492 { yyVAL.str = "" } - case 188: + case 191: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1485 +//line sql.y:1501 { yyLOCAL = &ColumnTypeOptions{Null: nil, Default: nil, OnUpdate: nil, Autoincrement: false, KeyOpt: ColKeyNone, Comment: nil, As: nil, Invisible: nil, Format: UnspecifiedFormat, EngineAttribute: nil, SecondaryEngineAttribute: nil} } yyVAL.union = yyLOCAL - case 189: + case 192: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1489 +//line sql.y:1505 { yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(true) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 190: + case 193: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1494 +//line sql.y:1510 { yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(false) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 191: + case 194: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1499 +//line sql.y:1515 { yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[4].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 192: + case 195: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1504 +//line sql.y:1520 { yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[3].exprUnion() yyDollar[1].columnTypeOptionsUnion().DefaultLiteral = true yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 193: + case 196: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1510 +//line sql.y:1526 { yyDollar[1].columnTypeOptionsUnion().OnUpdate = yyDollar[4].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 194: + case 197: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1515 +//line sql.y:1531 { yyDollar[1].columnTypeOptionsUnion().Autoincrement = true yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 195: + case 198: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1520 +//line sql.y:1536 { yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 196: + case 199: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1525 +//line sql.y:1541 { yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 197: + case 200: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1530 +//line sql.y:1546 { yyDollar[1].columnTypeOptionsUnion().Collate = encodeSQLString(yyDollar[3].str) } - case 198: + case 201: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1534 +//line sql.y:1550 { yyDollar[1].columnTypeOptionsUnion().Collate = string(yyDollar[3].identifierCI.String()) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 199: + case 202: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1539 +//line sql.y:1555 { yyDollar[1].columnTypeOptionsUnion().Format = yyDollar[3].columnFormatUnion() } - case 200: + case 203: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1543 +//line sql.y:1559 { yyDollar[1].columnTypeOptionsUnion().SRID = NewIntLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 201: + case 204: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1548 +//line sql.y:1564 { yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(false) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 202: + case 205: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1553 +//line sql.y:1569 { yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(true) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 203: + case 206: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1558 +//line sql.y:1574 { yyDollar[1].columnTypeOptionsUnion().EngineAttribute = NewStrLiteral(yyDollar[4].str) } - case 204: + case 207: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1562 +//line sql.y:1578 { yyDollar[1].columnTypeOptionsUnion().SecondaryEngineAttribute = NewStrLiteral(yyDollar[4].str) } - case 205: + case 208: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1568 +//line sql.y:1584 { yyLOCAL = FixedFormat } yyVAL.union = yyLOCAL - case 206: + case 209: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1572 +//line sql.y:1588 { yyLOCAL = DynamicFormat } yyVAL.union = yyLOCAL - case 207: + case 210: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1576 +//line sql.y:1592 { yyLOCAL = DefaultFormat } yyVAL.union = yyLOCAL - case 208: + case 211: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnStorage -//line sql.y:1582 +//line sql.y:1598 { yyLOCAL = VirtualStorage } yyVAL.union = yyLOCAL - case 209: + case 212: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnStorage -//line sql.y:1586 +//line sql.y:1602 { yyLOCAL = StoredStorage } yyVAL.union = yyLOCAL - case 210: + case 213: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1591 +//line sql.y:1607 { yyLOCAL = &ColumnTypeOptions{} } yyVAL.union = yyLOCAL - case 211: + case 214: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1595 +//line sql.y:1611 { yyDollar[1].columnTypeOptionsUnion().Storage = yyDollar[2].columnStorageUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 212: + case 215: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1600 +//line sql.y:1616 { yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(true) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 213: + case 216: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1605 +//line sql.y:1621 { yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(false) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 214: + case 217: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1610 +//line sql.y:1626 { yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 215: + case 218: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1615 +//line sql.y:1631 { yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 216: + case 219: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1620 +//line sql.y:1636 { yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(false) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 217: + case 220: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1625 +//line sql.y:1641 { yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(true) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 218: + case 221: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1632 +//line sql.y:1648 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 220: + case 223: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1639 +//line sql.y:1655 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_timestamp"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 221: + case 224: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1643 +//line sql.y:1659 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtime"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 222: + case 225: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1647 +//line sql.y:1663 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtimestamp"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 223: + case 226: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1651 +//line sql.y:1667 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_timestamp"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 224: + case 227: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1655 +//line sql.y:1671 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("now"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 225: + case 228: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1659 +//line sql.y:1675 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("sysdate"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 228: + case 231: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1669 +//line sql.y:1685 { yyLOCAL = &NullVal{} } yyVAL.union = yyLOCAL - case 230: + case 233: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1676 +//line sql.y:1692 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 231: + case 234: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1680 +//line sql.y:1696 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 232: + case 235: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1686 +//line sql.y:1702 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 233: + case 236: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1690 +//line sql.y:1706 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 234: + case 237: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1694 +//line sql.y:1710 { yyLOCAL = yyDollar[1].boolValUnion() } yyVAL.union = yyLOCAL - case 235: + case 238: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1698 +//line sql.y:1714 { yyLOCAL = NewHexLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 236: + case 239: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1702 +//line sql.y:1718 { yyLOCAL = NewHexNumLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 237: + case 240: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1706 +//line sql.y:1722 { yyLOCAL = NewBitLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 238: + case 241: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1710 +//line sql.y:1726 { yyLOCAL = NewBitLiteral("0b" + yyDollar[1].str) } yyVAL.union = yyLOCAL - case 239: + case 242: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1714 +//line sql.y:1730 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 240: + case 243: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1718 +//line sql.y:1734 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral("0b" + yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 241: + case 244: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1722 +//line sql.y:1738 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexNumLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 242: + case 245: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1726 +//line sql.y:1742 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 243: + case 246: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1730 +//line sql.y:1746 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 244: + case 247: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1734 +//line sql.y:1750 { arg := parseBindVariable(yylex, yyDollar[2].str[1:]) yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: arg} } yyVAL.union = yyLOCAL - case 245: + case 248: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1739 +//line sql.y:1755 { yyLOCAL = NewDateLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 246: + case 249: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1743 +//line sql.y:1759 { yyLOCAL = NewTimeLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 247: + case 250: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1747 +//line sql.y:1763 { yyLOCAL = NewTimestampLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 248: + case 251: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1753 +//line sql.y:1769 { yyVAL.str = Armscii8Str } - case 249: + case 252: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1757 +//line sql.y:1773 { yyVAL.str = ASCIIStr } - case 250: + case 253: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1761 +//line sql.y:1777 { yyVAL.str = Big5Str } - case 251: + case 254: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1765 +//line sql.y:1781 { yyVAL.str = UBinaryStr } - case 252: + case 255: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1769 +//line sql.y:1785 { yyVAL.str = Cp1250Str } - case 253: + case 256: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1773 +//line sql.y:1789 { yyVAL.str = Cp1251Str } - case 254: + case 257: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1777 +//line sql.y:1793 { yyVAL.str = Cp1256Str } - case 255: + case 258: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1781 +//line sql.y:1797 { yyVAL.str = Cp1257Str } - case 256: + case 259: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1785 +//line sql.y:1801 { yyVAL.str = Cp850Str } - case 257: + case 260: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1789 +//line sql.y:1805 { yyVAL.str = Cp852Str } - case 258: + case 261: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1793 +//line sql.y:1809 { yyVAL.str = Cp866Str } - case 259: + case 262: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1797 +//line sql.y:1813 { yyVAL.str = Cp932Str } - case 260: + case 263: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1801 +//line sql.y:1817 { yyVAL.str = Dec8Str } - case 261: + case 264: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1805 +//line sql.y:1821 { yyVAL.str = EucjpmsStr } - case 262: + case 265: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1809 +//line sql.y:1825 { yyVAL.str = EuckrStr } - case 263: + case 266: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1813 +//line sql.y:1829 { yyVAL.str = Gb18030Str } - case 264: + case 267: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1817 +//line sql.y:1833 { yyVAL.str = Gb2312Str } - case 265: + case 268: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1821 +//line sql.y:1837 { yyVAL.str = GbkStr } - case 266: + case 269: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1825 +//line sql.y:1841 { yyVAL.str = Geostd8Str } - case 267: + case 270: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1829 +//line sql.y:1845 { yyVAL.str = GreekStr } - case 268: + case 271: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1833 +//line sql.y:1849 { yyVAL.str = HebrewStr } - case 269: + case 272: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1837 +//line sql.y:1853 { yyVAL.str = Hp8Str } - case 270: + case 273: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1841 +//line sql.y:1857 { yyVAL.str = Keybcs2Str } - case 271: + case 274: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1845 +//line sql.y:1861 { yyVAL.str = Koi8rStr } - case 272: + case 275: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1849 +//line sql.y:1865 { yyVAL.str = Koi8uStr } - case 273: + case 276: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1853 +//line sql.y:1869 { yyVAL.str = Latin1Str } - case 274: + case 277: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1857 +//line sql.y:1873 { yyVAL.str = Latin2Str } - case 275: + case 278: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1861 +//line sql.y:1877 { yyVAL.str = Latin5Str } - case 276: + case 279: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1865 +//line sql.y:1881 { yyVAL.str = Latin7Str } - case 277: + case 280: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1869 +//line sql.y:1885 { yyVAL.str = MacceStr } - case 278: + case 281: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1873 +//line sql.y:1889 { yyVAL.str = MacromanStr } - case 279: + case 282: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1877 +//line sql.y:1893 { yyVAL.str = SjisStr } - case 280: + case 283: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1881 +//line sql.y:1897 { yyVAL.str = Swe7Str } - case 281: + case 284: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1885 +//line sql.y:1901 { yyVAL.str = Tis620Str } - case 282: + case 285: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1889 +//line sql.y:1905 { yyVAL.str = Ucs2Str } - case 283: + case 286: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1893 +//line sql.y:1909 { yyVAL.str = UjisStr } - case 284: + case 287: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1897 +//line sql.y:1913 { yyVAL.str = Utf16Str } - case 285: + case 288: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1901 +//line sql.y:1917 { yyVAL.str = Utf16leStr } - case 286: + case 289: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1905 +//line sql.y:1921 { yyVAL.str = Utf32Str } - case 287: + case 290: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1909 +//line sql.y:1925 { yyVAL.str = Utf8mb3Str } - case 288: + case 291: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1913 +//line sql.y:1929 { yyVAL.str = Utf8mb4Str } - case 289: + case 292: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1917 +//line sql.y:1933 { yyVAL.str = Utf8mb3Str } - case 292: + case 295: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1927 +//line sql.y:1943 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 293: + case 296: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1931 +//line sql.y:1947 { yyLOCAL = NewFloatLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 294: + case 297: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1935 +//line sql.y:1951 { yyLOCAL = NewDecimalLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 295: + case 298: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1941 +//line sql.y:1957 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 296: + case 299: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1945 +//line sql.y:1961 { yyLOCAL = AppendString(yyDollar[1].exprUnion(), yyDollar[2].str) } yyVAL.union = yyLOCAL - case 297: + case 300: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1951 +//line sql.y:1967 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 298: + case 301: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1955 +//line sql.y:1971 { yyLOCAL = &UnaryExpr{Operator: NStringOp, Expr: NewStrLiteral(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 299: + case 302: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1959 +//line sql.y:1975 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewStrLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 300: + case 303: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1965 +//line sql.y:1981 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 301: + case 304: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1969 +//line sql.y:1985 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 302: + case 305: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1975 +//line sql.y:1991 { yyLOCAL = ColKeyPrimary } yyVAL.union = yyLOCAL - case 303: + case 306: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1979 +//line sql.y:1995 { yyLOCAL = ColKeyUnique } yyVAL.union = yyLOCAL - case 304: + case 307: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1983 +//line sql.y:1999 { yyLOCAL = ColKeyUniqueKey } yyVAL.union = yyLOCAL - case 305: + case 308: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1987 +//line sql.y:2003 { yyLOCAL = ColKey } yyVAL.union = yyLOCAL - case 306: + case 309: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1993 +//line sql.y:2009 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].booleanUnion() yyVAL.columnType.Zerofill = yyDollar[3].booleanUnion() } - case 310: + case 313: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2004 +//line sql.y:2020 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].intPtrUnion() } - case 311: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2009 - { - yyVAL.columnType = yyDollar[1].columnType - } - case 312: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2015 - { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} - } - case 313: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2019 - { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} - } case 314: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2023 +//line sql.y:2025 { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} + yyVAL.columnType = yyDollar[1].columnType } case 315: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2027 +//line sql.y:2031 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 316: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2031 +//line sql.y:2035 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 317: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2035 +//line sql.y:2039 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 318: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2039 +//line sql.y:2043 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 319: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2043 +//line sql.y:2047 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 320: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2047 +//line sql.y:2051 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 321: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2053 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:2055 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} - yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length - yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 322: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2059 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} - yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length - yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 323: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2065 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:2063 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} - yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length - yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 324: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2071 +//line sql.y:2069 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -12521,7 +12502,7 @@ yydefault: } case 325: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2077 +//line sql.y:2075 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -12529,7 +12510,7 @@ yydefault: } case 326: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2083 +//line sql.y:2081 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -12537,1763 +12518,1787 @@ yydefault: } case 327: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2089 +//line sql.y:2087 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 328: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2097 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2093 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} + yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length + yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 329: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2101 +//line sql.y:2099 { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} + yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length + yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 330: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:2105 { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} + yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length + yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 331: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2109 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:2113 { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 332: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2113 +//line sql.y:2117 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } case 333: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2121 + { + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} + } + case 334: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2125 + { + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} + } + case 335: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2129 + { + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} + } + case 336: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2119 +//line sql.y:2135 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset} } - case 334: + case 337: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2123 +//line sql.y:2139 { // CHAR BYTE is an alias for binary. See also: // https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html yyVAL.columnType = &ColumnType{Type: "binary", Length: yyDollar[2].intPtrUnion()} } - case 335: + case 338: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2129 +//line sql.y:2145 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset} } - case 336: + case 339: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2133 +//line sql.y:2149 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } - case 337: + case 340: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2137 +//line sql.y:2153 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } - case 338: + case 341: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2141 +//line sql.y:2157 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } - case 339: + case 342: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2145 +//line sql.y:2161 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } - case 340: + case 343: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2149 +//line sql.y:2165 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } - case 341: + case 344: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2153 +//line sql.y:2169 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } - case 342: + case 345: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2157 +//line sql.y:2173 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 343: + case 346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2161 +//line sql.y:2177 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 344: + case 347: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2165 +//line sql.y:2181 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 345: + case 348: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2169 +//line sql.y:2185 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 346: + case 349: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2173 +//line sql.y:2189 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 347: + case 350: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2177 +//line sql.y:2193 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} } - case 348: + case 351: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2181 +//line sql.y:2197 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } - case 349: + case 352: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2186 +//line sql.y:2202 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} } - case 350: + case 353: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2192 +//line sql.y:2208 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 351: + case 354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2196 +//line sql.y:2212 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 352: + case 355: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2200 +//line sql.y:2216 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 353: + case 356: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2204 +//line sql.y:2220 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 354: + case 357: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2208 +//line sql.y:2224 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 355: + case 358: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2212 +//line sql.y:2228 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 356: + case 359: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2216 +//line sql.y:2232 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 357: + case 360: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2220 +//line sql.y:2236 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 358: + case 361: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2226 +//line sql.y:2242 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, encodeSQLString(yyDollar[1].str)) } - case 359: + case 362: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2231 +//line sql.y:2247 { yyVAL.strs = append(yyDollar[1].strs, encodeSQLString(yyDollar[3].str)) } - case 360: + case 363: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *int -//line sql.y:2236 +//line sql.y:2252 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 361: + case 364: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *int -//line sql.y:2240 +//line sql.y:2256 { yyLOCAL = ptr.Of(convertStringToInt(yyDollar[2].str)) } yyVAL.union = yyLOCAL - case 362: + case 365: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2245 +//line sql.y:2261 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 363: + case 366: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2249 +//line sql.y:2265 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: ptr.Of(convertStringToInt(yyDollar[2].str)), Scale: ptr.Of(convertStringToInt(yyDollar[4].str)), } } - case 364: + case 367: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2258 +//line sql.y:2274 { yyVAL.LengthScaleOption = yyDollar[1].LengthScaleOption } - case 365: + case 368: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2262 +//line sql.y:2278 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: ptr.Of(convertStringToInt(yyDollar[2].str)), } } - case 366: + case 369: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2269 +//line sql.y:2285 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 367: + case 370: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2273 +//line sql.y:2289 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: ptr.Of(convertStringToInt(yyDollar[2].str)), } } - case 368: + case 371: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2279 +//line sql.y:2295 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: ptr.Of(convertStringToInt(yyDollar[2].str)), Scale: ptr.Of(convertStringToInt(yyDollar[4].str)), } } - case 369: + case 372: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2287 +//line sql.y:2303 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 370: + case 373: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2291 +//line sql.y:2307 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 371: + case 374: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2295 +//line sql.y:2311 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 372: + case 375: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2300 +//line sql.y:2316 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 373: + case 376: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2304 +//line sql.y:2320 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 374: + case 377: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2309 +//line sql.y:2325 { yyVAL.columnCharset = ColumnCharset{} } - case 375: + case 378: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2313 +//line sql.y:2329 { yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].identifierCI.String()), Binary: yyDollar[3].booleanUnion()} } - case 376: + case 379: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2317 +//line sql.y:2333 { yyVAL.columnCharset = ColumnCharset{Name: encodeSQLString(yyDollar[2].str), Binary: yyDollar[3].booleanUnion()} } - case 377: + case 380: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2321 +//line sql.y:2337 { yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].str)} } - case 378: + case 381: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2325 +//line sql.y:2341 { // ASCII: Shorthand for CHARACTER SET latin1. yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: yyDollar[2].booleanUnion()} } - case 379: + case 382: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2330 +//line sql.y:2346 { // UNICODE: Shorthand for CHARACTER SET ucs2. yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: yyDollar[2].booleanUnion()} } - case 380: + case 383: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2335 +//line sql.y:2351 { // BINARY: Shorthand for default CHARACTER SET but with binary collation yyVAL.columnCharset = ColumnCharset{Name: "", Binary: true} } - case 381: + case 384: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2340 +//line sql.y:2356 { // BINARY ASCII: Shorthand for CHARACTER SET latin1 with binary collation yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: true} } - case 382: + case 385: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2345 +//line sql.y:2361 { // BINARY UNICODE: Shorthand for CHARACTER SET ucs2 with binary collation yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: true} } - case 383: + case 386: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2351 +//line sql.y:2367 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 384: + case 387: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2355 +//line sql.y:2371 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 385: + case 388: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2360 +//line sql.y:2376 { yyVAL.str = "" } - case 386: + case 389: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2364 +//line sql.y:2380 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } - case 387: + case 390: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2368 +//line sql.y:2384 { yyVAL.str = encodeSQLString(yyDollar[2].str) } - case 388: + case 391: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexDefinition -//line sql.y:2374 +//line sql.y:2390 { yyLOCAL = &IndexDefinition{Info: yyDollar[1].indexInfoUnion(), Columns: yyDollar[3].indexColumnsUnion(), Options: yyDollar[5].indexOptionsUnion()} } yyVAL.union = yyLOCAL - case 389: + case 392: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2379 +//line sql.y:2395 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 390: + case 393: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2383 +//line sql.y:2399 { yyLOCAL = yyDollar[1].indexOptionsUnion() } yyVAL.union = yyLOCAL - case 391: + case 394: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2389 +//line sql.y:2405 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL - case 392: + case 395: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2393 +//line sql.y:2409 { yySLICE := (*[]*IndexOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexOptionUnion()) } - case 393: + case 396: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2399 +//line sql.y:2415 { yyLOCAL = yyDollar[1].indexOptionUnion() } yyVAL.union = yyLOCAL - case 394: + case 397: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2403 +//line sql.y:2419 { // should not be string yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 395: + case 398: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2408 +//line sql.y:2424 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 396: + case 399: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2412 +//line sql.y:2428 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 397: + case 400: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2416 +//line sql.y:2432 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 398: + case 401: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2420 +//line sql.y:2436 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str) + " " + string(yyDollar[2].str), String: yyDollar[3].identifierCI.String()} } yyVAL.union = yyLOCAL - case 399: + case 402: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2424 +//line sql.y:2440 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 400: + case 403: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2428 +//line sql.y:2444 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 401: + case 404: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2434 +//line sql.y:2450 { yyVAL.str = "" } - case 402: + case 405: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2438 +//line sql.y:2454 { yyVAL.str = string(yyDollar[1].str) } - case 403: + case 406: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2444 +//line sql.y:2460 { yyLOCAL = &IndexInfo{Type: IndexTypePrimary, ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI("PRIMARY")} } yyVAL.union = yyLOCAL - case 404: + case 407: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2448 +//line sql.y:2464 { yyLOCAL = &IndexInfo{Type: IndexTypeSpatial, Name: NewIdentifierCI(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 405: + case 408: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2452 +//line sql.y:2468 { yyLOCAL = &IndexInfo{Type: IndexTypeFullText, Name: NewIdentifierCI(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 406: + case 409: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2456 +//line sql.y:2472 { yyLOCAL = &IndexInfo{Type: IndexTypeUnique, ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 407: + case 410: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2460 +//line sql.y:2476 { yyLOCAL = &IndexInfo{Type: IndexTypeDefault, Name: NewIdentifierCI(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 408: + case 411: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2465 +//line sql.y:2481 { yyVAL.str = "" } - case 409: + case 412: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2469 +//line sql.y:2485 { yyVAL.str = yyDollar[2].str } - case 410: + case 413: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2475 +//line sql.y:2491 { yyVAL.str = string(yyDollar[1].str) } - case 411: + case 414: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2479 +//line sql.y:2495 { yyVAL.str = string(yyDollar[1].str) } - case 412: + case 415: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2483 +//line sql.y:2499 { yyVAL.str = string(yyDollar[1].str) } - case 413: + case 416: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2489 +//line sql.y:2505 { yyVAL.str = string(yyDollar[1].str) } - case 414: + case 417: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2493 +//line sql.y:2509 { yyVAL.str = string(yyDollar[1].str) } - case 415: + case 418: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2498 +//line sql.y:2514 { yyVAL.str = "" } - case 416: + case 419: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2502 +//line sql.y:2518 { yyVAL.str = yyDollar[1].str } - case 417: + case 420: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2508 +//line sql.y:2524 { yyVAL.str = string(yyDollar[1].str) } - case 418: + case 421: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2512 +//line sql.y:2528 { yyVAL.str = string(yyDollar[1].str) } - case 419: + case 422: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2517 +//line sql.y:2533 { yyVAL.str = "" } - case 420: + case 423: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2521 +//line sql.y:2537 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } - case 421: + case 424: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexColumn -//line sql.y:2527 +//line sql.y:2543 { yyLOCAL = []*IndexColumn{yyDollar[1].indexColumnUnion()} } yyVAL.union = yyLOCAL - case 422: + case 425: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2531 +//line sql.y:2547 { yySLICE := (*[]*IndexColumn)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].indexColumnUnion()) } - case 423: + case 426: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexColumn -//line sql.y:2537 +//line sql.y:2553 { yyLOCAL = &IndexColumn{Column: yyDollar[1].identifierCI, Length: yyDollar[2].intPtrUnion(), Direction: yyDollar[3].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 424: + case 427: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexColumn -//line sql.y:2541 +//line sql.y:2557 { yyLOCAL = &IndexColumn{Expression: yyDollar[2].exprUnion(), Direction: yyDollar[4].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 425: + case 428: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2547 +//line sql.y:2563 { yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()} } yyVAL.union = yyLOCAL - case 426: + case 429: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2551 +//line sql.y:2567 { yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()} } yyVAL.union = yyLOCAL - case 427: + case 430: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2557 +//line sql.y:2573 { yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()} } yyVAL.union = yyLOCAL - case 428: + case 431: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2561 +//line sql.y:2577 { yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()} } yyVAL.union = yyLOCAL - case 429: + case 432: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL ConstraintInfo -//line sql.y:2567 +//line sql.y:2583 { yyLOCAL = &ForeignKeyDefinition{IndexName: NewIdentifierCI(yyDollar[3].str), Source: yyDollar[5].columnsUnion(), ReferenceDefinition: yyDollar[7].referenceDefinitionUnion()} } yyVAL.union = yyLOCAL - case 430: + case 433: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2573 +//line sql.y:2589 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion()} } yyVAL.union = yyLOCAL - case 431: + case 434: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2577 +//line sql.y:2593 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion()} } yyVAL.union = yyLOCAL - case 432: + case 435: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2581 +//line sql.y:2597 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion()} } yyVAL.union = yyLOCAL - case 433: + case 436: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2585 +//line sql.y:2601 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion(), OnUpdate: yyDollar[8].referenceActionUnion()} } yyVAL.union = yyLOCAL - case 434: + case 437: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2589 +//line sql.y:2605 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion(), OnDelete: yyDollar[8].referenceActionUnion()} } yyVAL.union = yyLOCAL - case 435: + case 438: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2594 +//line sql.y:2610 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 436: + case 439: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2598 +//line sql.y:2614 { yyLOCAL = yyDollar[1].referenceDefinitionUnion() } yyVAL.union = yyLOCAL - case 437: + case 440: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL ConstraintInfo -//line sql.y:2604 +//line sql.y:2620 { yyLOCAL = &CheckConstraintDefinition{Expr: yyDollar[3].exprUnion(), Enforced: yyDollar[5].booleanUnion()} } yyVAL.union = yyLOCAL - case 438: + case 441: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2610 +//line sql.y:2626 { yyLOCAL = yyDollar[2].matchActionUnion() } yyVAL.union = yyLOCAL - case 439: + case 442: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2616 +//line sql.y:2632 { yyLOCAL = Full } yyVAL.union = yyLOCAL - case 440: + case 443: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2620 +//line sql.y:2636 { yyLOCAL = Partial } yyVAL.union = yyLOCAL - case 441: + case 444: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2624 +//line sql.y:2640 { yyLOCAL = Simple } yyVAL.union = yyLOCAL - case 442: + case 445: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2629 +//line sql.y:2645 { yyLOCAL = DefaultMatch } yyVAL.union = yyLOCAL - case 443: + case 446: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2633 +//line sql.y:2649 { yyLOCAL = yyDollar[1].matchActionUnion() } yyVAL.union = yyLOCAL - case 444: + case 447: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2639 +//line sql.y:2655 { yyLOCAL = yyDollar[3].referenceActionUnion() } yyVAL.union = yyLOCAL - case 445: + case 448: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2645 +//line sql.y:2661 { yyLOCAL = yyDollar[3].referenceActionUnion() } yyVAL.union = yyLOCAL - case 446: + case 449: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2651 +//line sql.y:2667 { yyLOCAL = Restrict } yyVAL.union = yyLOCAL - case 447: + case 450: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2655 +//line sql.y:2671 { yyLOCAL = Cascade } yyVAL.union = yyLOCAL - case 448: + case 451: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2659 +//line sql.y:2675 { yyLOCAL = NoAction } yyVAL.union = yyLOCAL - case 449: + case 452: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2663 +//line sql.y:2679 { yyLOCAL = SetDefault } yyVAL.union = yyLOCAL - case 450: + case 453: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2667 +//line sql.y:2683 { yyLOCAL = SetNull } yyVAL.union = yyLOCAL - case 451: + case 454: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2672 +//line sql.y:2688 { yyVAL.str = "" } - case 452: + case 455: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2676 +//line sql.y:2692 { yyVAL.str = string(yyDollar[1].str) } - case 453: + case 456: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2680 +//line sql.y:2696 { yyVAL.str = string(yyDollar[1].str) } - case 454: + case 457: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2686 +//line sql.y:2702 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 455: + case 458: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:2690 +//line sql.y:2706 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 456: + case 459: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2695 +//line sql.y:2711 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 457: + case 460: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2699 +//line sql.y:2715 { yyLOCAL = yyDollar[1].booleanUnion() } yyVAL.union = yyLOCAL - case 458: + case 461: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2704 +//line sql.y:2720 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 459: + case 462: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2708 +//line sql.y:2724 { yyLOCAL = yyDollar[1].tableOptionsUnion() } yyVAL.union = yyLOCAL - case 460: + case 463: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2714 +//line sql.y:2730 { yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()} } yyVAL.union = yyLOCAL - case 461: + case 464: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2718 +//line sql.y:2734 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableOptionUnion()) } - case 462: + case 465: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2722 +//line sql.y:2738 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion()) } - case 463: + case 466: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2728 +//line sql.y:2744 { yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()} } yyVAL.union = yyLOCAL - case 464: + case 467: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2732 +//line sql.y:2748 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion()) } - case 465: + case 468: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2738 +//line sql.y:2754 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 466: + case 469: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2742 +//line sql.y:2758 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 467: + case 470: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2746 +//line sql.y:2762 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 468: + case 471: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2750 +//line sql.y:2766 { yyLOCAL = &TableOption{Name: (string(yyDollar[2].str)), String: yyDollar[4].str, CaseSensitive: true} } yyVAL.union = yyLOCAL - case 469: + case 472: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2754 +//line sql.y:2770 { yyLOCAL = &TableOption{Name: string(yyDollar[2].str), String: yyDollar[4].str, CaseSensitive: true} } yyVAL.union = yyLOCAL - case 470: + case 473: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2758 +//line sql.y:2774 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 471: + case 474: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2762 +//line sql.y:2778 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 472: + case 475: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2766 +//line sql.y:2782 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 473: + case 476: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2770 +//line sql.y:2786 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 474: + case 477: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2774 +//line sql.y:2790 { yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 475: + case 478: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2778 +//line sql.y:2794 { yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 476: + case 479: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2782 +//line sql.y:2798 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 477: + case 480: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2786 +//line sql.y:2802 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 478: + case 481: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2790 +//line sql.y:2806 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: yyDollar[3].identifierCS.String(), CaseSensitive: true} } yyVAL.union = yyLOCAL - case 479: + case 482: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2794 +//line sql.y:2810 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 480: + case 483: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2798 +//line sql.y:2814 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 481: + case 484: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2802 +//line sql.y:2818 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 482: + case 485: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2806 +//line sql.y:2822 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 483: + case 486: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2810 +//line sql.y:2826 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 484: + case 487: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2814 +//line sql.y:2830 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 485: + case 488: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2818 +//line sql.y:2834 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 486: + case 489: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2822 +//line sql.y:2838 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 487: + case 490: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2826 +//line sql.y:2842 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 488: + case 491: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2830 +//line sql.y:2846 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 489: + case 492: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2834 +//line sql.y:2850 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 490: + case 493: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2838 +//line sql.y:2854 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 491: + case 494: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2842 +//line sql.y:2858 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 492: + case 495: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2846 +//line sql.y:2862 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 493: + case 496: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2850 +//line sql.y:2866 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 494: + case 497: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2854 +//line sql.y:2870 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: (yyDollar[3].identifierCI.String() + yyDollar[4].str), CaseSensitive: true} } yyVAL.union = yyLOCAL - case 495: + case 498: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2858 +//line sql.y:2874 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Tables: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL - case 496: + case 499: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2863 +//line sql.y:2879 { yyVAL.str = "" } - case 497: + case 500: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2867 +//line sql.y:2883 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 498: + case 501: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2871 +//line sql.y:2887 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 508: + case 511: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2890 +//line sql.y:2906 { yyVAL.str = String(TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}) } - case 509: + case 512: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2894 +//line sql.y:2910 { yyVAL.str = yyDollar[1].identifierCI.String() } - case 510: + case 513: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2898 +//line sql.y:2914 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 511: + case 514: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2902 +//line sql.y:2918 { yyVAL.str = string(yyDollar[1].str) } - case 512: + case 515: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2907 +//line sql.y:2923 { yyVAL.str = "" } - case 514: + case 517: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2913 +//line sql.y:2929 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 515: + case 518: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2917 +//line sql.y:2933 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 516: + case 519: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColName -//line sql.y:2922 +//line sql.y:2938 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 517: + case 520: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColName -//line sql.y:2926 +//line sql.y:2942 { yyLOCAL = yyDollar[2].colNameUnion() } yyVAL.union = yyLOCAL - case 518: + case 521: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2931 +//line sql.y:2947 { yyVAL.str = "" } - case 519: + case 522: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2935 +//line sql.y:2951 { yyVAL.str = string(yyDollar[2].str) } - case 520: + case 523: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Literal -//line sql.y:2940 +//line sql.y:2956 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 521: + case 524: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Literal -//line sql.y:2944 +//line sql.y:2960 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 522: + case 525: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Literal -//line sql.y:2948 +//line sql.y:2964 { yyLOCAL = NewDecimalLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 523: + case 526: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2953 +//line sql.y:2969 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 524: + case 527: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2957 +//line sql.y:2973 { yyLOCAL = yyDollar[1].alterOptionsUnion() } yyVAL.union = yyLOCAL - case 525: + case 528: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2961 +//line sql.y:2977 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &OrderByOption{Cols: yyDollar[5].columnsUnion()}) } - case 526: + case 529: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2965 +//line sql.y:2981 { yyLOCAL = yyDollar[1].alterOptionsUnion() } yyVAL.union = yyLOCAL - case 527: + case 530: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2969 +//line sql.y:2985 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionsUnion()...) } - case 528: + case 531: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2973 +//line sql.y:2989 { yyLOCAL = append(append(yyDollar[1].alterOptionsUnion(), yyDollar[3].alterOptionsUnion()...), &OrderByOption{Cols: yyDollar[7].columnsUnion()}) } yyVAL.union = yyLOCAL - case 529: + case 532: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2979 +//line sql.y:2995 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 530: + case 533: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2983 +//line sql.y:2999 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) } - case 531: + case 534: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2987 +//line sql.y:3003 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) } - case 532: + case 535: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2993 +//line sql.y:3009 { yyLOCAL = yyDollar[1].tableOptionsUnion() } yyVAL.union = yyLOCAL - case 533: + case 536: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2997 +//line sql.y:3013 { yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()} } yyVAL.union = yyLOCAL - case 534: + case 537: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3001 +//line sql.y:3017 { yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()} } yyVAL.union = yyLOCAL - case 535: + case 538: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3005 +//line sql.y:3021 { yyLOCAL = &AddIndexDefinition{IndexDefinition: yyDollar[2].indexDefinitionUnion()} } yyVAL.union = yyLOCAL - case 536: + case 539: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3009 +//line sql.y:3025 { yyLOCAL = &AddColumns{Columns: yyDollar[4].columnDefinitionsUnion()} } yyVAL.union = yyLOCAL - case 537: + case 540: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3013 +//line sql.y:3029 { yyLOCAL = &AddColumns{Columns: []*ColumnDefinition{yyDollar[3].columnDefinitionUnion()}, First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()} } yyVAL.union = yyLOCAL - case 538: + case 541: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3017 +//line sql.y:3033 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: true} } yyVAL.union = yyLOCAL - case 539: + case 542: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3021 +//line sql.y:3037 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[6].exprUnion(), DefaultLiteral: true} } yyVAL.union = yyLOCAL - case 540: + case 543: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3025 +//line sql.y:3041 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 541: + case 544: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3029 +//line sql.y:3045 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: ptr.Of(false)} } yyVAL.union = yyLOCAL - case 542: + case 545: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3033 +//line sql.y:3049 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: ptr.Of(true)} } yyVAL.union = yyLOCAL - case 543: + case 546: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3037 +//line sql.y:3053 { yyLOCAL = &AlterCheck{Name: yyDollar[3].identifierCI, Enforced: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 544: + case 547: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3041 +//line sql.y:3057 { yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: false} } yyVAL.union = yyLOCAL - case 545: + case 548: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3045 +//line sql.y:3061 { yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: true} } yyVAL.union = yyLOCAL - case 546: + case 549: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3049 +//line sql.y:3065 { yyLOCAL = &ChangeColumn{OldColumn: yyDollar[3].colNameUnion(), NewColDefinition: yyDollar[4].columnDefinitionUnion(), First: yyDollar[5].booleanUnion(), After: yyDollar[6].colNameUnion()} } yyVAL.union = yyLOCAL - case 547: + case 550: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3053 +//line sql.y:3069 { yyLOCAL = &ModifyColumn{NewColDefinition: yyDollar[3].columnDefinitionUnion(), First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()} } yyVAL.union = yyLOCAL - case 548: + case 551: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3057 +//line sql.y:3073 { yyLOCAL = &RenameColumn{OldName: yyDollar[3].colNameUnion(), NewName: yyDollar[5].colNameUnion()} } yyVAL.union = yyLOCAL - case 549: + case 552: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3061 +//line sql.y:3077 { yyLOCAL = &AlterCharset{CharacterSet: yyDollar[4].str, Collate: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 550: + case 553: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3065 +//line sql.y:3081 { yyLOCAL = &KeyState{Enable: false} } yyVAL.union = yyLOCAL - case 551: + case 554: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3069 +//line sql.y:3085 { yyLOCAL = &KeyState{Enable: true} } yyVAL.union = yyLOCAL - case 552: + case 555: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3073 +//line sql.y:3089 { yyLOCAL = &TablespaceOperation{Import: false} } yyVAL.union = yyLOCAL - case 553: + case 556: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3077 +//line sql.y:3093 { yyLOCAL = &TablespaceOperation{Import: true} } yyVAL.union = yyLOCAL - case 554: + case 557: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3081 +//line sql.y:3097 { yyLOCAL = &DropColumn{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL - case 555: + case 558: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3085 +//line sql.y:3101 { yyLOCAL = &DropKey{Type: NormalKeyType, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 556: + case 559: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3089 +//line sql.y:3105 { yyLOCAL = &DropKey{Type: PrimaryKeyType} } yyVAL.union = yyLOCAL - case 557: + case 560: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3093 +//line sql.y:3109 { yyLOCAL = &DropKey{Type: ForeignKeyType, Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 558: + case 561: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3097 +//line sql.y:3113 { yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 559: + case 562: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3101 +//line sql.y:3117 { yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 560: + case 563: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3105 +//line sql.y:3121 { yyLOCAL = &Force{} } yyVAL.union = yyLOCAL - case 561: + case 564: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3109 +//line sql.y:3125 { yyLOCAL = &RenameTableName{Table: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 562: + case 565: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3113 +//line sql.y:3129 { yyLOCAL = &RenameIndex{OldName: yyDollar[3].identifierCI, NewName: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 563: + case 566: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:3119 +//line sql.y:3135 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 564: + case 567: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3123 +//line sql.y:3139 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) } - case 565: + case 568: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3129 +//line sql.y:3145 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } yyVAL.union = yyLOCAL - case 566: + case 569: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3133 +//line sql.y:3149 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } yyVAL.union = yyLOCAL - case 567: + case 570: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3137 +//line sql.y:3153 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } yyVAL.union = yyLOCAL - case 568: + case 571: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3141 +//line sql.y:3157 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } yyVAL.union = yyLOCAL - case 569: + case 572: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3145 +//line sql.y:3161 { yyLOCAL = &LockOption{Type: DefaultType} } yyVAL.union = yyLOCAL - case 570: + case 573: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3149 +//line sql.y:3165 { yyLOCAL = &LockOption{Type: NoneType} } yyVAL.union = yyLOCAL - case 571: + case 574: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3153 +//line sql.y:3169 { yyLOCAL = &LockOption{Type: SharedType} } yyVAL.union = yyLOCAL - case 572: + case 575: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3157 +//line sql.y:3173 { yyLOCAL = &LockOption{Type: ExclusiveType} } yyVAL.union = yyLOCAL - case 573: + case 576: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3161 +//line sql.y:3177 { yyLOCAL = &Validation{With: true} } yyVAL.union = yyLOCAL - case 574: + case 577: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3165 +//line sql.y:3181 { yyLOCAL = &Validation{With: false} } yyVAL.union = yyLOCAL - case 575: + case 578: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3171 +//line sql.y:3187 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -14301,10 +14306,10 @@ yydefault: yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 576: + case 579: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3178 +//line sql.y:3194 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -14312,10 +14317,10 @@ yydefault: yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 577: + case 580: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3185 +//line sql.y:3201 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -14323,28 +14328,28 @@ yydefault: yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 578: + case 581: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:3192 +//line sql.y:3208 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().PartitionSpec = yyDollar[2].partSpecUnion() yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 579: + case 582: yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement -//line sql.y:3198 +//line sql.y:3214 { - yyLOCAL = &AlterView{ViewName: yyDollar[7].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].definerUnion(), Security: yyDollar[5].str, Columns: yyDollar[8].columnsUnion(), Select: yyDollar[10].selStmtUnion(), CheckOption: yyDollar[11].str} + yyLOCAL = &AlterView{ViewName: yyDollar[7].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].definerUnion(), Security: yyDollar[5].str, Columns: yyDollar[8].columnsUnion(), Select: yyDollar[10].tableStmtUnion(), CheckOption: yyDollar[11].str} } yyVAL.union = yyLOCAL - case 580: + case 583: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3208 +//line sql.y:3224 { yyDollar[1].alterDatabaseUnion().FullyParsed = true yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS @@ -14352,10 +14357,10 @@ yydefault: yyLOCAL = yyDollar[1].alterDatabaseUnion() } yyVAL.union = yyLOCAL - case 581: + case 584: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3215 +//line sql.y:3231 { yyDollar[1].alterDatabaseUnion().FullyParsed = true yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS @@ -14363,10 +14368,10 @@ yydefault: yyLOCAL = yyDollar[1].alterDatabaseUnion() } yyVAL.union = yyLOCAL - case 582: + case 585: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3222 +//line sql.y:3238 { yyLOCAL = &AlterVschema{ Action: CreateVindexDDLAction, @@ -14379,10 +14384,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 583: + case 586: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3234 +//line sql.y:3250 { yyLOCAL = &AlterVschema{ Action: DropVindexDDLAction, @@ -14393,26 +14398,26 @@ yydefault: } } yyVAL.union = yyLOCAL - case 584: + case 587: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3244 +//line sql.y:3260 { yyLOCAL = &AlterVschema{Action: AddVschemaTableDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL - case 585: + case 588: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3248 +//line sql.y:3264 { yyLOCAL = &AlterVschema{Action: DropVschemaTableDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL - case 586: + case 589: yyDollar = yyS[yypt-13 : yypt+1] var yyLOCAL Statement -//line sql.y:3252 +//line sql.y:3268 { yyLOCAL = &AlterVschema{ Action: AddColVindexDDLAction, @@ -14426,10 +14431,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 587: + case 590: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3265 +//line sql.y:3281 { yyLOCAL = &AlterVschema{ Action: DropColVindexDDLAction, @@ -14440,26 +14445,26 @@ yydefault: } } yyVAL.union = yyLOCAL - case 588: + case 591: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3275 +//line sql.y:3291 { yyLOCAL = &AlterVschema{Action: AddSequenceDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL - case 589: + case 592: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3279 +//line sql.y:3295 { yyLOCAL = &AlterVschema{Action: DropSequenceDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL - case 590: + case 593: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement -//line sql.y:3283 +//line sql.y:3299 { yyLOCAL = &AlterVschema{ Action: AddAutoIncDDLAction, @@ -14471,10 +14476,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 591: + case 594: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3294 +//line sql.y:3310 { yyLOCAL = &AlterVschema{ Action: DropAutoIncDDLAction, @@ -14482,10 +14487,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 592: + case 595: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3301 +//line sql.y:3317 { yyLOCAL = &AlterMigration{ Type: RetryMigrationType, @@ -14493,10 +14498,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 593: + case 596: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3308 +//line sql.y:3324 { yyLOCAL = &AlterMigration{ Type: CleanupMigrationType, @@ -14504,20 +14509,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 594: + case 597: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3315 +//line sql.y:3331 { yyLOCAL = &AlterMigration{ Type: CleanupAllMigrationType, } } yyVAL.union = yyLOCAL - case 595: + case 598: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3321 +//line sql.y:3337 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -14525,10 +14530,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 596: + case 599: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3328 +//line sql.y:3344 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -14537,20 +14542,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 597: + case 600: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3336 +//line sql.y:3352 { yyLOCAL = &AlterMigration{ Type: LaunchAllMigrationType, } } yyVAL.union = yyLOCAL - case 598: + case 601: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3342 +//line sql.y:3358 { yyLOCAL = &AlterMigration{ Type: CompleteMigrationType, @@ -14558,20 +14563,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 599: + case 602: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3349 +//line sql.y:3365 { yyLOCAL = &AlterMigration{ Type: CompleteAllMigrationType, } } yyVAL.union = yyLOCAL - case 600: + case 603: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3355 +//line sql.y:3371 { yyLOCAL = &AlterMigration{ Type: CancelMigrationType, @@ -14579,20 +14584,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 601: + case 604: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3362 +//line sql.y:3378 { yyLOCAL = &AlterMigration{ Type: CancelAllMigrationType, } } yyVAL.union = yyLOCAL - case 602: + case 605: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3368 +//line sql.y:3384 { yyLOCAL = &AlterMigration{ Type: ThrottleMigrationType, @@ -14602,10 +14607,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 603: + case 606: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3377 +//line sql.y:3393 { yyLOCAL = &AlterMigration{ Type: ThrottleAllMigrationType, @@ -14614,10 +14619,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 604: + case 607: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3385 +//line sql.y:3401 { yyLOCAL = &AlterMigration{ Type: UnthrottleMigrationType, @@ -14625,20 +14630,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 605: + case 608: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3392 +//line sql.y:3408 { yyLOCAL = &AlterMigration{ Type: UnthrottleAllMigrationType, } } yyVAL.union = yyLOCAL - case 606: + case 609: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3398 +//line sql.y:3414 { yyLOCAL = &AlterMigration{ Type: ForceCutOverMigrationType, @@ -14646,20 +14651,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 607: + case 610: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3405 +//line sql.y:3421 { yyLOCAL = &AlterMigration{ Type: ForceCutOverAllMigrationType, } } yyVAL.union = yyLOCAL - case 608: + case 611: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3411 +//line sql.y:3427 { yyLOCAL = &AlterMigration{ Type: SetCutOverThresholdMigrationType, @@ -14668,18 +14673,18 @@ yydefault: } } yyVAL.union = yyLOCAL - case 609: + case 612: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3420 +//line sql.y:3436 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 610: + case 613: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3424 +//line sql.y:3440 { yyDollar[3].partitionOptionUnion().Partitions = yyDollar[4].integerUnion() yyDollar[3].partitionOptionUnion().SubPartition = yyDollar[5].subPartitionUnion() @@ -14687,10 +14692,10 @@ yydefault: yyLOCAL = yyDollar[3].partitionOptionUnion() } yyVAL.union = yyLOCAL - case 611: + case 614: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3433 +//line sql.y:3449 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -14699,10 +14704,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 612: + case 615: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3441 +//line sql.y:3457 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -14712,10 +14717,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 613: + case 616: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3450 +//line sql.y:3466 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -14723,10 +14728,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 614: + case 617: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3457 +//line sql.y:3473 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -14734,18 +14739,18 @@ yydefault: } } yyVAL.union = yyLOCAL - case 615: + case 618: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3465 +//line sql.y:3481 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 616: + case 619: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3469 +//line sql.y:3485 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -14755,10 +14760,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 617: + case 620: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3478 +//line sql.y:3494 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -14769,678 +14774,678 @@ yydefault: } } yyVAL.union = yyLOCAL - case 618: + case 621: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3489 +//line sql.y:3505 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 619: + case 622: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3493 +//line sql.y:3509 { yyLOCAL = yyDollar[2].partDefsUnion() } yyVAL.union = yyLOCAL - case 620: + case 623: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3498 +//line sql.y:3514 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 621: + case 624: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3502 +//line sql.y:3518 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 622: + case 625: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3507 +//line sql.y:3523 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 623: + case 626: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3511 +//line sql.y:3527 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 624: + case 627: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL TableExpr -//line sql.y:3517 +//line sql.y:3533 { yyLOCAL = &JSONTableExpr{Expr: yyDollar[3].exprUnion(), Filter: yyDollar[5].exprUnion(), Columns: yyDollar[6].jtColumnListUnion(), Alias: yyDollar[8].identifierCS} } yyVAL.union = yyLOCAL - case 625: + case 628: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3523 +//line sql.y:3539 { yyLOCAL = yyDollar[3].jtColumnListUnion() } yyVAL.union = yyLOCAL - case 626: + case 629: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3529 +//line sql.y:3545 { yyLOCAL = []*JtColumnDefinition{yyDollar[1].jtColumnDefinitionUnion()} } yyVAL.union = yyLOCAL - case 627: + case 630: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3533 +//line sql.y:3549 { yySLICE := (*[]*JtColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jtColumnDefinitionUnion()) } - case 628: + case 631: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3539 +//line sql.y:3555 { yyLOCAL = &JtColumnDefinition{JtOrdinal: &JtOrdinalColDef{Name: yyDollar[1].identifierCI}} } yyVAL.union = yyLOCAL - case 629: + case 632: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3543 +//line sql.y:3559 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 630: + case 633: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3549 +//line sql.y:3565 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 631: + case 634: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3555 +//line sql.y:3571 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 632: + case 635: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3561 +//line sql.y:3577 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 633: + case 636: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3567 +//line sql.y:3583 { jtNestedPath := &JtNestedPathColDef{Path: yyDollar[3].exprUnion(), Columns: yyDollar[4].jtColumnListUnion()} yyLOCAL = &JtColumnDefinition{JtNestedPath: jtNestedPath} } yyVAL.union = yyLOCAL - case 634: + case 637: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3573 +//line sql.y:3589 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 635: + case 638: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3577 +//line sql.y:3593 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 636: + case 639: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3581 +//line sql.y:3597 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 637: + case 640: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3585 +//line sql.y:3601 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 638: + case 641: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3591 +//line sql.y:3607 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL - case 639: + case 642: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3597 +//line sql.y:3613 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL - case 640: + case 643: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3603 +//line sql.y:3619 { yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType} } yyVAL.union = yyLOCAL - case 641: + case 644: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3607 +//line sql.y:3623 { yyLOCAL = &JtOnResponse{ResponseType: NullJSONType} } yyVAL.union = yyLOCAL - case 642: + case 645: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3611 +//line sql.y:3627 { yyLOCAL = &JtOnResponse{ResponseType: DefaultJSONType, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 643: + case 646: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3617 +//line sql.y:3633 { yyLOCAL = RangeType } yyVAL.union = yyLOCAL - case 644: + case 647: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3621 +//line sql.y:3637 { yyLOCAL = ListType } yyVAL.union = yyLOCAL - case 645: + case 648: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3626 +//line sql.y:3642 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 646: + case 649: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3630 +//line sql.y:3646 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 647: + case 650: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3635 +//line sql.y:3651 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 648: + case 651: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3639 +//line sql.y:3655 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 649: + case 652: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3645 +//line sql.y:3661 { yyLOCAL = &PartitionSpec{Action: AddAction, Definitions: []*PartitionDefinition{yyDollar[4].partDefUnion()}} } yyVAL.union = yyLOCAL - case 650: + case 653: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3649 +//line sql.y:3665 { yyLOCAL = &PartitionSpec{Action: DropAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 651: + case 654: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3653 +//line sql.y:3669 { yyLOCAL = &PartitionSpec{Action: ReorganizeAction, Names: yyDollar[3].partitionsUnion(), Definitions: yyDollar[6].partDefsUnion()} } yyVAL.union = yyLOCAL - case 652: + case 655: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3657 +//line sql.y:3673 { yyLOCAL = &PartitionSpec{Action: DiscardAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 653: + case 656: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3661 +//line sql.y:3677 { yyLOCAL = &PartitionSpec{Action: DiscardAction, IsAll: true} } yyVAL.union = yyLOCAL - case 654: + case 657: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3665 +//line sql.y:3681 { yyLOCAL = &PartitionSpec{Action: ImportAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 655: + case 658: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3669 +//line sql.y:3685 { yyLOCAL = &PartitionSpec{Action: ImportAction, IsAll: true} } yyVAL.union = yyLOCAL - case 656: + case 659: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3673 +//line sql.y:3689 { yyLOCAL = &PartitionSpec{Action: TruncateAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 657: + case 660: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3677 +//line sql.y:3693 { yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true} } yyVAL.union = yyLOCAL - case 658: + case 661: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3681 +//line sql.y:3697 { yyLOCAL = &PartitionSpec{Action: CoalesceAction, Number: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 659: + case 662: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3685 +//line sql.y:3701 { yyLOCAL = &PartitionSpec{Action: ExchangeAction, Names: Partitions{yyDollar[3].identifierCI}, TableName: yyDollar[6].tableName, WithoutValidation: yyDollar[7].booleanUnion()} } yyVAL.union = yyLOCAL - case 660: + case 663: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3689 +//line sql.y:3705 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 661: + case 664: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3693 +//line sql.y:3709 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, IsAll: true} } yyVAL.union = yyLOCAL - case 662: + case 665: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3697 +//line sql.y:3713 { yyLOCAL = &PartitionSpec{Action: CheckAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 663: + case 666: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3701 +//line sql.y:3717 { yyLOCAL = &PartitionSpec{Action: CheckAction, IsAll: true} } yyVAL.union = yyLOCAL - case 664: + case 667: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3705 +//line sql.y:3721 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 665: + case 668: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3709 +//line sql.y:3725 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, IsAll: true} } yyVAL.union = yyLOCAL - case 666: + case 669: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3713 +//line sql.y:3729 { yyLOCAL = &PartitionSpec{Action: RebuildAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 667: + case 670: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3717 +//line sql.y:3733 { yyLOCAL = &PartitionSpec{Action: RebuildAction, IsAll: true} } yyVAL.union = yyLOCAL - case 668: + case 671: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3721 +//line sql.y:3737 { yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 669: + case 672: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3725 +//line sql.y:3741 { yyLOCAL = &PartitionSpec{Action: RepairAction, IsAll: true} } yyVAL.union = yyLOCAL - case 670: + case 673: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3729 +//line sql.y:3745 { yyLOCAL = &PartitionSpec{Action: UpgradeAction} } yyVAL.union = yyLOCAL - case 671: + case 674: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3734 +//line sql.y:3750 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 672: + case 675: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3738 +//line sql.y:3754 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 673: + case 676: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3742 +//line sql.y:3758 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 674: + case 677: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3748 +//line sql.y:3764 { yyLOCAL = []*PartitionDefinition{yyDollar[1].partDefUnion()} } yyVAL.union = yyLOCAL - case 675: + case 678: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3752 +//line sql.y:3768 { yySLICE := (*[]*PartitionDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].partDefUnion()) } - case 676: + case 679: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3758 +//line sql.y:3774 { yyVAL.partDefUnion().Options = yyDollar[2].partitionDefinitionOptionsUnion() } - case 677: + case 680: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3763 +//line sql.y:3779 { yyLOCAL = &PartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 678: + case 681: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3767 +//line sql.y:3783 { yyDollar[1].partitionDefinitionOptionsUnion().ValueRange = yyDollar[2].partitionValueRangeUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 679: + case 682: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3772 +//line sql.y:3788 { yyDollar[1].partitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 680: + case 683: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3777 +//line sql.y:3793 { yyDollar[1].partitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 681: + case 684: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3782 +//line sql.y:3798 { yyDollar[1].partitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 682: + case 685: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3787 +//line sql.y:3803 { yyDollar[1].partitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 683: + case 686: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3792 +//line sql.y:3808 { yyDollar[1].partitionDefinitionOptionsUnion().MaxRows = ptr.Of(yyDollar[2].integerUnion()) yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 684: + case 687: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3797 +//line sql.y:3813 { yyDollar[1].partitionDefinitionOptionsUnion().MinRows = ptr.Of(yyDollar[2].integerUnion()) yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 685: + case 688: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3802 +//line sql.y:3818 { yyDollar[1].partitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 686: + case 689: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3807 +//line sql.y:3823 { yyDollar[1].partitionDefinitionOptionsUnion().SubPartitionDefinitions = yyDollar[2].subPartitionDefinitionsUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 687: + case 690: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:3813 +//line sql.y:3829 { yyLOCAL = yyDollar[2].subPartitionDefinitionsUnion() } yyVAL.union = yyLOCAL - case 688: + case 691: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:3819 +//line sql.y:3835 { yyLOCAL = SubPartitionDefinitions{yyDollar[1].subPartitionDefinitionUnion()} } yyVAL.union = yyLOCAL - case 689: + case 692: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3823 +//line sql.y:3839 { yySLICE := (*SubPartitionDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].subPartitionDefinitionUnion()) } - case 690: + case 693: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SubPartitionDefinition -//line sql.y:3829 +//line sql.y:3845 { yyLOCAL = &SubPartitionDefinition{Name: yyDollar[2].identifierCI, Options: yyDollar[3].subPartitionDefinitionOptionsUnion()} } yyVAL.union = yyLOCAL - case 691: + case 694: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3834 +//line sql.y:3850 { yyLOCAL = &SubPartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 692: + case 695: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3838 +//line sql.y:3854 { yyDollar[1].subPartitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 693: + case 696: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3843 +//line sql.y:3859 { yyDollar[1].subPartitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 694: + case 697: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3848 +//line sql.y:3864 { yyDollar[1].subPartitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 695: + case 698: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3853 +//line sql.y:3869 { yyDollar[1].subPartitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 696: + case 699: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3858 +//line sql.y:3874 { yyDollar[1].subPartitionDefinitionOptionsUnion().MaxRows = ptr.Of(yyDollar[2].integerUnion()) yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 697: + case 700: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3863 +//line sql.y:3879 { yyDollar[1].subPartitionDefinitionOptionsUnion().MinRows = ptr.Of(yyDollar[2].integerUnion()) yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 698: + case 701: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3868 +//line sql.y:3884 { yyDollar[1].subPartitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 699: + case 702: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3875 +//line sql.y:3891 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -15448,10 +15453,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 700: + case 703: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3882 +//line sql.y:3898 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -15459,10 +15464,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 701: + case 704: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3889 +//line sql.y:3905 { yyLOCAL = &PartitionValueRange{ Type: InType, @@ -15470,131 +15475,131 @@ yydefault: } } yyVAL.union = yyLOCAL - case 702: + case 705: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3897 +//line sql.y:3913 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 703: + case 706: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3901 +//line sql.y:3917 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 704: + case 707: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionEngine -//line sql.y:3907 +//line sql.y:3923 { yyLOCAL = &PartitionEngine{Storage: yyDollar[1].booleanUnion(), Name: yyDollar[4].identifierCS.String()} } yyVAL.union = yyLOCAL - case 705: + case 708: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Literal -//line sql.y:3913 +//line sql.y:3929 { yyLOCAL = NewStrLiteral(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 706: + case 709: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:3919 +//line sql.y:3935 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 707: + case 710: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:3925 +//line sql.y:3941 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 708: + case 711: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3931 +//line sql.y:3947 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 709: + case 712: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3937 +//line sql.y:3953 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 710: + case 713: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3943 +//line sql.y:3959 { yyVAL.str = yyDollar[3].identifierCS.String() } - case 711: + case 714: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinition -//line sql.y:3949 +//line sql.y:3965 { yyLOCAL = &PartitionDefinition{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 712: + case 715: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3955 +//line sql.y:3971 { yyVAL.str = "" } - case 713: + case 716: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3959 +//line sql.y:3975 { yyVAL.str = "" } - case 714: + case 717: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3965 +//line sql.y:3981 { yyLOCAL = &RenameTable{TablePairs: yyDollar[3].renameTablePairsUnion()} } yyVAL.union = yyLOCAL - case 715: + case 718: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*RenameTablePair -//line sql.y:3971 +//line sql.y:3987 { yyLOCAL = []*RenameTablePair{{FromTable: yyDollar[1].tableName, ToTable: yyDollar[3].tableName}} } yyVAL.union = yyLOCAL - case 716: + case 719: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3975 +//line sql.y:3991 { yySLICE := (*[]*RenameTablePair)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &RenameTablePair{FromTable: yyDollar[3].tableName, ToTable: yyDollar[5].tableName}) } - case 717: + case 720: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3981 +//line sql.y:3997 { yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()} } yyVAL.union = yyLOCAL - case 718: + case 721: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3985 +//line sql.y:4001 { // Change this to an alter statement if yyDollar[4].identifierCI.Lowered() == "primary" { @@ -15604,1377 +15609,1377 @@ yydefault: } } yyVAL.union = yyLOCAL - case 719: + case 722: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3994 +//line sql.y:4010 { yyLOCAL = &DropView{FromTables: yyDollar[5].tableNamesUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 720: + case 723: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3998 +//line sql.y:4014 { yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 721: + case 724: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4004 +//line sql.y:4020 { yyLOCAL = &TruncateTable{Table: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 722: + case 725: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4008 +//line sql.y:4024 { yyLOCAL = &TruncateTable{Table: yyDollar[2].tableName} } yyVAL.union = yyLOCAL - case 723: + case 726: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4014 +//line sql.y:4030 { yyLOCAL = &Analyze{IsLocal: yyDollar[2].booleanUnion(), Table: yyDollar[4].tableName} } yyVAL.union = yyLOCAL - case 724: + case 727: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4020 +//line sql.y:4036 { yyLOCAL = &PurgeBinaryLogs{To: string(yyDollar[5].str)} } yyVAL.union = yyLOCAL - case 725: + case 728: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4024 +//line sql.y:4040 { yyLOCAL = &PurgeBinaryLogs{Before: string(yyDollar[5].str)} } yyVAL.union = yyLOCAL - case 726: + case 729: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4030 +//line sql.y:4046 { yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 727: + case 730: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4034 +//line sql.y:4050 { yyLOCAL = &Show{&ShowBasic{Command: Collation, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 728: + case 731: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4038 +//line sql.y:4054 { yyLOCAL = &Show{&ShowBasic{Full: yyDollar[2].booleanUnion(), Command: Column, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 729: + case 732: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4042 +//line sql.y:4058 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 730: + case 733: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4046 +//line sql.y:4062 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 731: + case 734: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4050 +//line sql.y:4066 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 732: + case 735: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4054 +//line sql.y:4070 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 733: + case 736: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4058 +//line sql.y:4074 { yyLOCAL = &Show{&ShowBasic{Command: Function, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 734: + case 737: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4062 +//line sql.y:4078 { yyLOCAL = &Show{&ShowBasic{Command: Index, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 735: + case 738: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4066 +//line sql.y:4082 { yyLOCAL = &Show{&ShowBasic{Command: OpenTable, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 736: + case 739: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4070 +//line sql.y:4086 { yyLOCAL = &Show{&ShowBasic{Command: Privilege}} } yyVAL.union = yyLOCAL - case 737: + case 740: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4074 +//line sql.y:4090 { yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 738: + case 741: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4078 +//line sql.y:4094 { yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 739: + case 742: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4082 +//line sql.y:4098 { yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 740: + case 743: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4086 +//line sql.y:4102 { yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 741: + case 744: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4090 +//line sql.y:4106 { yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 742: + case 745: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4094 +//line sql.y:4110 { yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 743: + case 746: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4098 +//line sql.y:4114 { yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 744: + case 747: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4102 +//line sql.y:4118 { yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 745: + case 748: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4106 +//line sql.y:4122 { yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 746: + case 749: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4110 +//line sql.y:4126 { yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 747: + case 750: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4114 +//line sql.y:4130 { yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 748: + case 751: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4118 +//line sql.y:4134 { yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 749: + case 752: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4122 +//line sql.y:4138 { yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 750: + case 753: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4126 +//line sql.y:4142 { yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 751: + case 754: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4130 +//line sql.y:4146 { yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 752: + case 755: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4134 +//line sql.y:4150 { yyLOCAL = &Show{&ShowBasic{Command: Engines}} } yyVAL.union = yyLOCAL - case 753: + case 756: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4138 +//line sql.y:4154 { yyLOCAL = &Show{&ShowBasic{Command: Plugins}} } yyVAL.union = yyLOCAL - case 754: + case 757: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4142 +//line sql.y:4158 { yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL - case 755: + case 758: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4146 +//line sql.y:4162 { yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL - case 756: + case 759: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4150 +//line sql.y:4166 { yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 757: + case 760: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4154 +//line sql.y:4170 { yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 758: + case 761: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4158 +//line sql.y:4174 { yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 759: + case 762: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4162 +//line sql.y:4178 { yyLOCAL = &ShowThrottledApps{} } yyVAL.union = yyLOCAL - case 760: + case 763: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4166 +//line sql.y:4182 { yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 761: + case 764: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4170 +//line sql.y:4186 { yyLOCAL = &ShowThrottlerStatus{} } yyVAL.union = yyLOCAL - case 762: + case 765: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4174 +//line sql.y:4190 { yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} } yyVAL.union = yyLOCAL - case 763: + case 766: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4178 +//line sql.y:4194 { yyLOCAL = &Show{&ShowBasic{Command: VschemaKeyspaces}} } yyVAL.union = yyLOCAL - case 764: + case 767: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4182 +//line sql.y:4198 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}} } yyVAL.union = yyLOCAL - case 765: + case 768: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4186 +//line sql.y:4202 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}} } yyVAL.union = yyLOCAL - case 766: + case 769: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4190 +//line sql.y:4206 { yyLOCAL = &Show{&ShowBasic{Command: Warnings}} } yyVAL.union = yyLOCAL - case 767: + case 770: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4194 +//line sql.y:4210 { yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 768: + case 771: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4198 +//line sql.y:4214 { yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 769: + case 772: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4202 +//line sql.y:4218 { yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}} } yyVAL.union = yyLOCAL - case 770: + case 773: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4209 +//line sql.y:4225 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}} } yyVAL.union = yyLOCAL - case 771: + case 774: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4213 +//line sql.y:4229 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 772: + case 775: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4217 +//line sql.y:4233 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} } yyVAL.union = yyLOCAL - case 773: + case 776: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4221 +//line sql.y:4237 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 774: + case 777: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4225 +//line sql.y:4241 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 775: + case 778: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4229 +//line sql.y:4245 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 776: + case 779: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4233 +//line sql.y:4249 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 777: + case 780: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4237 +//line sql.y:4253 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 778: + case 781: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4241 +//line sql.y:4257 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 779: + case 782: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4245 +//line sql.y:4261 { yyLOCAL = &Show{&ShowTransactionStatus{TransactionID: string(yyDollar[5].str)}} } yyVAL.union = yyLOCAL - case 780: + case 783: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4249 +//line sql.y:4265 { yyLOCAL = &Show{&ShowTransactionStatus{}} } yyVAL.union = yyLOCAL - case 781: + case 784: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4253 +//line sql.y:4269 { yyLOCAL = &Show{&ShowTransactionStatus{Keyspace: yyDollar[5].identifierCS.String()}} } yyVAL.union = yyLOCAL - case 782: + case 785: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4258 +//line sql.y:4274 { } - case 783: + case 786: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4260 +//line sql.y:4276 { } - case 784: + case 787: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4264 +//line sql.y:4280 { yyVAL.str = "" } - case 785: + case 788: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4268 +//line sql.y:4284 { yyVAL.str = "extended " } - case 786: + case 789: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4274 +//line sql.y:4290 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 787: + case 790: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4278 +//line sql.y:4294 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 788: + case 791: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4284 +//line sql.y:4300 { yyVAL.str = string(yyDollar[1].str) } - case 789: + case 792: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4288 +//line sql.y:4304 { yyVAL.str = string(yyDollar[1].str) } - case 790: + case 793: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4294 +//line sql.y:4310 { yyVAL.identifierCS = NewIdentifierCS("") } - case 791: + case 794: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4298 +//line sql.y:4314 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 792: + case 795: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4302 +//line sql.y:4318 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 793: + case 796: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4308 +//line sql.y:4324 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 794: + case 797: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4312 +//line sql.y:4328 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 795: + case 798: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4316 +//line sql.y:4332 { yyLOCAL = &ShowFilter{Filter: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 796: + case 799: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4322 +//line sql.y:4338 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 797: + case 800: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4326 +//line sql.y:4342 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 798: + case 801: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4332 +//line sql.y:4348 { yyVAL.empty = struct{}{} } - case 799: + case 802: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4336 +//line sql.y:4352 { yyVAL.empty = struct{}{} } - case 800: + case 803: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4340 +//line sql.y:4356 { yyVAL.empty = struct{}{} } - case 801: + case 804: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4346 +//line sql.y:4362 { yyVAL.str = string(yyDollar[1].str) } - case 802: + case 805: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4350 +//line sql.y:4366 { yyVAL.str = string(yyDollar[1].str) } - case 803: + case 806: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4356 +//line sql.y:4372 { yyLOCAL = &Use{DBName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL - case 804: + case 807: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4360 +//line sql.y:4376 { yyLOCAL = &Use{DBName: IdentifierCS{v: ""}} } yyVAL.union = yyLOCAL - case 805: + case 808: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4364 +//line sql.y:4380 { yyLOCAL = &Use{DBName: NewIdentifierCS(yyDollar[2].identifierCS.String() + "@" + string(yyDollar[3].str))} } yyVAL.union = yyLOCAL - case 806: + case 809: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4371 +//line sql.y:4387 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 807: + case 810: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4375 +//line sql.y:4391 { yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) } - case 808: + case 811: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4379 +//line sql.y:4395 { yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str)) } - case 809: + case 812: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4383 +//line sql.y:4399 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 810: + case 813: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4390 +//line sql.y:4406 { yyLOCAL = &Begin{} } yyVAL.union = yyLOCAL - case 811: + case 814: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4394 +//line sql.y:4410 { yyLOCAL = &Begin{TxAccessModes: yyDollar[3].txAccessModesUnion()} } yyVAL.union = yyLOCAL - case 812: + case 815: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4399 +//line sql.y:4415 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 813: + case 816: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4403 +//line sql.y:4419 { yyLOCAL = yyDollar[1].txAccessModesUnion() } yyVAL.union = yyLOCAL - case 814: + case 817: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4409 +//line sql.y:4425 { yyLOCAL = []TxAccessMode{yyDollar[1].txAccessModeUnion()} } yyVAL.union = yyLOCAL - case 815: + case 818: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4413 +//line sql.y:4429 { yySLICE := (*[]TxAccessMode)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].txAccessModeUnion()) } - case 816: + case 819: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4419 +//line sql.y:4435 { yyLOCAL = WithConsistentSnapshot } yyVAL.union = yyLOCAL - case 817: + case 820: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4423 +//line sql.y:4439 { yyLOCAL = ReadWrite } yyVAL.union = yyLOCAL - case 818: + case 821: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4427 +//line sql.y:4443 { yyLOCAL = ReadOnly } yyVAL.union = yyLOCAL - case 819: + case 822: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4434 +//line sql.y:4450 { yyLOCAL = &Commit{} } yyVAL.union = yyLOCAL - case 820: + case 823: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4440 +//line sql.y:4456 { yyLOCAL = &Rollback{} } yyVAL.union = yyLOCAL - case 821: + case 824: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4444 +//line sql.y:4460 { yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 822: + case 825: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4449 +//line sql.y:4465 { yyVAL.empty = struct{}{} } - case 823: + case 826: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4451 +//line sql.y:4467 { yyVAL.empty = struct{}{} } - case 824: + case 827: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4454 +//line sql.y:4470 { yyVAL.empty = struct{}{} } - case 825: + case 828: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4456 +//line sql.y:4472 { yyVAL.empty = struct{}{} } - case 826: + case 829: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4460 +//line sql.y:4476 { yyLOCAL = &Savepoint{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 827: + case 830: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4466 +//line sql.y:4482 { yyLOCAL = &Release{Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 828: + case 831: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4471 +//line sql.y:4487 { yyLOCAL = EmptyType } yyVAL.union = yyLOCAL - case 829: + case 832: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4475 +//line sql.y:4491 { yyLOCAL = JSONType } yyVAL.union = yyLOCAL - case 830: + case 833: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4479 +//line sql.y:4495 { yyLOCAL = TreeType } yyVAL.union = yyLOCAL - case 831: + case 834: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4483 +//line sql.y:4499 { yyLOCAL = TraditionalType } yyVAL.union = yyLOCAL - case 832: + case 835: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4487 +//line sql.y:4503 { yyLOCAL = AnalyzeType } yyVAL.union = yyLOCAL - case 833: + case 836: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4492 +//line sql.y:4508 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 834: + case 837: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4496 +//line sql.y:4512 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 835: + case 838: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4500 +//line sql.y:4516 { yyLOCAL = AllVExplainType } yyVAL.union = yyLOCAL - case 836: + case 839: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4504 +//line sql.y:4520 { yyLOCAL = QueriesVExplainType } yyVAL.union = yyLOCAL - case 837: + case 840: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4508 +//line sql.y:4524 { yyLOCAL = TraceVExplainType } yyVAL.union = yyLOCAL - case 838: + case 841: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4512 +//line sql.y:4528 { yyLOCAL = KeysVExplainType } yyVAL.union = yyLOCAL - case 839: + case 842: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4518 +//line sql.y:4534 { yyVAL.str = yyDollar[1].str } - case 840: + case 843: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4522 +//line sql.y:4538 { yyVAL.str = yyDollar[1].str } - case 841: + case 844: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4526 +//line sql.y:4542 { yyVAL.str = yyDollar[1].str } - case 842: + case 845: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4532 +//line sql.y:4548 { - yyLOCAL = yyDollar[1].selStmtUnion() + yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 843: + case 846: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4536 +//line sql.y:4552 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 844: + case 847: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4540 +//line sql.y:4556 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 845: + case 848: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4544 +//line sql.y:4560 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 846: + case 849: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4549 +//line sql.y:4565 { yyVAL.str = "" } - case 847: + case 850: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4553 +//line sql.y:4569 { yyVAL.str = yyDollar[1].identifierCI.val } - case 848: + case 851: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4557 +//line sql.y:4573 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 849: + case 852: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4563 +//line sql.y:4579 { yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str} } yyVAL.union = yyLOCAL - case 850: + case 853: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4567 +//line sql.y:4583 { yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 851: + case 854: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4573 +//line sql.y:4589 { yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 852: + case 855: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4579 +//line sql.y:4595 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 853: + case 856: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4583 +//line sql.y:4599 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 854: + case 857: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4589 +//line sql.y:4605 { yyLOCAL = &LockTables{Tables: yyDollar[3].tableAndLockTypesUnion()} } yyVAL.union = yyLOCAL - case 855: + case 858: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableAndLockTypes -//line sql.y:4595 +//line sql.y:4611 { yyLOCAL = TableAndLockTypes{yyDollar[1].tableAndLockTypeUnion()} } yyVAL.union = yyLOCAL - case 856: + case 859: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4599 +//line sql.y:4615 { yySLICE := (*TableAndLockTypes)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableAndLockTypeUnion()) } - case 857: + case 860: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *TableAndLockType -//line sql.y:4605 +//line sql.y:4621 { yyLOCAL = &TableAndLockType{Table: yyDollar[1].aliasedTableNameUnion(), Lock: yyDollar[2].lockTypeUnion()} } yyVAL.union = yyLOCAL - case 858: + case 861: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4611 +//line sql.y:4627 { yyLOCAL = Read } yyVAL.union = yyLOCAL - case 859: + case 862: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4615 +//line sql.y:4631 { yyLOCAL = ReadLocal } yyVAL.union = yyLOCAL - case 860: + case 863: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4619 +//line sql.y:4635 { yyLOCAL = Write } yyVAL.union = yyLOCAL - case 861: + case 864: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4623 +//line sql.y:4639 { yyLOCAL = LowPriorityWrite } yyVAL.union = yyLOCAL - case 862: + case 865: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4629 +//line sql.y:4645 { yyLOCAL = &UnlockTables{} } yyVAL.union = yyLOCAL - case 863: + case 866: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4635 +//line sql.y:4651 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 864: + case 867: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4641 +//line sql.y:4657 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs} } yyVAL.union = yyLOCAL - case 865: + case 868: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4645 +//line sql.y:4661 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion()} } yyVAL.union = yyLOCAL - case 866: + case 869: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4649 +//line sql.y:4665 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 867: + case 870: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4653 +//line sql.y:4669 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL - case 868: + case 871: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4657 +//line sql.y:4673 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 869: + case 872: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4661 +//line sql.y:4677 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), ForExport: true} } yyVAL.union = yyLOCAL - case 870: + case 873: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4667 +//line sql.y:4683 { yyVAL.strs = []string{yyDollar[1].str} } - case 871: + case 874: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4671 +//line sql.y:4687 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str) } - case 872: + case 875: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4677 +//line sql.y:4693 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 873: + case 876: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4681 +//line sql.y:4697 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 874: + case 877: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4685 +//line sql.y:4701 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 875: + case 878: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4689 +//line sql.y:4705 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 876: + case 879: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4693 +//line sql.y:4709 { yyVAL.str = string(yyDollar[1].str) } - case 877: + case 880: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4697 +//line sql.y:4713 { yyVAL.str = string(yyDollar[1].str) } - case 878: + case 881: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4701 +//line sql.y:4717 { yyVAL.str = string(yyDollar[1].str) } - case 879: + case 882: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4705 +//line sql.y:4721 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str } - case 880: + case 883: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4709 +//line sql.y:4725 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 881: + case 884: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4713 +//line sql.y:4729 { yyVAL.str = string(yyDollar[1].str) } - case 882: + case 885: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4717 +//line sql.y:4733 { yyVAL.str = string(yyDollar[1].str) } - case 883: + case 886: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4721 +//line sql.y:4737 { yyVAL.str = string(yyDollar[1].str) } - case 884: + case 887: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4726 +//line sql.y:4742 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 885: + case 888: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4730 +//line sql.y:4746 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 886: + case 889: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4734 +//line sql.y:4750 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 887: + case 890: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4739 +//line sql.y:4755 { yyVAL.str = "" } - case 888: + case 891: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4743 +//line sql.y:4759 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String() } - case 889: + case 892: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4748 +//line sql.y:4764 { setAllowComments(yylex, true) } - case 890: + case 893: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4752 +//line sql.y:4768 { yyVAL.strs = yyDollar[2].strs setAllowComments(yylex, false) } - case 891: + case 894: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4758 +//line sql.y:4774 { yyVAL.strs = nil } - case 892: + case 895: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4762 +//line sql.y:4778 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) } - case 893: + case 896: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4768 +//line sql.y:4784 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 894: + case 897: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:4772 +//line sql.y:4788 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 895: + case 898: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:4776 +//line sql.y:4792 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 896: + case 899: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4781 +//line sql.y:4797 { yyVAL.str = "" } - case 897: + case 900: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4785 +//line sql.y:4801 { yyVAL.str = SQLNoCacheStr } - case 898: + case 901: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4789 +//line sql.y:4805 { yyVAL.str = SQLCacheStr } - case 899: + case 902: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4794 +//line sql.y:4810 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 900: + case 903: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4798 +//line sql.y:4814 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 901: + case 904: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4802 +//line sql.y:4818 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 902: + case 905: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4808 +//line sql.y:4824 { yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 903: + case 906: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4812 +//line sql.y:4828 { yyLOCAL = &PrepareStmt{ Name: yyDollar[3].identifierCI, @@ -16983,597 +16988,597 @@ yydefault: } } yyVAL.union = yyLOCAL - case 904: + case 907: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4822 +//line sql.y:4838 { yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()} } yyVAL.union = yyLOCAL - case 905: + case 908: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*Variable -//line sql.y:4827 +//line sql.y:4843 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 906: + case 909: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []*Variable -//line sql.y:4831 +//line sql.y:4847 { yyLOCAL = yyDollar[2].variablesUnion() } yyVAL.union = yyLOCAL - case 907: + case 910: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4837 +//line sql.y:4853 { yyLOCAL = &DeallocateStmt{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 908: + case 911: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4841 +//line sql.y:4857 { yyLOCAL = &DeallocateStmt{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 909: + case 912: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4846 +//line sql.y:4862 { yyVAL.strs = nil } - case 910: + case 913: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4850 +//line sql.y:4866 { yyVAL.strs = yyDollar[1].strs } - case 911: + case 914: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4856 +//line sql.y:4872 { yyVAL.strs = []string{yyDollar[1].str} } - case 912: + case 915: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4860 +//line sql.y:4876 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) } - case 913: + case 916: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4866 +//line sql.y:4882 { yyVAL.str = SQLNoCacheStr } - case 914: + case 917: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4870 +//line sql.y:4886 { yyVAL.str = SQLCacheStr } - case 915: + case 918: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4874 +//line sql.y:4890 { yyVAL.str = DistinctStr } - case 916: + case 919: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4878 +//line sql.y:4894 { yyVAL.str = DistinctStr } - case 917: + case 920: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4882 +//line sql.y:4898 { yyVAL.str = HighPriorityStr } - case 918: + case 921: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4886 +//line sql.y:4902 { yyVAL.str = StraightJoinHint } - case 919: + case 922: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4890 +//line sql.y:4906 { yyVAL.str = SQLBufferResultStr } - case 920: + case 923: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4894 +//line sql.y:4910 { yyVAL.str = SQLSmallResultStr } - case 921: + case 924: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4898 +//line sql.y:4914 { yyVAL.str = SQLBigResultStr } - case 922: + case 925: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4902 +//line sql.y:4918 { yyVAL.str = SQLCalcFoundRowsStr } - case 923: + case 926: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4906 +//line sql.y:4922 { yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway } - case 924: + case 927: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:4912 +//line sql.y:4928 { yyLOCAL = SelectExprs{yyDollar[1].selectExprUnion()} } yyVAL.union = yyLOCAL - case 925: + case 928: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4916 +//line sql.y:4932 { yySLICE := (*SelectExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].selectExprUnion()) } - case 926: + case 929: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:4922 +//line sql.y:4938 { yyLOCAL = &StarExpr{} } yyVAL.union = yyLOCAL - case 927: + case 930: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:4926 +//line sql.y:4942 { yyLOCAL = &AliasedExpr{Expr: yyDollar[1].exprUnion(), As: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 928: + case 931: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:4930 +//line sql.y:4946 { yyLOCAL = &StarExpr{TableName: TableName{Name: yyDollar[1].identifierCS}} } yyVAL.union = yyLOCAL - case 929: + case 932: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:4934 +//line sql.y:4950 { yyLOCAL = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 930: + case 933: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4939 +//line sql.y:4955 { yyVAL.identifierCI = IdentifierCI{} } - case 931: + case 934: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4943 +//line sql.y:4959 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 932: + case 935: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4947 +//line sql.y:4963 { yyVAL.identifierCI = yyDollar[2].identifierCI } - case 934: + case 937: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4954 +//line sql.y:4970 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 935: + case 938: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableExprs -//line sql.y:4959 +//line sql.y:4975 { yyLOCAL = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewIdentifierCS("dual")}}} } yyVAL.union = yyLOCAL - case 936: + case 939: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:4963 +//line sql.y:4979 { yyLOCAL = yyDollar[1].tableExprsUnion() } yyVAL.union = yyLOCAL - case 937: + case 940: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableExprs -//line sql.y:4969 +//line sql.y:4985 { yyLOCAL = yyDollar[2].tableExprsUnion() } yyVAL.union = yyLOCAL - case 938: + case 941: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:4975 +//line sql.y:4991 { yyLOCAL = TableExprs{yyDollar[1].tableExprUnion()} } yyVAL.union = yyLOCAL - case 939: + case 942: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4979 +//line sql.y:4995 { yySLICE := (*TableExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableExprUnion()) } - case 942: + case 945: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:4989 +//line sql.y:5005 { yyLOCAL = yyDollar[1].aliasedTableNameUnion() } yyVAL.union = yyLOCAL - case 943: + case 946: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:4993 +//line sql.y:5009 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].derivedTableUnion(), As: yyDollar[3].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 944: + case 947: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:4997 +//line sql.y:5013 { yyLOCAL = &ParenTableExpr{Exprs: yyDollar[2].tableExprsUnion()} } yyVAL.union = yyLOCAL - case 945: + case 948: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5001 +//line sql.y:5017 { yyLOCAL = yyDollar[1].tableExprUnion() } yyVAL.union = yyLOCAL - case 946: + case 949: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5007 +//line sql.y:5023 { - yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].selStmtUnion()} + yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 947: + case 950: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5011 +//line sql.y:5027 { - yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].selStmtUnion()} + yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 948: + case 951: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5017 +//line sql.y:5033 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].identifierCS, Hints: yyDollar[3].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 949: + case 952: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5021 +//line sql.y:5037 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitionsUnion(), As: yyDollar[6].identifierCS, Hints: yyDollar[7].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 950: + case 953: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5026 +//line sql.y:5042 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 951: + case 954: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:5030 +//line sql.y:5046 { yyLOCAL = yyDollar[2].columnsUnion() } yyVAL.union = yyLOCAL - case 952: + case 955: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5035 +//line sql.y:5051 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 953: + case 956: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5039 +//line sql.y:5055 { yyLOCAL = yyDollar[1].columnsUnion() } yyVAL.union = yyLOCAL - case 954: + case 957: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5045 +//line sql.y:5061 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 955: + case 958: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5049 +//line sql.y:5065 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 956: + case 959: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5055 +//line sql.y:5071 { yyLOCAL = []*Variable{yyDollar[1].variableUnion()} } yyVAL.union = yyLOCAL - case 957: + case 960: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5059 +//line sql.y:5075 { yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].variableUnion()) } - case 958: + case 961: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5065 +//line sql.y:5081 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 959: + case 962: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5069 +//line sql.y:5085 { yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 960: + case 963: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5073 +//line sql.y:5089 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 961: + case 964: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5077 +//line sql.y:5093 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, NewIdentifierCI(string(yyDollar[3].str))) } - case 962: + case 965: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Partitions -//line sql.y:5083 +//line sql.y:5099 { yyLOCAL = Partitions{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 963: + case 966: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5087 +//line sql.y:5103 { yySLICE := (*Partitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 964: + case 967: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5100 +//line sql.y:5116 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 965: + case 968: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5104 +//line sql.y:5120 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 966: + case 969: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5108 +//line sql.y:5124 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 967: + case 970: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5112 +//line sql.y:5128 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion()} } yyVAL.union = yyLOCAL - case 968: + case 971: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5118 +//line sql.y:5134 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 969: + case 972: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5120 +//line sql.y:5136 { yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()} } - case 970: + case 973: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5124 +//line sql.y:5140 { yyVAL.joinCondition = &JoinCondition{} } - case 971: + case 974: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5126 +//line sql.y:5142 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 972: + case 975: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5130 +//line sql.y:5146 { yyVAL.joinCondition = &JoinCondition{} } - case 973: + case 976: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5132 +//line sql.y:5148 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 974: + case 977: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5135 +//line sql.y:5151 { yyVAL.empty = struct{}{} } - case 975: + case 978: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5137 +//line sql.y:5153 { yyVAL.empty = struct{}{} } - case 976: + case 979: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5140 +//line sql.y:5156 { yyVAL.identifierCS = NewIdentifierCS("") } - case 977: + case 980: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5144 +//line sql.y:5160 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 978: + case 981: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5148 +//line sql.y:5164 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 980: + case 983: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5155 +//line sql.y:5171 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 981: + case 984: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5161 +//line sql.y:5177 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 982: + case 985: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5165 +//line sql.y:5181 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 983: + case 986: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5169 +//line sql.y:5185 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 984: + case 987: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5175 +//line sql.y:5191 { yyLOCAL = StraightJoinType } yyVAL.union = yyLOCAL - case 985: + case 988: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5181 +//line sql.y:5197 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 986: + case 989: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5185 +//line sql.y:5201 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 987: + case 990: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5189 +//line sql.y:5205 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 988: + case 991: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5193 +//line sql.y:5209 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 989: + case 992: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5199 +//line sql.y:5215 { yyLOCAL = NaturalJoinType } yyVAL.union = yyLOCAL - case 990: + case 993: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5203 +//line sql.y:5219 { if yyDollar[2].joinTypeUnion() == LeftJoinType { yyLOCAL = NaturalLeftJoinType @@ -17582,667 +17587,667 @@ yydefault: } } yyVAL.union = yyLOCAL - case 991: + case 994: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5213 +//line sql.y:5229 { yyVAL.tableName = yyDollar[2].tableName } - case 992: + case 995: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5217 +//line sql.y:5233 { yyVAL.tableName = yyDollar[1].tableName } - case 993: + case 996: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5223 +//line sql.y:5239 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 994: + case 997: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5227 +//line sql.y:5243 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS} } - case 995: + case 998: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5233 +//line sql.y:5249 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 996: + case 999: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5238 +//line sql.y:5254 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 997: + case 1000: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5242 +//line sql.y:5258 { yyLOCAL = yyDollar[1].indexHintsUnion() } yyVAL.union = yyLOCAL - case 998: + case 1001: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5248 +//line sql.y:5264 { yyLOCAL = IndexHints{yyDollar[1].indexHintUnion()} } yyVAL.union = yyLOCAL - case 999: + case 1002: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5252 +//line sql.y:5268 { yySLICE := (*IndexHints)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexHintUnion()) } - case 1000: + case 1003: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5258 +//line sql.y:5274 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1001: + case 1004: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5262 +//line sql.y:5278 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion()} } yyVAL.union = yyLOCAL - case 1002: + case 1005: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5266 +//line sql.y:5282 { yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1003: + case 1006: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5270 +//line sql.y:5286 { yyLOCAL = &IndexHint{Type: ForceOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1004: + case 1007: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5274 +//line sql.y:5290 { yyLOCAL = &IndexHint{Type: UseVindexOp, Indexes: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 1005: + case 1008: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5278 +//line sql.y:5294 { yyLOCAL = &IndexHint{Type: IgnoreVindexOp, Indexes: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 1006: + case 1009: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5283 +//line sql.y:5299 { yyLOCAL = NoForType } yyVAL.union = yyLOCAL - case 1007: + case 1010: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5287 +//line sql.y:5303 { yyLOCAL = JoinForType } yyVAL.union = yyLOCAL - case 1008: + case 1011: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5291 +//line sql.y:5307 { yyLOCAL = OrderByForType } yyVAL.union = yyLOCAL - case 1009: + case 1012: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5295 +//line sql.y:5311 { yyLOCAL = GroupByForType } yyVAL.union = yyLOCAL - case 1010: + case 1013: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:5301 +//line sql.y:5317 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1011: + case 1014: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5305 +//line sql.y:5321 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1012: + case 1015: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5312 +//line sql.y:5328 { yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1013: + case 1016: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5316 +//line sql.y:5332 { yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1014: + case 1017: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5320 +//line sql.y:5336 { yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1015: + case 1018: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5324 +//line sql.y:5340 { yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1016: + case 1019: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5328 +//line sql.y:5344 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()} } yyVAL.union = yyLOCAL - case 1017: + case 1020: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5332 +//line sql.y:5348 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1018: + case 1021: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5336 +//line sql.y:5352 { yyLOCAL = &AssignmentExpr{Left: yyDollar[1].variableUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1019: + case 1022: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5340 +//line sql.y:5356 { yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1020: + case 1023: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5346 +//line sql.y:5362 { } - case 1021: + case 1024: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5349 +//line sql.y:5365 { } - case 1022: + case 1025: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5354 +//line sql.y:5370 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} } yyVAL.union = yyLOCAL - case 1023: + case 1026: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5358 +//line sql.y:5374 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} } yyVAL.union = yyLOCAL - case 1024: + case 1027: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5362 +//line sql.y:5378 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1025: + case 1028: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5366 +//line sql.y:5382 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: Any, Right: yyDollar[4].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1026: + case 1029: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5370 +//line sql.y:5386 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: Any, Right: yyDollar[4].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1027: + case 1030: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5374 +//line sql.y:5390 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: All, Right: yyDollar[4].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1028: + case 1031: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5378 +//line sql.y:5394 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1029: + case 1032: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5384 +//line sql.y:5400 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1030: + case 1033: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5388 +//line sql.y:5404 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1031: + case 1034: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5392 +//line sql.y:5408 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1032: + case 1035: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5396 +//line sql.y:5412 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1033: + case 1036: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5400 +//line sql.y:5416 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1034: + case 1037: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5404 +//line sql.y:5420 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1035: + case 1038: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5408 +//line sql.y:5424 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion(), Escape: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1036: + case 1039: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5412 +//line sql.y:5428 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion(), Escape: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1037: + case 1040: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5416 +//line sql.y:5432 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: RegexpOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1038: + case 1041: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5420 +//line sql.y:5436 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1039: + case 1042: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5424 +//line sql.y:5440 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1040: + case 1043: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5430 +//line sql.y:5446 { } - case 1041: + case 1044: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5433 +//line sql.y:5449 { } - case 1042: + case 1045: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5439 +//line sql.y:5455 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1043: + case 1046: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5443 +//line sql.y:5459 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1044: + case 1047: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5447 +//line sql.y:5463 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1045: + case 1048: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5451 +//line sql.y:5467 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1046: + case 1049: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5455 +//line sql.y:5471 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1047: + case 1050: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5459 +//line sql.y:5475 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1048: + case 1051: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5463 +//line sql.y:5479 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinaryAdd, Date: yyDollar[1].exprUnion(), Unit: yyDollar[5].intervalTypeUnion(), Interval: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1049: + case 1052: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5467 +//line sql.y:5483 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinarySub, Date: yyDollar[1].exprUnion(), Unit: yyDollar[5].intervalTypeUnion(), Interval: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1050: + case 1053: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5471 +//line sql.y:5487 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1051: + case 1054: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5475 +//line sql.y:5491 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1052: + case 1055: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5479 +//line sql.y:5495 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1053: + case 1056: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5483 +//line sql.y:5499 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1054: + case 1057: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5487 +//line sql.y:5503 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1055: + case 1058: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5491 +//line sql.y:5507 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1056: + case 1059: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5495 +//line sql.y:5511 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1057: + case 1060: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5501 +//line sql.y:5517 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1058: + case 1061: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5505 +//line sql.y:5521 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1059: + case 1062: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5509 +//line sql.y:5525 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1060: + case 1063: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5513 +//line sql.y:5529 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1061: + case 1064: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5517 +//line sql.y:5533 { yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} } yyVAL.union = yyLOCAL - case 1062: + case 1065: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5521 +//line sql.y:5537 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1063: + case 1066: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5525 +//line sql.y:5541 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1064: + case 1067: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5529 +//line sql.y:5545 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1065: + case 1068: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5533 +//line sql.y:5549 { yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals? } yyVAL.union = yyLOCAL - case 1066: + case 1069: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5537 +//line sql.y:5553 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1067: + case 1070: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5541 +//line sql.y:5557 { yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1068: + case 1071: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5545 +//line sql.y:5561 { yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1069: + case 1072: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5549 +//line sql.y:5565 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1070: + case 1073: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5553 +//line sql.y:5569 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1071: + case 1074: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5557 +//line sql.y:5573 { yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1072: + case 1075: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5561 +//line sql.y:5577 { yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()} } yyVAL.union = yyLOCAL - case 1073: + case 1076: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5565 +//line sql.y:5581 { yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()} } yyVAL.union = yyLOCAL - case 1074: + case 1077: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5569 +//line sql.y:5585 { yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1075: + case 1078: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5573 +//line sql.y:5589 { yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1076: + case 1079: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5577 +//line sql.y:5593 { // From: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary // To convert a string expression to a binary string, these constructs are equivalent: @@ -18251,3218 +18256,3218 @@ yydefault: yyLOCAL = &ConvertExpr{Expr: yyDollar[2].exprUnion(), Type: &ConvertType{Type: yyDollar[1].str}} } yyVAL.union = yyLOCAL - case 1077: + case 1080: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5585 +//line sql.y:5601 { yyLOCAL = &Default{ColName: yyDollar[2].str} } yyVAL.union = yyLOCAL - case 1078: + case 1081: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5589 +//line sql.y:5605 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinaryAddLeft, Date: yyDollar[5].exprUnion(), Unit: yyDollar[3].intervalTypeUnion(), Interval: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1079: + case 1082: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5593 +//line sql.y:5609 { yyLOCAL = &IntervalFuncExpr{Expr: yyDollar[3].exprUnion(), Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1080: + case 1083: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5597 +//line sql.y:5613 { yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[1].exprUnion(), PathList: []Expr{yyDollar[3].exprUnion()}} } yyVAL.union = yyLOCAL - case 1081: + case 1084: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5601 +//line sql.y:5617 { yyLOCAL = &JSONUnquoteExpr{JSONValue: &JSONExtractExpr{JSONDoc: yyDollar[1].exprUnion(), PathList: []Expr{yyDollar[3].exprUnion()}}} } yyVAL.union = yyLOCAL - case 1082: + case 1085: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5607 +//line sql.y:5623 { yyLOCAL = yyDollar[1].colNamesUnion() } yyVAL.union = yyLOCAL - case 1083: + case 1086: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5611 +//line sql.y:5627 { yyLOCAL = yyDollar[2].colNamesUnion() } yyVAL.union = yyLOCAL - case 1084: + case 1087: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5617 +//line sql.y:5633 { yyLOCAL = []*ColName{yyDollar[1].colNameUnion()} } yyVAL.union = yyLOCAL - case 1085: + case 1088: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5621 +//line sql.y:5637 { yySLICE := (*[]*ColName)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].colNameUnion()) } - case 1086: + case 1089: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5627 +//line sql.y:5643 { yyLOCAL = BothTrimType } yyVAL.union = yyLOCAL - case 1087: + case 1090: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5631 +//line sql.y:5647 { yyLOCAL = LeadingTrimType } yyVAL.union = yyLOCAL - case 1088: + case 1091: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5635 +//line sql.y:5651 { yyLOCAL = TrailingTrimType } yyVAL.union = yyLOCAL - case 1089: + case 1092: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5641 +//line sql.y:5657 { yyLOCAL = FrameRowsType } yyVAL.union = yyLOCAL - case 1090: + case 1093: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5645 +//line sql.y:5661 { yyLOCAL = FrameRangeType } yyVAL.union = yyLOCAL - case 1091: + case 1094: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5652 +//line sql.y:5668 { yyLOCAL = CumeDistExprType } yyVAL.union = yyLOCAL - case 1092: + case 1095: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5656 +//line sql.y:5672 { yyLOCAL = DenseRankExprType } yyVAL.union = yyLOCAL - case 1093: + case 1096: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5660 +//line sql.y:5676 { yyLOCAL = PercentRankExprType } yyVAL.union = yyLOCAL - case 1094: + case 1097: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5664 +//line sql.y:5680 { yyLOCAL = RankExprType } yyVAL.union = yyLOCAL - case 1095: + case 1098: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5668 +//line sql.y:5684 { yyLOCAL = RowNumberExprType } yyVAL.union = yyLOCAL - case 1096: + case 1099: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5674 +//line sql.y:5690 { yyLOCAL = &FramePoint{Type: CurrentRowType} } yyVAL.union = yyLOCAL - case 1097: + case 1100: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5678 +//line sql.y:5694 { yyLOCAL = &FramePoint{Type: UnboundedPrecedingType} } yyVAL.union = yyLOCAL - case 1098: + case 1101: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5682 +//line sql.y:5698 { yyLOCAL = &FramePoint{Type: UnboundedFollowingType} } yyVAL.union = yyLOCAL - case 1099: + case 1102: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5686 +//line sql.y:5702 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1100: + case 1103: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5690 +//line sql.y:5706 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1101: + case 1104: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5694 +//line sql.y:5710 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1102: + case 1105: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5698 +//line sql.y:5714 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1103: + case 1106: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5703 +//line sql.y:5719 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1104: + case 1107: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5707 +//line sql.y:5723 { yyLOCAL = yyDollar[1].frameClauseUnion() } yyVAL.union = yyLOCAL - case 1105: + case 1108: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5713 +//line sql.y:5729 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[2].framePointUnion()} } yyVAL.union = yyLOCAL - case 1106: + case 1109: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5717 +//line sql.y:5733 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[3].framePointUnion(), End: yyDollar[5].framePointUnion()} } yyVAL.union = yyLOCAL - case 1107: + case 1110: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:5722 +//line sql.y:5738 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1108: + case 1111: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:5726 +//line sql.y:5742 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1109: + case 1112: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5731 +//line sql.y:5747 { yyVAL.identifierCI = IdentifierCI{} } - case 1110: + case 1113: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5735 +//line sql.y:5751 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1111: + case 1114: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *WindowSpecification -//line sql.y:5741 +//line sql.y:5757 { yyLOCAL = &WindowSpecification{Name: yyDollar[1].identifierCI, PartitionClause: yyDollar[2].exprsUnion(), OrderClause: yyDollar[3].orderByUnion(), FrameClause: yyDollar[4].frameClauseUnion()} } yyVAL.union = yyLOCAL - case 1112: + case 1115: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5747 +//line sql.y:5763 { yyLOCAL = &OverClause{WindowSpec: yyDollar[3].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1113: + case 1116: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5751 +//line sql.y:5767 { yyLOCAL = &OverClause{WindowName: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 1114: + case 1117: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5757 +//line sql.y:5773 { yyLOCAL = yyDollar[1].overClauseUnion() } yyVAL.union = yyLOCAL - case 1115: + case 1118: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5761 +//line sql.y:5777 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1116: + case 1119: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5766 +//line sql.y:5782 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1118: + case 1121: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5773 +//line sql.y:5789 { yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()} } yyVAL.union = yyLOCAL - case 1119: + case 1122: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5779 +//line sql.y:5795 { yyLOCAL = RespectNullsType } yyVAL.union = yyLOCAL - case 1120: + case 1123: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5783 +//line sql.y:5799 { yyLOCAL = IgnoreNullsType } yyVAL.union = yyLOCAL - case 1121: + case 1124: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:5789 +//line sql.y:5805 { yyLOCAL = FirstValueExprType } yyVAL.union = yyLOCAL - case 1122: + case 1125: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:5793 +//line sql.y:5809 { yyLOCAL = LastValueExprType } yyVAL.union = yyLOCAL - case 1123: + case 1126: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:5799 +//line sql.y:5815 { yyLOCAL = FromFirstType } yyVAL.union = yyLOCAL - case 1124: + case 1127: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:5803 +//line sql.y:5819 { yyLOCAL = FromLastType } yyVAL.union = yyLOCAL - case 1125: + case 1128: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:5808 +//line sql.y:5824 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1127: + case 1130: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:5815 +//line sql.y:5831 { yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()} } yyVAL.union = yyLOCAL - case 1128: + case 1131: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:5821 +//line sql.y:5837 { yyLOCAL = LagExprType } yyVAL.union = yyLOCAL - case 1129: + case 1132: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:5825 +//line sql.y:5841 { yyLOCAL = LeadExprType } yyVAL.union = yyLOCAL - case 1130: + case 1133: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *WindowDefinition -//line sql.y:5831 +//line sql.y:5847 { yyLOCAL = &WindowDefinition{Name: yyDollar[1].identifierCI, WindowSpec: yyDollar[4].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1131: + case 1134: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL WindowDefinitions -//line sql.y:5837 +//line sql.y:5853 { yyLOCAL = WindowDefinitions{yyDollar[1].windowDefinitionUnion()} } yyVAL.union = yyLOCAL - case 1132: + case 1135: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5841 +//line sql.y:5857 { yySLICE := (*WindowDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].windowDefinitionUnion()) } - case 1133: + case 1136: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5847 +//line sql.y:5863 { yyVAL.str = "" } - case 1134: + case 1137: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5851 +//line sql.y:5867 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } - case 1135: + case 1138: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:5857 +//line sql.y:5873 { yyLOCAL = BoolVal(true) } yyVAL.union = yyLOCAL - case 1136: + case 1139: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:5861 +//line sql.y:5877 { yyLOCAL = BoolVal(false) } yyVAL.union = yyLOCAL - case 1137: + case 1140: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5868 +//line sql.y:5884 { yyLOCAL = IsTrueOp } yyVAL.union = yyLOCAL - case 1138: + case 1141: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5872 +//line sql.y:5888 { yyLOCAL = IsNotTrueOp } yyVAL.union = yyLOCAL - case 1139: + case 1142: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5876 +//line sql.y:5892 { yyLOCAL = IsFalseOp } yyVAL.union = yyLOCAL - case 1140: + case 1143: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5880 +//line sql.y:5896 { yyLOCAL = IsNotFalseOp } yyVAL.union = yyLOCAL - case 1141: + case 1144: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5886 +//line sql.y:5902 { yyLOCAL = yyDollar[1].comparisonExprOperatorUnion() } yyVAL.union = yyLOCAL - case 1142: + case 1145: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5890 +//line sql.y:5906 { yyLOCAL = NullSafeEqualOp } yyVAL.union = yyLOCAL - case 1143: + case 1146: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5896 +//line sql.y:5912 { yyLOCAL = EqualOp } yyVAL.union = yyLOCAL - case 1144: + case 1147: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5900 +//line sql.y:5916 { yyLOCAL = LessThanOp } yyVAL.union = yyLOCAL - case 1145: + case 1148: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5904 +//line sql.y:5920 { yyLOCAL = GreaterThanOp } yyVAL.union = yyLOCAL - case 1146: + case 1149: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5908 +//line sql.y:5924 { yyLOCAL = LessEqualOp } yyVAL.union = yyLOCAL - case 1147: + case 1150: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5912 +//line sql.y:5928 { yyLOCAL = GreaterEqualOp } yyVAL.union = yyLOCAL - case 1148: + case 1151: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5916 +//line sql.y:5932 { yyLOCAL = NotEqualOp } yyVAL.union = yyLOCAL - case 1149: + case 1152: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:5922 +//line sql.y:5938 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1150: + case 1153: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:5926 +//line sql.y:5942 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1151: + case 1154: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:5930 +//line sql.y:5946 { yyLOCAL = ListArg(yyDollar[1].str[2:]) markBindVariable(yylex, yyDollar[1].str[2:]) } yyVAL.union = yyLOCAL - case 1152: + case 1155: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Subquery -//line sql.y:5937 +//line sql.y:5953 { - yyLOCAL = &Subquery{yyDollar[1].selStmtUnion()} + yyLOCAL = &Subquery{yyDollar[1].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 1153: + case 1156: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:5943 +//line sql.y:5959 { yyLOCAL = Exprs{yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1154: + case 1157: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5947 +//line sql.y:5963 { yySLICE := (*Exprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].exprUnion()) } - case 1155: + case 1158: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5957 +//line sql.y:5973 { yyLOCAL = &FuncExpr{Name: yyDollar[1].identifierCI, Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1156: + case 1159: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5961 +//line sql.y:5977 { yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1157: + case 1160: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5971 +//line sql.y:5987 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1158: + case 1161: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5975 +//line sql.y:5991 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1159: + case 1162: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:5979 +//line sql.y:5995 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1160: + case 1163: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:5983 +//line sql.y:5999 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1161: + case 1164: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5987 +//line sql.y:6003 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1162: + case 1165: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:5991 +//line sql.y:6007 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1163: + case 1166: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5995 +//line sql.y:6011 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1164: + case 1167: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5999 +//line sql.y:6015 { yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1165: + case 1168: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6003 +//line sql.y:6019 { yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL - case 1166: + case 1169: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6007 +//line sql.y:6023 { yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1167: + case 1170: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6011 +//line sql.y:6027 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1168: + case 1171: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6022 +//line sql.y:6038 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} } yyVAL.union = yyLOCAL - case 1169: + case 1172: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6026 +//line sql.y:6042 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1170: + case 1173: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6032 +//line sql.y:6048 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} } yyVAL.union = yyLOCAL - case 1171: + case 1174: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6036 +//line sql.y:6052 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("curdate")} } yyVAL.union = yyLOCAL - case 1172: + case 1175: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6040 +//line sql.y:6056 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 1173: + case 1176: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6045 +//line sql.y:6061 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("curtime"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 1174: + case 1177: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6050 +//line sql.y:6066 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 1175: + case 1178: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6054 +//line sql.y:6070 { yyLOCAL = &CountStar{OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1176: + case 1179: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6058 +//line sql.y:6074 { yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1177: + case 1180: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6062 +//line sql.y:6078 { yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1178: + case 1181: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6066 +//line sql.y:6082 { yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1179: + case 1182: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6070 +//line sql.y:6086 { yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1180: + case 1183: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6074 +//line sql.y:6090 { yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1181: + case 1184: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6078 +//line sql.y:6094 { yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1182: + case 1185: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6082 +//line sql.y:6098 { yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1183: + case 1186: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6086 +//line sql.y:6102 { yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1184: + case 1187: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6090 +//line sql.y:6106 { yyLOCAL = &Std{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1185: + case 1188: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6094 +//line sql.y:6110 { yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1186: + case 1189: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6098 +//line sql.y:6114 { yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1187: + case 1190: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6102 +//line sql.y:6118 { yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1188: + case 1191: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6106 +//line sql.y:6122 { yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1189: + case 1192: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6110 +//line sql.y:6126 { yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1190: + case 1193: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6114 +//line sql.y:6130 { yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1191: + case 1194: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6118 +//line sql.y:6134 { yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL - case 1192: + case 1195: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6122 +//line sql.y:6138 { yyLOCAL = &AnyValue{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1193: + case 1196: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6126 +//line sql.y:6142 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprTimestampadd, Date: yyDollar[7].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1194: + case 1197: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6130 +//line sql.y:6146 { yyLOCAL = &TimestampDiffExpr{Unit: yyDollar[3].intervalTypeUnion(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1195: + case 1198: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6134 +//line sql.y:6150 { yyLOCAL = &ExtractFuncExpr{IntervalType: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1196: + case 1199: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6138 +//line sql.y:6154 { yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1197: + case 1200: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6142 +//line sql.y:6158 { yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1198: + case 1201: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6146 +//line sql.y:6162 { yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1199: + case 1202: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6150 +//line sql.y:6166 { yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1200: + case 1203: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6154 +//line sql.y:6170 { yyLOCAL = &JSONArrayAgg{Expr: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1201: + case 1204: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6158 +//line sql.y:6174 { yyLOCAL = &JSONObjectAgg{Key: yyDollar[3].exprUnion(), Value: yyDollar[5].exprUnion(), OverClause: yyDollar[7].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1202: + case 1205: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6162 +//line sql.y:6178 { yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, Type: LeadingTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1203: + case 1206: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6166 +//line sql.y:6182 { yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, Type: TrailingTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1204: + case 1207: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6170 +//line sql.y:6186 { yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1205: + case 1208: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6174 +//line sql.y:6190 { yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1206: + case 1209: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6178 +//line sql.y:6194 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1207: + case 1210: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6182 +//line sql.y:6198 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1208: + case 1211: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6186 +//line sql.y:6202 { yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1209: + case 1212: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6190 +//line sql.y:6206 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1210: + case 1213: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6194 +//line sql.y:6210 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1211: + case 1214: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6198 +//line sql.y:6214 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1212: + case 1215: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6202 +//line sql.y:6218 { yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1213: + case 1216: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6206 +//line sql.y:6222 { yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1214: + case 1217: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6210 +//line sql.y:6226 { yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1215: + case 1218: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6214 +//line sql.y:6230 { yyLOCAL = &LockingFunc{Type: ReleaseAllLocks} } yyVAL.union = yyLOCAL - case 1216: + case 1219: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6218 +//line sql.y:6234 { yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1217: + case 1220: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6222 +//line sql.y:6238 { yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1218: + case 1221: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6226 +//line sql.y:6242 { yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1219: + case 1222: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6230 +//line sql.y:6246 { yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1220: + case 1223: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6234 +//line sql.y:6250 { yyLOCAL = &GeomFormatExpr{FormatType: BinaryFormat, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1221: + case 1224: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6238 +//line sql.y:6254 { yyLOCAL = &GeomFormatExpr{FormatType: BinaryFormat, Geom: yyDollar[3].exprUnion(), AxisOrderOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1222: + case 1225: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6242 +//line sql.y:6258 { yyLOCAL = &GeomFormatExpr{FormatType: TextFormat, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1223: + case 1226: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6246 +//line sql.y:6262 { yyLOCAL = &GeomFormatExpr{FormatType: TextFormat, Geom: yyDollar[3].exprUnion(), AxisOrderOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1224: + case 1227: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6250 +//line sql.y:6266 { yyLOCAL = &GeomPropertyFuncExpr{Property: IsEmpty, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1225: + case 1228: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6254 +//line sql.y:6270 { yyLOCAL = &GeomPropertyFuncExpr{Property: IsSimple, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1226: + case 1229: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6258 +//line sql.y:6274 { yyLOCAL = &GeomPropertyFuncExpr{Property: Dimension, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1227: + case 1230: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6262 +//line sql.y:6278 { yyLOCAL = &GeomPropertyFuncExpr{Property: Envelope, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1228: + case 1231: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6266 +//line sql.y:6282 { yyLOCAL = &GeomPropertyFuncExpr{Property: GeometryType, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1229: + case 1232: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6270 +//line sql.y:6286 { yyLOCAL = &PointPropertyFuncExpr{Property: Latitude, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1230: + case 1233: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6274 +//line sql.y:6290 { yyLOCAL = &PointPropertyFuncExpr{Property: Latitude, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1231: + case 1234: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6278 +//line sql.y:6294 { yyLOCAL = &PointPropertyFuncExpr{Property: Longitude, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1232: + case 1235: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6282 +//line sql.y:6298 { yyLOCAL = &PointPropertyFuncExpr{Property: Longitude, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1233: + case 1236: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6286 +//line sql.y:6302 { yyLOCAL = &LinestrPropertyFuncExpr{Property: EndPoint, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1234: + case 1237: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6290 +//line sql.y:6306 { yyLOCAL = &LinestrPropertyFuncExpr{Property: IsClosed, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1235: + case 1238: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6294 +//line sql.y:6310 { yyLOCAL = &LinestrPropertyFuncExpr{Property: Length, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1236: + case 1239: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6298 +//line sql.y:6314 { yyLOCAL = &LinestrPropertyFuncExpr{Property: Length, Linestring: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1237: + case 1240: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6302 +//line sql.y:6318 { yyLOCAL = &LinestrPropertyFuncExpr{Property: NumPoints, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1238: + case 1241: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6306 +//line sql.y:6322 { yyLOCAL = &LinestrPropertyFuncExpr{Property: PointN, Linestring: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1239: + case 1242: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6310 +//line sql.y:6326 { yyLOCAL = &LinestrPropertyFuncExpr{Property: StartPoint, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1240: + case 1243: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6314 +//line sql.y:6330 { yyLOCAL = &PointPropertyFuncExpr{Property: XCordinate, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1241: + case 1244: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6318 +//line sql.y:6334 { yyLOCAL = &PointPropertyFuncExpr{Property: XCordinate, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1242: + case 1245: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6322 +//line sql.y:6338 { yyLOCAL = &PointPropertyFuncExpr{Property: YCordinate, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1243: + case 1246: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6326 +//line sql.y:6342 { yyLOCAL = &PointPropertyFuncExpr{Property: YCordinate, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1244: + case 1247: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6330 +//line sql.y:6346 { yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1245: + case 1248: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6334 +//line sql.y:6350 { yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1246: + case 1249: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6338 +//line sql.y:6354 { yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1247: + case 1250: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6342 +//line sql.y:6358 { yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1248: + case 1251: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6346 +//line sql.y:6362 { yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1249: + case 1252: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6350 +//line sql.y:6366 { yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1250: + case 1253: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6354 +//line sql.y:6370 { yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1251: + case 1254: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6358 +//line sql.y:6374 { yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1252: + case 1255: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6362 +//line sql.y:6378 { yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1253: + case 1256: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6366 +//line sql.y:6382 { yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1254: + case 1257: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6370 +//line sql.y:6386 { yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1255: + case 1258: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6374 +//line sql.y:6390 { yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1256: + case 1259: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6378 +//line sql.y:6394 { yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1257: + case 1260: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6382 +//line sql.y:6398 { yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1258: + case 1261: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6386 +//line sql.y:6402 { yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1259: + case 1262: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6390 +//line sql.y:6406 { yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1260: + case 1263: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6394 +//line sql.y:6410 { yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1261: + case 1264: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6398 +//line sql.y:6414 { yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1262: + case 1265: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6402 +//line sql.y:6418 { yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1263: + case 1266: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6406 +//line sql.y:6422 { yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1264: + case 1267: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6410 +//line sql.y:6426 { yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1265: + case 1268: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6414 +//line sql.y:6430 { yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1266: + case 1269: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6418 +//line sql.y:6434 { yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1267: + case 1270: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6422 +//line sql.y:6438 { yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1268: + case 1271: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6426 +//line sql.y:6442 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1269: + case 1272: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6430 +//line sql.y:6446 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1270: + case 1273: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6434 +//line sql.y:6450 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1271: + case 1274: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6438 +//line sql.y:6454 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1272: + case 1275: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6442 +//line sql.y:6458 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1273: + case 1276: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6446 +//line sql.y:6462 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1274: + case 1277: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6450 +//line sql.y:6466 { yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1275: + case 1278: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6454 +//line sql.y:6470 { yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1276: + case 1279: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6458 +//line sql.y:6474 { yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1277: + case 1280: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6462 +//line sql.y:6478 { yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1278: + case 1281: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6466 +//line sql.y:6482 { yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1279: + case 1282: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6470 +//line sql.y:6486 { yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1280: + case 1283: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6474 +//line sql.y:6490 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1281: + case 1284: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6478 +//line sql.y:6494 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1282: + case 1285: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6482 +//line sql.y:6498 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1283: + case 1286: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6486 +//line sql.y:6502 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1284: + case 1287: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6490 +//line sql.y:6506 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1285: + case 1288: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6494 +//line sql.y:6510 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1286: + case 1289: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6498 +//line sql.y:6514 { yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1287: + case 1290: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6502 +//line sql.y:6518 { yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1288: + case 1291: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6506 +//line sql.y:6522 { yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1289: + case 1292: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6510 +//line sql.y:6526 { yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1290: + case 1293: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6514 +//line sql.y:6530 { yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1291: + case 1294: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6518 +//line sql.y:6534 { yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1292: + case 1295: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6522 +//line sql.y:6538 { yyLOCAL = &PolygonPropertyFuncExpr{Property: Area, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1293: + case 1296: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6526 +//line sql.y:6542 { yyLOCAL = &PolygonPropertyFuncExpr{Property: Centroid, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1294: + case 1297: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6530 +//line sql.y:6546 { yyLOCAL = &PolygonPropertyFuncExpr{Property: ExteriorRing, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1295: + case 1298: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6534 +//line sql.y:6550 { yyLOCAL = &PolygonPropertyFuncExpr{Property: InteriorRingN, Polygon: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1296: + case 1299: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6538 +//line sql.y:6554 { yyLOCAL = &PolygonPropertyFuncExpr{Property: NumInteriorRings, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1297: + case 1300: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6542 +//line sql.y:6558 { yyLOCAL = &GeomCollPropertyFuncExpr{Property: GeometryN, GeomColl: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1298: + case 1301: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6546 +//line sql.y:6562 { yyLOCAL = &GeomCollPropertyFuncExpr{Property: NumGeometries, GeomColl: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1299: + case 1302: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6550 +//line sql.y:6566 { yyLOCAL = &GeoHashFromLatLongExpr{Longitude: yyDollar[3].exprUnion(), Latitude: yyDollar[5].exprUnion(), MaxLength: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1300: + case 1303: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6554 +//line sql.y:6570 { yyLOCAL = &GeoHashFromPointExpr{Point: yyDollar[3].exprUnion(), MaxLength: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1301: + case 1304: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6558 +//line sql.y:6574 { yyLOCAL = &GeomFromGeoHashExpr{GeomType: LatitudeFromHash, GeoHash: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1302: + case 1305: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6562 +//line sql.y:6578 { yyLOCAL = &GeomFromGeoHashExpr{GeomType: LongitudeFromHash, GeoHash: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1303: + case 1306: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6566 +//line sql.y:6582 { yyLOCAL = &GeomFromGeoHashExpr{GeomType: PointFromHash, GeoHash: yyDollar[3].exprUnion(), SridOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1304: + case 1307: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6570 +//line sql.y:6586 { yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1305: + case 1308: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6574 +//line sql.y:6590 { yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion(), HigherDimHandlerOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1306: + case 1309: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6578 +//line sql.y:6594 { yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion(), HigherDimHandlerOpt: yyDollar[5].exprUnion(), Srid: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1307: + case 1310: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6582 +//line sql.y:6598 { yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1308: + case 1311: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6586 +//line sql.y:6602 { yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion(), MaxDecimalDigits: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1309: + case 1312: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6590 +//line sql.y:6606 { yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion(), MaxDecimalDigits: yyDollar[5].exprUnion(), Bitmask: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1310: + case 1313: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6594 +//line sql.y:6610 { yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1311: + case 1314: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6598 +//line sql.y:6614 { yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1312: + case 1315: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6602 +//line sql.y:6618 { yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1313: + case 1316: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6606 +//line sql.y:6622 { yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()} } yyVAL.union = yyLOCAL - case 1314: + case 1317: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6610 +//line sql.y:6626 { yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1315: + case 1318: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6614 +//line sql.y:6630 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1316: + case 1319: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6618 +//line sql.y:6634 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1317: + case 1320: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6622 +//line sql.y:6638 { yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1318: + case 1321: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6626 +//line sql.y:6642 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1319: + case 1322: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6630 +//line sql.y:6646 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1320: + case 1323: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6634 +//line sql.y:6650 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1321: + case 1324: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6638 +//line sql.y:6654 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1322: + case 1325: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6642 +//line sql.y:6658 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1323: + case 1326: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6646 +//line sql.y:6662 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1324: + case 1327: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6650 +//line sql.y:6666 { yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1325: + case 1328: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6654 +//line sql.y:6670 { yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1326: + case 1329: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6658 +//line sql.y:6674 { yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1327: + case 1330: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6662 +//line sql.y:6678 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1328: + case 1331: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6666 +//line sql.y:6682 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1329: + case 1332: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6670 +//line sql.y:6686 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1330: + case 1333: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6674 +//line sql.y:6690 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1331: + case 1334: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6678 +//line sql.y:6694 { yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1332: + case 1335: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6682 +//line sql.y:6698 { yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1333: + case 1336: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6686 +//line sql.y:6702 { yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1334: + case 1337: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6690 +//line sql.y:6706 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1335: + case 1338: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6694 +//line sql.y:6710 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1336: + case 1339: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6698 +//line sql.y:6714 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1337: + case 1340: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6702 +//line sql.y:6718 { yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1338: + case 1341: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6706 +//line sql.y:6722 { yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1339: + case 1342: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6710 +//line sql.y:6726 { yyLOCAL = &MultiPolygonExpr{PolygonParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1340: + case 1343: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6714 +//line sql.y:6730 { yyLOCAL = &MultiPointExpr{PointParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1341: + case 1344: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6718 +//line sql.y:6734 { yyLOCAL = &MultiLinestringExpr{LinestringParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1342: + case 1345: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6722 +//line sql.y:6738 { yyLOCAL = &PolygonExpr{LinestringParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1343: + case 1346: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6726 +//line sql.y:6742 { yyLOCAL = &LineStringExpr{PointParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1344: + case 1347: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6730 +//line sql.y:6746 { yyLOCAL = &PointExpr{XCordinate: yyDollar[3].exprUnion(), YCordinate: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1345: + case 1348: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6734 +//line sql.y:6750 { yyLOCAL = &ArgumentLessWindowExpr{Type: yyDollar[1].argumentLessWindowExprTypeUnion(), OverClause: yyDollar[4].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1346: + case 1349: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6738 +//line sql.y:6754 { yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1347: + case 1350: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6742 +//line sql.y:6758 { yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1348: + case 1351: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6746 +//line sql.y:6762 { yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1349: + case 1352: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6750 +//line sql.y:6766 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1350: + case 1353: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6754 +//line sql.y:6770 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1351: + case 1354: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6758 +//line sql.y:6774 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprAdddate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1352: + case 1355: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6762 +//line sql.y:6778 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprAdddate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: IntervalNone} } yyVAL.union = yyLOCAL - case 1353: + case 1356: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6766 +//line sql.y:6782 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprDateAdd, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1354: + case 1357: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6770 +//line sql.y:6786 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprDateSub, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1355: + case 1358: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6774 +//line sql.y:6790 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprSubdate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1356: + case 1359: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6778 +//line sql.y:6794 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprSubdate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: IntervalNone} } yyVAL.union = yyLOCAL - case 1361: + case 1364: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6788 +//line sql.y:6804 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1362: + case 1365: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6792 +//line sql.y:6808 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1363: + case 1366: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6796 +//line sql.y:6812 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1364: + case 1367: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6800 +//line sql.y:6816 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1365: + case 1368: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6805 +//line sql.y:6821 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1366: + case 1369: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6809 +//line sql.y:6825 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1367: + case 1370: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6815 +//line sql.y:6831 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1368: + case 1371: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6819 +//line sql.y:6835 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1369: + case 1372: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6823 +//line sql.y:6839 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1370: + case 1373: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6827 +//line sql.y:6843 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1371: + case 1374: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6831 +//line sql.y:6847 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1372: + case 1375: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6836 +//line sql.y:6852 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1373: + case 1376: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6840 +//line sql.y:6856 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1374: + case 1377: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6844 +//line sql.y:6860 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1375: + case 1378: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6848 +//line sql.y:6864 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1376: + case 1379: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6852 +//line sql.y:6868 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1377: + case 1380: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6856 +//line sql.y:6872 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1378: + case 1381: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6861 +//line sql.y:6877 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1379: + case 1382: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6865 +//line sql.y:6881 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1380: + case 1383: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6869 +//line sql.y:6885 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1381: + case 1384: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6873 +//line sql.y:6889 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1382: + case 1385: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6880 +//line sql.y:6896 { yyLOCAL = &ExtractValueExpr{Fragment: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1383: + case 1386: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6884 +//line sql.y:6900 { yyLOCAL = &UpdateXMLExpr{Target: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion(), NewXML: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1384: + case 1387: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6890 +//line sql.y:6906 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1385: + case 1388: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6894 +//line sql.y:6910 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatPicoTimeType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1386: + case 1389: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6898 +//line sql.y:6914 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsCurrentThreadIDType} } yyVAL.union = yyLOCAL - case 1387: + case 1390: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6902 +//line sql.y:6918 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsThreadIDType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1388: + case 1391: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6908 +//line sql.y:6924 { yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1389: + case 1392: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6912 +//line sql.y:6928 { yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1390: + case 1393: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6916 +//line sql.y:6932 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1391: + case 1394: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6920 +//line sql.y:6936 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1392: + case 1395: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6924 +//line sql.y:6940 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1393: + case 1396: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6928 +//line sql.y:6944 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1394: + case 1397: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6932 +//line sql.y:6948 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1395: + case 1398: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6937 +//line sql.y:6953 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1396: + case 1399: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6941 +//line sql.y:6957 { yyLOCAL = yyDollar[2].convertTypeUnion() } yyVAL.union = yyLOCAL - case 1397: + case 1400: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6947 +//line sql.y:6963 { yyLOCAL = IntervalDayHour } yyVAL.union = yyLOCAL - case 1398: + case 1401: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6951 +//line sql.y:6967 { yyLOCAL = IntervalDayMicrosecond } yyVAL.union = yyLOCAL - case 1399: + case 1402: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6955 +//line sql.y:6971 { yyLOCAL = IntervalDayMinute } yyVAL.union = yyLOCAL - case 1400: + case 1403: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6959 +//line sql.y:6975 { yyLOCAL = IntervalDaySecond } yyVAL.union = yyLOCAL - case 1401: + case 1404: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6963 +//line sql.y:6979 { yyLOCAL = IntervalHourMicrosecond } yyVAL.union = yyLOCAL - case 1402: + case 1405: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6967 +//line sql.y:6983 { yyLOCAL = IntervalHourMinute } yyVAL.union = yyLOCAL - case 1403: + case 1406: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6971 +//line sql.y:6987 { yyLOCAL = IntervalHourSecond } yyVAL.union = yyLOCAL - case 1404: + case 1407: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6975 +//line sql.y:6991 { yyLOCAL = IntervalMinuteMicrosecond } yyVAL.union = yyLOCAL - case 1405: + case 1408: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6979 +//line sql.y:6995 { yyLOCAL = IntervalMinuteSecond } yyVAL.union = yyLOCAL - case 1406: + case 1409: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6983 +//line sql.y:6999 { yyLOCAL = IntervalSecondMicrosecond } yyVAL.union = yyLOCAL - case 1407: + case 1410: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6987 +//line sql.y:7003 { yyLOCAL = IntervalYearMonth } yyVAL.union = yyLOCAL - case 1408: + case 1411: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6991 +//line sql.y:7007 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1409: + case 1412: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6995 +//line sql.y:7011 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1410: + case 1413: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6999 +//line sql.y:7015 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1411: + case 1414: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7003 +//line sql.y:7019 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1412: + case 1415: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7007 +//line sql.y:7023 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1413: + case 1416: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7011 +//line sql.y:7027 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1414: + case 1417: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7015 +//line sql.y:7031 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1415: + case 1418: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7019 +//line sql.y:7035 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1416: + case 1419: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7023 +//line sql.y:7039 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1417: + case 1420: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7029 +//line sql.y:7045 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1418: + case 1421: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7033 +//line sql.y:7049 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1419: + case 1422: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7037 +//line sql.y:7053 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1420: + case 1423: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7041 +//line sql.y:7057 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1421: + case 1424: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7045 +//line sql.y:7061 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1422: + case 1425: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7049 +//line sql.y:7065 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1423: + case 1426: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7053 +//line sql.y:7069 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1424: + case 1427: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7057 +//line sql.y:7073 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1425: + case 1428: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7061 +//line sql.y:7077 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1426: + case 1429: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7065 +//line sql.y:7081 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1427: + case 1430: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7069 +//line sql.y:7085 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1428: + case 1431: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7073 +//line sql.y:7089 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1429: + case 1432: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7077 +//line sql.y:7093 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1430: + case 1433: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7081 +//line sql.y:7097 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1431: + case 1434: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7085 +//line sql.y:7101 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1432: + case 1435: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7089 +//line sql.y:7105 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1433: + case 1436: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7093 +//line sql.y:7109 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1434: + case 1437: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7097 +//line sql.y:7113 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1437: + case 1440: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:7107 +//line sql.y:7123 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 1438: + case 1441: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:7111 +//line sql.y:7127 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 1439: + case 1442: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:7115 +//line sql.y:7131 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 1440: + case 1443: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7125 +//line sql.y:7141 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1441: + case 1444: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7129 +//line sql.y:7145 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1442: + case 1445: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7133 +//line sql.y:7149 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1443: + case 1446: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7137 +//line sql.y:7153 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1444: + case 1447: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7141 +//line sql.y:7157 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("replace"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1445: + case 1448: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7147 +//line sql.y:7163 { yyLOCAL = NoOption } yyVAL.union = yyLOCAL - case 1446: + case 1449: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7151 +//line sql.y:7167 { yyLOCAL = BooleanModeOpt } yyVAL.union = yyLOCAL - case 1447: + case 1450: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7155 +//line sql.y:7171 { yyLOCAL = NaturalLanguageModeOpt } yyVAL.union = yyLOCAL - case 1448: + case 1451: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7159 +//line sql.y:7175 { yyLOCAL = NaturalLanguageModeWithQueryExpansionOpt } yyVAL.union = yyLOCAL - case 1449: + case 1452: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7163 +//line sql.y:7179 { yyLOCAL = QueryExpansionOpt } yyVAL.union = yyLOCAL - case 1450: + case 1453: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7169 +//line sql.y:7185 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } - case 1451: + case 1454: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7173 +//line sql.y:7189 { yyVAL.str = string(yyDollar[1].str) } - case 1452: + case 1455: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7177 +//line sql.y:7193 { yyVAL.str = string(yyDollar[1].str) } - case 1453: + case 1456: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7183 +//line sql.y:7199 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1454: + case 1457: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7187 +//line sql.y:7203 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: ptr.Of(convertStringToInt(yyDollar[4].str))} } yyVAL.union = yyLOCAL - case 1455: + case 1458: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7191 +//line sql.y:7207 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: ptr.Of(convertStringToInt(yyDollar[4].str))} } yyVAL.union = yyLOCAL - case 1456: + case 1459: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7197 +//line sql.y:7213 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1457: + case 1460: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7201 +//line sql.y:7217 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset} } yyVAL.union = yyLOCAL - case 1458: + case 1461: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7205 +//line sql.y:7221 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1459: + case 1462: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7209 +//line sql.y:7225 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1460: + case 1463: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7213 +//line sql.y:7229 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} yyLOCAL.Length = yyDollar[2].LengthScaleOption.Length yyLOCAL.Scale = yyDollar[2].LengthScaleOption.Scale } yyVAL.union = yyLOCAL - case 1461: + case 1464: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7219 +//line sql.y:7235 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1462: + case 1465: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7223 +//line sql.y:7239 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1463: + case 1466: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7227 +//line sql.y:7243 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1464: + case 1467: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7231 +//line sql.y:7247 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1465: + case 1468: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7235 +//line sql.y:7251 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1466: + case 1469: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7239 +//line sql.y:7255 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1467: + case 1470: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7243 +//line sql.y:7259 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1468: + case 1471: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7247 +//line sql.y:7263 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1469: + case 1472: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7251 +//line sql.y:7267 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1470: + case 1473: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7255 +//line sql.y:7271 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1471: + case 1474: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7261 +//line sql.y:7277 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1472: + case 1475: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:7265 +//line sql.y:7281 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1473: + case 1476: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7270 +//line sql.y:7286 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1474: + case 1477: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7274 +//line sql.y:7290 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1475: + case 1478: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7279 +//line sql.y:7295 { yyVAL.str = string("") } - case 1476: + case 1479: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7283 +//line sql.y:7299 { yyVAL.str = encodeSQLString(yyDollar[2].str) } - case 1477: + case 1480: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*When -//line sql.y:7289 +//line sql.y:7305 { yyLOCAL = []*When{yyDollar[1].whenUnion()} } yyVAL.union = yyLOCAL - case 1478: + case 1481: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7293 +//line sql.y:7309 { yySLICE := (*[]*When)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].whenUnion()) } - case 1479: + case 1482: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *When -//line sql.y:7299 +//line sql.y:7315 { yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1480: + case 1483: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7304 +//line sql.y:7320 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1481: + case 1484: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7308 +//line sql.y:7324 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1482: + case 1485: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7314 +//line sql.y:7330 { yyLOCAL = &ColName{Name: yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1483: + case 1486: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7318 +//line sql.y:7334 { yyLOCAL = &ColName{Name: NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 1484: + case 1487: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColName -//line sql.y:7322 +//line sql.y:7338 { yyLOCAL = &ColName{Qualifier: TableName{Name: yyDollar[1].identifierCS}, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1485: + case 1488: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColName -//line sql.y:7326 +//line sql.y:7342 { yyLOCAL = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}, Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 1486: + case 1489: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7332 +//line sql.y:7348 { yyLOCAL = yyDollar[1].colNameUnion() } yyVAL.union = yyLOCAL - case 1487: + case 1490: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7336 +//line sql.y:7352 { yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1488: + case 1491: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7342 +//line sql.y:7358 { // TODO(sougou): Deprecate this construct. if yyDollar[1].identifierCI.Lowered() != "value" { @@ -21472,442 +21477,442 @@ yydefault: yyLOCAL = NewIntLiteral("1") } yyVAL.union = yyLOCAL - case 1489: + case 1492: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7351 +//line sql.y:7367 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1490: + case 1493: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7355 +//line sql.y:7371 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1491: + case 1494: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *GroupBy -//line sql.y:7360 +//line sql.y:7376 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1492: + case 1495: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *GroupBy -//line sql.y:7364 +//line sql.y:7380 { yyLOCAL = &GroupBy{Exprs: yyDollar[3].exprsUnion(), WithRollup: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 1493: + case 1496: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7369 +//line sql.y:7385 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1494: + case 1497: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:7373 +//line sql.y:7389 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1495: + case 1498: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7379 +//line sql.y:7395 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1496: + case 1499: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7383 +//line sql.y:7399 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1497: + case 1500: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *NamedWindow -//line sql.y:7389 +//line sql.y:7405 { yyLOCAL = &NamedWindow{yyDollar[2].windowDefinitionsUnion()} } yyVAL.union = yyLOCAL - case 1498: + case 1501: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7395 +//line sql.y:7411 { yyLOCAL = NamedWindows{yyDollar[1].namedWindowUnion()} } yyVAL.union = yyLOCAL - case 1499: + case 1502: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7399 +//line sql.y:7415 { yySLICE := (*NamedWindows)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].namedWindowUnion()) } - case 1500: + case 1503: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7404 +//line sql.y:7420 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1501: + case 1504: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7408 +//line sql.y:7424 { yyLOCAL = yyDollar[1].namedWindowsUnion() } yyVAL.union = yyLOCAL - case 1502: + case 1505: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7413 +//line sql.y:7429 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1503: + case 1506: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7417 +//line sql.y:7433 { yyLOCAL = yyDollar[1].orderByUnion() } yyVAL.union = yyLOCAL - case 1504: + case 1507: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7423 +//line sql.y:7439 { yyLOCAL = yyDollar[3].orderByUnion() } yyVAL.union = yyLOCAL - case 1505: + case 1508: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7429 +//line sql.y:7445 { yyLOCAL = OrderBy{yyDollar[1].orderUnion()} } yyVAL.union = yyLOCAL - case 1506: + case 1509: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7433 +//line sql.y:7449 { yySLICE := (*OrderBy)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].orderUnion()) } - case 1507: + case 1510: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Order -//line sql.y:7439 +//line sql.y:7455 { yyLOCAL = &Order{Expr: yyDollar[1].exprUnion(), Direction: yyDollar[2].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 1508: + case 1511: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7444 +//line sql.y:7460 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1509: + case 1512: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7448 +//line sql.y:7464 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1510: + case 1513: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7452 +//line sql.y:7468 { yyLOCAL = DescOrder } yyVAL.union = yyLOCAL - case 1511: + case 1514: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Limit -//line sql.y:7457 +//line sql.y:7473 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1512: + case 1515: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Limit -//line sql.y:7461 +//line sql.y:7477 { yyLOCAL = yyDollar[1].limitUnion() } yyVAL.union = yyLOCAL - case 1513: + case 1516: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Limit -//line sql.y:7467 +//line sql.y:7483 { yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1514: + case 1517: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7471 +//line sql.y:7487 { yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1515: + case 1518: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7475 +//line sql.y:7491 { yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1516: + case 1519: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7480 +//line sql.y:7496 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1517: + case 1520: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7484 +//line sql.y:7500 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1518: + case 1521: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7488 +//line sql.y:7504 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1519: + case 1522: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7492 +//line sql.y:7508 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1520: + case 1523: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7496 +//line sql.y:7512 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1521: + case 1524: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7503 +//line sql.y:7519 { yyLOCAL = &LockOption{Type: DefaultType} } yyVAL.union = yyLOCAL - case 1522: + case 1525: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7507 +//line sql.y:7523 { yyLOCAL = &LockOption{Type: NoneType} } yyVAL.union = yyLOCAL - case 1523: + case 1526: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7511 +//line sql.y:7527 { yyLOCAL = &LockOption{Type: SharedType} } yyVAL.union = yyLOCAL - case 1524: + case 1527: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7515 +//line sql.y:7531 { yyLOCAL = &LockOption{Type: ExclusiveType} } yyVAL.union = yyLOCAL - case 1525: + case 1528: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7521 +//line sql.y:7537 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1526: + case 1529: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7525 +//line sql.y:7541 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1527: + case 1530: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7529 +//line sql.y:7545 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1528: + case 1531: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7533 +//line sql.y:7549 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1529: + case 1532: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7538 +//line sql.y:7554 { yyVAL.str = "" } - case 1530: + case 1533: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7542 +//line sql.y:7558 { yyVAL.str = string(yyDollar[3].str) } - case 1531: + case 1534: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7546 +//line sql.y:7562 { yyVAL.str = string(yyDollar[3].str) } - case 1532: + case 1535: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7550 +//line sql.y:7566 { yyVAL.str = string(yyDollar[3].str) } - case 1533: + case 1536: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7555 +//line sql.y:7571 { yyVAL.str = "" } - case 1534: + case 1537: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7559 +//line sql.y:7575 { yyVAL.str = yyDollar[3].str } - case 1535: + case 1538: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7565 +//line sql.y:7581 { yyVAL.str = string(yyDollar[1].str) } - case 1536: + case 1539: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7569 +//line sql.y:7585 { yyVAL.str = string(yyDollar[1].str) } - case 1537: + case 1540: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7574 +//line sql.y:7590 { yyVAL.str = "" } - case 1538: + case 1541: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7578 +//line sql.y:7594 { yyVAL.str = yyDollar[2].str } - case 1539: + case 1542: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7583 +//line sql.y:7599 { yyVAL.str = "cascaded" } - case 1540: + case 1543: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7587 +//line sql.y:7603 { yyVAL.str = string(yyDollar[1].str) } - case 1541: + case 1544: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7591 +//line sql.y:7607 { yyVAL.str = string(yyDollar[1].str) } - case 1542: + case 1545: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Definer -//line sql.y:7596 +//line sql.y:7612 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1543: + case 1546: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7600 +//line sql.y:7616 { yyLOCAL = yyDollar[3].definerUnion() } yyVAL.union = yyLOCAL - case 1544: + case 1547: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Definer -//line sql.y:7606 +//line sql.y:7622 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1545: + case 1548: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7612 +//line sql.y:7628 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1546: + case 1549: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Definer -//line sql.y:7618 +//line sql.y:7634 { yyLOCAL = &Definer{ Name: yyDollar[1].str, @@ -21915,433 +21920,464 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1547: + case 1550: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7627 +//line sql.y:7643 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 1548: + case 1551: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7631 +//line sql.y:7647 { yyVAL.str = formatIdentifier(yyDollar[1].str) } - case 1549: + case 1552: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7636 +//line sql.y:7652 { yyVAL.str = "" } - case 1550: + case 1553: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7640 +//line sql.y:7656 { yyVAL.str = formatAddress(yyDollar[1].str) } - case 1551: + case 1554: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock -//line sql.y:7646 +//line sql.y:7662 { yyLOCAL = ForUpdateLock } yyVAL.union = yyLOCAL - case 1552: + case 1555: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Lock -//line sql.y:7650 +//line sql.y:7666 { yyLOCAL = ForUpdateLockNoWait } yyVAL.union = yyLOCAL - case 1553: + case 1556: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:7654 +//line sql.y:7670 { yyLOCAL = ForUpdateLockSkipLocked } yyVAL.union = yyLOCAL - case 1554: + case 1557: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock -//line sql.y:7658 +//line sql.y:7674 { yyLOCAL = ForShareLock } yyVAL.union = yyLOCAL - case 1555: + case 1558: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Lock -//line sql.y:7662 +//line sql.y:7678 { yyLOCAL = ForShareLockNoWait } yyVAL.union = yyLOCAL - case 1556: + case 1559: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:7666 +//line sql.y:7682 { yyLOCAL = ForShareLockSkipLocked } yyVAL.union = yyLOCAL - case 1557: + case 1560: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:7670 +//line sql.y:7686 { yyLOCAL = ShareModeLock } yyVAL.union = yyLOCAL - case 1558: + case 1561: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7676 +//line sql.y:7692 { yyLOCAL = &SelectInto{Type: IntoOutfileS3, FileName: encodeSQLString(yyDollar[4].str), Charset: yyDollar[5].columnCharset, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str} } yyVAL.union = yyLOCAL - case 1559: + case 1562: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7680 +//line sql.y:7696 { yyLOCAL = &SelectInto{Type: IntoDumpfile, FileName: encodeSQLString(yyDollar[3].str), Charset: ColumnCharset{}, FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1560: + case 1563: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7684 +//line sql.y:7700 { yyLOCAL = &SelectInto{Type: IntoOutfile, FileName: encodeSQLString(yyDollar[3].str), Charset: yyDollar[4].columnCharset, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1561: + case 1564: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7689 +//line sql.y:7705 { yyVAL.str = "" } - case 1562: + case 1565: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7693 +//line sql.y:7709 { yyVAL.str = " format csv" + yyDollar[3].str } - case 1563: + case 1566: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7697 +//line sql.y:7713 { yyVAL.str = " format text" + yyDollar[3].str } - case 1564: + case 1567: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7702 +//line sql.y:7718 { yyVAL.str = "" } - case 1565: + case 1568: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7706 +//line sql.y:7722 { yyVAL.str = " header" } - case 1566: + case 1569: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7711 +//line sql.y:7727 { yyVAL.str = "" } - case 1567: + case 1570: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7715 +//line sql.y:7731 { yyVAL.str = " manifest on" } - case 1568: + case 1571: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7719 +//line sql.y:7735 { yyVAL.str = " manifest off" } - case 1569: + case 1572: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7724 +//line sql.y:7740 { yyVAL.str = "" } - case 1570: + case 1573: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7728 +//line sql.y:7744 { yyVAL.str = " overwrite on" } - case 1571: + case 1574: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7732 +//line sql.y:7748 { yyVAL.str = " overwrite off" } - case 1572: + case 1575: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7738 +//line sql.y:7754 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1573: + case 1576: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7743 +//line sql.y:7759 { yyVAL.str = "" } - case 1574: + case 1577: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7747 +//line sql.y:7763 { yyVAL.str = " lines" + yyDollar[2].str } - case 1575: + case 1578: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7753 +//line sql.y:7769 { yyVAL.str = yyDollar[1].str } - case 1576: + case 1579: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7757 +//line sql.y:7773 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1577: + case 1580: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7763 +//line sql.y:7779 { yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str) } - case 1578: + case 1581: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7767 +//line sql.y:7783 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1579: + case 1582: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7772 +//line sql.y:7788 { yyVAL.str = "" } - case 1580: + case 1583: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7776 +//line sql.y:7792 { yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str } - case 1581: + case 1584: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7782 +//line sql.y:7798 { yyVAL.str = yyDollar[1].str } - case 1582: + case 1585: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7786 +//line sql.y:7802 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1583: + case 1586: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7792 +//line sql.y:7808 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1584: + case 1587: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7796 +//line sql.y:7812 { yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str) } - case 1585: + case 1588: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7800 +//line sql.y:7816 { yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str) } - case 1586: + case 1589: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7805 +//line sql.y:7821 { yyVAL.str = "" } - case 1587: + case 1590: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7809 +//line sql.y:7825 { yyVAL.str = " optionally" } - case 1588: + case 1591: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Insert -//line sql.y:7822 +//line sql.y:7838 { yyLOCAL = &Insert{Rows: yyDollar[2].valuesUnion(), RowAlias: yyDollar[3].rowAliasUnion()} } yyVAL.union = yyLOCAL - case 1589: + case 1592: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Insert -//line sql.y:7826 +//line sql.y:7842 { - yyLOCAL = &Insert{Rows: yyDollar[1].selStmtUnion()} + yyLOCAL = &Insert{Rows: yyDollar[1].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 1590: + case 1593: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *Insert -//line sql.y:7830 +//line sql.y:7846 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[5].valuesUnion(), RowAlias: yyDollar[6].rowAliasUnion()} } yyVAL.union = yyLOCAL - case 1591: + case 1594: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *Insert -//line sql.y:7834 +//line sql.y:7850 { yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion(), RowAlias: yyDollar[5].rowAliasUnion()} } yyVAL.union = yyLOCAL - case 1592: + case 1595: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7838 +//line sql.y:7854 { - yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].selStmtUnion()} + yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 1593: + case 1596: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:7844 +//line sql.y:7860 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1594: + case 1597: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:7848 +//line sql.y:7864 { yyLOCAL = Columns{yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1595: + case 1598: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7852 +//line sql.y:7868 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 1596: + case 1599: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:7856 +//line sql.y:7872 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[5].identifierCI) } - case 1597: + case 1600: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *RowAlias -//line sql.y:7861 +//line sql.y:7877 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1598: + case 1601: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *RowAlias -//line sql.y:7865 +//line sql.y:7881 { yyLOCAL = &RowAlias{TableName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL - case 1599: + case 1602: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *RowAlias -//line sql.y:7869 +//line sql.y:7885 { yyLOCAL = &RowAlias{TableName: yyDollar[2].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 1600: + case 1603: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7874 +//line sql.y:7890 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1601: + case 1604: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7878 +//line sql.y:7894 { yyLOCAL = yyDollar[5].updateExprsUnion() } yyVAL.union = yyLOCAL - case 1602: + case 1605: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Values -//line sql.y:7884 +//line sql.y:7900 { yyLOCAL = Values{yyDollar[1].valTupleUnion()} } yyVAL.union = yyLOCAL - case 1603: + case 1606: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7888 +//line sql.y:7904 { yySLICE := (*Values)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) } - case 1604: + case 1607: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Values +//line sql.y:7910 + { + yyLOCAL = Values{yyDollar[1].valTupleUnion()} + } + yyVAL.union = yyLOCAL + case 1608: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7914 + { + yySLICE := (*Values)(yyIaddr(yyVAL.union)) + *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) + } + case 1609: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7894 +//line sql.y:7920 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1605: + case 1610: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL ValTuple +//line sql.y:7924 + { + yyLOCAL = ValTuple{} + } + yyVAL.union = yyLOCAL + case 1611: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ValTuple +//line sql.y:7930 + { + yyLOCAL = yyDollar[1].valTupleUnion() + } + yyVAL.union = yyLOCAL + case 1612: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7898 +//line sql.y:7934 { yyLOCAL = ValTuple{} } yyVAL.union = yyLOCAL - case 1606: + case 1613: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7904 +//line sql.y:7940 { yyLOCAL = ValTuple(yyDollar[2].exprsUnion()) } yyVAL.union = yyLOCAL - case 1607: + case 1614: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7908 +//line sql.y:7946 { yyLOCAL = ValTuple(yyDollar[3].exprsUnion()) } yyVAL.union = yyLOCAL - case 1608: + case 1617: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7913 +//line sql.y:7956 { if len(yyDollar[1].valTupleUnion()) == 1 { yyLOCAL = yyDollar[1].valTupleUnion()[0] @@ -22350,300 +22386,300 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1609: + case 1618: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7923 +//line sql.y:7966 { yyLOCAL = UpdateExprs{yyDollar[1].updateExprUnion()} } yyVAL.union = yyLOCAL - case 1610: + case 1619: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7927 +//line sql.y:7970 { yySLICE := (*UpdateExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].updateExprUnion()) } - case 1611: + case 1620: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *UpdateExpr -//line sql.y:7933 +//line sql.y:7976 { yyLOCAL = &UpdateExpr{Name: yyDollar[1].colNameUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1613: + case 1622: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7940 +//line sql.y:7983 { yyVAL.str = "charset" } - case 1616: + case 1625: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7950 +//line sql.y:7993 { yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String()) } yyVAL.union = yyLOCAL - case 1617: + case 1626: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7954 +//line sql.y:7997 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1618: + case 1627: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7958 +//line sql.y:8001 { yyLOCAL = &Default{} } yyVAL.union = yyLOCAL - case 1621: + case 1630: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7967 +//line sql.y:8010 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1622: + case 1631: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:7969 +//line sql.y:8012 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1623: + case 1632: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7972 +//line sql.y:8015 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1624: + case 1633: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:7974 +//line sql.y:8017 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1625: + case 1634: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7977 +//line sql.y:8020 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1626: + case 1635: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL bool -//line sql.y:7979 +//line sql.y:8022 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1627: + case 1636: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Ignore -//line sql.y:7982 +//line sql.y:8025 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1628: + case 1637: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Ignore -//line sql.y:7984 +//line sql.y:8027 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1629: + case 1638: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7987 +//line sql.y:8030 { yyVAL.empty = struct{}{} } - case 1630: + case 1639: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7989 +//line sql.y:8032 { yyVAL.empty = struct{}{} } - case 1631: + case 1640: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7991 +//line sql.y:8034 { yyVAL.empty = struct{}{} } - case 1632: + case 1641: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:7995 +//line sql.y:8038 { yyLOCAL = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL - case 1633: + case 1642: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:8000 +//line sql.y:8043 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1634: + case 1643: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:8004 +//line sql.y:8047 { yyLOCAL = yyDollar[1].exprsUnion() } yyVAL.union = yyLOCAL - case 1635: + case 1644: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:8009 +//line sql.y:8052 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1636: + case 1645: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:8011 +//line sql.y:8054 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL - case 1637: + case 1646: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:8015 +//line sql.y:8058 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), String: string(yyDollar[2].identifierCI.String())} } yyVAL.union = yyLOCAL - case 1638: + case 1647: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8021 +//line sql.y:8064 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1639: + case 1648: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8025 +//line sql.y:8068 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1641: + case 1650: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8032 +//line sql.y:8075 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1642: + case 1651: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8038 +//line sql.y:8081 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1643: + case 1652: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8042 +//line sql.y:8085 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1644: + case 1653: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8048 +//line sql.y:8091 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1645: + case 1654: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8052 +//line sql.y:8095 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1647: + case 1656: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8059 +//line sql.y:8102 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1648: + case 1657: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:8065 +//line sql.y:8108 { yyLOCAL = &Kill{Type: yyDollar[2].killTypeUnion(), ProcesslistID: convertStringToUInt64(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 1649: + case 1658: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL KillType -//line sql.y:8071 +//line sql.y:8114 { yyLOCAL = ConnectionType } yyVAL.union = yyLOCAL - case 1650: + case 1659: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL KillType -//line sql.y:8075 +//line sql.y:8118 { yyLOCAL = ConnectionType } yyVAL.union = yyLOCAL - case 1651: + case 1660: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL KillType -//line sql.y:8079 +//line sql.y:8122 { yyLOCAL = QueryType } yyVAL.union = yyLOCAL - case 2283: + case 2296: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8739 +//line sql.y:8786 { } - case 2284: + case 2297: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8744 +//line sql.y:8791 { } - case 2285: + case 2298: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8748 +//line sql.y:8795 { skipToEnd(yylex) } - case 2286: + case 2299: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8753 +//line sql.y:8800 { skipToEnd(yylex) } - case 2287: + case 2300: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8757 +//line sql.y:8804 { skipToEnd(yylex) } - case 2288: + case 2301: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8761 +//line sql.y:8808 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index bf1a793e7e8..b6835ad32a5 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -60,14 +60,15 @@ func markBindVariable(yylex yyLexer, bvar string) { } %union { - statement Statement - selStmt SelectStatement - tableExpr TableExpr - expr Expr - colTuple ColTuple - optVal Expr - constraintInfo ConstraintInfo - alterOption AlterOption + statement Statement + selStmt SelectStatement + tableStmt TableStatement + tableExpr TableExpr + expr Expr + colTuple ColTuple + optVal Expr + constraintInfo ConstraintInfo + alterOption AlterOption ins *Insert colName *ColName @@ -401,6 +402,7 @@ func markBindVariable(yylex yyLexer, bvar string) { %token NESTED NETWORK_NAMESPACE NOWAIT NULLS OJ OLD OPTIONAL ORDINALITY ORGANIZATION OTHERS PARTIAL PATH PERSIST PERSIST_ONLY PRECEDING PRIVILEGE_CHECKS_USER PROCESS %token RANDOM REFERENCE REQUIRE_ROW_FORMAT RESOURCE RESPECT RESTART RETAIN REUSE ROLE SECONDARY SECONDARY_ENGINE SECONDARY_ENGINE_ATTRIBUTE SECONDARY_LOAD SECONDARY_UNLOAD SIMPLE SKIP SRID %token THREAD_PRIORITY TIES UNBOUNDED VCPU VISIBLE RETURNING +%token MANUAL PARALLEL QUALIFY TABLESAMPLE // Performance Schema Functions %token FORMAT_BYTES FORMAT_PICO_TIME PS_CURRENT_THREAD_ID PS_THREAD_ID @@ -434,7 +436,7 @@ func markBindVariable(yylex yyLexer, bvar string) { %type prepare_statement execute_statement deallocate_statement %type stream_statement vstream_statement insert_statement update_statement delete_statement set_statement set_transaction_statement %type create_statement alter_statement rename_statement drop_statement truncate_statement flush_statement do_statement -%type select_statement select_stmt_with_into query_expression_parens query_expression query_expression_body query_primary +%type select_statement select_stmt_with_into query_expression_parens query_expression query_expression_body query_primary values_statement %type with_clause_opt with_clause %type common_table_expr %type with_list @@ -517,8 +519,8 @@ func markBindVariable(yylex yyLexer, bvar string) { %type is_suffix %type col_tuple %type expression_list expression_list_opt window_partition_clause_opt -%type tuple_list -%type row_tuple tuple_or_empty +%type row_tuple_list val_tuple_list +%type val_tuple row_tuple val_tuple_or_empty row_tuple_or_empty val_or_row_tuple %type subquery %type derived_table %type column_name after_opt @@ -769,7 +771,7 @@ query_expression_parens: } | openb query_expression locking_clause closeb { - setLockInSelect($2, $3) + setLockIfPossible(yylex, $2, $3) $$ = $2 } @@ -810,9 +812,9 @@ query_expression: | with_clause query_expression_body order_by_opt limit_opt { $2.SetWith($1) - $2.SetOrderBy($3) - $2.SetLimit($4) - $$ = $2 + $2.SetOrderBy($3) + $2.SetLimit($4) + $$ = $2 } | with_clause query_expression_parens limit_clause { @@ -865,7 +867,7 @@ query_expression } | query_expression locking_clause { - setLockInSelect($1, $2) + setLockIfPossible(yylex, $1, $2) $$ = $1 } | query_expression_parens @@ -884,27 +886,37 @@ select_stmt_with_into: } | query_expression into_clause { - $1.SetInto($2) + setIntoIfPossible(yylex, $1, $2) $$ = $1 } | query_expression into_clause locking_clause { - $1.SetInto($2) - $1.SetLock($3) + setIntoIfPossible(yylex, $1, $2) + setLockIfPossible(yylex, $1, $3) $$ = $1 } | query_expression locking_clause into_clause { - $1.SetInto($3) - $1.SetLock($2) + setLockIfPossible(yylex, $1, $2) + setIntoIfPossible(yylex, $1, $3) $$ = $1 } | query_expression_parens into_clause { - $1.SetInto($2) + setIntoIfPossible(yylex, $1, $2) $$ = $1 } +values_statement: + VALUES comment_opt LIST_ARG + { + $$ = &ValuesStatement{Comments: Comments($2).Parsed(), ListArg: ListArg($3[2:])} + } +| VALUES comment_opt row_tuple_list + { + $$ = &ValuesStatement{Comments: Comments($2).Parsed(), Rows: $3} + } + stream_statement: STREAM comment_opt select_expression FROM table_name { @@ -928,6 +940,10 @@ query_primary: { $$ = NewSelect(Comments($2), $4/*SelectExprs*/, $3/*options*/, nil, $5/*from*/, NewWhere(WhereClause, $6), $7, NewWhere(HavingClause, $8), $9) } +| values_statement + { + $$ = $1 + } insert_statement: insert_or_replace comment_opt ignore_opt into_table_name opt_partition_clause insert_data on_dup_opt @@ -3871,7 +3887,7 @@ subpartition_definition_attribute_list_opt: } partition_value_range: - VALUES LESS THAN row_tuple + VALUES LESS THAN val_tuple { $$ = &PartitionValueRange{ Type: LessThanType, @@ -3885,7 +3901,7 @@ partition_value_range: Maxvalue: true, } } -| VALUES IN row_tuple +| VALUES IN val_tuple { $$ = &PartitionValueRange{ Type: InType, @@ -5918,7 +5934,7 @@ any_all_compare: } col_tuple: - row_tuple + val_tuple { $$ = $1 } @@ -7818,7 +7834,7 @@ optionally_opt: // Because the rules are together, the parser can keep shifting // the tokens until it disambiguates a as sql_id and select as keyword. insert_data: - VALUES tuple_list row_alias_opt + VALUES val_tuple_list row_alias_opt { $$ = &Insert{Rows: $2, RowAlias: $3} } @@ -7826,11 +7842,11 @@ insert_data: { $$ = &Insert{Rows: $1} } -| openb ins_column_list closeb VALUES tuple_list row_alias_opt +| openb ins_column_list closeb VALUES val_tuple_list row_alias_opt { $$ = &Insert{Columns: $2, Rows: $5, RowAlias: $6} } -| openb closeb VALUES tuple_list row_alias_opt +| openb closeb VALUES val_tuple_list row_alias_opt { $$ = &Insert{Columns: []IdentifierCI{}, Rows: $4, RowAlias: $5} } @@ -7879,37 +7895,64 @@ on_dup_opt: $$ = $5 } -tuple_list: - tuple_or_empty +row_tuple_list: + row_tuple_or_empty { $$ = Values{$1} } -| tuple_list ',' tuple_or_empty +| row_tuple_list ',' row_tuple_or_empty { $$ = append($1, $3) } -tuple_or_empty: +val_tuple_list: + val_tuple_or_empty + { + $$ = Values{$1} + } +| val_tuple_list ',' val_tuple_or_empty + { + $$ = append($1, $3) + } + +row_tuple_or_empty: row_tuple { $$ = $1 } +| ROW openb closeb + { + $$ = ValTuple{} + } + +val_tuple_or_empty: + val_tuple + { + $$ = $1 + } | openb closeb { $$ = ValTuple{} } -row_tuple: +val_tuple: openb expression_list closeb { $$ = ValTuple($2) } -| ROW openb expression_list closeb + +row_tuple: + ROW openb expression_list closeb { $$ = ValTuple($3) } + +val_or_row_tuple: + val_tuple +| row_tuple + tuple_expression: - row_tuple + val_or_row_tuple { if len($1) == 1 { $$ = $1[0] @@ -8443,6 +8486,7 @@ non_reserved_keyword: | LONGBLOB | LONGTEXT | LTRIM %prec FUNCTION_CALL_NON_KEYWORD +| MANUAL | MANIFEST | MASTER_COMPRESSION_ALGORITHMS | MASTER_PUBLIC_KEY_PATH @@ -8488,6 +8532,7 @@ non_reserved_keyword: | OTHERS | OVERWRITE | PACK_KEYS +| PARALLEL | PARSER | PARTIAL | PARTITIONING @@ -8511,6 +8556,7 @@ non_reserved_keyword: | PROCEDURE | PROCESSLIST | PURGE +| QUALIFY | QUERIES | QUERY | RANDOM @@ -8638,6 +8684,7 @@ non_reserved_keyword: | SUBPARTITIONS | SUM %prec FUNCTION_CALL_NON_KEYWORD | TABLES +| TABLESAMPLE | TABLESPACE | TEMPORARY | TEMPTABLE diff --git a/go/vt/sqlparser/testdata/mysql_keywords.txt b/go/vt/sqlparser/testdata/mysql_keywords.txt index 9e5c6eab6d8..dc24fe94c0a 100644 --- a/go/vt/sqlparser/testdata/mysql_keywords.txt +++ b/go/vt/sqlparser/testdata/mysql_keywords.txt @@ -1,5 +1,5 @@ // Code generated by `SELECT * FROM INFORMATION_SCHEMA.KEYWORDS`. -// Reference: https://dev.mysql.com/doc/refman/8.0/en/information-schema-keywords-table.html +// Reference: https://dev.mysql.com/doc/refman/8.4/en/information-schema-keywords-table.html // DO NOT EDIT. WORD RESERVED ACCESSIBLE 1 @@ -23,8 +23,11 @@ AS 1 ASC 1 ASCII 0 ASENSITIVE 1 +ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 0 AT 0 ATTRIBUTE 0 +AUTHENTICATION 0 +AUTO 0 AUTOEXTEND_SIZE 0 AUTO_INCREMENT 0 AVG 0 @@ -32,6 +35,7 @@ AVG_ROW_LENGTH 0 BACKUP 0 BEFORE 1 BEGIN 0 +BERNOULLI 0 BETWEEN 1 BIGINT 1 BINARY 1 @@ -44,6 +48,7 @@ BOOLEAN 0 BOTH 1 BTREE 0 BUCKETS 0 +BULK 0 BY 1 BYTE 0 CACHE 0 @@ -53,6 +58,7 @@ CASCADED 0 CASE 1 CATALOG_NAME 0 CHAIN 0 +CHALLENGE_RESPONSE 0 CHANGE 1 CHANGED 0 CHANNEL 0 @@ -181,6 +187,7 @@ EXPLAIN 1 EXPORT 0 EXTENDED 0 EXTENT_SIZE 0 +FACTOR 0 FAILED_LOGIN_ATTEMPTS 0 FALSE 1 FAST 0 @@ -190,6 +197,7 @@ FIELDS 0 FILE 0 FILE_BLOCK_SIZE 0 FILTER 0 +FINISH 0 FIRST 0 FIRST_VALUE 1 FIXED 0 @@ -209,6 +217,7 @@ FULL 0 FULLTEXT 1 FUNCTION 1 GENERAL 0 +GENERATE 0 GENERATED 1 GEOMCOLLECTION 0 GEOMETRY 0 @@ -216,6 +225,7 @@ GEOMETRYCOLLECTION 0 GET 1 GET_FORMAT 0 GET_MASTER_PUBLIC_KEY 0 +GET_SOURCE_PUBLIC_KEY 0 GLOBAL 0 GRANT 1 GRANTS 0 @@ -223,6 +233,8 @@ GROUP 1 GROUPING 1 GROUPS 1 GROUP_REPLICATION 0 +GTIDS 0 +GTID_ONLY 0 HANDLER 0 HASH 0 HAVING 1 @@ -246,7 +258,9 @@ INACTIVE 0 INDEX 1 INDEXES 0 INFILE 1 +INITIAL 0 INITIAL_SIZE 0 +INITIATE 0 INNER 1 INOUT 1 INSENSITIVE 1 @@ -261,6 +275,7 @@ INT3 1 INT4 1 INT8 1 INTEGER 1 +INTERSECT 1 INTERVAL 1 INTO 1 INVISIBLE 0 @@ -279,6 +294,7 @@ JSON 0 JSON_TABLE 1 JSON_VALUE 0 KEY 1 +KEYRING 0 KEYS 1 KEY_BLOCK_SIZE 0 KILL 1 @@ -307,6 +323,7 @@ LOCALTIMESTAMP 1 LOCK 1 LOCKED 0 LOCKS 0 +LOG 0 LOGFILE 0 LOGS 0 LONG 1 @@ -314,6 +331,7 @@ LONGBLOB 1 LONGTEXT 1 LOOP 1 LOW_PRIORITY 1 +MANUAL 0 MASTER 0 MASTER_AUTO_POSITION 0 MASTER_BIND 1 @@ -428,7 +446,9 @@ OVER 1 OWNER 0 PACK_KEYS 0 PAGE 0 +PARALLEL 0 PARSER 0 +PARSE_TREE 0 PARTIAL 0 PARTITION 1 PARTITIONING 0 @@ -462,6 +482,7 @@ PROFILE 0 PROFILES 0 PROXY 0 PURGE 1 +QUALIFY 0 QUARTER 0 QUERY 0 QUICK 0 @@ -481,6 +502,7 @@ REDUNDANT 0 REFERENCE 0 REFERENCES 1 REGEXP 1 +REGISTRATION 0 RELAY 0 RELAYLOG 0 RELAY_LOG_FILE 0 @@ -537,6 +559,7 @@ ROW_COUNT 0 ROW_FORMAT 0 ROW_NUMBER 1 RTREE 0 +S3 0 SAVEPOINT 0 SCHEDULE 0 SCHEMA 1 @@ -574,7 +597,33 @@ SOME 0 SONAME 0 SOUNDS 0 SOURCE 0 +SOURCE_AUTO_POSITION 0 +SOURCE_BIND 0 +SOURCE_COMPRESSION_ALGORITHMS 0 SOURCE_CONNECTION_AUTO_FAILOVER 0 +SOURCE_CONNECT_RETRY 0 +SOURCE_DELAY 0 +SOURCE_HEARTBEAT_PERIOD 0 +SOURCE_HOST 0 +SOURCE_LOG_FILE 0 +SOURCE_LOG_POS 0 +SOURCE_PASSWORD 0 +SOURCE_PORT 0 +SOURCE_PUBLIC_KEY_PATH 0 +SOURCE_RETRY_COUNT 0 +SOURCE_SSL 0 +SOURCE_SSL_CA 0 +SOURCE_SSL_CAPATH 0 +SOURCE_SSL_CERT 0 +SOURCE_SSL_CIPHER 0 +SOURCE_SSL_CRL 0 +SOURCE_SSL_CRLPATH 0 +SOURCE_SSL_KEY 0 +SOURCE_SSL_VERIFY_SERVER_CERT 0 +SOURCE_TLS_CIPHERSUITES 0 +SOURCE_TLS_VERSION 0 +SOURCE_USER 0 +SOURCE_ZSTD_COMPRESSION_LEVEL 0 SPATIAL 1 SPECIFIC 1 SQL 1 @@ -625,6 +674,7 @@ SWITCHES 0 SYSTEM 1 TABLE 1 TABLES 0 +TABLESAMPLE 0 TABLESPACE 0 TABLE_CHECKSUM 0 TABLE_NAME 0 @@ -665,10 +715,12 @@ UNION 1 UNIQUE 1 UNKNOWN 0 UNLOCK 1 +UNREGISTER 0 UNSIGNED 1 UNTIL 0 UPDATE 1 UPGRADE 0 +URL 0 USAGE 1 USE 1 USER 0 diff --git a/go/vt/vterrors/code.go b/go/vt/vterrors/code.go index 0ca275b71fc..df19fcbd408 100644 --- a/go/vt/vterrors/code.go +++ b/go/vt/vterrors/code.go @@ -243,8 +243,15 @@ func errorWithoutState(id string, code vtrpcpb.Code, short, long string) func(ar func errorWithState(id string, code vtrpcpb.Code, state State, short, long string) func(args ...any) *VitessError { return func(args ...any) *VitessError { + var err error + if len(args) != 0 { + err = NewErrorf(code, state, id+": "+short, args...) + } else { + err = NewError(code, state, id+": "+short) + } + return &VitessError{ - Err: NewErrorf(code, state, id+": "+short, args...), + Err: err, Description: long, ID: id, State: state, diff --git a/go/vt/vtexplain/vtexplain_vttablet.go b/go/vt/vtexplain/vtexplain_vttablet.go index 65cd1a96181..94697c22e91 100644 --- a/go/vt/vtexplain/vtexplain_vttablet.go +++ b/go/vt/vtexplain/vtexplain_vttablet.go @@ -621,7 +621,10 @@ func (t *explainTablet) handleSelect(query string) (*sqltypes.Result, error) { case *sqlparser.Select: selStmt = stmt case *sqlparser.Union: - selStmt = sqlparser.GetFirstSelect(stmt) + selStmt, err = sqlparser.GetFirstSelect(stmt) + if err != nil { + return nil, err + } default: return nil, fmt.Errorf("vtexplain: unsupported statement type +%v", reflect.TypeOf(stmt)) } diff --git a/go/vt/vtgate/engine/fake_vcursor_test.go b/go/vt/vtgate/engine/fake_vcursor_test.go index aac3e9b584c..060d2ebcfcb 100644 --- a/go/vt/vtgate/engine/fake_vcursor_test.go +++ b/go/vt/vtgate/engine/fake_vcursor_test.go @@ -164,7 +164,7 @@ func (t *noopVCursor) Environment() *vtenv.Environment { } func (t *noopVCursor) TimeZone() *time.Location { - return nil + return time.Local } func (t *noopVCursor) SQLMode() string { diff --git a/go/vt/vtgate/evalengine/fn_time.go b/go/vt/vtgate/evalengine/fn_time.go index 2d5e12f518d..322b89faafb 100644 --- a/go/vt/vtgate/evalengine/fn_time.go +++ b/go/vt/vtgate/evalengine/fn_time.go @@ -256,7 +256,7 @@ func (call *builtinNow) constant() bool { func (call *builtinSysdate) eval(env *ExpressionEnv) (eval, error) { now := SystemTime() - if tz := env.currentTimezone(); tz != nil { + if tz := env.currentTimezone(); tz != time.Local { now = now.In(tz) } return newEvalDateTime(datetime.NewDateTimeFromStd(now), int(call.prec), false), nil @@ -701,7 +701,7 @@ func (b *builtinFromUnixtime) eval(env *ExpressionEnv) (eval, error) { } t := time.Unix(sec, frac) - if tz := env.currentTimezone(); tz != nil { + if tz := env.currentTimezone(); tz != time.Local { t = t.In(tz) } diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index 74bfb710582..8b06870e7e1 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -2672,10 +2672,12 @@ func TestExecutorShowVitessMigrations(t *testing.T) { func TestExecutorDescHash(t *testing.T) { executor, _, _, _, ctx := createExecutorEnv(t) - - showQuery := "desc hash_index" session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) - _, err := executor.Execute(ctx, nil, "", session, showQuery, nil) + + _, err := executor.Execute(ctx, nil, "", session, "desc hash_index", nil) + require.EqualError(t, err, "VT05004: table 'hash_index' does not exist") + + _, err = executor.Execute(ctx, nil, "", session, "desc music", nil) require.NoError(t, err) } diff --git a/go/vt/vtgate/executorcontext/safe_session.go b/go/vt/vtgate/executorcontext/safe_session.go index c77bba76ff8..e9a25438bc4 100644 --- a/go/vt/vtgate/executorcontext/safe_session.go +++ b/go/vt/vtgate/executorcontext/safe_session.go @@ -656,17 +656,18 @@ func (session *SafeSession) TimeZone() *time.Location { session.mu.Unlock() if !ok { - return nil + return time.Local } tz, err := sqltypes.DecodeStringSQL(zoneSQL) if err != nil { - return nil + return time.Local } - loc, _ := datetime.ParseTimeZone(tz) - // it's safe to ignore the error - if we get an error, loc will be nil, - // and this is exactly the behaviour we want anyway + loc, err := datetime.ParseTimeZone(tz) + if err != nil { + return time.Local + } return loc } diff --git a/go/vt/vtgate/executorcontext/safe_session_test.go b/go/vt/vtgate/executorcontext/safe_session_test.go index 14ea2ad9dac..66130209d33 100644 --- a/go/vt/vtgate/executorcontext/safe_session_test.go +++ b/go/vt/vtgate/executorcontext/safe_session_test.go @@ -173,6 +173,10 @@ func TestTimeZone(t *testing.T) { tz string want string }{ + { + tz: "", + want: time.Local.String(), + }, { tz: "'Europe/Amsterdam'", want: "Europe/Amsterdam", @@ -183,16 +187,18 @@ func TestTimeZone(t *testing.T) { }, { tz: "foo", - want: (*time.Location)(nil).String(), + want: time.Local.String(), }, } for _, tc := range testCases { t.Run(tc.tz, func(t *testing.T) { + sysvars := map[string]string{} + if tc.tz != "" { + sysvars["time_zone"] = tc.tz + } session := NewSafeSession(&vtgatepb.Session{ - SystemVariables: map[string]string{ - "time_zone": tc.tz, - }, + SystemVariables: sysvars, }) assert.Equal(t, tc.want, session.TimeZone().String()) diff --git a/go/vt/vtgate/executorcontext/vcursor_impl.go b/go/vt/vtgate/executorcontext/vcursor_impl.go index 5acb132332e..ed4a14acfab 100644 --- a/go/vt/vtgate/executorcontext/vcursor_impl.go +++ b/go/vt/vtgate/executorcontext/vcursor_impl.go @@ -406,7 +406,7 @@ func (vc *VCursorImpl) FindTable(name sqlparser.TableName) (*vindexes.Table, str return table, destKeyspace, destTabletType, dest, err } -func (vc *VCursorImpl) FindView(name sqlparser.TableName) sqlparser.SelectStatement { +func (vc *VCursorImpl) FindView(name sqlparser.TableName) sqlparser.TableStatement { ks, _, _, err := vc.ParseDestinationTarget(name.Qualifier.String()) if err != nil { return nil diff --git a/go/vt/vtgate/planbuilder/builder.go b/go/vt/vtgate/planbuilder/builder.go index ca4ccb7ac5a..065c50a6dfa 100644 --- a/go/vt/vtgate/planbuilder/builder.go +++ b/go/vt/vtgate/planbuilder/builder.go @@ -43,10 +43,6 @@ const ( Gen4Left2Right = querypb.ExecuteOptions_Gen4Left2Right ) -var ( - plannerVersions = []plancontext.PlannerVersion{Gen4, Gen4GreedyOnly, Gen4Left2Right} -) - type ( planResult struct { primitive engine.Primitive diff --git a/go/vt/vtgate/planbuilder/bypass.go b/go/vt/vtgate/planbuilder/bypass.go index d3384d509c1..6e3f64990d7 100644 --- a/go/vt/vtgate/planbuilder/bypass.go +++ b/go/vt/vtgate/planbuilder/bypass.go @@ -56,6 +56,8 @@ func buildPlanForBypass(stmt sqlparser.Statement, _ *sqlparser.ReservedVars, vsc } } + sqlparser.RemoveSpecificKeyspace(stmt, keyspace.Name) + send := &engine.Send{ Keyspace: keyspace, TargetDestination: vschema.Destination(), diff --git a/go/vt/vtgate/planbuilder/ddl.go b/go/vt/vtgate/planbuilder/ddl.go index a0045cec060..332f2aaa6c3 100644 --- a/go/vt/vtgate/planbuilder/ddl.go +++ b/go/vt/vtgate/planbuilder/ddl.go @@ -196,7 +196,7 @@ func buildCreateViewCommon( vschema plancontext.VSchema, reservedVars *sqlparser.ReservedVars, cfg dynamicconfig.DDL, - ddlSelect sqlparser.SelectStatement, + ddlSelect sqlparser.TableStatement, ddl sqlparser.DDLStatement, ) (key.Destination, *vindexes.Keyspace, error) { // For Create View, we require that the keyspace exist and the select query can be satisfied within the keyspace itself diff --git a/go/vt/vtgate/planbuilder/operators/SQL_builder.go b/go/vt/vtgate/planbuilder/operators/SQL_builder.go index fc91569981d..ca15b5c9134 100644 --- a/go/vt/vtgate/planbuilder/operators/SQL_builder.go +++ b/go/vt/vtgate/planbuilder/operators/SQL_builder.go @@ -37,8 +37,9 @@ type ( } ) -func (qb *queryBuilder) asSelectStatement() sqlparser.SelectStatement { - return qb.stmt.(sqlparser.SelectStatement) +func (qb *queryBuilder) asSelectStatement() sqlparser.TableStatement { + return qb.stmt.(sqlparser.TableStatement) + } func (qb *queryBuilder) asOrderAndLimit() sqlparser.OrderAndLimit { return qb.stmt.(sqlparser.OrderAndLimit) @@ -191,7 +192,8 @@ func (qb *queryBuilder) pushUnionInsideDerived() { As: sqlparser.NewIdentifierCS("dt"), }}, } - sel.SelectExprs = unionSelects(sqlparser.GetFirstSelect(selStmt).SelectExprs) + firstSelect := getFirstSelect(selStmt) + sel.SelectExprs = unionSelects(firstSelect.SelectExprs) qb.stmt = sel } @@ -208,9 +210,10 @@ func unionSelects(exprs sqlparser.SelectExprs) (selectExprs sqlparser.SelectExpr return } -func checkUnionColumnByName(column *sqlparser.ColName, sel sqlparser.SelectStatement) { +func checkUnionColumnByName(column *sqlparser.ColName, sel sqlparser.TableStatement) { colName := column.Name.String() - exprs := sqlparser.GetFirstSelect(sel).SelectExprs + firstSelect := getFirstSelect(sel) + exprs := firstSelect.SelectExprs offset := slices.IndexFunc(exprs, func(expr sqlparser.SelectExpr) bool { switch ae := expr.(type) { case *sqlparser.StarExpr: @@ -244,8 +247,8 @@ func (qb *queryBuilder) unionWith(other *queryBuilder, distinct bool) { func (qb *queryBuilder) recursiveCteWith(other *queryBuilder, name, alias string, distinct bool, columns sqlparser.Columns) { cteUnion := &sqlparser.Union{ - Left: qb.stmt.(sqlparser.SelectStatement), - Right: other.stmt.(sqlparser.SelectStatement), + Left: qb.stmt.(sqlparser.TableStatement), + Right: other.stmt.(sqlparser.TableStatement), Distinct: distinct, } @@ -393,7 +396,7 @@ func removeKeyspaceFromSelectExpr(expr sqlparser.SelectExpr) { } } -func stripDownQuery(from, to sqlparser.SelectStatement) { +func stripDownQuery(from, to sqlparser.TableStatement) { switch node := from.(type) { case *sqlparser.Select: toNode, ok := to.(*sqlparser.Select) @@ -450,7 +453,12 @@ func buildQuery(op Operator, qb *queryBuilder) { buildUnion(op, qb) case *Distinct: buildQuery(op.Source, qb) - qb.asSelectStatement().MakeDistinct() + statement := qb.asSelectStatement() + d, ok := statement.(sqlparser.Distinctable) + if !ok { + panic(vterrors.VT13001("expected a select statement with distinct")) + } + d.MakeDistinct() case *Update: buildUpdate(op, qb) case *Delete: diff --git a/go/vt/vtgate/planbuilder/operators/aggregation_pushing.go b/go/vt/vtgate/planbuilder/operators/aggregation_pushing.go index 73169369a41..ced81df147a 100644 --- a/go/vt/vtgate/planbuilder/operators/aggregation_pushing.go +++ b/go/vt/vtgate/planbuilder/operators/aggregation_pushing.go @@ -544,7 +544,7 @@ func splitAggrColumnsToLeftAndRight( canPushDistinctAggr, distinctExprs := checkIfWeCanPush(ctx, aggregator) - // Distinct aggregation cannot be pushed down in the join. + // Distinctable aggregation cannot be pushed down in the join. // We keep node of the distinct aggregation expression to be used later for ordering. if !canPushDistinctAggr { if len(distinctExprs) != 1 { diff --git a/go/vt/vtgate/planbuilder/operators/ast_to_op.go b/go/vt/vtgate/planbuilder/operators/ast_to_op.go index 12c19bb72a6..2e3781c94db 100644 --- a/go/vt/vtgate/planbuilder/operators/ast_to_op.go +++ b/go/vt/vtgate/planbuilder/operators/ast_to_op.go @@ -178,7 +178,7 @@ func createOperatorFromUnion(ctx *plancontext.PlanningContext, node *sqlparser.U return newHorizon(union, node) } -func translateQueryToOpForUnion(ctx *plancontext.PlanningContext, node sqlparser.SelectStatement) Operator { +func translateQueryToOpForUnion(ctx *plancontext.PlanningContext, node sqlparser.TableStatement) Operator { op := translateQueryToOp(ctx, node) if hz, ok := op.(*Horizon); ok { hz.Truncate = true diff --git a/go/vt/vtgate/planbuilder/operators/expressions.go b/go/vt/vtgate/planbuilder/operators/expressions.go index 38848693775..f42ec87404d 100644 --- a/go/vt/vtgate/planbuilder/operators/expressions.go +++ b/go/vt/vtgate/planbuilder/operators/expressions.go @@ -121,3 +121,11 @@ func simplifyPredicates(ctx *plancontext.PlanningContext, in sqlparser.Expr) sql } return output } + +func getFirstSelect(selStmt sqlparser.TableStatement) *sqlparser.Select { + firstSelect, err := sqlparser.GetFirstSelect(selStmt) + if err != nil { + panic(err) + } + return firstSelect +} diff --git a/go/vt/vtgate/planbuilder/operators/horizon.go b/go/vt/vtgate/planbuilder/operators/horizon.go index 292be1b37c5..aa7737001d6 100644 --- a/go/vt/vtgate/planbuilder/operators/horizon.go +++ b/go/vt/vtgate/planbuilder/operators/horizon.go @@ -45,7 +45,7 @@ type Horizon struct { // QP contains the QueryProjection for this op QP *QueryProjection - Query sqlparser.SelectStatement + Query sqlparser.TableStatement // Columns needed to feed other plans Columns []*sqlparser.ColName @@ -54,7 +54,7 @@ type Horizon struct { Truncate bool } -func newHorizon(src Operator, query sqlparser.SelectStatement) *Horizon { +func newHorizon(src Operator, query sqlparser.TableStatement) *Horizon { return &Horizon{ unaryOperator: newUnaryOp(src), Query: query, @@ -148,7 +148,7 @@ func (h *Horizon) FindCol(ctx *plancontext.PlanningContext, expr sqlparser.Expr, return -1 } - for idx, se := range sqlparser.GetFirstSelect(h.Query).SelectExprs { + for idx, se := range getFirstSelect(h.Query).SelectExprs { ae, ok := se.(*sqlparser.AliasedExpr) if !ok { panic(vterrors.VT09015()) @@ -174,7 +174,7 @@ func (h *Horizon) GetColumns(ctx *plancontext.PlanningContext) (exprs []*sqlpars } func (h *Horizon) GetSelectExprs(*plancontext.PlanningContext) sqlparser.SelectExprs { - return sqlparser.GetFirstSelect(h.Query).SelectExprs + return getFirstSelect(h.Query).SelectExprs } func (h *Horizon) GetOrdering(ctx *plancontext.PlanningContext) []OrderBy { @@ -185,7 +185,7 @@ func (h *Horizon) GetOrdering(ctx *plancontext.PlanningContext) []OrderBy { } // TODO: REMOVE -func (h *Horizon) selectStatement() sqlparser.SelectStatement { +func (h *Horizon) selectStatement() sqlparser.TableStatement { return h.Query } diff --git a/go/vt/vtgate/planbuilder/operators/insert.go b/go/vt/vtgate/planbuilder/operators/insert.go index 4ce37901a77..ae125dea19c 100644 --- a/go/vt/vtgate/planbuilder/operators/insert.go +++ b/go/vt/vtgate/planbuilder/operators/insert.go @@ -394,7 +394,7 @@ func createInsertOperator(ctx *plancontext.PlanningContext, insStmt *sqlparser.I case sqlparser.Values: op = route route.Source = insertRowsPlan(ctx, insOp, insStmt, rows) - case sqlparser.SelectStatement: + case sqlparser.TableStatement: op = insertSelectPlan(ctx, insOp, route, insStmt, rows) } if insStmt.Comments != nil { @@ -408,7 +408,7 @@ func insertSelectPlan( insOp *Insert, routeOp *Route, ins *sqlparser.Insert, - sel sqlparser.SelectStatement, + sel sqlparser.TableStatement, ) *InsertSelection { if columnMismatch(insOp.AutoIncrement, ins, sel) { panic(vterrors.VT03006()) @@ -457,7 +457,7 @@ func insertSelectPlan( return insertSelect } -func columnMismatch(gen *Generate, ins *sqlparser.Insert, sel sqlparser.SelectStatement) bool { +func columnMismatch(gen *Generate, ins *sqlparser.Insert, sel sqlparser.TableStatement) bool { origColCount := len(ins.Columns) if gen != nil && gen.added { // One column got added to the insert query ast for auto increment column. @@ -468,7 +468,7 @@ func columnMismatch(gen *Generate, ins *sqlparser.Insert, sel sqlparser.SelectSt return true } if origColCount > sel.GetColumnCount() { - sel := sqlparser.GetFirstSelect(sel) + sel := getFirstSelect(sel) var hasStarExpr bool for _, sExpr := range sel.SelectExprs { if _, hasStarExpr = sExpr.(*sqlparser.StarExpr); hasStarExpr { diff --git a/go/vt/vtgate/planbuilder/operators/query_planning.go b/go/vt/vtgate/planbuilder/operators/query_planning.go index 5fe0c7773c1..db716966d47 100644 --- a/go/vt/vtgate/planbuilder/operators/query_planning.go +++ b/go/vt/vtgate/planbuilder/operators/query_planning.go @@ -32,7 +32,7 @@ import ( func planQuery(ctx *plancontext.PlanningContext, root Operator) Operator { var selExpr sqlparser.SelectExprs if horizon, isHorizon := root.(*Horizon); isHorizon { - sel := sqlparser.GetFirstSelect(horizon.Query) + sel := getFirstSelect(horizon.Query) selExpr = sqlparser.Clone(sel.SelectExprs) } @@ -207,7 +207,7 @@ func pushOrExpandHorizon(ctx *plancontext.PlanningContext, in *Horizon) (Operato !hasHaving && !needsOrdering && !qp.NeedsAggregation() && - !in.selectStatement().IsDistinct() && + !isDistinctAST(in.selectStatement()) && in.selectStatement().GetLimit() == nil if canPush { @@ -784,7 +784,7 @@ func isDistinct(op Operator) bool { case *Union: return op.distinct case *Horizon: - return op.Query.IsDistinct() + return isDistinctAST(op.Query) case *Limit: return isDistinct(op.Source) default: @@ -792,6 +792,13 @@ func isDistinct(op Operator) bool { } } +func isDistinctAST(s sqlparser.Statement) bool { + if d, ok := s.(sqlparser.Distinctable); ok { + return d.IsDistinct() + } + return false +} + func tryPushUnion(ctx *plancontext.PlanningContext, op *Union) (Operator, *ApplyResult) { if res := compactUnion(op); res != NoRewrite { return op, res diff --git a/go/vt/vtgate/planbuilder/operators/queryprojection.go b/go/vt/vtgate/planbuilder/operators/queryprojection.go index a245831ca13..c66bf757dd8 100644 --- a/go/vt/vtgate/planbuilder/operators/queryprojection.go +++ b/go/vt/vtgate/planbuilder/operators/queryprojection.go @@ -203,7 +203,7 @@ func (qp *QueryProjection) addSelectExpressions(ctx *plancontext.PlanningContext func createQPFromUnion(ctx *plancontext.PlanningContext, union *sqlparser.Union) *QueryProjection { qp := &QueryProjection{} - sel := sqlparser.GetFirstSelect(union) + sel := getFirstSelect(union) qp.addSelectExpressions(ctx, sel) qp.addOrderBy(ctx, union.OrderBy) @@ -714,7 +714,7 @@ func CompareRefInt(a *int, b *int) bool { return *a < *b } -func CreateQPFromSelectStatement(ctx *plancontext.PlanningContext, stmt sqlparser.SelectStatement) *QueryProjection { +func CreateQPFromSelectStatement(ctx *plancontext.PlanningContext, stmt sqlparser.TableStatement) *QueryProjection { switch sel := stmt.(type) { case *sqlparser.Select: return createQPFromSelect(ctx, sel) diff --git a/go/vt/vtgate/planbuilder/operators/subquery_builder.go b/go/vt/vtgate/planbuilder/operators/subquery_builder.go index c2256df06f4..6ec5ecdd7f3 100644 --- a/go/vt/vtgate/planbuilder/operators/subquery_builder.go +++ b/go/vt/vtgate/planbuilder/operators/subquery_builder.go @@ -115,7 +115,7 @@ func createSubqueryOp( // inspectStatement goes through all the predicates contained in the AST // and extracts subqueries into operators func (sqb *SubQueryBuilder) inspectStatement(ctx *plancontext.PlanningContext, - stmt sqlparser.SelectStatement, + stmt sqlparser.TableStatement, ) (sqlparser.Exprs, []applyJoinColumn) { switch stmt := stmt.(type) { case *sqlparser.Select: diff --git a/go/vt/vtgate/planbuilder/operators/subquery_planning.go b/go/vt/vtgate/planbuilder/operators/subquery_planning.go index e222ae0f343..06ca69dd7f3 100644 --- a/go/vt/vtgate/planbuilder/operators/subquery_planning.go +++ b/go/vt/vtgate/planbuilder/operators/subquery_planning.go @@ -30,7 +30,7 @@ import ( "vitess.io/vitess/go/vt/vtgate/semantics" ) -func isMergeable(ctx *plancontext.PlanningContext, query sqlparser.SelectStatement, op Operator) bool { +func isMergeable(ctx *plancontext.PlanningContext, query sqlparser.TableStatement, op Operator) bool { validVindex := func(expr sqlparser.Expr) bool { sc := findColumnVindex(ctx, op, expr) return sc != nil && sc.IsUnique() @@ -672,7 +672,7 @@ func (s *subqueryRouteMerger) rewriteASTExpression(ctx *plancontext.PlanningCont if err != nil { panic(err) } - subqStmt, ok := stmt.(sqlparser.SelectStatement) + subqStmt, ok := stmt.(sqlparser.TableStatement) if !ok { panic(vterrors.VT13001("subqueries should only be select statement")) } @@ -700,7 +700,7 @@ func (s *subqueryRouteMerger) rewriteASTExpression(ctx *plancontext.PlanningCont if !deps.IsSolvedBy(subqID) { cursor.Replace(exprFound) } - }, nil).(sqlparser.SelectStatement) + }, nil).(sqlparser.TableStatement) if err != nil { panic(err) } diff --git a/go/vt/vtgate/planbuilder/operators/union.go b/go/vt/vtgate/planbuilder/operators/union.go index 7d09391cf7d..1c692c9f38e 100644 --- a/go/vt/vtgate/planbuilder/operators/union.go +++ b/go/vt/vtgate/planbuilder/operators/union.go @@ -150,7 +150,7 @@ func (u *Union) GetSelectFor(source int) *sqlparser.Select { for { switch op := src.(type) { case *Horizon: - return sqlparser.GetFirstSelect(op.Query) + return getFirstSelect(op.Query) case *Route: src = op.Source default: diff --git a/go/vt/vtgate/planbuilder/plan_test.go b/go/vt/vtgate/planbuilder/plan_test.go index f3bed93e3c8..8a8d55279a6 100644 --- a/go/vt/vtgate/planbuilder/plan_test.go +++ b/go/vt/vtgate/planbuilder/plan_test.go @@ -577,10 +577,10 @@ func (s *planTestSuite) TestOtherPlanningFromFile() { vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder) require.NoError(s.T(), err) + s.testFile("other_read_cases.json", vw, false) + vw.Vcursor.SetTarget("main") vw.Keyspace = &vindexes.Keyspace{Name: "main"} - - s.testFile("other_read_cases.json", vw, false) s.testFile("other_admin_cases.json", vw, false) } diff --git a/go/vt/vtgate/planbuilder/plancontext/planning_context_test.go b/go/vt/vtgate/planbuilder/plancontext/planning_context_test.go index e5e96b0a4be..87b18ee436a 100644 --- a/go/vt/vtgate/planbuilder/plancontext/planning_context_test.go +++ b/go/vt/vtgate/planbuilder/plancontext/planning_context_test.go @@ -191,7 +191,7 @@ func (v *vschema) FindTable(tablename sqlparser.TableName) (*vindexes.Table, str panic("implement me") } -func (v *vschema) FindView(name sqlparser.TableName) sqlparser.SelectStatement { +func (v *vschema) FindView(name sqlparser.TableName) sqlparser.TableStatement { // TODO implement me panic("implement me") } diff --git a/go/vt/vtgate/planbuilder/plancontext/vschema.go b/go/vt/vtgate/planbuilder/plancontext/vschema.go index b4560424718..7a2273afe46 100644 --- a/go/vt/vtgate/planbuilder/plancontext/vschema.go +++ b/go/vt/vtgate/planbuilder/plancontext/vschema.go @@ -25,7 +25,7 @@ type PlannerVersion = querypb.ExecuteOptions_PlannerVersion // info about tables. type VSchema interface { FindTable(tablename sqlparser.TableName) (*vindexes.Table, string, topodatapb.TabletType, key.Destination, error) - FindView(name sqlparser.TableName) sqlparser.SelectStatement + FindView(name sqlparser.TableName) sqlparser.TableStatement FindTableOrVindex(tablename sqlparser.TableName) (*vindexes.Table, vindexes.Vindex, string, topodatapb.TabletType, key.Destination, error) // SelectedKeyspace returns the current keyspace if set, otherwise returns an error diff --git a/go/vt/vtgate/planbuilder/simplifier_test.go b/go/vt/vtgate/planbuilder/simplifier_test.go index dce21b3e175..5aeb0565f9b 100644 --- a/go/vt/vtgate/planbuilder/simplifier_test.go +++ b/go/vt/vtgate/planbuilder/simplifier_test.go @@ -49,7 +49,7 @@ func TestSimplifyBuggyQuery(t *testing.T) { reservedVars := sqlparser.NewReservedVars("vtg", reserved) simplified := simplifier.SimplifyStatement( - stmt.(sqlparser.SelectStatement), + stmt.(sqlparser.TableStatement), vw.CurrentDb(), vw, keepSameError(query, reservedVars, vw, rewritten.BindVarNeeds), @@ -73,7 +73,7 @@ func TestSimplifyPanic(t *testing.T) { reservedVars := sqlparser.NewReservedVars("vtg", reserved) simplified := simplifier.SimplifyStatement( - stmt.(sqlparser.SelectStatement), + stmt.(sqlparser.TableStatement), vw.CurrentDb(), vw, keepPanicking(query, reservedVars, vw, rewritten.BindVarNeeds), @@ -95,7 +95,7 @@ func TestUnsupportedFile(t *testing.T) { log.Errorf("unsupported_cases.txt - %s", tcase.Query) stmt, reserved, err := sqlparser.NewTestParser().Parse2(tcase.Query) require.NoError(t, err) - _, ok := stmt.(sqlparser.SelectStatement) + _, ok := stmt.(sqlparser.TableStatement) if !ok { t.Skip() return @@ -110,7 +110,7 @@ func TestUnsupportedFile(t *testing.T) { origQuery := sqlparser.String(ast) stmt, _, _ = sqlparser.NewTestParser().Parse2(tcase.Query) simplified := simplifier.SimplifyStatement( - stmt.(sqlparser.SelectStatement), + stmt.(sqlparser.TableStatement), vw.CurrentDb(), vw, keepSameError(tcase.Query, reservedVars, vw, rewritten.BindVarNeeds), @@ -128,7 +128,7 @@ func TestUnsupportedFile(t *testing.T) { } } -func keepSameError(query string, reservedVars *sqlparser.ReservedVars, vschema *vschemawrapper.VSchemaWrapper, needs *sqlparser.BindVarNeeds) func(statement sqlparser.SelectStatement) bool { +func keepSameError(query string, reservedVars *sqlparser.ReservedVars, vschema *vschemawrapper.VSchemaWrapper, needs *sqlparser.BindVarNeeds) func(statement sqlparser.TableStatement) bool { stmt, _, err := sqlparser.NewTestParser().Parse2(query) if err != nil { panic(err) @@ -139,7 +139,7 @@ func keepSameError(query string, reservedVars *sqlparser.ReservedVars, vschema * if expected == nil { panic("query does not fail to plan") } - return func(statement sqlparser.SelectStatement) bool { + return func(statement sqlparser.TableStatement) bool { _, myErr := BuildFromStmt(context.Background(), query, statement, reservedVars, vschema, needs, staticConfig{}) if myErr == nil { return false @@ -152,8 +152,8 @@ func keepSameError(query string, reservedVars *sqlparser.ReservedVars, vschema * } } -func keepPanicking(query string, reservedVars *sqlparser.ReservedVars, vschema *vschemawrapper.VSchemaWrapper, needs *sqlparser.BindVarNeeds) func(statement sqlparser.SelectStatement) bool { - cmp := func(statement sqlparser.SelectStatement) (res bool) { +func keepPanicking(query string, reservedVars *sqlparser.ReservedVars, vschema *vschemawrapper.VSchemaWrapper, needs *sqlparser.BindVarNeeds) func(statement sqlparser.TableStatement) bool { + cmp := func(statement sqlparser.TableStatement) (res bool) { defer func() { r := recover() if r != nil { @@ -172,7 +172,7 @@ func keepPanicking(query string, reservedVars *sqlparser.ReservedVars, vschema * if err != nil { panic(err.Error()) } - if !cmp(stmt.(sqlparser.SelectStatement)) { + if !cmp(stmt.(sqlparser.TableStatement)) { panic("query is not panicking") } diff --git a/go/vt/vtgate/planbuilder/testdata/bypass_keyrange_cases.json b/go/vt/vtgate/planbuilder/testdata/bypass_keyrange_cases.json index b13bafd77f8..e1ff7de97a0 100644 --- a/go/vt/vtgate/planbuilder/testdata/bypass_keyrange_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/bypass_keyrange_cases.json @@ -164,5 +164,22 @@ "Query": "create /* test */ table t1(id bigint, primary key(id)) /* comments */" } } + }, + { + "comment": "remove the matching keyspace from shard targeted query", + "query": "select count(*), col from `main`.unsharded join vt_main.t1 where exists (select 1 from main.t2 join information_schema.tables where table_name = 't3')", + "plan": { + "QueryType": "SELECT", + "Original": "select count(*), col from `main`.unsharded join vt_main.t1 where exists (select 1 from main.t2 join information_schema.tables where table_name = 't3')", + "Instructions": { + "OperatorType": "Send", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "TargetDestination": "ExactKeyRange(-)", + "Query": "select count(*), col from unsharded join vt_main.t1 where exists (select 1 from t2 join information_schema.`tables` where table_name = 't3')" + } + } } ] diff --git a/go/vt/vtgate/planbuilder/testdata/bypass_shard_cases.json b/go/vt/vtgate/planbuilder/testdata/bypass_shard_cases.json index 02a00444724..80d4dbbd08b 100644 --- a/go/vt/vtgate/planbuilder/testdata/bypass_shard_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/bypass_shard_cases.json @@ -251,5 +251,22 @@ "QueryTimeout": 100 } } + }, + { + "comment": "remove the matching keyspace from shard targeted query", + "query": "select count(*), col from `main`.unsharded join vt_main.t1 where exists (select 1 from main.t2 join information_schema.tables where table_name = 't3')", + "plan": { + "QueryType": "SELECT", + "Original": "select count(*), col from `main`.unsharded join vt_main.t1 where exists (select 1 from main.t2 join information_schema.tables where table_name = 't3')", + "Instructions": { + "OperatorType": "Send", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "TargetDestination": "Shard(-80)", + "Query": "select count(*), col from unsharded join vt_main.t1 where exists (select 1 from t2 join information_schema.`tables` where table_name = 't3')" + } + } } ] diff --git a/go/vt/vtgate/planbuilder/testdata/other_read_cases.json b/go/vt/vtgate/planbuilder/testdata/other_read_cases.json index 2258bcd768c..1a7c9ddac2a 100644 --- a/go/vt/vtgate/planbuilder/testdata/other_read_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/other_read_cases.json @@ -8,24 +8,24 @@ "Instructions": { "OperatorType": "Send", "Keyspace": { - "Name": "main", - "Sharded": false + "Name": "user", + "Sharded": true }, "TargetDestination": "AnyShard()", "Query": "explain select * from `user`", "SingleShardOnly": true }, "TablesUsed": [ - "main.user" + "user.user" ] } }, { "comment": "Analyze statement", - "query": "analyze table t1", + "query": "analyze table main.t1", "plan": { "QueryType": "ANALYZE", - "Original": "analyze table t1", + "Original": "analyze table main.t1", "Instructions": { "OperatorType": "Send", "Keyspace": { @@ -42,43 +42,43 @@ }, { "comment": "Describe statement", - "query": "describe select * from t", + "query": "describe select * from user", "plan": { "QueryType": "EXPLAIN", - "Original": "describe select * from t", + "Original": "describe select * from user", "Instructions": { "OperatorType": "Send", "Keyspace": { - "Name": "main", - "Sharded": false + "Name": "user", + "Sharded": true }, "TargetDestination": "AnyShard()", - "Query": "explain select * from t", + "Query": "explain select * from `user`", "SingleShardOnly": true }, "TablesUsed": [ - "main.t" + "user.user" ] } }, { "comment": "Desc statement", - "query": "desc select * from t", + "query": "desc select * from user", "plan": { "QueryType": "EXPLAIN", - "Original": "desc select * from t", + "Original": "desc select * from user", "Instructions": { "OperatorType": "Send", "Keyspace": { - "Name": "main", - "Sharded": false + "Name": "user", + "Sharded": true }, "TargetDestination": "AnyShard()", - "Query": "explain select * from t", + "Query": "explain select * from `user`", "SingleShardOnly": true }, "TablesUsed": [ - "main.t" + "user.user" ] } }, @@ -167,5 +167,31 @@ "main.administrable_role_authorizations" ] } + }, + { + "comment": "describe table without qualifier", + "query": "describe user", + "plan": { + "QueryType": "EXPLAIN", + "Original": "describe user", + "Instructions": { + "OperatorType": "Send", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "TargetDestination": "AnyShard()", + "Query": "explain `user`", + "SingleShardOnly": true + }, + "TablesUsed": [ + "user.user" + ] + } + }, + { + "comment": "describe table does not exists", + "query": "describe unknown_table", + "plan": "table unknown_table not found" } ] diff --git a/go/vt/vtgate/planbuilder/vexplain.go b/go/vt/vtgate/planbuilder/vexplain.go index 7aed1e48884..a12139c3068 100644 --- a/go/vt/vtgate/planbuilder/vexplain.go +++ b/go/vt/vtgate/planbuilder/vexplain.go @@ -55,7 +55,7 @@ func buildVExplainPlan( func explainTabPlan(explain *sqlparser.ExplainTab, vschema plancontext.VSchema) (*planResult, error) { var keyspace *vindexes.Keyspace - var destination key.Destination + var dest key.Destination if sqlparser.SystemSchema(explain.Table.Qualifier.String()) { var err error @@ -64,30 +64,26 @@ func explainTabPlan(explain *sqlparser.ExplainTab, vschema plancontext.VSchema) return nil, err } } else { + var tbl *vindexes.Table var err error - var ks string - _, _, ks, _, destination, err = vschema.FindTableOrVindex(explain.Table) + tbl, _, _, _, dest, err = vschema.FindTableOrVindex(explain.Table) if err != nil { return nil, err } - explain.Table.Qualifier = sqlparser.NewIdentifierCS("") - - keyspace, err = vschema.FindKeyspace(ks) - if err != nil { - return nil, err - } - if keyspace == nil { - return nil, vterrors.VT14004(ks) + if tbl == nil { + return nil, vterrors.VT05004(explain.Table.Name.String()) } + keyspace = tbl.Keyspace + explain.Table = sqlparser.NewTableName(tbl.Name.String()) } - if destination == nil { - destination = key.DestinationAnyShard{} + if dest == nil { + dest = key.DestinationAnyShard{} } return newPlanResult(&engine.Send{ Keyspace: keyspace, - TargetDestination: destination, + TargetDestination: dest, Query: sqlparser.String(explain), SingleShardOnly: true, }, singleTable(keyspace.Name, explain.Table.Name.String())), nil diff --git a/go/vt/vtgate/schema/tracker.go b/go/vt/vtgate/schema/tracker.go index a1b2009d0e1..8fa41712223 100644 --- a/go/vt/vtgate/schema/tracker.go +++ b/go/vt/vtgate/schema/tracker.go @@ -73,7 +73,7 @@ func NewTracker(ch chan *discovery.TabletHealth, enableViews, enableUDFs bool, p } if enableViews { - t.views = &viewMap{m: map[keyspaceStr]map[viewNameStr]sqlparser.SelectStatement{}, parser: parser} + t.views = &viewMap{m: map[keyspaceStr]map[viewNameStr]sqlparser.TableStatement{}, parser: parser} } if enableUDFs { t.udfs = map[keyspaceStr][]string{} @@ -283,7 +283,7 @@ func (t *Tracker) Tables(ks string) map[string]*vindexes.TableInfo { } // Views returns all known views in the keyspace with their definition. -func (t *Tracker) Views(ks string) map[string]sqlparser.SelectStatement { +func (t *Tracker) Views(ks string) map[string]sqlparser.TableStatement { if t.views == nil { return nil } @@ -525,14 +525,14 @@ func (t *Tracker) clearKeyspaceTables(ks string) { } type viewMap struct { - m map[keyspaceStr]map[viewNameStr]sqlparser.SelectStatement + m map[keyspaceStr]map[viewNameStr]sqlparser.TableStatement parser *sqlparser.Parser } func (vm *viewMap) set(ks, tbl, sql string) { m := vm.m[ks] if m == nil { - m = make(map[tableNameStr]sqlparser.SelectStatement) + m = make(map[tableNameStr]sqlparser.TableStatement) vm.m[ks] = m } stmt, err := vm.parser.Parse(sql) @@ -548,7 +548,7 @@ func (vm *viewMap) set(ks, tbl, sql string) { m[tbl] = cv.Select } -func (vm *viewMap) get(ks, tbl string) sqlparser.SelectStatement { +func (vm *viewMap) get(ks, tbl string) sqlparser.TableStatement { m := vm.m[ks] if m == nil { return nil @@ -571,7 +571,7 @@ func (t *Tracker) clearKeyspaceViews(ks string) { } // GetViews returns the view statement for the given keyspace and view name. -func (t *Tracker) GetViews(ks string, tbl string) sqlparser.SelectStatement { +func (t *Tracker) GetViews(ks string, tbl string) sqlparser.TableStatement { t.mu.Lock() defer t.mu.Unlock() diff --git a/go/vt/vtgate/semantics/analyzer.go b/go/vt/vtgate/semantics/analyzer.go index 62cdc019ddf..c4e7dc55866 100644 --- a/go/vt/vtgate/semantics/analyzer.go +++ b/go/vt/vtgate/semantics/analyzer.go @@ -286,14 +286,22 @@ func containsStar(s sqlparser.SelectExprs) bool { } func checkUnionColumns(union *sqlparser.Union) error { - firstProj := sqlparser.GetFirstSelect(union).SelectExprs + lft, err := sqlparser.GetFirstSelect(union) + if err != nil { + return err + } + firstProj := lft.GetColumns() if containsStar(firstProj) { // if we still have *, we can't figure out if the query is invalid or not // we'll fail it at run time instead return nil } - secondProj := sqlparser.GetFirstSelect(union.Right).SelectExprs + rgt, err := sqlparser.GetFirstSelect(union.Right) + if err != nil { + return err + } + secondProj := rgt.GetColumns() if containsStar(secondProj) { return nil } diff --git a/go/vt/vtgate/semantics/analyzer_test.go b/go/vt/vtgate/semantics/analyzer_test.go index de8fbdee0d7..3f7a21cb6ac 100644 --- a/go/vt/vtgate/semantics/analyzer_test.go +++ b/go/vt/vtgate/semantics/analyzer_test.go @@ -1003,8 +1003,10 @@ func TestUnionWithOrderBy(t *testing.T) { stmt, semTable := parseAndAnalyze(t, query, "") union, _ := stmt.(*sqlparser.Union) - sel1 := sqlparser.GetFirstSelect(union) - sel2 := sqlparser.GetFirstSelect(union.Right) + sel1, err := sqlparser.GetFirstSelect(union) + require.NoError(t, err) + sel2, err := sqlparser.GetFirstSelect(union.Right) + require.NoError(t, err) t1 := sel1.From[0].(*sqlparser.AliasedTableExpr) t2 := sel2.From[0].(*sqlparser.AliasedTableExpr) diff --git a/go/vt/vtgate/semantics/cte_table.go b/go/vt/vtgate/semantics/cte_table.go index 498fc5076c1..7083fea10d2 100644 --- a/go/vt/vtgate/semantics/cte_table.go +++ b/go/vt/vtgate/semantics/cte_table.go @@ -150,7 +150,7 @@ func (cte *CTETable) GetMirrorRule() *vindexes.MirrorRule { type CTE struct { Name string - Query sqlparser.SelectStatement + Query sqlparser.TableStatement isAuthoritative bool recursiveDeps *TableSet Columns sqlparser.Columns diff --git a/go/vt/vtgate/semantics/early_rewriter.go b/go/vt/vtgate/semantics/early_rewriter.go index 3e53ed0816a..64426e25748 100644 --- a/go/vt/vtgate/semantics/early_rewriter.go +++ b/go/vt/vtgate/semantics/early_rewriter.go @@ -385,12 +385,16 @@ func getIntLiteral(e sqlparser.Expr) *sqlparser.Literal { // handleOrderBy processes the ORDER BY clause. func (r *earlyRewriter) handleOrderBy(parent sqlparser.SQLNode, iter iterator) error { - stmt, ok := parent.(sqlparser.SelectStatement) + stmt, ok := parent.(sqlparser.TableStatement) if !ok { return nil } - sel := sqlparser.GetFirstSelect(stmt) + sel, err := sqlparser.GetFirstSelect(stmt) + if err != nil { + return err + } + for e := iter.next(); e != nil; e = iter.next() { lit, err := r.replaceLiteralsInOrderBy(e, iter) if err != nil { @@ -419,12 +423,15 @@ func (r *earlyRewriter) handleOrderBy(parent sqlparser.SQLNode, iter iterator) e // handleGroupBy processes the GROUP BY clause. func (r *earlyRewriter) handleGroupBy(parent sqlparser.SQLNode, iter iterator) error { - stmt, ok := parent.(sqlparser.SelectStatement) + stmt, ok := parent.(*sqlparser.Select) if !ok { return nil } - sel := sqlparser.GetFirstSelect(stmt) + sel, err := sqlparser.GetFirstSelect(stmt) + if err != nil { + return err + } for e := iter.next(); e != nil; e = iter.next() { expr, err := r.replaceLiteralsInGroupBy(e) if err != nil { @@ -435,7 +442,6 @@ func (r *earlyRewriter) handleGroupBy(parent sqlparser.SQLNode, iter iterator) e if err != nil { return err } - } err = iter.replace(expr) if err != nil { diff --git a/go/vt/vtgate/semantics/scoper.go b/go/vt/vtgate/semantics/scoper.go index 9d596d9ecd1..e6df3c3a5b0 100644 --- a/go/vt/vtgate/semantics/scoper.go +++ b/go/vt/vtgate/semantics/scoper.go @@ -297,11 +297,11 @@ func (s *scoper) createSpecialScopePostProjection(parent sqlparser.SQLNode) erro for i, sel := range sqlparser.GetAllSelects(parent) { if i == 0 { nScope.stmt = sel - tableInfo = createVTableInfoForExpressions(sel.SelectExprs, nil /*needed for star expressions*/, s.org) + tableInfo = createVTableInfoForExpressions(sel.GetColumns(), nil /*needed for star expressions*/, s.org) nScope.tables = append(nScope.tables, tableInfo) continue } - thisTableInfo := createVTableInfoForExpressions(sel.SelectExprs, nil /*needed for star expressions*/, s.org) + thisTableInfo := createVTableInfoForExpressions(sel.GetColumns(), nil /*needed for star expressions*/, s.org) if len(tableInfo.cols) != len(thisTableInfo.cols) { return vterrors.NewErrorf(vtrpcpb.Code_FAILED_PRECONDITION, vterrors.WrongNumberOfColumnsInSelect, "The used SELECT statements have a different number of columns") } diff --git a/go/vt/vtgate/semantics/semantic_table.go b/go/vt/vtgate/semantics/semantic_table.go index 30a41ba5f12..e3eead71c90 100644 --- a/go/vt/vtgate/semantics/semantic_table.go +++ b/go/vt/vtgate/semantics/semantic_table.go @@ -493,7 +493,7 @@ func (st *SemTable) ForeignKeysPresent() bool { return false } -func (st *SemTable) SelectExprs(sel sqlparser.SelectStatement) sqlparser.SelectExprs { +func (st *SemTable) SelectExprs(sel sqlparser.TableStatement) sqlparser.SelectExprs { switch sel := sel.(type) { case *sqlparser.Select: return sel.SelectExprs diff --git a/go/vt/vtgate/semantics/table_collector.go b/go/vt/vtgate/semantics/table_collector.go index 45a50fd23a2..329ebcef254 100644 --- a/go/vt/vtgate/semantics/table_collector.go +++ b/go/vt/vtgate/semantics/table_collector.go @@ -154,8 +154,11 @@ func (tc *tableCollector) visitAliasedTableExpr(node *sqlparser.AliasedTableExpr } func (tc *tableCollector) visitUnion(union *sqlparser.Union) error { - firstSelect := sqlparser.GetFirstSelect(union) - expanded, selectExprs := getColumnNames(firstSelect.SelectExprs) + firstSelect, err := sqlparser.GetFirstSelect(union) + if err != nil { + return err + } + expanded, selectExprs := getColumnNames(firstSelect.GetColumns()) info := unionInfo{ isAuthoritative: expanded, exprs: selectExprs, @@ -165,12 +168,12 @@ func (tc *tableCollector) visitUnion(union *sqlparser.Union) error { return nil } - size := len(firstSelect.SelectExprs) + size := firstSelect.GetColumnCount() info.recursive = make([]TableSet, size) typers := make([]evalengine.TypeAggregator, size) collations := tc.org.collationEnv() - err := sqlparser.VisitAllSelects(union, func(s *sqlparser.Select, idx int) error { + err = sqlparser.VisitAllSelects(union, func(s *sqlparser.Select, idx int) error { for i, expr := range s.SelectExprs { ae, ok := expr.(*sqlparser.AliasedExpr) if !ok { @@ -413,7 +416,10 @@ func checkValidRecursiveCTE(cteDef *CTE) error { return vterrors.VT09026(cteDef.Name) } - firstSelect := sqlparser.GetFirstSelect(union.Right) + firstSelect, err := sqlparser.GetFirstSelect(union.Right) + if err != nil { + return err + } if firstSelect.GroupBy != nil { return vterrors.VT09027(cteDef.Name) } @@ -470,8 +476,16 @@ func (tc *tableCollector) addSelectDerivedTable( return scope.addTable(tableInfo) } -func (tc *tableCollector) addUnionDerivedTable(union *sqlparser.Union, node *sqlparser.AliasedTableExpr, columns sqlparser.Columns, alias sqlparser.IdentifierCS) error { - firstSelect := sqlparser.GetFirstSelect(union) +func (tc *tableCollector) addUnionDerivedTable( + union *sqlparser.Union, + node *sqlparser.AliasedTableExpr, + columns sqlparser.Columns, + alias sqlparser.IdentifierCS, +) error { + firstSelect, err := sqlparser.GetFirstSelect(union) + if err != nil { + return err + } tables := tc.scoper.wScope[firstSelect] info, found := tc.unionInfo[union] if !found { diff --git a/go/vt/vtgate/simplifier/simplifier.go b/go/vt/vtgate/simplifier/simplifier.go index e838450e3a2..c15e2ea58d1 100644 --- a/go/vt/vtgate/simplifier/simplifier.go +++ b/go/vt/vtgate/simplifier/simplifier.go @@ -25,17 +25,17 @@ import ( // SimplifyStatement simplifies the AST of a query. It basically iteratively prunes leaves of the AST, as long as the pruning // continues to return true from the `test` function. func SimplifyStatement( - in sqlparser.SelectStatement, + in sqlparser.TableStatement, currentDB string, si semantics.SchemaInformation, - testF func(sqlparser.SelectStatement) bool, -) sqlparser.SelectStatement { + testF func(sqlparser.TableStatement) bool, +) sqlparser.TableStatement { tables, err := getTables(in, currentDB, si) if err != nil { panic(err) } - test := func(s sqlparser.SelectStatement) bool { + test := func(s sqlparser.TableStatement) bool { // Since our semantic analysis changes the AST, we clone it first, so we have a pristine AST to play with return testF(sqlparser.Clone(s)) } @@ -68,7 +68,7 @@ func SimplifyStatement( return in } -func trySimplifyDistinct(in sqlparser.SelectStatement, test func(statement sqlparser.SelectStatement) bool) sqlparser.SelectStatement { +func trySimplifyDistinct(in sqlparser.TableStatement, test func(statement sqlparser.TableStatement) bool) sqlparser.TableStatement { simplified := false alwaysVisitChildren := func(node, parent sqlparser.SQLNode) bool { return true @@ -100,7 +100,7 @@ func trySimplifyDistinct(in sqlparser.SelectStatement, test func(statement sqlpa return nil } -func trySimplifyExpressions(in sqlparser.SelectStatement, test func(sqlparser.SelectStatement) bool) sqlparser.SelectStatement { +func trySimplifyExpressions(in sqlparser.TableStatement, test func(sqlparser.TableStatement) bool) sqlparser.TableStatement { simplified := false visit := func(cursor expressionCursor) bool { // first - let's try to remove the expression @@ -141,7 +141,7 @@ func trySimplifyExpressions(in sqlparser.SelectStatement, test func(sqlparser.Se return nil } -func trySimplifyUnions(in sqlparser.SelectStatement, test func(sqlparser.SelectStatement) bool) (res sqlparser.SelectStatement) { +func trySimplifyUnions(in sqlparser.TableStatement, test func(subquery sqlparser.TableStatement) bool) (res sqlparser.TableStatement) { if union, ok := in.(*sqlparser.Union); ok { // the root object is an UNION if test(sqlparser.Clone(union.Left)) { @@ -193,7 +193,7 @@ func trySimplifyUnions(in sqlparser.SelectStatement, test func(sqlparser.SelectS return nil } -func tryRemoveTable(tables []semantics.TableInfo, in sqlparser.SelectStatement, currentDB string, si semantics.SchemaInformation, test func(sqlparser.SelectStatement) bool) sqlparser.SelectStatement { +func tryRemoveTable(tables []semantics.TableInfo, in sqlparser.TableStatement, currentDB string, si semantics.SchemaInformation, test func(sqlparser.TableStatement) bool) sqlparser.TableStatement { // we start by removing one table at a time, and see if we still have an interesting plan for idx, tbl := range tables { clone := sqlparser.Clone(in) @@ -209,7 +209,7 @@ func tryRemoveTable(tables []semantics.TableInfo, in sqlparser.SelectStatement, return nil } -func getTables(in sqlparser.SelectStatement, currentDB string, si semantics.SchemaInformation) ([]semantics.TableInfo, error) { +func getTables(in sqlparser.TableStatement, currentDB string, si semantics.SchemaInformation) ([]semantics.TableInfo, error) { // Since our semantic analysis changes the AST, we clone it first, so we have a pristine AST to play with clone := sqlparser.Clone(in) semTable, err := semantics.Analyze(clone, currentDB, si) @@ -219,7 +219,7 @@ func getTables(in sqlparser.SelectStatement, currentDB string, si semantics.Sche return semTable.Tables, nil } -func simplifyStarExpr(in sqlparser.SelectStatement, test func(sqlparser.SelectStatement) bool) sqlparser.SelectStatement { +func simplifyStarExpr(in sqlparser.TableStatement, test func(sqlparser.TableStatement) bool) sqlparser.TableStatement { simplified := false alwaysVisitChildren := func(node, parent sqlparser.SQLNode) bool { return true @@ -254,7 +254,7 @@ func simplifyStarExpr(in sqlparser.SelectStatement, test func(sqlparser.SelectSt // removeTable removes the table with the given index from the select statement, which includes the FROM clause // but also all expressions and predicates that depend on the table -func removeTable(clone sqlparser.SelectStatement, searchedTS semantics.TableSet, db string, si semantics.SchemaInformation) bool { +func removeTable(clone sqlparser.TableStatement, searchedTS semantics.TableSet, db string, si semantics.SchemaInformation) bool { semTable, err := semantics.Analyze(clone, db, si) if err != nil { panic(err) @@ -429,7 +429,7 @@ func newExprCursor(expr sqlparser.Expr, replace func(replaceWith sqlparser.Expr) // This cursor has a few extra capabilities that the normal sqlparser.SafeRewrite does not have, // such as visiting and being able to change individual expressions in a AND tree // if visit returns true, then traversal continues, otherwise traversal stops -func visitAllExpressionsInAST(clone sqlparser.SelectStatement, visit func(expressionCursor) bool) { +func visitAllExpressionsInAST(clone sqlparser.TableStatement, visit func(expressionCursor) bool) { alwaysVisitChildren := func(node, parent sqlparser.SQLNode) bool { return true } diff --git a/go/vt/vtgate/simplifier/simplifier_test.go b/go/vt/vtgate/simplifier/simplifier_test.go index 340497da8ef..0948f720f2d 100644 --- a/go/vt/vtgate/simplifier/simplifier_test.go +++ b/go/vt/vtgate/simplifier/simplifier_test.go @@ -52,7 +52,7 @@ limit 123 offset 456 ` ast, err := sqlparser.NewTestParser().Parse(query) require.NoError(t, err) - visitAllExpressionsInAST(ast.(sqlparser.SelectStatement), func(cursor expressionCursor) bool { + visitAllExpressionsInAST(ast.(sqlparser.TableStatement), func(cursor expressionCursor) bool { fmt.Printf(">> found expression: %s\n", sqlparser.String(cursor.expr)) cursor.remove() fmt.Printf("remove: %s\n", sqlparser.String(ast)) @@ -70,7 +70,7 @@ func TestAbortExpressionCursor(t *testing.T) { query := "select user.id, count(*), unsharded.name from user join unsharded on 13 = 14 where unsharded.id = 42 and name = 'foo' and user.id = unsharded.id" ast, err := sqlparser.NewTestParser().Parse(query) require.NoError(t, err) - visitAllExpressionsInAST(ast.(sqlparser.SelectStatement), func(cursor expressionCursor) bool { + visitAllExpressionsInAST(ast.(sqlparser.TableStatement), func(cursor expressionCursor) bool { fmt.Println(sqlparser.String(cursor.expr)) cursor.replace(sqlparser.NewIntLiteral("1")) fmt.Println(sqlparser.String(ast)) diff --git a/go/vt/vtgate/vindexes/vschema.go b/go/vt/vtgate/vindexes/vschema.go index 278dd6932ae..36fcb2045fa 100644 --- a/go/vt/vtgate/vindexes/vschema.go +++ b/go/vt/vtgate/vindexes/vschema.go @@ -263,7 +263,7 @@ type KeyspaceSchema struct { ForeignKeyMode vschemapb.Keyspace_ForeignKeyMode Tables map[string]*Table Vindexes map[string]Vindex - Views map[string]sqlparser.SelectStatement + Views map[string]sqlparser.TableStatement Error error MultiTenantSpec *vschemapb.MultiTenantSpec @@ -430,12 +430,12 @@ func (vschema *VSchema) AddView(ksname, viewName, query string, parser *sqlparse if err != nil { return err } - selectStmt, ok := ast.(sqlparser.SelectStatement) + selectStmt, ok := ast.(sqlparser.TableStatement) if !ok { return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "expected SELECT or UNION query, got %T", ast) } if ks.Views == nil { - ks.Views = make(map[string]sqlparser.SelectStatement) + ks.Views = make(map[string]sqlparser.TableStatement) } ks.Views[viewName] = selectStmt t := &Table{ @@ -1476,7 +1476,7 @@ func (vschema *VSchema) FindTableOrVindex(keyspace, name string, tabletType topo return nil, nil, NotFoundError{TableName: name} } -func (vschema *VSchema) FindView(keyspace, name string) sqlparser.SelectStatement { +func (vschema *VSchema) FindView(keyspace, name string) sqlparser.TableStatement { if keyspace == "" { switch { case len(vschema.Keyspaces) == 1: diff --git a/go/vt/vtgate/vschema_manager.go b/go/vt/vtgate/vschema_manager.go index 410a853b007..3156599aa1f 100644 --- a/go/vt/vtgate/vschema_manager.go +++ b/go/vt/vtgate/vschema_manager.go @@ -54,7 +54,7 @@ type VSchemaManager struct { // SchemaInfo is an interface to schema tracker. type SchemaInfo interface { Tables(ks string) map[string]*vindexes.TableInfo - Views(ks string) map[string]sqlparser.SelectStatement + Views(ks string) map[string]sqlparser.TableStatement UDFs(ks string) []string } @@ -220,7 +220,7 @@ func (vm *VSchemaManager) updateFromSchema(vschema *vindexes.VSchema) { func (vm *VSchemaManager) updateViewInfo(ks *vindexes.KeyspaceSchema, ksName string) { views := vm.schema.Views(ksName) if views != nil { - ks.Views = make(map[string]sqlparser.SelectStatement, len(views)) + ks.Views = make(map[string]sqlparser.TableStatement, len(views)) for name, def := range views { ks.Views[name] = sqlparser.Clone(def) } diff --git a/go/vt/vtgate/vschema_manager_test.go b/go/vt/vtgate/vschema_manager_test.go index 8db0c2df05b..b4b7a20804f 100644 --- a/go/vt/vtgate/vschema_manager_test.go +++ b/go/vt/vtgate/vschema_manager_test.go @@ -900,7 +900,7 @@ func (f *fakeSchema) Tables(string) map[string]*vindexes.TableInfo { return f.t } -func (f *fakeSchema) Views(string) map[string]sqlparser.SelectStatement { +func (f *fakeSchema) Views(string) map[string]sqlparser.TableStatement { return nil } func (f *fakeSchema) UDFs(string) []string { return f.udfs } diff --git a/go/vt/vtorc/discovery/queue.go b/go/vt/vtorc/discovery/queue.go index 4b18303959b..bf279b781f2 100644 --- a/go/vt/vtorc/discovery/queue.go +++ b/go/vt/vtorc/discovery/queue.go @@ -33,12 +33,6 @@ import ( "vitess.io/vitess/go/vt/vtorc/config" ) -// QueueMetric contains the queue's active and queued sizes -type QueueMetric struct { - Active int - Queued int -} - // Queue contains information for managing discovery requests type Queue struct { sync.Mutex @@ -48,67 +42,16 @@ type Queue struct { queue chan string queuedKeys map[string]time.Time consumedKeys map[string]time.Time - metrics []QueueMetric -} - -// DiscoveryQueue contains the discovery queue which can then be accessed via an API call for monitoring. -// Currently this is accessed by ContinuousDiscovery() but also from http api calls. -// I may need to protect this better? -var discoveryQueue map[string](*Queue) -var dcLock sync.Mutex - -func init() { - discoveryQueue = make(map[string](*Queue)) } -// CreateOrReturnQueue allows for creation of a new discovery queue or -// returning a pointer to an existing one given the name. -func CreateOrReturnQueue(name string) *Queue { - dcLock.Lock() - defer dcLock.Unlock() - if q, found := discoveryQueue[name]; found { - return q - } - - q := &Queue{ +// CreateQueue allows for creation of a new discovery queue +func CreateQueue(name string) *Queue { + return &Queue{ name: name, queuedKeys: make(map[string]time.Time), consumedKeys: make(map[string]time.Time), queue: make(chan string, config.DiscoveryQueueCapacity), } - go q.startMonitoring() - - discoveryQueue[name] = q - - return q -} - -// monitoring queue sizes until we are told to stop -func (q *Queue) startMonitoring() { - log.Infof("Queue.startMonitoring(%s)", q.name) - ticker := time.NewTicker(time.Second) // hard-coded at every second - - for { - select { - case <-ticker.C: // do the periodic expiry - q.collectStatistics() - case <-q.done: - return - } - } -} - -// do a check of the entries in the queue, both those active and queued -func (q *Queue) collectStatistics() { - q.Lock() - defer q.Unlock() - - q.metrics = append(q.metrics, QueueMetric{Queued: len(q.queuedKeys), Active: len(q.consumedKeys)}) - - // remove old entries if we get too big - if len(q.metrics) > config.DiscoveryQueueMaxStatisticsSize { - q.metrics = q.metrics[len(q.metrics)-config.DiscoveryQueueMaxStatisticsSize:] - } } // QueueLen returns the length of the queue (channel size + queued size) diff --git a/go/vt/vtorc/logic/vtorc.go b/go/vt/vtorc/logic/vtorc.go index c6a4a4ee46d..1fde6e31c0d 100644 --- a/go/vt/vtorc/logic/vtorc.go +++ b/go/vt/vtorc/logic/vtorc.go @@ -108,7 +108,7 @@ func waitForLocksRelease() { // handleDiscoveryRequests iterates the discoveryQueue channel and calls upon // instance discovery per entry. func handleDiscoveryRequests() { - discoveryQueue = discovery.CreateOrReturnQueue("DEFAULT") + discoveryQueue = discovery.CreateQueue("DEFAULT") // create a pool of discovery workers for i := uint(0); i < config.DiscoveryMaxConcurrency; i++ { go func() { diff --git a/go/vt/vttablet/tabletmanager/vdiff/engine_test.go b/go/vt/vttablet/tabletmanager/vdiff/engine_test.go index 61d713a8e58..374756418c6 100644 --- a/go/vt/vttablet/tabletmanager/vdiff/engine_test.go +++ b/go/vt/vttablet/tabletmanager/vdiff/engine_test.go @@ -139,7 +139,7 @@ func TestVDiff(t *testing.T) { "lastpk|mismatch|report", "varbinary|int64|json", ), - `fields:{name:"c1" type:INT64 table:"t1" org_table:"t1" database:"vt_customer" org_name:"c1" column_length:20 charset:63 flags:53251} rows:{lengths:1 values:"1"}|0|{}`, + `target:{fields:{name:"c1" type:INT64 table:"t1" org_table:"t1" database:"vt_customer" org_name:"c1" column_length:20 charset:63 flags:53251} rows:{lengths:1 values:"1"}}|0|{}`, ), nil) vdenv.dbClient.ExpectRequest(fmt.Sprintf("select column_name as column_name, collation_name as collation_name from information_schema.columns where table_schema='%s' and table_name='t1' and column_name in ('c1')", vdiffDBName), sqltypes.MakeTestResult(sqltypes.MakeTestFields( "collation_name", @@ -159,7 +159,7 @@ func TestVDiff(t *testing.T) { "lastpk|mismatch|report", "varbinary|int64|json", ), - `fields:{name:"c1" type:INT64 table:"t1" org_table:"t1" database:"vt_customer" org_name:"c1" column_length:20 charset:63 flags:53251} rows:{lengths:1 values:"1"}|0|{"TableName": "t1", "MatchingRows": 1, "ProcessedRows": 1, "MismatchedRows": 0, "ExtraRowsSource": 0, "ExtraRowsTarget": 0}`, + `target:{fields:{name:"c1" type:INT64 table:"t1" org_table:"t1" database:"vt_customer" org_name:"c1" column_length:20 charset:63 flags:53251} rows:{lengths:1 values:"1"}}|0|{}`, ), nil) vdenv.dbClient.ExpectRequest("update _vt.vdiff_table set table_rows = 1 where vdiff_id = 1 and table_name = 't1'", singleRowAffected, nil) @@ -169,7 +169,7 @@ func TestVDiff(t *testing.T) { "lastpk|mismatch|report", "varbinary|int64|json", ), - `fields:{name:"c1" type:INT64 table:"t1" org_table:"t1" database:"vt_customer" org_name:"c1" column_length:20 charset:63 flags:53251} rows:{lengths:1 values:"1"}|0|{"TableName": "t1", "MatchingRows": 1, "ProcessedRows": 1, "MismatchedRows": 0, "ExtraRowsSource": 0, "ExtraRowsTarget": 0}`, + `target:{fields:{name:"c1" type:INT64 table:"t1" org_table:"t1" database:"vt_customer" org_name:"c1" column_length:20 charset:63 flags:53251} rows:{lengths:1 values:"1"}}|0|{}`, ), nil) vdenv.dbClient.ExpectRequest("update _vt.vdiff_table set state = 'started' where vdiff_id = 1 and table_name = 't1'", singleRowAffected, nil) vdenv.dbClient.ExpectRequest(`insert into _vt.vdiff_log(vdiff_id, message) values (1, 'started: table \'t1\'')`, singleRowAffected, nil) @@ -185,7 +185,7 @@ func TestVDiff(t *testing.T) { "lastpk|mismatch|report", "varbinary|int64|json", ), - `fields:{name:"c1" type:INT64 table:"t1" org_table:"t1" database:"vt_customer" org_name:"c1" column_length:20 charset:63 flags:53251} rows:{lengths:1 values:"1"}|0|{}`, + `target:{fields:{name:"c1" type:INT64 table:"t1" org_table:"t1" database:"vt_customer" org_name:"c1" column_length:20 charset:63 flags:53251} rows:{lengths:1 values:"1"}}|0|{}`, ), nil) vdenv.dbClient.ExpectRequest(`update _vt.vdiff_table set rows_compared = 0, report = '{"TableName":"t1","ProcessedRows":0,"MatchingRows":0,"MismatchedRows":0,"ExtraRowsSource":0,"ExtraRowsTarget":0}' where vdiff_id = 1 and table_name = 't1'`, singleRowAffected, nil) vdenv.dbClient.ExpectRequest(`update _vt.vdiff_table set state = 'completed', rows_compared = 0, report = '{"TableName":"t1","ProcessedRows":0,"MatchingRows":0,"MismatchedRows":0,"ExtraRowsSource":0,"ExtraRowsTarget":0}' where vdiff_id = 1 and table_name = 't1'`, singleRowAffected, nil) diff --git a/go/vt/vttablet/tabletmanager/vdiff/framework_test.go b/go/vt/vttablet/tabletmanager/vdiff/framework_test.go index 7d4cdb78c20..563741fcd23 100644 --- a/go/vt/vttablet/tabletmanager/vdiff/framework_test.go +++ b/go/vt/vttablet/tabletmanager/vdiff/framework_test.go @@ -678,5 +678,15 @@ func (tvde *testVDiffEnv) createController(t *testing.T, id int) *controller { tvde.dbClient.ExpectRequest(fmt.Sprintf("select * from _vt.vdiff where id = %d", id), noResults, nil) ct, err := newController(context.Background(), controllerQR.Named().Row(), tvde.dbClientFactory, tstenv.TopoServ, tvde.vde, tvde.opts) require.NoError(t, err) + ct.sources = map[string]*migrationSource{ + tstenv.ShardName: { + vrID: 1, + shardStreamer: &shardStreamer{ + tablet: tvde.vde.thisTablet, + shard: tstenv.ShardName, + }, + }, + } + ct.sourceKeyspace = tstenv.KeyspaceName return ct } diff --git a/go/vt/vttablet/tabletmanager/vdiff/table_differ.go b/go/vt/vttablet/tabletmanager/vdiff/table_differ.go index 102d7535af9..1ebeab8ed8d 100644 --- a/go/vt/vttablet/tabletmanager/vdiff/table_differ.go +++ b/go/vt/vttablet/tabletmanager/vdiff/table_differ.go @@ -20,10 +20,12 @@ import ( "context" "encoding/json" "fmt" + "slices" "strings" "sync" "time" + "golang.org/x/exp/maps" "google.golang.org/protobuf/encoding/prototext" "vitess.io/vitess/go/mysql/collations" @@ -34,6 +36,7 @@ import ( "vitess.io/vitess/go/vt/concurrency" "vitess.io/vitess/go/vt/discovery" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/mysqlctl" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" @@ -86,9 +89,10 @@ type tableDiffer struct { targetPrimitive engine.Primitive // sourceQuery is computed from the associated query for this table in the vreplication workflow's Rule Filter - sourceQuery string - table *tabletmanagerdatapb.TableDefinition - lastPK *querypb.QueryResult + sourceQuery string + table *tabletmanagerdatapb.TableDefinition + lastSourcePK *querypb.QueryResult + lastTargetPK *querypb.QueryResult // wgShardStreamers is used, with a cancellable context, to wait for all shard streamers // to finish after each diff is complete. @@ -238,15 +242,9 @@ func (td *tableDiffer) selectTablets(ctx context.Context) error { sourceCells := strings.Split(td.wd.opts.PickerOptions.SourceCell, ",") targetCells := strings.Split(td.wd.opts.PickerOptions.TargetCell, ",") - // For Mount+Migrate, the source tablets will be in a different - // Vitess cluster with its own TopoServer. - sourceTopoServer := td.wd.ct.ts - if td.wd.ct.externalCluster != "" { - extTS, err := td.wd.ct.ts.OpenExternalVitessClusterServer(ctx, td.wd.ct.externalCluster) - if err != nil { - return err - } - sourceTopoServer = extTS + sourceTopoServer, err := td.wd.getSourceTopoServer() + if err != nil { + return vterrors.Wrap(err, "failed to get source topo server") } tabletPickerOptions := discovery.TabletPickerOptions{} wg.Add(1) @@ -349,7 +347,7 @@ func (td *tableDiffer) startTargetDataStream(ctx context.Context) error { ct := td.wd.ct gtidch := make(chan string, 1) ct.targetShardStreamer.result = make(chan *sqltypes.Result, 1) - go td.streamOneShard(ctx, ct.targetShardStreamer, td.tablePlan.targetQuery, td.lastPK, gtidch) + go td.streamOneShard(ctx, ct.targetShardStreamer, td.tablePlan.targetQuery, td.lastTargetPK, gtidch) gtid, ok := <-gtidch if !ok { log.Infof("streaming error: %v", ct.targetShardStreamer.err) @@ -364,7 +362,7 @@ func (td *tableDiffer) startSourceDataStreams(ctx context.Context) error { if err := td.forEachSource(func(source *migrationSource) error { gtidch := make(chan string, 1) source.result = make(chan *sqltypes.Result, 1) - go td.streamOneShard(ctx, source.shardStreamer, td.tablePlan.sourceQuery, td.lastPK, gtidch) + go td.streamOneShard(ctx, source.shardStreamer, td.tablePlan.sourceQuery, td.lastSourcePK, gtidch) gtid, ok := <-gtidch if !ok { @@ -721,32 +719,17 @@ func (td *tableDiffer) updateTableProgress(dbClient binlogplayer.DBClient, dr *D if dr == nil { return fmt.Errorf("cannot update progress with a nil diff report") } - var lastPK []byte + var err error var query string rpt, err := json.Marshal(dr) if err != nil { return err } - if lastRow != nil { - lastPK, err = td.lastPKFromRow(lastRow) - if err != nil { - return err - } - - if td.wd.opts.CoreOptions.MaxDiffSeconds > 0 { - // Update the in-memory lastPK as well so that we can restart the table - // diff if needed. - lastpkpb := &querypb.QueryResult{} - if err := prototext.Unmarshal(lastPK, lastpkpb); err != nil { - return err - } - td.lastPK = lastpkpb - } - query, err = sqlparser.ParseAndBind(sqlUpdateTableProgress, + if lastRow == nil { + query, err = sqlparser.ParseAndBind(sqlUpdateTableNoProgress, sqltypes.Int64BindVariable(dr.ProcessedRows), - sqltypes.StringBindVariable(string(lastPK)), sqltypes.StringBindVariable(string(rpt)), sqltypes.Int64BindVariable(td.wd.ct.id), sqltypes.StringBindVariable(td.table.Name), @@ -755,8 +738,25 @@ func (td *tableDiffer) updateTableProgress(dbClient binlogplayer.DBClient, dr *D return err } } else { - query, err = sqlparser.ParseAndBind(sqlUpdateTableNoProgress, + lastPK := td.lastPKFromRow(lastRow) + if td.wd.opts.CoreOptions.MaxDiffSeconds > 0 { + // Update the in-memory lastPK as well so that we can restart the table + // diff if needed. + td.lastTargetPK = lastPK.Target + if lastPK.Source == nil { + // If the source PK is nil, we use the target value for both. + td.lastSourcePK = lastPK.Target + } else { + td.lastSourcePK = lastPK.Source + } + } + lastPKTxt, err := prototext.Marshal(lastPK) + if err != nil { + return vterrors.Wrapf(err, "failed to marshal lastpk value %+v for table %s", lastPK, td.table.Name) + } + query, err = sqlparser.ParseAndBind(sqlUpdateTableProgress, sqltypes.Int64BindVariable(dr.ProcessedRows), + sqltypes.StringBindVariable(string(lastPKTxt)), sqltypes.StringBindVariable(string(rpt)), sqltypes.Int64BindVariable(td.wd.ct.id), sqltypes.StringBindVariable(td.table.Name), @@ -768,6 +768,7 @@ func (td *tableDiffer) updateTableProgress(dbClient binlogplayer.DBClient, dr *D if _, err := dbClient.ExecuteFetch(query, 1); err != nil { return err } + td.wd.ct.TableDiffRowCounts.Add(td.table.Name, dr.ProcessedRows) return nil } @@ -832,19 +833,30 @@ func updateTableMismatch(dbClient binlogplayer.DBClient, vdiffID int64, table st return nil } -func (td *tableDiffer) lastPKFromRow(row []sqltypes.Value) ([]byte, error) { - pkColCnt := len(td.tablePlan.pkCols) - pkFields := make([]*querypb.Field, pkColCnt) - pkVals := make([]sqltypes.Value, pkColCnt) - for i, colIndex := range td.tablePlan.pkCols { - pkFields[i] = td.tablePlan.table.Fields[colIndex] - pkVals[i] = row[colIndex] - } - buf, err := prototext.Marshal(&querypb.QueryResult{ - Fields: pkFields, - Rows: []*querypb.Row{sqltypes.RowToProto3(pkVals)}, - }) - return buf, err +func (td *tableDiffer) lastPKFromRow(row []sqltypes.Value) *tabletmanagerdatapb.VDiffTableLastPK { + buildQR := func(pkCols []int) *querypb.QueryResult { + pkColCnt := len(pkCols) + pkFields := make([]*querypb.Field, pkColCnt) + pkVals := make([]sqltypes.Value, pkColCnt) + for i, colIndex := range pkCols { + pkFields[i] = td.tablePlan.table.Fields[colIndex] + pkVals[i] = row[colIndex] + } + return &querypb.QueryResult{ + Fields: pkFields, + Rows: []*querypb.Row{sqltypes.RowToProto3(pkVals)}, + } + } + lastPK := &tabletmanagerdatapb.VDiffTableLastPK{ + Target: buildQR(td.tablePlan.pkCols), + } + // If the source and target PKs are different, we need to save the source PK + // as well. Otherwise the source will be nil which means that the target value + // should also be used for the source. + if !slices.Equal(td.tablePlan.pkCols, td.tablePlan.sourcePkCols) { + lastPK.Source = buildQR(td.tablePlan.sourcePkCols) + } + return lastPK } // If SourceTimeZone is defined in the BinlogSource (_vt.vreplication.source), the @@ -893,6 +905,83 @@ func (td *tableDiffer) adjustForSourceTimeZone(targetSelectExprs sqlparser.Selec return targetSelectExprs } +// getSourcePKCols populates the sourcePkCols field in the tablePlan. +// We need this information in order to save the lastpk value for the +// source if the PK columns differ between the source and target. +func (td *tableDiffer) getSourcePKCols() error { + ctx, cancel := context.WithTimeout(td.wd.ct.vde.ctx, topo.RemoteOperationTimeout*3) + defer cancel() + + // We use the first sourceShard as all of them should have the same schema. + if len(td.wd.ct.sources) == 0 { + return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "no source shards found in %s keyspace", + td.wd.ct.sourceKeyspace) + } + sourceShardName := maps.Keys(td.wd.ct.sources)[0] + sourceTS, err := td.wd.getSourceTopoServer() + if err != nil { + return vterrors.Wrap(err, "failed to get source topo server") + } + sourceShard, err := sourceTS.GetShard(ctx, td.wd.ct.sourceKeyspace, sourceShardName) + if err != nil { + return vterrors.Wrapf(err, "failed to get source shard %s", sourceShardName) + } + if sourceShard.PrimaryAlias == nil { + return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "source shard %s has no primary", sourceShardName) + } + sourceTablet, err := sourceTS.GetTablet(ctx, sourceShard.PrimaryAlias) + if err != nil { + return vterrors.Wrapf(err, "failed to get primary tablet in source shard %s/%s", + td.wd.ct.sourceKeyspace, sourceShardName) + } + sourceSchema, err := td.wd.ct.tmc.GetSchema(ctx, sourceTablet.Tablet, &tabletmanagerdatapb.GetSchemaRequest{ + Tables: []string{td.table.Name}, + }) + if err != nil { + return vterrors.Wrapf(err, "failed to get the schema for table %s from source tablet %s", + td.table.Name, topoproto.TabletAliasString(sourceTablet.Tablet.Alias)) + } + sourceTable := sourceSchema.TableDefinitions[0] + if len(sourceTable.PrimaryKeyColumns) == 0 { + // We use the columns from a PKE if there is one. + executeFetch := func(query string, maxrows int, wantfields bool) (*sqltypes.Result, error) { + res, err := td.wd.ct.tmc.ExecuteFetchAsApp(ctx, sourceTablet.Tablet, false, &tabletmanagerdatapb.ExecuteFetchAsAppRequest{ + Query: []byte(query), + MaxRows: 1, + }) + if err != nil { + return nil, vterrors.Wrapf(err, "failed to query the %s source tablet in order to get a primary key equivalent for the %s table", + topoproto.TabletAliasString(sourceTablet.Tablet.Alias), td.table.Name) + } + return sqltypes.Proto3ToResult(res), nil + } + pkeCols, _, err := mysqlctl.GetPrimaryKeyEquivalentColumns(ctx, executeFetch, sourceTablet.DbName(), td.table.Name) + if err != nil { + return vterrors.Wrapf(err, "failed to get a primary key equivalent for the %s table from source tablet %s", + td.table.Name, topoproto.TabletAliasString(sourceTablet.Tablet.Alias)) + } + if len(pkeCols) > 0 { + sourceTable.PrimaryKeyColumns = pkeCols + } else { + // We use every column together as a substitute PK. + sourceTable.PrimaryKeyColumns = append(sourceTable.PrimaryKeyColumns, td.table.Columns...) + } + } + + sourcePKColumns := make(map[string]struct{}, len(sourceTable.PrimaryKeyColumns)) + td.tablePlan.sourcePkCols = make([]int, 0, len(sourceTable.PrimaryKeyColumns)) + for _, pkc := range sourceTable.PrimaryKeyColumns { + sourcePKColumns[pkc] = struct{}{} + } + for i, pkc := range td.table.Columns { + if _, ok := sourcePKColumns[pkc]; ok { + td.tablePlan.sourcePkCols = append(td.tablePlan.sourcePkCols, i) + } + } + + return nil +} + func getColumnNameForSelectExpr(selectExpression sqlparser.SelectExpr) (string, error) { aliasedExpr := selectExpression.(*sqlparser.AliasedExpr) expr := aliasedExpr.Expr diff --git a/go/vt/vttablet/tabletmanager/vdiff/table_differ_test.go b/go/vt/vttablet/tabletmanager/vdiff/table_differ_test.go new file mode 100644 index 00000000000..03ba218cd66 --- /dev/null +++ b/go/vt/vttablet/tabletmanager/vdiff/table_differ_test.go @@ -0,0 +1,131 @@ +/* +Copyright 2025 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package vdiff + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" + + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/stats" + "vitess.io/vitess/go/vt/binlog/binlogplayer" + + querypb "vitess.io/vitess/go/vt/proto/query" + tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata" +) + +func TestUpdateTableProgress(t *testing.T) { + wd := &workflowDiffer{ + ct: &controller{ + id: 1, + TableDiffRowCounts: stats.NewCountersWithSingleLabel("", "", "Rows"), + }, + opts: &tabletmanagerdatapb.VDiffOptions{ + CoreOptions: &tabletmanagerdatapb.VDiffCoreOptions{ + MaxDiffSeconds: 100, + }, + }, + } + table := &tabletmanagerdatapb.TableDefinition{ + Name: "test", + } + dr := &DiffReport{ + TableName: table.Name, + ProcessedRows: 1e9, + } + queryTemplate := `update _vt.vdiff_table set rows_compared = 1000000000, lastpk = '%s', report = '{"TableName":"test","ProcessedRows":1000000000,"MatchingRows":0,"MismatchedRows":0,"ExtraRowsSource":0,"ExtraRowsTarget":0}' where vdiff_id = 1 and table_name = 'test'` + + testCases := []struct { + name string + fields []*querypb.Field + pkCols []int + sourcePkCols []int + lastRow []sqltypes.Value + expectedLastPK string + wantErr bool + }{ + { + name: "identical PKs", + fields: []*querypb.Field{ + { + Name: "a", Type: sqltypes.Int64, + }, + { + Name: "b", Type: sqltypes.Int64, + }, + }, + pkCols: []int{0, 1}, + sourcePkCols: []int{0, 1}, + lastRow: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(2)}, + expectedLastPK: `target:{fields:{name:"a" type:INT64} fields:{name:"b" type:INT64} rows:{lengths:1 lengths:1 values:"12"}}`, + }, + { + name: "more PK cols on target", + fields: []*querypb.Field{ + { + Name: "a", Type: sqltypes.Int64, + }, + { + Name: "b", Type: sqltypes.Int64, + }, + }, + pkCols: []int{0, 1}, + sourcePkCols: []int{0}, + lastRow: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(2)}, + expectedLastPK: `target:{fields:{name:"a" type:INT64} fields:{name:"b" type:INT64} rows:{lengths:1 lengths:1 values:"12"}} source:{fields:{name:"a" type:INT64} rows:{lengths:1 values:"1"}}`, + }, + { + name: "more PK cols on source", + fields: []*querypb.Field{ + { + Name: "a", Type: sqltypes.Int64, + }, + { + Name: "b", Type: sqltypes.Int64, + }, + }, + pkCols: []int{0}, + sourcePkCols: []int{0, 1}, + lastRow: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(2)}, + expectedLastPK: `target:{fields:{name:"a" type:INT64} rows:{lengths:1 values:"1"}} source:{fields:{name:"a" type:INT64} fields:{name:"b" type:INT64} rows:{lengths:1 lengths:1 values:"12"}}`, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + dbc := binlogplayer.NewMockDBClient(t) + dbc.ExpectRequest(fmt.Sprintf(queryTemplate, tc.expectedLastPK), &sqltypes.Result{}, nil) + td := &tableDiffer{ + wd: wd, + table: table, + tablePlan: &tablePlan{ + pkCols: tc.pkCols, + sourcePkCols: tc.sourcePkCols, + table: &tabletmanagerdatapb.TableDefinition{ + Fields: tc.fields, + }, + }, + } + if err := td.updateTableProgress(dbc, dr, tc.lastRow); (err != nil) != tc.wantErr { + require.FailNow(t, "tableDiffer.updateTableProgress() error = %v, wantErr %v", + err, tc.wantErr) + } + }) + } +} diff --git a/go/vt/vttablet/tabletmanager/vdiff/table_plan.go b/go/vt/vttablet/tabletmanager/vdiff/table_plan.go index 836df8ffe94..b5ea384d864 100644 --- a/go/vt/vttablet/tabletmanager/vdiff/table_plan.go +++ b/go/vt/vttablet/tabletmanager/vdiff/table_plan.go @@ -53,6 +53,11 @@ type tablePlan struct { comparePKs []compareColInfo // pkCols has the indices of PK cols in the select list pkCols []int + // sourcePkCols has the indices of PK cols in the select + // list, but from the source keyspace. This is needed to + // properly store the lastpk for the source when the source + // and target have different PK columns. + sourcePkCols []int // selectPks is the list of pk columns as they appear in the select clause for the diff. selectPks []int diff --git a/go/vt/vttablet/tabletmanager/vdiff/utils.go b/go/vt/vttablet/tabletmanager/vdiff/utils.go index aeaa28972e0..68e8a6acb57 100644 --- a/go/vt/vttablet/tabletmanager/vdiff/utils.go +++ b/go/vt/vttablet/tabletmanager/vdiff/utils.go @@ -80,17 +80,6 @@ func insertVDiffLog(ctx context.Context, dbClient binlogplayer.DBClient, vdiffID } } -func stringListContains(lst []string, item string) bool { - contains := false - for _, t := range lst { - if t == item { - contains = true - break - } - } - return contains -} - // copyNonKeyRangeExpressions copies all expressions from the input WHERE clause // to the output WHERE clause except for any in_keyrange() expressions. func copyNonKeyRangeExpressions(where *sqlparser.Where) *sqlparser.Where { diff --git a/go/vt/vttablet/tabletmanager/vdiff/workflow_differ.go b/go/vt/vttablet/tabletmanager/vdiff/workflow_differ.go index ef30d8f14b0..775ae1d9179 100644 --- a/go/vt/vttablet/tabletmanager/vdiff/workflow_differ.go +++ b/go/vt/vttablet/tabletmanager/vdiff/workflow_differ.go @@ -21,6 +21,7 @@ import ( "errors" "fmt" "reflect" + "slices" "strings" "time" @@ -33,6 +34,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/schema" "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/vtctl/schematools" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vtgate/vindexes" @@ -40,7 +42,6 @@ import ( "vitess.io/vitess/go/vt/vttablet/tabletmanager/vreplication" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" - querypb "vitess.io/vitess/go/vt/proto/query" tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" ) @@ -344,7 +345,7 @@ func (wd *workflowDiffer) buildPlan(dbClient binlogplayer.DBClient, filter *binl for _, table := range schm.TableDefinitions { // if user specified tables explicitly only use those, otherwise diff all tables in workflow - if len(specifiedTables) != 0 && !stringListContains(specifiedTables, table.Name) { + if len(specifiedTables) != 0 && !slices.Contains(specifiedTables, table.Name) { continue } if schema.IsInternalOperationTableName(table.Name) && !schema.IsOnlineDDLTableName(table.Name) { @@ -370,15 +371,24 @@ func (wd *workflowDiffer) buildPlan(dbClient binlogplayer.DBClient, filter *binl } td := newTableDiffer(wd, table, sourceQuery) - lastpkpb, err := wd.getTableLastPK(dbClient, table.Name) + lastPK, err := wd.getTableLastPK(dbClient, table.Name) if err != nil { return err } - td.lastPK = lastpkpb + if lastPK != nil { + td.lastSourcePK = lastPK.Source + td.lastTargetPK = lastPK.Target + } wd.tableDiffers[table.Name] = td if _, err := td.buildTablePlan(dbClient, wd.ct.vde.dbName, wd.collationEnv); err != nil { return err } + // We get the PK columns from the source schema as well as they can differ + // and they determine the proper position to use when saving our progress. + if err := td.getSourcePKCols(); err != nil { + return vterrors.Wrapf(err, "could not get the primary key columns from the %s source keyspace", + wd.ct.sourceKeyspace) + } } if len(wd.tableDiffers) == 0 { return fmt.Errorf("no tables found to diff, %s:%s, on tablet %v", @@ -388,7 +398,7 @@ func (wd *workflowDiffer) buildPlan(dbClient binlogplayer.DBClient, filter *binl } // getTableLastPK gets the lastPK protobuf message for a given vdiff table. -func (wd *workflowDiffer) getTableLastPK(dbClient binlogplayer.DBClient, tableName string) (*querypb.QueryResult, error) { +func (wd *workflowDiffer) getTableLastPK(dbClient binlogplayer.DBClient, tableName string) (*tabletmanagerdatapb.VDiffTableLastPK, error) { query, err := sqlparser.ParseAndBind(sqlGetVDiffTable, sqltypes.Int64BindVariable(wd.ct.id), sqltypes.StringBindVariable(tableName), @@ -406,11 +416,15 @@ func (wd *workflowDiffer) getTableLastPK(dbClient binlogplayer.DBClient, tableNa return nil, err } if len(lastpk) != 0 { - var lastpkpb querypb.QueryResult - if err := prototext.Unmarshal(lastpk, &lastpkpb); err != nil { - return nil, err + lastPK := &tabletmanagerdatapb.VDiffTableLastPK{} + if err := prototext.Unmarshal(lastpk, lastPK); err != nil { + return nil, vterrors.Wrapf(err, "failed to unmarshal lastpk value of %s for the %s table", + string(lastpk), tableName) + } + if lastPK.Source == nil { // Then it's the same as the target + lastPK.Source = lastPK.Target } - return &lastpkpb, nil + return lastPK, nil } } return nil, nil @@ -488,3 +502,14 @@ func (wd *workflowDiffer) initVDiffTables(dbClient binlogplayer.DBClient) error } return nil } + +// getSourceTopoServer returns the source topo server as for Mount+Migrate the +// source tablets will be in a different Vitess cluster with its own TopoServer. +func (wd *workflowDiffer) getSourceTopoServer() (*topo.Server, error) { + if wd.ct.externalCluster == "" { + return wd.ct.ts, nil + } + ctx, cancel := context.WithTimeout(wd.ct.vde.ctx, topo.RemoteOperationTimeout) + defer cancel() + return wd.ct.ts.OpenExternalVitessClusterServer(ctx, wd.ct.externalCluster) +} diff --git a/go/vt/vttablet/tabletmanager/vdiff/workflow_differ_test.go b/go/vt/vttablet/tabletmanager/vdiff/workflow_differ_test.go index c51b6fdf281..5ac0fabd726 100644 --- a/go/vt/vttablet/tabletmanager/vdiff/workflow_differ_test.go +++ b/go/vt/vttablet/tabletmanager/vdiff/workflow_differ_test.go @@ -51,6 +51,16 @@ func TestBuildPlanSuccess(t *testing.T) { vdiffenv.dbClient.ExpectRequest("select * from _vt.vdiff where id = 1", noResults, nil) ct, err := newController(context.Background(), controllerQR.Named().Row(), vdiffenv.dbClientFactory, tstenv.TopoServ, vdiffenv.vde, vdiffenv.opts) require.NoError(t, err) + ct.sources = map[string]*migrationSource{ + tstenv.ShardName: { + vrID: 1, + shardStreamer: &shardStreamer{ + tablet: vdenv.vde.thisTablet, + shard: tstenv.ShardName, + }, + }, + } + ct.sourceKeyspace = tstenv.KeyspaceName testcases := []struct { input *binlogdatapb.Rule @@ -63,14 +73,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "t1", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["t1"]], - sourceQuery: "select c1, c2 from t1 order by c1 asc", - targetQuery: "select c1, c2 from t1 order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["t1"]], + sourceQuery: "select c1, c2 from t1 order by c1 asc", + targetQuery: "select c1, c2 from t1 order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{0}, + sourcePkCols: []int{0}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -83,14 +94,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "t1", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["t1"]], - sourceQuery: "select c1, c2 from t1 where in_keyrange('-80') order by c1 asc", - targetQuery: "select c1, c2 from t1 order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["t1"]], + sourceQuery: "select c1, c2 from t1 where in_keyrange('-80') order by c1 asc", + targetQuery: "select c1, c2 from t1 order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{0}, + sourcePkCols: []int{0}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -103,14 +115,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "t1", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["t1"]], - sourceQuery: "select c1, c2 from t1 order by c1 asc", - targetQuery: "select c1, c2 from t1 order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["t1"]], + sourceQuery: "select c1, c2 from t1 order by c1 asc", + targetQuery: "select c1, c2 from t1 order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{0}, + sourcePkCols: []int{0}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -123,14 +136,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "t1", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["t1"]], - sourceQuery: "select c2, c1 from t1 order by c1 asc", - targetQuery: "select c2, c1 from t1 order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - comparePKs: []compareColInfo{{1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{1}, - selectPks: []int{1}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["t1"]], + sourceQuery: "select c2, c1 from t1 order by c1 asc", + targetQuery: "select c2, c1 from t1 order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + comparePKs: []compareColInfo{{1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{1}, + sourcePkCols: []int{0}, + selectPks: []int{1}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -143,14 +157,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "t1", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["t1"]], - sourceQuery: "select c0 as c1, c2 from t2 order by c1 asc", - targetQuery: "select c1, c2 from t1 order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["t1"]], + sourceQuery: "select c0 as c1, c2 from t2 order by c1 asc", + targetQuery: "select c1, c2 from t1 order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{0}, + sourcePkCols: []int{0}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -164,14 +179,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "nonpktext", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["nonpktext"]], - sourceQuery: "select c1, textcol from nonpktext order by c1 asc", - targetQuery: "select c1, textcol from nonpktext order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "textcol"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["nonpktext"]], + sourceQuery: "select c1, textcol from nonpktext order by c1 asc", + targetQuery: "select c1, textcol from nonpktext order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "textcol"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{0}, + sourcePkCols: []int{0}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -185,14 +201,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "nonpktext", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["nonpktext"]], - sourceQuery: "select textcol, c1 from nonpktext order by c1 asc", - targetQuery: "select textcol, c1 from nonpktext order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "textcol"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - comparePKs: []compareColInfo{{1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{1}, - selectPks: []int{1}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["nonpktext"]], + sourceQuery: "select textcol, c1 from nonpktext order by c1 asc", + targetQuery: "select textcol, c1 from nonpktext order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "textcol"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + comparePKs: []compareColInfo{{1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{1}, + sourcePkCols: []int{0}, + selectPks: []int{1}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -206,14 +223,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "pktext", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["pktext"]], - sourceQuery: "select textcol, c2 from pktext order by textcol asc", - targetQuery: "select textcol, c2 from pktext order by textcol asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "textcol"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "textcol"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["pktext"]], + sourceQuery: "select textcol, c2 from pktext order by textcol asc", + targetQuery: "select textcol, c2 from pktext order by textcol asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "textcol"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "textcol"}}, + pkCols: []int{0}, + sourcePkCols: []int{}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("textcol")}, Direction: sqlparser.AscOrder, @@ -227,14 +245,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "pktext", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["pktext"]], - sourceQuery: "select c2, textcol from pktext order by textcol asc", - targetQuery: "select c2, textcol from pktext order by textcol asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "textcol"}}, - comparePKs: []compareColInfo{{1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "textcol"}}, - pkCols: []int{1}, - selectPks: []int{1}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["pktext"]], + sourceQuery: "select c2, textcol from pktext order by textcol asc", + targetQuery: "select c2, textcol from pktext order by textcol asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "textcol"}}, + comparePKs: []compareColInfo{{1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "textcol"}}, + pkCols: []int{1}, + sourcePkCols: []int{}, + selectPks: []int{1}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("textcol")}, Direction: sqlparser.AscOrder, @@ -248,14 +267,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "nopk", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["nopk"]], - sourceQuery: "select c1, c2, c3 from nopk order by c1 asc, c2 asc, c3 asc", - targetQuery: "select c1, c2, c3 from nopk order by c1 asc, c2 asc, c3 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c2"}, {2, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c3"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c2"}, {2, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c3"}}, - pkCols: []int{0, 1, 2}, - selectPks: []int{0, 1, 2}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["nopk"]], + sourceQuery: "select c1, c2, c3 from nopk order by c1 asc, c2 asc, c3 asc", + targetQuery: "select c1, c2, c3 from nopk order by c1 asc, c2 asc, c3 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c2"}, {2, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c3"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c2"}, {2, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c3"}}, + pkCols: []int{0, 1, 2}, + sourcePkCols: []int{0}, + selectPks: []int{0, 1, 2}, orderBy: sqlparser.OrderBy{ &sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, @@ -279,14 +299,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "nopkwithpke", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["nopkwithpke"]], - sourceQuery: "select c1, c2, c3 from nopkwithpke order by c3 asc", - targetQuery: "select c1, c2, c3 from nopkwithpke order by c3 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}, {2, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c3"}}, - comparePKs: []compareColInfo{{2, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c3"}}, - pkCols: []int{2}, - selectPks: []int{2}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["nopkwithpke"]], + sourceQuery: "select c1, c2, c3 from nopkwithpke order by c3 asc", + targetQuery: "select c1, c2, c3 from nopkwithpke order by c3 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}, {2, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c3"}}, + comparePKs: []compareColInfo{{2, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c3"}}, + pkCols: []int{2}, + sourcePkCols: []int{0}, + selectPks: []int{2}, orderBy: sqlparser.OrderBy{ &sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c3")}, @@ -302,14 +323,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "pktext", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["pktext"]], - sourceQuery: "select c2, a + b as textcol from pktext order by textcol asc", - targetQuery: "select c2, textcol from pktext order by textcol asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "textcol"}}, - comparePKs: []compareColInfo{{1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "textcol"}}, - pkCols: []int{1}, - selectPks: []int{1}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["pktext"]], + sourceQuery: "select c2, a + b as textcol from pktext order by textcol asc", + targetQuery: "select c2, textcol from pktext order by textcol asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "textcol"}}, + comparePKs: []compareColInfo{{1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "textcol"}}, + pkCols: []int{1}, + sourcePkCols: []int{}, + selectPks: []int{1}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("textcol")}, Direction: sqlparser.AscOrder, @@ -322,14 +344,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "multipk", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["multipk"]], - sourceQuery: "select c1, c2 from multipk order by c1 asc, c2 asc", - targetQuery: "select c1, c2 from multipk order by c1 asc, c2 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c2"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c2"}}, - pkCols: []int{0, 1}, - selectPks: []int{0, 1}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["multipk"]], + sourceQuery: "select c1, c2 from multipk order by c1 asc, c2 asc", + targetQuery: "select c1, c2 from multipk order by c1 asc, c2 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c2"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c2"}}, + pkCols: []int{0, 1}, + sourcePkCols: []int{0}, + selectPks: []int{0, 1}, orderBy: sqlparser.OrderBy{ &sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, @@ -349,14 +372,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "t1", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["t1"]], - sourceQuery: "select c1, c2 from t1 where in_keyrange('-80') order by c1 asc", - targetQuery: "select c1, c2 from t1 order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["t1"]], + sourceQuery: "select c1, c2 from t1 where in_keyrange('-80') order by c1 asc", + targetQuery: "select c1, c2 from t1 order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{0}, + sourcePkCols: []int{0}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -370,14 +394,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "t1", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["t1"]], - sourceQuery: "select c1, c2 from t1 where c2 = 2 and in_keyrange('-80') order by c1 asc", - targetQuery: "select c1, c2 from t1 where c2 = 2 order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["t1"]], + sourceQuery: "select c1, c2 from t1 where c2 = 2 and in_keyrange('-80') order by c1 asc", + targetQuery: "select c1, c2 from t1 where c2 = 2 order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{0}, + sourcePkCols: []int{0}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -391,14 +416,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "t1", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["t1"]], - sourceQuery: "select c1, c2 from t1 where in_keyrange('-80') and c2 = 2 order by c1 asc", - targetQuery: "select c1, c2 from t1 where c2 = 2 order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["t1"]], + sourceQuery: "select c1, c2 from t1 where in_keyrange('-80') and c2 = 2 order by c1 asc", + targetQuery: "select c1, c2 from t1 where c2 = 2 order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{0}, + sourcePkCols: []int{0}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -412,14 +438,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "t1", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["t1"]], - sourceQuery: "select c1, c2 from t1 where c2 = 2 and c1 = 1 and in_keyrange('-80') order by c1 asc", - targetQuery: "select c1, c2 from t1 where c2 = 2 and c1 = 1 order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["t1"]], + sourceQuery: "select c1, c2 from t1 where c2 = 2 and c1 = 1 and in_keyrange('-80') order by c1 asc", + targetQuery: "select c1, c2 from t1 where c2 = 2 and c1 = 1 order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{0}, + sourcePkCols: []int{0}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -433,14 +460,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "t1", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["t1"]], - sourceQuery: "select c1, c2 from t1 where c2 = 2 and in_keyrange('-80') order by c1 asc", - targetQuery: "select c1, c2 from t1 where c2 = 2 order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["t1"]], + sourceQuery: "select c1, c2 from t1 where c2 = 2 and in_keyrange('-80') order by c1 asc", + targetQuery: "select c1, c2 from t1 where c2 = 2 order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{0}, + sourcePkCols: []int{0}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -454,14 +482,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "t1", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["t1"]], - sourceQuery: "select c1, c2 from t1 group by c1 order by c1 asc", - targetQuery: "select c1, c2 from t1 order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["t1"]], + sourceQuery: "select c1, c2 from t1 group by c1 order by c1 asc", + targetQuery: "select c1, c2 from t1 order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{0}, + sourcePkCols: []int{0}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -475,14 +504,15 @@ func TestBuildPlanSuccess(t *testing.T) { }, table: "aggr", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["aggr"]], - sourceQuery: "select c1, c2, count(*) as c3, sum(c4) as c4 from t1 group by c1 order by c1 asc", - targetQuery: "select c1, c2, c3, c4 from aggr order by c1 asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}, {2, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c3"}, {3, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c4"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["aggr"]], + sourceQuery: "select c1, c2, count(*) as c3, sum(c4) as c4 from t1 group by c1 order by c1 asc", + targetQuery: "select c1, c2, c3, c4 from aggr order by c1 asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c2"}, {2, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c3"}, {3, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "c4"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "c1"}}, + pkCols: []int{0}, + sourcePkCols: []int{0}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("c1")}, Direction: sqlparser.AscOrder, @@ -500,14 +530,15 @@ func TestBuildPlanSuccess(t *testing.T) { sourceTimeZone: "US/Pacific", table: "datze", tablePlan: &tablePlan{ - dbName: vdiffDBName, - table: testSchema.TableDefinitions[tableDefMap["datze"]], - sourceQuery: "select id, dt from datze order by id asc", - targetQuery: "select id, convert_tz(dt, 'UTC', 'US/Pacific') as dt from datze order by id asc", - compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "id"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "dt"}}, - comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "id"}}, - pkCols: []int{0}, - selectPks: []int{0}, + dbName: vdiffDBName, + table: testSchema.TableDefinitions[tableDefMap["datze"]], + sourceQuery: "select id, dt from datze order by id asc", + targetQuery: "select id, convert_tz(dt, 'UTC', 'US/Pacific') as dt from datze order by id asc", + compareCols: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "id"}, {1, collations.MySQL8().LookupByName(sqltypes.NULL.String()), false, "dt"}}, + comparePKs: []compareColInfo{{0, collations.MySQL8().LookupByName(sqltypes.NULL.String()), true, "id"}}, + pkCols: []int{0}, + sourcePkCols: []int{}, + selectPks: []int{0}, orderBy: sqlparser.OrderBy{&sqlparser.Order{ Expr: &sqlparser.ColName{Name: sqlparser.NewIdentifierCI("id")}, Direction: sqlparser.AscOrder, diff --git a/go/vt/vttablet/tabletserver/vstreamer/rowstreamer.go b/go/vt/vttablet/tabletserver/vstreamer/rowstreamer.go index 31c47674233..317936e4289 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/rowstreamer.go +++ b/go/vt/vttablet/tabletserver/vstreamer/rowstreamer.go @@ -276,7 +276,8 @@ func (rs *rowStreamer) buildSelect(st *binlogdatapb.MinimalTable) (string, error buf.Myprintf(" from %v%s", sqlparser.NewIdentifierCS(rs.plan.Table.Name), indexHint) if len(rs.lastpk) != 0 { if len(rs.lastpk) != len(rs.pkColumns) { - return "", fmt.Errorf("primary key values don't match length: %v vs %v", rs.lastpk, rs.pkColumns) + return "", fmt.Errorf("cannot build a row streamer plan for the %s table as a lastpk value was provided and the number of primary key values within it (%v) does not match the number of primary key columns in the table (%d)", + st.Name, rs.lastpk, rs.pkColumns) } buf.WriteString(" where ") prefix := "" diff --git a/java/example/pom.xml b/java/example/pom.xml index fabab27dd77..19b5838510b 100644 --- a/java/example/pom.xml +++ b/java/example/pom.xml @@ -30,9 +30,9 @@ - mysql - mysql-connector-java - 8.0.33 + com.mysql + mysql-connector-j + 8.4.0 false diff --git a/java/jdbc/src/main/java/io/vitess/jdbc/VitessJDBCUrl.java b/java/jdbc/src/main/java/io/vitess/jdbc/VitessJDBCUrl.java index e6a1b0187dd..3835ba543f8 100644 --- a/java/jdbc/src/main/java/io/vitess/jdbc/VitessJDBCUrl.java +++ b/java/jdbc/src/main/java/io/vitess/jdbc/VitessJDBCUrl.java @@ -218,7 +218,7 @@ private static Properties getURLParamProperties(String paramString, Properties i } } - // Per the mysql-connector-java docs, passed in Properties values should take precedence + // Per the mysql-connector-j docs, passed in Properties values should take precedence // over // those in the URL. See javadoc for NonRegisteringDriver#connect if ((null != value && value.length() > 0) && (parameter.length() > 0) && null == info diff --git a/java/jdbc/src/main/java/io/vitess/jdbc/VitessMySQLDatabaseMetadata.java b/java/jdbc/src/main/java/io/vitess/jdbc/VitessMySQLDatabaseMetadata.java index 0235393a2c9..1f4e33585f3 100644 --- a/java/jdbc/src/main/java/io/vitess/jdbc/VitessMySQLDatabaseMetadata.java +++ b/java/jdbc/src/main/java/io/vitess/jdbc/VitessMySQLDatabaseMetadata.java @@ -67,18 +67,19 @@ public class VitessMySQLDatabaseMetadata extends VitessDatabaseMetaData implemen "INNER", "INOUT", "INSENSITIVE", "INSERT", "INT", "INT1", "INT2", "INT3", "INT4", "INT8", "INTEGER", "INTERVAL", "INTO", "IS", "ITERATE", "JOIN", "KEY", "KEYS", "KILL", "LEADING", "LEAVE", "LEFT", "LIKE", "LIMIT", "LINEAR", "LINES", "LOAD", "LOCALTIME", "LOCALTIMESTAMP", - "LOCK", "LONG", "LONGBLOB", "LONGTEXT", "LOOP", "LOW_PRIORITY", "MATCH", "MEDIUMBLOB", - "MEDIUMINT", "MEDIUMTEXT", "MIDDLEINT", "MINUTE_MICROSECOND", "MINUTE_SECOND", "MOD", - "MODIFIES", "NATURAL", "NOT", "NO_WRITE_TO_BINLOG", "NULL", "NUMERIC", "ON", "OPTIMIZE", - "OPTION", "OPTIONALLY", "OR", "ORDER", "OUT", "OUTER", "OUTFILE", "PRECISION", "PRIMARY", - "PROCEDURE", "PURGE", "RANGE", "READ", "READS", "READ_ONLY", "READ_WRITE", "REAL", - "REFERENCES", "REGEXP", "RELEASE", "RENAME", "REPEAT", "REPLACE", "REQUIRE", "RESTRICT", - "RETURN", "REVOKE", "RIGHT", "RLIKE", "SCHEMA", "SCHEMAS", "SECOND_MICROSECOND", "SELECT", - "SENSITIVE", "SEPARATOR", "SET", "SHOW", "SMALLINT", "SPATIAL", "SPECIFIC", "SQL", - "SQLEXCEPTION", "SQLSTATE", "SQLWARNING", "SQL_BIG_RESULT", "SQL_CALC_FOUND_ROWS", - "SQL_SMALL_RESULT", "SSL", "STARTING", "STRAIGHT_JOIN", "TABLE", "TERMINATED", "THEN", - "TINYBLOB", "TINYINT", "TINYTEXT", "TO", "TRAILING", "TRIGGER", "TRUE", "UNDO", "UNION", - "UNIQUE", "UNLOCK", "UNSIGNED", "UPDATE", "USAGE", "USE", "USING", "UTC_DATE", "UTC_TIME", + "LOCK", "LONG", "LONGBLOB", "LONGTEXT", "LOOP", "LOW_PRIORITY", "MANUAL", "MATCH", + "MEDIUMBLOB", "MEDIUMINT", "MEDIUMTEXT", "MIDDLEINT", "MINUTE_MICROSECOND", + "MINUTE_SECOND", "MOD", "MODIFIES", "NATURAL", "NOT", "NO_WRITE_TO_BINLOG", "NULL", + "NUMERIC", "ON", "OPTIMIZE", "OPTION", "OPTIONALLY", "OR", "ORDER", "OUT", "OUTER", + "OUTFILE", "PARALLEL", "PRECISION", "PRIMARY", "PROCEDURE", "PURGE", "QUALIFY", "RANGE", + "READ", "READS", "READ_ONLY", "READ_WRITE", "REAL", "REFERENCES", "REGEXP", "RELEASE", + "RENAME", "REPEAT", "REPLACE", "REQUIRE", "RESTRICT", "RETURN", "REVOKE", "RIGHT", + "RLIKE", "SCHEMA", "SCHEMAS", "SECOND_MICROSECOND", "SELECT", "SENSITIVE", "SEPARATOR", + "SET", "SHOW", "SMALLINT", "SPATIAL", "SPECIFIC", "SQL", "SQLEXCEPTION", "SQLSTATE", + "SQLWARNING", "SQL_BIG_RESULT", "SQL_CALC_FOUND_ROWS", "SQL_SMALL_RESULT", "SSL", + "STARTING", "STRAIGHT_JOIN", "TABLE", "TABLESAMPLE", "TERMINATED", "THEN", "TINYBLOB", + "TINYINT", "TINYTEXT", "TO", "TRAILING", "TRIGGER", "TRUE", "UNDO", "UNION", "UNIQUE", + "UNLOCK", "UNSIGNED", "UPDATE", "USAGE", "USE", "USING", "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", "VALUES", "VARBINARY", "VARCHAR", "VARCHARACTER", "VARYING", "WHEN", "WHERE", "WHILE", "WITH", "WRITE", "X509", "XOR", "YEAR_MONTH", "ZEROFILL"}; String[] sql92Keywords = new String[]{"ABSOLUTE", "EXEC", "OVERLAPS", "ACTION", "EXECUTE", diff --git a/java/jdbc/src/main/java/io/vitess/jdbc/VitessParameterMetaData.java b/java/jdbc/src/main/java/io/vitess/jdbc/VitessParameterMetaData.java index 8bb880e3749..e556ba7ac37 100644 --- a/java/jdbc/src/main/java/io/vitess/jdbc/VitessParameterMetaData.java +++ b/java/jdbc/src/main/java/io/vitess/jdbc/VitessParameterMetaData.java @@ -25,7 +25,7 @@ public class VitessParameterMetaData implements ParameterMetaData { private final int parameterCount; /** - * This implementation (and defaults below) is equivalent to mysql-connector-java's "simple" + * This implementation (and defaults below) is equivalent to mysql-connector-j's "simple" * (non-server) statement metadata */ VitessParameterMetaData(int count) { diff --git a/java/jdbc/src/main/java/io/vitess/jdbc/VitessPreparedStatement.java b/java/jdbc/src/main/java/io/vitess/jdbc/VitessPreparedStatement.java index 550b5180e11..e97b2d151bb 100644 --- a/java/jdbc/src/main/java/io/vitess/jdbc/VitessPreparedStatement.java +++ b/java/jdbc/src/main/java/io/vitess/jdbc/VitessPreparedStatement.java @@ -426,7 +426,7 @@ public ParameterMetaData getParameterMetaData() throws SQLException { } /** - * This function was ported from mysql-connector-java ParseInfo object and greatly simplified to + * This function was ported from mysql-connector-j ParseInfo object and greatly simplified to * just the parts for counting parameters */ private int calculateParameterCount() throws SQLException { diff --git a/java/jdbc/src/main/java/io/vitess/util/charset/CharsetMapping.java b/java/jdbc/src/main/java/io/vitess/util/charset/CharsetMapping.java index 343ae0e90eb..8b32e2aab67 100644 --- a/java/jdbc/src/main/java/io/vitess/util/charset/CharsetMapping.java +++ b/java/jdbc/src/main/java/io/vitess/util/charset/CharsetMapping.java @@ -24,7 +24,7 @@ import java.util.Map; /** - * These classes were pulled from mysql-connector-java and simplified to just the parts supporting + * These classes were pulled from mysql-connector-j and simplified to just the parts supporting * the statically available charsets */ public class CharsetMapping { diff --git a/java/jdbc/src/main/java/io/vitess/util/charset/Collation.java b/java/jdbc/src/main/java/io/vitess/util/charset/Collation.java index 31548686655..7bd24d10f2a 100644 --- a/java/jdbc/src/main/java/io/vitess/util/charset/Collation.java +++ b/java/jdbc/src/main/java/io/vitess/util/charset/Collation.java @@ -17,7 +17,7 @@ package io.vitess.util.charset; /** - * These classes were pulled from mysql-connector-java and simplified to just the parts supporting + * These classes were pulled from mysql-connector-j and simplified to just the parts supporting * the statically available charsets */ class Collation { diff --git a/java/jdbc/src/main/java/io/vitess/util/charset/MysqlCharset.java b/java/jdbc/src/main/java/io/vitess/util/charset/MysqlCharset.java index fad94cb8dcb..6691e1cb4b4 100644 --- a/java/jdbc/src/main/java/io/vitess/util/charset/MysqlCharset.java +++ b/java/jdbc/src/main/java/io/vitess/util/charset/MysqlCharset.java @@ -23,7 +23,7 @@ import java.util.Set; /** - * These classes were pulled from mysql-connector-java and simplified to just the parts supporting + * These classes were pulled from mysql-connector-j and simplified to just the parts supporting * the statically available charsets */ class MysqlCharset { diff --git a/java/jdbc/src/test/java/io/vitess/jdbc/FieldWithMetadataTest.java b/java/jdbc/src/test/java/io/vitess/jdbc/FieldWithMetadataTest.java index 26ad5fd11b3..318bf44d328 100644 --- a/java/jdbc/src/test/java/io/vitess/jdbc/FieldWithMetadataTest.java +++ b/java/jdbc/src/test/java/io/vitess/jdbc/FieldWithMetadataTest.java @@ -284,7 +284,8 @@ public void testNumericAndDateTimeEncoding() throws SQLException { Query.Type.HEXVAL, Query.Type.HEXNUM, Query.Type.BITNUM, - Query.Type.RAW + Query.Type.RAW, + Query.Type.ROW_TUPLE ); @Test diff --git a/java/pom.xml b/java/pom.xml index e68bbd5574e..bc173282faf 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -252,7 +252,7 @@ true true - mysql:mysql-connector-java + com.mysql:mysql-connector-j io.grpc:grpc-context diff --git a/proto/query.proto b/proto/query.proto index 27a04d77f0a..6c088566fc1 100644 --- a/proto/query.proto +++ b/proto/query.proto @@ -219,7 +219,11 @@ enum Type { // Properties: 35, IsQuoted. VECTOR = 2083; // RAW specifies a type which won't be quoted but the value used as-is while encoding. + // Properties: 36, None. RAW = 2084; + // ROW_TUPLE represents multiple rows. + // Properties: 37, None. + ROW_TUPLE = 2085; } // Value represents a typed value. diff --git a/proto/tabletmanagerdata.proto b/proto/tabletmanagerdata.proto index bb20e712e7f..4a3dd20a0a1 100644 --- a/proto/tabletmanagerdata.proto +++ b/proto/tabletmanagerdata.proto @@ -760,6 +760,13 @@ message VDiffOptions { VDiffReportOptions report_options = 3; } +message VDiffTableLastPK { + query.QueryResult target = 1; + // If the source value is nil then it's the same as the target + // and the target value should be used for both. + optional query.QueryResult source = 2; +} + // UpdateVReplicationWorkflowRequest is used to update an existing VReplication // workflow. Note that the following fields MUST have an explicit value provided diff --git a/test/config.json b/test/config.json index dfc0910f10e..17cdb019e97 100644 --- a/test/config.json +++ b/test/config.json @@ -8,7 +8,7 @@ "java_test" ], "Manual": false, - "Shard": "10", + "Shard": "java", "RetryMax": 1, "Tags": [] }, @@ -19,7 +19,7 @@ "test/client_test.sh" ], "Manual": false, - "Shard": "25", + "Shard": "java", "RetryMax": 1, "Tags": [] }, @@ -483,7 +483,7 @@ ], "Command": [], "Manual": false, - "Shard": "25", + "Shard": "docker_cluster", "RetryMax": 1, "Tags": [ "site_test" @@ -989,7 +989,7 @@ "Args": ["vitess.io/vitess/go/test/endtoend/topotest/zk2", "--topo-flavor=zk2"], "Command": [], "Manual": false, - "Shard": "25", + "Shard": "docker_cluster", "RetryMax": 1, "Tags": [] }, @@ -1061,7 +1061,7 @@ "Args": ["vitess.io/vitess/go/test/endtoend/vtcombo"], "Command": [], "Manual": false, - "Shard": "25", + "Shard": "docker_cluster", "RetryMax": 1, "Tags": [] }, diff --git a/test/templates/cluster_endtoend_test.tpl b/test/templates/cluster_endtoend_test.tpl index f51b06a2faf..c5129805126 100644 --- a/test/templates/cluster_endtoend_test.tpl +++ b/test/templates/cluster_endtoend_test.tpl @@ -13,6 +13,7 @@ env: jobs: build: + timeout-minutes: 60 name: Run endtoend tests on {{.Name}} runs-on: {{if .Cores16}}gh-hosted-runners-16cores-1-24.04{{else}}ubuntu-24.04{{end}} @@ -56,7 +57,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -66,6 +69,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' @@ -105,6 +109,7 @@ jobs: - name: Get dependencies if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 10 run: | {{if .InstallXtraBackup}} diff --git a/test/templates/cluster_endtoend_test_docker.tpl b/test/templates/cluster_endtoend_test_docker.tpl index f7e8aa2c1d8..39a36b88c89 100644 --- a/test/templates/cluster_endtoend_test_docker.tpl +++ b/test/templates/cluster_endtoend_test_docker.tpl @@ -28,7 +28,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -38,6 +40,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' diff --git a/test/templates/cluster_endtoend_test_mysql57.tpl b/test/templates/cluster_endtoend_test_mysql57.tpl index f4152c939b0..a6cbc969c1a 100644 --- a/test/templates/cluster_endtoend_test_mysql57.tpl +++ b/test/templates/cluster_endtoend_test_mysql57.tpl @@ -61,7 +61,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -71,6 +73,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/onlineddl/vrepl_suite/**' diff --git a/test/templates/cluster_vitess_tester.tpl b/test/templates/cluster_vitess_tester.tpl index b8d77754ba6..508824dde87 100644 --- a/test/templates/cluster_vitess_tester.tpl +++ b/test/templates/cluster_vitess_tester.tpl @@ -43,7 +43,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -53,6 +55,7 @@ jobs: token: '' filters: | end_to_end: + - 'test/config.json' - 'go/**/*.go' - 'go/vt/sidecardb/**/*.sql' - 'go/test/endtoend/vtgate/vitess_tester/**' diff --git a/test/templates/unit_test.tpl b/test/templates/unit_test.tpl index f802ee7ad4a..10c3b8c0c6a 100644 --- a/test/templates/unit_test.tpl +++ b/test/templates/unit_test.tpl @@ -43,7 +43,9 @@ jobs: - name: Check out code if: steps.skip-workflow.outputs.skip-workflow == 'false' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' - name: Check for changes in relevant files if: steps.skip-workflow.outputs.skip-workflow == 'false' @@ -53,6 +55,7 @@ jobs: token: '' filters: | unit_tests: + - 'test/config.json' - 'go/**' - 'test.go' - 'Makefile' diff --git a/web/vtadmin/src/proto/vtadmin.d.ts b/web/vtadmin/src/proto/vtadmin.d.ts index adb02034c92..0e6790010bc 100644 --- a/web/vtadmin/src/proto/vtadmin.d.ts +++ b/web/vtadmin/src/proto/vtadmin.d.ts @@ -34138,6 +34138,112 @@ export namespace tabletmanagerdata { public static getTypeUrl(typeUrlPrefix?: string): string; } + /** Properties of a VDiffTableLastPK. */ + interface IVDiffTableLastPK { + + /** VDiffTableLastPK target */ + target?: (query.IQueryResult|null); + + /** VDiffTableLastPK source */ + source?: (query.IQueryResult|null); + } + + /** Represents a VDiffTableLastPK. */ + class VDiffTableLastPK implements IVDiffTableLastPK { + + /** + * Constructs a new VDiffTableLastPK. + * @param [properties] Properties to set + */ + constructor(properties?: tabletmanagerdata.IVDiffTableLastPK); + + /** VDiffTableLastPK target. */ + public target?: (query.IQueryResult|null); + + /** VDiffTableLastPK source. */ + public source?: (query.IQueryResult|null); + + /** VDiffTableLastPK _source. */ + public _source?: "source"; + + /** + * Creates a new VDiffTableLastPK instance using the specified properties. + * @param [properties] Properties to set + * @returns VDiffTableLastPK instance + */ + public static create(properties?: tabletmanagerdata.IVDiffTableLastPK): tabletmanagerdata.VDiffTableLastPK; + + /** + * Encodes the specified VDiffTableLastPK message. Does not implicitly {@link tabletmanagerdata.VDiffTableLastPK.verify|verify} messages. + * @param message VDiffTableLastPK message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: tabletmanagerdata.IVDiffTableLastPK, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VDiffTableLastPK message, length delimited. Does not implicitly {@link tabletmanagerdata.VDiffTableLastPK.verify|verify} messages. + * @param message VDiffTableLastPK message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: tabletmanagerdata.IVDiffTableLastPK, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VDiffTableLastPK message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VDiffTableLastPK + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.VDiffTableLastPK; + + /** + * Decodes a VDiffTableLastPK message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VDiffTableLastPK + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.VDiffTableLastPK; + + /** + * Verifies a VDiffTableLastPK message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VDiffTableLastPK message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VDiffTableLastPK + */ + public static fromObject(object: { [k: string]: any }): tabletmanagerdata.VDiffTableLastPK; + + /** + * Creates a plain object from a VDiffTableLastPK message. Also converts values to other types if specified. + * @param message VDiffTableLastPK + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: tabletmanagerdata.VDiffTableLastPK, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VDiffTableLastPK to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + + /** + * Gets the default type url for VDiffTableLastPK + * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns The default type url + */ + public static getTypeUrl(typeUrlPrefix?: string): string; + } + /** Properties of an UpdateVReplicationWorkflowRequest. */ interface IUpdateVReplicationWorkflowRequest { @@ -40380,7 +40486,8 @@ export namespace query { HEXVAL = 4129, BITNUM = 4130, VECTOR = 2083, - RAW = 2084 + RAW = 2084, + ROW_TUPLE = 2085 } /** Properties of a Value. */ diff --git a/web/vtadmin/src/proto/vtadmin.js b/web/vtadmin/src/proto/vtadmin.js index d71d3e08fe5..ed8ce616076 100644 --- a/web/vtadmin/src/proto/vtadmin.js +++ b/web/vtadmin/src/proto/vtadmin.js @@ -78899,6 +78899,262 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => { return VDiffOptions; })(); + tabletmanagerdata.VDiffTableLastPK = (function() { + + /** + * Properties of a VDiffTableLastPK. + * @memberof tabletmanagerdata + * @interface IVDiffTableLastPK + * @property {query.IQueryResult|null} [target] VDiffTableLastPK target + * @property {query.IQueryResult|null} [source] VDiffTableLastPK source + */ + + /** + * Constructs a new VDiffTableLastPK. + * @memberof tabletmanagerdata + * @classdesc Represents a VDiffTableLastPK. + * @implements IVDiffTableLastPK + * @constructor + * @param {tabletmanagerdata.IVDiffTableLastPK=} [properties] Properties to set + */ + function VDiffTableLastPK(properties) { + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VDiffTableLastPK target. + * @member {query.IQueryResult|null|undefined} target + * @memberof tabletmanagerdata.VDiffTableLastPK + * @instance + */ + VDiffTableLastPK.prototype.target = null; + + /** + * VDiffTableLastPK source. + * @member {query.IQueryResult|null|undefined} source + * @memberof tabletmanagerdata.VDiffTableLastPK + * @instance + */ + VDiffTableLastPK.prototype.source = null; + + // OneOf field names bound to virtual getters and setters + let $oneOfFields; + + /** + * VDiffTableLastPK _source. + * @member {"source"|undefined} _source + * @memberof tabletmanagerdata.VDiffTableLastPK + * @instance + */ + Object.defineProperty(VDiffTableLastPK.prototype, "_source", { + get: $util.oneOfGetter($oneOfFields = ["source"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new VDiffTableLastPK instance using the specified properties. + * @function create + * @memberof tabletmanagerdata.VDiffTableLastPK + * @static + * @param {tabletmanagerdata.IVDiffTableLastPK=} [properties] Properties to set + * @returns {tabletmanagerdata.VDiffTableLastPK} VDiffTableLastPK instance + */ + VDiffTableLastPK.create = function create(properties) { + return new VDiffTableLastPK(properties); + }; + + /** + * Encodes the specified VDiffTableLastPK message. Does not implicitly {@link tabletmanagerdata.VDiffTableLastPK.verify|verify} messages. + * @function encode + * @memberof tabletmanagerdata.VDiffTableLastPK + * @static + * @param {tabletmanagerdata.IVDiffTableLastPK} message VDiffTableLastPK message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VDiffTableLastPK.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.target != null && Object.hasOwnProperty.call(message, "target")) + $root.query.QueryResult.encode(message.target, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.source != null && Object.hasOwnProperty.call(message, "source")) + $root.query.QueryResult.encode(message.source, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified VDiffTableLastPK message, length delimited. Does not implicitly {@link tabletmanagerdata.VDiffTableLastPK.verify|verify} messages. + * @function encodeDelimited + * @memberof tabletmanagerdata.VDiffTableLastPK + * @static + * @param {tabletmanagerdata.IVDiffTableLastPK} message VDiffTableLastPK message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VDiffTableLastPK.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VDiffTableLastPK message from the specified reader or buffer. + * @function decode + * @memberof tabletmanagerdata.VDiffTableLastPK + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {tabletmanagerdata.VDiffTableLastPK} VDiffTableLastPK + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VDiffTableLastPK.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.VDiffTableLastPK(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + message.target = $root.query.QueryResult.decode(reader, reader.uint32()); + break; + } + case 2: { + message.source = $root.query.QueryResult.decode(reader, reader.uint32()); + break; + } + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VDiffTableLastPK message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof tabletmanagerdata.VDiffTableLastPK + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {tabletmanagerdata.VDiffTableLastPK} VDiffTableLastPK + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VDiffTableLastPK.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VDiffTableLastPK message. + * @function verify + * @memberof tabletmanagerdata.VDiffTableLastPK + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VDiffTableLastPK.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + let properties = {}; + if (message.target != null && message.hasOwnProperty("target")) { + let error = $root.query.QueryResult.verify(message.target); + if (error) + return "target." + error; + } + if (message.source != null && message.hasOwnProperty("source")) { + properties._source = 1; + { + let error = $root.query.QueryResult.verify(message.source); + if (error) + return "source." + error; + } + } + return null; + }; + + /** + * Creates a VDiffTableLastPK message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof tabletmanagerdata.VDiffTableLastPK + * @static + * @param {Object.} object Plain object + * @returns {tabletmanagerdata.VDiffTableLastPK} VDiffTableLastPK + */ + VDiffTableLastPK.fromObject = function fromObject(object) { + if (object instanceof $root.tabletmanagerdata.VDiffTableLastPK) + return object; + let message = new $root.tabletmanagerdata.VDiffTableLastPK(); + if (object.target != null) { + if (typeof object.target !== "object") + throw TypeError(".tabletmanagerdata.VDiffTableLastPK.target: object expected"); + message.target = $root.query.QueryResult.fromObject(object.target); + } + if (object.source != null) { + if (typeof object.source !== "object") + throw TypeError(".tabletmanagerdata.VDiffTableLastPK.source: object expected"); + message.source = $root.query.QueryResult.fromObject(object.source); + } + return message; + }; + + /** + * Creates a plain object from a VDiffTableLastPK message. Also converts values to other types if specified. + * @function toObject + * @memberof tabletmanagerdata.VDiffTableLastPK + * @static + * @param {tabletmanagerdata.VDiffTableLastPK} message VDiffTableLastPK + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VDiffTableLastPK.toObject = function toObject(message, options) { + if (!options) + options = {}; + let object = {}; + if (options.defaults) + object.target = null; + if (message.target != null && message.hasOwnProperty("target")) + object.target = $root.query.QueryResult.toObject(message.target, options); + if (message.source != null && message.hasOwnProperty("source")) { + object.source = $root.query.QueryResult.toObject(message.source, options); + if (options.oneofs) + object._source = "source"; + } + return object; + }; + + /** + * Converts this VDiffTableLastPK to JSON. + * @function toJSON + * @memberof tabletmanagerdata.VDiffTableLastPK + * @instance + * @returns {Object.} JSON object + */ + VDiffTableLastPK.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * Gets the default type url for VDiffTableLastPK + * @function getTypeUrl + * @memberof tabletmanagerdata.VDiffTableLastPK + * @static + * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns {string} The default type url + */ + VDiffTableLastPK.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/tabletmanagerdata.VDiffTableLastPK"; + }; + + return VDiffTableLastPK; + })(); + tabletmanagerdata.UpdateVReplicationWorkflowRequest = (function() { /** @@ -95915,6 +96171,7 @@ export const query = $root.query = (() => { * @property {number} BITNUM=4130 BITNUM value * @property {number} VECTOR=2083 VECTOR value * @property {number} RAW=2084 RAW value + * @property {number} ROW_TUPLE=2085 ROW_TUPLE value */ query.Type = (function() { const valuesById = {}, values = Object.create(valuesById); @@ -95955,6 +96212,7 @@ export const query = $root.query = (() => { values[valuesById[4130] = "BITNUM"] = 4130; values[valuesById[2083] = "VECTOR"] = 2083; values[valuesById[2084] = "RAW"] = 2084; + values[valuesById[2085] = "ROW_TUPLE"] = 2085; return values; })(); @@ -96145,6 +96403,7 @@ export const query = $root.query = (() => { case 4130: case 2083: case 2084: + case 2085: break; } if (message.value != null && message.hasOwnProperty("value")) @@ -96320,6 +96579,10 @@ export const query = $root.query = (() => { case 2084: message.type = 2084; break; + case "ROW_TUPLE": + case 2085: + message.type = 2085; + break; } if (object.value != null) if (typeof object.value === "string") @@ -96594,6 +96857,7 @@ export const query = $root.query = (() => { case 4130: case 2083: case 2084: + case 2085: break; } if (message.value != null && message.hasOwnProperty("value")) @@ -96778,6 +97042,10 @@ export const query = $root.query = (() => { case 2084: message.type = 2084; break; + case "ROW_TUPLE": + case 2085: + message.type = 2085; + break; } if (object.value != null) if (typeof object.value === "string") @@ -98345,6 +98613,7 @@ export const query = $root.query = (() => { case 4130: case 2083: case 2084: + case 2085: break; } if (message.table != null && message.hasOwnProperty("table")) @@ -98546,6 +98815,10 @@ export const query = $root.query = (() => { case 2084: message.type = 2084; break; + case "ROW_TUPLE": + case 2085: + message.type = 2085; + break; } if (object.table != null) message.table = String(object.table); @@ -115806,6 +116079,7 @@ export const query = $root.query = (() => { case 4130: case 2083: case 2084: + case 2085: break; } return null; @@ -115982,6 +116256,10 @@ export const query = $root.query = (() => { case 2084: message.return_type = 2084; break; + case "ROW_TUPLE": + case 2085: + message.return_type = 2085; + break; } return message; }; @@ -119616,6 +119894,7 @@ export const vschema = $root.vschema = (() => { case 4130: case 2083: case 2084: + case 2085: break; } return null; @@ -119790,6 +120069,10 @@ export const vschema = $root.vschema = (() => { case 2084: message.tenant_id_column_type = 2084; break; + case "ROW_TUPLE": + case 2085: + message.tenant_id_column_type = 2085; + break; } return message; }; @@ -121332,6 +121615,7 @@ export const vschema = $root.vschema = (() => { case 4130: case 2083: case 2084: + case 2085: break; } if (message.invisible != null && message.hasOwnProperty("invisible")) @@ -121533,6 +121817,10 @@ export const vschema = $root.vschema = (() => { case 2084: message.type = 2084; break; + case "ROW_TUPLE": + case 2085: + message.type = 2085; + break; } if (object.invisible != null) message.invisible = Boolean(object.invisible);