diff --git a/docs/generated/settings/settings.html b/docs/generated/settings/settings.html
index 6cf1457d8f79..3a27dbcca094 100644
--- a/docs/generated/settings/settings.html
+++ b/docs/generated/settings/settings.html
@@ -90,6 +90,6 @@
trace.debug.enable | boolean | false | if set, traces for recent requests can be seen in the /debug page |
trace.lightstep.token | string |
| if set, traces go to Lightstep using this token |
trace.zipkin.collector | string |
| if set, traces go to the given Zipkin instance (example: '127.0.0.1:9411'); ignored if trace.lightstep.token is set |
-version | version | 20.2-1 | set the active cluster version in the format '.' |
+version | version | 20.2-3 | set the active cluster version in the format '.' |
diff --git a/pkg/ccl/logictestccl/testdata/logic_test/partitioning_enum b/pkg/ccl/logictestccl/testdata/logic_test/partitioning_enum
index 909f55dc27d2..6fa3eb4e9ada 100644
--- a/pkg/ccl/logictestccl/testdata/logic_test/partitioning_enum
+++ b/pkg/ccl/logictestccl/testdata/logic_test/partitioning_enum
@@ -31,4 +31,3 @@ ALTER TABLE partitioned_table PARTITION BY LIST (place)
PARTITION us VALUES IN ('us'),
PARTITION eu VALUES IN ('eu')
);
-
diff --git a/pkg/cli/testdata/doctor/testcluster b/pkg/cli/testdata/doctor/testcluster
index 6d175ad4183f..2953ab3a8ff3 100644
--- a/pkg/cli/testdata/doctor/testcluster
+++ b/pkg/cli/testdata/doctor/testcluster
@@ -1,7 +1,7 @@
doctor cluster
----
debug doctor cluster
-Examining 34 descriptors and 35 namespace entries...
+Examining 35 descriptors and 36 namespace entries...
Table 53: ParentID 50, ParentSchemaID 29, Name 'foo': not being dropped but no namespace entry found
Examining 1 running jobs...
ERROR: validation failed
diff --git a/pkg/cli/testdata/zip/partial1 b/pkg/cli/testdata/zip/partial1
index 4117b05ec861..a0ac0868cc38 100644
--- a/pkg/cli/testdata/zip/partial1
+++ b/pkg/cli/testdata/zip/partial1
@@ -58,7 +58,7 @@ requesting goroutine files for node 1... writing: debug/nodes/1/goroutines.err.t
^- resulted in ...
requesting log file ...
requesting log file ...
-requesting ranges... 35 found
+requesting ranges... 36 found
writing: debug/nodes/1/ranges/1.json
writing: debug/nodes/1/ranges/2.json
writing: debug/nodes/1/ranges/3.json
@@ -94,6 +94,7 @@ writing: debug/nodes/1/ranges/32.json
writing: debug/nodes/1/ranges/33.json
writing: debug/nodes/1/ranges/34.json
writing: debug/nodes/1/ranges/35.json
+writing: debug/nodes/1/ranges/36.json
writing: debug/nodes/2/status.json
using SQL connection URL for node 2: postgresql://...
retrieving SQL data for crdb_internal.feature_usage... writing: debug/nodes/2/crdb_internal.feature_usage.txt
@@ -190,7 +191,7 @@ requesting goroutine files for node 3... writing: debug/nodes/3/goroutines.err.t
^- resulted in ...
requesting log file ...
requesting log file ...
-requesting ranges... 35 found
+requesting ranges... 36 found
writing: debug/nodes/3/ranges/1.json
writing: debug/nodes/3/ranges/2.json
writing: debug/nodes/3/ranges/3.json
@@ -226,13 +227,14 @@ writing: debug/nodes/3/ranges/32.json
writing: debug/nodes/3/ranges/33.json
writing: debug/nodes/3/ranges/34.json
writing: debug/nodes/3/ranges/35.json
+writing: debug/nodes/3/ranges/36.json
requesting list of SQL databases... 3 found
requesting database details for defaultdb... writing: debug/schema/defaultdb@details.json
0 tables found
requesting database details for postgres... writing: debug/schema/postgres@details.json
0 tables found
requesting database details for system... writing: debug/schema/system@details.json
-29 tables found
+30 tables found
requesting table details for system.public.namespace... writing: debug/schema/system/public_namespace.json
requesting table details for system.public.descriptor... writing: debug/schema/system/public_descriptor.json
requesting table details for system.public.users... writing: debug/schema/system/public_users.json
@@ -262,5 +264,6 @@ requesting table details for system.public.statement_diagnostics_requests... wri
requesting table details for system.public.statement_diagnostics... writing: debug/schema/system/public_statement_diagnostics.json
requesting table details for system.public.scheduled_jobs... writing: debug/schema/system/public_scheduled_jobs.json
requesting table details for system.public.sqlliveness... writing: debug/schema/system/public_sqlliveness.json
+requesting table details for system.public.migrations... writing: debug/schema/system/public_migrations.json
writing: debug/pprof-summary.sh
writing: debug/hot-ranges.sh
diff --git a/pkg/cli/testdata/zip/partial1_excluded b/pkg/cli/testdata/zip/partial1_excluded
index a01527749eb2..f1bfbd813709 100644
--- a/pkg/cli/testdata/zip/partial1_excluded
+++ b/pkg/cli/testdata/zip/partial1_excluded
@@ -58,7 +58,7 @@ requesting goroutine files for node 1... writing: debug/nodes/1/goroutines.err.t
^- resulted in ...
requesting log file ...
requesting log file ...
-requesting ranges... 35 found
+requesting ranges... 36 found
writing: debug/nodes/1/ranges/1.json
writing: debug/nodes/1/ranges/2.json
writing: debug/nodes/1/ranges/3.json
@@ -94,6 +94,7 @@ writing: debug/nodes/1/ranges/32.json
writing: debug/nodes/1/ranges/33.json
writing: debug/nodes/1/ranges/34.json
writing: debug/nodes/1/ranges/35.json
+writing: debug/nodes/1/ranges/36.json
writing: debug/nodes/2.skipped
writing: debug/nodes/3/status.json
using SQL connection URL for node 3: postgresql://...
@@ -124,7 +125,7 @@ requesting goroutine files for node 3... writing: debug/nodes/3/goroutines.err.t
^- resulted in ...
requesting log file ...
requesting log file ...
-requesting ranges... 35 found
+requesting ranges... 36 found
writing: debug/nodes/3/ranges/1.json
writing: debug/nodes/3/ranges/2.json
writing: debug/nodes/3/ranges/3.json
@@ -160,13 +161,14 @@ writing: debug/nodes/3/ranges/32.json
writing: debug/nodes/3/ranges/33.json
writing: debug/nodes/3/ranges/34.json
writing: debug/nodes/3/ranges/35.json
+writing: debug/nodes/3/ranges/36.json
requesting list of SQL databases... 3 found
requesting database details for defaultdb... writing: debug/schema/defaultdb@details.json
0 tables found
requesting database details for postgres... writing: debug/schema/postgres@details.json
0 tables found
requesting database details for system... writing: debug/schema/system@details.json
-29 tables found
+30 tables found
requesting table details for system.public.namespace... writing: debug/schema/system/public_namespace.json
requesting table details for system.public.descriptor... writing: debug/schema/system/public_descriptor.json
requesting table details for system.public.users... writing: debug/schema/system/public_users.json
@@ -196,5 +198,6 @@ requesting table details for system.public.statement_diagnostics_requests... wri
requesting table details for system.public.statement_diagnostics... writing: debug/schema/system/public_statement_diagnostics.json
requesting table details for system.public.scheduled_jobs... writing: debug/schema/system/public_scheduled_jobs.json
requesting table details for system.public.sqlliveness... writing: debug/schema/system/public_sqlliveness.json
+requesting table details for system.public.migrations... writing: debug/schema/system/public_migrations.json
writing: debug/pprof-summary.sh
writing: debug/hot-ranges.sh
diff --git a/pkg/cli/testdata/zip/partial2 b/pkg/cli/testdata/zip/partial2
index 7b0990d87880..caa801aab733 100644
--- a/pkg/cli/testdata/zip/partial2
+++ b/pkg/cli/testdata/zip/partial2
@@ -58,7 +58,7 @@ requesting goroutine files for node 1... writing: debug/nodes/1/goroutines.err.t
^- resulted in ...
requesting log file ...
requesting log file ...
-requesting ranges... 35 found
+requesting ranges... 36 found
writing: debug/nodes/1/ranges/1.json
writing: debug/nodes/1/ranges/2.json
writing: debug/nodes/1/ranges/3.json
@@ -94,6 +94,7 @@ writing: debug/nodes/1/ranges/32.json
writing: debug/nodes/1/ranges/33.json
writing: debug/nodes/1/ranges/34.json
writing: debug/nodes/1/ranges/35.json
+writing: debug/nodes/1/ranges/36.json
writing: debug/nodes/3/status.json
using SQL connection URL for node 3: postgresql://...
retrieving SQL data for crdb_internal.feature_usage... writing: debug/nodes/3/crdb_internal.feature_usage.txt
@@ -123,7 +124,7 @@ requesting goroutine files for node 3... writing: debug/nodes/3/goroutines.err.t
^- resulted in ...
requesting log file ...
requesting log file ...
-requesting ranges... 35 found
+requesting ranges... 36 found
writing: debug/nodes/3/ranges/1.json
writing: debug/nodes/3/ranges/2.json
writing: debug/nodes/3/ranges/3.json
@@ -159,13 +160,14 @@ writing: debug/nodes/3/ranges/32.json
writing: debug/nodes/3/ranges/33.json
writing: debug/nodes/3/ranges/34.json
writing: debug/nodes/3/ranges/35.json
+writing: debug/nodes/3/ranges/36.json
requesting list of SQL databases... 3 found
requesting database details for defaultdb... writing: debug/schema/defaultdb@details.json
0 tables found
requesting database details for postgres... writing: debug/schema/postgres@details.json
0 tables found
requesting database details for system... writing: debug/schema/system@details.json
-29 tables found
+30 tables found
requesting table details for system.public.namespace... writing: debug/schema/system/public_namespace.json
requesting table details for system.public.descriptor... writing: debug/schema/system/public_descriptor.json
requesting table details for system.public.users... writing: debug/schema/system/public_users.json
@@ -195,5 +197,6 @@ requesting table details for system.public.statement_diagnostics_requests... wri
requesting table details for system.public.statement_diagnostics... writing: debug/schema/system/public_statement_diagnostics.json
requesting table details for system.public.scheduled_jobs... writing: debug/schema/system/public_scheduled_jobs.json
requesting table details for system.public.sqlliveness... writing: debug/schema/system/public_sqlliveness.json
+requesting table details for system.public.migrations... writing: debug/schema/system/public_migrations.json
writing: debug/pprof-summary.sh
writing: debug/hot-ranges.sh
diff --git a/pkg/cli/testdata/zip/specialnames b/pkg/cli/testdata/zip/specialnames
index 62f9a077580b..66429360713e 100644
--- a/pkg/cli/testdata/zip/specialnames
+++ b/pkg/cli/testdata/zip/specialnames
@@ -21,7 +21,7 @@ requesting table details for defaultdb.public."../system"... writing: debug/sche
requesting database details for postgres... writing: debug/schema/postgres@details.json
0 tables found
requesting database details for system... writing: debug/schema/system-1@details.json
-29 tables found
+30 tables found
requesting table details for system.public.namespace... writing: debug/schema/system-1/public_namespace.json
requesting table details for system.public.descriptor... writing: debug/schema/system-1/public_descriptor.json
requesting table details for system.public.users... writing: debug/schema/system-1/public_users.json
@@ -51,3 +51,4 @@ requesting table details for system.public.statement_diagnostics_requests... wri
requesting table details for system.public.statement_diagnostics... writing: debug/schema/system-1/public_statement_diagnostics.json
requesting table details for system.public.scheduled_jobs... writing: debug/schema/system-1/public_scheduled_jobs.json
requesting table details for system.public.sqlliveness... writing: debug/schema/system-1/public_sqlliveness.json
+requesting table details for system.public.migrations... writing: debug/schema/system-1/public_migrations.json
diff --git a/pkg/cli/testdata/zip/testzip b/pkg/cli/testdata/zip/testzip
index 8cb60a5e3f69..713a98205c13 100644
--- a/pkg/cli/testdata/zip/testzip
+++ b/pkg/cli/testdata/zip/testzip
@@ -57,7 +57,7 @@ requesting heap profile for node 1... writing: debug/nodes/1/heap.pprof
requesting heap files for node 1... ? found
requesting goroutine files for node 1... 0 found
requesting log file ...
-requesting ranges... 35 found
+requesting ranges... 36 found
writing: debug/nodes/1/ranges/1.json
writing: debug/nodes/1/ranges/2.json
writing: debug/nodes/1/ranges/3.json
@@ -93,13 +93,14 @@ writing: debug/nodes/1/ranges/32.json
writing: debug/nodes/1/ranges/33.json
writing: debug/nodes/1/ranges/34.json
writing: debug/nodes/1/ranges/35.json
+writing: debug/nodes/1/ranges/36.json
requesting list of SQL databases... 3 found
requesting database details for defaultdb... writing: debug/schema/defaultdb@details.json
0 tables found
requesting database details for postgres... writing: debug/schema/postgres@details.json
0 tables found
requesting database details for system... writing: debug/schema/system@details.json
-29 tables found
+30 tables found
requesting table details for system.public.namespace... writing: debug/schema/system/public_namespace.json
requesting table details for system.public.descriptor... writing: debug/schema/system/public_descriptor.json
requesting table details for system.public.users... writing: debug/schema/system/public_users.json
@@ -129,5 +130,6 @@ requesting table details for system.public.statement_diagnostics_requests... wri
requesting table details for system.public.statement_diagnostics... writing: debug/schema/system/public_statement_diagnostics.json
requesting table details for system.public.scheduled_jobs... writing: debug/schema/system/public_scheduled_jobs.json
requesting table details for system.public.sqlliveness... writing: debug/schema/system/public_sqlliveness.json
+requesting table details for system.public.migrations... writing: debug/schema/system/public_migrations.json
writing: debug/pprof-summary.sh
writing: debug/hot-ranges.sh
diff --git a/pkg/clusterversion/BUILD.bazel b/pkg/clusterversion/BUILD.bazel
index dc4fa76da9e0..54825ea6159d 100644
--- a/pkg/clusterversion/BUILD.bazel
+++ b/pkg/clusterversion/BUILD.bazel
@@ -18,7 +18,6 @@ go_library(
"//pkg/settings",
"//pkg/util/log",
"//pkg/util/protoutil",
- "//pkg/util/syncutil",
"//vendor/github.com/cockroachdb/errors",
"//vendor/github.com/cockroachdb/redact",
"//vendor/github.com/gogo/protobuf/proto",
diff --git a/pkg/clusterversion/clusterversion.go b/pkg/clusterversion/clusterversion.go
index b68476c2ba02..989da97a1f8c 100644
--- a/pkg/clusterversion/clusterversion.go
+++ b/pkg/clusterversion/clusterversion.go
@@ -11,7 +11,7 @@
// Package clusterversion defines the interfaces to interact with cluster/binary
// versions in order accommodate backward incompatible behaviors. It handles the
// feature gates and so must maintain a fairly lightweight set of dependencies.
-// The migration sub-package will handle advancing a cluster from one version to
+// The migration sub-package handles advancing a cluster from one version to
// a later one.
//
// Ideally, every code change in a database would be backward compatible, but
@@ -45,38 +45,22 @@ import (
"github.com/cockroachdb/cockroach/pkg/roachpb"
"github.com/cockroachdb/cockroach/pkg/settings"
"github.com/cockroachdb/cockroach/pkg/util/protoutil"
- "github.com/cockroachdb/cockroach/pkg/util/syncutil"
"github.com/cockroachdb/redact"
)
-// TODO(irfansharif): Should Initialize and SetBeforeChange be a part of the
-// Handle interface? For SetBeforeChange at least, the callback is captured in
-// the Handle implementation. Given that Initialize uses recorded state from a
-// settings.Values (which is also a part of the Handle implementation), it seems
-// appropriate. On the other hand, Handle.Initialize does not make it
-// sufficiently clear that what's being initialized is the global cluster
-// version setting, despite being done through a stand alone Handle.
-
// Initialize initializes the global cluster version. Before this method has
// been called, usage of the cluster version (through Handle) is illegal and
// leads to a fatal error.
+//
+// Initialization of the cluster version is tightly coupled with the setting of
+// the active cluster version (`Handle.SetActiveVersion` below). Look towards
+// there for additional commentary.
func Initialize(ctx context.Context, ver roachpb.Version, sv *settings.Values) error {
return version.initialize(ctx, ver, sv)
}
-// SetBeforeChange registers a callback to be called before the global cluster
-// version is updated. The new cluster version will only become "visible" after
-// the callback has returned.
-//
-// The callback can be set at most once.
-func SetBeforeChange(
- ctx context.Context, sv *settings.Values, cb func(context.Context, ClusterVersion),
-) {
- version.setBeforeChange(ctx, cb, sv)
-}
-
-// Handle is a read-only view to the active cluster version and this binary's
-// version details.
+// Handle is the interface through which callers access the active cluster
+// version and this binary's version details.
type Handle interface {
// ActiveVersion returns the cluster's current active version: the minimum
// cluster version the caller may assume is in effect.
@@ -97,10 +81,11 @@ type Handle interface {
// with a version less than `v`.
//
// If this returns true then all nodes in the cluster will eventually see
- // this version. However, this is not atomic because versions are gossiped.
- // Because of this, nodes should not be gating proper handling of remotely
- // initiated requests that their binary knows how to handle on this state.
- // The following example shows why this is important:
+ // this version. However, this is not atomic because version gates (for a
+ // given version) are pushed through to each node in parallel. Because of
+ // this, nodes should not be gating proper handling of remotely initiated
+ // requests that their binary knows how to handle on this state. The
+ // following example shows why this is important:
//
// The cluster restarts into the new version and the operator issues a SET
// VERSION, but node1 learns of the bump 10 seconds before node2, so during
@@ -122,12 +107,34 @@ type Handle interface {
// BinaryMinSupportedVersion returns the earliest binary version that can
// interoperate with this binary.
BinaryMinSupportedVersion() roachpb.Version
+
+ // SetActiveVersion lets the caller set the given cluster version as the
+ // currently active one. When a new active version is set, all subsequent
+ // calls to `ActiveVersion`, `IsActive`, etc. will reflect as much. The
+ // ClusterVersion supplied here is one retrieved from other node.
+ //
+ // This has a very specific intended usage pattern, and is probably only
+ // appropriate for usage in the EveryNode RPC and during server
+ // initialization.
+ //
+ // NB: It's important to note that this method is tightly coupled to cluster
+ // version initialization (through `Initialize` above) and the version
+ // persisted to disk. Specifically the following invariant must hold true:
+ //
+ // If a version vX is active on a given server, upon restart, the version
+ // that is immediately active must be >= vX.
+ //
+ // This is currently achieved by always durably persisting the target
+ // cluster version to the store local keys.StoreClusterVersionKey() before
+ // setting it to be active. This persisted version is also consulted during
+ // node restarts when initializing the cluster version, as seen by this
+ // node.
+ SetActiveVersion(context.Context, ClusterVersion) error
}
// handleImpl is a concrete implementation of Handle. It mostly relegates to the
// underlying cluster version setting, though provides a way for callers to
-// override the binary and minimum supported versions. It also stores the
-// callback that can be attached on cluster version change.
+// override the binary and minimum supported versions (for tests usually).
type handleImpl struct {
// sv captures the mutable state associated with usage of the otherwise
// immutable cluster version setting.
@@ -140,14 +147,6 @@ type handleImpl struct {
// and minimum supported versions.
binaryVersion roachpb.Version
binaryMinSupportedVersion roachpb.Version
-
- // beforeClusterVersionChangeMu captures the callback that can be attached
- // to the cluster version setting via SetBeforeChange.
- beforeClusterVersionChangeMu struct {
- syncutil.Mutex
- // Callback to be called when the cluster version is about to be updated.
- cb func(ctx context.Context, newVersion ClusterVersion)
- }
}
var _ Handle = (*handleImpl)(nil)
@@ -174,22 +173,48 @@ func MakeVersionHandleWithOverride(
binaryMinSupportedVersion: binaryMinSupportedVersion,
}
}
+
+// ActiveVersion implements the Handle interface.
func (v *handleImpl) ActiveVersion(ctx context.Context) ClusterVersion {
return version.activeVersion(ctx, v.sv)
}
+// ActiveVersionOrEmpty implements the Handle interface.
func (v *handleImpl) ActiveVersionOrEmpty(ctx context.Context) ClusterVersion {
return version.activeVersionOrEmpty(ctx, v.sv)
}
+// SetActiveVersion implements the Handle interface.
+func (v *handleImpl) SetActiveVersion(ctx context.Context, cv ClusterVersion) error {
+ // We only perform binary version validation here. SetActiveVersion is only
+ // called on cluster versions received from other nodes (where `SET CLUSTER
+ // SETTING version` was originally called). The stricter form of validation
+ // happens there. SetActiveVersion simply the cluster version bump that
+ // follows from it.
+ if err := version.validateBinaryVersions(cv.Version, v.sv); err != nil {
+ return err
+ }
+
+ encoded, err := protoutil.Marshal(&cv)
+ if err != nil {
+ return err
+ }
+
+ version.SetInternal(v.sv, encoded)
+ return nil
+}
+
+// IsActive implements the Handle interface.
func (v *handleImpl) IsActive(ctx context.Context, key VersionKey) bool {
return version.isActive(ctx, v.sv, key)
}
+// BinaryVersion implements the Handle interface.
func (v *handleImpl) BinaryVersion() roachpb.Version {
return v.binaryVersion
}
+// BinaryMinSupportedVersion implements the Handle interface.
func (v *handleImpl) BinaryMinSupportedVersion() roachpb.Version {
return v.binaryMinSupportedVersion
}
diff --git a/pkg/clusterversion/cockroach_versions.go b/pkg/clusterversion/cockroach_versions.go
index a04a8cbfe743..7d2176563508 100644
--- a/pkg/clusterversion/cockroach_versions.go
+++ b/pkg/clusterversion/cockroach_versions.go
@@ -76,6 +76,8 @@ const (
VersionHBAForNonTLS
Version20_2
VersionStart21_1
+ VersionNoopMigration
+ VersionMigrationTable
// Add new versions here (step one of two).
)
@@ -432,6 +434,19 @@ var versionsSingleton = keyedVersions([]keyedVersion{
Key: VersionStart21_1,
Version: roachpb.Version{Major: 20, Minor: 2, Unstable: 1},
},
+ {
+ // VersionNoopMigration is a placeholder version for the introduction of
+ // pkg/clusterversion/migration.
+ //
+ // TODO(irfansharif): Remove and replace this with something real.
+ Key: VersionNoopMigration,
+ Version: roachpb.Version{Major: 20, Minor: 2, Unstable: 2},
+ },
+ {
+ // VersionMigrationTable introduces the new system.migrations table.
+ Key: VersionMigrationTable,
+ Version: roachpb.Version{Major: 20, Minor: 2, Unstable: 3},
+ },
// Add new versions here (step two of two).
})
diff --git a/pkg/clusterversion/setting.go b/pkg/clusterversion/setting.go
index a26b8badc0f8..410c87797de5 100644
--- a/pkg/clusterversion/setting.go
+++ b/pkg/clusterversion/setting.go
@@ -26,14 +26,14 @@ const KeyVersionSetting = "version"
// version represents the cluster's "active version". This is a cluster setting,
// but a special one. It can only advance to higher and higher versions. The
// setting can be used to see if migrations are to be considered enabled or
-// disabled through the isActive() method. All external usage of the cluster
-// settings takes place through a Handle and `Initialize()`/`SetBeforeChange()`.
+// disabled through the `isActive()` method. All external usage of the cluster
+// settings takes place through a Handle and `Initialize()`.
//
// During the node startup sequence, an initial version (persisted to the
// engines) is read and passed to `version.initialize`. It is only after that
-// that `version.{activeVersion,isActive} can be called. In turn, the node
-// usually registers itself as a callback to be notified of any further updates
-// to the setting, which are also persisted.
+// that `version.{activeVersion,isActive} can be called. Further updates to the
+// setting also need to be persisted before informing the setting itself about
+// it.
//
// This dance is necessary because we cannot determine a safe default value for
// the version setting without looking at what's been persisted: The setting
@@ -45,12 +45,6 @@ const KeyVersionSetting = "version"
// running in the same cluster. Hence, only once we get word of the "safe"
// version to use can we allow moving parts that actually need to know what's
// going on.
-//
-// Additionally, whenever the version changes, we want to persist that update to
-// wherever the caller to initialize() got the initial version from
-// (typically a collection of `engine.Engine`s), which the caller will do by
-// registering itself via setBeforeChange()`, which is invoked *before* exposing
-// the new version to callers of `activeVersion()` and `isActive()`.
var version = registerClusterVersionSetting()
// clusterVersionSetting is the implementation of the 'version' setting. Like all
@@ -153,24 +147,6 @@ func (cv *clusterVersionSetting) isActive(
return cv.activeVersion(ctx, sv).IsActive(versionKey)
}
-// setBeforeChange registers a callback to be called before the cluster version
-// is updated. The new cluster version will only become "visible" after the
-// callback has returned.
-//
-// The callback can be set at most once.
-func (cv *clusterVersionSetting) setBeforeChange(
- ctx context.Context, cb func(ctx context.Context, newVersion ClusterVersion), sv *settings.Values,
-) {
- vh := sv.Opaque().(Handle)
- h := vh.(*handleImpl)
- h.beforeClusterVersionChangeMu.Lock()
- defer h.beforeClusterVersionChangeMu.Unlock()
- if h.beforeClusterVersionChangeMu.cb != nil {
- log.Fatalf(ctx, "beforeClusterVersionChange already set")
- }
- h.beforeClusterVersionChangeMu.cb = cb
-}
-
// Decode is part of the VersionSettingImpl interface.
func (cv *clusterVersionSetting) Decode(val []byte) (settings.ClusterVersionImpl, error) {
var clusterVersion ClusterVersion
@@ -242,24 +218,6 @@ func (cv *clusterVersionSetting) SettingsListDefault() string {
return binaryVersion.String()
}
-// BeforeChange is part of the VersionSettingImpl interface.
-func (cv *clusterVersionSetting) BeforeChange(
- ctx context.Context, encodedVal []byte, sv *settings.Values,
-) {
- var clusterVersion ClusterVersion
- if err := protoutil.Unmarshal(encodedVal, &clusterVersion); err != nil {
- log.Fatalf(ctx, "failed to unmarshall version: %s", err)
- }
-
- vh := sv.Opaque().(Handle)
- h := vh.(*handleImpl)
- h.beforeClusterVersionChangeMu.Lock()
- if cb := h.beforeClusterVersionChangeMu.cb; cb != nil {
- cb(ctx, clusterVersion)
- }
- h.beforeClusterVersionChangeMu.Unlock()
-}
-
func (cv *clusterVersionSetting) validateBinaryVersions(
ver roachpb.Version, sv *settings.Values,
) error {
diff --git a/pkg/clusterversion/versionkey_string.go b/pkg/clusterversion/versionkey_string.go
index e910d0f23e65..8473f4b7c560 100644
--- a/pkg/clusterversion/versionkey_string.go
+++ b/pkg/clusterversion/versionkey_string.go
@@ -52,11 +52,13 @@ func _() {
_ = x[VersionHBAForNonTLS-41]
_ = x[Version20_2-42]
_ = x[VersionStart21_1-43]
+ _ = x[VersionNoopMigration-44]
+ _ = x[VersionMigrationTable-45]
}
-const _VersionKey_name = "Version19_1VersionAtomicChangeReplicasTriggerVersionAtomicChangeReplicasVersionPartitionedBackupVersion19_2VersionStart20_1VersionContainsEstimatesCounterVersionChangeReplicasDemotionVersionSecondaryIndexColumnFamiliesVersionNamespaceTableWithSchemasVersionProtectedTimestampsVersionPrimaryKeyChangesVersionAuthLocalAndTrustRejectMethodsVersionPrimaryKeyColumnsOutOfFamilyZeroVersionNoExplicitForeignKeyIndexIDsVersionHashShardedIndexesVersionCreateRolePrivilegeVersionStatementDiagnosticsSystemTablesVersionSchemaChangeJobVersionSavepointsVersion20_1VersionStart20_2VersionGeospatialTypeVersionEnumsVersionRangefeedLeasesVersionAlterColumnTypeGeneralVersionAlterSystemJobsAddCreatedByColumnsVersionAddScheduledJobsTableVersionUserDefinedSchemasVersionNoOriginFKIndexesVersionClientRangeInfosOnBatchResponseVersionNodeMembershipStatusVersionRangeStatsRespHasDescVersionMinPasswordLengthVersionAbortSpanBytesVersionAlterSystemJobsAddSqllivenessColumnsAddNewSystemSqllivenessTableVersionMaterializedViewsVersionBox2DTypeVersionLeasedDatabaseDescriptorsVersionUpdateScheduledJobsSchemaVersionCreateLoginPrivilegeVersionHBAForNonTLSVersion20_2VersionStart21_1"
+const _VersionKey_name = "Version19_1VersionAtomicChangeReplicasTriggerVersionAtomicChangeReplicasVersionPartitionedBackupVersion19_2VersionStart20_1VersionContainsEstimatesCounterVersionChangeReplicasDemotionVersionSecondaryIndexColumnFamiliesVersionNamespaceTableWithSchemasVersionProtectedTimestampsVersionPrimaryKeyChangesVersionAuthLocalAndTrustRejectMethodsVersionPrimaryKeyColumnsOutOfFamilyZeroVersionNoExplicitForeignKeyIndexIDsVersionHashShardedIndexesVersionCreateRolePrivilegeVersionStatementDiagnosticsSystemTablesVersionSchemaChangeJobVersionSavepointsVersion20_1VersionStart20_2VersionGeospatialTypeVersionEnumsVersionRangefeedLeasesVersionAlterColumnTypeGeneralVersionAlterSystemJobsAddCreatedByColumnsVersionAddScheduledJobsTableVersionUserDefinedSchemasVersionNoOriginFKIndexesVersionClientRangeInfosOnBatchResponseVersionNodeMembershipStatusVersionRangeStatsRespHasDescVersionMinPasswordLengthVersionAbortSpanBytesVersionAlterSystemJobsAddSqllivenessColumnsAddNewSystemSqllivenessTableVersionMaterializedViewsVersionBox2DTypeVersionLeasedDatabaseDescriptorsVersionUpdateScheduledJobsSchemaVersionCreateLoginPrivilegeVersionHBAForNonTLSVersion20_2VersionStart21_1VersionNoopMigrationVersionMigrationTable"
-var _VersionKey_index = [...]uint16{0, 11, 45, 72, 96, 107, 123, 154, 183, 218, 250, 276, 300, 337, 376, 411, 436, 462, 501, 523, 540, 551, 567, 588, 600, 622, 651, 692, 720, 745, 769, 807, 834, 862, 886, 907, 978, 1002, 1018, 1050, 1082, 1109, 1128, 1139, 1155}
+var _VersionKey_index = [...]uint16{0, 11, 45, 72, 96, 107, 123, 154, 183, 218, 250, 276, 300, 337, 376, 411, 436, 462, 501, 523, 540, 551, 567, 588, 600, 622, 651, 692, 720, 745, 769, 807, 834, 862, 886, 907, 978, 1002, 1018, 1050, 1082, 1109, 1128, 1139, 1155, 1175, 1196}
func (i VersionKey) String() string {
if i < 0 || i >= VersionKey(len(_VersionKey_index)-1) {
diff --git a/pkg/jobs/helpers.go b/pkg/jobs/helpers.go
index 9c17ede4b962..96138702016a 100644
--- a/pkg/jobs/helpers.go
+++ b/pkg/jobs/helpers.go
@@ -11,6 +11,8 @@
package jobs
import (
+ "context"
+
"github.com/cockroachdb/cockroach/pkg/base"
"github.com/cockroachdb/cockroach/pkg/jobs/jobspb"
"github.com/cockroachdb/cockroach/pkg/kv/kvserver/kvserverpb"
@@ -28,7 +30,7 @@ var FakeNodeID = func() *base.NodeIDContainer {
}()
// FakeNodeLiveness allows simulating liveness failures without the full
-// storage.NodeLiveness machinery.
+// kvserver.NodeLiveness machinery.
type FakeNodeLiveness struct {
mu struct {
syncutil.Mutex
@@ -62,7 +64,7 @@ func NewFakeNodeLiveness(nodeCount int) *FakeNodeLiveness {
// ModuleTestingKnobs implements base.ModuleTestingKnobs.
func (*FakeNodeLiveness) ModuleTestingKnobs() {}
-// Self implements the implicit storage.NodeLiveness interface. It uses NodeID
+// Self implements the implicit kvserver.NodeLiveness interface. It uses NodeID
// as the node ID. On every call, a nonblocking send is performed over nl.ch to
// allow tests to execute a callback.
func (nl *FakeNodeLiveness) Self() (kvserverpb.Liveness, bool) {
@@ -75,7 +77,7 @@ func (nl *FakeNodeLiveness) Self() (kvserverpb.Liveness, bool) {
return *nl.mu.livenessMap[FakeNodeID.Get()], true
}
-// GetLivenesses implements the implicit storage.NodeLiveness interface.
+// GetLivenesses implements the implicit kvserver.NodeLiveness interface.
func (nl *FakeNodeLiveness) GetLivenesses() (out []kvserverpb.Liveness) {
select {
case nl.GetLivenessesCalledCh <- struct{}{}:
@@ -89,6 +91,11 @@ func (nl *FakeNodeLiveness) GetLivenesses() (out []kvserverpb.Liveness) {
return out
}
+// GetLivenessesFromKV implements the implicit kvserver.NodeLiveness interface.
+func (nl *FakeNodeLiveness) GetLivenessesFromKV(context.Context) ([]kvserverpb.Liveness, error) {
+ return nil, errors.New("FakeNodeLiveness.GetLivenessesFromKV is unimplemented")
+}
+
// IsLive is unimplemented.
func (nl *FakeNodeLiveness) IsLive(roachpb.NodeID) (bool, error) {
return false, errors.New("FakeNodeLiveness.IsLive is unimplemented")
diff --git a/pkg/keys/constants.go b/pkg/keys/constants.go
index 0a9401307792..f10ff38d3167 100644
--- a/pkg/keys/constants.go
+++ b/pkg/keys/constants.go
@@ -403,6 +403,7 @@ const (
ScheduledJobsTableID = 37
TenantsRangesID = 38 // pseudo
SqllivenessID = 39
+ MigrationsID = 40
// CommentType is type for system.comments
DatabaseCommentType = 0
diff --git a/pkg/kv/batch.go b/pkg/kv/batch.go
index 098d9336d619..8fa1bd4ec1d8 100644
--- a/pkg/kv/batch.go
+++ b/pkg/kv/batch.go
@@ -754,3 +754,27 @@ func (b *Batch) addSSTable(
b.appendReqs(req)
b.initResult(1, 0, notRaw, nil)
}
+
+// migrate is only exported on DB.
+//lint:ignore U1001 unused
+func (b *Batch) migrate(s, e interface{}, targetVersion roachpb.Version) {
+ begin, err := marshalKey(s)
+ if err != nil {
+ b.initResult(0, 0, notRaw, err)
+ return
+ }
+ end, err := marshalKey(e)
+ if err != nil {
+ b.initResult(0, 0, notRaw, err)
+ return
+ }
+ req := &roachpb.MigrateRequest{
+ RequestHeader: roachpb.RequestHeader{
+ Key: begin,
+ EndKey: end,
+ },
+ TargetVersion: targetVersion,
+ }
+ b.appendReqs(req)
+ b.initResult(1, 0, notRaw, nil)
+}
diff --git a/pkg/kv/db.go b/pkg/kv/db.go
index 47109435356f..e599447a718f 100644
--- a/pkg/kv/db.go
+++ b/pkg/kv/db.go
@@ -639,6 +639,18 @@ func (db *DB) AddSSTable(
return getOneErr(db.Run(ctx, b), b)
}
+// Migrate proactively forces ranges overlapping with the provided keyspace to
+// transition out of any legacy modes of operation (as defined by the target
+// version).
+//lint:ignore U1001 unused
+func (db *DB) Migrate(
+ ctx context.Context, begin, end interface{}, targetVersion roachpb.Version,
+) error {
+ b := &Batch{}
+ b.migrate(begin, end, targetVersion)
+ return getOneErr(db.Run(ctx, b), b)
+}
+
// sendAndFill is a helper which sends the given batch and fills its results,
// returning the appropriate error which is either from the first failing call,
// or an "internal" error.
diff --git a/pkg/kv/kvserver/batcheval/BUILD.bazel b/pkg/kv/kvserver/batcheval/BUILD.bazel
index 6ac9776696ee..86399fd812f3 100644
--- a/pkg/kv/kvserver/batcheval/BUILD.bazel
+++ b/pkg/kv/kvserver/batcheval/BUILD.bazel
@@ -20,6 +20,7 @@ go_library(
"cmd_lease_request.go",
"cmd_lease_transfer.go",
"cmd_merge.go",
+ "cmd_migrate.go",
"cmd_push_txn.go",
"cmd_put.go",
"cmd_query_intent.go",
diff --git a/pkg/kv/kvserver/batcheval/cmd_migrate.go b/pkg/kv/kvserver/batcheval/cmd_migrate.go
new file mode 100644
index 000000000000..b1786dc8dc61
--- /dev/null
+++ b/pkg/kv/kvserver/batcheval/cmd_migrate.go
@@ -0,0 +1,46 @@
+// Copyright 2020 The Cockroach Authors.
+//
+// Use of this software is governed by the Business Source License
+// included in the file licenses/BSL.txt.
+//
+// As of the Change Date specified in that file, in accordance with
+// the Business Source License, use of this software will be governed
+// by the Apache License, Version 2.0, included in the file
+// licenses/APL.txt.
+
+package batcheval
+
+import (
+ "context"
+
+ "github.com/cockroachdb/cockroach/pkg/kv/kvserver/batcheval/result"
+ "github.com/cockroachdb/cockroach/pkg/kv/kvserver/spanset"
+ "github.com/cockroachdb/cockroach/pkg/roachpb"
+ "github.com/cockroachdb/cockroach/pkg/storage"
+ "github.com/cockroachdb/cockroach/pkg/util/log"
+)
+
+func init() {
+ RegisterReadWriteCommand(roachpb.Migrate, declareKeysMigrate, Migrate)
+}
+
+func declareKeysMigrate(
+ _ *roachpb.RangeDescriptor, _ roachpb.Header, _ roachpb.Request, _, _ *spanset.SpanSet,
+) {
+}
+
+// Migrate ensures that the range proactively carries out any outstanding
+// below-Raft migrations.
+//
+// TODO(irfansharif): Do something real here. It's not currently wired up to
+// anything. We'll eventually want a `map[roachpb.Version]Fn` mapping here that
+// lets us define specific migrations for specific target versions.
+func Migrate(
+ ctx context.Context, _ storage.ReadWriter, cArgs CommandArgs, _ roachpb.Response,
+) (result.Result, error) {
+ args := cArgs.Args.(*roachpb.MigrateRequest)
+ h := cArgs.Header
+
+ log.Infof(ctx, "evaluating Migrate command for r%d@%s [%s, %s)", h.RangeID, args.TargetVersion, args.Key, args.EndKey)
+ return result.Result{}, nil
+}
diff --git a/pkg/kv/kvserver/node_liveness.go b/pkg/kv/kvserver/node_liveness.go
index a75d872b9f5f..60d353e91b97 100644
--- a/pkg/kv/kvserver/node_liveness.go
+++ b/pkg/kv/kvserver/node_liveness.go
@@ -128,6 +128,8 @@ type LivenessMetrics struct {
HeartbeatLatency *metric.Histogram
}
+// TODO(irfansharif): We should/could cut out a pkg/nodeliveness here.
+
// IsLiveCallback is invoked when a node's IsLive state changes to true.
// Callbacks can be registered via NodeLiveness.RegisterCallback().
type IsLiveCallback func(kvserverpb.Liveness)
@@ -1002,6 +1004,39 @@ func (nl *NodeLiveness) GetLivenesses() []kvserverpb.Liveness {
return livenesses
}
+// GetLivenessesFromKV returns a slice containing the liveness status of every
+// node on the cluster. It's the improved version of GetLivenesses above, which
+// only consults the (possibly stale) in-memory cache.
+func (nl *NodeLiveness) GetLivenessesFromKV(ctx context.Context) ([]kvserverpb.Liveness, error) {
+ kvs, err := nl.db.Scan(ctx, keys.NodeLivenessPrefix, keys.NodeLivenessKeyMax, 0)
+ if err != nil {
+ return nil, errors.Wrap(err, "unable to get liveness")
+ }
+
+ var results []kvserverpb.Liveness
+ for _, kv := range kvs {
+ if kv.Value == nil {
+ return nil, errors.AssertionFailedf("missing liveness record")
+ }
+ var liveness kvserverpb.Liveness
+ if err := kv.Value.GetProto(&liveness); err != nil {
+ return nil, errors.Wrap(err, "invalid liveness record")
+ }
+
+ livenessRec := LivenessRecord{
+ Liveness: liveness,
+ raw: kv.Value.TagAndDataBytes(),
+ }
+
+ // Update our cache with the liveness record we just found.
+ nl.maybeUpdate(ctx, livenessRec)
+
+ results = append(results, liveness)
+ }
+
+ return results, nil
+}
+
// GetLiveness returns the liveness record for the specified nodeID. If the
// liveness record is not found (due to gossip propagation delays or due to the
// node not existing), we surface that to the caller. The record returned also
diff --git a/pkg/kv/kvserver/replica_write.go b/pkg/kv/kvserver/replica_write.go
index 32f91a3e4e85..21fe47a423b2 100644
--- a/pkg/kv/kvserver/replica_write.go
+++ b/pkg/kv/kvserver/replica_write.go
@@ -214,6 +214,30 @@ func (r *Replica) executeWriteBatch(
log.Warningf(ctx, "%v", err)
}
}
+ if ba.Requests[0].GetMigrate() != nil && propResult.Err == nil {
+ // Migrate is special since it wants commands to be durably
+ // applied on all peers, which we achieve via waitForApplication.
+ //
+ // TODO(tbg,irfansharif): Could a snapshot below maxLeaseIndex
+ // be in-flight to a follower that's not in `desc` (but will be
+ // in it soon)? This seems to be in the realm of what's possible
+ // in theory: we'll only ever proactively send a snap when the
+ // peer is a learner, but an old snapshot that precedes
+ // maxLeaseIndex may be in flight for no good reason and once
+ // that peer is added to desc (after this code has done its
+ // work) and receives said zombie snap, it'll be initialized
+ // without having caught up past the migration. What's the
+ // safeguard needed here? I'm not sure. If we force a log
+ // truncation right after this proposal, would that force all
+ // to-be replicas to first catch up? Does that provide the
+ // invariants we want?
+ desc := r.Desc()
+ // NB: waitForApplication already has a timeout.
+ applicationErr := waitForApplication(
+ ctx, r.store.cfg.NodeDialer, desc.RangeID, desc.Replicas().All(),
+ uint64(maxLeaseIndex))
+ propResult.Err = roachpb.NewError(applicationErr)
+ }
return propResult.Reply, nil, propResult.Err
case <-slowTimer.C:
slowTimer.Read = true
diff --git a/pkg/migration/BUILD.bazel b/pkg/migration/BUILD.bazel
new file mode 100644
index 000000000000..aa0af9c853e4
--- /dev/null
+++ b/pkg/migration/BUILD.bazel
@@ -0,0 +1,25 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+
+go_library(
+ name = "migration",
+ srcs = [
+ "manager.go",
+ "migrations.go",
+ ],
+ importpath = "github.com/cockroachdb/cockroach/pkg/migration",
+ visibility = ["//visibility:public"],
+ deps = [
+ "//pkg/keys",
+ "//pkg/kv",
+ "//pkg/kv/kvserver/kvserverpb",
+ "//pkg/roachpb",
+ "//pkg/rpc",
+ "//pkg/rpc/nodedialer",
+ "//pkg/server/serverpb",
+ "//pkg/sql",
+ "//pkg/util/log",
+ "//vendor/github.com/cockroachdb/errors",
+ "//vendor/github.com/cockroachdb/logtags",
+ "//vendor/github.com/cockroachdb/redact",
+ ],
+)
diff --git a/pkg/migration/manager.go b/pkg/migration/manager.go
new file mode 100644
index 000000000000..a34478910bab
--- /dev/null
+++ b/pkg/migration/manager.go
@@ -0,0 +1,283 @@
+// Copyright 2020 The Cockroach Authors.
+//
+// Use of this software is governed by the Business Source License
+// included in the file licenses/BSL.txt.
+//
+// As of the Change Date specified in that file, in accordance with
+// the Business Source License, use of this software will be governed
+// by the Apache License, Version 2.0, included in the file
+// licenses/APL.txt.
+
+// Package migration captures the facilities needed to define and execute
+// migrations for a crdb cluster. These migrations can be arbitrarily long
+// running, are free to send out arbitrary requests cluster wide, change
+// internal DB state, and much more. They're typically reserved for crdb
+// internal operations and state. Each migration is idempotent in nature, is
+// associated with a specific cluster version, and executed when the cluster
+// version is made activate on every node in the cluster.
+//
+// Examples of migrations that apply would be migrations to move all raft state
+// from one storage engine to another, or purging all usage of the replicated
+// truncated state in KV. A "sister" package of interest is pkg/sqlmigrations.
+package migration
+
+import (
+ "context"
+
+ "github.com/cockroachdb/cockroach/pkg/keys"
+ "github.com/cockroachdb/cockroach/pkg/kv"
+ "github.com/cockroachdb/cockroach/pkg/kv/kvserver/kvserverpb"
+ "github.com/cockroachdb/cockroach/pkg/roachpb"
+ "github.com/cockroachdb/cockroach/pkg/rpc"
+ "github.com/cockroachdb/cockroach/pkg/rpc/nodedialer"
+ "github.com/cockroachdb/cockroach/pkg/server/serverpb"
+ "github.com/cockroachdb/cockroach/pkg/sql"
+ "github.com/cockroachdb/cockroach/pkg/util/log"
+ "github.com/cockroachdb/errors"
+ "github.com/cockroachdb/logtags"
+ "github.com/cockroachdb/redact"
+)
+
+// Migration defines a program to be executed once every node in the cluster is
+// (a) running a specific binary version, and (b) has completed all prior
+// migrations.
+//
+// Each migration is associated with a specific (unstable) cluster version and
+// is idempotent in nature. When setting the cluster version (via `SET CLUSTER
+// SETTING version`), a manager process determines the set of migrations needed
+// to bridge the gap between the current active cluster version, and the target
+// one.
+//
+// To introduce a migration, introduce a version key in pkg/clusterversion, and
+// introduce a corresponding unstable cluster version for it. See
+// `pkg/clusterversion/cockroach_versions.go` for details. Following that,
+// define a Migration in this package and register it. Be sure to key it in with
+// the new cluster version we just added. During cluster upgrades, once the
+// operator is able to set a cluster version setting that's past the version you
+// just introduced (typically the major release version the migration code was
+// added during), the manager will execute the defined migration before letting
+// the upgrade finalize.
+//
+// TODO(irfansharif): Should we instead make this a struct that embeds the right
+// function, and directly associates it with the right cluster version? Or just
+// leave it as is, with the registry being the unit responsible for the mapping?
+// We do typically want each migration to be attached with a specific version,
+// so perhaps we should make that more explicit.
+type Migration func(context.Context, *Helper) error
+
+// Manager is the instance responsible for executing migrations across the
+// cluster.
+type Manager struct {
+ dialer *nodedialer.Dialer
+ executor *sql.InternalExecutor
+ nl nodeLiveness
+ db *kv.DB
+}
+
+// Helper captures all the primitives required to fully specify a migration.
+type Helper struct {
+ *Manager
+}
+
+// nodeLiveness is the subset of the interface satisfied by CRDB's node liveness
+// component that the migration manager relies upon.
+type nodeLiveness interface {
+ GetLivenessesFromKV(context.Context) ([]kvserverpb.Liveness, error)
+ IsLive(roachpb.NodeID) (bool, error)
+}
+
+// NewManager constructs a new Manager.
+//
+// TODO(irfansharif): We'll need to eventually plumb in a few things here. We'll
+// need a handle on a lease manager.
+func NewManager(
+ dialer *nodedialer.Dialer, nl nodeLiveness, executor *sql.InternalExecutor, db *kv.DB,
+) *Manager {
+ return &Manager{
+ dialer: dialer,
+ executor: executor,
+ nl: nl,
+ db: db,
+ }
+}
+
+// IterateRangeDescriptors is a primitive for constructing migrations. It
+// provides a handle on every range in descriptor in the system, which callers
+// can then use to send out arbitrary KV requests to in order to run arbitrary
+// KV-level migrations. These requests will typically just be the Migrate
+// request, with code added within pkg/kv to do the specific things intended for
+// the specified version.
+//
+// TODO(irfansharif): We want to eventually be able to send out a Migrate
+// request spanning the entire keyspace. We'll need to make sure all stores have
+// synced once to persist any raft command applications.
+//lint:ignore U1001 unused
+func (h *Helper) IterateRangeDescriptors(
+ ctx context.Context, blockSize int, f func(...roachpb.RangeDescriptor) error,
+) error {
+ descriptors := make([]roachpb.RangeDescriptor, blockSize)
+ if err := h.db.Txn(ctx, func(ctx context.Context, txn *kv.Txn) error {
+ // Iterate through the meta ranges to pull out all the range descriptors.
+ return txn.Iterate(ctx, keys.MetaMin, keys.MetaMax, blockSize,
+ func(rows []kv.KeyValue) error {
+ for i, row := range rows {
+ if err := row.ValueProto(&descriptors[i]); err != nil {
+ return errors.Wrapf(err, "%s: unable to unmarshal range descriptor", row.Key)
+ }
+ }
+
+ // Invoke f with the current chunk (of size ~blockSize) of range
+ // descriptors.
+ if err := f(descriptors...); err != nil {
+ return err
+ }
+
+ return nil
+ })
+ }); err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// RequiredNodes returns the node IDs for all nodes that are currently part of
+// the cluster (i.e. they haven't been decommissioned away). Migrations have the
+// pre-requisite that all required nodes are up and running so that we're able
+// to execute all relevant node-level operations on them. If any of the nodes
+// are found to be unavailable, an error is returned.
+func (h *Helper) RequiredNodes(ctx context.Context) ([]roachpb.NodeID, error) {
+ var nodeIDs []roachpb.NodeID
+ livenesses, err := h.nl.GetLivenessesFromKV(ctx)
+ if err != nil {
+ return nil, err
+ }
+ for _, liveness := range livenesses {
+ if liveness.Membership.Decommissioned() {
+ continue
+ }
+
+ live, err := h.nl.IsLive(liveness.NodeID)
+ if err != nil {
+ return nil, err
+ }
+ if !live {
+ return nil, errors.Newf("n%d required, but unavailable", liveness.NodeID)
+ }
+ nodeIDs = append(nodeIDs, liveness.NodeID)
+ }
+
+ return nodeIDs, nil
+}
+
+// Log lets migrations insert arbitrary log events. These events are recorded in
+// a system table, and are available for introspection into the progress of the
+// specific ongoing migration.
+//
+// TODO(irfansharif): Implement this.
+//lint:ignore U1001 unused
+func (h *Helper) Log(event string) error {
+ return nil
+}
+
+// EveryNode lets migrations execute the given EveryNodeOp across every node in
+// the cluster.
+func (h *Helper) EveryNode(ctx context.Context, op serverpb.EveryNodeOp) error {
+ nodeIDs, err := h.RequiredNodes(ctx)
+ if err != nil {
+ return err
+ }
+
+ // TODO(irfansharif): We can/should send out these RPCs in parallel.
+ log.Infof(ctx, "executing op=%s on nodes=%s", redact.Safe(op.Op()), redact.Safe(nodeIDs))
+ for _, nodeID := range nodeIDs {
+ conn, err := h.dialer.Dial(ctx, nodeID, rpc.DefaultClass)
+ if err != nil {
+ return err
+ }
+
+ req := &serverpb.EveryNodeRequest{}
+ req.Request.SetInner(op)
+ client := serverpb.NewAdminClient(conn)
+ if _, err := client.EveryNode(ctx, req); err != nil {
+ return err
+ }
+ }
+
+ // TODO(irfansharif): We'll need to check RequiredNodes again to make sure
+ // that no new nodes were added to the cluster in the interim, and loop back
+ // around if so.
+ return nil
+}
+
+// MigrateTo runs the set of migrations required to upgrade the cluster version
+// to the provided target version.
+func (m *Manager) MigrateTo(ctx context.Context, targetV roachpb.Version) error {
+ // TODO(irfansharif): Should we inject every ctx here with specific labels
+ // for each migration, so they log distinctly? Do we need an AmbientContext?
+ ctx = logtags.AddTag(ctx, "migration-mgr", redact.Safe(targetV))
+
+ // TODO(irfansharif): We'll need to acquire a lease here and refresh it
+ // throughout during the migration to ensure mutual exclusion.
+
+ // TODO(irfansharif): We'll want to either write to a KV key to record the
+ // version up until which we've already migrated to, or consult the system
+ // table mentioned above. Perhaps it makes sense to consult any given
+ // `StoreClusterVersionKey`, since the manager here will want to push out
+ // cluster version bumps for vX before attempting to migrate into vX+1.
+
+ // TODO(irfansharif): After determining the last completed migration, if
+ // any, we'll be want to assemble the list of remaining migrations to step
+ // through to get to targetV. For now we've hard-coded this list.
+ var vs []roachpb.Version
+
+ // Hacks to introduce fake migrations on the fly.
+ //
+ // TODO(irfansharif): Remove these, and remove purge VersionNoopMigration
+ // from history.
+ Registry[targetV] = GenerateFakeMigrationFor(targetV)
+ vs = append(vs, targetV)
+
+ for _, version := range vs {
+ h := &Helper{Manager: m}
+ // Push out the version gate to every node in the cluster. Each node
+ // will persist the version, bump the local version gates, and then
+ // return. The migration associated with the specific version can assume
+ // that every node in the cluster has the corresponding version
+ // activated.
+ {
+ // First sanity check that we'll actually be able to perform the
+ // cluster version bump, cluster-wide.
+ //
+ // TODO(irfansharif): Do we want to worry about the case where we
+ // validate N nodes running the right binary versions, and the user
+ // adding another node that would no longer be able to? As written,
+ // we'll be bumping the version gates down below anyway.
+ op := &serverpb.ValidateTargetClusterVersionRequest{Version: &version}
+ if err := h.EveryNode(ctx, op); err != nil {
+ return err
+ }
+ }
+ {
+ // TODO(irfansharif): Should we rename this request type to
+ // something like "BumpClusterVersion" instead?
+ op := &serverpb.AckClusterVersionRequest{Version: &version}
+ if err := h.EveryNode(ctx, op); err != nil {
+ return err
+ }
+ }
+
+ // TODO(irfansharif): We'll want a testing override here to be able to
+ // stub out migrations as needed.
+
+ migration, ok := Registry[version]
+ if !ok {
+ return errors.Newf("migration for %s not found", version)
+ }
+ if err := migration(ctx, h); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
diff --git a/pkg/migration/migrations.go b/pkg/migration/migrations.go
new file mode 100644
index 000000000000..17c09c3aaa5f
--- /dev/null
+++ b/pkg/migration/migrations.go
@@ -0,0 +1,38 @@
+// Copyright 2020 The Cockroach Authors.
+//
+// Use of this software is governed by the Business Source License
+// included in the file licenses/BSL.txt.
+//
+// As of the Change Date specified in that file, in accordance with
+// the Business Source License, use of this software will be governed
+// by the Apache License, Version 2.0, included in the file
+// licenses/APL.txt.
+
+package migration
+
+import (
+ "context"
+
+ "github.com/cockroachdb/cockroach/pkg/roachpb"
+ "github.com/cockroachdb/cockroach/pkg/util/log"
+)
+
+// Registry defines the global mapping between a version, and the associated
+// migration. The migration is only executed after a cluster-wide bump of the
+// version gate.
+var Registry = make(map[roachpb.Version]Migration)
+
+func init() {
+ // TODO(irfansharif): We'll want to register specific migrations here.
+ //
+ // Registry[cv.VersionByKey(cv.VersionNoopMigration)] = NoopMigration
+}
+
+// GenerateFakeMigrationFor generates, well, fake migrations. All they do is log
+// the specific migration being executed.
+func GenerateFakeMigrationFor(v roachpb.Version) Migration {
+ return func(ctx context.Context, h *Helper) error {
+ log.Infof(ctx, "ran migration for %s", v)
+ return nil
+ }
+}
diff --git a/pkg/roachpb/api.go b/pkg/roachpb/api.go
index f65103126ccd..ca3f2765263a 100644
--- a/pkg/roachpb/api.go
+++ b/pkg/roachpb/api.go
@@ -727,6 +727,9 @@ func (*ImportRequest) Method() Method { return Import }
// Method implements the Request interface.
func (*AdminScatterRequest) Method() Method { return AdminScatter }
+// Method implements the Request interface.
+func (*MigrateRequest) Method() Method { return Migrate }
+
// Method implements the Request interface.
func (*AddSSTableRequest) Method() Method { return AddSSTable }
@@ -970,6 +973,12 @@ func (r *AdminScatterRequest) ShallowCopy() Request {
return &shallowCopy
}
+// ShallowCopy implements the Request interface.
+func (r *MigrateRequest) ShallowCopy() Request {
+ shallowCopy := *r
+ return &shallowCopy
+}
+
// ShallowCopy implements the Request interface.
func (r *AddSSTableRequest) ShallowCopy() Request {
shallowCopy := *r
@@ -1301,6 +1310,7 @@ func (*ExportRequest) flags() int { return isRead | isRan
func (*ImportRequest) flags() int { return isAdmin | isAlone }
func (*AdminScatterRequest) flags() int { return isAdmin | isRange | isAlone }
func (*AdminVerifyProtectedTimestampRequest) flags() int { return isAdmin | isRange | isAlone }
+func (*MigrateRequest) flags() int { return isWrite | isRange | isAlone }
func (*AddSSTableRequest) flags() int {
return isWrite | isRange | isAlone | isUnsplittable | canBackpressure
}
diff --git a/pkg/roachpb/api.pb.go b/pkg/roachpb/api.pb.go
index 4ed07e35c6e3..b385263af0f9 100644
--- a/pkg/roachpb/api.pb.go
+++ b/pkg/roachpb/api.pb.go
@@ -72,7 +72,7 @@ func (x ReadConsistencyType) String() string {
return proto.EnumName(ReadConsistencyType_name, int32(x))
}
func (ReadConsistencyType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{0}
+ return fileDescriptor_api_459e7ba87f98a834, []int{0}
}
// ScanFormat is an enumeration of the available response formats for MVCCScan
@@ -100,7 +100,7 @@ func (x ScanFormat) String() string {
return proto.EnumName(ScanFormat_name, int32(x))
}
func (ScanFormat) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{1}
+ return fileDescriptor_api_459e7ba87f98a834, []int{1}
}
type ChecksumMode int32
@@ -147,7 +147,7 @@ func (x ChecksumMode) String() string {
return proto.EnumName(ChecksumMode_name, int32(x))
}
func (ChecksumMode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{2}
+ return fileDescriptor_api_459e7ba87f98a834, []int{2}
}
// PushTxnType determines what action to take when pushing a transaction.
@@ -178,7 +178,7 @@ func (x PushTxnType) String() string {
return proto.EnumName(PushTxnType_name, int32(x))
}
func (PushTxnType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{3}
+ return fileDescriptor_api_459e7ba87f98a834, []int{3}
}
type ExternalStorageProvider int32
@@ -219,7 +219,7 @@ func (x ExternalStorageProvider) String() string {
return proto.EnumName(ExternalStorageProvider_name, int32(x))
}
func (ExternalStorageProvider) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{4}
+ return fileDescriptor_api_459e7ba87f98a834, []int{4}
}
type MVCCFilter int32
@@ -242,7 +242,7 @@ func (x MVCCFilter) String() string {
return proto.EnumName(MVCCFilter_name, int32(x))
}
func (MVCCFilter) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{5}
+ return fileDescriptor_api_459e7ba87f98a834, []int{5}
}
type ResponseHeader_ResumeReason int32
@@ -268,7 +268,7 @@ func (x ResponseHeader_ResumeReason) String() string {
return proto.EnumName(ResponseHeader_ResumeReason_name, int32(x))
}
func (ResponseHeader_ResumeReason) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{1, 0}
+ return fileDescriptor_api_459e7ba87f98a834, []int{1, 0}
}
type CheckConsistencyResponse_Status int32
@@ -310,7 +310,7 @@ func (x CheckConsistencyResponse_Status) String() string {
return proto.EnumName(CheckConsistencyResponse_Status_name, int32(x))
}
func (CheckConsistencyResponse_Status) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{25, 0}
+ return fileDescriptor_api_459e7ba87f98a834, []int{25, 0}
}
// RequestHeader is supplied with every storage node request.
@@ -331,7 +331,7 @@ func (m *RequestHeader) Reset() { *m = RequestHeader{} }
func (m *RequestHeader) String() string { return proto.CompactTextString(m) }
func (*RequestHeader) ProtoMessage() {}
func (*RequestHeader) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{0}
+ return fileDescriptor_api_459e7ba87f98a834, []int{0}
}
func (m *RequestHeader) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -402,7 +402,7 @@ func (m *ResponseHeader) Reset() { *m = ResponseHeader{} }
func (m *ResponseHeader) String() string { return proto.CompactTextString(m) }
func (*ResponseHeader) ProtoMessage() {}
func (*ResponseHeader) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{1}
+ return fileDescriptor_api_459e7ba87f98a834, []int{1}
}
func (m *ResponseHeader) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -436,7 +436,7 @@ func (m *GetRequest) Reset() { *m = GetRequest{} }
func (m *GetRequest) String() string { return proto.CompactTextString(m) }
func (*GetRequest) ProtoMessage() {}
func (*GetRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{2}
+ return fileDescriptor_api_459e7ba87f98a834, []int{2}
}
func (m *GetRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -479,7 +479,7 @@ func (m *GetResponse) Reset() { *m = GetResponse{} }
func (m *GetResponse) String() string { return proto.CompactTextString(m) }
func (*GetResponse) ProtoMessage() {}
func (*GetResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{3}
+ return fileDescriptor_api_459e7ba87f98a834, []int{3}
}
func (m *GetResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -522,7 +522,7 @@ func (m *PutRequest) Reset() { *m = PutRequest{} }
func (m *PutRequest) String() string { return proto.CompactTextString(m) }
func (*PutRequest) ProtoMessage() {}
func (*PutRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{4}
+ return fileDescriptor_api_459e7ba87f98a834, []int{4}
}
func (m *PutRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -556,7 +556,7 @@ func (m *PutResponse) Reset() { *m = PutResponse{} }
func (m *PutResponse) String() string { return proto.CompactTextString(m) }
func (*PutResponse) ProtoMessage() {}
func (*PutResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{5}
+ return fileDescriptor_api_459e7ba87f98a834, []int{5}
}
func (m *PutResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -638,7 +638,7 @@ func (m *ConditionalPutRequest) Reset() { *m = ConditionalPutRequest{} }
func (m *ConditionalPutRequest) String() string { return proto.CompactTextString(m) }
func (*ConditionalPutRequest) ProtoMessage() {}
func (*ConditionalPutRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{6}
+ return fileDescriptor_api_459e7ba87f98a834, []int{6}
}
func (m *ConditionalPutRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -673,7 +673,7 @@ func (m *ConditionalPutResponse) Reset() { *m = ConditionalPutResponse{}
func (m *ConditionalPutResponse) String() string { return proto.CompactTextString(m) }
func (*ConditionalPutResponse) ProtoMessage() {}
func (*ConditionalPutResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{7}
+ return fileDescriptor_api_459e7ba87f98a834, []int{7}
}
func (m *ConditionalPutResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -719,7 +719,7 @@ func (m *InitPutRequest) Reset() { *m = InitPutRequest{} }
func (m *InitPutRequest) String() string { return proto.CompactTextString(m) }
func (*InitPutRequest) ProtoMessage() {}
func (*InitPutRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{8}
+ return fileDescriptor_api_459e7ba87f98a834, []int{8}
}
func (m *InitPutRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -753,7 +753,7 @@ func (m *InitPutResponse) Reset() { *m = InitPutResponse{} }
func (m *InitPutResponse) String() string { return proto.CompactTextString(m) }
func (*InitPutResponse) ProtoMessage() {}
func (*InitPutResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{9}
+ return fileDescriptor_api_459e7ba87f98a834, []int{9}
}
func (m *InitPutResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -793,7 +793,7 @@ func (m *IncrementRequest) Reset() { *m = IncrementRequest{} }
func (m *IncrementRequest) String() string { return proto.CompactTextString(m) }
func (*IncrementRequest) ProtoMessage() {}
func (*IncrementRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{10}
+ return fileDescriptor_api_459e7ba87f98a834, []int{10}
}
func (m *IncrementRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -830,7 +830,7 @@ func (m *IncrementResponse) Reset() { *m = IncrementResponse{} }
func (m *IncrementResponse) String() string { return proto.CompactTextString(m) }
func (*IncrementResponse) ProtoMessage() {}
func (*IncrementResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{11}
+ return fileDescriptor_api_459e7ba87f98a834, []int{11}
}
func (m *IncrementResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -864,7 +864,7 @@ func (m *DeleteRequest) Reset() { *m = DeleteRequest{} }
func (m *DeleteRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteRequest) ProtoMessage() {}
func (*DeleteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{12}
+ return fileDescriptor_api_459e7ba87f98a834, []int{12}
}
func (m *DeleteRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -898,7 +898,7 @@ func (m *DeleteResponse) Reset() { *m = DeleteResponse{} }
func (m *DeleteResponse) String() string { return proto.CompactTextString(m) }
func (*DeleteResponse) ProtoMessage() {}
func (*DeleteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{13}
+ return fileDescriptor_api_459e7ba87f98a834, []int{13}
}
func (m *DeleteResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -950,7 +950,7 @@ func (m *DeleteRangeRequest) Reset() { *m = DeleteRangeRequest{} }
func (m *DeleteRangeRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteRangeRequest) ProtoMessage() {}
func (*DeleteRangeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{14}
+ return fileDescriptor_api_459e7ba87f98a834, []int{14}
}
func (m *DeleteRangeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -987,7 +987,7 @@ func (m *DeleteRangeResponse) Reset() { *m = DeleteRangeResponse{} }
func (m *DeleteRangeResponse) String() string { return proto.CompactTextString(m) }
func (*DeleteRangeResponse) ProtoMessage() {}
func (*DeleteRangeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{15}
+ return fileDescriptor_api_459e7ba87f98a834, []int{15}
}
func (m *DeleteRangeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1042,7 +1042,7 @@ func (m *ClearRangeRequest) Reset() { *m = ClearRangeRequest{} }
func (m *ClearRangeRequest) String() string { return proto.CompactTextString(m) }
func (*ClearRangeRequest) ProtoMessage() {}
func (*ClearRangeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{16}
+ return fileDescriptor_api_459e7ba87f98a834, []int{16}
}
func (m *ClearRangeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1076,7 +1076,7 @@ func (m *ClearRangeResponse) Reset() { *m = ClearRangeResponse{} }
func (m *ClearRangeResponse) String() string { return proto.CompactTextString(m) }
func (*ClearRangeResponse) ProtoMessage() {}
func (*ClearRangeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{17}
+ return fileDescriptor_api_459e7ba87f98a834, []int{17}
}
func (m *ClearRangeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1117,7 +1117,7 @@ func (m *RevertRangeRequest) Reset() { *m = RevertRangeRequest{} }
func (m *RevertRangeRequest) String() string { return proto.CompactTextString(m) }
func (*RevertRangeRequest) ProtoMessage() {}
func (*RevertRangeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{18}
+ return fileDescriptor_api_459e7ba87f98a834, []int{18}
}
func (m *RevertRangeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1151,7 +1151,7 @@ func (m *RevertRangeResponse) Reset() { *m = RevertRangeResponse{} }
func (m *RevertRangeResponse) String() string { return proto.CompactTextString(m) }
func (*RevertRangeResponse) ProtoMessage() {}
func (*RevertRangeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{19}
+ return fileDescriptor_api_459e7ba87f98a834, []int{19}
}
func (m *RevertRangeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1202,7 +1202,7 @@ func (m *ScanRequest) Reset() { *m = ScanRequest{} }
func (m *ScanRequest) String() string { return proto.CompactTextString(m) }
func (*ScanRequest) ProtoMessage() {}
func (*ScanRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{20}
+ return fileDescriptor_api_459e7ba87f98a834, []int{20}
}
func (m *ScanRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1254,7 +1254,7 @@ func (m *ScanResponse) Reset() { *m = ScanResponse{} }
func (m *ScanResponse) String() string { return proto.CompactTextString(m) }
func (*ScanResponse) ProtoMessage() {}
func (*ScanResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{21}
+ return fileDescriptor_api_459e7ba87f98a834, []int{21}
}
func (m *ScanResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1305,7 +1305,7 @@ func (m *ReverseScanRequest) Reset() { *m = ReverseScanRequest{} }
func (m *ReverseScanRequest) String() string { return proto.CompactTextString(m) }
func (*ReverseScanRequest) ProtoMessage() {}
func (*ReverseScanRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{22}
+ return fileDescriptor_api_459e7ba87f98a834, []int{22}
}
func (m *ReverseScanRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1357,7 +1357,7 @@ func (m *ReverseScanResponse) Reset() { *m = ReverseScanResponse{} }
func (m *ReverseScanResponse) String() string { return proto.CompactTextString(m) }
func (*ReverseScanResponse) ProtoMessage() {}
func (*ReverseScanResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{23}
+ return fileDescriptor_api_459e7ba87f98a834, []int{23}
}
func (m *ReverseScanResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1410,7 +1410,7 @@ func (m *CheckConsistencyRequest) Reset() { *m = CheckConsistencyRequest
func (m *CheckConsistencyRequest) String() string { return proto.CompactTextString(m) }
func (*CheckConsistencyRequest) ProtoMessage() {}
func (*CheckConsistencyRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{24}
+ return fileDescriptor_api_459e7ba87f98a834, []int{24}
}
func (m *CheckConsistencyRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1447,7 +1447,7 @@ func (m *CheckConsistencyResponse) Reset() { *m = CheckConsistencyRespon
func (m *CheckConsistencyResponse) String() string { return proto.CompactTextString(m) }
func (*CheckConsistencyResponse) ProtoMessage() {}
func (*CheckConsistencyResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{25}
+ return fileDescriptor_api_459e7ba87f98a834, []int{25}
}
func (m *CheckConsistencyResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1491,7 +1491,7 @@ func (m *CheckConsistencyResponse_Result) Reset() { *m = CheckConsistenc
func (m *CheckConsistencyResponse_Result) String() string { return proto.CompactTextString(m) }
func (*CheckConsistencyResponse_Result) ProtoMessage() {}
func (*CheckConsistencyResponse_Result) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{25, 0}
+ return fileDescriptor_api_459e7ba87f98a834, []int{25, 0}
}
func (m *CheckConsistencyResponse_Result) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1539,7 +1539,7 @@ func (m *RecomputeStatsRequest) Reset() { *m = RecomputeStatsRequest{} }
func (m *RecomputeStatsRequest) String() string { return proto.CompactTextString(m) }
func (*RecomputeStatsRequest) ProtoMessage() {}
func (*RecomputeStatsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{26}
+ return fileDescriptor_api_459e7ba87f98a834, []int{26}
}
func (m *RecomputeStatsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1575,7 +1575,7 @@ func (m *RecomputeStatsResponse) Reset() { *m = RecomputeStatsResponse{}
func (m *RecomputeStatsResponse) String() string { return proto.CompactTextString(m) }
func (*RecomputeStatsResponse) ProtoMessage() {}
func (*RecomputeStatsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{27}
+ return fileDescriptor_api_459e7ba87f98a834, []int{27}
}
func (m *RecomputeStatsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1686,7 +1686,7 @@ func (m *EndTxnRequest) Reset() { *m = EndTxnRequest{} }
func (m *EndTxnRequest) String() string { return proto.CompactTextString(m) }
func (*EndTxnRequest) ProtoMessage() {}
func (*EndTxnRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{28}
+ return fileDescriptor_api_459e7ba87f98a834, []int{28}
}
func (m *EndTxnRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1732,7 +1732,7 @@ func (m *EndTxnResponse) Reset() { *m = EndTxnResponse{} }
func (m *EndTxnResponse) String() string { return proto.CompactTextString(m) }
func (*EndTxnResponse) ProtoMessage() {}
func (*EndTxnResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{29}
+ return fileDescriptor_api_459e7ba87f98a834, []int{29}
}
func (m *EndTxnResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1793,7 +1793,7 @@ func (m *AdminSplitRequest) Reset() { *m = AdminSplitRequest{} }
func (m *AdminSplitRequest) String() string { return proto.CompactTextString(m) }
func (*AdminSplitRequest) ProtoMessage() {}
func (*AdminSplitRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{30}
+ return fileDescriptor_api_459e7ba87f98a834, []int{30}
}
func (m *AdminSplitRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1828,7 +1828,7 @@ func (m *AdminSplitResponse) Reset() { *m = AdminSplitResponse{} }
func (m *AdminSplitResponse) String() string { return proto.CompactTextString(m) }
func (*AdminSplitResponse) ProtoMessage() {}
func (*AdminSplitResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{31}
+ return fileDescriptor_api_459e7ba87f98a834, []int{31}
}
func (m *AdminSplitResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1867,7 +1867,7 @@ func (m *AdminUnsplitRequest) Reset() { *m = AdminUnsplitRequest{} }
func (m *AdminUnsplitRequest) String() string { return proto.CompactTextString(m) }
func (*AdminUnsplitRequest) ProtoMessage() {}
func (*AdminUnsplitRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{32}
+ return fileDescriptor_api_459e7ba87f98a834, []int{32}
}
func (m *AdminUnsplitRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1902,7 +1902,7 @@ func (m *AdminUnsplitResponse) Reset() { *m = AdminUnsplitResponse{} }
func (m *AdminUnsplitResponse) String() string { return proto.CompactTextString(m) }
func (*AdminUnsplitResponse) ProtoMessage() {}
func (*AdminUnsplitResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{33}
+ return fileDescriptor_api_459e7ba87f98a834, []int{33}
}
func (m *AdminUnsplitResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1945,7 +1945,7 @@ func (m *AdminMergeRequest) Reset() { *m = AdminMergeRequest{} }
func (m *AdminMergeRequest) String() string { return proto.CompactTextString(m) }
func (*AdminMergeRequest) ProtoMessage() {}
func (*AdminMergeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{34}
+ return fileDescriptor_api_459e7ba87f98a834, []int{34}
}
func (m *AdminMergeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1980,7 +1980,7 @@ func (m *AdminMergeResponse) Reset() { *m = AdminMergeResponse{} }
func (m *AdminMergeResponse) String() string { return proto.CompactTextString(m) }
func (*AdminMergeResponse) ProtoMessage() {}
func (*AdminMergeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{35}
+ return fileDescriptor_api_459e7ba87f98a834, []int{35}
}
func (m *AdminMergeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2018,7 +2018,7 @@ func (m *AdminTransferLeaseRequest) Reset() { *m = AdminTransferLeaseReq
func (m *AdminTransferLeaseRequest) String() string { return proto.CompactTextString(m) }
func (*AdminTransferLeaseRequest) ProtoMessage() {}
func (*AdminTransferLeaseRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{36}
+ return fileDescriptor_api_459e7ba87f98a834, []int{36}
}
func (m *AdminTransferLeaseRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2051,7 +2051,7 @@ func (m *AdminTransferLeaseResponse) Reset() { *m = AdminTransferLeaseRe
func (m *AdminTransferLeaseResponse) String() string { return proto.CompactTextString(m) }
func (*AdminTransferLeaseResponse) ProtoMessage() {}
func (*AdminTransferLeaseResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{37}
+ return fileDescriptor_api_459e7ba87f98a834, []int{37}
}
func (m *AdminTransferLeaseResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2086,7 +2086,7 @@ func (m *ReplicationChange) Reset() { *m = ReplicationChange{} }
func (m *ReplicationChange) String() string { return proto.CompactTextString(m) }
func (*ReplicationChange) ProtoMessage() {}
func (*ReplicationChange) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{38}
+ return fileDescriptor_api_459e7ba87f98a834, []int{38}
}
func (m *ReplicationChange) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2144,7 +2144,7 @@ func (m *AdminChangeReplicasRequest) Reset() { *m = AdminChangeReplicasR
func (m *AdminChangeReplicasRequest) String() string { return proto.CompactTextString(m) }
func (*AdminChangeReplicasRequest) ProtoMessage() {}
func (*AdminChangeReplicasRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{39}
+ return fileDescriptor_api_459e7ba87f98a834, []int{39}
}
func (m *AdminChangeReplicasRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2179,7 +2179,7 @@ func (m *AdminChangeReplicasResponse) Reset() { *m = AdminChangeReplicas
func (m *AdminChangeReplicasResponse) String() string { return proto.CompactTextString(m) }
func (*AdminChangeReplicasResponse) ProtoMessage() {}
func (*AdminChangeReplicasResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{40}
+ return fileDescriptor_api_459e7ba87f98a834, []int{40}
}
func (m *AdminChangeReplicasResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2216,7 +2216,7 @@ func (m *AdminRelocateRangeRequest) Reset() { *m = AdminRelocateRangeReq
func (m *AdminRelocateRangeRequest) String() string { return proto.CompactTextString(m) }
func (*AdminRelocateRangeRequest) ProtoMessage() {}
func (*AdminRelocateRangeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{41}
+ return fileDescriptor_api_459e7ba87f98a834, []int{41}
}
func (m *AdminRelocateRangeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2249,7 +2249,7 @@ func (m *AdminRelocateRangeResponse) Reset() { *m = AdminRelocateRangeRe
func (m *AdminRelocateRangeResponse) String() string { return proto.CompactTextString(m) }
func (*AdminRelocateRangeResponse) ProtoMessage() {}
func (*AdminRelocateRangeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{42}
+ return fileDescriptor_api_459e7ba87f98a834, []int{42}
}
func (m *AdminRelocateRangeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2288,7 +2288,7 @@ func (m *HeartbeatTxnRequest) Reset() { *m = HeartbeatTxnRequest{} }
func (m *HeartbeatTxnRequest) String() string { return proto.CompactTextString(m) }
func (*HeartbeatTxnRequest) ProtoMessage() {}
func (*HeartbeatTxnRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{43}
+ return fileDescriptor_api_459e7ba87f98a834, []int{43}
}
func (m *HeartbeatTxnRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2325,7 +2325,7 @@ func (m *HeartbeatTxnResponse) Reset() { *m = HeartbeatTxnResponse{} }
func (m *HeartbeatTxnResponse) String() string { return proto.CompactTextString(m) }
func (*HeartbeatTxnResponse) ProtoMessage() {}
func (*HeartbeatTxnResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{44}
+ return fileDescriptor_api_459e7ba87f98a834, []int{44}
}
func (m *HeartbeatTxnResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2363,7 +2363,7 @@ func (m *GCRequest) Reset() { *m = GCRequest{} }
func (m *GCRequest) String() string { return proto.CompactTextString(m) }
func (*GCRequest) ProtoMessage() {}
func (*GCRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{45}
+ return fileDescriptor_api_459e7ba87f98a834, []int{45}
}
func (m *GCRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2397,7 +2397,7 @@ func (m *GCRequest_GCKey) Reset() { *m = GCRequest_GCKey{} }
func (m *GCRequest_GCKey) String() string { return proto.CompactTextString(m) }
func (*GCRequest_GCKey) ProtoMessage() {}
func (*GCRequest_GCKey) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{45, 0}
+ return fileDescriptor_api_459e7ba87f98a834, []int{45, 0}
}
func (m *GCRequest_GCKey) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2431,7 +2431,7 @@ func (m *GCResponse) Reset() { *m = GCResponse{} }
func (m *GCResponse) String() string { return proto.CompactTextString(m) }
func (*GCResponse) ProtoMessage() {}
func (*GCResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{46}
+ return fileDescriptor_api_459e7ba87f98a834, []int{46}
}
func (m *GCResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2500,7 +2500,7 @@ func (m *PushTxnRequest) Reset() { *m = PushTxnRequest{} }
func (m *PushTxnRequest) String() string { return proto.CompactTextString(m) }
func (*PushTxnRequest) ProtoMessage() {}
func (*PushTxnRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{47}
+ return fileDescriptor_api_459e7ba87f98a834, []int{47}
}
func (m *PushTxnRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2543,7 +2543,7 @@ func (m *PushTxnResponse) Reset() { *m = PushTxnResponse{} }
func (m *PushTxnResponse) String() string { return proto.CompactTextString(m) }
func (*PushTxnResponse) ProtoMessage() {}
func (*PushTxnResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{48}
+ return fileDescriptor_api_459e7ba87f98a834, []int{48}
}
func (m *PushTxnResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2590,7 +2590,7 @@ func (m *RecoverTxnRequest) Reset() { *m = RecoverTxnRequest{} }
func (m *RecoverTxnRequest) String() string { return proto.CompactTextString(m) }
func (*RecoverTxnRequest) ProtoMessage() {}
func (*RecoverTxnRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{49}
+ return fileDescriptor_api_459e7ba87f98a834, []int{49}
}
func (m *RecoverTxnRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2626,7 +2626,7 @@ func (m *RecoverTxnResponse) Reset() { *m = RecoverTxnResponse{} }
func (m *RecoverTxnResponse) String() string { return proto.CompactTextString(m) }
func (*RecoverTxnResponse) ProtoMessage() {}
func (*RecoverTxnResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{50}
+ return fileDescriptor_api_459e7ba87f98a834, []int{50}
}
func (m *RecoverTxnResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2670,7 +2670,7 @@ func (m *QueryTxnRequest) Reset() { *m = QueryTxnRequest{} }
func (m *QueryTxnRequest) String() string { return proto.CompactTextString(m) }
func (*QueryTxnRequest) ProtoMessage() {}
func (*QueryTxnRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{51}
+ return fileDescriptor_api_459e7ba87f98a834, []int{51}
}
func (m *QueryTxnRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2714,7 +2714,7 @@ func (m *QueryTxnResponse) Reset() { *m = QueryTxnResponse{} }
func (m *QueryTxnResponse) String() string { return proto.CompactTextString(m) }
func (*QueryTxnResponse) ProtoMessage() {}
func (*QueryTxnResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{52}
+ return fileDescriptor_api_459e7ba87f98a834, []int{52}
}
func (m *QueryTxnResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2774,7 +2774,7 @@ func (m *QueryIntentRequest) Reset() { *m = QueryIntentRequest{} }
func (m *QueryIntentRequest) String() string { return proto.CompactTextString(m) }
func (*QueryIntentRequest) ProtoMessage() {}
func (*QueryIntentRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{53}
+ return fileDescriptor_api_459e7ba87f98a834, []int{53}
}
func (m *QueryIntentRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2810,7 +2810,7 @@ func (m *QueryIntentResponse) Reset() { *m = QueryIntentResponse{} }
func (m *QueryIntentResponse) String() string { return proto.CompactTextString(m) }
func (*QueryIntentResponse) ProtoMessage() {}
func (*QueryIntentResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{54}
+ return fileDescriptor_api_459e7ba87f98a834, []int{54}
}
func (m *QueryIntentResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2857,7 +2857,7 @@ func (m *ResolveIntentRequest) Reset() { *m = ResolveIntentRequest{} }
func (m *ResolveIntentRequest) String() string { return proto.CompactTextString(m) }
func (*ResolveIntentRequest) ProtoMessage() {}
func (*ResolveIntentRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{55}
+ return fileDescriptor_api_459e7ba87f98a834, []int{55}
}
func (m *ResolveIntentRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2892,7 +2892,7 @@ func (m *ResolveIntentResponse) Reset() { *m = ResolveIntentResponse{} }
func (m *ResolveIntentResponse) String() string { return proto.CompactTextString(m) }
func (*ResolveIntentResponse) ProtoMessage() {}
func (*ResolveIntentResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{56}
+ return fileDescriptor_api_459e7ba87f98a834, []int{56}
}
func (m *ResolveIntentResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2943,7 +2943,7 @@ func (m *ResolveIntentRangeRequest) Reset() { *m = ResolveIntentRangeReq
func (m *ResolveIntentRangeRequest) String() string { return proto.CompactTextString(m) }
func (*ResolveIntentRangeRequest) ProtoMessage() {}
func (*ResolveIntentRangeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{57}
+ return fileDescriptor_api_459e7ba87f98a834, []int{57}
}
func (m *ResolveIntentRangeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2978,7 +2978,7 @@ func (m *ResolveIntentRangeResponse) Reset() { *m = ResolveIntentRangeRe
func (m *ResolveIntentRangeResponse) String() string { return proto.CompactTextString(m) }
func (*ResolveIntentRangeResponse) ProtoMessage() {}
func (*ResolveIntentRangeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{58}
+ return fileDescriptor_api_459e7ba87f98a834, []int{58}
}
func (m *ResolveIntentRangeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3015,7 +3015,7 @@ func (m *MergeRequest) Reset() { *m = MergeRequest{} }
func (m *MergeRequest) String() string { return proto.CompactTextString(m) }
func (*MergeRequest) ProtoMessage() {}
func (*MergeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{59}
+ return fileDescriptor_api_459e7ba87f98a834, []int{59}
}
func (m *MergeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3049,7 +3049,7 @@ func (m *MergeResponse) Reset() { *m = MergeResponse{} }
func (m *MergeResponse) String() string { return proto.CompactTextString(m) }
func (*MergeResponse) ProtoMessage() {}
func (*MergeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{60}
+ return fileDescriptor_api_459e7ba87f98a834, []int{60}
}
func (m *MergeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3094,7 +3094,7 @@ func (m *TruncateLogRequest) Reset() { *m = TruncateLogRequest{} }
func (m *TruncateLogRequest) String() string { return proto.CompactTextString(m) }
func (*TruncateLogRequest) ProtoMessage() {}
func (*TruncateLogRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{61}
+ return fileDescriptor_api_459e7ba87f98a834, []int{61}
}
func (m *TruncateLogRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3128,7 +3128,7 @@ func (m *TruncateLogResponse) Reset() { *m = TruncateLogResponse{} }
func (m *TruncateLogResponse) String() string { return proto.CompactTextString(m) }
func (*TruncateLogResponse) ProtoMessage() {}
func (*TruncateLogResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{62}
+ return fileDescriptor_api_459e7ba87f98a834, []int{62}
}
func (m *TruncateLogResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3172,7 +3172,7 @@ func (m *RequestLeaseRequest) Reset() { *m = RequestLeaseRequest{} }
func (m *RequestLeaseRequest) String() string { return proto.CompactTextString(m) }
func (*RequestLeaseRequest) ProtoMessage() {}
func (*RequestLeaseRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{63}
+ return fileDescriptor_api_459e7ba87f98a834, []int{63}
}
func (m *RequestLeaseRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3221,7 +3221,7 @@ func (m *TransferLeaseRequest) Reset() { *m = TransferLeaseRequest{} }
func (m *TransferLeaseRequest) String() string { return proto.CompactTextString(m) }
func (*TransferLeaseRequest) ProtoMessage() {}
func (*TransferLeaseRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{64}
+ return fileDescriptor_api_459e7ba87f98a834, []int{64}
}
func (m *TransferLeaseRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3258,7 +3258,7 @@ func (m *LeaseInfoRequest) Reset() { *m = LeaseInfoRequest{} }
func (m *LeaseInfoRequest) String() string { return proto.CompactTextString(m) }
func (*LeaseInfoRequest) ProtoMessage() {}
func (*LeaseInfoRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{65}
+ return fileDescriptor_api_459e7ba87f98a834, []int{65}
}
func (m *LeaseInfoRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3295,7 +3295,7 @@ func (m *LeaseInfoResponse) Reset() { *m = LeaseInfoResponse{} }
func (m *LeaseInfoResponse) String() string { return proto.CompactTextString(m) }
func (*LeaseInfoResponse) ProtoMessage() {}
func (*LeaseInfoResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{66}
+ return fileDescriptor_api_459e7ba87f98a834, []int{66}
}
func (m *LeaseInfoResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3330,7 +3330,7 @@ func (m *RequestLeaseResponse) Reset() { *m = RequestLeaseResponse{} }
func (m *RequestLeaseResponse) String() string { return proto.CompactTextString(m) }
func (*RequestLeaseResponse) ProtoMessage() {}
func (*RequestLeaseResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{67}
+ return fileDescriptor_api_459e7ba87f98a834, []int{67}
}
func (m *RequestLeaseResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3385,7 +3385,7 @@ func (m *ComputeChecksumRequest) Reset() { *m = ComputeChecksumRequest{}
func (m *ComputeChecksumRequest) String() string { return proto.CompactTextString(m) }
func (*ComputeChecksumRequest) ProtoMessage() {}
func (*ComputeChecksumRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{68}
+ return fileDescriptor_api_459e7ba87f98a834, []int{68}
}
func (m *ComputeChecksumRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3422,7 +3422,7 @@ func (m *ComputeChecksumResponse) Reset() { *m = ComputeChecksumResponse
func (m *ComputeChecksumResponse) String() string { return proto.CompactTextString(m) }
func (*ComputeChecksumResponse) ProtoMessage() {}
func (*ComputeChecksumResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{69}
+ return fileDescriptor_api_459e7ba87f98a834, []int{69}
}
func (m *ComputeChecksumResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3462,7 +3462,7 @@ func (m *ExternalStorage) Reset() { *m = ExternalStorage{} }
func (m *ExternalStorage) String() string { return proto.CompactTextString(m) }
func (*ExternalStorage) ProtoMessage() {}
func (*ExternalStorage) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{70}
+ return fileDescriptor_api_459e7ba87f98a834, []int{70}
}
func (m *ExternalStorage) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3496,7 +3496,7 @@ func (m *ExternalStorage_LocalFilePath) Reset() { *m = ExternalStorage_L
func (m *ExternalStorage_LocalFilePath) String() string { return proto.CompactTextString(m) }
func (*ExternalStorage_LocalFilePath) ProtoMessage() {}
func (*ExternalStorage_LocalFilePath) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{70, 0}
+ return fileDescriptor_api_459e7ba87f98a834, []int{70, 0}
}
func (m *ExternalStorage_LocalFilePath) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3529,7 +3529,7 @@ func (m *ExternalStorage_Http) Reset() { *m = ExternalStorage_Http{} }
func (m *ExternalStorage_Http) String() string { return proto.CompactTextString(m) }
func (*ExternalStorage_Http) ProtoMessage() {}
func (*ExternalStorage_Http) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{70, 1}
+ return fileDescriptor_api_459e7ba87f98a834, []int{70, 1}
}
func (m *ExternalStorage_Http) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3569,7 +3569,7 @@ func (m *ExternalStorage_S3) Reset() { *m = ExternalStorage_S3{} }
func (m *ExternalStorage_S3) String() string { return proto.CompactTextString(m) }
func (*ExternalStorage_S3) ProtoMessage() {}
func (*ExternalStorage_S3) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{70, 2}
+ return fileDescriptor_api_459e7ba87f98a834, []int{70, 2}
}
func (m *ExternalStorage_S3) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3608,7 +3608,7 @@ func (m *ExternalStorage_GCS) Reset() { *m = ExternalStorage_GCS{} }
func (m *ExternalStorage_GCS) String() string { return proto.CompactTextString(m) }
func (*ExternalStorage_GCS) ProtoMessage() {}
func (*ExternalStorage_GCS) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{70, 3}
+ return fileDescriptor_api_459e7ba87f98a834, []int{70, 3}
}
func (m *ExternalStorage_GCS) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3644,7 +3644,7 @@ func (m *ExternalStorage_Azure) Reset() { *m = ExternalStorage_Azure{} }
func (m *ExternalStorage_Azure) String() string { return proto.CompactTextString(m) }
func (*ExternalStorage_Azure) ProtoMessage() {}
func (*ExternalStorage_Azure) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{70, 4}
+ return fileDescriptor_api_459e7ba87f98a834, []int{70, 4}
}
func (m *ExternalStorage_Azure) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3683,7 +3683,7 @@ func (m *ExternalStorage_Workload) Reset() { *m = ExternalStorage_Worklo
func (m *ExternalStorage_Workload) String() string { return proto.CompactTextString(m) }
func (*ExternalStorage_Workload) ProtoMessage() {}
func (*ExternalStorage_Workload) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{70, 5}
+ return fileDescriptor_api_459e7ba87f98a834, []int{70, 5}
}
func (m *ExternalStorage_Workload) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3725,7 +3725,7 @@ func (m *ExternalStorage_FileTable) Reset() { *m = ExternalStorage_FileT
func (m *ExternalStorage_FileTable) String() string { return proto.CompactTextString(m) }
func (*ExternalStorage_FileTable) ProtoMessage() {}
func (*ExternalStorage_FileTable) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{70, 6}
+ return fileDescriptor_api_459e7ba87f98a834, []int{70, 6}
}
func (m *ExternalStorage_FileTable) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3765,7 +3765,7 @@ func (m *WriteBatchRequest) Reset() { *m = WriteBatchRequest{} }
func (m *WriteBatchRequest) String() string { return proto.CompactTextString(m) }
func (*WriteBatchRequest) ProtoMessage() {}
func (*WriteBatchRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{71}
+ return fileDescriptor_api_459e7ba87f98a834, []int{71}
}
func (m *WriteBatchRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3799,7 +3799,7 @@ func (m *WriteBatchResponse) Reset() { *m = WriteBatchResponse{} }
func (m *WriteBatchResponse) String() string { return proto.CompactTextString(m) }
func (*WriteBatchResponse) ProtoMessage() {}
func (*WriteBatchResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{72}
+ return fileDescriptor_api_459e7ba87f98a834, []int{72}
}
func (m *WriteBatchResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3835,7 +3835,7 @@ func (m *FileEncryptionOptions) Reset() { *m = FileEncryptionOptions{} }
func (m *FileEncryptionOptions) String() string { return proto.CompactTextString(m) }
func (*FileEncryptionOptions) ProtoMessage() {}
func (*FileEncryptionOptions) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{73}
+ return fileDescriptor_api_459e7ba87f98a834, []int{73}
}
func (m *FileEncryptionOptions) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3905,7 +3905,7 @@ func (m *ExportRequest) Reset() { *m = ExportRequest{} }
func (m *ExportRequest) String() string { return proto.CompactTextString(m) }
func (*ExportRequest) ProtoMessage() {}
func (*ExportRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{74}
+ return fileDescriptor_api_459e7ba87f98a834, []int{74}
}
func (m *ExportRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3957,7 +3957,7 @@ func (m *BulkOpSummary) Reset() { *m = BulkOpSummary{} }
func (m *BulkOpSummary) String() string { return proto.CompactTextString(m) }
func (*BulkOpSummary) ProtoMessage() {}
func (*BulkOpSummary) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{75}
+ return fileDescriptor_api_459e7ba87f98a834, []int{75}
}
func (m *BulkOpSummary) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3993,7 +3993,7 @@ func (m *ExportResponse) Reset() { *m = ExportResponse{} }
func (m *ExportResponse) String() string { return proto.CompactTextString(m) }
func (*ExportResponse) ProtoMessage() {}
func (*ExportResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{76}
+ return fileDescriptor_api_459e7ba87f98a834, []int{76}
}
func (m *ExportResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4033,7 +4033,7 @@ func (m *ExportResponse_File) Reset() { *m = ExportResponse_File{} }
func (m *ExportResponse_File) String() string { return proto.CompactTextString(m) }
func (*ExportResponse_File) ProtoMessage() {}
func (*ExportResponse_File) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{76, 0}
+ return fileDescriptor_api_459e7ba87f98a834, []int{76, 0}
}
func (m *ExportResponse_File) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4084,7 +4084,7 @@ func (m *ImportRequest) Reset() { *m = ImportRequest{} }
func (m *ImportRequest) String() string { return proto.CompactTextString(m) }
func (*ImportRequest) ProtoMessage() {}
func (*ImportRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{77}
+ return fileDescriptor_api_459e7ba87f98a834, []int{77}
}
func (m *ImportRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4119,7 +4119,7 @@ func (m *ImportRequest_File) Reset() { *m = ImportRequest_File{} }
func (m *ImportRequest_File) String() string { return proto.CompactTextString(m) }
func (*ImportRequest_File) ProtoMessage() {}
func (*ImportRequest_File) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{77, 0}
+ return fileDescriptor_api_459e7ba87f98a834, []int{77, 0}
}
func (m *ImportRequest_File) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4155,7 +4155,7 @@ func (m *ImportRequest_TableRekey) Reset() { *m = ImportRequest_TableRek
func (m *ImportRequest_TableRekey) String() string { return proto.CompactTextString(m) }
func (*ImportRequest_TableRekey) ProtoMessage() {}
func (*ImportRequest_TableRekey) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{77, 1}
+ return fileDescriptor_api_459e7ba87f98a834, []int{77, 1}
}
func (m *ImportRequest_TableRekey) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4190,7 +4190,7 @@ func (m *ImportResponse) Reset() { *m = ImportResponse{} }
func (m *ImportResponse) String() string { return proto.CompactTextString(m) }
func (*ImportResponse) ProtoMessage() {}
func (*ImportResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{78}
+ return fileDescriptor_api_459e7ba87f98a834, []int{78}
}
func (m *ImportResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4228,7 +4228,7 @@ func (m *AdminScatterRequest) Reset() { *m = AdminScatterRequest{} }
func (m *AdminScatterRequest) String() string { return proto.CompactTextString(m) }
func (*AdminScatterRequest) ProtoMessage() {}
func (*AdminScatterRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{79}
+ return fileDescriptor_api_459e7ba87f98a834, []int{79}
}
func (m *AdminScatterRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4265,7 +4265,7 @@ func (m *AdminScatterResponse) Reset() { *m = AdminScatterResponse{} }
func (m *AdminScatterResponse) String() string { return proto.CompactTextString(m) }
func (*AdminScatterResponse) ProtoMessage() {}
func (*AdminScatterResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{80}
+ return fileDescriptor_api_459e7ba87f98a834, []int{80}
}
func (m *AdminScatterResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4298,7 +4298,7 @@ func (m *AdminScatterResponse_Range) Reset() { *m = AdminScatterResponse
func (m *AdminScatterResponse_Range) String() string { return proto.CompactTextString(m) }
func (*AdminScatterResponse_Range) ProtoMessage() {}
func (*AdminScatterResponse_Range) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{80, 0}
+ return fileDescriptor_api_459e7ba87f98a834, []int{80, 0}
}
func (m *AdminScatterResponse_Range) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4323,6 +4323,90 @@ func (m *AdminScatterResponse_Range) XXX_DiscardUnknown() {
var xxx_messageInfo_AdminScatterResponse_Range proto.InternalMessageInfo
+// MigrateRequest forces all ranges overlapping it to proactively move out of
+// any legacy modes that they are currently in (as defined by the delta between
+// the current version and the TargetVersion). When this command returns, the
+// ranges are ready to run with the TargetVersion.
+//
+// TODO(irfansharif): Should the implementation of the Migrate command consider
+// the delta between the current and the target version? Given the orchestrator
+// is already going to be the one responsible for stepping through all
+// intermediate versions, it's probably saner to only carry out the specific
+// migration associated with the target version.
+//
+// TODO(irfansharif): Should this be an admin request instead? There's no good
+// way for us to get the applied index of admin requests which don't go through
+// the usual eval+propose codepaths, and we do need to know the MLAI for the
+// request to wait for it to apply before returning. So perhaps not.
+type MigrateRequest struct {
+ RequestHeader `protobuf:"bytes,1,opt,name=header,proto3,embedded=header" json:"header"`
+ // The version that will become active next. A request with the
+ TargetVersion Version `protobuf:"bytes,2,opt,name=TargetVersion,proto3" json:"TargetVersion"`
+}
+
+func (m *MigrateRequest) Reset() { *m = MigrateRequest{} }
+func (m *MigrateRequest) String() string { return proto.CompactTextString(m) }
+func (*MigrateRequest) ProtoMessage() {}
+func (*MigrateRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_api_459e7ba87f98a834, []int{81}
+}
+func (m *MigrateRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MigrateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ b = b[:cap(b)]
+ n, err := m.MarshalTo(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+}
+func (dst *MigrateRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MigrateRequest.Merge(dst, src)
+}
+func (m *MigrateRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *MigrateRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_MigrateRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MigrateRequest proto.InternalMessageInfo
+
+// MigrateResponse is the response to an Migrate operation.
+type MigrateResponse struct {
+ ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3,embedded=header" json:"header"`
+}
+
+func (m *MigrateResponse) Reset() { *m = MigrateResponse{} }
+func (m *MigrateResponse) String() string { return proto.CompactTextString(m) }
+func (*MigrateResponse) ProtoMessage() {}
+func (*MigrateResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_api_459e7ba87f98a834, []int{82}
+}
+func (m *MigrateResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MigrateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ b = b[:cap(b)]
+ n, err := m.MarshalTo(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+}
+func (dst *MigrateResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MigrateResponse.Merge(dst, src)
+}
+func (m *MigrateResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *MigrateResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_MigrateResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MigrateResponse proto.InternalMessageInfo
+
// AdminVerifyProtectedTimestampRequest is the argument to the
// AdminVerifyProtectedTimestamp method which ensures that the specified record
// will be seen before data can be garbage collected at the timestamp.
@@ -4343,7 +4427,7 @@ func (m *AdminVerifyProtectedTimestampRequest) Reset() { *m = AdminVerif
func (m *AdminVerifyProtectedTimestampRequest) String() string { return proto.CompactTextString(m) }
func (*AdminVerifyProtectedTimestampRequest) ProtoMessage() {}
func (*AdminVerifyProtectedTimestampRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{81}
+ return fileDescriptor_api_459e7ba87f98a834, []int{83}
}
func (m *AdminVerifyProtectedTimestampRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4381,7 +4465,7 @@ func (m *AdminVerifyProtectedTimestampResponse) Reset() { *m = AdminVeri
func (m *AdminVerifyProtectedTimestampResponse) String() string { return proto.CompactTextString(m) }
func (*AdminVerifyProtectedTimestampResponse) ProtoMessage() {}
func (*AdminVerifyProtectedTimestampResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{82}
+ return fileDescriptor_api_459e7ba87f98a834, []int{84}
}
func (m *AdminVerifyProtectedTimestampResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4434,7 +4518,7 @@ func (m *AddSSTableRequest) Reset() { *m = AddSSTableRequest{} }
func (m *AddSSTableRequest) String() string { return proto.CompactTextString(m) }
func (*AddSSTableRequest) ProtoMessage() {}
func (*AddSSTableRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{83}
+ return fileDescriptor_api_459e7ba87f98a834, []int{85}
}
func (m *AddSSTableRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4468,7 +4552,7 @@ func (m *AddSSTableResponse) Reset() { *m = AddSSTableResponse{} }
func (m *AddSSTableResponse) String() string { return proto.CompactTextString(m) }
func (*AddSSTableResponse) ProtoMessage() {}
func (*AddSSTableResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{84}
+ return fileDescriptor_api_459e7ba87f98a834, []int{86}
}
func (m *AddSSTableResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4512,7 +4596,7 @@ func (m *RefreshRequest) Reset() { *m = RefreshRequest{} }
func (m *RefreshRequest) String() string { return proto.CompactTextString(m) }
func (*RefreshRequest) ProtoMessage() {}
func (*RefreshRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{85}
+ return fileDescriptor_api_459e7ba87f98a834, []int{87}
}
func (m *RefreshRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4546,7 +4630,7 @@ func (m *RefreshResponse) Reset() { *m = RefreshResponse{} }
func (m *RefreshResponse) String() string { return proto.CompactTextString(m) }
func (*RefreshResponse) ProtoMessage() {}
func (*RefreshResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{86}
+ return fileDescriptor_api_459e7ba87f98a834, []int{88}
}
func (m *RefreshResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4585,7 +4669,7 @@ func (m *RefreshRangeRequest) Reset() { *m = RefreshRangeRequest{} }
func (m *RefreshRangeRequest) String() string { return proto.CompactTextString(m) }
func (*RefreshRangeRequest) ProtoMessage() {}
func (*RefreshRangeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{87}
+ return fileDescriptor_api_459e7ba87f98a834, []int{89}
}
func (m *RefreshRangeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4619,7 +4703,7 @@ func (m *RefreshRangeResponse) Reset() { *m = RefreshRangeResponse{} }
func (m *RefreshRangeResponse) String() string { return proto.CompactTextString(m) }
func (*RefreshRangeResponse) ProtoMessage() {}
func (*RefreshRangeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{88}
+ return fileDescriptor_api_459e7ba87f98a834, []int{90}
}
func (m *RefreshRangeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4668,7 +4752,7 @@ func (m *SubsumeRequest) Reset() { *m = SubsumeRequest{} }
func (m *SubsumeRequest) String() string { return proto.CompactTextString(m) }
func (*SubsumeRequest) ProtoMessage() {}
func (*SubsumeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{89}
+ return fileDescriptor_api_459e7ba87f98a834, []int{91}
}
func (m *SubsumeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4717,7 +4801,7 @@ func (m *SubsumeResponse) Reset() { *m = SubsumeResponse{} }
func (m *SubsumeResponse) String() string { return proto.CompactTextString(m) }
func (*SubsumeResponse) ProtoMessage() {}
func (*SubsumeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{90}
+ return fileDescriptor_api_459e7ba87f98a834, []int{92}
}
func (m *SubsumeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4752,7 +4836,7 @@ func (m *RangeStatsRequest) Reset() { *m = RangeStatsRequest{} }
func (m *RangeStatsRequest) String() string { return proto.CompactTextString(m) }
func (*RangeStatsRequest) ProtoMessage() {}
func (*RangeStatsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{91}
+ return fileDescriptor_api_459e7ba87f98a834, []int{93}
}
func (m *RangeStatsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4794,7 +4878,7 @@ func (m *RangeStatsResponse) Reset() { *m = RangeStatsResponse{} }
func (m *RangeStatsResponse) String() string { return proto.CompactTextString(m) }
func (*RangeStatsResponse) ProtoMessage() {}
func (*RangeStatsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{92}
+ return fileDescriptor_api_459e7ba87f98a834, []int{94}
}
func (m *RangeStatsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4870,6 +4954,7 @@ type RequestUnion struct {
// *RequestUnion_Subsume
// *RequestUnion_RangeStats
// *RequestUnion_AdminVerifyProtectedTimestamp
+ // *RequestUnion_Migrate
Value isRequestUnion_Value `protobuf_oneof:"value"`
}
@@ -4877,7 +4962,7 @@ func (m *RequestUnion) Reset() { *m = RequestUnion{} }
func (m *RequestUnion) String() string { return proto.CompactTextString(m) }
func (*RequestUnion) ProtoMessage() {}
func (*RequestUnion) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{93}
+ return fileDescriptor_api_459e7ba87f98a834, []int{95}
}
func (m *RequestUnion) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -5040,6 +5125,9 @@ type RequestUnion_RangeStats struct {
type RequestUnion_AdminVerifyProtectedTimestamp struct {
AdminVerifyProtectedTimestamp *AdminVerifyProtectedTimestampRequest `protobuf:"bytes,49,opt,name=admin_verify_protected_timestamp,json=adminVerifyProtectedTimestamp,proto3,oneof"`
}
+type RequestUnion_Migrate struct {
+ Migrate *MigrateRequest `protobuf:"bytes,50,opt,name=migrate,proto3,oneof"`
+}
func (*RequestUnion_Get) isRequestUnion_Value() {}
func (*RequestUnion_Put) isRequestUnion_Value() {}
@@ -5085,6 +5173,7 @@ func (*RequestUnion_RefreshRange) isRequestUnion_Value() {}
func (*RequestUnion_Subsume) isRequestUnion_Value() {}
func (*RequestUnion_RangeStats) isRequestUnion_Value() {}
func (*RequestUnion_AdminVerifyProtectedTimestamp) isRequestUnion_Value() {}
+func (*RequestUnion_Migrate) isRequestUnion_Value() {}
func (m *RequestUnion) GetValue() isRequestUnion_Value {
if m != nil {
@@ -5401,6 +5490,13 @@ func (m *RequestUnion) GetAdminVerifyProtectedTimestamp() *AdminVerifyProtectedT
return nil
}
+func (m *RequestUnion) GetMigrate() *MigrateRequest {
+ if x, ok := m.GetValue().(*RequestUnion_Migrate); ok {
+ return x.Migrate
+ }
+ return nil
+}
+
// XXX_OneofFuncs is for the internal use of the proto package.
func (*RequestUnion) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
return _RequestUnion_OneofMarshaler, _RequestUnion_OneofUnmarshaler, _RequestUnion_OneofSizer, []interface{}{
@@ -5448,6 +5544,7 @@ func (*RequestUnion) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer)
(*RequestUnion_Subsume)(nil),
(*RequestUnion_RangeStats)(nil),
(*RequestUnion_AdminVerifyProtectedTimestamp)(nil),
+ (*RequestUnion_Migrate)(nil),
}
}
@@ -5675,6 +5772,11 @@ func _RequestUnion_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
if err := b.EncodeMessage(x.AdminVerifyProtectedTimestamp); err != nil {
return err
}
+ case *RequestUnion_Migrate:
+ _ = b.EncodeVarint(50<<3 | proto.WireBytes)
+ if err := b.EncodeMessage(x.Migrate); err != nil {
+ return err
+ }
case nil:
default:
return fmt.Errorf("RequestUnion.Value has unexpected type %T", x)
@@ -6037,6 +6139,14 @@ func _RequestUnion_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.B
err := b.DecodeMessage(msg)
m.Value = &RequestUnion_AdminVerifyProtectedTimestamp{msg}
return true, err
+ case 50: // value.migrate
+ if wire != proto.WireBytes {
+ return true, proto.ErrInternalBadWireType
+ }
+ msg := new(MigrateRequest)
+ err := b.DecodeMessage(msg)
+ m.Value = &RequestUnion_Migrate{msg}
+ return true, err
default:
return false, nil
}
@@ -6266,6 +6376,11 @@ func _RequestUnion_OneofSizer(msg proto.Message) (n int) {
n += 2 // tag and wire
n += proto.SizeVarint(uint64(s))
n += s
+ case *RequestUnion_Migrate:
+ s := proto.Size(x.Migrate)
+ n += 2 // tag and wire
+ n += proto.SizeVarint(uint64(s))
+ n += s
case nil:
default:
panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
@@ -6320,6 +6435,7 @@ type ResponseUnion struct {
// *ResponseUnion_Subsume
// *ResponseUnion_RangeStats
// *ResponseUnion_AdminVerifyProtectedTimestamp
+ // *ResponseUnion_Migrate
Value isResponseUnion_Value `protobuf_oneof:"value"`
}
@@ -6327,7 +6443,7 @@ func (m *ResponseUnion) Reset() { *m = ResponseUnion{} }
func (m *ResponseUnion) String() string { return proto.CompactTextString(m) }
func (*ResponseUnion) ProtoMessage() {}
func (*ResponseUnion) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{94}
+ return fileDescriptor_api_459e7ba87f98a834, []int{96}
}
func (m *ResponseUnion) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -6487,6 +6603,9 @@ type ResponseUnion_RangeStats struct {
type ResponseUnion_AdminVerifyProtectedTimestamp struct {
AdminVerifyProtectedTimestamp *AdminVerifyProtectedTimestampResponse `protobuf:"bytes,49,opt,name=admin_verify_protected_timestamp,json=adminVerifyProtectedTimestamp,proto3,oneof"`
}
+type ResponseUnion_Migrate struct {
+ Migrate *MigrateResponse `protobuf:"bytes,50,opt,name=migrate,proto3,oneof"`
+}
func (*ResponseUnion_Get) isResponseUnion_Value() {}
func (*ResponseUnion_Put) isResponseUnion_Value() {}
@@ -6531,6 +6650,7 @@ func (*ResponseUnion_RefreshRange) isResponseUnion_Value() {}
func (*ResponseUnion_Subsume) isResponseUnion_Value() {}
func (*ResponseUnion_RangeStats) isResponseUnion_Value() {}
func (*ResponseUnion_AdminVerifyProtectedTimestamp) isResponseUnion_Value() {}
+func (*ResponseUnion_Migrate) isResponseUnion_Value() {}
func (m *ResponseUnion) GetValue() isResponseUnion_Value {
if m != nil {
@@ -6840,6 +6960,13 @@ func (m *ResponseUnion) GetAdminVerifyProtectedTimestamp() *AdminVerifyProtected
return nil
}
+func (m *ResponseUnion) GetMigrate() *MigrateResponse {
+ if x, ok := m.GetValue().(*ResponseUnion_Migrate); ok {
+ return x.Migrate
+ }
+ return nil
+}
+
// XXX_OneofFuncs is for the internal use of the proto package.
func (*ResponseUnion) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
return _ResponseUnion_OneofMarshaler, _ResponseUnion_OneofUnmarshaler, _ResponseUnion_OneofSizer, []interface{}{
@@ -6886,6 +7013,7 @@ func (*ResponseUnion) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer)
(*ResponseUnion_Subsume)(nil),
(*ResponseUnion_RangeStats)(nil),
(*ResponseUnion_AdminVerifyProtectedTimestamp)(nil),
+ (*ResponseUnion_Migrate)(nil),
}
}
@@ -7108,6 +7236,11 @@ func _ResponseUnion_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
if err := b.EncodeMessage(x.AdminVerifyProtectedTimestamp); err != nil {
return err
}
+ case *ResponseUnion_Migrate:
+ _ = b.EncodeVarint(50<<3 | proto.WireBytes)
+ if err := b.EncodeMessage(x.Migrate); err != nil {
+ return err
+ }
case nil:
default:
return fmt.Errorf("ResponseUnion.Value has unexpected type %T", x)
@@ -7462,6 +7595,14 @@ func _ResponseUnion_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.
err := b.DecodeMessage(msg)
m.Value = &ResponseUnion_AdminVerifyProtectedTimestamp{msg}
return true, err
+ case 50: // value.migrate
+ if wire != proto.WireBytes {
+ return true, proto.ErrInternalBadWireType
+ }
+ msg := new(MigrateResponse)
+ err := b.DecodeMessage(msg)
+ m.Value = &ResponseUnion_Migrate{msg}
+ return true, err
default:
return false, nil
}
@@ -7686,6 +7827,11 @@ func _ResponseUnion_OneofSizer(msg proto.Message) (n int) {
n += 2 // tag and wire
n += proto.SizeVarint(uint64(s))
n += s
+ case *ResponseUnion_Migrate:
+ s := proto.Size(x.Migrate)
+ n += 2 // tag and wire
+ n += proto.SizeVarint(uint64(s))
+ n += s
case nil:
default:
panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
@@ -7862,7 +8008,7 @@ func (m *Header) Reset() { *m = Header{} }
func (m *Header) String() string { return proto.CompactTextString(m) }
func (*Header) ProtoMessage() {}
func (*Header) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{95}
+ return fileDescriptor_api_459e7ba87f98a834, []int{97}
}
func (m *Header) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -7900,7 +8046,7 @@ func (m *ClientRangeInfo) Reset() { *m = ClientRangeInfo{} }
func (m *ClientRangeInfo) String() string { return proto.CompactTextString(m) }
func (*ClientRangeInfo) ProtoMessage() {}
func (*ClientRangeInfo) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{96}
+ return fileDescriptor_api_459e7ba87f98a834, []int{98}
}
func (m *ClientRangeInfo) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -7936,7 +8082,7 @@ type BatchRequest struct {
func (m *BatchRequest) Reset() { *m = BatchRequest{} }
func (*BatchRequest) ProtoMessage() {}
func (*BatchRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{97}
+ return fileDescriptor_api_459e7ba87f98a834, []int{99}
}
func (m *BatchRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -7973,7 +8119,7 @@ type BatchResponse struct {
func (m *BatchResponse) Reset() { *m = BatchResponse{} }
func (*BatchResponse) ProtoMessage() {}
func (*BatchResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{98}
+ return fileDescriptor_api_459e7ba87f98a834, []int{100}
}
func (m *BatchResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8047,7 +8193,7 @@ func (m *BatchResponse_Header) Reset() { *m = BatchResponse_Header{} }
func (m *BatchResponse_Header) String() string { return proto.CompactTextString(m) }
func (*BatchResponse_Header) ProtoMessage() {}
func (*BatchResponse_Header) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{98, 0}
+ return fileDescriptor_api_459e7ba87f98a834, []int{100, 0}
}
func (m *BatchResponse_Header) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8085,7 +8231,7 @@ func (m *RangeLookupRequest) Reset() { *m = RangeLookupRequest{} }
func (m *RangeLookupRequest) String() string { return proto.CompactTextString(m) }
func (*RangeLookupRequest) ProtoMessage() {}
func (*RangeLookupRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{99}
+ return fileDescriptor_api_459e7ba87f98a834, []int{101}
}
func (m *RangeLookupRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8123,7 +8269,7 @@ func (m *RangeLookupResponse) Reset() { *m = RangeLookupResponse{} }
func (m *RangeLookupResponse) String() string { return proto.CompactTextString(m) }
func (*RangeLookupResponse) ProtoMessage() {}
func (*RangeLookupResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{100}
+ return fileDescriptor_api_459e7ba87f98a834, []int{102}
}
func (m *RangeLookupResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8162,7 +8308,7 @@ func (m *RangeFeedRequest) Reset() { *m = RangeFeedRequest{} }
func (m *RangeFeedRequest) String() string { return proto.CompactTextString(m) }
func (*RangeFeedRequest) ProtoMessage() {}
func (*RangeFeedRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{101}
+ return fileDescriptor_api_459e7ba87f98a834, []int{103}
}
func (m *RangeFeedRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8203,7 +8349,7 @@ func (m *RangeFeedValue) Reset() { *m = RangeFeedValue{} }
func (m *RangeFeedValue) String() string { return proto.CompactTextString(m) }
func (*RangeFeedValue) ProtoMessage() {}
func (*RangeFeedValue) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{102}
+ return fileDescriptor_api_459e7ba87f98a834, []int{104}
}
func (m *RangeFeedValue) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8244,7 +8390,7 @@ func (m *RangeFeedCheckpoint) Reset() { *m = RangeFeedCheckpoint{} }
func (m *RangeFeedCheckpoint) String() string { return proto.CompactTextString(m) }
func (*RangeFeedCheckpoint) ProtoMessage() {}
func (*RangeFeedCheckpoint) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{103}
+ return fileDescriptor_api_459e7ba87f98a834, []int{105}
}
func (m *RangeFeedCheckpoint) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8281,7 +8427,7 @@ func (m *RangeFeedError) Reset() { *m = RangeFeedError{} }
func (m *RangeFeedError) String() string { return proto.CompactTextString(m) }
func (*RangeFeedError) ProtoMessage() {}
func (*RangeFeedError) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{104}
+ return fileDescriptor_api_459e7ba87f98a834, []int{106}
}
func (m *RangeFeedError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8318,7 +8464,7 @@ func (m *RangeFeedEvent) Reset() { *m = RangeFeedEvent{} }
func (m *RangeFeedEvent) String() string { return proto.CompactTextString(m) }
func (*RangeFeedEvent) ProtoMessage() {}
func (*RangeFeedEvent) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{105}
+ return fileDescriptor_api_459e7ba87f98a834, []int{107}
}
func (m *RangeFeedEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8359,7 +8505,7 @@ func (m *GossipSubscriptionRequest) Reset() { *m = GossipSubscriptionReq
func (m *GossipSubscriptionRequest) String() string { return proto.CompactTextString(m) }
func (*GossipSubscriptionRequest) ProtoMessage() {}
func (*GossipSubscriptionRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{106}
+ return fileDescriptor_api_459e7ba87f98a834, []int{108}
}
func (m *GossipSubscriptionRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8399,7 +8545,7 @@ func (m *GossipSubscriptionEvent) Reset() { *m = GossipSubscriptionEvent
func (m *GossipSubscriptionEvent) String() string { return proto.CompactTextString(m) }
func (*GossipSubscriptionEvent) ProtoMessage() {}
func (*GossipSubscriptionEvent) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{107}
+ return fileDescriptor_api_459e7ba87f98a834, []int{109}
}
func (m *GossipSubscriptionEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8435,7 +8581,7 @@ func (m *JoinNodeRequest) Reset() { *m = JoinNodeRequest{} }
func (m *JoinNodeRequest) String() string { return proto.CompactTextString(m) }
func (*JoinNodeRequest) ProtoMessage() {}
func (*JoinNodeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{108}
+ return fileDescriptor_api_459e7ba87f98a834, []int{110}
}
func (m *JoinNodeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8474,7 +8620,7 @@ func (m *JoinNodeResponse) Reset() { *m = JoinNodeResponse{} }
func (m *JoinNodeResponse) String() string { return proto.CompactTextString(m) }
func (*JoinNodeResponse) ProtoMessage() {}
func (*JoinNodeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_api_763908915cb85439, []int{109}
+ return fileDescriptor_api_459e7ba87f98a834, []int{111}
}
func (m *JoinNodeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -8596,6 +8742,8 @@ func init() {
proto.RegisterType((*AdminScatterRequest)(nil), "cockroach.roachpb.AdminScatterRequest")
proto.RegisterType((*AdminScatterResponse)(nil), "cockroach.roachpb.AdminScatterResponse")
proto.RegisterType((*AdminScatterResponse_Range)(nil), "cockroach.roachpb.AdminScatterResponse.Range")
+ proto.RegisterType((*MigrateRequest)(nil), "cockroach.roachpb.MigrateRequest")
+ proto.RegisterType((*MigrateResponse)(nil), "cockroach.roachpb.MigrateResponse")
proto.RegisterType((*AdminVerifyProtectedTimestampRequest)(nil), "cockroach.roachpb.AdminVerifyProtectedTimestampRequest")
proto.RegisterType((*AdminVerifyProtectedTimestampResponse)(nil), "cockroach.roachpb.AdminVerifyProtectedTimestampResponse")
proto.RegisterType((*AddSSTableRequest)(nil), "cockroach.roachpb.AddSSTableRequest")
@@ -10357,6 +10505,33 @@ func (this *AdminScatterRequest) Equal(that interface{}) bool {
}
return true
}
+func (this *MigrateRequest) Equal(that interface{}) bool {
+ if that == nil {
+ return this == nil
+ }
+
+ that1, ok := that.(*MigrateRequest)
+ if !ok {
+ that2, ok := that.(MigrateRequest)
+ if ok {
+ that1 = &that2
+ } else {
+ return false
+ }
+ }
+ if that1 == nil {
+ return this == nil
+ } else if this == nil {
+ return false
+ }
+ if !this.RequestHeader.Equal(&that1.RequestHeader) {
+ return false
+ }
+ if !this.TargetVersion.Equal(&that1.TargetVersion) {
+ return false
+ }
+ return true
+}
func (this *AdminVerifyProtectedTimestampRequest) Equal(that interface{}) bool {
if that == nil {
return this == nil
@@ -14703,7 +14878,7 @@ func (m *AdminScatterResponse_Range) MarshalTo(dAtA []byte) (int, error) {
return i, nil
}
-func (m *AdminVerifyProtectedTimestampRequest) Marshal() (dAtA []byte, err error) {
+func (m *MigrateRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
@@ -14713,7 +14888,7 @@ func (m *AdminVerifyProtectedTimestampRequest) Marshal() (dAtA []byte, err error
return dAtA[:n], nil
}
-func (m *AdminVerifyProtectedTimestampRequest) MarshalTo(dAtA []byte) (int, error) {
+func (m *MigrateRequest) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
@@ -14728,28 +14903,88 @@ func (m *AdminVerifyProtectedTimestampRequest) MarshalTo(dAtA []byte) (int, erro
i += n138
dAtA[i] = 0x12
i++
- i = encodeVarintApi(dAtA, i, uint64(m.Protected.Size()))
- n139, err := m.Protected.MarshalTo(dAtA[i:])
+ i = encodeVarintApi(dAtA, i, uint64(m.TargetVersion.Size()))
+ n139, err := m.TargetVersion.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n139
+ return i, nil
+}
+
+func (m *MigrateResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MigrateResponse) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ dAtA[i] = 0xa
+ i++
+ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size()))
+ n140, err := m.ResponseHeader.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n140
+ return i, nil
+}
+
+func (m *AdminVerifyProtectedTimestampRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *AdminVerifyProtectedTimestampRequest) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ dAtA[i] = 0xa
+ i++
+ i = encodeVarintApi(dAtA, i, uint64(m.RequestHeader.Size()))
+ n141, err := m.RequestHeader.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n141
+ dAtA[i] = 0x12
+ i++
+ i = encodeVarintApi(dAtA, i, uint64(m.Protected.Size()))
+ n142, err := m.Protected.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n142
dAtA[i] = 0x1a
i++
i = encodeVarintApi(dAtA, i, uint64(m.RecordAliveAt.Size()))
- n140, err := m.RecordAliveAt.MarshalTo(dAtA[i:])
+ n143, err := m.RecordAliveAt.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n140
+ i += n143
dAtA[i] = 0x22
i++
i = encodeVarintApi(dAtA, i, uint64(m.RecordID.Size()))
- n141, err := m.RecordID.MarshalTo(dAtA[i:])
+ n144, err := m.RecordID.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n141
+ i += n144
return i, nil
}
@@ -14771,11 +15006,11 @@ func (m *AdminVerifyProtectedTimestampResponse) MarshalTo(dAtA []byte) (int, err
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size()))
- n142, err := m.ResponseHeader.MarshalTo(dAtA[i:])
+ n145, err := m.ResponseHeader.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n142
+ i += n145
if m.Verified {
dAtA[i] = 0x10
i++
@@ -14819,11 +15054,11 @@ func (m *AddSSTableRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.RequestHeader.Size()))
- n143, err := m.RequestHeader.MarshalTo(dAtA[i:])
+ n146, err := m.RequestHeader.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n143
+ i += n146
if len(m.Data) > 0 {
dAtA[i] = 0x12
i++
@@ -14844,11 +15079,11 @@ func (m *AddSSTableRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x22
i++
i = encodeVarintApi(dAtA, i, uint64(m.MVCCStats.Size()))
- n144, err := m.MVCCStats.MarshalTo(dAtA[i:])
+ n147, err := m.MVCCStats.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n144
+ i += n147
}
if m.IngestAsWrites {
dAtA[i] = 0x28
@@ -14881,11 +15116,11 @@ func (m *AddSSTableResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size()))
- n145, err := m.ResponseHeader.MarshalTo(dAtA[i:])
+ n148, err := m.ResponseHeader.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n145
+ i += n148
return i, nil
}
@@ -14907,19 +15142,19 @@ func (m *RefreshRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.RequestHeader.Size()))
- n146, err := m.RequestHeader.MarshalTo(dAtA[i:])
+ n149, err := m.RequestHeader.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n146
+ i += n149
dAtA[i] = 0x1a
i++
i = encodeVarintApi(dAtA, i, uint64(m.RefreshFrom.Size()))
- n147, err := m.RefreshFrom.MarshalTo(dAtA[i:])
+ n150, err := m.RefreshFrom.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n147
+ i += n150
return i, nil
}
@@ -14941,11 +15176,11 @@ func (m *RefreshResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size()))
- n148, err := m.ResponseHeader.MarshalTo(dAtA[i:])
+ n151, err := m.ResponseHeader.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n148
+ i += n151
return i, nil
}
@@ -14967,19 +15202,19 @@ func (m *RefreshRangeRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.RequestHeader.Size()))
- n149, err := m.RequestHeader.MarshalTo(dAtA[i:])
+ n152, err := m.RequestHeader.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n149
+ i += n152
dAtA[i] = 0x1a
i++
i = encodeVarintApi(dAtA, i, uint64(m.RefreshFrom.Size()))
- n150, err := m.RefreshFrom.MarshalTo(dAtA[i:])
+ n153, err := m.RefreshFrom.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n150
+ i += n153
return i, nil
}
@@ -15001,11 +15236,11 @@ func (m *RefreshRangeResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size()))
- n151, err := m.ResponseHeader.MarshalTo(dAtA[i:])
+ n154, err := m.ResponseHeader.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n151
+ i += n154
return i, nil
}
@@ -15027,27 +15262,27 @@ func (m *SubsumeRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.RequestHeader.Size()))
- n152, err := m.RequestHeader.MarshalTo(dAtA[i:])
+ n155, err := m.RequestHeader.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n152
+ i += n155
dAtA[i] = 0x12
i++
i = encodeVarintApi(dAtA, i, uint64(m.LeftDesc.Size()))
- n153, err := m.LeftDesc.MarshalTo(dAtA[i:])
+ n156, err := m.LeftDesc.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n153
+ i += n156
dAtA[i] = 0x1a
i++
i = encodeVarintApi(dAtA, i, uint64(m.RightDesc.Size()))
- n154, err := m.RightDesc.MarshalTo(dAtA[i:])
+ n157, err := m.RightDesc.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n154
+ i += n157
return i, nil
}
@@ -15069,19 +15304,19 @@ func (m *SubsumeResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size()))
- n155, err := m.ResponseHeader.MarshalTo(dAtA[i:])
+ n158, err := m.ResponseHeader.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n155
+ i += n158
dAtA[i] = 0x1a
i++
i = encodeVarintApi(dAtA, i, uint64(m.MVCCStats.Size()))
- n156, err := m.MVCCStats.MarshalTo(dAtA[i:])
+ n159, err := m.MVCCStats.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n156
+ i += n159
if m.LeaseAppliedIndex != 0 {
dAtA[i] = 0x20
i++
@@ -15090,11 +15325,11 @@ func (m *SubsumeResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2a
i++
i = encodeVarintApi(dAtA, i, uint64(m.FreezeStart.Size()))
- n157, err := m.FreezeStart.MarshalTo(dAtA[i:])
+ n160, err := m.FreezeStart.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n157
+ i += n160
return i, nil
}
@@ -15116,11 +15351,11 @@ func (m *RangeStatsRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.RequestHeader.Size()))
- n158, err := m.RequestHeader.MarshalTo(dAtA[i:])
+ n161, err := m.RequestHeader.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n158
+ i += n161
return i, nil
}
@@ -15142,19 +15377,19 @@ func (m *RangeStatsResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size()))
- n159, err := m.ResponseHeader.MarshalTo(dAtA[i:])
+ n162, err := m.ResponseHeader.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n159
+ i += n162
dAtA[i] = 0x12
i++
i = encodeVarintApi(dAtA, i, uint64(m.MVCCStats.Size()))
- n160, err := m.MVCCStats.MarshalTo(dAtA[i:])
+ n163, err := m.MVCCStats.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n160
+ i += n163
if m.QueriesPerSecond != 0 {
dAtA[i] = 0x19
i++
@@ -15165,11 +15400,11 @@ func (m *RangeStatsResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x22
i++
i = encodeVarintApi(dAtA, i, uint64(m.RangeInfo.Size()))
- n161, err := m.RangeInfo.MarshalTo(dAtA[i:])
+ n164, err := m.RangeInfo.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n161
+ i += n164
}
return i, nil
}
@@ -15190,11 +15425,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) {
var l int
_ = l
if m.Value != nil {
- nn162, err := m.Value.MarshalTo(dAtA[i:])
+ nn165, err := m.Value.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += nn162
+ i += nn165
}
return i, nil
}
@@ -15205,11 +15440,11 @@ func (m *RequestUnion_Get) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.Get.Size()))
- n163, err := m.Get.MarshalTo(dAtA[i:])
+ n166, err := m.Get.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n163
+ i += n166
}
return i, nil
}
@@ -15219,11 +15454,11 @@ func (m *RequestUnion_Put) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintApi(dAtA, i, uint64(m.Put.Size()))
- n164, err := m.Put.MarshalTo(dAtA[i:])
+ n167, err := m.Put.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n164
+ i += n167
}
return i, nil
}
@@ -15233,11 +15468,11 @@ func (m *RequestUnion_ConditionalPut) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1a
i++
i = encodeVarintApi(dAtA, i, uint64(m.ConditionalPut.Size()))
- n165, err := m.ConditionalPut.MarshalTo(dAtA[i:])
+ n168, err := m.ConditionalPut.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n165
+ i += n168
}
return i, nil
}
@@ -15247,11 +15482,11 @@ func (m *RequestUnion_Increment) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x22
i++
i = encodeVarintApi(dAtA, i, uint64(m.Increment.Size()))
- n166, err := m.Increment.MarshalTo(dAtA[i:])
+ n169, err := m.Increment.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n166
+ i += n169
}
return i, nil
}
@@ -15261,11 +15496,11 @@ func (m *RequestUnion_Delete) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2a
i++
i = encodeVarintApi(dAtA, i, uint64(m.Delete.Size()))
- n167, err := m.Delete.MarshalTo(dAtA[i:])
+ n170, err := m.Delete.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n167
+ i += n170
}
return i, nil
}
@@ -15275,11 +15510,11 @@ func (m *RequestUnion_DeleteRange) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x32
i++
i = encodeVarintApi(dAtA, i, uint64(m.DeleteRange.Size()))
- n168, err := m.DeleteRange.MarshalTo(dAtA[i:])
+ n171, err := m.DeleteRange.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n168
+ i += n171
}
return i, nil
}
@@ -15289,11 +15524,11 @@ func (m *RequestUnion_Scan) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x3a
i++
i = encodeVarintApi(dAtA, i, uint64(m.Scan.Size()))
- n169, err := m.Scan.MarshalTo(dAtA[i:])
+ n172, err := m.Scan.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n169
+ i += n172
}
return i, nil
}
@@ -15303,11 +15538,11 @@ func (m *RequestUnion_EndTxn) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x4a
i++
i = encodeVarintApi(dAtA, i, uint64(m.EndTxn.Size()))
- n170, err := m.EndTxn.MarshalTo(dAtA[i:])
+ n173, err := m.EndTxn.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n170
+ i += n173
}
return i, nil
}
@@ -15317,11 +15552,11 @@ func (m *RequestUnion_AdminSplit) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x52
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminSplit.Size()))
- n171, err := m.AdminSplit.MarshalTo(dAtA[i:])
+ n174, err := m.AdminSplit.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n171
+ i += n174
}
return i, nil
}
@@ -15331,11 +15566,11 @@ func (m *RequestUnion_AdminMerge) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x5a
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminMerge.Size()))
- n172, err := m.AdminMerge.MarshalTo(dAtA[i:])
+ n175, err := m.AdminMerge.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n172
+ i += n175
}
return i, nil
}
@@ -15345,11 +15580,11 @@ func (m *RequestUnion_HeartbeatTxn) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x62
i++
i = encodeVarintApi(dAtA, i, uint64(m.HeartbeatTxn.Size()))
- n173, err := m.HeartbeatTxn.MarshalTo(dAtA[i:])
+ n176, err := m.HeartbeatTxn.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n173
+ i += n176
}
return i, nil
}
@@ -15359,11 +15594,11 @@ func (m *RequestUnion_Gc) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x6a
i++
i = encodeVarintApi(dAtA, i, uint64(m.Gc.Size()))
- n174, err := m.Gc.MarshalTo(dAtA[i:])
+ n177, err := m.Gc.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n174
+ i += n177
}
return i, nil
}
@@ -15373,11 +15608,11 @@ func (m *RequestUnion_PushTxn) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x72
i++
i = encodeVarintApi(dAtA, i, uint64(m.PushTxn.Size()))
- n175, err := m.PushTxn.MarshalTo(dAtA[i:])
+ n178, err := m.PushTxn.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n175
+ i += n178
}
return i, nil
}
@@ -15389,11 +15624,11 @@ func (m *RequestUnion_ResolveIntent) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.ResolveIntent.Size()))
- n176, err := m.ResolveIntent.MarshalTo(dAtA[i:])
+ n179, err := m.ResolveIntent.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n176
+ i += n179
}
return i, nil
}
@@ -15405,11 +15640,11 @@ func (m *RequestUnion_ResolveIntentRange) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.ResolveIntentRange.Size()))
- n177, err := m.ResolveIntentRange.MarshalTo(dAtA[i:])
+ n180, err := m.ResolveIntentRange.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n177
+ i += n180
}
return i, nil
}
@@ -15421,11 +15656,11 @@ func (m *RequestUnion_Merge) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.Merge.Size()))
- n178, err := m.Merge.MarshalTo(dAtA[i:])
+ n181, err := m.Merge.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n178
+ i += n181
}
return i, nil
}
@@ -15437,11 +15672,11 @@ func (m *RequestUnion_TruncateLog) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.TruncateLog.Size()))
- n179, err := m.TruncateLog.MarshalTo(dAtA[i:])
+ n182, err := m.TruncateLog.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n179
+ i += n182
}
return i, nil
}
@@ -15453,11 +15688,11 @@ func (m *RequestUnion_RequestLease) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.RequestLease.Size()))
- n180, err := m.RequestLease.MarshalTo(dAtA[i:])
+ n183, err := m.RequestLease.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n180
+ i += n183
}
return i, nil
}
@@ -15469,11 +15704,11 @@ func (m *RequestUnion_ReverseScan) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.ReverseScan.Size()))
- n181, err := m.ReverseScan.MarshalTo(dAtA[i:])
+ n184, err := m.ReverseScan.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n181
+ i += n184
}
return i, nil
}
@@ -15485,11 +15720,11 @@ func (m *RequestUnion_ComputeChecksum) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.ComputeChecksum.Size()))
- n182, err := m.ComputeChecksum.MarshalTo(dAtA[i:])
+ n185, err := m.ComputeChecksum.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n182
+ i += n185
}
return i, nil
}
@@ -15501,11 +15736,11 @@ func (m *RequestUnion_CheckConsistency) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.CheckConsistency.Size()))
- n183, err := m.CheckConsistency.MarshalTo(dAtA[i:])
+ n186, err := m.CheckConsistency.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n183
+ i += n186
}
return i, nil
}
@@ -15517,11 +15752,11 @@ func (m *RequestUnion_InitPut) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.InitPut.Size()))
- n184, err := m.InitPut.MarshalTo(dAtA[i:])
+ n187, err := m.InitPut.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n184
+ i += n187
}
return i, nil
}
@@ -15533,11 +15768,11 @@ func (m *RequestUnion_TransferLease) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.TransferLease.Size()))
- n185, err := m.TransferLease.MarshalTo(dAtA[i:])
+ n188, err := m.TransferLease.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n185
+ i += n188
}
return i, nil
}
@@ -15549,11 +15784,11 @@ func (m *RequestUnion_AdminTransferLease) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminTransferLease.Size()))
- n186, err := m.AdminTransferLease.MarshalTo(dAtA[i:])
+ n189, err := m.AdminTransferLease.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n186
+ i += n189
}
return i, nil
}
@@ -15565,11 +15800,11 @@ func (m *RequestUnion_LeaseInfo) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.LeaseInfo.Size()))
- n187, err := m.LeaseInfo.MarshalTo(dAtA[i:])
+ n190, err := m.LeaseInfo.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n187
+ i += n190
}
return i, nil
}
@@ -15581,11 +15816,11 @@ func (m *RequestUnion_WriteBatch) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.WriteBatch.Size()))
- n188, err := m.WriteBatch.MarshalTo(dAtA[i:])
+ n191, err := m.WriteBatch.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n188
+ i += n191
}
return i, nil
}
@@ -15597,11 +15832,11 @@ func (m *RequestUnion_Export) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.Export.Size()))
- n189, err := m.Export.MarshalTo(dAtA[i:])
+ n192, err := m.Export.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n189
+ i += n192
}
return i, nil
}
@@ -15613,11 +15848,11 @@ func (m *RequestUnion_QueryTxn) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.QueryTxn.Size()))
- n190, err := m.QueryTxn.MarshalTo(dAtA[i:])
+ n193, err := m.QueryTxn.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n190
+ i += n193
}
return i, nil
}
@@ -15629,11 +15864,11 @@ func (m *RequestUnion_Import) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.Import.Size()))
- n191, err := m.Import.MarshalTo(dAtA[i:])
+ n194, err := m.Import.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n191
+ i += n194
}
return i, nil
}
@@ -15645,11 +15880,11 @@ func (m *RequestUnion_AdminChangeReplicas) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminChangeReplicas.Size()))
- n192, err := m.AdminChangeReplicas.MarshalTo(dAtA[i:])
+ n195, err := m.AdminChangeReplicas.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n192
+ i += n195
}
return i, nil
}
@@ -15661,11 +15896,11 @@ func (m *RequestUnion_AdminScatter) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminScatter.Size()))
- n193, err := m.AdminScatter.MarshalTo(dAtA[i:])
+ n196, err := m.AdminScatter.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n193
+ i += n196
}
return i, nil
}
@@ -15677,11 +15912,11 @@ func (m *RequestUnion_AddSstable) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.AddSstable.Size()))
- n194, err := m.AddSstable.MarshalTo(dAtA[i:])
+ n197, err := m.AddSstable.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n194
+ i += n197
}
return i, nil
}
@@ -15693,11 +15928,11 @@ func (m *RequestUnion_ClearRange) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.ClearRange.Size()))
- n195, err := m.ClearRange.MarshalTo(dAtA[i:])
+ n198, err := m.ClearRange.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n195
+ i += n198
}
return i, nil
}
@@ -15709,11 +15944,11 @@ func (m *RequestUnion_RecomputeStats) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.RecomputeStats.Size()))
- n196, err := m.RecomputeStats.MarshalTo(dAtA[i:])
+ n199, err := m.RecomputeStats.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n196
+ i += n199
}
return i, nil
}
@@ -15725,11 +15960,11 @@ func (m *RequestUnion_Refresh) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.Refresh.Size()))
- n197, err := m.Refresh.MarshalTo(dAtA[i:])
+ n200, err := m.Refresh.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n197
+ i += n200
}
return i, nil
}
@@ -15741,11 +15976,11 @@ func (m *RequestUnion_RefreshRange) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.RefreshRange.Size()))
- n198, err := m.RefreshRange.MarshalTo(dAtA[i:])
+ n201, err := m.RefreshRange.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n198
+ i += n201
}
return i, nil
}
@@ -15757,11 +15992,11 @@ func (m *RequestUnion_QueryIntent) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.QueryIntent.Size()))
- n199, err := m.QueryIntent.MarshalTo(dAtA[i:])
+ n202, err := m.QueryIntent.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n199
+ i += n202
}
return i, nil
}
@@ -15773,11 +16008,11 @@ func (m *RequestUnion_Subsume) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.Subsume.Size()))
- n200, err := m.Subsume.MarshalTo(dAtA[i:])
+ n203, err := m.Subsume.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n200
+ i += n203
}
return i, nil
}
@@ -15789,11 +16024,11 @@ func (m *RequestUnion_RangeStats) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.RangeStats.Size()))
- n201, err := m.RangeStats.MarshalTo(dAtA[i:])
+ n204, err := m.RangeStats.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n201
+ i += n204
}
return i, nil
}
@@ -15805,11 +16040,11 @@ func (m *RequestUnion_AdminRelocateRange) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminRelocateRange.Size()))
- n202, err := m.AdminRelocateRange.MarshalTo(dAtA[i:])
+ n205, err := m.AdminRelocateRange.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n202
+ i += n205
}
return i, nil
}
@@ -15821,11 +16056,11 @@ func (m *RequestUnion_RecoverTxn) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.RecoverTxn.Size()))
- n203, err := m.RecoverTxn.MarshalTo(dAtA[i:])
+ n206, err := m.RecoverTxn.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n203
+ i += n206
}
return i, nil
}
@@ -15837,11 +16072,11 @@ func (m *RequestUnion_AdminUnsplit) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminUnsplit.Size()))
- n204, err := m.AdminUnsplit.MarshalTo(dAtA[i:])
+ n207, err := m.AdminUnsplit.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n204
+ i += n207
}
return i, nil
}
@@ -15853,11 +16088,11 @@ func (m *RequestUnion_RevertRange) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x3
i++
i = encodeVarintApi(dAtA, i, uint64(m.RevertRange.Size()))
- n205, err := m.RevertRange.MarshalTo(dAtA[i:])
+ n208, err := m.RevertRange.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n205
+ i += n208
}
return i, nil
}
@@ -15869,11 +16104,27 @@ func (m *RequestUnion_AdminVerifyProtectedTimestamp) MarshalTo(dAtA []byte) (int
dAtA[i] = 0x3
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminVerifyProtectedTimestamp.Size()))
- n206, err := m.AdminVerifyProtectedTimestamp.MarshalTo(dAtA[i:])
+ n209, err := m.AdminVerifyProtectedTimestamp.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n206
+ i += n209
+ }
+ return i, nil
+}
+func (m *RequestUnion_Migrate) MarshalTo(dAtA []byte) (int, error) {
+ i := 0
+ if m.Migrate != nil {
+ dAtA[i] = 0x92
+ i++
+ dAtA[i] = 0x3
+ i++
+ i = encodeVarintApi(dAtA, i, uint64(m.Migrate.Size()))
+ n210, err := m.Migrate.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n210
}
return i, nil
}
@@ -15893,11 +16144,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) {
var l int
_ = l
if m.Value != nil {
- nn207, err := m.Value.MarshalTo(dAtA[i:])
+ nn211, err := m.Value.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += nn207
+ i += nn211
}
return i, nil
}
@@ -15908,11 +16159,11 @@ func (m *ResponseUnion_Get) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.Get.Size()))
- n208, err := m.Get.MarshalTo(dAtA[i:])
+ n212, err := m.Get.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n208
+ i += n212
}
return i, nil
}
@@ -15922,11 +16173,11 @@ func (m *ResponseUnion_Put) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintApi(dAtA, i, uint64(m.Put.Size()))
- n209, err := m.Put.MarshalTo(dAtA[i:])
+ n213, err := m.Put.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n209
+ i += n213
}
return i, nil
}
@@ -15936,11 +16187,11 @@ func (m *ResponseUnion_ConditionalPut) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1a
i++
i = encodeVarintApi(dAtA, i, uint64(m.ConditionalPut.Size()))
- n210, err := m.ConditionalPut.MarshalTo(dAtA[i:])
+ n214, err := m.ConditionalPut.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n210
+ i += n214
}
return i, nil
}
@@ -15950,11 +16201,11 @@ func (m *ResponseUnion_Increment) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x22
i++
i = encodeVarintApi(dAtA, i, uint64(m.Increment.Size()))
- n211, err := m.Increment.MarshalTo(dAtA[i:])
+ n215, err := m.Increment.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n211
+ i += n215
}
return i, nil
}
@@ -15964,11 +16215,11 @@ func (m *ResponseUnion_Delete) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2a
i++
i = encodeVarintApi(dAtA, i, uint64(m.Delete.Size()))
- n212, err := m.Delete.MarshalTo(dAtA[i:])
+ n216, err := m.Delete.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n212
+ i += n216
}
return i, nil
}
@@ -15978,11 +16229,11 @@ func (m *ResponseUnion_DeleteRange) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x32
i++
i = encodeVarintApi(dAtA, i, uint64(m.DeleteRange.Size()))
- n213, err := m.DeleteRange.MarshalTo(dAtA[i:])
+ n217, err := m.DeleteRange.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n213
+ i += n217
}
return i, nil
}
@@ -15992,11 +16243,11 @@ func (m *ResponseUnion_Scan) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x3a
i++
i = encodeVarintApi(dAtA, i, uint64(m.Scan.Size()))
- n214, err := m.Scan.MarshalTo(dAtA[i:])
+ n218, err := m.Scan.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n214
+ i += n218
}
return i, nil
}
@@ -16006,11 +16257,11 @@ func (m *ResponseUnion_EndTxn) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x4a
i++
i = encodeVarintApi(dAtA, i, uint64(m.EndTxn.Size()))
- n215, err := m.EndTxn.MarshalTo(dAtA[i:])
+ n219, err := m.EndTxn.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n215
+ i += n219
}
return i, nil
}
@@ -16020,11 +16271,11 @@ func (m *ResponseUnion_AdminSplit) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x52
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminSplit.Size()))
- n216, err := m.AdminSplit.MarshalTo(dAtA[i:])
+ n220, err := m.AdminSplit.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n216
+ i += n220
}
return i, nil
}
@@ -16034,11 +16285,11 @@ func (m *ResponseUnion_AdminMerge) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x5a
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminMerge.Size()))
- n217, err := m.AdminMerge.MarshalTo(dAtA[i:])
+ n221, err := m.AdminMerge.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n217
+ i += n221
}
return i, nil
}
@@ -16048,11 +16299,11 @@ func (m *ResponseUnion_HeartbeatTxn) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x62
i++
i = encodeVarintApi(dAtA, i, uint64(m.HeartbeatTxn.Size()))
- n218, err := m.HeartbeatTxn.MarshalTo(dAtA[i:])
+ n222, err := m.HeartbeatTxn.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n218
+ i += n222
}
return i, nil
}
@@ -16062,11 +16313,11 @@ func (m *ResponseUnion_Gc) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x6a
i++
i = encodeVarintApi(dAtA, i, uint64(m.Gc.Size()))
- n219, err := m.Gc.MarshalTo(dAtA[i:])
+ n223, err := m.Gc.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n219
+ i += n223
}
return i, nil
}
@@ -16076,11 +16327,11 @@ func (m *ResponseUnion_PushTxn) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x72
i++
i = encodeVarintApi(dAtA, i, uint64(m.PushTxn.Size()))
- n220, err := m.PushTxn.MarshalTo(dAtA[i:])
+ n224, err := m.PushTxn.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n220
+ i += n224
}
return i, nil
}
@@ -16092,11 +16343,11 @@ func (m *ResponseUnion_ResolveIntent) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.ResolveIntent.Size()))
- n221, err := m.ResolveIntent.MarshalTo(dAtA[i:])
+ n225, err := m.ResolveIntent.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n221
+ i += n225
}
return i, nil
}
@@ -16108,11 +16359,11 @@ func (m *ResponseUnion_ResolveIntentRange) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.ResolveIntentRange.Size()))
- n222, err := m.ResolveIntentRange.MarshalTo(dAtA[i:])
+ n226, err := m.ResolveIntentRange.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n222
+ i += n226
}
return i, nil
}
@@ -16124,11 +16375,11 @@ func (m *ResponseUnion_Merge) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.Merge.Size()))
- n223, err := m.Merge.MarshalTo(dAtA[i:])
+ n227, err := m.Merge.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n223
+ i += n227
}
return i, nil
}
@@ -16140,11 +16391,11 @@ func (m *ResponseUnion_TruncateLog) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.TruncateLog.Size()))
- n224, err := m.TruncateLog.MarshalTo(dAtA[i:])
+ n228, err := m.TruncateLog.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n224
+ i += n228
}
return i, nil
}
@@ -16156,11 +16407,11 @@ func (m *ResponseUnion_RequestLease) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.RequestLease.Size()))
- n225, err := m.RequestLease.MarshalTo(dAtA[i:])
+ n229, err := m.RequestLease.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n225
+ i += n229
}
return i, nil
}
@@ -16172,11 +16423,11 @@ func (m *ResponseUnion_ReverseScan) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.ReverseScan.Size()))
- n226, err := m.ReverseScan.MarshalTo(dAtA[i:])
+ n230, err := m.ReverseScan.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n226
+ i += n230
}
return i, nil
}
@@ -16188,11 +16439,11 @@ func (m *ResponseUnion_ComputeChecksum) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.ComputeChecksum.Size()))
- n227, err := m.ComputeChecksum.MarshalTo(dAtA[i:])
+ n231, err := m.ComputeChecksum.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n227
+ i += n231
}
return i, nil
}
@@ -16204,11 +16455,11 @@ func (m *ResponseUnion_CheckConsistency) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.CheckConsistency.Size()))
- n228, err := m.CheckConsistency.MarshalTo(dAtA[i:])
+ n232, err := m.CheckConsistency.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n228
+ i += n232
}
return i, nil
}
@@ -16220,11 +16471,11 @@ func (m *ResponseUnion_InitPut) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.InitPut.Size()))
- n229, err := m.InitPut.MarshalTo(dAtA[i:])
+ n233, err := m.InitPut.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n229
+ i += n233
}
return i, nil
}
@@ -16236,11 +16487,11 @@ func (m *ResponseUnion_AdminTransferLease) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminTransferLease.Size()))
- n230, err := m.AdminTransferLease.MarshalTo(dAtA[i:])
+ n234, err := m.AdminTransferLease.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n230
+ i += n234
}
return i, nil
}
@@ -16252,11 +16503,11 @@ func (m *ResponseUnion_LeaseInfo) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.LeaseInfo.Size()))
- n231, err := m.LeaseInfo.MarshalTo(dAtA[i:])
+ n235, err := m.LeaseInfo.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n231
+ i += n235
}
return i, nil
}
@@ -16268,11 +16519,11 @@ func (m *ResponseUnion_WriteBatch) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.WriteBatch.Size()))
- n232, err := m.WriteBatch.MarshalTo(dAtA[i:])
+ n236, err := m.WriteBatch.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n232
+ i += n236
}
return i, nil
}
@@ -16284,11 +16535,11 @@ func (m *ResponseUnion_Export) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.Export.Size()))
- n233, err := m.Export.MarshalTo(dAtA[i:])
+ n237, err := m.Export.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n233
+ i += n237
}
return i, nil
}
@@ -16300,11 +16551,11 @@ func (m *ResponseUnion_QueryTxn) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.QueryTxn.Size()))
- n234, err := m.QueryTxn.MarshalTo(dAtA[i:])
+ n238, err := m.QueryTxn.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n234
+ i += n238
}
return i, nil
}
@@ -16316,11 +16567,11 @@ func (m *ResponseUnion_Import) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.Import.Size()))
- n235, err := m.Import.MarshalTo(dAtA[i:])
+ n239, err := m.Import.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n235
+ i += n239
}
return i, nil
}
@@ -16332,11 +16583,11 @@ func (m *ResponseUnion_AdminChangeReplicas) MarshalTo(dAtA []byte) (int, error)
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminChangeReplicas.Size()))
- n236, err := m.AdminChangeReplicas.MarshalTo(dAtA[i:])
+ n240, err := m.AdminChangeReplicas.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n236
+ i += n240
}
return i, nil
}
@@ -16348,11 +16599,11 @@ func (m *ResponseUnion_AdminScatter) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminScatter.Size()))
- n237, err := m.AdminScatter.MarshalTo(dAtA[i:])
+ n241, err := m.AdminScatter.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n237
+ i += n241
}
return i, nil
}
@@ -16364,11 +16615,11 @@ func (m *ResponseUnion_AddSstable) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.AddSstable.Size()))
- n238, err := m.AddSstable.MarshalTo(dAtA[i:])
+ n242, err := m.AddSstable.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n238
+ i += n242
}
return i, nil
}
@@ -16380,11 +16631,11 @@ func (m *ResponseUnion_ClearRange) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.ClearRange.Size()))
- n239, err := m.ClearRange.MarshalTo(dAtA[i:])
+ n243, err := m.ClearRange.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n239
+ i += n243
}
return i, nil
}
@@ -16396,11 +16647,11 @@ func (m *ResponseUnion_RecomputeStats) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.RecomputeStats.Size()))
- n240, err := m.RecomputeStats.MarshalTo(dAtA[i:])
+ n244, err := m.RecomputeStats.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n240
+ i += n244
}
return i, nil
}
@@ -16412,11 +16663,11 @@ func (m *ResponseUnion_Refresh) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.Refresh.Size()))
- n241, err := m.Refresh.MarshalTo(dAtA[i:])
+ n245, err := m.Refresh.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n241
+ i += n245
}
return i, nil
}
@@ -16428,11 +16679,11 @@ func (m *ResponseUnion_RefreshRange) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.RefreshRange.Size()))
- n242, err := m.RefreshRange.MarshalTo(dAtA[i:])
+ n246, err := m.RefreshRange.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n242
+ i += n246
}
return i, nil
}
@@ -16444,11 +16695,11 @@ func (m *ResponseUnion_QueryIntent) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.QueryIntent.Size()))
- n243, err := m.QueryIntent.MarshalTo(dAtA[i:])
+ n247, err := m.QueryIntent.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n243
+ i += n247
}
return i, nil
}
@@ -16460,11 +16711,11 @@ func (m *ResponseUnion_Subsume) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.Subsume.Size()))
- n244, err := m.Subsume.MarshalTo(dAtA[i:])
+ n248, err := m.Subsume.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n244
+ i += n248
}
return i, nil
}
@@ -16476,11 +16727,11 @@ func (m *ResponseUnion_RangeStats) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.RangeStats.Size()))
- n245, err := m.RangeStats.MarshalTo(dAtA[i:])
+ n249, err := m.RangeStats.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n245
+ i += n249
}
return i, nil
}
@@ -16492,11 +16743,11 @@ func (m *ResponseUnion_AdminRelocateRange) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminRelocateRange.Size()))
- n246, err := m.AdminRelocateRange.MarshalTo(dAtA[i:])
+ n250, err := m.AdminRelocateRange.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n246
+ i += n250
}
return i, nil
}
@@ -16508,11 +16759,11 @@ func (m *ResponseUnion_RecoverTxn) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.RecoverTxn.Size()))
- n247, err := m.RecoverTxn.MarshalTo(dAtA[i:])
+ n251, err := m.RecoverTxn.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n247
+ i += n251
}
return i, nil
}
@@ -16524,11 +16775,11 @@ func (m *ResponseUnion_AdminUnsplit) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminUnsplit.Size()))
- n248, err := m.AdminUnsplit.MarshalTo(dAtA[i:])
+ n252, err := m.AdminUnsplit.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n248
+ i += n252
}
return i, nil
}
@@ -16540,11 +16791,11 @@ func (m *ResponseUnion_RevertRange) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x3
i++
i = encodeVarintApi(dAtA, i, uint64(m.RevertRange.Size()))
- n249, err := m.RevertRange.MarshalTo(dAtA[i:])
+ n253, err := m.RevertRange.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n249
+ i += n253
}
return i, nil
}
@@ -16556,11 +16807,27 @@ func (m *ResponseUnion_AdminVerifyProtectedTimestamp) MarshalTo(dAtA []byte) (in
dAtA[i] = 0x3
i++
i = encodeVarintApi(dAtA, i, uint64(m.AdminVerifyProtectedTimestamp.Size()))
- n250, err := m.AdminVerifyProtectedTimestamp.MarshalTo(dAtA[i:])
+ n254, err := m.AdminVerifyProtectedTimestamp.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n250
+ i += n254
+ }
+ return i, nil
+}
+func (m *ResponseUnion_Migrate) MarshalTo(dAtA []byte) (int, error) {
+ i := 0
+ if m.Migrate != nil {
+ dAtA[i] = 0x92
+ i++
+ dAtA[i] = 0x3
+ i++
+ i = encodeVarintApi(dAtA, i, uint64(m.Migrate.Size()))
+ n255, err := m.Migrate.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n255
}
return i, nil
}
@@ -16582,19 +16849,19 @@ func (m *Header) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.Timestamp.Size()))
- n251, err := m.Timestamp.MarshalTo(dAtA[i:])
+ n256, err := m.Timestamp.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n251
+ i += n256
dAtA[i] = 0x12
i++
i = encodeVarintApi(dAtA, i, uint64(m.Replica.Size()))
- n252, err := m.Replica.MarshalTo(dAtA[i:])
+ n257, err := m.Replica.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n252
+ i += n257
if m.RangeID != 0 {
dAtA[i] = 0x18
i++
@@ -16610,11 +16877,11 @@ func (m *Header) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2a
i++
i = encodeVarintApi(dAtA, i, uint64(m.Txn.Size()))
- n253, err := m.Txn.MarshalTo(dAtA[i:])
+ n258, err := m.Txn.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n253
+ i += n258
}
if m.ReadConsistency != 0 {
dAtA[i] = 0x30
@@ -16684,11 +16951,11 @@ func (m *Header) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintApi(dAtA, i, uint64(m.ClientRangeInfo.Size()))
- n254, err := m.ClientRangeInfo.MarshalTo(dAtA[i:])
+ n259, err := m.ClientRangeInfo.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n254
+ i += n259
}
if m.WaitPolicy != 0 {
dAtA[i] = 0x90
@@ -16746,11 +17013,11 @@ func (m *BatchRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.Header.Size()))
- n255, err := m.Header.MarshalTo(dAtA[i:])
+ n260, err := m.Header.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n255
+ i += n260
if len(m.Requests) > 0 {
for _, msg := range m.Requests {
dAtA[i] = 0x12
@@ -16784,11 +17051,11 @@ func (m *BatchResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.BatchResponse_Header.Size()))
- n256, err := m.BatchResponse_Header.MarshalTo(dAtA[i:])
+ n261, err := m.BatchResponse_Header.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n256
+ i += n261
if len(m.Responses) > 0 {
for _, msg := range m.Responses {
dAtA[i] = 0x12
@@ -16823,38 +17090,38 @@ func (m *BatchResponse_Header) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.Error.Size()))
- n257, err := m.Error.MarshalTo(dAtA[i:])
+ n262, err := m.Error.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n257
+ i += n262
}
dAtA[i] = 0x12
i++
i = encodeVarintApi(dAtA, i, uint64(m.Timestamp.Size()))
- n258, err := m.Timestamp.MarshalTo(dAtA[i:])
+ n263, err := m.Timestamp.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n258
+ i += n263
if m.Txn != nil {
dAtA[i] = 0x1a
i++
i = encodeVarintApi(dAtA, i, uint64(m.Txn.Size()))
- n259, err := m.Txn.MarshalTo(dAtA[i:])
+ n264, err := m.Txn.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n259
+ i += n264
}
dAtA[i] = 0x2a
i++
i = encodeVarintApi(dAtA, i, uint64(m.Now.Size()))
- n260, err := m.Now.MarshalTo(dAtA[i:])
+ n265, err := m.Now.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n260
+ i += n265
if len(m.CollectedSpans) > 0 {
for _, msg := range m.CollectedSpans {
dAtA[i] = 0x32
@@ -16969,11 +17236,11 @@ func (m *RangeLookupResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1a
i++
i = encodeVarintApi(dAtA, i, uint64(m.Error.Size()))
- n261, err := m.Error.MarshalTo(dAtA[i:])
+ n266, err := m.Error.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n261
+ i += n266
}
return i, nil
}
@@ -16996,19 +17263,19 @@ func (m *RangeFeedRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.Header.Size()))
- n262, err := m.Header.MarshalTo(dAtA[i:])
+ n267, err := m.Header.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n262
+ i += n267
dAtA[i] = 0x12
i++
i = encodeVarintApi(dAtA, i, uint64(m.Span.Size()))
- n263, err := m.Span.MarshalTo(dAtA[i:])
+ n268, err := m.Span.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n263
+ i += n268
if m.WithDiff {
dAtA[i] = 0x18
i++
@@ -17046,19 +17313,19 @@ func (m *RangeFeedValue) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintApi(dAtA, i, uint64(m.Value.Size()))
- n264, err := m.Value.MarshalTo(dAtA[i:])
+ n269, err := m.Value.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n264
+ i += n269
dAtA[i] = 0x1a
i++
i = encodeVarintApi(dAtA, i, uint64(m.PrevValue.Size()))
- n265, err := m.PrevValue.MarshalTo(dAtA[i:])
+ n270, err := m.PrevValue.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n265
+ i += n270
return i, nil
}
@@ -17080,19 +17347,19 @@ func (m *RangeFeedCheckpoint) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.Span.Size()))
- n266, err := m.Span.MarshalTo(dAtA[i:])
+ n271, err := m.Span.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n266
+ i += n271
dAtA[i] = 0x12
i++
i = encodeVarintApi(dAtA, i, uint64(m.ResolvedTS.Size()))
- n267, err := m.ResolvedTS.MarshalTo(dAtA[i:])
+ n272, err := m.ResolvedTS.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n267
+ i += n272
return i, nil
}
@@ -17114,11 +17381,11 @@ func (m *RangeFeedError) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.Error.Size()))
- n268, err := m.Error.MarshalTo(dAtA[i:])
+ n273, err := m.Error.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n268
+ i += n273
return i, nil
}
@@ -17141,31 +17408,31 @@ func (m *RangeFeedEvent) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.Val.Size()))
- n269, err := m.Val.MarshalTo(dAtA[i:])
+ n274, err := m.Val.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n269
+ i += n274
}
if m.Checkpoint != nil {
dAtA[i] = 0x12
i++
i = encodeVarintApi(dAtA, i, uint64(m.Checkpoint.Size()))
- n270, err := m.Checkpoint.MarshalTo(dAtA[i:])
+ n275, err := m.Checkpoint.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n270
+ i += n275
}
if m.Error != nil {
dAtA[i] = 0x1a
i++
i = encodeVarintApi(dAtA, i, uint64(m.Error.Size()))
- n271, err := m.Error.MarshalTo(dAtA[i:])
+ n276, err := m.Error.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n271
+ i += n276
}
return i, nil
}
@@ -17227,11 +17494,11 @@ func (m *GossipSubscriptionEvent) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintApi(dAtA, i, uint64(m.Content.Size()))
- n272, err := m.Content.MarshalTo(dAtA[i:])
+ n277, err := m.Content.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n272
+ i += n277
if len(m.PatternMatched) > 0 {
dAtA[i] = 0x1a
i++
@@ -17242,11 +17509,11 @@ func (m *GossipSubscriptionEvent) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x22
i++
i = encodeVarintApi(dAtA, i, uint64(m.Error.Size()))
- n273, err := m.Error.MarshalTo(dAtA[i:])
+ n278, err := m.Error.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n273
+ i += n278
}
return i, nil
}
@@ -17270,11 +17537,11 @@ func (m *JoinNodeRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(m.BinaryVersion.Size()))
- n274, err := m.BinaryVersion.MarshalTo(dAtA[i:])
+ n279, err := m.BinaryVersion.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n274
+ i += n279
}
return i, nil
}
@@ -17314,11 +17581,11 @@ func (m *JoinNodeResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x22
i++
i = encodeVarintApi(dAtA, i, uint64(m.ActiveVersion.Size()))
- n275, err := m.ActiveVersion.MarshalTo(dAtA[i:])
+ n280, err := m.ActiveVersion.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n275
+ i += n280
}
return i, nil
}
@@ -19021,6 +19288,30 @@ func (m *AdminScatterResponse_Range) Size() (n int) {
return n
}
+func (m *MigrateRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.RequestHeader.Size()
+ n += 1 + l + sovApi(uint64(l))
+ l = m.TargetVersion.Size()
+ n += 1 + l + sovApi(uint64(l))
+ return n
+}
+
+func (m *MigrateResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.ResponseHeader.Size()
+ n += 1 + l + sovApi(uint64(l))
+ return n
+}
+
func (m *AdminVerifyProtectedTimestampRequest) Size() (n int) {
if m == nil {
return 0
@@ -19746,6 +20037,18 @@ func (m *RequestUnion_AdminVerifyProtectedTimestamp) Size() (n int) {
}
return n
}
+func (m *RequestUnion_Migrate) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Migrate != nil {
+ l = m.Migrate.Size()
+ n += 2 + l + sovApi(uint64(l))
+ }
+ return n
+}
func (m *ResponseUnion) Size() (n int) {
if m == nil {
return 0
@@ -20274,6 +20577,18 @@ func (m *ResponseUnion_AdminVerifyProtectedTimestamp) Size() (n int) {
}
return n
}
+func (m *ResponseUnion_Migrate) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Migrate != nil {
+ l = m.Migrate.Size()
+ n += 2 + l + sovApi(uint64(l))
+ }
+ return n
+}
func (m *Header) Size() (n int) {
if m == nil {
return 0
@@ -32500,17 +32815,117 @@ func (m *ImportRequest_TableRekey) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: TableRekey: wiretype end group for non-group")
+ return fmt.Errorf("proto: TableRekey: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TableRekey: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field OldID", wireType)
+ }
+ m.OldID = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowApi
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.OldID |= (uint32(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field NewDesc", wireType)
+ }
+ var byteLen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowApi
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ byteLen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if byteLen < 0 {
+ return ErrInvalidLengthApi
+ }
+ postIndex := iNdEx + byteLen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.NewDesc = append(m.NewDesc[:0], dAtA[iNdEx:postIndex]...)
+ if m.NewDesc == nil {
+ m.NewDesc = []byte{}
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipApi(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthApi
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ImportResponse) Unmarshal(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 ErrIntOverflowApi
+ }
+ 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: ImportResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: TableRekey: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ImportResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field OldID", wireType)
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeader", wireType)
}
- m.OldID = 0
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowApi
@@ -32520,16 +32935,27 @@ func (m *ImportRequest_TableRekey) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- m.OldID |= (uint32(b) & 0x7F) << shift
+ msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
- case 2:
+ if msglen < 0 {
+ return ErrInvalidLengthApi
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.ResponseHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field NewDesc", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Imported", wireType)
}
- var byteLen int
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowApi
@@ -32539,21 +32965,20 @@ func (m *ImportRequest_TableRekey) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- byteLen |= (int(b) & 0x7F) << shift
+ msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
- if byteLen < 0 {
+ if msglen < 0 {
return ErrInvalidLengthApi
}
- postIndex := iNdEx + byteLen
+ postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.NewDesc = append(m.NewDesc[:0], dAtA[iNdEx:postIndex]...)
- if m.NewDesc == nil {
- m.NewDesc = []byte{}
+ if err := m.Imported.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
}
iNdEx = postIndex
default:
@@ -32577,7 +33002,7 @@ func (m *ImportRequest_TableRekey) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *ImportResponse) Unmarshal(dAtA []byte) error {
+func (m *AdminScatterRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -32600,15 +33025,15 @@ func (m *ImportResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ImportResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: AdminScatterRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ImportResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: AdminScatterRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeader", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field RequestHeader", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -32632,15 +33057,15 @@ func (m *ImportResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.ResponseHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.RequestHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Imported", wireType)
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field RandomizeLeases", wireType)
}
- var msglen int
+ var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowApi
@@ -32650,22 +33075,12 @@ func (m *ImportResponse) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= (int(b) & 0x7F) << shift
+ v |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
- return ErrInvalidLengthApi
- }
- postIndex := iNdEx + msglen
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if err := m.Imported.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
+ m.RandomizeLeases = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipApi(dAtA[iNdEx:])
@@ -32687,7 +33102,7 @@ func (m *ImportResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *AdminScatterRequest) Unmarshal(dAtA []byte) error {
+func (m *AdminScatterResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -32710,15 +33125,15 @@ func (m *AdminScatterRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: AdminScatterRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: AdminScatterResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: AdminScatterRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: AdminScatterResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RequestHeader", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeader", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -32742,15 +33157,15 @@ func (m *AdminScatterRequest) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.RequestHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.ResponseHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field RandomizeLeases", wireType)
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DeprecatedRanges", wireType)
}
- var v int
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowApi
@@ -32760,12 +33175,54 @@ func (m *AdminScatterRequest) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- v |= (int(b) & 0x7F) << shift
+ msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
- m.RandomizeLeases = bool(v != 0)
+ if msglen < 0 {
+ return ErrInvalidLengthApi
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.DeprecatedRanges = append(m.DeprecatedRanges, AdminScatterResponse_Range{})
+ if err := m.DeprecatedRanges[len(m.DeprecatedRanges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field RangeInfos", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowApi
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthApi
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.RangeInfos = append(m.RangeInfos, RangeInfo{})
+ if err := m.RangeInfos[len(m.RangeInfos)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipApi(dAtA[iNdEx:])
@@ -32787,7 +33244,7 @@ func (m *AdminScatterRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *AdminScatterResponse) Unmarshal(dAtA []byte) error {
+func (m *AdminScatterResponse_Range) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -32810,15 +33267,15 @@ func (m *AdminScatterResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: AdminScatterResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: Range: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: AdminScatterResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: Range: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeader", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Span", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -32842,13 +33299,63 @@ func (m *AdminScatterResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.ResponseHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Span.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
- case 2:
+ default:
+ iNdEx = preIndex
+ skippy, err := skipApi(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthApi
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MigrateRequest) Unmarshal(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 ErrIntOverflowApi
+ }
+ 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: MigrateRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MigrateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DeprecatedRanges", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field RequestHeader", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -32872,14 +33379,13 @@ func (m *AdminScatterResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.DeprecatedRanges = append(m.DeprecatedRanges, AdminScatterResponse_Range{})
- if err := m.DeprecatedRanges[len(m.DeprecatedRanges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.RequestHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
- case 3:
+ case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RangeInfos", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field TargetVersion", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -32903,8 +33409,7 @@ func (m *AdminScatterResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.RangeInfos = append(m.RangeInfos, RangeInfo{})
- if err := m.RangeInfos[len(m.RangeInfos)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.TargetVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -32929,7 +33434,7 @@ func (m *AdminScatterResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *AdminScatterResponse_Range) Unmarshal(dAtA []byte) error {
+func (m *MigrateResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -32952,15 +33457,15 @@ func (m *AdminScatterResponse_Range) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: Range: wiretype end group for non-group")
+ return fmt.Errorf("proto: MigrateResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: Range: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MigrateResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Span", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeader", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -32984,7 +33489,7 @@ func (m *AdminScatterResponse_Range) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.Span.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.ResponseHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -35924,6 +36429,38 @@ func (m *RequestUnion) Unmarshal(dAtA []byte) error {
}
m.Value = &RequestUnion_AdminVerifyProtectedTimestamp{v}
iNdEx = postIndex
+ case 50:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Migrate", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowApi
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthApi
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &MigrateRequest{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Value = &RequestUnion_Migrate{v}
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipApi(dAtA[iNdEx:])
@@ -37350,6 +37887,38 @@ func (m *ResponseUnion) Unmarshal(dAtA []byte) error {
}
m.Value = &ResponseUnion_AdminVerifyProtectedTimestamp{v}
iNdEx = postIndex
+ case 50:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Migrate", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowApi
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthApi
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &MigrateResponse{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Value = &ResponseUnion_Migrate{v}
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipApi(dAtA[iNdEx:])
@@ -39784,510 +40353,514 @@ var (
ErrIntOverflowApi = fmt.Errorf("proto: integer overflow")
)
-func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_api_763908915cb85439) }
-
-var fileDescriptor_api_763908915cb85439 = []byte{
- // 8018 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x6f, 0x6c, 0x1b, 0x49,
- 0x96, 0x9f, 0x9a, 0xa4, 0x24, 0xf2, 0x91, 0xa2, 0xa8, 0x92, 0x6c, 0xd3, 0x9a, 0x19, 0xcb, 0xa6,
- 0xff, 0x7b, 0x67, 0xa4, 0xb1, 0xbd, 0x93, 0x99, 0x1b, 0xcf, 0xcd, 0x9e, 0x44, 0xd1, 0x26, 0x25,
- 0x4b, 0x96, 0x9b, 0x94, 0xbd, 0x33, 0xb7, 0x9b, 0xde, 0x56, 0x77, 0x89, 0xea, 0x15, 0xd9, 0x4d,
- 0x77, 0x37, 0xf5, 0xc7, 0x40, 0x80, 0x4b, 0xf2, 0xe1, 0x82, 0x4b, 0x30, 0xc8, 0x87, 0x24, 0x08,
- 0x72, 0xb9, 0xec, 0x00, 0x17, 0xe4, 0x02, 0x1c, 0x36, 0xc8, 0xb7, 0x20, 0xc1, 0xe5, 0xcf, 0x87,
- 0x0b, 0xb0, 0x39, 0x5c, 0x80, 0x4d, 0x80, 0xe4, 0x16, 0x01, 0x22, 0xe4, 0xb4, 0x40, 0x10, 0xe4,
- 0x43, 0x80, 0xdc, 0x87, 0x04, 0x18, 0x20, 0x41, 0x50, 0xff, 0xfa, 0x0f, 0xd9, 0xa4, 0x28, 0x6f,
- 0x4f, 0x6e, 0x80, 0xfb, 0x22, 0xb1, 0x5f, 0xd5, 0x7b, 0x5d, 0xf5, 0xaa, 0xea, 0xd5, 0xfb, 0x55,
- 0xbd, 0xaa, 0x86, 0x19, 0xdb, 0x52, 0xb5, 0xbd, 0xce, 0xce, 0x92, 0xda, 0x31, 0x16, 0x3b, 0xb6,
- 0xe5, 0x5a, 0x68, 0x46, 0xb3, 0xb4, 0x7d, 0x4a, 0x5e, 0xe4, 0x89, 0xf3, 0xf7, 0xf6, 0x0f, 0x96,
- 0xf6, 0x0f, 0x1c, 0x6c, 0x1f, 0x60, 0x7b, 0x49, 0xb3, 0x4c, 0xad, 0x6b, 0xdb, 0xd8, 0xd4, 0x8e,
- 0x97, 0x5a, 0x96, 0xb6, 0x4f, 0xff, 0x18, 0x66, 0x93, 0xb1, 0xcf, 0x23, 0x21, 0x51, 0x57, 0x5d,
- 0x95, 0xd3, 0xe6, 0x04, 0x0d, 0xdb, 0xb6, 0x65, 0x3b, 0x9c, 0x7a, 0x51, 0x50, 0xdb, 0xd8, 0x55,
- 0x03, 0xb9, 0xdf, 0x72, 0x5c, 0xcb, 0x56, 0x9b, 0x78, 0x09, 0x9b, 0x4d, 0xc3, 0xc4, 0x24, 0xc3,
- 0x81, 0xa6, 0xf1, 0xc4, 0xb7, 0x23, 0x13, 0x1f, 0xf2, 0xd4, 0x62, 0xd7, 0x35, 0x5a, 0x4b, 0x7b,
- 0x2d, 0x6d, 0xc9, 0x35, 0xda, 0xd8, 0x71, 0xd5, 0x76, 0x87, 0xa7, 0xdc, 0xa3, 0x29, 0xae, 0xad,
- 0x6a, 0x86, 0xd9, 0x14, 0xff, 0x3b, 0x3b, 0x4b, 0x36, 0xd6, 0x2c, 0x5b, 0xc7, 0xba, 0xe2, 0x74,
- 0x54, 0x53, 0x14, 0xb7, 0x69, 0x35, 0x2d, 0xfa, 0x73, 0x89, 0xfc, 0x62, 0xd4, 0xd2, 0xef, 0x49,
- 0x30, 0x25, 0xe3, 0x57, 0x5d, 0xec, 0xb8, 0x55, 0xac, 0xea, 0xd8, 0x46, 0x97, 0x21, 0xb9, 0x8f,
- 0x8f, 0x8b, 0xc9, 0xab, 0xd2, 0x9d, 0xdc, 0xca, 0xe4, 0x57, 0x27, 0x0b, 0xc9, 0x75, 0x7c, 0x2c,
- 0x13, 0x1a, 0xba, 0x0a, 0x93, 0xd8, 0xd4, 0x15, 0x92, 0x9c, 0x0a, 0x27, 0x4f, 0x60, 0x53, 0x5f,
- 0xc7, 0xc7, 0xe8, 0x7b, 0x90, 0x76, 0x88, 0x34, 0x53, 0xc3, 0xc5, 0xf1, 0xab, 0xd2, 0x9d, 0xf1,
- 0x95, 0x5f, 0xf9, 0xea, 0x64, 0xe1, 0x93, 0xa6, 0xe1, 0xee, 0x75, 0x77, 0x16, 0x35, 0xab, 0xbd,
- 0xe4, 0xb5, 0x83, 0xbe, 0xe3, 0xff, 0x5e, 0xea, 0xec, 0x37, 0x97, 0x7a, 0x75, 0xb0, 0xd8, 0x38,
- 0x32, 0xeb, 0xf8, 0x95, 0xec, 0x49, 0xfc, 0x38, 0xf5, 0xdf, 0xbe, 0x5c, 0x90, 0xd6, 0x52, 0x69,
- 0xa9, 0x90, 0x58, 0x4b, 0xa5, 0x13, 0x85, 0x64, 0xe9, 0xb7, 0x93, 0x90, 0x97, 0xb1, 0xd3, 0xb1,
- 0x4c, 0x07, 0xf3, 0xf2, 0xbf, 0x0f, 0x49, 0xf7, 0xc8, 0xa4, 0xe5, 0xcf, 0x3e, 0xb8, 0xb2, 0xd8,
- 0xd7, 0xee, 0x8b, 0x0d, 0x5b, 0x35, 0x1d, 0x55, 0x73, 0x0d, 0xcb, 0x94, 0x49, 0x56, 0xf4, 0x11,
- 0x64, 0x6d, 0xec, 0x74, 0xdb, 0x98, 0xaa, 0x8b, 0x56, 0x2d, 0xfb, 0xe0, 0x52, 0x04, 0x67, 0xbd,
- 0xa3, 0x9a, 0x32, 0xb0, 0xbc, 0xe4, 0x37, 0xba, 0x0c, 0x69, 0xb3, 0xdb, 0x26, 0x0a, 0x71, 0x68,
- 0x75, 0x93, 0xf2, 0xa4, 0xd9, 0x6d, 0xaf, 0xe3, 0x63, 0x07, 0x7d, 0x17, 0x2e, 0xea, 0xb8, 0x63,
- 0x63, 0x4d, 0x75, 0xb1, 0xae, 0xd8, 0xaa, 0xd9, 0xc4, 0x8a, 0x61, 0xee, 0x5a, 0x4e, 0x71, 0xe2,
- 0x6a, 0xf2, 0x4e, 0xf6, 0xc1, 0xdb, 0x11, 0xf2, 0x65, 0x92, 0xab, 0x66, 0xee, 0x5a, 0x2b, 0xa9,
- 0x9f, 0x9c, 0x2c, 0x8c, 0xc9, 0x73, 0xbe, 0x04, 0x2f, 0xc9, 0x41, 0x75, 0x98, 0xe2, 0xc5, 0xb5,
- 0xb1, 0xea, 0x58, 0x66, 0x71, 0xf2, 0xaa, 0x74, 0x27, 0xff, 0x60, 0x31, 0x4a, 0x60, 0x48, 0x35,
- 0xe4, 0xb1, 0xdb, 0xc6, 0x32, 0xe5, 0x92, 0x73, 0x76, 0xe0, 0x09, 0xbd, 0x05, 0x19, 0x52, 0x93,
- 0x9d, 0x63, 0x17, 0x3b, 0xc5, 0x34, 0xad, 0x0a, 0xa9, 0xda, 0x0a, 0x79, 0x2e, 0x7d, 0x0a, 0xb9,
- 0x20, 0x2b, 0x42, 0x90, 0x97, 0x2b, 0xf5, 0xed, 0x8d, 0x8a, 0xb2, 0xbd, 0xb9, 0xbe, 0xf9, 0xec,
- 0xe5, 0x66, 0x61, 0x0c, 0xcd, 0x41, 0x81, 0xd3, 0xd6, 0x2b, 0x9f, 0x29, 0x4f, 0x6b, 0x1b, 0xb5,
- 0x46, 0x41, 0x9a, 0x4f, 0xfd, 0x95, 0xdf, 0xbe, 0x32, 0x56, 0x7a, 0x01, 0xf0, 0x04, 0xbb, 0xbc,
- 0x9b, 0xa1, 0x15, 0x98, 0xd8, 0xa3, 0xe5, 0x29, 0x4a, 0x54, 0xd3, 0x57, 0x23, 0x0b, 0x1e, 0xe8,
- 0x92, 0x2b, 0x69, 0xa2, 0x8d, 0x9f, 0x9e, 0x2c, 0x48, 0x32, 0xe7, 0x64, 0x3d, 0xa1, 0xf4, 0x2f,
- 0x25, 0xc8, 0x52, 0xc1, 0xac, 0x96, 0xa8, 0xdc, 0x23, 0xf9, 0xda, 0x99, 0x2a, 0xe9, 0x17, 0x8d,
- 0x16, 0x61, 0xfc, 0x40, 0x6d, 0x75, 0x71, 0x31, 0x41, 0x65, 0x14, 0x23, 0x64, 0xbc, 0x20, 0xe9,
- 0x32, 0xcb, 0x86, 0x1e, 0x41, 0xce, 0x30, 0x5d, 0x6c, 0xba, 0x0a, 0x63, 0x4b, 0x9e, 0xc1, 0x96,
- 0x65, 0xb9, 0xe9, 0x43, 0xe9, 0x9f, 0x49, 0x00, 0x5b, 0xdd, 0x38, 0x55, 0x83, 0xbe, 0x3d, 0x62,
- 0xf9, 0x79, 0x1f, 0xe3, 0xb5, 0xb8, 0x08, 0x13, 0x86, 0xd9, 0x32, 0x4c, 0x56, 0xfe, 0xb4, 0xcc,
- 0x9f, 0xd0, 0x1c, 0x8c, 0xef, 0xb4, 0x0c, 0x53, 0xa7, 0xa3, 0x22, 0x2d, 0xb3, 0x07, 0xae, 0x7e,
- 0x19, 0xb2, 0xb4, 0xec, 0x31, 0x6a, 0xbf, 0xf4, 0x87, 0x09, 0xb8, 0x50, 0xb6, 0x4c, 0xdd, 0x20,
- 0xc3, 0x53, 0x6d, 0x7d, 0x23, 0x74, 0xb3, 0x06, 0x81, 0x81, 0xa8, 0xe0, 0xa3, 0xce, 0x88, 0x2d,
- 0x8d, 0x7c, 0xae, 0xca, 0x51, 0x87, 0xd2, 0xa2, 0xf5, 0x89, 0xbe, 0x0d, 0x97, 0xd4, 0x56, 0xcb,
- 0x3a, 0x54, 0x8c, 0x5d, 0x45, 0xb7, 0xb0, 0xa3, 0x98, 0x96, 0xab, 0xe0, 0x23, 0xc3, 0x71, 0xa9,
- 0x59, 0x49, 0xcb, 0xb3, 0x34, 0xb9, 0xb6, 0xbb, 0x6a, 0x61, 0x67, 0xd3, 0x72, 0x2b, 0x24, 0x89,
- 0x8c, 0x59, 0x52, 0x18, 0x36, 0x66, 0x27, 0x88, 0x41, 0x96, 0xd3, 0xf8, 0xa8, 0x43, 0xc7, 0x2c,
- 0x6f, 0xa2, 0xef, 0xc3, 0xc5, 0x5e, 0x6d, 0xc6, 0xd9, 0x5a, 0xff, 0x5e, 0x82, 0x7c, 0xcd, 0x34,
- 0xdc, 0x6f, 0x44, 0x33, 0x79, 0xaa, 0x4d, 0x06, 0x55, 0x7b, 0x0f, 0x0a, 0xbb, 0xaa, 0xd1, 0x7a,
- 0x66, 0x36, 0xac, 0xf6, 0x8e, 0xe3, 0x5a, 0x26, 0x76, 0xb8, 0xee, 0xfb, 0xe8, 0x5c, 0x67, 0x2f,
- 0x60, 0xda, 0xab, 0x53, 0x9c, 0xca, 0x7a, 0x0d, 0x85, 0x9a, 0xa9, 0xd9, 0xb8, 0x8d, 0xcd, 0x58,
- 0xb5, 0xf5, 0x36, 0x64, 0x0c, 0x21, 0x97, 0x6a, 0x2c, 0x29, 0xfb, 0x04, 0x5e, 0xa7, 0x2e, 0xcc,
- 0x04, 0xde, 0x1d, 0xa7, 0xb9, 0x24, 0x13, 0x07, 0x3e, 0x54, 0xfc, 0xf6, 0x22, 0x13, 0x07, 0x3e,
- 0x64, 0xe6, 0xed, 0x33, 0x98, 0x5a, 0xc5, 0x2d, 0xec, 0xe2, 0xf8, 0x6d, 0xff, 0x36, 0xe4, 0x85,
- 0xe8, 0x38, 0x1b, 0xe9, 0xb7, 0x24, 0x40, 0x5c, 0x2e, 0x99, 0x71, 0xe3, 0x6c, 0xa7, 0x05, 0xe2,
- 0x66, 0xb8, 0x5d, 0xdb, 0x64, 0xfe, 0x02, 0xeb, 0xa5, 0xc0, 0x48, 0xd4, 0x65, 0xf0, 0x6d, 0x70,
- 0x2a, 0x68, 0x83, 0x3d, 0xb7, 0x87, 0x38, 0x3c, 0x87, 0x30, 0x1b, 0x2a, 0x5e, 0xbc, 0x4d, 0x99,
- 0xa2, 0x25, 0x4b, 0x5c, 0x4d, 0x06, 0x7d, 0x3b, 0x4a, 0x2c, 0xfd, 0x3d, 0x09, 0x66, 0xca, 0x2d,
- 0xac, 0xda, 0xb1, 0xeb, 0xe5, 0x3b, 0x90, 0xd6, 0xb1, 0xaa, 0xd3, 0x8a, 0xb3, 0x01, 0xff, 0x4e,
- 0x40, 0x0a, 0xf1, 0x70, 0x17, 0xf7, 0x5a, 0xda, 0x62, 0x43, 0xf8, 0xbe, 0x7c, 0xd4, 0x7b, 0x4c,
- 0xbc, 0x43, 0x7c, 0x06, 0x28, 0x58, 0xbe, 0x38, 0x3b, 0xc5, 0xdf, 0x97, 0x00, 0xc9, 0xf8, 0x00,
- 0xdb, 0x6e, 0xec, 0x95, 0x5f, 0x85, 0xac, 0xab, 0xda, 0x4d, 0xec, 0x2a, 0xc4, 0xb7, 0x3f, 0x4f,
- 0xfd, 0x81, 0xf1, 0x11, 0x32, 0xd7, 0xc0, 0xe7, 0x30, 0x1b, 0x2a, 0x65, 0x9c, 0x2a, 0xf8, 0x5f,
- 0x12, 0x64, 0xeb, 0x9a, 0x6a, 0xc6, 0x59, 0xf7, 0x4f, 0x21, 0xeb, 0x68, 0xaa, 0xa9, 0xec, 0x5a,
- 0x76, 0x5b, 0x75, 0x69, 0xa7, 0xcf, 0x87, 0xea, 0xee, 0xf9, 0xdd, 0x9a, 0x6a, 0x3e, 0xa6, 0x99,
- 0x64, 0x70, 0xbc, 0xdf, 0xe8, 0x39, 0x64, 0xf7, 0xf1, 0xb1, 0xc2, 0x91, 0x1a, 0x9d, 0x29, 0xf3,
- 0x0f, 0xde, 0x0f, 0xf0, 0xef, 0x1f, 0x2c, 0x0a, 0x80, 0xb7, 0x18, 0x00, 0x78, 0x8b, 0x84, 0x63,
- 0xb1, 0xee, 0xda, 0xd8, 0x6c, 0xba, 0x7b, 0x32, 0xec, 0xe3, 0xe3, 0xa7, 0x4c, 0x46, 0x70, 0xa8,
- 0xad, 0xa5, 0xd2, 0xc9, 0x42, 0xaa, 0xf4, 0xbf, 0x25, 0xc8, 0xb1, 0x8a, 0xc7, 0x39, 0xd4, 0x3e,
- 0x80, 0x94, 0x6d, 0x1d, 0xb2, 0xa1, 0x96, 0x7d, 0xf0, 0x56, 0x84, 0x88, 0x75, 0x7c, 0x1c, 0x9c,
- 0xe3, 0x68, 0x76, 0xb4, 0x02, 0xdc, 0x7b, 0x54, 0x28, 0x77, 0x72, 0x54, 0x6e, 0x60, 0x5c, 0x32,
- 0x91, 0x71, 0x1b, 0xa6, 0x77, 0x54, 0x57, 0xdb, 0x53, 0x6c, 0x5e, 0x48, 0x32, 0x1f, 0x26, 0xef,
- 0xe4, 0xe4, 0x3c, 0x25, 0x8b, 0xa2, 0x3b, 0xa5, 0xff, 0x23, 0x7a, 0xbd, 0x83, 0xff, 0x4c, 0xb6,
- 0xfc, 0xff, 0x95, 0xf8, 0x78, 0x12, 0xf5, 0xff, 0xb3, 0xd6, 0x01, 0x7e, 0x94, 0x80, 0x4b, 0xe5,
- 0x3d, 0xac, 0xed, 0x97, 0x2d, 0xd3, 0x31, 0x1c, 0x97, 0x68, 0x30, 0xce, 0x5e, 0xf0, 0x16, 0x64,
- 0x0e, 0x0d, 0x77, 0x4f, 0xd1, 0x8d, 0xdd, 0x5d, 0x6a, 0xf9, 0xd2, 0x72, 0x9a, 0x10, 0x56, 0x8d,
- 0xdd, 0x5d, 0xf4, 0x10, 0x52, 0x6d, 0x4b, 0x67, 0x4e, 0x76, 0xfe, 0xc1, 0x42, 0x84, 0x78, 0x5a,
- 0x34, 0xa7, 0xdb, 0xde, 0xb0, 0x74, 0x2c, 0xd3, 0xcc, 0xe8, 0x0a, 0x80, 0x46, 0xa8, 0x1d, 0xcb,
- 0x30, 0x5d, 0x3e, 0x8b, 0x06, 0x28, 0xa8, 0x0a, 0x19, 0x17, 0xdb, 0x6d, 0xc3, 0x54, 0x5d, 0x5c,
- 0x1c, 0xa7, 0xca, 0xbb, 0x11, 0x59, 0xf0, 0x4e, 0xcb, 0xd0, 0xd4, 0x55, 0xec, 0x68, 0xb6, 0xd1,
- 0x71, 0x2d, 0x9b, 0x6b, 0xd1, 0x67, 0xe6, 0x16, 0xf7, 0x8b, 0x14, 0x14, 0xfb, 0x35, 0x14, 0x67,
- 0x3f, 0xd9, 0x82, 0x09, 0x82, 0xd3, 0x5b, 0x2e, 0xef, 0x29, 0x0f, 0x06, 0x29, 0x22, 0xa2, 0x04,
- 0x14, 0xef, 0xb7, 0x5c, 0x5e, 0x78, 0x2e, 0x67, 0xfe, 0xf7, 0x24, 0x98, 0x60, 0x09, 0xe8, 0x3e,
- 0xa4, 0xf9, 0xc2, 0x84, 0x4e, 0xcb, 0x98, 0x5c, 0xb9, 0x78, 0x7a, 0xb2, 0x30, 0xc9, 0xd6, 0x1a,
- 0x56, 0xbf, 0xf2, 0x7f, 0xca, 0x93, 0x34, 0x5f, 0x4d, 0x27, 0x6d, 0xe6, 0xb8, 0xaa, 0xed, 0xd2,
- 0x45, 0xa0, 0x04, 0xc3, 0x1c, 0x94, 0xb0, 0x8e, 0x8f, 0xd1, 0x1a, 0x4c, 0x38, 0xae, 0xea, 0x76,
- 0x1d, 0xde, 0x6a, 0xe7, 0x2a, 0x6c, 0x9d, 0x72, 0xca, 0x5c, 0x02, 0x71, 0x86, 0x74, 0xec, 0xaa,
- 0x46, 0x8b, 0x36, 0x63, 0x46, 0xe6, 0x4f, 0xa5, 0xdf, 0x94, 0x60, 0x82, 0x65, 0x45, 0x97, 0x60,
- 0x56, 0x5e, 0xde, 0x7c, 0x52, 0x51, 0x6a, 0x9b, 0xab, 0x95, 0x46, 0x45, 0xde, 0xa8, 0x6d, 0x2e,
- 0x37, 0x2a, 0x85, 0x31, 0x74, 0x11, 0x90, 0x48, 0x28, 0x3f, 0xdb, 0xac, 0xd7, 0xea, 0x8d, 0xca,
- 0x66, 0xa3, 0x20, 0xd1, 0x35, 0x0a, 0x4a, 0x0f, 0x50, 0x13, 0xe8, 0x06, 0x5c, 0xed, 0xa5, 0x2a,
- 0xf5, 0xc6, 0x72, 0xa3, 0xae, 0x54, 0xea, 0x8d, 0xda, 0xc6, 0x72, 0xa3, 0xb2, 0x5a, 0x48, 0x0e,
- 0xc9, 0x45, 0x5e, 0x22, 0xcb, 0x95, 0x72, 0xa3, 0x90, 0x2a, 0xbd, 0x86, 0x0b, 0x32, 0xd6, 0xac,
- 0x76, 0xa7, 0xeb, 0x62, 0x52, 0x4a, 0x27, 0xce, 0xf1, 0x72, 0x09, 0x26, 0x75, 0xfb, 0x58, 0xb1,
- 0xbb, 0x26, 0x1f, 0x2d, 0x13, 0xba, 0x7d, 0x2c, 0x77, 0x4d, 0xde, 0x19, 0xff, 0xb1, 0x04, 0x17,
- 0x7b, 0x5f, 0x1e, 0x67, 0x57, 0x7c, 0x0e, 0x59, 0x55, 0xd7, 0xb1, 0xae, 0xe8, 0xb8, 0xe5, 0xaa,
- 0xdc, 0x55, 0xb9, 0x17, 0x90, 0xc4, 0x17, 0xf0, 0x16, 0xbd, 0x05, 0xbc, 0x8d, 0x17, 0xe5, 0x32,
- 0x2d, 0xc8, 0x2a, 0xe1, 0x10, 0xa6, 0x88, 0x0a, 0xa1, 0x94, 0xd2, 0x9f, 0xa4, 0x60, 0xaa, 0x62,
- 0xea, 0x8d, 0xa3, 0x58, 0x67, 0x97, 0x8b, 0x30, 0xa1, 0x59, 0xed, 0xb6, 0xe1, 0x0a, 0x35, 0xb1,
- 0x27, 0xf4, 0x4b, 0x01, 0x47, 0x33, 0x39, 0x82, 0xa3, 0xe5, 0xbb, 0x98, 0xe8, 0x07, 0x70, 0x89,
- 0x58, 0x50, 0xdb, 0x54, 0x5b, 0x0a, 0x93, 0xa6, 0xb8, 0xb6, 0xd1, 0x6c, 0x62, 0x9b, 0x2f, 0x17,
- 0xde, 0x89, 0x28, 0x67, 0x8d, 0x73, 0x94, 0x29, 0x43, 0x83, 0xe5, 0x97, 0x2f, 0x18, 0x51, 0x64,
- 0xf4, 0x09, 0x00, 0x99, 0x9c, 0xe8, 0x12, 0xa4, 0xc3, 0x6d, 0xd3, 0xa0, 0x35, 0x48, 0x61, 0x8e,
- 0x08, 0x03, 0x79, 0x76, 0xd0, 0x12, 0xc1, 0x16, 0xaf, 0xba, 0x86, 0x8d, 0x95, 0xfb, 0x1d, 0x8d,
- 0x2e, 0x06, 0xa4, 0x57, 0xf2, 0xa7, 0x27, 0x0b, 0x20, 0x33, 0xf2, 0xfd, 0xad, 0x32, 0xc1, 0x1a,
- 0xec, 0x77, 0x47, 0x43, 0x2f, 0xe1, 0x6e, 0x60, 0x4d, 0x83, 0xcc, 0xc5, 0xbc, 0x5a, 0xaa, 0xab,
- 0xec, 0x19, 0xcd, 0x3d, 0x6c, 0x2b, 0xde, 0x62, 0x33, 0x5d, 0x0f, 0x4c, 0xcb, 0x37, 0x7c, 0x86,
- 0xb2, 0x6a, 0xb2, 0xd2, 0x2f, 0xbb, 0x55, 0x9a, 0xd9, 0xd3, 0x19, 0x51, 0x7e, 0xc7, 0x32, 0x1c,
- 0xcb, 0x2c, 0x66, 0x98, 0xf2, 0xd9, 0x13, 0xba, 0x0b, 0x05, 0xf7, 0xc8, 0x54, 0xf6, 0xb0, 0x6a,
- 0xbb, 0x3b, 0x58, 0x75, 0xc9, 0xbc, 0x0d, 0x34, 0xc7, 0xb4, 0x7b, 0x64, 0x56, 0x03, 0x64, 0xf4,
- 0x1c, 0x0a, 0x86, 0xa9, 0xec, 0xb6, 0x8c, 0xe6, 0x9e, 0xab, 0x1c, 0xda, 0x86, 0x8b, 0x9d, 0xe2,
- 0x0c, 0x55, 0x48, 0x54, 0xbf, 0xad, 0xf3, 0xd5, 0x61, 0xfd, 0x25, 0xc9, 0xc9, 0x55, 0x93, 0x37,
- 0xcc, 0xc7, 0x94, 0x9f, 0x12, 0x1d, 0x6f, 0x76, 0x9f, 0x2c, 0xa4, 0x4b, 0xff, 0x59, 0x82, 0xbc,
- 0xe8, 0x74, 0x71, 0x8e, 0x8f, 0x3b, 0x50, 0xb0, 0x4c, 0xac, 0x74, 0xf6, 0x54, 0x07, 0x73, 0x6d,
- 0xf2, 0x29, 0x28, 0x6f, 0x99, 0x78, 0x8b, 0x90, 0x99, 0xd2, 0xd0, 0x16, 0xcc, 0x38, 0xae, 0xda,
- 0x34, 0xcc, 0x66, 0x40, 0xc9, 0xe3, 0xa3, 0xbb, 0xfe, 0x05, 0xce, 0xed, 0xd1, 0x43, 0x7e, 0xcb,
- 0x1f, 0x49, 0x30, 0xb3, 0xac, 0xb7, 0x0d, 0xb3, 0xde, 0x69, 0x19, 0xb1, 0xae, 0x34, 0xdc, 0x80,
- 0x8c, 0x43, 0x64, 0xfa, 0xc6, 0xdf, 0x47, 0x89, 0x69, 0x9a, 0x42, 0x66, 0x81, 0xa7, 0x30, 0x8d,
- 0x8f, 0x3a, 0x86, 0xad, 0xba, 0x86, 0x65, 0x32, 0x58, 0x93, 0x1a, 0xbd, 0x6e, 0x79, 0x9f, 0xd7,
- 0x87, 0x36, 0xbc, 0x66, 0x9f, 0x01, 0x0a, 0x56, 0x2c, 0x4e, 0x7c, 0xa3, 0xc0, 0x2c, 0x15, 0xbd,
- 0x6d, 0x3a, 0x31, 0x6b, 0x8d, 0x5b, 0xe7, 0x5f, 0x85, 0xb9, 0xf0, 0x0b, 0xe2, 0x2c, 0xfd, 0xf7,
- 0x79, 0x8b, 0x6f, 0x60, 0xbb, 0xf9, 0x35, 0xac, 0xb5, 0x08, 0xbd, 0x73, 0xf1, 0x71, 0x96, 0xfc,
- 0x37, 0x24, 0xb8, 0x4c, 0x65, 0xd3, 0x5d, 0x99, 0x5d, 0x6c, 0x3f, 0xc5, 0xaa, 0x13, 0x2b, 0xc2,
- 0xbe, 0x0e, 0x13, 0x0c, 0x29, 0xd3, 0x1e, 0x3b, 0xbe, 0x92, 0x25, 0x7e, 0x4d, 0xdd, 0xb5, 0x6c,
- 0xe2, 0xd7, 0xf0, 0x24, 0x5e, 0x4f, 0x15, 0xe6, 0xa3, 0xca, 0x12, 0xf3, 0x52, 0xc2, 0x0c, 0x77,
- 0x2f, 0x49, 0x17, 0x2f, 0xef, 0x11, 0xbf, 0x0a, 0x55, 0x20, 0xab, 0xd1, 0x5f, 0x8a, 0x7b, 0xdc,
- 0xc1, 0x54, 0x7e, 0x7e, 0x98, 0x67, 0xca, 0xd8, 0x1a, 0xc7, 0x1d, 0x4c, 0xdc, 0x5b, 0xf1, 0x9b,
- 0xa8, 0x2b, 0x50, 0xd5, 0xa1, 0xbe, 0x2d, 0x1d, 0x5f, 0x34, 0xaf, 0x70, 0x0f, 0x43, 0x9a, 0xf8,
- 0xa7, 0x49, 0xae, 0x0a, 0xf6, 0x26, 0xce, 0x14, 0xab, 0x37, 0xf3, 0x79, 0x68, 0x83, 0x2c, 0x58,
- 0xfd, 0xc4, 0x39, 0xaa, 0x1f, 0x58, 0x99, 0xf7, 0xa9, 0xe8, 0x33, 0x08, 0xac, 0xbd, 0x2b, 0xac,
- 0x66, 0x02, 0x2d, 0x9d, 0x47, 0x29, 0x33, 0xbe, 0x14, 0x46, 0x77, 0x50, 0x19, 0xd2, 0xf8, 0xa8,
- 0xa3, 0xe8, 0xd8, 0xd1, 0xb8, 0x59, 0x2b, 0x0d, 0xda, 0xc9, 0xeb, 0xc3, 0x0f, 0x93, 0xf8, 0xa8,
- 0x43, 0x88, 0x68, 0x9b, 0xcc, 0x70, 0xc2, 0x9d, 0xa0, 0xc5, 0x76, 0xce, 0x86, 0x23, 0x7e, 0x7f,
- 0xe1, 0xe2, 0xa6, 0x3d, 0x4f, 0x82, 0x89, 0xe0, 0x6d, 0xf7, 0xa5, 0x04, 0x6f, 0x45, 0xb6, 0x5d,
- 0x9c, 0x93, 0xdd, 0x27, 0x90, 0xa2, 0x2a, 0x48, 0x9c, 0x53, 0x05, 0x94, 0xab, 0xf4, 0xbb, 0x62,
- 0xd4, 0xcb, 0xb8, 0x65, 0x11, 0xf5, 0x7e, 0x0d, 0xeb, 0x6a, 0x93, 0xa2, 0xd9, 0x13, 0xe7, 0x6e,
- 0x76, 0xc1, 0xda, 0x63, 0x16, 0x7a, 0x0a, 0x1b, 0xa7, 0x59, 0xf8, 0x5b, 0x12, 0xcc, 0x7a, 0x3e,
- 0x50, 0xcc, 0xee, 0xf0, 0x07, 0x90, 0x34, 0xad, 0xc3, 0xf3, 0x2c, 0x2d, 0x92, 0xfc, 0xfe, 0xb4,
- 0x15, 0x2e, 0x57, 0x9c, 0xb5, 0xfe, 0x37, 0x09, 0xc8, 0x3c, 0x29, 0xc7, 0x59, 0xd7, 0x4f, 0xf8,
- 0x12, 0x36, 0x1b, 0xea, 0x51, 0xdd, 0xd2, 0x7b, 0xdf, 0xe2, 0x93, 0xf2, 0x3a, 0x3e, 0x16, 0xdd,
- 0x92, 0x70, 0xa1, 0x65, 0xc8, 0xb8, 0x7b, 0x36, 0x76, 0xf6, 0xac, 0x96, 0x7e, 0x1e, 0x9f, 0xc5,
- 0xe7, 0x9a, 0xdf, 0x87, 0x71, 0x2a, 0x57, 0x84, 0x51, 0x48, 0x11, 0x61, 0x14, 0xe4, 0x35, 0x9e,
- 0xdb, 0x97, 0x38, 0xcf, 0x6b, 0x04, 0x81, 0x35, 0x8e, 0xe7, 0x1b, 0x8d, 0x17, 0x26, 0x4a, 0xcf,
- 0x01, 0x48, 0xd5, 0xe2, 0x6c, 0x9e, 0xbf, 0x96, 0x84, 0xfc, 0x56, 0xd7, 0xd9, 0x8b, 0xb9, 0x3f,
- 0x96, 0x01, 0x3a, 0x5d, 0x87, 0x22, 0x8c, 0x23, 0x93, 0xd7, 0xff, 0x8c, 0x38, 0x0d, 0xa1, 0x00,
- 0xc6, 0xd7, 0x38, 0x32, 0x51, 0x95, 0x0b, 0xc1, 0x8a, 0x1f, 0xec, 0x71, 0x7d, 0x18, 0x16, 0x6d,
- 0x1c, 0x99, 0x1b, 0xd8, 0x03, 0xa1, 0x4c, 0x12, 0x26, 0x92, 0x3e, 0x81, 0x49, 0xf2, 0xa0, 0xb8,
- 0xd6, 0x79, 0x9a, 0x7c, 0x82, 0xf0, 0x34, 0x2c, 0xf4, 0x08, 0x32, 0x8c, 0x9b, 0x4c, 0x5c, 0x13,
- 0x74, 0xe2, 0x8a, 0xaa, 0x0b, 0x57, 0x23, 0x9d, 0xb2, 0xd2, 0x94, 0x95, 0x4c, 0x53, 0x73, 0x30,
- 0xbe, 0x6b, 0xd9, 0x1a, 0xa6, 0x11, 0x1c, 0x69, 0x99, 0x3d, 0x04, 0x5b, 0x75, 0x2d, 0x95, 0x4e,
- 0x17, 0x32, 0x6b, 0xa9, 0x74, 0xa6, 0x00, 0xa5, 0xdf, 0x94, 0x60, 0xda, 0x6b, 0x8e, 0x38, 0x6d,
- 0x79, 0x39, 0xa4, 0xcb, 0xf3, 0x37, 0x08, 0x51, 0x63, 0xe9, 0xdf, 0x52, 0xc7, 0x46, 0xb3, 0x0e,
- 0x68, 0xfb, 0xc4, 0xd9, 0x5f, 0x1e, 0xb1, 0x80, 0x9e, 0xc4, 0x79, 0xdb, 0x98, 0xc6, 0xf6, 0xdc,
- 0x87, 0x39, 0xa3, 0x4d, 0xac, 0xbc, 0xe1, 0xb6, 0x8e, 0x39, 0x2a, 0x73, 0xb1, 0xd8, 0x23, 0x9e,
- 0xf5, 0xd3, 0xca, 0x22, 0x89, 0x1b, 0x3e, 0xb6, 0xe7, 0xe3, 0xd7, 0x27, 0x4e, 0x85, 0xd7, 0x60,
- 0xca, 0x66, 0xa2, 0x89, 0x77, 0x72, 0x4e, 0x9d, 0xe7, 0x3c, 0x56, 0xa2, 0xf6, 0xdf, 0x49, 0xc0,
- 0xf4, 0xf3, 0x2e, 0xb6, 0x8f, 0xbf, 0x49, 0x4a, 0xbf, 0x05, 0xd3, 0x87, 0xaa, 0xe1, 0x2a, 0xbb,
- 0x96, 0xad, 0x74, 0x3b, 0xba, 0xea, 0x8a, 0xa8, 0x92, 0x29, 0x42, 0x7e, 0x6c, 0xd9, 0xdb, 0x94,
- 0x88, 0x30, 0xa0, 0x7d, 0xd3, 0x3a, 0x34, 0x15, 0x42, 0xa6, 0x68, 0xf8, 0xc8, 0xe4, 0x8b, 0xd1,
- 0x2b, 0x1f, 0xfe, 0xa7, 0x93, 0x85, 0x87, 0x23, 0xc5, 0x8d, 0xd1, 0x18, 0xb8, 0x6e, 0xd7, 0xd0,
- 0x17, 0xb7, 0xb7, 0x6b, 0xab, 0x72, 0x81, 0x8a, 0x7c, 0xc9, 0x24, 0x36, 0x8e, 0x4c, 0x31, 0x8b,
- 0xff, 0x83, 0x04, 0x14, 0x7c, 0x4d, 0xc5, 0xd9, 0x9c, 0x15, 0xc8, 0xbe, 0xea, 0x62, 0xdb, 0x78,
- 0x83, 0xc6, 0x04, 0xce, 0x48, 0x0c, 0xd1, 0xe7, 0x90, 0x0b, 0xe9, 0x21, 0xf9, 0x8b, 0xe9, 0x21,
- 0x7b, 0xe8, 0xab, 0x00, 0xdd, 0x83, 0x19, 0xf7, 0xc8, 0x54, 0x58, 0x5c, 0x20, 0x8b, 0x2c, 0x11,
- 0x61, 0x10, 0xd3, 0x2e, 0xd1, 0x07, 0xa1, 0xd3, 0xa8, 0x12, 0xa7, 0xf4, 0xaf, 0x25, 0x40, 0x54,
- 0x51, 0x35, 0xb6, 0x67, 0xf0, 0x4d, 0xe9, 0x55, 0x77, 0xa0, 0x40, 0x23, 0x2d, 0x15, 0x63, 0x57,
- 0x69, 0x1b, 0x8e, 0x63, 0x98, 0x4d, 0xde, 0xad, 0xf2, 0x94, 0x5e, 0xdb, 0xdd, 0x60, 0x54, 0xde,
- 0xe0, 0x7f, 0x01, 0x66, 0x43, 0xd5, 0x88, 0xb3, 0xc9, 0xaf, 0x41, 0x6e, 0xd7, 0xea, 0x9a, 0xba,
- 0xc2, 0xf6, 0x55, 0xf8, 0x42, 0x63, 0x96, 0xd2, 0xd8, 0xfb, 0x4a, 0xff, 0x33, 0x01, 0x73, 0x32,
- 0x76, 0xac, 0xd6, 0x01, 0x8e, 0x5f, 0x91, 0x55, 0xe0, 0x3b, 0x3a, 0xca, 0x1b, 0xe9, 0x33, 0xc3,
- 0x98, 0xd9, 0xf4, 0x17, 0x5e, 0xb3, 0xbf, 0x31, 0xbc, 0xdf, 0xf6, 0xaf, 0xd2, 0xf3, 0xd5, 0xbe,
- 0x54, 0x68, 0xb5, 0xcf, 0x82, 0x69, 0xa3, 0x69, 0x5a, 0xc4, 0xbe, 0x39, 0xf8, 0x95, 0xd9, 0x6d,
- 0x0b, 0x7c, 0xb3, 0x38, 0xac, 0x90, 0x35, 0xc6, 0x52, 0xc7, 0xaf, 0x36, 0xbb, 0x6d, 0xea, 0x65,
- 0xaf, 0x5c, 0x24, 0xe5, 0x3d, 0x3d, 0x59, 0xc8, 0x87, 0xd2, 0x1c, 0x39, 0x6f, 0x78, 0xcf, 0x44,
- 0x3a, 0x6f, 0xf2, 0xef, 0xc1, 0x85, 0x1e, 0x95, 0xc7, 0xe9, 0x0f, 0xfd, 0xab, 0x24, 0x5c, 0x0e,
- 0x8b, 0x8f, 0x1b, 0xb5, 0x7c, 0xd3, 0x9b, 0xb5, 0x0a, 0x53, 0x6d, 0xc3, 0x7c, 0xb3, 0x45, 0xcb,
- 0x5c, 0xdb, 0x30, 0xfd, 0x65, 0xe2, 0x88, 0x0e, 0x32, 0xf1, 0xff, 0xa1, 0x83, 0xa8, 0x30, 0x1f,
- 0xd5, 0x82, 0x71, 0xf6, 0x92, 0x2f, 0x24, 0xc8, 0xc5, 0xbd, 0x0e, 0xf7, 0x66, 0x11, 0x71, 0xbc,
- 0xce, 0x0d, 0x98, 0xfa, 0x1a, 0x16, 0xee, 0x7e, 0x47, 0x02, 0xd4, 0xb0, 0xbb, 0x26, 0x01, 0xc4,
- 0x4f, 0xad, 0x66, 0x9c, 0x95, 0x9d, 0x83, 0x71, 0xc3, 0xd4, 0xf1, 0x11, 0xad, 0x6c, 0x4a, 0x66,
- 0x0f, 0xa1, 0xcd, 0xca, 0xe4, 0x48, 0x9b, 0x95, 0x7e, 0x58, 0x4c, 0xa8, 0xa0, 0x71, 0x6a, 0xe1,
- 0x1f, 0x25, 0x60, 0x96, 0x57, 0x27, 0xf6, 0x85, 0xcb, 0x6f, 0xc3, 0x78, 0x8b, 0xc8, 0x1c, 0xd2,
- 0xe6, 0xf4, 0x9d, 0xa2, 0xcd, 0x69, 0x66, 0xf4, 0xcb, 0x00, 0x1d, 0x1b, 0x1f, 0x28, 0x8c, 0x35,
- 0x39, 0x12, 0x6b, 0x86, 0x70, 0x50, 0x02, 0xfa, 0x2e, 0x4c, 0x93, 0x11, 0xde, 0xb1, 0xad, 0x8e,
- 0xe5, 0x10, 0x87, 0xc6, 0x19, 0x0d, 0x15, 0xcd, 0x9c, 0x9e, 0x2c, 0x4c, 0x6d, 0x18, 0xe6, 0x16,
- 0x67, 0x6c, 0xd4, 0x65, 0x62, 0x2a, 0xbc, 0x47, 0x31, 0x00, 0xff, 0x83, 0x04, 0x73, 0x5f, 0xdb,
- 0x52, 0xef, 0x9f, 0x86, 0xc6, 0xbc, 0x99, 0xa7, 0x40, 0x1f, 0x6b, 0xe6, 0xae, 0x15, 0xff, 0x02,
- 0xfc, 0x17, 0x12, 0xcc, 0x04, 0xc4, 0xc7, 0xe9, 0xc9, 0xbc, 0x91, 0xce, 0x4a, 0xbf, 0x4a, 0x7c,
- 0x9b, 0x60, 0xb7, 0x8f, 0x73, 0x50, 0xfd, 0xf3, 0x04, 0x5c, 0x2c, 0xb3, 0x6d, 0x6c, 0x11, 0xe3,
- 0x11, 0x67, 0x2f, 0x29, 0xc2, 0xe4, 0x01, 0xb6, 0x1d, 0xc3, 0x62, 0x33, 0xec, 0x94, 0x2c, 0x1e,
- 0xd1, 0x3c, 0xa4, 0x1d, 0x53, 0xed, 0x38, 0x7b, 0x96, 0xd8, 0xb9, 0xf3, 0x9e, 0xbd, 0x78, 0x94,
- 0xf1, 0x37, 0x8f, 0x47, 0x99, 0x18, 0x1e, 0x8f, 0x32, 0xf9, 0x0b, 0xc7, 0xa3, 0xf0, 0x6d, 0xb2,
- 0x3f, 0x90, 0xe0, 0x52, 0x9f, 0xfe, 0xe2, 0xec, 0x33, 0x3f, 0x84, 0xac, 0xc6, 0x05, 0x13, 0x6b,
- 0xcc, 0x76, 0x02, 0x6b, 0x24, 0xdb, 0x1b, 0x82, 0x95, 0xd3, 0x93, 0x05, 0x10, 0x45, 0xad, 0xad,
- 0x72, 0x15, 0x91, 0xdf, 0x7a, 0xe9, 0x3f, 0xe6, 0x60, 0xba, 0x72, 0xc4, 0xd6, 0xb9, 0xeb, 0xcc,
- 0x1f, 0x40, 0x8f, 0x21, 0xdd, 0xb1, 0xad, 0x03, 0x43, 0x54, 0x23, 0x1f, 0x0a, 0x43, 0x10, 0xd5,
- 0xe8, 0xe1, 0xda, 0xe2, 0x1c, 0xb2, 0xc7, 0x8b, 0x1a, 0x90, 0x79, 0x6a, 0x69, 0x6a, 0xeb, 0xb1,
- 0xd1, 0x12, 0xfd, 0xff, 0xfd, 0xb3, 0x05, 0x2d, 0x7a, 0x3c, 0x5b, 0xaa, 0xbb, 0x27, 0x9a, 0xc2,
- 0x23, 0xa2, 0x1a, 0xa4, 0xab, 0xae, 0xdb, 0x21, 0x89, 0xdc, 0x9a, 0xdc, 0x1e, 0x41, 0x28, 0x61,
- 0x11, 0x91, 0xad, 0x82, 0x1d, 0x35, 0x60, 0xe6, 0x89, 0x65, 0x35, 0x5b, 0xb8, 0xdc, 0xb2, 0xba,
- 0x7a, 0xd9, 0x32, 0x77, 0x8d, 0x26, 0xb7, 0xc7, 0xb7, 0x46, 0x90, 0xf9, 0xa4, 0x5c, 0x97, 0xfb,
- 0x05, 0xa0, 0x65, 0x48, 0xd7, 0x1f, 0x72, 0x61, 0xcc, 0x81, 0xbb, 0x39, 0x82, 0xb0, 0xfa, 0x43,
- 0xd9, 0x63, 0x43, 0x6b, 0x90, 0x5d, 0x7e, 0xdd, 0xb5, 0x31, 0x97, 0x32, 0x31, 0x30, 0x06, 0xa2,
- 0x57, 0x0a, 0xe5, 0x92, 0x83, 0xcc, 0xa8, 0x0e, 0xf9, 0x97, 0x96, 0xbd, 0xdf, 0xb2, 0x54, 0x51,
- 0xc3, 0x49, 0x2a, 0xee, 0x5b, 0x23, 0x88, 0x13, 0x8c, 0x72, 0x8f, 0x08, 0xf4, 0x3d, 0x98, 0x26,
- 0x8d, 0xd1, 0x50, 0x77, 0x5a, 0xa2, 0x90, 0x69, 0x2a, 0xf5, 0xdd, 0x11, 0xa4, 0x7a, 0x9c, 0x62,
- 0xa3, 0xa5, 0x47, 0xd4, 0xfc, 0x77, 0x61, 0x2a, 0xd4, 0x09, 0x10, 0x82, 0x54, 0x87, 0xb4, 0xb7,
- 0x44, 0x63, 0x95, 0xe8, 0x6f, 0xf4, 0x1e, 0x4c, 0x9a, 0x96, 0x8e, 0xc5, 0x08, 0x99, 0x5a, 0x99,
- 0x3b, 0x3d, 0x59, 0x98, 0xd8, 0xb4, 0x74, 0xe6, 0xae, 0xf0, 0x5f, 0xf2, 0x04, 0xc9, 0x24, 0x9c,
- 0x95, 0xf9, 0x5b, 0x90, 0x22, 0xad, 0x4f, 0x8c, 0xd4, 0x8e, 0xea, 0xe0, 0x6d, 0xdb, 0xe0, 0x32,
- 0xc5, 0x23, 0xcf, 0xf7, 0x33, 0x09, 0x12, 0xf5, 0x87, 0xc4, 0x51, 0xdf, 0xe9, 0x6a, 0xfb, 0xd8,
- 0xe5, 0xb9, 0xf8, 0x13, 0x75, 0xe0, 0x6d, 0xbc, 0x6b, 0x30, 0x1f, 0x2a, 0x23, 0xf3, 0x27, 0xf4,
- 0x0e, 0x80, 0xaa, 0x69, 0xd8, 0x71, 0x14, 0x71, 0xc6, 0x2f, 0x23, 0x67, 0x18, 0x65, 0x1d, 0x1f,
- 0x13, 0x36, 0x07, 0x6b, 0x36, 0x76, 0x45, 0xd0, 0x15, 0x7b, 0x22, 0x6c, 0x2e, 0x6e, 0x77, 0x14,
- 0xd7, 0xda, 0xc7, 0x26, 0xed, 0x33, 0x19, 0x62, 0x7c, 0xda, 0x9d, 0x06, 0x21, 0x10, 0xbb, 0x89,
- 0x4d, 0xdd, 0x37, 0x72, 0x19, 0xd9, 0x7b, 0x26, 0x22, 0x6d, 0xdc, 0x34, 0xf8, 0x31, 0xb5, 0x8c,
- 0xcc, 0x9f, 0x88, 0xc6, 0xd4, 0xae, 0xbb, 0x47, 0x5b, 0x25, 0x23, 0xd3, 0xdf, 0xbc, 0x6a, 0x7f,
- 0x47, 0x82, 0xe4, 0x93, 0x72, 0xfd, 0xdc, 0x75, 0x13, 0x12, 0x93, 0xbe, 0x44, 0x1a, 0xeb, 0x68,
- 0xb4, 0x5a, 0x86, 0xd9, 0x24, 0x2e, 0xcd, 0x0f, 0xb1, 0x26, 0x6a, 0x96, 0xe7, 0xe4, 0x2d, 0x46,
- 0x45, 0x57, 0x21, 0xab, 0xd9, 0x58, 0xc7, 0xa6, 0x6b, 0xa8, 0x2d, 0x87, 0x57, 0x31, 0x48, 0xe2,
- 0x85, 0xfb, 0x75, 0x09, 0xc6, 0x69, 0xe7, 0x45, 0x6f, 0x43, 0x46, 0xb3, 0x4c, 0x57, 0x35, 0x4c,
- 0x6e, 0x85, 0x32, 0xb2, 0x4f, 0x18, 0x58, 0xc8, 0x6b, 0x90, 0x53, 0x35, 0xcd, 0xea, 0x9a, 0xae,
- 0x62, 0xaa, 0x6d, 0xcc, 0x0b, 0x9b, 0xe5, 0xb4, 0x4d, 0xb5, 0x8d, 0xd1, 0x02, 0x88, 0x47, 0xef,
- 0xa4, 0x65, 0x46, 0x06, 0x4e, 0x5a, 0xc7, 0xc7, 0xbc, 0x24, 0x7f, 0x20, 0x41, 0x5a, 0x74, 0x7a,
- 0x52, 0x98, 0x26, 0x36, 0xb1, 0xad, 0xba, 0x96, 0x57, 0x18, 0x8f, 0xd0, 0x3b, 0xe3, 0x65, 0xfc,
- 0x19, 0x6f, 0x0e, 0xc6, 0x5d, 0xd2, 0xaf, 0x79, 0x39, 0xd8, 0x03, 0x5d, 0x97, 0x6e, 0xa9, 0x4d,
- 0xb6, 0x14, 0x97, 0x91, 0xd9, 0x03, 0xa9, 0x12, 0x8f, 0xd7, 0x65, 0xda, 0xe1, 0x4f, 0xa4, 0xbc,
- 0x2c, 0x9e, 0x74, 0x07, 0x37, 0x0d, 0x93, 0x76, 0x80, 0xa4, 0x0c, 0x94, 0xb4, 0x42, 0x28, 0xe8,
- 0x2d, 0xc8, 0xb0, 0x0c, 0xd8, 0xd4, 0x69, 0x2f, 0x48, 0xca, 0x69, 0x4a, 0xa8, 0x88, 0xa3, 0x64,
- 0xf3, 0xfb, 0x90, 0xf1, 0xc6, 0x18, 0x69, 0xc8, 0xae, 0xe3, 0x29, 0x95, 0xfe, 0x46, 0xef, 0xc3,
- 0xdc, 0xab, 0xae, 0xda, 0x32, 0x76, 0xe9, 0x2a, 0x1b, 0xc9, 0xc6, 0xf4, 0xc7, 0xea, 0x83, 0xbc,
- 0x34, 0x2a, 0x81, 0xaa, 0x51, 0x0c, 0xc9, 0xa4, 0x3f, 0x24, 0x83, 0xdb, 0x26, 0xa5, 0x1f, 0x4b,
- 0x30, 0xc3, 0x42, 0x86, 0x58, 0xd4, 0x6b, 0x7c, 0x0e, 0xc6, 0xc7, 0x90, 0xd1, 0x55, 0x57, 0x65,
- 0xa7, 0x49, 0x13, 0x43, 0x4f, 0x93, 0x7a, 0x67, 0x19, 0x54, 0x57, 0xa5, 0x27, 0x4a, 0x11, 0xa4,
- 0xc8, 0x6f, 0x76, 0xfc, 0x56, 0xa6, 0xbf, 0xfd, 0x20, 0x8c, 0x60, 0x71, 0xe3, 0x74, 0xb8, 0x96,
- 0xe0, 0x02, 0xd1, 0x7e, 0xc5, 0xd4, 0xec, 0xe3, 0x8e, 0x6b, 0x58, 0xe6, 0x33, 0xfa, 0xd7, 0x41,
- 0x85, 0xc0, 0x26, 0x16, 0xdd, 0xbb, 0xe2, 0x65, 0xf9, 0xfd, 0x09, 0x98, 0xaa, 0x1c, 0x75, 0x2c,
- 0x3b, 0xd6, 0x45, 0xad, 0x15, 0x98, 0xe4, 0x88, 0x7f, 0xc8, 0xb6, 0x72, 0x8f, 0xad, 0x16, 0x3b,
- 0xb6, 0x9c, 0x11, 0xad, 0x00, 0xb0, 0xf8, 0x54, 0x1a, 0x77, 0x94, 0x3c, 0xc7, 0xe6, 0x1a, 0x65,
- 0x23, 0x54, 0xb4, 0x09, 0xd9, 0xf6, 0x81, 0xa6, 0x29, 0xbb, 0x46, 0xcb, 0xe5, 0x01, 0x7e, 0xd1,
- 0xd1, 0xe9, 0x1b, 0x2f, 0xca, 0xe5, 0xc7, 0x34, 0x13, 0x8b, 0xb5, 0xf3, 0x9f, 0x65, 0x20, 0x12,
- 0xd8, 0x6f, 0xf4, 0x2e, 0xf0, 0x53, 0x3e, 0x8a, 0x23, 0x0e, 0xf4, 0xad, 0x4c, 0x9d, 0x9e, 0x2c,
- 0x64, 0x64, 0x4a, 0xad, 0xd7, 0x1b, 0x72, 0x86, 0x65, 0xa8, 0x3b, 0x2e, 0xba, 0x0e, 0x53, 0x56,
- 0xdb, 0x70, 0x15, 0xe1, 0x03, 0x71, 0xb7, 0x31, 0x47, 0x88, 0xc2, 0x47, 0x42, 0x0d, 0xb8, 0x8d,
- 0x4d, 0x3a, 0x0a, 0x48, 0x3d, 0x95, 0x1d, 0xb6, 0x16, 0xe9, 0xb2, 0xf1, 0xae, 0x58, 0x1d, 0xd7,
- 0x68, 0x1b, 0xaf, 0xe9, 0xc6, 0x36, 0xdf, 0x5b, 0xba, 0xce, 0xb2, 0x93, 0xfa, 0xad, 0xd0, 0x45,
- 0x4a, 0x9e, 0xf7, 0x59, 0x20, 0x2b, 0xfa, 0x75, 0x09, 0x2e, 0x72, 0x45, 0x2a, 0x3b, 0x34, 0xbc,
- 0x5e, 0x6d, 0x19, 0xee, 0xb1, 0xb2, 0x7f, 0x50, 0x4c, 0x53, 0xe7, 0xf4, 0x97, 0x22, 0x1b, 0x24,
- 0xd0, 0x0f, 0x16, 0x45, 0xb3, 0x1c, 0x3f, 0xe5, 0xcc, 0xeb, 0x07, 0x15, 0xd3, 0xb5, 0x8f, 0x57,
- 0x2e, 0x9d, 0x9e, 0x2c, 0xcc, 0xf6, 0xa7, 0xbe, 0x90, 0x67, 0x9d, 0x7e, 0x16, 0x54, 0x05, 0xc0,
- 0x5e, 0x6f, 0xa4, 0x91, 0x84, 0xd1, 0xee, 0x45, 0x64, 0xb7, 0x95, 0x03, 0xbc, 0xe8, 0x0e, 0x14,
- 0xf8, 0x01, 0x9b, 0x5d, 0xa3, 0x85, 0x15, 0xc7, 0x78, 0x8d, 0x69, 0xdc, 0x61, 0x52, 0xce, 0x33,
- 0x3a, 0x11, 0x51, 0x37, 0x5e, 0xe3, 0xf9, 0x1f, 0x42, 0x71, 0x50, 0xe9, 0x83, 0x03, 0x21, 0xc3,
- 0x36, 0x71, 0x3f, 0x0a, 0xaf, 0xc8, 0x8c, 0xd0, 0x55, 0xc5, 0xaa, 0x4c, 0xe2, 0x23, 0x61, 0x82,
- 0x7e, 0x37, 0x01, 0x53, 0x2b, 0xdd, 0xd6, 0xfe, 0xb3, 0x4e, 0xbd, 0xdb, 0x6e, 0xab, 0xf6, 0x31,
- 0x31, 0x95, 0xcc, 0x74, 0x90, 0x62, 0x4a, 0xcc, 0x54, 0x52, 0xdb, 0x60, 0xbc, 0xc6, 0x64, 0x32,
- 0x0b, 0x1e, 0x29, 0x67, 0xc7, 0x07, 0x68, 0x4d, 0x02, 0xe7, 0xc4, 0xad, 0x43, 0x07, 0x7d, 0x04,
- 0xc5, 0x40, 0x46, 0xba, 0x7c, 0xa2, 0x60, 0xd3, 0xb5, 0x0d, 0xcc, 0x96, 0x03, 0x93, 0x72, 0x20,
- 0xf4, 0xa6, 0x46, 0x92, 0x2b, 0x2c, 0x15, 0x35, 0x20, 0x47, 0x32, 0x1e, 0x2b, 0x74, 0xb2, 0x11,
- 0x8b, 0xb6, 0xf7, 0x23, 0x2a, 0x17, 0x2a, 0xf7, 0x22, 0xd5, 0x52, 0x99, 0xf2, 0xd0, 0x9f, 0x72,
- 0x16, 0xfb, 0x94, 0xf9, 0x4f, 0xa1, 0xd0, 0x9b, 0x21, 0xa8, 0xd1, 0x14, 0xd3, 0xe8, 0x5c, 0x50,
- 0xa3, 0xc9, 0x80, 0xb6, 0xd6, 0x52, 0xe9, 0x54, 0x61, 0xbc, 0xf4, 0xc7, 0x49, 0xc8, 0x8b, 0xce,
- 0x16, 0x27, 0x9a, 0x59, 0x81, 0x71, 0xd2, 0x35, 0x44, 0xa0, 0xc8, 0xad, 0x21, 0x7d, 0x9c, 0x87,
- 0xaa, 0x93, 0x2e, 0x23, 0xf0, 0x30, 0x65, 0x8d, 0xc3, 0xec, 0xcc, 0xff, 0xc5, 0x04, 0xa4, 0x28,
- 0x80, 0xb8, 0x0f, 0x29, 0x3a, 0x75, 0x48, 0xa3, 0x4c, 0x1d, 0x34, 0xab, 0x37, 0xd9, 0x25, 0x02,
- 0xfe, 0x27, 0x71, 0xe6, 0xf6, 0xd4, 0x0f, 0xee, 0x3f, 0xa0, 0x26, 0x27, 0x27, 0xf3, 0x27, 0xb4,
- 0x42, 0x23, 0x98, 0x2c, 0xdb, 0xc5, 0x3a, 0x77, 0xdc, 0xaf, 0x9e, 0xd5, 0xbe, 0x62, 0x9a, 0x12,
- 0x7c, 0xe8, 0x32, 0x24, 0x89, 0x2d, 0x9b, 0x64, 0xd1, 0x0d, 0xa7, 0x27, 0x0b, 0x49, 0x62, 0xc5,
- 0x08, 0x0d, 0x2d, 0x41, 0x36, 0x6c, 0x38, 0xa4, 0x3b, 0x19, 0x66, 0x1e, 0x03, 0x83, 0x1e, 0x5a,
- 0xde, 0x00, 0x63, 0xa0, 0x95, 0xb7, 0xf1, 0xaf, 0x8d, 0xc3, 0x54, 0xad, 0x1d, 0xf7, 0xc4, 0xb2,
- 0x1c, 0x6e, 0xe1, 0x28, 0xb4, 0x13, 0x7a, 0x69, 0x44, 0x03, 0x87, 0xe6, 0xf4, 0xe4, 0xf9, 0xe6,
- 0xf4, 0x1a, 0x71, 0x81, 0xf9, 0x1d, 0x11, 0xc9, 0x01, 0xc0, 0x26, 0xfc, 0x7e, 0xea, 0xc5, 0xc8,
- 0x84, 0xc7, 0x3f, 0xbc, 0x41, 0x23, 0x54, 0x3e, 0xa5, 0x9e, 0x36, 0xeb, 0x65, 0x13, 0xa3, 0xf7,
- 0xb2, 0x49, 0x6c, 0xea, 0x74, 0x6a, 0x0b, 0xdb, 0xd5, 0xc9, 0x37, 0xb7, 0xab, 0xf3, 0xaf, 0x79,
- 0x67, 0xfd, 0x18, 0x92, 0xba, 0x21, 0x1a, 0x67, 0xf4, 0x09, 0x9b, 0x30, 0x9d, 0xd1, 0x6b, 0x53,
- 0xc1, 0x5e, 0x1b, 0x5c, 0xe0, 0x98, 0x7f, 0x06, 0xe0, 0x6b, 0x08, 0x5d, 0x85, 0x09, 0xab, 0xa5,
- 0x8b, 0x33, 0x2c, 0x53, 0x2b, 0x99, 0xd3, 0x93, 0x85, 0xf1, 0x67, 0x2d, 0xbd, 0xb6, 0x2a, 0x8f,
- 0x5b, 0x2d, 0xbd, 0xa6, 0xd3, 0x6b, 0x3a, 0xf0, 0xa1, 0xe2, 0x05, 0xac, 0xe5, 0xe4, 0x49, 0x13,
- 0x1f, 0xae, 0x62, 0x47, 0xeb, 0x09, 0xa4, 0x21, 0x5d, 0xf0, 0x47, 0x12, 0xe4, 0x45, 0x6b, 0xc4,
- 0x6b, 0x66, 0xd2, 0x46, 0x9b, 0x0f, 0xbb, 0xe4, 0xf9, 0x86, 0x9d, 0xe0, 0xe3, 0x67, 0x80, 0x7f,
- 0x43, 0xe2, 0xc1, 0xca, 0x75, 0x4d, 0x75, 0x89, 0xb3, 0x11, 0xe3, 0x50, 0xb9, 0x0b, 0x05, 0x5b,
- 0x35, 0x75, 0xab, 0x6d, 0xbc, 0xc6, 0x6c, 0x45, 0xd4, 0xe1, 0x9b, 0x9b, 0xd3, 0x1e, 0x9d, 0x2e,
- 0xf9, 0x89, 0x05, 0xdd, 0xdf, 0x4f, 0xf0, 0xc0, 0x66, 0xaf, 0x30, 0x71, 0x2a, 0xed, 0x07, 0x30,
- 0xd3, 0x7b, 0x8b, 0x8a, 0x18, 0xc5, 0xef, 0x45, 0xc8, 0x8b, 0x2a, 0x08, 0x0b, 0x44, 0x14, 0x91,
- 0xf3, 0x3d, 0x37, 0xaa, 0x38, 0xa8, 0x0c, 0xd9, 0xe0, 0xe5, 0x2c, 0xc9, 0x91, 0x2f, 0x67, 0x01,
- 0xdb, 0xbb, 0x92, 0x65, 0xfe, 0x57, 0x60, 0x9c, 0x26, 0xbf, 0x81, 0xe9, 0xe6, 0x6d, 0xfa, 0x5f,
- 0x13, 0x70, 0x83, 0x96, 0xfe, 0x05, 0xb6, 0x8d, 0xdd, 0xe3, 0x2d, 0xdb, 0x72, 0xb1, 0xe6, 0x62,
- 0xdd, 0x3f, 0x8c, 0x12, 0xab, 0x3d, 0xcc, 0x74, 0xc4, 0x0b, 0xce, 0x15, 0x80, 0xe6, 0x71, 0xa1,
- 0x75, 0x98, 0xe6, 0xc1, 0x04, 0x6a, 0xcb, 0x38, 0xc0, 0x8a, 0xea, 0x9e, 0x67, 0xd6, 0x9b, 0x62,
- 0xbc, 0xcb, 0x84, 0x75, 0xd9, 0x45, 0x3a, 0x64, 0xb8, 0x30, 0x43, 0xe7, 0x37, 0x0b, 0x3d, 0xf9,
- 0xc5, 0x56, 0x13, 0xd3, 0x2c, 0xa2, 0xa1, 0xb6, 0x2a, 0xa7, 0x99, 0x64, 0x6f, 0x37, 0xe8, 0x8f,
- 0x24, 0xb8, 0x79, 0x86, 0xa2, 0xe3, 0xec, 0xc0, 0xf3, 0x90, 0x3e, 0x20, 0x2f, 0x32, 0xb8, 0xa6,
- 0xd3, 0xb2, 0xf7, 0x8c, 0x36, 0x60, 0x6a, 0x57, 0x35, 0x5a, 0x7e, 0xc7, 0x1e, 0x1c, 0xb5, 0x18,
- 0x1d, 0x4c, 0x9b, 0x63, 0xec, 0xac, 0x27, 0x97, 0x7e, 0x94, 0x80, 0x99, 0x65, 0x5d, 0xaf, 0xd7,
- 0xb9, 0x6d, 0x8c, 0xaf, 0xbf, 0x08, 0x50, 0x9a, 0xf0, 0x41, 0x29, 0x7a, 0x0f, 0x90, 0x6e, 0x38,
- 0xec, 0xd6, 0x12, 0x67, 0x4f, 0xd5, 0xad, 0x43, 0x3f, 0x1e, 0x63, 0x46, 0xa4, 0xd4, 0x45, 0x02,
- 0xaa, 0x03, 0x45, 0x44, 0x8a, 0xe3, 0xaa, 0xde, 0x96, 0xd2, 0xcd, 0x91, 0xce, 0x8e, 0x31, 0xa8,
- 0xe4, 0x3d, 0xca, 0x19, 0x22, 0x87, 0xfe, 0x24, 0xbe, 0xbd, 0x41, 0xaa, 0xee, 0x2a, 0xaa, 0x23,
- 0x0e, 0x0a, 0xb1, 0xfb, 0x52, 0xf2, 0x8c, 0xbe, 0xec, 0x04, 0xcf, 0xff, 0xb0, 0x73, 0x0c, 0xbe,
- 0x82, 0xe2, 0x84, 0xd0, 0xff, 0x50, 0x82, 0xbc, 0x8c, 0x77, 0x6d, 0xec, 0xc4, 0xba, 0x94, 0xf0,
- 0x18, 0x72, 0x36, 0x93, 0xaa, 0xec, 0xda, 0x56, 0xfb, 0x3c, 0x63, 0x2c, 0xcb, 0x19, 0x1f, 0xdb,
- 0x56, 0x3b, 0x74, 0x85, 0xc4, 0x0b, 0x98, 0xf6, 0x4a, 0x1a, 0xa7, 0x0a, 0x7e, 0x4c, 0xcf, 0x4b,
- 0x33, 0xc1, 0x71, 0x07, 0x46, 0x7c, 0x1d, 0x7a, 0xa0, 0x7b, 0x58, 0xc1, 0xe2, 0xc6, 0xa9, 0x8c,
- 0xff, 0x2e, 0x41, 0xbe, 0xde, 0xdd, 0x61, 0x97, 0x66, 0xc5, 0xa7, 0x87, 0x0a, 0x64, 0x5a, 0x78,
- 0xd7, 0x55, 0xde, 0x28, 0xf6, 0x3e, 0x4d, 0x58, 0xe9, 0xf9, 0x83, 0x27, 0x00, 0x36, 0x3d, 0x5d,
- 0x47, 0xe5, 0x24, 0xcf, 0x29, 0x27, 0x43, 0x79, 0x7d, 0xf7, 0xa9, 0xf4, 0xe3, 0x04, 0x4c, 0x7b,
- 0x95, 0x8d, 0xd3, 0x7a, 0xbe, 0x0c, 0x59, 0x8d, 0xe4, 0x79, 0xac, 0xc6, 0x0c, 0x8f, 0x0b, 0x89,
- 0xb6, 0x1c, 0x8b, 0x30, 0x4b, 0x9d, 0x1b, 0x45, 0xed, 0x74, 0x5a, 0x86, 0x00, 0xc9, 0xd4, 0x2e,
- 0xa5, 0xe4, 0x19, 0x9a, 0xb4, 0xcc, 0x52, 0x28, 0x3c, 0x26, 0xfd, 0x6f, 0xd7, 0xc6, 0xf8, 0x35,
- 0x56, 0x28, 0x5e, 0x3b, 0x4f, 0xdc, 0x4b, 0x96, 0x31, 0xd6, 0x09, 0x1f, 0xef, 0x79, 0xdf, 0x87,
- 0x19, 0xaa, 0xd9, 0xb8, 0x4f, 0x08, 0xf3, 0xe6, 0xf8, 0xad, 0x04, 0xa0, 0xa0, 0xfc, 0xaf, 0xaf,
- 0x45, 0x12, 0xf1, 0xb5, 0xc8, 0xbb, 0x80, 0x58, 0x2c, 0xa4, 0xa3, 0x74, 0xb0, 0xad, 0x38, 0x58,
- 0xb3, 0xf8, 0x55, 0x4e, 0x92, 0x5c, 0xe0, 0x29, 0x5b, 0xd8, 0xae, 0x53, 0x3a, 0x7a, 0x04, 0xe0,
- 0x7b, 0x6d, 0x7c, 0x3a, 0x19, 0xea, 0xb4, 0xc9, 0x19, 0xcf, 0x5d, 0x2b, 0x7d, 0x31, 0x0f, 0x39,
- 0xae, 0xc9, 0x6d, 0xd3, 0xb0, 0x4c, 0x74, 0x1f, 0x92, 0x4d, 0xbe, 0xcd, 0x90, 0x8d, 0x5c, 0xe8,
- 0xf3, 0x6f, 0xaf, 0xab, 0x8e, 0xc9, 0x24, 0x2f, 0x61, 0xe9, 0x74, 0xdd, 0x08, 0xe7, 0xc9, 0x8f,
- 0xf8, 0x0e, 0xb2, 0x74, 0xba, 0x2e, 0xaa, 0xc3, 0xb4, 0xe6, 0xdf, 0xc5, 0xa5, 0x10, 0xf6, 0xe4,
- 0x40, 0x00, 0x16, 0x79, 0x07, 0x5a, 0x75, 0x4c, 0xce, 0x6b, 0xa1, 0x04, 0x54, 0x0e, 0x5e, 0xfe,
- 0x94, 0xea, 0x0b, 0x18, 0xf3, 0x8f, 0x22, 0x87, 0x2f, 0x9e, 0xaa, 0x8e, 0x05, 0xee, 0x88, 0x42,
- 0x1f, 0xc3, 0x84, 0x4e, 0x2f, 0x15, 0xe2, 0xfd, 0x3a, 0xaa, 0xeb, 0x85, 0xee, 0x71, 0xaa, 0x8e,
- 0xc9, 0x9c, 0x03, 0xad, 0x41, 0x8e, 0xfd, 0x62, 0x4e, 0x0c, 0x47, 0xa5, 0x37, 0x07, 0x4b, 0x08,
- 0x4c, 0x0d, 0xd5, 0x31, 0x39, 0xab, 0xfb, 0x54, 0xf4, 0x6d, 0x48, 0x39, 0x9a, 0x2a, 0x70, 0xe9,
- 0x95, 0x01, 0xf7, 0x81, 0xf8, 0xcc, 0x34, 0x37, 0x7a, 0xc4, 0x6e, 0xa5, 0x74, 0x8f, 0xc4, 0x42,
- 0x61, 0x54, 0xf1, 0x43, 0xa7, 0xcc, 0x49, 0xf1, 0x31, 0x25, 0xa0, 0x27, 0x90, 0x55, 0x89, 0x37,
- 0xa8, 0xd0, 0x53, 0x99, 0x74, 0x65, 0x30, 0x7a, 0x0f, 0xbe, 0xef, 0x44, 0x6d, 0x95, 0x1e, 0x65,
- 0x17, 0x44, 0x5f, 0x50, 0x1b, 0xdb, 0x4d, 0x5c, 0xcc, 0x0e, 0x17, 0x14, 0x0c, 0x10, 0xf3, 0x04,
- 0x51, 0x22, 0xf1, 0x0a, 0xbd, 0x43, 0xd2, 0xb4, 0x52, 0xb9, 0x81, 0xfb, 0xbd, 0x11, 0x27, 0x86,
- 0xaa, 0x63, 0x72, 0x6e, 0x2f, 0x40, 0x46, 0x8b, 0x90, 0x68, 0x6a, 0xc5, 0xa9, 0x81, 0x23, 0xc4,
- 0x3b, 0x0f, 0x53, 0x1d, 0x93, 0x13, 0x4d, 0x0d, 0x7d, 0x0a, 0x69, 0x76, 0xa0, 0xe1, 0xc8, 0x2c,
- 0xe6, 0x07, 0xda, 0x89, 0xf0, 0xb1, 0x90, 0xea, 0x98, 0x4c, 0xcf, 0x50, 0x90, 0xf7, 0x6d, 0x41,
- 0xde, 0x66, 0x11, 0x76, 0x22, 0x36, 0xb6, 0x30, 0x70, 0x0f, 0x3c, 0x2a, 0x3c, 0xb6, 0x4a, 0xd1,
- 0x41, 0x80, 0x8e, 0x7e, 0x00, 0x73, 0x61, 0x89, 0xbc, 0xa7, 0xcd, 0x0c, 0xdc, 0xcf, 0x1d, 0x18,
- 0xa4, 0x59, 0x1d, 0x93, 0x91, 0xdd, 0x97, 0x88, 0x3e, 0x84, 0x71, 0xd6, 0x6a, 0x88, 0x8a, 0x8c,
- 0x0a, 0xee, 0xe8, 0x69, 0x30, 0x96, 0x9f, 0x74, 0x7e, 0x97, 0x87, 0x96, 0x29, 0x2d, 0xab, 0x59,
- 0x9c, 0x1d, 0xd8, 0xf9, 0xfb, 0x43, 0xe5, 0x48, 0xe7, 0x77, 0x7d, 0x2a, 0x69, 0x77, 0x9b, 0xa5,
- 0xf0, 0x48, 0xa4, 0xb9, 0x81, 0xed, 0x1e, 0x11, 0x71, 0x56, 0xa5, 0x07, 0x03, 0x7c, 0x32, 0x29,
- 0x9a, 0xcd, 0x2e, 0xaf, 0x51, 0xe8, 0x98, 0xba, 0x30, 0xb0, 0x68, 0xfd, 0x77, 0xfc, 0x54, 0xa9,
- 0xd7, 0xe4, 0x51, 0xd1, 0x0b, 0x28, 0xf0, 0x6b, 0x25, 0xfc, 0x5d, 0x89, 0x8b, 0x54, 0xde, 0xdd,
- 0x48, 0xd3, 0x15, 0x15, 0xba, 0x53, 0x1d, 0x93, 0xa7, 0xb5, 0x70, 0x0a, 0xfa, 0x0c, 0x66, 0xa8,
- 0x3c, 0x45, 0xf3, 0xef, 0x03, 0x29, 0x16, 0xfb, 0xee, 0x95, 0x18, 0x7c, 0x75, 0x88, 0x90, 0x5c,
- 0xd0, 0x7a, 0x92, 0x48, 0x37, 0x36, 0x4c, 0xc3, 0xa5, 0x56, 0x76, 0x7e, 0x60, 0x37, 0x0e, 0xdf,
- 0x5d, 0x48, 0xba, 0xb1, 0xc1, 0x28, 0xa4, 0x1b, 0xbb, 0x3c, 0x4c, 0x8d, 0x37, 0xc7, 0xdb, 0x03,
- 0xbb, 0x71, 0x54, 0x3c, 0x1b, 0xe9, 0xc6, 0x6e, 0x90, 0x4e, 0xba, 0x31, 0x33, 0x10, 0x3d, 0x72,
- 0xdf, 0x19, 0xd8, 0x8d, 0x07, 0x9e, 0x8b, 0x26, 0xdd, 0x58, 0xed, 0x4b, 0x44, 0xab, 0x00, 0xcc,
- 0xa9, 0xa1, 0x93, 0xe2, 0x95, 0x81, 0x93, 0x41, 0x6f, 0xa0, 0x1a, 0x99, 0x0c, 0x5a, 0x82, 0x46,
- 0x0c, 0x19, 0x85, 0x52, 0x0a, 0xdd, 0xa2, 0x2d, 0x2e, 0x0c, 0x34, 0x64, 0x7d, 0x9b, 0xa7, 0xc4,
- 0x90, 0x1d, 0x7a, 0x44, 0x32, 0xab, 0xb0, 0xf5, 0xe2, 0xe2, 0xd5, 0xc1, 0x66, 0x39, 0xb8, 0x79,
- 0x44, 0xcd, 0x32, 0x25, 0xa0, 0x65, 0xc8, 0x90, 0x39, 0xff, 0x98, 0x9a, 0xa1, 0x6b, 0x03, 0xfd,
- 0xd3, 0x9e, 0x93, 0x2f, 0xd5, 0x31, 0x39, 0xfd, 0x8a, 0x93, 0xc8, 0xeb, 0xd9, 0xba, 0x59, 0xb1,
- 0x34, 0xf0, 0xf5, 0xa1, 0x55, 0x57, 0xf2, 0x7a, 0xc6, 0x81, 0x34, 0xb8, 0xc0, 0xda, 0x8a, 0x1f,
- 0x4b, 0xb6, 0xf9, 0x19, 0xda, 0xe2, 0x75, 0x2a, 0x6a, 0xe0, 0xd2, 0x53, 0xe4, 0x69, 0xe9, 0xea,
- 0x98, 0x3c, 0xab, 0xf6, 0xa7, 0x92, 0x01, 0xcf, 0xa7, 0x1e, 0xb6, 0x60, 0x55, 0xbc, 0x31, 0x70,
- 0xc0, 0x47, 0xac, 0xf6, 0x91, 0x01, 0xaf, 0x06, 0xc8, 0x6c, 0x02, 0xd2, 0x15, 0xc7, 0x61, 0x1b,
- 0xfa, 0x37, 0x87, 0x4c, 0x40, 0x3d, 0x6b, 0x04, 0x6c, 0x02, 0xd2, 0xeb, 0x8c, 0x93, 0x08, 0xd2,
- 0x5a, 0x58, 0xb5, 0xb9, 0x99, 0xbd, 0x35, 0x50, 0x50, 0xdf, 0x75, 0x80, 0x44, 0x90, 0xe6, 0x11,
- 0x89, 0xc3, 0x63, 0x8b, 0xfb, 0x68, 0xb8, 0xc3, 0x78, 0x7b, 0xa0, 0xc3, 0x13, 0x79, 0x6d, 0x0e,
- 0x71, 0x78, 0xec, 0x50, 0x02, 0xfa, 0x65, 0x98, 0xe4, 0x80, 0xae, 0x78, 0x67, 0x88, 0x1b, 0x1b,
- 0x44, 0xe2, 0x64, 0x5c, 0x73, 0x1e, 0x66, 0x65, 0x19, 0x90, 0x64, 0xd5, 0xbb, 0x3b, 0xc4, 0xca,
- 0xf6, 0x61, 0x59, 0x66, 0x65, 0x7d, 0x32, 0xb1, 0xb2, 0xac, 0x9f, 0xf2, 0xb9, 0xee, 0xde, 0x40,
- 0x2b, 0xdb, 0x7f, 0xa2, 0x86, 0x58, 0xd9, 0x57, 0x3e, 0x95, 0xd4, 0xcc, 0x61, 0x20, 0xaa, 0xf8,
- 0xad, 0x81, 0x35, 0x0b, 0x63, 0x4a, 0x52, 0x33, 0xce, 0x43, 0x9a, 0x8d, 0xb9, 0xc4, 0x4c, 0xd3,
- 0xef, 0x0e, 0xbe, 0x01, 0xa0, 0x17, 0x7a, 0x54, 0xc5, 0x62, 0x26, 0xd3, 0xb0, 0x67, 0xa8, 0x6c,
- 0x7e, 0xde, 0x99, 0x6b, 0xea, 0xbd, 0xe1, 0x86, 0x2a, 0xea, 0x28, 0xb7, 0x67, 0xa8, 0x42, 0x89,
- 0xb4, 0xa8, 0xec, 0x10, 0x1b, 0x1d, 0xdf, 0x8b, 0x43, 0x2e, 0x2b, 0xe8, 0x39, 0x50, 0x48, 0x8b,
- 0xea, 0x11, 0xfd, 0x21, 0xd4, 0x65, 0xb7, 0x6a, 0x14, 0x97, 0x86, 0x0f, 0xa1, 0xf0, 0xed, 0x1e,
- 0xde, 0x10, 0xe2, 0x64, 0x6f, 0xce, 0x14, 0x1e, 0xc6, 0xfb, 0xc3, 0xe7, 0xcc, 0x5e, 0xd7, 0x82,
- 0xcd, 0x99, 0xdc, 0xa7, 0xf8, 0x4b, 0x12, 0x5c, 0x65, 0x65, 0xa3, 0xeb, 0x7d, 0xc7, 0x8a, 0xb7,
- 0x76, 0x1a, 0x38, 0x3e, 0x71, 0x9f, 0xbe, 0xe0, 0xc3, 0x41, 0xc5, 0x3d, 0x63, 0x2d, 0xb8, 0x3a,
- 0x26, 0xbf, 0xa3, 0x0e, 0xcb, 0xb7, 0x32, 0xc9, 0xb7, 0x54, 0xbd, 0x73, 0xa4, 0xd3, 0x85, 0xc2,
- 0x5a, 0x2a, 0x7d, 0xa9, 0x50, 0x5c, 0x4b, 0xa5, 0x2f, 0x17, 0xe6, 0xd7, 0x52, 0xe9, 0xb7, 0x0a,
- 0x6f, 0x97, 0xfe, 0xc7, 0x65, 0x98, 0x12, 0xc8, 0x8f, 0x21, 0xa2, 0x07, 0x41, 0x44, 0x74, 0x65,
- 0x10, 0x22, 0xe2, 0x58, 0x91, 0x43, 0xa2, 0x07, 0x41, 0x48, 0x74, 0x65, 0x10, 0x24, 0xf2, 0x79,
- 0x08, 0x26, 0x6a, 0x0c, 0xc2, 0x44, 0x77, 0x47, 0xc0, 0x44, 0x9e, 0xa8, 0x5e, 0x50, 0xb4, 0xda,
- 0x0f, 0x8a, 0x6e, 0x0c, 0x07, 0x45, 0x9e, 0xa8, 0x00, 0x2a, 0x7a, 0xd4, 0x83, 0x8a, 0xae, 0x0d,
- 0x41, 0x45, 0x1e, 0xbf, 0x80, 0x45, 0xeb, 0x91, 0xb0, 0xe8, 0xd6, 0x59, 0xb0, 0xc8, 0x93, 0x13,
- 0xc2, 0x45, 0x1f, 0x84, 0x70, 0xd1, 0xc2, 0x40, 0x5c, 0xe4, 0x71, 0x33, 0x60, 0xf4, 0x49, 0x2f,
- 0x30, 0xba, 0x36, 0x04, 0x18, 0xf9, 0x35, 0xe0, 0xc8, 0xa8, 0x1a, 0x85, 0x8c, 0x6e, 0x9e, 0x81,
- 0x8c, 0x3c, 0x29, 0x41, 0x68, 0x54, 0x8d, 0x82, 0x46, 0x37, 0xcf, 0x80, 0x46, 0x3d, 0x92, 0x18,
- 0x36, 0xda, 0x8c, 0xc6, 0x46, 0xb7, 0xcf, 0xc4, 0x46, 0x9e, 0xb4, 0x30, 0x38, 0x5a, 0x0a, 0x80,
- 0xa3, 0x77, 0x06, 0x80, 0x23, 0x8f, 0x95, 0xa0, 0xa3, 0xef, 0xf4, 0xa1, 0xa3, 0xd2, 0x30, 0x74,
- 0xe4, 0xf1, 0x7a, 0xf0, 0xe8, 0xf9, 0x00, 0x78, 0x74, 0xe7, 0x6c, 0x78, 0xe4, 0x09, 0xeb, 0xc1,
- 0x47, 0xea, 0x50, 0x7c, 0xf4, 0xde, 0x88, 0xf8, 0xc8, 0x93, 0x1e, 0x05, 0x90, 0x3e, 0x0a, 0x03,
- 0xa4, 0xab, 0x83, 0x01, 0x92, 0x27, 0x86, 0x23, 0xa4, 0xf5, 0x48, 0x84, 0x74, 0xeb, 0x2c, 0x84,
- 0xe4, 0x8f, 0x83, 0x20, 0x44, 0xda, 0x8c, 0x86, 0x48, 0xb7, 0xcf, 0x84, 0x48, 0x7e, 0xf3, 0x87,
- 0x30, 0xd2, 0x7a, 0x24, 0x46, 0xba, 0x75, 0x16, 0x46, 0xf2, 0x0b, 0x17, 0x04, 0x49, 0x2f, 0x07,
- 0x82, 0xa4, 0x7b, 0xa3, 0x80, 0x24, 0x4f, 0x68, 0x1f, 0x4a, 0xfa, 0x7c, 0x30, 0x4a, 0xfa, 0xd6,
- 0x39, 0x2e, 0x58, 0x8c, 0x84, 0x49, 0xdf, 0xe9, 0x83, 0x49, 0xa5, 0x61, 0x30, 0xc9, 0xef, 0xcf,
- 0x02, 0x27, 0xa9, 0x43, 0x51, 0xcd, 0x7b, 0x23, 0xa2, 0x1a, 0xbf, 0xf3, 0x45, 0xc0, 0x9a, 0x4a,
- 0x04, 0xac, 0xb9, 0x31, 0x1c, 0xd6, 0xf8, 0xe6, 0xdc, 0xc7, 0x35, 0xd5, 0x28, 0x5c, 0x73, 0xf3,
- 0x0c, 0x5c, 0xe3, 0x5b, 0xa1, 0x00, 0xb0, 0x79, 0xd4, 0x03, 0x6c, 0xae, 0x9d, 0x19, 0x31, 0x14,
- 0x40, 0x36, 0x2b, 0xfd, 0xc8, 0xe6, 0xfa, 0x50, 0x64, 0xe3, 0x49, 0xf0, 0xa1, 0xcd, 0xa3, 0x1e,
- 0x68, 0x73, 0x6d, 0x08, 0xb4, 0xf1, 0x0b, 0xc0, 0xb1, 0x8d, 0x3e, 0x1c, 0xdb, 0x2c, 0x8e, 0x8a,
- 0x6d, 0x3c, 0xc1, 0x91, 0xe0, 0x66, 0x33, 0x1a, 0xdc, 0xdc, 0x1e, 0x71, 0xd3, 0xbe, 0x0f, 0xdd,
- 0x54, 0xa3, 0xd0, 0xcd, 0xcd, 0x33, 0xd0, 0x4d, 0x70, 0x0e, 0xf1, 0xe0, 0x4d, 0x35, 0x0a, 0xde,
- 0xdc, 0x3c, 0x03, 0xde, 0xf8, 0x92, 0x02, 0xf8, 0xa6, 0x31, 0x08, 0xdf, 0xdc, 0x1d, 0x01, 0xdf,
- 0xf8, 0xce, 0x4b, 0x0f, 0xc0, 0xf9, 0xb4, 0x17, 0xe0, 0x94, 0x86, 0x01, 0x1c, 0x7f, 0x44, 0x0a,
- 0x84, 0xb3, 0x19, 0x8d, 0x70, 0x6e, 0x9f, 0x89, 0x70, 0x82, 0x46, 0x32, 0x00, 0x71, 0xd6, 0x23,
- 0x21, 0xce, 0xad, 0xb3, 0x20, 0x8e, 0x6f, 0x24, 0x83, 0x18, 0xe7, 0xd3, 0x5e, 0x8c, 0x53, 0x1a,
- 0x86, 0x71, 0xfc, 0xca, 0x09, 0x90, 0x53, 0x8d, 0x02, 0x39, 0x37, 0xcf, 0x00, 0x39, 0x7e, 0xe3,
- 0x05, 0x50, 0x8e, 0x3a, 0x14, 0xe5, 0xbc, 0x37, 0x22, 0xca, 0xe9, 0x31, 0x5c, 0x61, 0x98, 0x53,
- 0x8d, 0x82, 0x39, 0x37, 0xcf, 0x80, 0x39, 0x81, 0xc2, 0xfa, 0x38, 0x67, 0x33, 0x1a, 0xe7, 0xdc,
- 0x3e, 0x13, 0xe7, 0xf4, 0x8c, 0x26, 0x01, 0x74, 0xd6, 0x23, 0x81, 0xce, 0xad, 0xb3, 0x80, 0x4e,
- 0xcf, 0xc4, 0xc7, 0x9d, 0x83, 0xbf, 0x3c, 0x3a, 0xd2, 0xf9, 0xe8, 0xfc, 0x48, 0xc7, 0x7b, 0x67,
- 0x2c, 0x50, 0x67, 0x2d, 0x95, 0x7e, 0xbb, 0xf0, 0x4e, 0xe9, 0xaf, 0x4e, 0xc2, 0x44, 0xd5, 0x8b,
- 0x85, 0xf1, 0x4b, 0x29, 0xbd, 0xc9, 0x65, 0x4c, 0x68, 0x95, 0x8c, 0x58, 0x6a, 0xf7, 0xce, 0xbe,
- 0x77, 0xaf, 0xff, 0x4e, 0x38, 0xce, 0xfa, 0x06, 0xe7, 0x9b, 0xd1, 0x07, 0x30, 0xd5, 0x75, 0xb0,
- 0xad, 0x74, 0x6c, 0xc3, 0xb2, 0x0d, 0x97, 0x9d, 0x15, 0x91, 0x56, 0x0a, 0x5f, 0x9d, 0x2c, 0xe4,
- 0xb6, 0x1d, 0x6c, 0x6f, 0x71, 0xba, 0x9c, 0xeb, 0x06, 0x9e, 0xc4, 0x17, 0xb2, 0xc6, 0x47, 0xff,
- 0x42, 0xd6, 0x73, 0x28, 0xd8, 0x58, 0xd5, 0x43, 0x1e, 0x08, 0xbb, 0xec, 0x28, 0xba, 0xcf, 0xd0,
- 0x63, 0x58, 0x22, 0x27, 0xbd, 0xf4, 0x68, 0xda, 0x0e, 0x13, 0xd1, 0x7d, 0xb8, 0xd0, 0x56, 0x8f,
- 0x68, 0x3c, 0xa5, 0x22, 0x9c, 0x3a, 0x1a, 0x23, 0xc9, 0x3e, 0x3e, 0x85, 0xda, 0xea, 0x11, 0xfd,
- 0xdc, 0x16, 0x4b, 0xa2, 0xdf, 0xc7, 0xb8, 0x09, 0x79, 0xdd, 0x70, 0x5c, 0xc3, 0xd4, 0x5c, 0x7e,
- 0x4d, 0x2e, 0xbb, 0x62, 0x76, 0x4a, 0x50, 0xd9, 0x5d, 0xb8, 0xf7, 0x60, 0x86, 0x87, 0xdb, 0x07,
- 0xb6, 0x08, 0xf9, 0x55, 0xb3, 0x2c, 0xc1, 0xdb, 0x15, 0x44, 0x65, 0x98, 0x6e, 0xaa, 0x2e, 0x3e,
- 0x54, 0x8f, 0x15, 0x71, 0x56, 0x2b, 0x4b, 0x6f, 0x89, 0x7c, 0xeb, 0xf4, 0x64, 0x61, 0xea, 0x09,
- 0x4b, 0xea, 0x3b, 0xb2, 0x35, 0xd5, 0x0c, 0x24, 0xe8, 0xe8, 0x36, 0x4c, 0xab, 0xce, 0xb1, 0xa9,
- 0x51, 0xf5, 0x60, 0xd3, 0xe9, 0x3a, 0x14, 0x52, 0xa4, 0xe5, 0x3c, 0x25, 0x97, 0x05, 0x15, 0x5d,
- 0x83, 0x1c, 0x8f, 0x45, 0x67, 0xdf, 0xec, 0x99, 0xa6, 0x55, 0xe5, 0x1f, 0x80, 0xa0, 0x9f, 0xed,
- 0x41, 0x8f, 0x60, 0x9e, 0x5f, 0x8c, 0x7f, 0xa8, 0xda, 0xba, 0x42, 0xb5, 0xee, 0xf7, 0xcf, 0x02,
- 0x15, 0x7b, 0x89, 0x5d, 0x84, 0x4f, 0x32, 0x10, 0x55, 0xfb, 0x97, 0x2a, 0x6c, 0xc2, 0x8c, 0xd6,
- 0x32, 0x3c, 0x04, 0xc0, 0x6a, 0x3e, 0x33, 0xd0, 0xce, 0x96, 0x69, 0x5e, 0x7f, 0x8b, 0x74, 0x5a,
- 0x0b, 0x13, 0x50, 0x1d, 0xe8, 0x25, 0x32, 0x4a, 0xc7, 0x6a, 0x19, 0xda, 0x31, 0x75, 0xfe, 0xc3,
- 0x97, 0x7a, 0x0f, 0xbd, 0x66, 0xff, 0xa5, 0x6a, 0xb8, 0x5b, 0x94, 0x53, 0x86, 0x43, 0xef, 0x37,
- 0xbb, 0x84, 0x77, 0x2d, 0x95, 0xce, 0x15, 0xa6, 0xd6, 0x52, 0xe9, 0x7c, 0x61, 0xba, 0xf4, 0x37,
- 0x25, 0x98, 0xee, 0x29, 0x0b, 0xaa, 0xc2, 0x05, 0xdd, 0x1b, 0x2a, 0x0a, 0x3f, 0xca, 0x64, 0x58,
- 0x26, 0xbf, 0xa7, 0x7c, 0xf6, 0xab, 0x93, 0x85, 0x69, 0x9a, 0xfb, 0x89, 0x97, 0x24, 0xcf, 0xf9,
- 0x1c, 0x3e, 0x15, 0x7d, 0x04, 0x79, 0xe6, 0x3e, 0x7a, 0x1f, 0xa6, 0xa3, 0xf1, 0xe5, 0x2b, 0x33,
- 0x5f, 0x9d, 0x2c, 0x4c, 0x51, 0x9f, 0x51, 0xdc, 0x20, 0x2c, 0x4f, 0xb5, 0x82, 0x8f, 0xa5, 0xbf,
- 0x21, 0x41, 0x2e, 0x74, 0x38, 0xe8, 0x51, 0xcf, 0x0e, 0xfa, 0xe5, 0x68, 0xdc, 0x39, 0x28, 0xe8,
- 0x2e, 0xcd, 0xfb, 0xb9, 0x88, 0x60, 0x5c, 0x18, 0x8c, 0x5b, 0xe8, 0x2a, 0x8c, 0x08, 0xdb, 0x10,
- 0x6c, 0x1f, 0xa7, 0xfe, 0xf6, 0x97, 0x0b, 0x63, 0xa5, 0x7f, 0x92, 0x82, 0xa9, 0xf0, 0x21, 0xa0,
- 0x5a, 0x4f, 0xb9, 0xa2, 0xe6, 0x85, 0x10, 0xc7, 0xe2, 0x90, 0x7b, 0x13, 0x33, 0xfe, 0x67, 0x01,
- 0x58, 0x31, 0xaf, 0x0e, 0x89, 0x13, 0x08, 0x96, 0xd3, 0x67, 0x9c, 0xff, 0x22, 0xe9, 0xd9, 0xd7,
- 0x45, 0x18, 0xa7, 0xb7, 0xf3, 0xf0, 0xa2, 0x45, 0x9d, 0x2f, 0xaf, 0x90, 0x74, 0x99, 0x65, 0x23,
- 0xf6, 0xb8, 0xf1, 0x46, 0x97, 0xe3, 0xf9, 0xc3, 0xe0, 0xfc, 0x5f, 0x00, 0xe4, 0x57, 0x24, 0x8e,
- 0x9f, 0xef, 0x8a, 0x44, 0xf4, 0x7d, 0x98, 0xd6, 0xac, 0x56, 0x8b, 0xcd, 0x75, 0xcc, 0x22, 0xf5,
- 0x5f, 0x62, 0x42, 0x45, 0xf0, 0x4f, 0x33, 0x2e, 0x7a, 0x9f, 0x68, 0x5c, 0x94, 0xf9, 0x27, 0x1a,
- 0x03, 0xf1, 0xa0, 0x79, 0x4f, 0x18, 0x33, 0x64, 0x3d, 0xa1, 0xa9, 0x93, 0x6f, 0x12, 0x9a, 0xca,
- 0x82, 0x9a, 0x79, 0xcf, 0xf9, 0x77, 0x12, 0x0f, 0x0c, 0x79, 0x6a, 0x59, 0xfb, 0x5d, 0x2f, 0xa4,
- 0x74, 0x3e, 0x78, 0x55, 0x61, 0xfa, 0xab, 0x93, 0x85, 0x94, 0xec, 0xdd, 0x55, 0x18, 0x65, 0xf9,
- 0x13, 0xbf, 0x98, 0xe5, 0xbf, 0x06, 0xb9, 0x8e, 0x8d, 0x77, 0xb1, 0xab, 0xed, 0x29, 0x66, 0xb7,
- 0xcd, 0x4f, 0xa4, 0x64, 0x05, 0x6d, 0xb3, 0xdb, 0x46, 0x77, 0xa1, 0xe0, 0x65, 0xe1, 0x18, 0x5b,
- 0xdc, 0x56, 0x25, 0xe8, 0x1c, 0x91, 0x97, 0xfe, 0x44, 0x82, 0xd9, 0x50, 0x9d, 0xf8, 0x98, 0x58,
- 0x83, 0xac, 0x6f, 0x0e, 0x9c, 0xa2, 0x74, 0xce, 0xd0, 0xca, 0x20, 0x33, 0x52, 0xe0, 0xa2, 0x78,
- 0x2d, 0xbd, 0xfe, 0xde, 0x17, 0x9b, 0x38, 0xa7, 0xd8, 0x0b, 0xbe, 0x9c, 0xd5, 0xc0, 0x0b, 0xbc,
- 0x41, 0x92, 0x1c, 0x69, 0x90, 0x94, 0x7e, 0x24, 0x41, 0x81, 0xbe, 0xe0, 0x31, 0xc6, 0x7a, 0x2c,
- 0xd6, 0x49, 0x04, 0x2e, 0x27, 0x46, 0x3f, 0x73, 0x12, 0xfa, 0x7c, 0x47, 0x32, 0xfc, 0xf9, 0x8e,
- 0xd2, 0x97, 0x12, 0xe4, 0xbd, 0x12, 0xb2, 0x4f, 0xdf, 0x0d, 0xb9, 0x11, 0xf3, 0xcd, 0x3e, 0xf8,
- 0x26, 0x2e, 0xee, 0x18, 0xe9, 0x6b, 0x7c, 0xc1, 0x8b, 0x3b, 0xd8, 0xc7, 0xc9, 0xfe, 0xae, 0xe8,
- 0x39, 0xa4, 0x88, 0x65, 0xff, 0x52, 0x86, 0x37, 0x38, 0x7e, 0x23, 0xd3, 0x2f, 0x88, 0x5a, 0xad,
- 0x03, 0x76, 0x63, 0xca, 0x48, 0x66, 0x0b, 0xf1, 0x70, 0x28, 0xe0, 0xab, 0x71, 0x7a, 0xa3, 0x4e,
- 0xbf, 0x2d, 0xca, 0x7e, 0x3b, 0xa5, 0xc7, 0x01, 0x05, 0xd2, 0xc6, 0x27, 0x5a, 0x1a, 0xc9, 0x94,
- 0x0a, 0x2d, 0xb1, 0xbe, 0xf2, 0x87, 0xc1, 0x96, 0xa8, 0x1c, 0x10, 0x14, 0xf6, 0x10, 0x92, 0x07,
- 0x6a, 0x6b, 0x58, 0x18, 0x58, 0xa8, 0xe5, 0x64, 0x92, 0x1b, 0x3d, 0x0e, 0xdd, 0x65, 0x91, 0x18,
- 0x8c, 0x18, 0xfa, 0x55, 0x1a, 0xba, 0xf3, 0xe2, 0xc3, 0x70, 0x5f, 0x1f, 0xfa, 0xfa, 0x60, 0xa7,
- 0xff, 0x38, 0xf5, 0x93, 0x2f, 0x17, 0xa4, 0xd2, 0x87, 0x70, 0xf9, 0x89, 0xe5, 0x38, 0x46, 0x87,
- 0xa0, 0x44, 0x3a, 0x80, 0x88, 0x15, 0xf7, 0x2c, 0x59, 0xba, 0x43, 0xd7, 0x0b, 0x4c, 0x36, 0xe2,
- 0x33, 0xb2, 0xf7, 0x5c, 0xfa, 0x17, 0x12, 0x5c, 0xea, 0xe7, 0x64, 0x0a, 0x89, 0x3a, 0xde, 0x37,
- 0xa9, 0x59, 0xfe, 0xdd, 0x6e, 0x67, 0x77, 0x2c, 0x91, 0x9d, 0x78, 0x83, 0xfc, 0x9d, 0x4a, 0x5b,
- 0xa5, 0x23, 0x9d, 0x1f, 0x41, 0xce, 0x73, 0xf2, 0x06, 0xa3, 0xfa, 0x83, 0x3e, 0x35, 0xda, 0xa0,
- 0x6f, 0xc0, 0xf4, 0x9a, 0x65, 0x98, 0xc4, 0xe9, 0x14, 0xf5, 0x5d, 0x86, 0xfc, 0x8e, 0x61, 0xaa,
- 0xf6, 0xb1, 0x22, 0xce, 0x77, 0xb3, 0x36, 0x9d, 0x8f, 0x2a, 0x2c, 0xcb, 0x21, 0x4f, 0x31, 0x0e,
- 0xfe, 0x58, 0xfa, 0xa9, 0x04, 0x05, 0x5f, 0x2c, 0x37, 0x9e, 0xef, 0x02, 0x68, 0xad, 0xae, 0xe3,
- 0x62, 0x5b, 0x1c, 0xab, 0xc9, 0xb1, 0x30, 0xec, 0x32, 0xa3, 0xd6, 0x56, 0xe5, 0x0c, 0xcf, 0x50,
- 0xd3, 0xd1, 0xf5, 0xf0, 0x45, 0x07, 0xe3, 0x2b, 0x70, 0xda, 0x77, 0xbd, 0x01, 0xba, 0x05, 0x69,
- 0xc7, 0xb5, 0x6c, 0x0f, 0xde, 0x8c, 0xaf, 0x64, 0x4f, 0x03, 0x17, 0xb1, 0xd3, 0x03, 0xbc, 0x24,
- 0xdf, 0x32, 0xe4, 0xc9, 0xcc, 0x7c, 0x80, 0xbd, 0x2a, 0xa5, 0xce, 0xae, 0x12, 0xe3, 0xe0, 0x8f,
- 0xf7, 0xea, 0x30, 0x1b, 0x31, 0x11, 0xa1, 0x3c, 0x40, 0xe0, 0xbb, 0x2f, 0xfc, 0x8b, 0xb5, 0xcb,
- 0xab, 0xca, 0xf6, 0x66, 0xf9, 0xd9, 0xc6, 0x46, 0xad, 0xd1, 0xa8, 0xac, 0x16, 0x24, 0x54, 0x80,
- 0x5c, 0xe8, 0xab, 0x31, 0x09, 0xf6, 0x0d, 0xdb, 0x7b, 0x7f, 0x0e, 0xc0, 0xff, 0x18, 0x15, 0x91,
- 0xb5, 0x5e, 0xf9, 0x4c, 0x79, 0xb1, 0xfc, 0x74, 0xbb, 0x52, 0x2f, 0x8c, 0x21, 0x04, 0xf9, 0x95,
- 0xe5, 0x46, 0xb9, 0xaa, 0xc8, 0x95, 0xfa, 0xd6, 0xb3, 0xcd, 0x7a, 0x45, 0x7c, 0xfb, 0xf6, 0xde,
- 0x2a, 0xe4, 0x82, 0x17, 0xc3, 0xa0, 0x59, 0x98, 0x2e, 0x57, 0x2b, 0xe5, 0x75, 0xe5, 0x45, 0x6d,
- 0x59, 0x79, 0xbe, 0x5d, 0xd9, 0xae, 0x14, 0xc6, 0x68, 0xd1, 0x28, 0xf1, 0xf1, 0xf6, 0xd3, 0xa7,
- 0x05, 0x09, 0x4d, 0x43, 0x96, 0x3d, 0xd3, 0x2f, 0xcc, 0x14, 0x12, 0xf7, 0x36, 0x20, 0x1b, 0xb8,
- 0x42, 0x96, 0xbc, 0x6e, 0x6b, 0xbb, 0x5e, 0x55, 0x1a, 0xb5, 0x8d, 0x4a, 0xbd, 0xb1, 0xbc, 0xb1,
- 0xc5, 0x64, 0x50, 0xda, 0xf2, 0xca, 0x33, 0xb9, 0x51, 0x90, 0xbc, 0xe7, 0xc6, 0xb3, 0xed, 0x72,
- 0x55, 0x54, 0xa3, 0x94, 0x4a, 0x27, 0x0b, 0xc9, 0x7b, 0xbf, 0x26, 0xc1, 0xa5, 0x01, 0xd7, 0xa3,
- 0xa0, 0x2c, 0x4c, 0x6e, 0x9b, 0xf4, 0x0e, 0xcd, 0xc2, 0x18, 0x9a, 0x0a, 0xdc, 0x90, 0x52, 0x90,
- 0x50, 0x9a, 0xdd, 0x4e, 0x51, 0x48, 0xa0, 0x09, 0x48, 0xd4, 0x1f, 0x16, 0x92, 0xa4, 0xa4, 0x81,
- 0x0b, 0x46, 0x0a, 0x29, 0x94, 0xe1, 0xf7, 0x23, 0x14, 0xc6, 0x51, 0xce, 0xbf, 0xa0, 0xa0, 0x30,
- 0x41, 0x44, 0x79, 0x47, 0xfc, 0x0b, 0x93, 0xf7, 0xae, 0x41, 0xe0, 0xb8, 0x34, 0x02, 0x98, 0x78,
- 0xaa, 0xba, 0xd8, 0x71, 0x0b, 0x63, 0x68, 0x12, 0x92, 0xcb, 0xad, 0x56, 0x41, 0x7a, 0xf0, 0xb3,
- 0x24, 0xa4, 0xc5, 0x37, 0x54, 0xd0, 0x53, 0x18, 0x67, 0xab, 0xaf, 0x0b, 0x83, 0x9d, 0x5b, 0x3a,
- 0x28, 0xe6, 0xaf, 0x9e, 0xe5, 0xfd, 0x96, 0xc6, 0xd0, 0x9f, 0x87, 0x6c, 0xc0, 0x69, 0x40, 0x03,
- 0x57, 0x90, 0x42, 0x8e, 0xd2, 0xfc, 0xad, 0xb3, 0xb2, 0x79, 0xf2, 0x5f, 0x42, 0xc6, 0x33, 0x62,
- 0xe8, 0xfa, 0x30, 0x13, 0x27, 0x64, 0x0f, 0xb7, 0x83, 0xc4, 0x4a, 0x95, 0xc6, 0xde, 0x97, 0x90,
- 0x0d, 0xa8, 0xdf, 0x88, 0xa1, 0xa8, 0x4d, 0xf9, 0x81, 0x56, 0x72, 0xfe, 0xde, 0x48, 0xb9, 0xfd,
- 0x77, 0x3e, 0x87, 0x14, 0xb1, 0x10, 0x28, 0xca, 0xcd, 0xe9, 0xb1, 0x48, 0xf3, 0xd7, 0x87, 0xe6,
- 0x11, 0xfa, 0x59, 0xb9, 0xfb, 0x93, 0x3f, 0xbe, 0x32, 0xf6, 0x93, 0xd3, 0x2b, 0xd2, 0x4f, 0x4f,
- 0xaf, 0x48, 0x3f, 0x3b, 0xbd, 0x22, 0xfd, 0x97, 0xd3, 0x2b, 0xd2, 0x5f, 0xff, 0xf9, 0x95, 0xb1,
- 0x9f, 0xfe, 0xfc, 0xca, 0xd8, 0xcf, 0x7e, 0x7e, 0x65, 0xec, 0xf3, 0x49, 0xce, 0xbd, 0x33, 0x41,
- 0x3f, 0x54, 0xfe, 0xf0, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xf3, 0x3b, 0xf2, 0x8a, 0xd5, 0x7d,
- 0x00, 0x00,
+func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_api_459e7ba87f98a834) }
+
+var fileDescriptor_api_459e7ba87f98a834 = []byte{
+ // 8084 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x5d, 0x6c, 0x1b, 0x59,
+ 0x96, 0x9e, 0x8a, 0xa4, 0x24, 0xf2, 0xf0, 0x47, 0xa5, 0x2b, 0xd9, 0x66, 0xab, 0xbb, 0x2d, 0x9b,
+ 0xfe, 0xf7, 0x74, 0x4b, 0x6d, 0x7b, 0x3a, 0xdd, 0xdb, 0xee, 0xf5, 0xac, 0x44, 0xd1, 0x26, 0x25,
+ 0x4b, 0x96, 0x8b, 0x94, 0x3d, 0xdd, 0x3b, 0x93, 0x9a, 0x52, 0xd5, 0x15, 0x55, 0x23, 0xb2, 0x8a,
+ 0xae, 0x2a, 0xea, 0xc7, 0x40, 0x80, 0x4d, 0xf2, 0xb0, 0xc1, 0x26, 0x18, 0xe4, 0x21, 0x09, 0x82,
+ 0x6c, 0x36, 0xd3, 0xc8, 0x06, 0xd9, 0x00, 0x8b, 0x59, 0xe4, 0x2d, 0x48, 0xb0, 0xf9, 0x79, 0xd8,
+ 0x00, 0x93, 0xc5, 0x2e, 0x30, 0x09, 0x90, 0xec, 0x20, 0x40, 0x84, 0xac, 0x06, 0x08, 0x82, 0xbc,
+ 0x65, 0x1f, 0x12, 0xa0, 0x81, 0x04, 0xc1, 0xfd, 0xa9, 0x3f, 0xb2, 0xf8, 0x23, 0x4f, 0x75, 0xb6,
+ 0x81, 0x79, 0x91, 0x58, 0xa7, 0xee, 0x39, 0x75, 0xef, 0xb9, 0xe7, 0x9e, 0x7b, 0xbe, 0x5b, 0xe7,
+ 0xde, 0x82, 0x59, 0xcb, 0x54, 0xd4, 0xfd, 0xce, 0xee, 0xb2, 0xd2, 0xd1, 0x97, 0x3a, 0x96, 0xe9,
+ 0x98, 0x68, 0x56, 0x35, 0xd5, 0x03, 0x4a, 0x5e, 0xe2, 0x37, 0x17, 0xee, 0x1e, 0x1c, 0x2e, 0x1f,
+ 0x1c, 0xda, 0xd8, 0x3a, 0xc4, 0xd6, 0xb2, 0x6a, 0x1a, 0x6a, 0xd7, 0xb2, 0xb0, 0xa1, 0x9e, 0x2c,
+ 0xb7, 0x4c, 0xf5, 0x80, 0xfe, 0xd1, 0x8d, 0x26, 0x63, 0x5f, 0x40, 0xae, 0x44, 0x4d, 0x71, 0x14,
+ 0x4e, 0x9b, 0x77, 0x69, 0xd8, 0xb2, 0x4c, 0xcb, 0xe6, 0xd4, 0x8b, 0x2e, 0xb5, 0x8d, 0x1d, 0x25,
+ 0x50, 0xfa, 0x6d, 0xdb, 0x31, 0x2d, 0xa5, 0x89, 0x97, 0xb1, 0xd1, 0xd4, 0x0d, 0x4c, 0x0a, 0x1c,
+ 0xaa, 0x2a, 0xbf, 0xf9, 0x4e, 0xe4, 0xcd, 0x07, 0xfc, 0x6e, 0xb1, 0xeb, 0xe8, 0xad, 0xe5, 0xfd,
+ 0x96, 0xba, 0xec, 0xe8, 0x6d, 0x6c, 0x3b, 0x4a, 0xbb, 0xc3, 0xef, 0xdc, 0xa5, 0x77, 0x1c, 0x4b,
+ 0x51, 0x75, 0xa3, 0xe9, 0xfe, 0xef, 0xec, 0x2e, 0x5b, 0x58, 0x35, 0x2d, 0x0d, 0x6b, 0xb2, 0xdd,
+ 0x51, 0x0c, 0xb7, 0xba, 0x4d, 0xb3, 0x69, 0xd2, 0x9f, 0xcb, 0xe4, 0x17, 0xa3, 0x96, 0x7e, 0x5f,
+ 0x80, 0xbc, 0x84, 0x5f, 0x75, 0xb1, 0xed, 0x54, 0xb1, 0xa2, 0x61, 0x0b, 0xbd, 0x05, 0xc9, 0x03,
+ 0x7c, 0x52, 0x4c, 0x5e, 0x11, 0x6e, 0xe7, 0x56, 0xa7, 0xbf, 0x3c, 0x5d, 0x4c, 0x6e, 0xe0, 0x13,
+ 0x89, 0xd0, 0xd0, 0x15, 0x98, 0xc6, 0x86, 0x26, 0x93, 0xdb, 0xa9, 0xf0, 0xed, 0x29, 0x6c, 0x68,
+ 0x1b, 0xf8, 0x04, 0x7d, 0x07, 0xd2, 0x36, 0x91, 0x66, 0xa8, 0xb8, 0x38, 0x79, 0x45, 0xb8, 0x3d,
+ 0xb9, 0xfa, 0x2b, 0x5f, 0x9e, 0x2e, 0x7e, 0xda, 0xd4, 0x9d, 0xfd, 0xee, 0xee, 0x92, 0x6a, 0xb6,
+ 0x97, 0xbd, 0x7e, 0xd0, 0x76, 0xfd, 0xdf, 0xcb, 0x9d, 0x83, 0xe6, 0x72, 0xaf, 0x0e, 0x96, 0x1a,
+ 0xc7, 0x46, 0x1d, 0xbf, 0x92, 0x3c, 0x89, 0x9f, 0xa4, 0xfe, 0xfb, 0x17, 0x8b, 0xc2, 0x7a, 0x2a,
+ 0x2d, 0x88, 0x89, 0xf5, 0x54, 0x3a, 0x21, 0x26, 0x4b, 0xbf, 0x9d, 0x84, 0x82, 0x84, 0xed, 0x8e,
+ 0x69, 0xd8, 0x98, 0xd7, 0xff, 0x03, 0x48, 0x3a, 0xc7, 0x06, 0xad, 0x7f, 0xf6, 0xfe, 0xe5, 0xa5,
+ 0xbe, 0x7e, 0x5f, 0x6a, 0x58, 0x8a, 0x61, 0x2b, 0xaa, 0xa3, 0x9b, 0x86, 0x44, 0x8a, 0xa2, 0x8f,
+ 0x21, 0x6b, 0x61, 0xbb, 0xdb, 0xc6, 0x54, 0x5d, 0xb4, 0x69, 0xd9, 0xfb, 0x97, 0x22, 0x38, 0xeb,
+ 0x1d, 0xc5, 0x90, 0x80, 0x95, 0x25, 0xbf, 0xd1, 0x5b, 0x90, 0x36, 0xba, 0x6d, 0xa2, 0x10, 0x9b,
+ 0x36, 0x37, 0x29, 0x4d, 0x1b, 0xdd, 0xf6, 0x06, 0x3e, 0xb1, 0xd1, 0xb7, 0xe1, 0xa2, 0x86, 0x3b,
+ 0x16, 0x56, 0x15, 0x07, 0x6b, 0xb2, 0xa5, 0x18, 0x4d, 0x2c, 0xeb, 0xc6, 0x9e, 0x69, 0x17, 0xa7,
+ 0xae, 0x24, 0x6f, 0x67, 0xef, 0xbf, 0x13, 0x21, 0x5f, 0x22, 0xa5, 0x6a, 0xc6, 0x9e, 0xb9, 0x9a,
+ 0xfa, 0xf1, 0xe9, 0xe2, 0x84, 0x34, 0xef, 0x4b, 0xf0, 0x6e, 0xd9, 0xa8, 0x0e, 0x79, 0x5e, 0x5d,
+ 0x0b, 0x2b, 0xb6, 0x69, 0x14, 0xa7, 0xaf, 0x08, 0xb7, 0x0b, 0xf7, 0x97, 0xa2, 0x04, 0x86, 0x54,
+ 0x43, 0x2e, 0xbb, 0x6d, 0x2c, 0x51, 0x2e, 0x29, 0x67, 0x05, 0xae, 0xd0, 0xdb, 0x90, 0x21, 0x2d,
+ 0xd9, 0x3d, 0x71, 0xb0, 0x5d, 0x4c, 0xd3, 0xa6, 0x90, 0xa6, 0xad, 0x92, 0xeb, 0xd2, 0x23, 0xc8,
+ 0x05, 0x59, 0x11, 0x82, 0x82, 0x54, 0xa9, 0xef, 0x6c, 0x56, 0xe4, 0x9d, 0xad, 0x8d, 0xad, 0x67,
+ 0x2f, 0xb7, 0xc4, 0x09, 0x34, 0x0f, 0x22, 0xa7, 0x6d, 0x54, 0x3e, 0x93, 0x9f, 0xd6, 0x36, 0x6b,
+ 0x0d, 0x51, 0x58, 0x48, 0xfd, 0xb5, 0xdf, 0xbe, 0x3c, 0x51, 0x7a, 0x01, 0xf0, 0x04, 0x3b, 0xdc,
+ 0xcc, 0xd0, 0x2a, 0x4c, 0xed, 0xd3, 0xfa, 0x14, 0x05, 0xaa, 0xe9, 0x2b, 0x91, 0x15, 0x0f, 0x98,
+ 0xe4, 0x6a, 0x9a, 0x68, 0xe3, 0x27, 0xa7, 0x8b, 0x82, 0xc4, 0x39, 0x99, 0x25, 0x94, 0xfe, 0xb5,
+ 0x00, 0x59, 0x2a, 0x98, 0xb5, 0x12, 0x95, 0x7b, 0x24, 0x5f, 0x1d, 0xa9, 0x92, 0x7e, 0xd1, 0x68,
+ 0x09, 0x26, 0x0f, 0x95, 0x56, 0x17, 0x17, 0x13, 0x54, 0x46, 0x31, 0x42, 0xc6, 0x0b, 0x72, 0x5f,
+ 0x62, 0xc5, 0xd0, 0x43, 0xc8, 0xe9, 0x86, 0x83, 0x0d, 0x47, 0x66, 0x6c, 0xc9, 0x11, 0x6c, 0x59,
+ 0x56, 0x9a, 0x5e, 0x94, 0xfe, 0x85, 0x00, 0xb0, 0xdd, 0x8d, 0x53, 0x35, 0xe8, 0x9b, 0x63, 0xd6,
+ 0x9f, 0xdb, 0x18, 0x6f, 0xc5, 0x45, 0x98, 0xd2, 0x8d, 0x96, 0x6e, 0xb0, 0xfa, 0xa7, 0x25, 0x7e,
+ 0x85, 0xe6, 0x61, 0x72, 0xb7, 0xa5, 0x1b, 0x1a, 0x1d, 0x15, 0x69, 0x89, 0x5d, 0x70, 0xf5, 0x4b,
+ 0x90, 0xa5, 0x75, 0x8f, 0x51, 0xfb, 0xa5, 0x3f, 0x4a, 0xc0, 0x85, 0xb2, 0x69, 0x68, 0x3a, 0x19,
+ 0x9e, 0x4a, 0xeb, 0x6b, 0xa1, 0x9b, 0x75, 0x08, 0x0c, 0x44, 0x19, 0x1f, 0x77, 0xc6, 0xec, 0x69,
+ 0xe4, 0x73, 0x55, 0x8e, 0x3b, 0x94, 0x16, 0xad, 0x4f, 0xf4, 0x4d, 0xb8, 0xa4, 0xb4, 0x5a, 0xe6,
+ 0x91, 0xac, 0xef, 0xc9, 0x9a, 0x89, 0x6d, 0xd9, 0x30, 0x1d, 0x19, 0x1f, 0xeb, 0xb6, 0x43, 0xdd,
+ 0x4a, 0x5a, 0x9a, 0xa3, 0xb7, 0x6b, 0x7b, 0x6b, 0x26, 0xb6, 0xb7, 0x4c, 0xa7, 0x42, 0x6e, 0x91,
+ 0x31, 0x4b, 0x2a, 0xc3, 0xc6, 0xec, 0x14, 0x71, 0xc8, 0x52, 0x1a, 0x1f, 0x77, 0xe8, 0x98, 0xe5,
+ 0x5d, 0xf4, 0x5d, 0xb8, 0xd8, 0xab, 0xcd, 0x38, 0x7b, 0xeb, 0x3f, 0x08, 0x50, 0xa8, 0x19, 0xba,
+ 0xf3, 0xb5, 0xe8, 0x26, 0x4f, 0xb5, 0xc9, 0xa0, 0x6a, 0xef, 0x82, 0xb8, 0xa7, 0xe8, 0xad, 0x67,
+ 0x46, 0xc3, 0x6c, 0xef, 0xda, 0x8e, 0x69, 0x60, 0x9b, 0xeb, 0xbe, 0x8f, 0xce, 0x75, 0xf6, 0x02,
+ 0x66, 0xbc, 0x36, 0xc5, 0xa9, 0xac, 0xd7, 0x20, 0xd6, 0x0c, 0xd5, 0xc2, 0x6d, 0x6c, 0xc4, 0xaa,
+ 0xad, 0x77, 0x20, 0xa3, 0xbb, 0x72, 0xa9, 0xc6, 0x92, 0x92, 0x4f, 0xe0, 0x6d, 0xea, 0xc2, 0x6c,
+ 0xe0, 0xd9, 0x71, 0xba, 0x4b, 0x32, 0x71, 0xe0, 0x23, 0xd9, 0xef, 0x2f, 0x32, 0x71, 0xe0, 0x23,
+ 0xe6, 0xde, 0x3e, 0x83, 0xfc, 0x1a, 0x6e, 0x61, 0x07, 0xc7, 0xef, 0xfb, 0x77, 0xa0, 0xe0, 0x8a,
+ 0x8e, 0xb3, 0x93, 0x7e, 0x4b, 0x00, 0xc4, 0xe5, 0x92, 0x19, 0x37, 0xce, 0x7e, 0x5a, 0x24, 0x61,
+ 0x86, 0xd3, 0xb5, 0x0c, 0x16, 0x2f, 0x30, 0x2b, 0x05, 0x46, 0xa2, 0x21, 0x83, 0xef, 0x83, 0x53,
+ 0x41, 0x1f, 0xec, 0x85, 0x3d, 0x24, 0xe0, 0x39, 0x82, 0xb9, 0x50, 0xf5, 0xe2, 0xed, 0xca, 0x14,
+ 0xad, 0x59, 0xe2, 0x4a, 0x32, 0x18, 0xdb, 0x51, 0x62, 0xe9, 0x1f, 0x08, 0x30, 0x5b, 0x6e, 0x61,
+ 0xc5, 0x8a, 0x5d, 0x2f, 0xdf, 0x82, 0xb4, 0x86, 0x15, 0x8d, 0x36, 0x9c, 0x0d, 0xf8, 0x77, 0x03,
+ 0x52, 0x48, 0x84, 0xbb, 0xb4, 0xdf, 0x52, 0x97, 0x1a, 0x6e, 0xec, 0xcb, 0x47, 0xbd, 0xc7, 0xc4,
+ 0x0d, 0xe2, 0x33, 0x40, 0xc1, 0xfa, 0xc5, 0x69, 0x14, 0xff, 0x48, 0x00, 0x24, 0xe1, 0x43, 0x6c,
+ 0x39, 0xb1, 0x37, 0x7e, 0x0d, 0xb2, 0x8e, 0x62, 0x35, 0xb1, 0x23, 0x93, 0xd8, 0xfe, 0x3c, 0xed,
+ 0x07, 0xc6, 0x47, 0xc8, 0x5c, 0x03, 0x9f, 0xc3, 0x5c, 0xa8, 0x96, 0x71, 0xaa, 0xe0, 0x7f, 0x09,
+ 0x90, 0xad, 0xab, 0x8a, 0x11, 0x67, 0xdb, 0x1f, 0x41, 0xd6, 0x56, 0x15, 0x43, 0xde, 0x33, 0xad,
+ 0xb6, 0xe2, 0x50, 0xa3, 0x2f, 0x84, 0xda, 0xee, 0xc5, 0xdd, 0xaa, 0x62, 0x3c, 0xa6, 0x85, 0x24,
+ 0xb0, 0xbd, 0xdf, 0xe8, 0x39, 0x64, 0x0f, 0xf0, 0x89, 0xcc, 0x91, 0x1a, 0x9d, 0x29, 0x0b, 0xf7,
+ 0x3f, 0x08, 0xf0, 0x1f, 0x1c, 0x2e, 0xb9, 0x00, 0x6f, 0x29, 0x00, 0xf0, 0x96, 0x08, 0xc7, 0x52,
+ 0xdd, 0xb1, 0xb0, 0xd1, 0x74, 0xf6, 0x25, 0x38, 0xc0, 0x27, 0x4f, 0x99, 0x8c, 0xe0, 0x50, 0x5b,
+ 0x4f, 0xa5, 0x93, 0x62, 0xaa, 0xf4, 0xbf, 0x05, 0xc8, 0xb1, 0x86, 0xc7, 0x39, 0xd4, 0x3e, 0x84,
+ 0x94, 0x65, 0x1e, 0xb1, 0xa1, 0x96, 0xbd, 0xff, 0x76, 0x84, 0x88, 0x0d, 0x7c, 0x12, 0x9c, 0xe3,
+ 0x68, 0x71, 0xb4, 0x0a, 0x3c, 0x7a, 0x94, 0x29, 0x77, 0x72, 0x5c, 0x6e, 0x60, 0x5c, 0x12, 0x91,
+ 0x71, 0x0b, 0x66, 0x76, 0x15, 0x47, 0xdd, 0x97, 0x2d, 0x5e, 0x49, 0x32, 0x1f, 0x26, 0x6f, 0xe7,
+ 0xa4, 0x02, 0x25, 0xbb, 0x55, 0xb7, 0x4b, 0xff, 0xc7, 0xb5, 0x7a, 0x1b, 0xff, 0x42, 0xf6, 0xfc,
+ 0xff, 0x15, 0xf8, 0x78, 0x72, 0xdb, 0xff, 0x8b, 0x66, 0x00, 0x3f, 0x4c, 0xc0, 0xa5, 0xf2, 0x3e,
+ 0x56, 0x0f, 0xca, 0xa6, 0x61, 0xeb, 0xb6, 0x43, 0x34, 0x18, 0xa7, 0x15, 0xbc, 0x0d, 0x99, 0x23,
+ 0xdd, 0xd9, 0x97, 0x35, 0x7d, 0x6f, 0x8f, 0x7a, 0xbe, 0xb4, 0x94, 0x26, 0x84, 0x35, 0x7d, 0x6f,
+ 0x0f, 0x3d, 0x80, 0x54, 0xdb, 0xd4, 0x58, 0x90, 0x5d, 0xb8, 0xbf, 0x18, 0x21, 0x9e, 0x56, 0xcd,
+ 0xee, 0xb6, 0x37, 0x4d, 0x0d, 0x4b, 0xb4, 0x30, 0xba, 0x0c, 0xa0, 0x12, 0x6a, 0xc7, 0xd4, 0x0d,
+ 0x87, 0xcf, 0xa2, 0x01, 0x0a, 0xaa, 0x42, 0xc6, 0xc1, 0x56, 0x5b, 0x37, 0x14, 0x07, 0x17, 0x27,
+ 0xa9, 0xf2, 0xae, 0x47, 0x56, 0xbc, 0xd3, 0xd2, 0x55, 0x65, 0x0d, 0xdb, 0xaa, 0xa5, 0x77, 0x1c,
+ 0xd3, 0xe2, 0x5a, 0xf4, 0x99, 0xb9, 0xc7, 0xfd, 0x41, 0x0a, 0x8a, 0xfd, 0x1a, 0x8a, 0xd3, 0x4e,
+ 0xb6, 0x61, 0x8a, 0xe0, 0xf4, 0x96, 0xc3, 0x2d, 0xe5, 0xfe, 0x20, 0x45, 0x44, 0xd4, 0x80, 0xe2,
+ 0xfd, 0x96, 0xc3, 0x2b, 0xcf, 0xe5, 0x2c, 0xfc, 0xbe, 0x00, 0x53, 0xec, 0x06, 0xba, 0x07, 0x69,
+ 0xbe, 0x30, 0xa1, 0xd1, 0x3a, 0x26, 0x57, 0x2f, 0x9e, 0x9d, 0x2e, 0x4e, 0xb3, 0xb5, 0x86, 0xb5,
+ 0x2f, 0xfd, 0x9f, 0xd2, 0x34, 0x2d, 0x57, 0xd3, 0x48, 0x9f, 0xd9, 0x8e, 0x62, 0x39, 0x74, 0x11,
+ 0x28, 0xc1, 0x30, 0x07, 0x25, 0x6c, 0xe0, 0x13, 0xb4, 0x0e, 0x53, 0xb6, 0xa3, 0x38, 0x5d, 0x9b,
+ 0xf7, 0xda, 0xb9, 0x2a, 0x5b, 0xa7, 0x9c, 0x12, 0x97, 0x40, 0x82, 0x21, 0x0d, 0x3b, 0x8a, 0xde,
+ 0xa2, 0xdd, 0x98, 0x91, 0xf8, 0x55, 0xe9, 0x37, 0x05, 0x98, 0x62, 0x45, 0xd1, 0x25, 0x98, 0x93,
+ 0x56, 0xb6, 0x9e, 0x54, 0xe4, 0xda, 0xd6, 0x5a, 0xa5, 0x51, 0x91, 0x36, 0x6b, 0x5b, 0x2b, 0x8d,
+ 0x8a, 0x38, 0x81, 0x2e, 0x02, 0x72, 0x6f, 0x94, 0x9f, 0x6d, 0xd5, 0x6b, 0xf5, 0x46, 0x65, 0xab,
+ 0x21, 0x0a, 0x74, 0x8d, 0x82, 0xd2, 0x03, 0xd4, 0x04, 0xba, 0x0e, 0x57, 0x7a, 0xa9, 0x72, 0xbd,
+ 0xb1, 0xd2, 0xa8, 0xcb, 0x95, 0x7a, 0xa3, 0xb6, 0xb9, 0xd2, 0xa8, 0xac, 0x89, 0xc9, 0x21, 0xa5,
+ 0xc8, 0x43, 0x24, 0xa9, 0x52, 0x6e, 0x88, 0xa9, 0xd2, 0x6b, 0xb8, 0x20, 0x61, 0xd5, 0x6c, 0x77,
+ 0xba, 0x0e, 0x26, 0xb5, 0xb4, 0xe3, 0x1c, 0x2f, 0x97, 0x60, 0x5a, 0xb3, 0x4e, 0x64, 0xab, 0x6b,
+ 0xf0, 0xd1, 0x32, 0xa5, 0x59, 0x27, 0x52, 0xd7, 0xe0, 0xc6, 0xf8, 0x4f, 0x05, 0xb8, 0xd8, 0xfb,
+ 0xf0, 0x38, 0x4d, 0xf1, 0x39, 0x64, 0x15, 0x4d, 0xc3, 0x9a, 0xac, 0xe1, 0x96, 0xa3, 0xf0, 0x50,
+ 0xe5, 0x6e, 0x40, 0x12, 0x5f, 0xc0, 0x5b, 0xf2, 0x16, 0xf0, 0x36, 0x5f, 0x94, 0xcb, 0xb4, 0x22,
+ 0x6b, 0x84, 0xc3, 0x75, 0x45, 0x54, 0x08, 0xa5, 0x94, 0xfe, 0x2c, 0x05, 0xf9, 0x8a, 0xa1, 0x35,
+ 0x8e, 0x63, 0x9d, 0x5d, 0x2e, 0xc2, 0x94, 0x6a, 0xb6, 0xdb, 0xba, 0xe3, 0xaa, 0x89, 0x5d, 0xa1,
+ 0x5f, 0x0a, 0x04, 0x9a, 0xc9, 0x31, 0x02, 0x2d, 0x3f, 0xc4, 0x44, 0xdf, 0x83, 0x4b, 0xc4, 0x83,
+ 0x5a, 0x86, 0xd2, 0x92, 0x99, 0x34, 0xd9, 0xb1, 0xf4, 0x66, 0x13, 0x5b, 0x7c, 0xb9, 0xf0, 0x76,
+ 0x44, 0x3d, 0x6b, 0x9c, 0xa3, 0x4c, 0x19, 0x1a, 0xac, 0xbc, 0x74, 0x41, 0x8f, 0x22, 0xa3, 0x4f,
+ 0x01, 0xc8, 0xe4, 0x44, 0x97, 0x20, 0x6d, 0xee, 0x9b, 0x06, 0xad, 0x41, 0xba, 0xee, 0x88, 0x30,
+ 0x90, 0x6b, 0x1b, 0x2d, 0x13, 0x6c, 0xf1, 0xaa, 0xab, 0x5b, 0x58, 0xbe, 0xd7, 0x51, 0xe9, 0x62,
+ 0x40, 0x7a, 0xb5, 0x70, 0x76, 0xba, 0x08, 0x12, 0x23, 0xdf, 0xdb, 0x2e, 0x13, 0xac, 0xc1, 0x7e,
+ 0x77, 0x54, 0xf4, 0x12, 0xee, 0x04, 0xd6, 0x34, 0xc8, 0x5c, 0xcc, 0x9b, 0xa5, 0x38, 0xf2, 0xbe,
+ 0xde, 0xdc, 0xc7, 0x96, 0xec, 0x2d, 0x36, 0xd3, 0xf5, 0xc0, 0xb4, 0x74, 0xdd, 0x67, 0x28, 0x2b,
+ 0x06, 0xab, 0xfd, 0x8a, 0x53, 0xa5, 0x85, 0x3d, 0x9d, 0x11, 0xe5, 0x77, 0x4c, 0xdd, 0x36, 0x8d,
+ 0x62, 0x86, 0x29, 0x9f, 0x5d, 0xa1, 0x3b, 0x20, 0x3a, 0xc7, 0x86, 0xbc, 0x8f, 0x15, 0xcb, 0xd9,
+ 0xc5, 0x8a, 0x43, 0xe6, 0x6d, 0xa0, 0x25, 0x66, 0x9c, 0x63, 0xa3, 0x1a, 0x20, 0xa3, 0xe7, 0x20,
+ 0xea, 0x86, 0xbc, 0xd7, 0xd2, 0x9b, 0xfb, 0x8e, 0x7c, 0x64, 0xe9, 0x0e, 0xb6, 0x8b, 0xb3, 0x54,
+ 0x21, 0x51, 0x76, 0x5b, 0xe7, 0xab, 0xc3, 0xda, 0x4b, 0x52, 0x92, 0xab, 0xa6, 0xa0, 0x1b, 0x8f,
+ 0x29, 0x3f, 0x25, 0xda, 0xde, 0xec, 0x3e, 0x2d, 0xa6, 0x4b, 0xff, 0x45, 0x80, 0x82, 0x6b, 0x74,
+ 0x71, 0x8e, 0x8f, 0xdb, 0x20, 0x9a, 0x06, 0x96, 0x3b, 0xfb, 0x8a, 0x8d, 0xb9, 0x36, 0xf9, 0x14,
+ 0x54, 0x30, 0x0d, 0xbc, 0x4d, 0xc8, 0x4c, 0x69, 0x68, 0x1b, 0x66, 0x6d, 0x47, 0x69, 0xea, 0x46,
+ 0x33, 0xa0, 0xe4, 0xc9, 0xf1, 0x43, 0x7f, 0x91, 0x73, 0x7b, 0xf4, 0x50, 0xdc, 0xf2, 0x27, 0x02,
+ 0xcc, 0xae, 0x68, 0x6d, 0xdd, 0xa8, 0x77, 0x5a, 0x7a, 0xac, 0x2b, 0x0d, 0xd7, 0x21, 0x63, 0x13,
+ 0x99, 0xbe, 0xf3, 0xf7, 0x51, 0x62, 0x9a, 0xde, 0x21, 0xb3, 0xc0, 0x53, 0x98, 0xc1, 0xc7, 0x1d,
+ 0xdd, 0x52, 0x1c, 0xdd, 0x34, 0x18, 0xac, 0x49, 0x8d, 0xdf, 0xb6, 0x82, 0xcf, 0xeb, 0x43, 0x1b,
+ 0xde, 0xb2, 0xcf, 0x00, 0x05, 0x1b, 0x16, 0x27, 0xbe, 0x91, 0x61, 0x8e, 0x8a, 0xde, 0x31, 0xec,
+ 0x98, 0xb5, 0xc6, 0xbd, 0xf3, 0xaf, 0xc2, 0x7c, 0xf8, 0x01, 0x71, 0xd6, 0xfe, 0xbb, 0xbc, 0xc7,
+ 0x37, 0xb1, 0xd5, 0xfc, 0x0a, 0xd6, 0x5a, 0x5c, 0xbd, 0x73, 0xf1, 0x71, 0xd6, 0xfc, 0x37, 0x04,
+ 0x78, 0x8b, 0xca, 0xa6, 0x6f, 0x65, 0xf6, 0xb0, 0xf5, 0x14, 0x2b, 0x76, 0xac, 0x08, 0xfb, 0x1a,
+ 0x4c, 0x31, 0xa4, 0x4c, 0x2d, 0x76, 0x72, 0x35, 0x4b, 0xe2, 0x9a, 0xba, 0x63, 0x5a, 0x24, 0xae,
+ 0xe1, 0xb7, 0x78, 0x3b, 0x15, 0x58, 0x88, 0xaa, 0x4b, 0xcc, 0x4b, 0x09, 0xb3, 0x3c, 0xbc, 0x24,
+ 0x26, 0x5e, 0xde, 0x27, 0x71, 0x15, 0xaa, 0x40, 0x56, 0xa5, 0xbf, 0x64, 0xe7, 0xa4, 0x83, 0xa9,
+ 0xfc, 0xc2, 0xb0, 0xc8, 0x94, 0xb1, 0x35, 0x4e, 0x3a, 0x98, 0x84, 0xb7, 0xee, 0x6f, 0xa2, 0xae,
+ 0x40, 0x53, 0x87, 0xc6, 0xb6, 0x74, 0x7c, 0xd1, 0xb2, 0x6e, 0x78, 0x18, 0xd2, 0xc4, 0x3f, 0x4f,
+ 0x72, 0x55, 0xb0, 0x27, 0x71, 0xa6, 0x58, 0xa3, 0x99, 0xcf, 0x43, 0x2f, 0xc8, 0x82, 0xcd, 0x4f,
+ 0x9c, 0xa3, 0xf9, 0x81, 0x95, 0x79, 0x9f, 0x8a, 0x3e, 0x83, 0xc0, 0xda, 0xbb, 0xcc, 0x5a, 0xe6,
+ 0xa2, 0xa5, 0xf3, 0x28, 0x65, 0xd6, 0x97, 0xc2, 0xe8, 0x36, 0x2a, 0x43, 0x1a, 0x1f, 0x77, 0x64,
+ 0x0d, 0xdb, 0x2a, 0x77, 0x6b, 0xa5, 0x41, 0x6f, 0xf2, 0xfa, 0xf0, 0xc3, 0x34, 0x3e, 0xee, 0x10,
+ 0x22, 0xda, 0x21, 0x33, 0x9c, 0x1b, 0x4e, 0xd0, 0x6a, 0xdb, 0xa3, 0xe1, 0x88, 0x6f, 0x2f, 0x5c,
+ 0xdc, 0x8c, 0x17, 0x49, 0x30, 0x11, 0xbc, 0xef, 0xbe, 0x10, 0xe0, 0xed, 0xc8, 0xbe, 0x8b, 0x73,
+ 0xb2, 0xfb, 0x14, 0x52, 0x54, 0x05, 0x89, 0x73, 0xaa, 0x80, 0x72, 0x95, 0x7e, 0xd7, 0x1d, 0xf5,
+ 0x12, 0x6e, 0x99, 0x44, 0xbd, 0x5f, 0xc1, 0xba, 0xda, 0xb4, 0xdb, 0xed, 0x89, 0x73, 0x77, 0xbb,
+ 0xcb, 0xda, 0xe3, 0x16, 0x7a, 0x2a, 0x1b, 0xa7, 0x5b, 0xf8, 0x3b, 0x02, 0xcc, 0x79, 0x31, 0x50,
+ 0xcc, 0xe1, 0xf0, 0x87, 0x90, 0x34, 0xcc, 0xa3, 0xf3, 0x2c, 0x2d, 0x92, 0xf2, 0xfe, 0xb4, 0x15,
+ 0xae, 0x57, 0x9c, 0xad, 0xfe, 0x77, 0x09, 0xc8, 0x3c, 0x29, 0xc7, 0xd9, 0xd6, 0x4f, 0xf9, 0x12,
+ 0x36, 0x1b, 0xea, 0x51, 0x66, 0xe9, 0x3d, 0x6f, 0xe9, 0x49, 0x79, 0x03, 0x9f, 0xb8, 0x66, 0x49,
+ 0xb8, 0xd0, 0x0a, 0x64, 0x9c, 0x7d, 0x0b, 0xdb, 0xfb, 0x66, 0x4b, 0x3b, 0x4f, 0xcc, 0xe2, 0x73,
+ 0x2d, 0x1c, 0xc0, 0x24, 0x95, 0xeb, 0xa6, 0x51, 0x08, 0x11, 0x69, 0x14, 0xe4, 0x31, 0x5e, 0xd8,
+ 0x97, 0x38, 0xcf, 0x63, 0x5c, 0x02, 0xeb, 0x1c, 0x2f, 0x36, 0x9a, 0x14, 0xa7, 0x4a, 0xcf, 0x01,
+ 0x48, 0xd3, 0xe2, 0xec, 0x9e, 0xbf, 0x91, 0x84, 0xc2, 0x76, 0xd7, 0xde, 0x8f, 0xd9, 0x1e, 0xcb,
+ 0x00, 0x9d, 0xae, 0x4d, 0x11, 0xc6, 0xb1, 0xc1, 0xdb, 0x3f, 0x22, 0x4f, 0xc3, 0x55, 0x00, 0xe3,
+ 0x6b, 0x1c, 0x1b, 0xa8, 0xca, 0x85, 0x60, 0xd9, 0x4f, 0xf6, 0xb8, 0x36, 0x0c, 0x8b, 0x36, 0x8e,
+ 0x8d, 0x4d, 0xec, 0x81, 0x50, 0x26, 0x09, 0x13, 0x49, 0x9f, 0xc2, 0x34, 0xb9, 0x90, 0x1d, 0xf3,
+ 0x3c, 0x5d, 0x3e, 0x45, 0x78, 0x1a, 0x26, 0x7a, 0x08, 0x19, 0xc6, 0x4d, 0x26, 0xae, 0x29, 0x3a,
+ 0x71, 0x45, 0xb5, 0x85, 0xab, 0x91, 0x4e, 0x59, 0x69, 0xca, 0x4a, 0xa6, 0xa9, 0x79, 0x98, 0xdc,
+ 0x33, 0x2d, 0x15, 0xd3, 0x0c, 0x8e, 0xb4, 0xc4, 0x2e, 0x82, 0xbd, 0xba, 0x9e, 0x4a, 0xa7, 0xc5,
+ 0xcc, 0x7a, 0x2a, 0x9d, 0x11, 0xa1, 0xf4, 0x9b, 0x02, 0xcc, 0x78, 0xdd, 0x11, 0xa7, 0x2f, 0x2f,
+ 0x87, 0x74, 0x79, 0xfe, 0x0e, 0x21, 0x6a, 0x2c, 0xfd, 0x31, 0x0d, 0x6c, 0x54, 0xf3, 0x90, 0xf6,
+ 0x4f, 0x9c, 0xf6, 0xf2, 0x90, 0x25, 0xf4, 0x24, 0xce, 0xdb, 0xc7, 0x34, 0xb7, 0xe7, 0x1e, 0xcc,
+ 0xeb, 0x6d, 0xe2, 0xe5, 0x75, 0xa7, 0x75, 0xc2, 0x51, 0x99, 0x83, 0xdd, 0x77, 0xc4, 0x73, 0xfe,
+ 0xbd, 0xb2, 0x7b, 0x8b, 0x3b, 0x3e, 0xf6, 0xce, 0xc7, 0x6f, 0x4f, 0x9c, 0x0a, 0xaf, 0x41, 0xde,
+ 0x62, 0xa2, 0x49, 0x74, 0x72, 0x4e, 0x9d, 0xe7, 0x3c, 0x56, 0xa2, 0xf6, 0xdf, 0x49, 0xc0, 0xcc,
+ 0xf3, 0x2e, 0xb6, 0x4e, 0xbe, 0x4e, 0x4a, 0xbf, 0x09, 0x33, 0x47, 0x8a, 0xee, 0xc8, 0x7b, 0xa6,
+ 0x25, 0x77, 0x3b, 0x9a, 0xe2, 0xb8, 0x59, 0x25, 0x79, 0x42, 0x7e, 0x6c, 0x5a, 0x3b, 0x94, 0x88,
+ 0x30, 0xa0, 0x03, 0xc3, 0x3c, 0x32, 0x64, 0x42, 0xa6, 0x68, 0xf8, 0xd8, 0xe0, 0x8b, 0xd1, 0xab,
+ 0x1f, 0xfd, 0xe7, 0xd3, 0xc5, 0x07, 0x63, 0xe5, 0x8d, 0xd1, 0x1c, 0xb8, 0x6e, 0x57, 0xd7, 0x96,
+ 0x76, 0x76, 0x6a, 0x6b, 0x92, 0x48, 0x45, 0xbe, 0x64, 0x12, 0x1b, 0xc7, 0x86, 0x3b, 0x8b, 0xff,
+ 0xe3, 0x04, 0x88, 0xbe, 0xa6, 0xe2, 0xec, 0xce, 0x0a, 0x64, 0x5f, 0x75, 0xb1, 0xa5, 0xbf, 0x41,
+ 0x67, 0x02, 0x67, 0x24, 0x8e, 0xe8, 0x73, 0xc8, 0x85, 0xf4, 0x90, 0xfc, 0xf9, 0xf4, 0x90, 0x3d,
+ 0xf2, 0x55, 0x80, 0xee, 0xc2, 0xac, 0x73, 0x6c, 0xc8, 0x2c, 0x2f, 0x90, 0x65, 0x96, 0xb8, 0x69,
+ 0x10, 0x33, 0x0e, 0xd1, 0x07, 0xa1, 0xd3, 0xac, 0x12, 0xbb, 0xf4, 0x6f, 0x05, 0x40, 0x54, 0x51,
+ 0x35, 0xf6, 0xce, 0xe0, 0xeb, 0x62, 0x55, 0xb7, 0x41, 0xa4, 0x99, 0x96, 0xb2, 0xbe, 0x27, 0xb7,
+ 0x75, 0xdb, 0xd6, 0x8d, 0x26, 0x37, 0xab, 0x02, 0xa5, 0xd7, 0xf6, 0x36, 0x19, 0x95, 0x77, 0xf8,
+ 0x5f, 0x82, 0xb9, 0x50, 0x33, 0xe2, 0xec, 0xf2, 0xab, 0x90, 0xdb, 0x33, 0xbb, 0x86, 0x26, 0xb3,
+ 0xf7, 0x2a, 0x7c, 0xa1, 0x31, 0x4b, 0x69, 0xec, 0x79, 0xa5, 0xff, 0x99, 0x80, 0x79, 0x09, 0xdb,
+ 0x66, 0xeb, 0x10, 0xc7, 0xaf, 0xc8, 0x2a, 0xf0, 0x37, 0x3a, 0xf2, 0x1b, 0xe9, 0x33, 0xc3, 0x98,
+ 0xd9, 0xf4, 0x17, 0x5e, 0xb3, 0xbf, 0x3e, 0xdc, 0x6e, 0xfb, 0x57, 0xe9, 0xf9, 0x6a, 0x5f, 0x2a,
+ 0xb4, 0xda, 0x67, 0xc2, 0x8c, 0xde, 0x34, 0x4c, 0xe2, 0xdf, 0x6c, 0xfc, 0xca, 0xe8, 0xb6, 0x5d,
+ 0x7c, 0xb3, 0x34, 0xac, 0x92, 0x35, 0xc6, 0x52, 0xc7, 0xaf, 0xb6, 0xba, 0x6d, 0x1a, 0x65, 0xaf,
+ 0x5e, 0x24, 0xf5, 0x3d, 0x3b, 0x5d, 0x2c, 0x84, 0xee, 0xd9, 0x52, 0x41, 0xf7, 0xae, 0x89, 0x74,
+ 0xde, 0xe5, 0xdf, 0x81, 0x0b, 0x3d, 0x2a, 0x8f, 0x33, 0x1e, 0xfa, 0x37, 0x49, 0x78, 0x2b, 0x2c,
+ 0x3e, 0x6e, 0xd4, 0xf2, 0x75, 0xef, 0xd6, 0x2a, 0xe4, 0xdb, 0xba, 0xf1, 0x66, 0x8b, 0x96, 0xb9,
+ 0xb6, 0x6e, 0xf8, 0xcb, 0xc4, 0x11, 0x06, 0x32, 0xf5, 0xff, 0xc1, 0x40, 0x14, 0x58, 0x88, 0xea,
+ 0xc1, 0x38, 0xad, 0xe4, 0x07, 0x02, 0xe4, 0xe2, 0x5e, 0x87, 0x7b, 0xb3, 0x8c, 0x38, 0xde, 0xe6,
+ 0x06, 0xe4, 0xbf, 0x82, 0x85, 0xbb, 0xdf, 0x11, 0x00, 0x35, 0xac, 0xae, 0x41, 0x00, 0xf1, 0x53,
+ 0xb3, 0x19, 0x67, 0x63, 0xe7, 0x61, 0x52, 0x37, 0x34, 0x7c, 0x4c, 0x1b, 0x9b, 0x92, 0xd8, 0x45,
+ 0xe8, 0x65, 0x65, 0x72, 0xac, 0x97, 0x95, 0x7e, 0x5a, 0x4c, 0xa8, 0xa2, 0x71, 0x6a, 0xe1, 0xf7,
+ 0x12, 0x30, 0xc7, 0x9b, 0x13, 0xfb, 0xc2, 0xe5, 0x37, 0x61, 0xb2, 0x45, 0x64, 0x0e, 0xe9, 0x73,
+ 0xfa, 0x4c, 0xb7, 0xcf, 0x69, 0x61, 0xf4, 0xcb, 0x00, 0x1d, 0x0b, 0x1f, 0xca, 0x8c, 0x35, 0x39,
+ 0x16, 0x6b, 0x86, 0x70, 0x50, 0x02, 0xfa, 0x36, 0xcc, 0x90, 0x11, 0xde, 0xb1, 0xcc, 0x8e, 0x69,
+ 0x93, 0x80, 0xc6, 0x1e, 0x0f, 0x15, 0xcd, 0x9e, 0x9d, 0x2e, 0xe6, 0x37, 0x75, 0x63, 0x9b, 0x33,
+ 0x36, 0xea, 0x12, 0x71, 0x15, 0xde, 0xa5, 0x3b, 0x00, 0xff, 0xa3, 0x00, 0xf3, 0x5f, 0xd9, 0x52,
+ 0xef, 0x9f, 0x87, 0xc6, 0xbc, 0x99, 0x47, 0xa4, 0x97, 0x35, 0x63, 0xcf, 0x8c, 0x7f, 0x01, 0xfe,
+ 0x07, 0x02, 0xcc, 0x06, 0xc4, 0xc7, 0x19, 0xc9, 0xbc, 0x91, 0xce, 0x4a, 0xbf, 0x4a, 0x62, 0x9b,
+ 0xa0, 0xd9, 0xc7, 0x39, 0xa8, 0xfe, 0x65, 0x02, 0x2e, 0x96, 0xd9, 0x6b, 0x6c, 0x37, 0xc7, 0x23,
+ 0x4e, 0x2b, 0x29, 0xc2, 0xf4, 0x21, 0xb6, 0x6c, 0xdd, 0x64, 0x33, 0x6c, 0x5e, 0x72, 0x2f, 0xd1,
+ 0x02, 0xa4, 0x6d, 0x43, 0xe9, 0xd8, 0xfb, 0xa6, 0xfb, 0xe6, 0xce, 0xbb, 0xf6, 0xf2, 0x51, 0x26,
+ 0xdf, 0x3c, 0x1f, 0x65, 0x6a, 0x78, 0x3e, 0xca, 0xf4, 0xcf, 0x9d, 0x8f, 0xc2, 0x5f, 0x93, 0xfd,
+ 0xa1, 0x00, 0x97, 0xfa, 0xf4, 0x17, 0xa7, 0xcd, 0x7c, 0x1f, 0xb2, 0x2a, 0x17, 0x4c, 0xbc, 0x31,
+ 0x7b, 0x13, 0x58, 0x23, 0xc5, 0xde, 0x10, 0xac, 0x9c, 0x9d, 0x2e, 0x82, 0x5b, 0xd5, 0xda, 0x1a,
+ 0x57, 0x11, 0xf9, 0xad, 0x95, 0xfe, 0x53, 0x0e, 0x66, 0x2a, 0xc7, 0x6c, 0x9d, 0xbb, 0xce, 0xe2,
+ 0x01, 0xf4, 0x18, 0xd2, 0x1d, 0xcb, 0x3c, 0xd4, 0xdd, 0x66, 0x14, 0x42, 0x69, 0x08, 0x6e, 0x33,
+ 0x7a, 0xb8, 0xb6, 0x39, 0x87, 0xe4, 0xf1, 0xa2, 0x06, 0x64, 0x9e, 0x9a, 0xaa, 0xd2, 0x7a, 0xac,
+ 0xb7, 0x5c, 0xfb, 0xff, 0x60, 0xb4, 0xa0, 0x25, 0x8f, 0x67, 0x5b, 0x71, 0xf6, 0xdd, 0xae, 0xf0,
+ 0x88, 0xa8, 0x06, 0xe9, 0xaa, 0xe3, 0x74, 0xc8, 0x4d, 0xee, 0x4d, 0x6e, 0x8d, 0x21, 0x94, 0xb0,
+ 0xb8, 0x99, 0xad, 0x2e, 0x3b, 0x6a, 0xc0, 0xec, 0x13, 0xd3, 0x6c, 0xb6, 0x70, 0xb9, 0x65, 0x76,
+ 0xb5, 0xb2, 0x69, 0xec, 0xe9, 0x4d, 0xee, 0x8f, 0x6f, 0x8e, 0x21, 0xf3, 0x49, 0xb9, 0x2e, 0xf5,
+ 0x0b, 0x40, 0x2b, 0x90, 0xae, 0x3f, 0xe0, 0xc2, 0x58, 0x00, 0x77, 0x63, 0x0c, 0x61, 0xf5, 0x07,
+ 0x92, 0xc7, 0x86, 0xd6, 0x21, 0xbb, 0xf2, 0xba, 0x6b, 0x61, 0x2e, 0x65, 0x6a, 0x60, 0x0e, 0x44,
+ 0xaf, 0x14, 0xca, 0x25, 0x05, 0x99, 0x51, 0x1d, 0x0a, 0x2f, 0x4d, 0xeb, 0xa0, 0x65, 0x2a, 0x6e,
+ 0x0b, 0xa7, 0xa9, 0xb8, 0x6f, 0x8c, 0x21, 0xce, 0x65, 0x94, 0x7a, 0x44, 0xa0, 0xef, 0xc0, 0x0c,
+ 0xe9, 0x8c, 0x86, 0xb2, 0xdb, 0x72, 0x2b, 0x99, 0xa6, 0x52, 0xdf, 0x1b, 0x43, 0xaa, 0xc7, 0xe9,
+ 0xbe, 0x68, 0xe9, 0x11, 0xb5, 0xf0, 0x6d, 0xc8, 0x87, 0x8c, 0x00, 0x21, 0x48, 0x75, 0x48, 0x7f,
+ 0x0b, 0x34, 0x57, 0x89, 0xfe, 0x46, 0xef, 0xc3, 0xb4, 0x61, 0x6a, 0xd8, 0x1d, 0x21, 0xf9, 0xd5,
+ 0xf9, 0xb3, 0xd3, 0xc5, 0xa9, 0x2d, 0x53, 0x63, 0xe1, 0x0a, 0xff, 0x25, 0x4d, 0x91, 0x42, 0x6e,
+ 0xb0, 0xb2, 0x70, 0x13, 0x52, 0xa4, 0xf7, 0x89, 0x93, 0xda, 0x55, 0x6c, 0xbc, 0x63, 0xe9, 0x5c,
+ 0xa6, 0x7b, 0xc9, 0xcb, 0xfd, 0x54, 0x80, 0x44, 0xfd, 0x01, 0x09, 0xd4, 0x77, 0xbb, 0xea, 0x01,
+ 0x76, 0x78, 0x29, 0x7e, 0x45, 0x03, 0x78, 0x0b, 0xef, 0xe9, 0x2c, 0x86, 0xca, 0x48, 0xfc, 0x0a,
+ 0xbd, 0x0b, 0xa0, 0xa8, 0x2a, 0xb6, 0x6d, 0xd9, 0xdd, 0xe3, 0x97, 0x91, 0x32, 0x8c, 0xb2, 0x81,
+ 0x4f, 0x08, 0x9b, 0x8d, 0x55, 0x0b, 0x3b, 0x6e, 0xd2, 0x15, 0xbb, 0x22, 0x6c, 0x0e, 0x6e, 0x77,
+ 0x64, 0xc7, 0x3c, 0xc0, 0x06, 0xb5, 0x99, 0x0c, 0x71, 0x3e, 0xed, 0x4e, 0x83, 0x10, 0x88, 0xdf,
+ 0xc4, 0x86, 0xe6, 0x3b, 0xb9, 0x8c, 0xe4, 0x5d, 0x13, 0x91, 0x16, 0x6e, 0xea, 0x7c, 0x9b, 0x5a,
+ 0x46, 0xe2, 0x57, 0x44, 0x63, 0x4a, 0xd7, 0xd9, 0xa7, 0xbd, 0x92, 0x91, 0xe8, 0x6f, 0xde, 0xb4,
+ 0xbf, 0x27, 0x40, 0xf2, 0x49, 0xb9, 0x7e, 0xee, 0xb6, 0xb9, 0x12, 0x93, 0xbe, 0x44, 0x9a, 0xeb,
+ 0xa8, 0xb7, 0x5a, 0xba, 0xd1, 0x24, 0x21, 0xcd, 0xf7, 0xb1, 0xea, 0xb6, 0xac, 0xc0, 0xc9, 0xdb,
+ 0x8c, 0x8a, 0xae, 0x40, 0x56, 0xb5, 0xb0, 0x86, 0x0d, 0x47, 0x57, 0x5a, 0x36, 0x6f, 0x62, 0x90,
+ 0xc4, 0x2b, 0xf7, 0xeb, 0x02, 0x4c, 0x52, 0xe3, 0x45, 0xef, 0x40, 0x46, 0x35, 0x0d, 0x47, 0xd1,
+ 0x0d, 0xee, 0x85, 0x32, 0x92, 0x4f, 0x18, 0x58, 0xc9, 0xab, 0x90, 0x53, 0x54, 0xd5, 0xec, 0x1a,
+ 0x8e, 0x6c, 0x28, 0x6d, 0xcc, 0x2b, 0x9b, 0xe5, 0xb4, 0x2d, 0xa5, 0x8d, 0xd1, 0x22, 0xb8, 0x97,
+ 0xde, 0x4e, 0xcb, 0x8c, 0x04, 0x9c, 0xb4, 0x81, 0x4f, 0x78, 0x4d, 0xfe, 0x50, 0x80, 0xb4, 0x6b,
+ 0xf4, 0xa4, 0x32, 0x4d, 0x6c, 0x60, 0x4b, 0x71, 0x4c, 0xaf, 0x32, 0x1e, 0xa1, 0x77, 0xc6, 0xcb,
+ 0xf8, 0x33, 0xde, 0x3c, 0x4c, 0x3a, 0xc4, 0xae, 0x79, 0x3d, 0xd8, 0x05, 0x5d, 0x97, 0x6e, 0x29,
+ 0x4d, 0xb6, 0x14, 0x97, 0x91, 0xd8, 0x05, 0x69, 0x12, 0xcf, 0xd7, 0x65, 0xda, 0xe1, 0x57, 0xa4,
+ 0xbe, 0x2c, 0x9f, 0x74, 0x17, 0x37, 0x75, 0x83, 0x1a, 0x40, 0x52, 0x02, 0x4a, 0x5a, 0x25, 0x14,
+ 0xf4, 0x36, 0x64, 0x58, 0x01, 0x6c, 0x68, 0xd4, 0x0a, 0x92, 0x52, 0x9a, 0x12, 0x2a, 0xee, 0x56,
+ 0xb2, 0x85, 0x03, 0xc8, 0x78, 0x63, 0x8c, 0x74, 0x64, 0xd7, 0xf6, 0x94, 0x4a, 0x7f, 0xa3, 0x0f,
+ 0x60, 0xfe, 0x55, 0x57, 0x69, 0xe9, 0x7b, 0x74, 0x95, 0x8d, 0x14, 0x63, 0xfa, 0x63, 0xed, 0x41,
+ 0xde, 0x3d, 0x2a, 0x81, 0xaa, 0xd1, 0x1d, 0x92, 0x49, 0x7f, 0x48, 0x06, 0x5f, 0x9b, 0x94, 0x7e,
+ 0x24, 0xc0, 0x2c, 0x4b, 0x19, 0x62, 0x59, 0xaf, 0xf1, 0x05, 0x18, 0x9f, 0x40, 0x46, 0x53, 0x1c,
+ 0x85, 0xed, 0x26, 0x4d, 0x0c, 0xdd, 0x4d, 0xea, 0xed, 0x65, 0x50, 0x1c, 0x85, 0xee, 0x28, 0x45,
+ 0x90, 0x22, 0xbf, 0xd9, 0xf6, 0x5b, 0x89, 0xfe, 0xf6, 0x93, 0x30, 0x82, 0xd5, 0x8d, 0x33, 0xe0,
+ 0x5a, 0x86, 0x0b, 0x44, 0xfb, 0x15, 0x43, 0xb5, 0x4e, 0x3a, 0x8e, 0x6e, 0x1a, 0xcf, 0xe8, 0x5f,
+ 0x1b, 0x89, 0x81, 0x97, 0x58, 0xf4, 0xdd, 0x15, 0xaf, 0xcb, 0x1f, 0x4c, 0x41, 0xbe, 0x72, 0xdc,
+ 0x31, 0xad, 0x58, 0x17, 0xb5, 0x56, 0x61, 0x9a, 0x23, 0xfe, 0x21, 0xaf, 0x95, 0x7b, 0x7c, 0xb5,
+ 0xfb, 0xc6, 0x96, 0x33, 0xa2, 0x55, 0x00, 0x96, 0x9f, 0x4a, 0xf3, 0x8e, 0x92, 0xe7, 0x78, 0xb9,
+ 0x46, 0xd9, 0x08, 0x15, 0x6d, 0x41, 0xb6, 0x7d, 0xa8, 0xaa, 0xf2, 0x9e, 0xde, 0x72, 0x78, 0x82,
+ 0x5f, 0x74, 0x76, 0xfa, 0xe6, 0x8b, 0x72, 0xf9, 0x31, 0x2d, 0xc4, 0x72, 0xed, 0xfc, 0x6b, 0x09,
+ 0x88, 0x04, 0xf6, 0x1b, 0xbd, 0x07, 0x7c, 0x97, 0x8f, 0x6c, 0xbb, 0x1b, 0xfa, 0x56, 0xf3, 0x67,
+ 0xa7, 0x8b, 0x19, 0x89, 0x52, 0xeb, 0xf5, 0x86, 0x94, 0x61, 0x05, 0xea, 0xb6, 0x83, 0xae, 0x41,
+ 0xde, 0x6c, 0xeb, 0x8e, 0xec, 0xc6, 0x40, 0x3c, 0x6c, 0xcc, 0x11, 0xa2, 0x1b, 0x23, 0xa1, 0x06,
+ 0xdc, 0xc2, 0x06, 0x1d, 0x05, 0xa4, 0x9d, 0xf2, 0x2e, 0x5b, 0x8b, 0x74, 0xd8, 0x78, 0x97, 0xcd,
+ 0x8e, 0xa3, 0xb7, 0xf5, 0xd7, 0xf4, 0xc5, 0x36, 0x7f, 0xb7, 0x74, 0x8d, 0x15, 0x27, 0xed, 0x5b,
+ 0xa5, 0x8b, 0x94, 0xbc, 0xec, 0xb3, 0x40, 0x51, 0xf4, 0xeb, 0x02, 0x5c, 0xe4, 0x8a, 0x94, 0x77,
+ 0x69, 0x7a, 0xbd, 0xd2, 0xd2, 0x9d, 0x13, 0xf9, 0xe0, 0xb0, 0x98, 0xa6, 0xc1, 0xe9, 0x2f, 0x45,
+ 0x76, 0x48, 0xc0, 0x0e, 0x96, 0xdc, 0x6e, 0x39, 0x79, 0xca, 0x99, 0x37, 0x0e, 0x2b, 0x86, 0x63,
+ 0x9d, 0xac, 0x5e, 0x3a, 0x3b, 0x5d, 0x9c, 0xeb, 0xbf, 0xfb, 0x42, 0x9a, 0xb3, 0xfb, 0x59, 0x50,
+ 0x15, 0x00, 0x7b, 0xd6, 0x48, 0x33, 0x09, 0xa3, 0xc3, 0x8b, 0x48, 0xb3, 0x95, 0x02, 0xbc, 0xe8,
+ 0x36, 0x88, 0x7c, 0x83, 0xcd, 0x9e, 0xde, 0xc2, 0xb2, 0xad, 0xbf, 0xc6, 0x34, 0xef, 0x30, 0x29,
+ 0x15, 0x18, 0x9d, 0x88, 0xa8, 0xeb, 0xaf, 0xf1, 0xc2, 0xf7, 0xa1, 0x38, 0xa8, 0xf6, 0xc1, 0x81,
+ 0x90, 0x61, 0x2f, 0x71, 0x3f, 0x0e, 0xaf, 0xc8, 0x8c, 0x61, 0xaa, 0xee, 0xaa, 0x4c, 0xe2, 0x63,
+ 0xd7, 0x05, 0xfd, 0x6e, 0x02, 0xf2, 0xab, 0xdd, 0xd6, 0xc1, 0xb3, 0x4e, 0xbd, 0xdb, 0x6e, 0x2b,
+ 0xd6, 0x09, 0x71, 0x95, 0xcc, 0x75, 0x90, 0x6a, 0x0a, 0xcc, 0x55, 0x52, 0xdf, 0xa0, 0xbf, 0xc6,
+ 0x64, 0x32, 0x0b, 0x6e, 0x29, 0x67, 0xdb, 0x07, 0x68, 0x4b, 0x02, 0xfb, 0xc4, 0xcd, 0x23, 0x1b,
+ 0x7d, 0x0c, 0xc5, 0x40, 0x41, 0xba, 0x7c, 0x22, 0x63, 0xc3, 0xb1, 0x74, 0xcc, 0x96, 0x03, 0x93,
+ 0x52, 0x20, 0xf5, 0xa6, 0x46, 0x6e, 0x57, 0xd8, 0x5d, 0xd4, 0x80, 0x1c, 0x29, 0x78, 0x22, 0xd3,
+ 0xc9, 0xc6, 0x5d, 0xb4, 0xbd, 0x17, 0xd1, 0xb8, 0x50, 0xbd, 0x97, 0xa8, 0x96, 0xca, 0x94, 0x87,
+ 0xfe, 0x94, 0xb2, 0xd8, 0xa7, 0x2c, 0x3c, 0x02, 0xb1, 0xb7, 0x40, 0x50, 0xa3, 0x29, 0xa6, 0xd1,
+ 0xf9, 0xa0, 0x46, 0x93, 0x01, 0x6d, 0xad, 0xa7, 0xd2, 0x29, 0x71, 0xb2, 0xf4, 0xa7, 0x49, 0x28,
+ 0xb8, 0xc6, 0x16, 0x27, 0x9a, 0x59, 0x85, 0x49, 0x62, 0x1a, 0x6e, 0xa2, 0xc8, 0xcd, 0x21, 0x36,
+ 0xce, 0x53, 0xd5, 0x89, 0xc9, 0xb8, 0x78, 0x98, 0xb2, 0xc6, 0xe1, 0x76, 0x16, 0xfe, 0x72, 0x02,
+ 0x52, 0x14, 0x40, 0xdc, 0x83, 0x14, 0x9d, 0x3a, 0x84, 0x71, 0xa6, 0x0e, 0x5a, 0xd4, 0x9b, 0xec,
+ 0x12, 0x81, 0xf8, 0x93, 0x04, 0x73, 0xfb, 0xca, 0x87, 0xf7, 0xee, 0x53, 0x97, 0x93, 0x93, 0xf8,
+ 0x15, 0x5a, 0xa5, 0x19, 0x4c, 0xa6, 0xe5, 0x60, 0x8d, 0x07, 0xee, 0x57, 0x46, 0xf5, 0xaf, 0x3b,
+ 0x4d, 0xb9, 0x7c, 0xe8, 0x2d, 0x48, 0x12, 0x5f, 0x36, 0xcd, 0xb2, 0x1b, 0xce, 0x4e, 0x17, 0x93,
+ 0xc4, 0x8b, 0x11, 0x1a, 0x5a, 0x86, 0x6c, 0xd8, 0x71, 0x08, 0xb7, 0x33, 0xcc, 0x3d, 0x06, 0x06,
+ 0x3d, 0xb4, 0xbc, 0x01, 0xc6, 0x40, 0x2b, 0xef, 0xe3, 0x5f, 0x9b, 0x84, 0x7c, 0xad, 0x1d, 0xf7,
+ 0xc4, 0xb2, 0x12, 0xee, 0xe1, 0x28, 0xb4, 0x13, 0x7a, 0x68, 0x44, 0x07, 0x87, 0xe6, 0xf4, 0xe4,
+ 0xf9, 0xe6, 0xf4, 0x1a, 0x09, 0x81, 0xf9, 0x19, 0x11, 0xc9, 0x01, 0xc0, 0x26, 0xfc, 0x7c, 0x1a,
+ 0xc5, 0x48, 0x84, 0xc7, 0xdf, 0xbc, 0x41, 0x33, 0x54, 0x1e, 0xd1, 0x48, 0x9b, 0x59, 0xd9, 0xd4,
+ 0xf8, 0x56, 0x36, 0x8d, 0x0d, 0x8d, 0x4e, 0x6d, 0x61, 0xbf, 0x3a, 0xfd, 0xe6, 0x7e, 0x75, 0xe1,
+ 0x35, 0x37, 0xd6, 0x4f, 0x20, 0xa9, 0xe9, 0x6e, 0xe7, 0x8c, 0x3f, 0x61, 0x13, 0xa6, 0x11, 0x56,
+ 0x9b, 0x0a, 0x5a, 0x6d, 0x70, 0x81, 0x63, 0xe1, 0x19, 0x80, 0xaf, 0x21, 0x74, 0x05, 0xa6, 0xcc,
+ 0x96, 0xe6, 0xee, 0x61, 0xc9, 0xaf, 0x66, 0xce, 0x4e, 0x17, 0x27, 0x9f, 0xb5, 0xb4, 0xda, 0x9a,
+ 0x34, 0x69, 0xb6, 0xb4, 0x9a, 0x46, 0x8f, 0xe9, 0xc0, 0x47, 0xb2, 0x97, 0xb0, 0x96, 0x93, 0xa6,
+ 0x0d, 0x7c, 0xb4, 0x86, 0x6d, 0xb5, 0x27, 0x91, 0x86, 0x98, 0xe0, 0x0f, 0x05, 0x28, 0xb8, 0xbd,
+ 0x11, 0xaf, 0x9b, 0x49, 0xeb, 0x6d, 0x3e, 0xec, 0x92, 0xe7, 0x1b, 0x76, 0x2e, 0x1f, 0xdf, 0x03,
+ 0xfc, 0x1b, 0x02, 0x4f, 0x56, 0xae, 0xab, 0x8a, 0x43, 0x82, 0x8d, 0x18, 0x87, 0xca, 0x1d, 0x10,
+ 0x2d, 0xc5, 0xd0, 0xcc, 0xb6, 0xfe, 0x1a, 0xb3, 0x15, 0x51, 0x9b, 0xbf, 0xdc, 0x9c, 0xf1, 0xe8,
+ 0x74, 0xc9, 0xcf, 0x5d, 0xd0, 0xfd, 0x83, 0x04, 0x4f, 0x6c, 0xf6, 0x2a, 0x13, 0xa7, 0xd2, 0xbe,
+ 0x07, 0xb3, 0xbd, 0xa7, 0xa8, 0xb8, 0xa3, 0xf8, 0xfd, 0x08, 0x79, 0x51, 0x15, 0x61, 0x89, 0x88,
+ 0x6e, 0xe6, 0x7c, 0xcf, 0x89, 0x2a, 0x36, 0x2a, 0x43, 0x36, 0x78, 0x38, 0x4b, 0x72, 0xec, 0xc3,
+ 0x59, 0xc0, 0xf2, 0x8e, 0x64, 0x59, 0xf8, 0x15, 0x98, 0xa4, 0xb7, 0xdf, 0xc0, 0x75, 0xf3, 0x3e,
+ 0xfd, 0x87, 0x02, 0x14, 0x36, 0xf5, 0xa6, 0xa5, 0xc4, 0xba, 0x57, 0x1e, 0x3d, 0x86, 0x3c, 0xcb,
+ 0x6c, 0x7c, 0x11, 0xc0, 0x7f, 0xd9, 0xfb, 0x0b, 0x51, 0xef, 0x8f, 0x58, 0x09, 0x5e, 0xb7, 0x30,
+ 0x9b, 0x7f, 0x32, 0x82, 0x57, 0xc7, 0x38, 0xf1, 0xc7, 0x7f, 0x4b, 0xc0, 0x75, 0xda, 0x75, 0x2f,
+ 0xb0, 0xa5, 0xef, 0x9d, 0x6c, 0x5b, 0xa6, 0x83, 0x55, 0x07, 0x6b, 0xfe, 0x4e, 0x9c, 0x58, 0x27,
+ 0x83, 0x4c, 0xc7, 0x7d, 0xc0, 0xb9, 0xb2, 0xef, 0x3c, 0x2e, 0xb4, 0x01, 0x33, 0x3c, 0x93, 0x42,
+ 0x69, 0xe9, 0x87, 0x58, 0x56, 0x9c, 0xf3, 0x4c, 0xf9, 0x79, 0xc6, 0xbb, 0x42, 0x58, 0x57, 0x1c,
+ 0xa4, 0x41, 0x86, 0x0b, 0xd3, 0x35, 0x7e, 0xac, 0xd2, 0x93, 0x9f, 0x6f, 0x29, 0x35, 0xcd, 0xd2,
+ 0x39, 0x6a, 0x6b, 0x52, 0x9a, 0x49, 0xf6, 0x5e, 0x85, 0xfd, 0x89, 0x00, 0x37, 0x46, 0x28, 0x3a,
+ 0xce, 0xd1, 0xbb, 0x00, 0xe9, 0x43, 0xf2, 0x20, 0x9d, 0x6b, 0x3a, 0x2d, 0x79, 0xd7, 0x68, 0x13,
+ 0xf2, 0x7b, 0x8a, 0xde, 0xf2, 0x47, 0xf5, 0xe0, 0x94, 0xcd, 0xe8, 0x4c, 0xe2, 0x1c, 0x63, 0x67,
+ 0xc3, 0xb8, 0xf4, 0xc3, 0x04, 0xcc, 0xae, 0x68, 0x5a, 0xbd, 0xce, 0x27, 0x86, 0xf8, 0xec, 0xc5,
+ 0x45, 0xe4, 0x09, 0x1f, 0x91, 0xa3, 0xf7, 0x01, 0x69, 0xba, 0xcd, 0x8e, 0x6c, 0xb1, 0xf7, 0x15,
+ 0xcd, 0x3c, 0xf2, 0x93, 0x51, 0x66, 0xdd, 0x3b, 0x75, 0xf7, 0x06, 0xaa, 0x03, 0x85, 0x83, 0xb2,
+ 0xed, 0x28, 0xde, 0xfb, 0xb4, 0x1b, 0x63, 0x6d, 0x9c, 0x63, 0x38, 0xd1, 0xbb, 0x94, 0x32, 0x44,
+ 0x0e, 0xfd, 0x49, 0x80, 0x8d, 0x4e, 0x9a, 0xee, 0xc8, 0x8a, 0xed, 0xee, 0x92, 0x62, 0x87, 0xc5,
+ 0x14, 0x18, 0x7d, 0xc5, 0x0e, 0x6e, 0x7e, 0x62, 0x9b, 0x38, 0x7c, 0x05, 0xc5, 0x39, 0x7e, 0xff,
+ 0x89, 0x00, 0x05, 0x09, 0xef, 0x59, 0xd8, 0xde, 0x8f, 0xd7, 0x79, 0xe5, 0x2c, 0x26, 0x55, 0xde,
+ 0xb3, 0xcc, 0xf6, 0x79, 0xc6, 0x58, 0x96, 0x33, 0x3e, 0xb6, 0xcc, 0x76, 0xe8, 0xfc, 0x8c, 0x17,
+ 0x30, 0xe3, 0xd5, 0x34, 0x4e, 0x15, 0xfc, 0x88, 0x6e, 0x16, 0x67, 0x82, 0xe3, 0xce, 0x0a, 0xf9,
+ 0x2a, 0xf4, 0x40, 0x5f, 0xe0, 0x05, 0xab, 0x1b, 0xa7, 0x32, 0xfe, 0x87, 0x00, 0x85, 0x7a, 0x77,
+ 0x97, 0x9d, 0x18, 0x16, 0x9f, 0x1e, 0x2a, 0x90, 0x69, 0xe1, 0x3d, 0x47, 0x7e, 0xa3, 0x8d, 0x07,
+ 0x69, 0xc2, 0x4a, 0x37, 0x5f, 0x3c, 0x01, 0xb0, 0xe8, 0xd6, 0x42, 0x2a, 0x27, 0x79, 0x4e, 0x39,
+ 0x19, 0xca, 0xeb, 0xc7, 0x8e, 0xa5, 0x1f, 0x25, 0x60, 0xc6, 0x6b, 0x6c, 0x9c, 0xde, 0xf3, 0x65,
+ 0xc8, 0x6b, 0x24, 0xcf, 0xe3, 0x35, 0x66, 0x79, 0x52, 0x4c, 0xb4, 0xe7, 0x58, 0x82, 0x39, 0x1a,
+ 0xd9, 0xc9, 0x4a, 0xa7, 0xd3, 0xd2, 0xdd, 0x15, 0x02, 0xea, 0x97, 0x52, 0xd2, 0x2c, 0xbd, 0xb5,
+ 0xc2, 0xee, 0xd0, 0xb5, 0x01, 0x62, 0x7f, 0x7b, 0x16, 0xc6, 0xaf, 0xb1, 0x4c, 0xc1, 0xea, 0x79,
+ 0x92, 0x7e, 0xb2, 0x8c, 0xb1, 0x4e, 0xf8, 0xb8, 0xe5, 0x7d, 0x17, 0x66, 0xa9, 0x66, 0xe3, 0xde,
+ 0x1e, 0xcd, 0xbb, 0xe3, 0xb7, 0x12, 0x80, 0x82, 0xf2, 0xbf, 0xba, 0x1e, 0x49, 0xc4, 0xd7, 0x23,
+ 0xef, 0x01, 0x62, 0x89, 0xa0, 0xb6, 0xdc, 0xc1, 0x96, 0x6c, 0x63, 0xd5, 0xe4, 0xe7, 0x58, 0x09,
+ 0x92, 0xc8, 0xef, 0x6c, 0x63, 0xab, 0x4e, 0xe9, 0xe8, 0x21, 0x80, 0x1f, 0xb2, 0xf2, 0xe9, 0x64,
+ 0x68, 0xc4, 0x2a, 0x65, 0xbc, 0x58, 0xb5, 0xf4, 0xc7, 0x0b, 0x90, 0xe3, 0x9a, 0xdc, 0x31, 0x74,
+ 0xd3, 0x40, 0xf7, 0x20, 0xd9, 0xe4, 0xef, 0x58, 0xb2, 0x91, 0xab, 0x9c, 0xfe, 0xd1, 0x7d, 0xd5,
+ 0x09, 0x89, 0x94, 0x25, 0x2c, 0x9d, 0xae, 0x13, 0x11, 0x3c, 0xf9, 0xe9, 0xee, 0x41, 0x96, 0x4e,
+ 0xd7, 0x41, 0x75, 0x98, 0x51, 0xfd, 0x83, 0xc8, 0x64, 0xc2, 0x9e, 0x1c, 0x88, 0x3e, 0x23, 0x0f,
+ 0x80, 0xab, 0x4e, 0x48, 0x05, 0x35, 0x74, 0x03, 0x95, 0x83, 0x27, 0x5f, 0xa5, 0xfa, 0xb2, 0xe5,
+ 0xfc, 0x7d, 0xd8, 0xe1, 0x53, 0xb7, 0xaa, 0x13, 0x81, 0x03, 0xb2, 0xd0, 0x27, 0x30, 0xa5, 0xd1,
+ 0x13, 0x95, 0xb8, 0x5d, 0x47, 0x99, 0x5e, 0xe8, 0x10, 0xab, 0xea, 0x84, 0xc4, 0x39, 0xd0, 0x3a,
+ 0xe4, 0xd8, 0x2f, 0x16, 0xc4, 0x70, 0x48, 0x7e, 0x63, 0xb0, 0x84, 0xc0, 0xd4, 0x50, 0x9d, 0x90,
+ 0xb2, 0x9a, 0x4f, 0x45, 0xdf, 0x84, 0x94, 0xad, 0x2a, 0x2e, 0x28, 0xbf, 0x3c, 0xe0, 0x30, 0x14,
+ 0x9f, 0x99, 0x96, 0x46, 0x0f, 0xd9, 0x91, 0x9c, 0xce, 0xb1, 0xbb, 0x4a, 0x1a, 0x55, 0xfd, 0xd0,
+ 0x16, 0x7b, 0x52, 0x7d, 0x4c, 0x09, 0xe8, 0x09, 0x64, 0x15, 0x12, 0x0d, 0xca, 0x74, 0x4b, 0x2a,
+ 0x5d, 0x16, 0x8d, 0x4e, 0x40, 0xe8, 0xdb, 0x4e, 0x5c, 0xa5, 0xfb, 0xf8, 0x5d, 0xa2, 0x2f, 0xa8,
+ 0x8d, 0xad, 0x26, 0x2e, 0x66, 0x87, 0x0b, 0x0a, 0x66, 0xc7, 0x79, 0x82, 0x28, 0x91, 0x44, 0x85,
+ 0xde, 0x0e, 0x71, 0xda, 0xa8, 0xdc, 0xc0, 0x97, 0xdd, 0x11, 0xdb, 0xa5, 0xaa, 0x13, 0x52, 0x6e,
+ 0x3f, 0x40, 0x46, 0x4b, 0x90, 0x68, 0xaa, 0xc5, 0xfc, 0xc0, 0x11, 0xe2, 0x6d, 0x06, 0xaa, 0x4e,
+ 0x48, 0x89, 0xa6, 0x8a, 0x1e, 0x41, 0x9a, 0xed, 0xe6, 0x38, 0x36, 0x8a, 0x85, 0x81, 0x7e, 0x22,
+ 0xbc, 0x27, 0xa6, 0x3a, 0x21, 0xd1, 0x0d, 0x24, 0xe4, 0x79, 0xdb, 0x50, 0xb0, 0x58, 0x7a, 0xa1,
+ 0x9b, 0x18, 0x2c, 0x0e, 0x4c, 0x00, 0x88, 0xca, 0x0d, 0xae, 0x52, 0x74, 0x10, 0xa0, 0xa3, 0xef,
+ 0xc1, 0x7c, 0x58, 0x22, 0xb7, 0xb4, 0xd9, 0x81, 0x2f, 0xb3, 0x07, 0x66, 0xa8, 0x56, 0x27, 0x24,
+ 0x64, 0xf5, 0xdd, 0x44, 0x1f, 0xc1, 0x24, 0xeb, 0x35, 0x44, 0x45, 0x46, 0x65, 0xb6, 0xf4, 0x74,
+ 0x18, 0x2b, 0x4f, 0x8c, 0xdf, 0xe1, 0x79, 0x75, 0x72, 0xcb, 0x6c, 0x16, 0xe7, 0x06, 0x1a, 0x7f,
+ 0x7f, 0x9e, 0x20, 0x31, 0x7e, 0xc7, 0xa7, 0x92, 0x7e, 0xb7, 0xd8, 0x1d, 0x9e, 0x86, 0x35, 0x3f,
+ 0xb0, 0xdf, 0x23, 0xd2, 0xed, 0xaa, 0x74, 0x57, 0x84, 0x4f, 0x26, 0x55, 0xb3, 0xd8, 0xc9, 0x3d,
+ 0x32, 0x1d, 0x53, 0x17, 0x06, 0x56, 0xad, 0xff, 0x80, 0xa3, 0x2a, 0x8d, 0x9a, 0x3c, 0x2a, 0x7a,
+ 0x01, 0x22, 0x3f, 0x53, 0xc3, 0x7f, 0x25, 0x73, 0x91, 0xca, 0xbb, 0x13, 0xe9, 0xba, 0xa2, 0xf2,
+ 0x96, 0xaa, 0x13, 0xd2, 0x8c, 0x1a, 0xbe, 0x83, 0x3e, 0x83, 0x59, 0x2a, 0x4f, 0x56, 0xfd, 0xc3,
+ 0x50, 0x8a, 0xc5, 0xbe, 0x43, 0x35, 0x06, 0x9f, 0x9b, 0xe2, 0x4a, 0x16, 0xd5, 0x9e, 0x5b, 0xc4,
+ 0x8c, 0x75, 0x43, 0x77, 0xa8, 0x97, 0x5d, 0x18, 0x68, 0xc6, 0xe1, 0x83, 0x1b, 0x89, 0x19, 0xeb,
+ 0x8c, 0x42, 0xcc, 0xd8, 0xe1, 0x39, 0x7a, 0xbc, 0x3b, 0xde, 0x19, 0x68, 0xc6, 0x51, 0xc9, 0x7c,
+ 0xc4, 0x8c, 0x9d, 0x20, 0x9d, 0x98, 0x31, 0x73, 0x10, 0x3d, 0x72, 0xdf, 0x1d, 0x68, 0xc6, 0x03,
+ 0x37, 0x85, 0x13, 0x33, 0x56, 0xfa, 0x6e, 0xa2, 0x35, 0x00, 0x16, 0xd4, 0xd0, 0x49, 0xf1, 0xf2,
+ 0xc0, 0xc9, 0xa0, 0x37, 0x4b, 0x8f, 0x4c, 0x06, 0x2d, 0x97, 0x46, 0x1c, 0x19, 0x85, 0x52, 0x32,
+ 0x7d, 0x3f, 0x5d, 0x5c, 0x1c, 0xe8, 0xc8, 0xfa, 0xde, 0x1c, 0x13, 0x47, 0x76, 0xe4, 0x11, 0xc9,
+ 0xac, 0xc2, 0x16, 0xcb, 0x8b, 0x57, 0x06, 0xbb, 0xe5, 0xe0, 0x9b, 0x33, 0xea, 0x96, 0x29, 0x01,
+ 0xad, 0x40, 0x86, 0xcc, 0xf9, 0x27, 0xd4, 0x0d, 0x5d, 0x1d, 0x18, 0x9f, 0xf6, 0x6c, 0xfb, 0xa9,
+ 0x4e, 0x48, 0xe9, 0x57, 0x9c, 0x44, 0x1e, 0xcf, 0x16, 0x0d, 0x8b, 0xa5, 0x81, 0x8f, 0x0f, 0x2d,
+ 0x39, 0x93, 0xc7, 0x33, 0x0e, 0xa4, 0xc2, 0x05, 0xd6, 0x57, 0x7c, 0x4f, 0xb6, 0xc5, 0x37, 0x10,
+ 0x17, 0xaf, 0x51, 0x51, 0x03, 0xd7, 0xdd, 0x22, 0xb7, 0x8a, 0x57, 0x27, 0xa4, 0x39, 0xa5, 0xff,
+ 0x2e, 0x19, 0xf0, 0x7c, 0xea, 0x61, 0xab, 0x75, 0xc5, 0xeb, 0x03, 0x07, 0x7c, 0xc4, 0x52, 0x27,
+ 0x19, 0xf0, 0x4a, 0x80, 0xcc, 0x26, 0x20, 0x4d, 0xb6, 0x6d, 0x96, 0xcd, 0x70, 0x63, 0xc8, 0x04,
+ 0xd4, 0xb3, 0x46, 0xc0, 0x26, 0x20, 0xad, 0xce, 0x38, 0x89, 0x20, 0xb5, 0x85, 0x15, 0x8b, 0xbb,
+ 0xd9, 0x9b, 0x03, 0x05, 0xf5, 0x9d, 0x85, 0x48, 0x04, 0xa9, 0x1e, 0x91, 0x04, 0x3c, 0x96, 0x7b,
+ 0x18, 0x0f, 0x0f, 0x18, 0x6f, 0x0d, 0x0c, 0x78, 0x22, 0xcf, 0x0c, 0x22, 0x01, 0x8f, 0x15, 0xba,
+ 0x81, 0x7e, 0x19, 0xa6, 0x39, 0xa0, 0x2b, 0xde, 0x1e, 0x12, 0xc6, 0x06, 0x91, 0x38, 0x19, 0xd7,
+ 0x9c, 0x87, 0x79, 0x59, 0x06, 0x24, 0x59, 0xf3, 0xee, 0x0c, 0xf1, 0xb2, 0x7d, 0x58, 0x96, 0x79,
+ 0x59, 0x9f, 0x4c, 0xbc, 0x2c, 0xb3, 0x53, 0x3e, 0xd7, 0xdd, 0x1d, 0xe8, 0x65, 0xfb, 0xb7, 0x13,
+ 0x11, 0x2f, 0xfb, 0xca, 0xa7, 0x92, 0x96, 0xd9, 0x0c, 0x44, 0x15, 0xbf, 0x31, 0xb0, 0x65, 0x61,
+ 0x4c, 0x49, 0x5a, 0xc6, 0x79, 0x48, 0xb7, 0xb1, 0x90, 0x98, 0x69, 0xfa, 0xbd, 0xc1, 0xc7, 0x1f,
+ 0xf4, 0x42, 0x8f, 0xaa, 0xbb, 0x92, 0xcb, 0x34, 0xec, 0x39, 0x2a, 0x8b, 0x6f, 0xf6, 0xe6, 0x9a,
+ 0x7a, 0x7f, 0xb8, 0xa3, 0x8a, 0xda, 0xc7, 0xee, 0x39, 0xaa, 0xd0, 0x4d, 0x5a, 0x55, 0xb6, 0x83,
+ 0x8f, 0x8e, 0xef, 0xa5, 0x21, 0x27, 0x35, 0xf4, 0xec, 0xa6, 0xa4, 0x55, 0xf5, 0x88, 0xfe, 0x10,
+ 0xea, 0xb2, 0x23, 0x45, 0x8a, 0xcb, 0xc3, 0x87, 0x50, 0xf8, 0x68, 0x13, 0x6f, 0x08, 0x71, 0xb2,
+ 0x37, 0x67, 0xba, 0x11, 0xc6, 0x07, 0xc3, 0xe7, 0xcc, 0xde, 0xd0, 0x82, 0xcd, 0x99, 0x3c, 0xa6,
+ 0xf8, 0x2b, 0x02, 0x5c, 0x61, 0x75, 0xa3, 0xeb, 0x7d, 0x27, 0xb2, 0xb7, 0x76, 0x1a, 0xd8, 0x3b,
+ 0x72, 0x8f, 0x3e, 0xe0, 0xa3, 0x41, 0xd5, 0x1d, 0xb1, 0x16, 0x5c, 0x9d, 0x90, 0xde, 0x55, 0x86,
+ 0x95, 0x23, 0x26, 0xd5, 0x66, 0xab, 0xd5, 0xc5, 0xfb, 0x03, 0x4d, 0x2a, 0xbc, 0xe6, 0x4e, 0x4c,
+ 0x8a, 0xf3, 0xac, 0x4e, 0xf3, 0xd7, 0xd1, 0xde, 0x1e, 0xdc, 0x19, 0x51, 0x5c, 0x4f, 0xa5, 0x2f,
+ 0x89, 0xc5, 0xf5, 0x54, 0xfa, 0x2d, 0x71, 0x61, 0x3d, 0x95, 0x7e, 0x5b, 0x7c, 0xa7, 0xf4, 0x7b,
+ 0x0b, 0x90, 0x77, 0x81, 0x23, 0x03, 0x54, 0xf7, 0x83, 0x80, 0xea, 0xf2, 0x20, 0x40, 0xc5, 0xa1,
+ 0x26, 0x47, 0x54, 0xf7, 0x83, 0x88, 0xea, 0xf2, 0x20, 0x44, 0xe5, 0xf3, 0x10, 0x48, 0xd5, 0x18,
+ 0x04, 0xa9, 0xee, 0x8c, 0x01, 0xa9, 0x3c, 0x51, 0xbd, 0x98, 0x6a, 0xad, 0x1f, 0x53, 0x5d, 0x1f,
+ 0x8e, 0xa9, 0x3c, 0x51, 0x01, 0x50, 0xf5, 0xb0, 0x07, 0x54, 0x5d, 0x1d, 0x02, 0xaa, 0x3c, 0x7e,
+ 0x17, 0x55, 0x6d, 0x44, 0xa2, 0xaa, 0x9b, 0xa3, 0x50, 0x95, 0x27, 0x27, 0x04, 0xab, 0x3e, 0x0c,
+ 0xc1, 0xaa, 0xc5, 0x81, 0xb0, 0xca, 0xe3, 0x66, 0xb8, 0xea, 0xd3, 0x5e, 0x5c, 0x75, 0x75, 0x08,
+ 0xae, 0xf2, 0x5b, 0xc0, 0x81, 0x55, 0x35, 0x0a, 0x58, 0xdd, 0x18, 0x01, 0xac, 0x3c, 0x29, 0x41,
+ 0x64, 0x55, 0x8d, 0x42, 0x56, 0x37, 0x46, 0x20, 0xab, 0x1e, 0x49, 0x0c, 0x5a, 0x6d, 0x45, 0x43,
+ 0xab, 0x5b, 0x23, 0xa1, 0x95, 0x27, 0x2d, 0x8c, 0xad, 0x96, 0x03, 0xd8, 0xea, 0xdd, 0x01, 0xd8,
+ 0xca, 0x63, 0x25, 0xe0, 0xea, 0x5b, 0x7d, 0xe0, 0xaa, 0x34, 0x0c, 0x5c, 0x79, 0xbc, 0x1e, 0xba,
+ 0x7a, 0x3e, 0x00, 0x5d, 0xdd, 0x1e, 0x8d, 0xae, 0x3c, 0x61, 0x3d, 0xf0, 0x4a, 0x19, 0x0a, 0xaf,
+ 0xde, 0x1f, 0x13, 0x5e, 0x79, 0xd2, 0xa3, 0xf0, 0xd5, 0xc7, 0x61, 0x7c, 0x75, 0x65, 0x30, 0xbe,
+ 0xf2, 0xc4, 0x70, 0x80, 0xb5, 0x11, 0x09, 0xb0, 0x6e, 0x8e, 0x02, 0x58, 0xfe, 0x38, 0x08, 0x22,
+ 0xac, 0xad, 0x68, 0x84, 0x75, 0x6b, 0x24, 0xc2, 0xf2, 0xbb, 0x3f, 0x04, 0xb1, 0x36, 0x22, 0x21,
+ 0xd6, 0xcd, 0x51, 0x10, 0xcb, 0xaf, 0x5c, 0x10, 0x63, 0xbd, 0x1c, 0x88, 0xb1, 0xee, 0x8e, 0x83,
+ 0xb1, 0x3c, 0xa1, 0x7d, 0x20, 0xeb, 0xf3, 0xc1, 0x20, 0xeb, 0x1b, 0xe7, 0x38, 0x9c, 0x32, 0x12,
+ 0x65, 0x7d, 0xab, 0x0f, 0x65, 0x95, 0x86, 0xa1, 0x2c, 0xdf, 0x9e, 0x5d, 0x98, 0xa5, 0x0c, 0x05,
+ 0x45, 0xef, 0x8f, 0x09, 0x8a, 0x7c, 0xe3, 0x8b, 0x40, 0x45, 0x95, 0x08, 0x54, 0x74, 0x7d, 0x38,
+ 0x2a, 0xf2, 0xdd, 0xb9, 0x0f, 0x8b, 0xaa, 0x51, 0xb0, 0xe8, 0xc6, 0x08, 0x58, 0xe4, 0x7b, 0xa1,
+ 0x00, 0x2e, 0x7a, 0xd8, 0x83, 0x8b, 0xae, 0x8e, 0xcc, 0xb6, 0x0a, 0x00, 0xa3, 0xd5, 0x7e, 0x60,
+ 0x74, 0x6d, 0x28, 0x30, 0xf2, 0x24, 0xf8, 0xc8, 0xe8, 0x61, 0x0f, 0x32, 0xba, 0x3a, 0x04, 0x19,
+ 0xf9, 0x15, 0xe0, 0xd0, 0x48, 0x1b, 0x0e, 0x8d, 0x96, 0xc6, 0x85, 0x46, 0x9e, 0xe0, 0x48, 0x6c,
+ 0xb4, 0x15, 0x8d, 0x8d, 0x6e, 0x8d, 0x99, 0xf0, 0xd0, 0x07, 0x8e, 0xaa, 0x51, 0xe0, 0xe8, 0xc6,
+ 0x08, 0x70, 0x14, 0x9c, 0x43, 0x3c, 0x74, 0x54, 0x8d, 0x42, 0x47, 0x37, 0x46, 0xa0, 0x23, 0x5f,
+ 0x52, 0x00, 0x1e, 0x35, 0x06, 0xc1, 0xa3, 0x3b, 0x63, 0xc0, 0x23, 0x3f, 0x78, 0xe9, 0xc1, 0x47,
+ 0x8f, 0x7a, 0xf1, 0x51, 0x69, 0x18, 0x3e, 0xf2, 0x47, 0xa4, 0x0b, 0x90, 0xb6, 0xa2, 0x01, 0xd2,
+ 0xad, 0x91, 0x00, 0x29, 0xe8, 0x24, 0x03, 0x08, 0x69, 0x23, 0x12, 0x21, 0xdd, 0x1c, 0x85, 0x90,
+ 0x7c, 0x27, 0x19, 0x84, 0x48, 0x8f, 0x7a, 0x21, 0x52, 0x69, 0x18, 0x44, 0xf2, 0x1b, 0xe7, 0x62,
+ 0xa4, 0x6a, 0x14, 0x46, 0xba, 0x31, 0x02, 0x23, 0xf9, 0x9d, 0x17, 0x00, 0x49, 0xca, 0x50, 0x90,
+ 0xf4, 0xfe, 0x98, 0x20, 0xa9, 0xc7, 0x71, 0x85, 0x51, 0x52, 0x35, 0x0a, 0x25, 0xdd, 0x18, 0x81,
+ 0x92, 0x02, 0x95, 0xf5, 0x61, 0xd2, 0x56, 0x34, 0x4c, 0xba, 0x35, 0x12, 0x26, 0xf5, 0x8c, 0x26,
+ 0x17, 0x27, 0x6d, 0x44, 0xe2, 0xa4, 0x9b, 0xa3, 0x70, 0x52, 0xcf, 0xc4, 0xc7, 0x83, 0x83, 0xbf,
+ 0x3a, 0x3e, 0x50, 0xfa, 0xf8, 0xfc, 0x40, 0xc9, 0x7b, 0xe6, 0x08, 0xa4, 0xf4, 0xa8, 0x17, 0x29,
+ 0x95, 0x86, 0x21, 0x25, 0xdf, 0xb2, 0xce, 0x07, 0x95, 0xd6, 0x53, 0xe9, 0x77, 0xc4, 0x77, 0x4b,
+ 0x7f, 0x7d, 0x1a, 0xa6, 0xaa, 0x5e, 0x2a, 0x8e, 0xdf, 0x4a, 0xe1, 0x4d, 0x0e, 0xc2, 0x42, 0x6b,
+ 0x64, 0xc4, 0x53, 0xbf, 0x39, 0xfa, 0xcc, 0xc3, 0xfe, 0xf3, 0xf8, 0x38, 0xeb, 0x1b, 0xec, 0x2d,
+ 0x47, 0x1f, 0x42, 0xbe, 0x6b, 0x63, 0x4b, 0xee, 0x58, 0xba, 0x69, 0xe9, 0x0e, 0xdb, 0xa7, 0x23,
+ 0xac, 0x8a, 0x5f, 0x9e, 0x2e, 0xe6, 0x76, 0x6c, 0x6c, 0x6d, 0x73, 0xba, 0x94, 0xeb, 0x06, 0xae,
+ 0xdc, 0xaf, 0x93, 0x4d, 0x8e, 0xff, 0x75, 0xb2, 0xe7, 0x20, 0x5a, 0x58, 0xd1, 0x42, 0x11, 0x0c,
+ 0x3b, 0x68, 0x2a, 0xda, 0xe6, 0xe8, 0x16, 0x38, 0xb7, 0x24, 0x3d, 0x70, 0x6a, 0xc6, 0x0a, 0x13,
+ 0xd1, 0x3d, 0xb8, 0xd0, 0x56, 0x8e, 0x69, 0x2e, 0xab, 0xec, 0x06, 0x85, 0x34, 0x3f, 0x95, 0x7d,
+ 0xf8, 0x0b, 0xb5, 0x95, 0x63, 0xfa, 0xa9, 0x33, 0x76, 0x8b, 0x7e, 0x9b, 0xe4, 0x06, 0x14, 0x34,
+ 0xdd, 0x76, 0x74, 0x43, 0x75, 0xf8, 0x11, 0xc5, 0xec, 0x78, 0xdf, 0xbc, 0x4b, 0x65, 0xe7, 0x10,
+ 0xdf, 0x85, 0x59, 0xbe, 0xd5, 0x21, 0xf0, 0x86, 0x92, 0x1f, 0xf3, 0xcb, 0x6e, 0x78, 0x2f, 0x25,
+ 0x51, 0x19, 0x66, 0x9a, 0x8a, 0x83, 0x8f, 0x94, 0x13, 0xd9, 0xdd, 0x27, 0x97, 0xa5, 0x27, 0x74,
+ 0xbe, 0x7d, 0x76, 0xba, 0x98, 0x7f, 0xc2, 0x6e, 0xf5, 0x6d, 0x97, 0xcb, 0x37, 0x03, 0x37, 0x34,
+ 0x74, 0x0b, 0x66, 0x14, 0xfb, 0xc4, 0x50, 0xa9, 0x7a, 0xb0, 0x61, 0x77, 0x6d, 0x0a, 0x49, 0xd2,
+ 0x52, 0x81, 0x92, 0xcb, 0x2e, 0x15, 0x5d, 0x85, 0x1c, 0xdf, 0x07, 0xc0, 0xbe, 0x97, 0x34, 0x43,
+ 0x9b, 0xca, 0x3f, 0xbe, 0x41, 0x3f, 0x99, 0x84, 0x1e, 0xc2, 0x02, 0xff, 0x28, 0xc1, 0x91, 0x62,
+ 0x69, 0x32, 0xd5, 0xba, 0x6f, 0x9f, 0x22, 0x15, 0x7b, 0x89, 0x7d, 0x84, 0x80, 0x14, 0x20, 0xaa,
+ 0xf6, 0xc7, 0xd0, 0x16, 0xcc, 0xaa, 0x2d, 0xdd, 0x43, 0x10, 0xac, 0xe5, 0xb3, 0x03, 0x47, 0x53,
+ 0x99, 0x96, 0xf5, 0xdf, 0xd0, 0xce, 0xa8, 0x61, 0x02, 0xaa, 0x03, 0x3d, 0xc0, 0x47, 0xee, 0x98,
+ 0x2d, 0x5d, 0x3d, 0xa1, 0xe0, 0x21, 0x7c, 0xa0, 0xfa, 0xd0, 0x4f, 0x1c, 0xbc, 0x54, 0x74, 0x67,
+ 0x9b, 0x72, 0x4a, 0x70, 0xe4, 0xfd, 0x66, 0x07, 0x20, 0xaf, 0xa7, 0xd2, 0x39, 0x31, 0xbf, 0x9e,
+ 0x4a, 0x17, 0xc4, 0x99, 0xd2, 0xdf, 0x16, 0x60, 0xa6, 0xa7, 0x2e, 0xa8, 0x0a, 0x17, 0x34, 0x6f,
+ 0xa8, 0xc8, 0x7c, 0x1b, 0x99, 0x6e, 0x1a, 0xfc, 0x8c, 0xf8, 0xb9, 0x2f, 0x4f, 0x17, 0x67, 0x68,
+ 0xe9, 0x27, 0xde, 0x2d, 0x69, 0xde, 0xe7, 0xf0, 0xa9, 0xe8, 0x63, 0x28, 0xb0, 0xf0, 0xd3, 0xfb,
+ 0x28, 0x20, 0xcd, 0xed, 0x5f, 0x9d, 0xfd, 0xf2, 0x74, 0x31, 0x4f, 0x63, 0x4e, 0xf7, 0xf4, 0x66,
+ 0x29, 0xdf, 0x0a, 0x5e, 0x96, 0xfe, 0x96, 0x00, 0xb9, 0xd0, 0xc6, 0xac, 0x87, 0x3d, 0x2f, 0xf0,
+ 0xdf, 0x8a, 0xc6, 0xad, 0x83, 0x72, 0xfe, 0xd2, 0xdc, 0xce, 0xdd, 0xec, 0xd1, 0xc5, 0xc1, 0xb8,
+ 0x87, 0xae, 0xe2, 0xb8, 0x59, 0x23, 0x2e, 0xdb, 0x27, 0xa9, 0xbf, 0xfb, 0xc5, 0xe2, 0x44, 0xe9,
+ 0x9f, 0xa5, 0x20, 0x1f, 0xde, 0x80, 0x55, 0xeb, 0xa9, 0x57, 0xd4, 0xbc, 0x12, 0xe2, 0x58, 0x1a,
+ 0x72, 0x66, 0x65, 0xc6, 0xff, 0x24, 0x03, 0xab, 0xe6, 0x95, 0x21, 0x69, 0x0a, 0xc1, 0x7a, 0xfa,
+ 0x8c, 0x0b, 0x3f, 0x48, 0x7a, 0xfe, 0x75, 0x09, 0x26, 0xe9, 0xc9, 0x48, 0xbc, 0x6a, 0x51, 0x7b,
+ 0xfb, 0x2b, 0xe4, 0xbe, 0xc4, 0x8a, 0x11, 0x7f, 0xdc, 0x78, 0xa3, 0x83, 0x09, 0xfd, 0x61, 0x70,
+ 0xfe, 0xaf, 0x2f, 0xf2, 0xe3, 0x29, 0x27, 0xcf, 0x77, 0x3c, 0x25, 0xfa, 0x2e, 0xcc, 0xa8, 0x66,
+ 0xab, 0xc5, 0xe6, 0x4a, 0xe6, 0x91, 0xfa, 0x0f, 0x90, 0xa1, 0x22, 0xf8, 0x67, 0x31, 0x97, 0xbc,
+ 0xcf, 0x63, 0x2e, 0x49, 0xfc, 0xf3, 0x98, 0x81, 0x5c, 0xdc, 0x82, 0x27, 0x8c, 0x39, 0xb2, 0x9e,
+ 0xb4, 0xe0, 0xe9, 0x37, 0x49, 0x0b, 0x66, 0x09, 0xe5, 0xdc, 0x72, 0xfe, 0xbd, 0xc0, 0xf3, 0x52,
+ 0x9e, 0x9a, 0xe6, 0x41, 0xd7, 0xcb, 0x68, 0x5d, 0x08, 0x1e, 0x13, 0x99, 0xfe, 0xf2, 0x74, 0x31,
+ 0x25, 0x79, 0xe7, 0x44, 0x46, 0x79, 0xfe, 0xc4, 0xcf, 0xe7, 0xf9, 0xaf, 0x42, 0xae, 0x63, 0xe1,
+ 0x3d, 0xec, 0xa8, 0xfb, 0xb2, 0xd1, 0x6d, 0xf3, 0xdd, 0x40, 0x59, 0x97, 0xb6, 0xd5, 0x6d, 0xa3,
+ 0x3b, 0x20, 0x7a, 0x45, 0x38, 0x46, 0x77, 0x4f, 0x0a, 0x73, 0xe9, 0x1c, 0xd1, 0x97, 0xfe, 0x4c,
+ 0x80, 0xb9, 0x50, 0x9b, 0xf8, 0x98, 0x58, 0x87, 0xac, 0xef, 0x0e, 0xec, 0xa2, 0x70, 0xce, 0xcc,
+ 0xce, 0x20, 0x33, 0x92, 0xe1, 0xa2, 0xfb, 0x58, 0xfa, 0xe9, 0x01, 0x5f, 0x6c, 0xe2, 0x9c, 0x62,
+ 0x2f, 0xf8, 0x72, 0xd6, 0x02, 0x0f, 0xf0, 0x06, 0x49, 0x72, 0xac, 0x41, 0x52, 0xfa, 0xa1, 0x00,
+ 0x22, 0x7d, 0xc0, 0x63, 0x8c, 0xb5, 0x58, 0xbc, 0x93, 0x9b, 0x34, 0x9e, 0x18, 0x7f, 0xbf, 0x4f,
+ 0xe8, 0xd3, 0x29, 0xc9, 0xf0, 0xa7, 0x53, 0x4a, 0x5f, 0x08, 0x50, 0xf0, 0x6a, 0xc8, 0x3e, 0x3b,
+ 0x38, 0xe4, 0x34, 0xd2, 0x37, 0xfb, 0xd8, 0x9e, 0x7b, 0x68, 0xca, 0x58, 0x5f, 0x42, 0x0c, 0x1e,
+ 0x9a, 0xc2, 0x3e, 0x0c, 0xf7, 0xf7, 0x5d, 0xcb, 0x21, 0x55, 0x2c, 0xfb, 0x07, 0x62, 0xbc, 0xc1,
+ 0xd6, 0x27, 0x89, 0x7e, 0xbd, 0xd5, 0x6c, 0x1d, 0xb2, 0xd3, 0x6a, 0xc6, 0x72, 0x5b, 0x88, 0x67,
+ 0x63, 0x01, 0x5f, 0xcd, 0xd3, 0x1a, 0x75, 0xfa, 0x5d, 0x57, 0xf6, 0xdb, 0x2e, 0x3d, 0x0e, 0x28,
+ 0x90, 0x76, 0x3e, 0xd1, 0xd2, 0x58, 0xae, 0xd4, 0xd5, 0x12, 0xb3, 0x95, 0x3f, 0x0a, 0xf6, 0x44,
+ 0xe5, 0x90, 0xa0, 0xb8, 0x07, 0x90, 0x3c, 0x54, 0x5a, 0xc3, 0xb2, 0xd0, 0x42, 0x3d, 0x27, 0x91,
+ 0xd2, 0xe8, 0x71, 0xe8, 0x1c, 0x91, 0xc4, 0x60, 0xc4, 0xd1, 0xaf, 0xd2, 0xd0, 0x79, 0x23, 0x1f,
+ 0x85, 0x6d, 0x7d, 0xe8, 0xe3, 0x83, 0x46, 0xff, 0x49, 0xea, 0xc7, 0x5f, 0x2c, 0x0a, 0xa5, 0x8f,
+ 0xe0, 0xad, 0x27, 0xa6, 0x6d, 0xeb, 0x1d, 0x82, 0x32, 0xe9, 0x00, 0x22, 0x5e, 0xdc, 0xf3, 0x64,
+ 0xe9, 0x0e, 0x5d, 0x6f, 0x30, 0xd8, 0x88, 0xcf, 0x48, 0xde, 0x75, 0xe9, 0x5f, 0x09, 0x70, 0xa9,
+ 0x9f, 0x93, 0x29, 0x24, 0x6a, 0x6b, 0xe5, 0xb4, 0x6a, 0xfa, 0xe7, 0xea, 0x8d, 0x36, 0x2c, 0xb7,
+ 0x38, 0x89, 0x06, 0xf9, 0x33, 0xe5, 0xb6, 0x42, 0x47, 0x3a, 0xdf, 0xfe, 0x5d, 0xe0, 0xe4, 0x4d,
+ 0x46, 0xf5, 0x07, 0x7d, 0x6a, 0xbc, 0x41, 0xdf, 0x80, 0x99, 0x75, 0x53, 0x37, 0x48, 0xd0, 0xe9,
+ 0xb6, 0x77, 0x05, 0x0a, 0xbb, 0xba, 0xa1, 0x58, 0x27, 0xb2, 0xbb, 0xb7, 0x5e, 0x18, 0xb5, 0xb7,
+ 0x42, 0xca, 0x33, 0x0e, 0x7e, 0x59, 0xfa, 0x89, 0x00, 0xa2, 0x2f, 0x96, 0x3b, 0xcf, 0xf7, 0x00,
+ 0xd4, 0x56, 0xd7, 0x76, 0xb0, 0xe5, 0x6e, 0x69, 0xca, 0xb1, 0x2c, 0xf0, 0x32, 0xa3, 0xd6, 0xd6,
+ 0xa4, 0x0c, 0x2f, 0x50, 0xd3, 0xd0, 0xb5, 0xf0, 0x21, 0x13, 0x93, 0xab, 0x70, 0xd6, 0x77, 0xb4,
+ 0x04, 0xba, 0x09, 0x69, 0xdb, 0x31, 0x2d, 0x0f, 0xde, 0x4c, 0xae, 0x66, 0xcf, 0x02, 0x87, 0xe0,
+ 0xd3, 0xcd, 0xd3, 0xa4, 0xdc, 0x0a, 0x14, 0xc8, 0xcc, 0x7c, 0x88, 0xbd, 0x26, 0xa5, 0x46, 0x37,
+ 0x89, 0x71, 0xf0, 0xcb, 0xbb, 0x75, 0x98, 0x8b, 0x98, 0x88, 0x50, 0x01, 0x20, 0xf0, 0xcd, 0x1d,
+ 0xfe, 0xb5, 0xe0, 0x95, 0x35, 0x79, 0x67, 0xab, 0xfc, 0x6c, 0x73, 0xb3, 0xd6, 0x68, 0x54, 0xd6,
+ 0x44, 0x01, 0x89, 0x90, 0x0b, 0x7d, 0xb1, 0x27, 0xc1, 0xbe, 0x1f, 0x7c, 0xf7, 0x2f, 0x00, 0xf8,
+ 0x1f, 0x02, 0x23, 0xb2, 0x36, 0x2a, 0x9f, 0xc9, 0x2f, 0x56, 0x9e, 0xee, 0x54, 0xea, 0xe2, 0x04,
+ 0x42, 0x50, 0x58, 0x5d, 0x69, 0x94, 0xab, 0xb2, 0x54, 0xa9, 0x6f, 0x3f, 0xdb, 0xaa, 0x57, 0xdc,
+ 0xef, 0x0e, 0xdf, 0x5d, 0x83, 0x5c, 0xf0, 0x50, 0x1e, 0x34, 0x07, 0x33, 0xe5, 0x6a, 0xa5, 0xbc,
+ 0x21, 0xbf, 0xa8, 0xad, 0xc8, 0xcf, 0x77, 0x2a, 0x3b, 0x15, 0x71, 0x82, 0x56, 0x8d, 0x12, 0x1f,
+ 0xef, 0x3c, 0x7d, 0x2a, 0x0a, 0x68, 0x06, 0xb2, 0xec, 0x9a, 0x7e, 0xdd, 0x47, 0x4c, 0xdc, 0xdd,
+ 0x84, 0x6c, 0xe0, 0xf8, 0x5e, 0xf2, 0xb8, 0xed, 0x9d, 0x7a, 0x55, 0x6e, 0xd4, 0x36, 0x2b, 0xf5,
+ 0xc6, 0xca, 0xe6, 0x36, 0x93, 0x41, 0x69, 0x2b, 0xab, 0xcf, 0xa4, 0x86, 0x28, 0x78, 0xd7, 0x8d,
+ 0x67, 0x3b, 0xe5, 0xaa, 0xdb, 0x8c, 0x52, 0x2a, 0x9d, 0x14, 0x93, 0x77, 0x7f, 0x4d, 0x80, 0x4b,
+ 0x03, 0x8e, 0xa6, 0x41, 0x59, 0x98, 0xde, 0x31, 0xe8, 0xf9, 0xa5, 0xe2, 0x04, 0xca, 0x07, 0x4e,
+ 0xa7, 0x11, 0x05, 0x94, 0x66, 0x27, 0x83, 0x88, 0x09, 0x34, 0x05, 0x89, 0xfa, 0x03, 0x31, 0x49,
+ 0x6a, 0x1a, 0x38, 0xdc, 0x45, 0x4c, 0xa1, 0x0c, 0x3f, 0x9b, 0x42, 0x9c, 0x44, 0x39, 0xff, 0x70,
+ 0x08, 0x71, 0x8a, 0x88, 0xf2, 0x8e, 0x57, 0x10, 0xa7, 0xef, 0x5e, 0x85, 0xc0, 0x56, 0x75, 0x04,
+ 0x30, 0xf5, 0x54, 0x71, 0xb0, 0xed, 0x88, 0x13, 0x68, 0x1a, 0x92, 0x2b, 0xad, 0x96, 0x28, 0xdc,
+ 0xff, 0x69, 0x12, 0xd2, 0xee, 0xf7, 0x6b, 0xd0, 0x53, 0x98, 0x64, 0xab, 0xb7, 0x8b, 0x83, 0x83,
+ 0x5b, 0x3a, 0x28, 0x16, 0xae, 0x8c, 0x8a, 0x7e, 0x4b, 0x13, 0xe8, 0x2f, 0x42, 0x36, 0x10, 0x34,
+ 0xa0, 0x81, 0x2b, 0x50, 0xa1, 0x40, 0x69, 0xe1, 0xe6, 0xa8, 0x62, 0x9e, 0xfc, 0x97, 0x90, 0xf1,
+ 0x9c, 0x18, 0xba, 0x36, 0xcc, 0xc5, 0xb9, 0xb2, 0x87, 0xfb, 0x41, 0xe2, 0xa5, 0x4a, 0x13, 0x1f,
+ 0x08, 0xc8, 0x02, 0xd4, 0xef, 0xc4, 0x50, 0x54, 0x4e, 0xc0, 0x40, 0x2f, 0xb9, 0x70, 0x77, 0xac,
+ 0xd2, 0xfe, 0x33, 0x9f, 0x43, 0x8a, 0x78, 0x08, 0x14, 0x15, 0xe6, 0xf4, 0x78, 0xa4, 0x85, 0x6b,
+ 0x43, 0xcb, 0xb8, 0xfa, 0x59, 0xbd, 0xf3, 0xe3, 0x3f, 0xbd, 0x3c, 0xf1, 0xe3, 0xb3, 0xcb, 0xc2,
+ 0x4f, 0xce, 0x2e, 0x0b, 0x3f, 0x3d, 0xbb, 0x2c, 0xfc, 0xd7, 0xb3, 0xcb, 0xc2, 0xdf, 0xfc, 0xd9,
+ 0xe5, 0x89, 0x9f, 0xfc, 0xec, 0xf2, 0xc4, 0x4f, 0x7f, 0x76, 0x79, 0xe2, 0xf3, 0x69, 0xce, 0xbd,
+ 0x3b, 0x45, 0x3f, 0x12, 0xff, 0xe0, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x17, 0x72, 0x12, 0xc0,
+ 0x51, 0x7f, 0x00, 0x00,
}
diff --git a/pkg/roachpb/api.proto b/pkg/roachpb/api.proto
index 6e87af464cc9..e35f0971321f 100644
--- a/pkg/roachpb/api.proto
+++ b/pkg/roachpb/api.proto
@@ -1586,6 +1586,34 @@ message AdminScatterResponse {
repeated RangeInfo range_infos = 3 [(gogoproto.nullable) = false];
}
+// MigrateRequest forces all ranges overlapping it to proactively move out of
+// any legacy modes that they are currently in (as defined by the delta between
+// the current version and the TargetVersion). When this command returns, the
+// ranges are ready to run with the TargetVersion.
+//
+// TODO(irfansharif): Should the implementation of the Migrate command consider
+// the delta between the current and the target version? Given the orchestrator
+// is already going to be the one responsible for stepping through all
+// intermediate versions, it's probably saner to only carry out the specific
+// migration associated with the target version.
+//
+// TODO(irfansharif): Should this be an admin request instead? There's no good
+// way for us to get the applied index of admin requests which don't go through
+// the usual eval+propose codepaths, and we do need to know the MLAI for the
+// request to wait for it to apply before returning. So perhaps not.
+message MigrateRequest {
+ option (gogoproto.equal) = true;
+ RequestHeader header = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true];
+
+ // The version that will become active next. A request with the
+ Version TargetVersion = 2 [(gogoproto.nullable) = false];
+}
+
+// MigrateResponse is the response to an Migrate operation.
+message MigrateResponse {
+ ResponseHeader header = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true];
+}
+
// AdminVerifyProtectedTimestampRequest is the argument to the
// AdminVerifyProtectedTimestamp method which ensures that the specified record
// will be seen before data can be garbage collected at the timestamp.
@@ -1827,6 +1855,7 @@ message RequestUnion {
SubsumeRequest subsume = 43;
RangeStatsRequest range_stats = 44;
AdminVerifyProtectedTimestampRequest admin_verify_protected_timestamp = 49;
+ MigrateRequest migrate = 50;
}
reserved 8, 15, 23, 25, 27;
}
@@ -1878,6 +1907,7 @@ message ResponseUnion {
SubsumeResponse subsume = 43;
RangeStatsResponse range_stats = 44;
AdminVerifyProtectedTimestampResponse admin_verify_protected_timestamp = 49;
+ MigrateResponse migrate = 50;
}
reserved 8, 15, 23, 25, 27, 28;
}
diff --git a/pkg/roachpb/batch_generated.go b/pkg/roachpb/batch_generated.go
index db4de754ddb7..d3672b136096 100644
--- a/pkg/roachpb/batch_generated.go
+++ b/pkg/roachpb/batch_generated.go
@@ -164,6 +164,8 @@ func (ru RequestUnion) GetInner() Request {
return t.RangeStats
case *RequestUnion_AdminVerifyProtectedTimestamp:
return t.AdminVerifyProtectedTimestamp
+ case *RequestUnion_Migrate:
+ return t.Migrate
default:
return nil
}
@@ -258,6 +260,8 @@ func (ru ResponseUnion) GetInner() Response {
return t.RangeStats
case *ResponseUnion_AdminVerifyProtectedTimestamp:
return t.AdminVerifyProtectedTimestamp
+ case *ResponseUnion_Migrate:
+ return t.Migrate
default:
return nil
}
@@ -422,6 +426,8 @@ func (ru *RequestUnion) SetInner(r Request) bool {
union = &RequestUnion_RangeStats{t}
case *AdminVerifyProtectedTimestampRequest:
union = &RequestUnion_AdminVerifyProtectedTimestamp{t}
+ case *MigrateRequest:
+ union = &RequestUnion_Migrate{t}
default:
return false
}
@@ -519,6 +525,8 @@ func (ru *ResponseUnion) SetInner(r Response) bool {
union = &ResponseUnion_RangeStats{t}
case *AdminVerifyProtectedTimestampResponse:
union = &ResponseUnion_AdminVerifyProtectedTimestamp{t}
+ case *MigrateResponse:
+ union = &ResponseUnion_Migrate{t}
default:
return false
}
@@ -526,7 +534,7 @@ func (ru *ResponseUnion) SetInner(r Response) bool {
return true
}
-type reqCounts [44]int32
+type reqCounts [45]int32
// getReqCounts returns the number of times each
// request type appears in the batch.
@@ -622,6 +630,8 @@ func (ba *BatchRequest) getReqCounts() reqCounts {
counts[42]++
case *RequestUnion_AdminVerifyProtectedTimestamp:
counts[43]++
+ case *RequestUnion_Migrate:
+ counts[44]++
default:
panic(fmt.Sprintf("unsupported request: %+v", ru))
}
@@ -674,6 +684,7 @@ var requestNames = []string{
"Subsume",
"RngStats",
"AdmVerifyProtectedTimestamp",
+ "Migrate",
}
// Summary prints a short summary of the requests in a batch.
@@ -881,6 +892,10 @@ type adminVerifyProtectedTimestampResponseAlloc struct {
union ResponseUnion_AdminVerifyProtectedTimestamp
resp AdminVerifyProtectedTimestampResponse
}
+type migrateResponseAlloc struct {
+ union ResponseUnion_Migrate
+ resp MigrateResponse
+}
// CreateReply creates replies for each of the contained requests, wrapped in a
// BatchResponse. The response objects are batch allocated to minimize
@@ -935,6 +950,7 @@ func (ba *BatchRequest) CreateReply() *BatchResponse {
var buf41 []subsumeResponseAlloc
var buf42 []rangeStatsResponseAlloc
var buf43 []adminVerifyProtectedTimestampResponseAlloc
+ var buf44 []migrateResponseAlloc
for i, r := range ba.Requests {
switch r.GetValue().(type) {
@@ -1246,6 +1262,13 @@ func (ba *BatchRequest) CreateReply() *BatchResponse {
buf43[0].union.AdminVerifyProtectedTimestamp = &buf43[0].resp
br.Responses[i].Value = &buf43[0].union
buf43 = buf43[1:]
+ case *RequestUnion_Migrate:
+ if buf44 == nil {
+ buf44 = make([]migrateResponseAlloc, counts[44])
+ }
+ buf44[0].union.Migrate = &buf44[0].resp
+ br.Responses[i].Value = &buf44[0].union
+ buf44 = buf44[1:]
default:
panic(fmt.Sprintf("unsupported request: %+v", r))
}
@@ -1344,6 +1367,8 @@ func CreateRequest(method Method) Request {
return &RangeStatsRequest{}
case AdminVerifyProtectedTimestamp:
return &AdminVerifyProtectedTimestampRequest{}
+ case Migrate:
+ return &MigrateRequest{}
default:
panic(fmt.Sprintf("unsupported method: %+v", method))
}
diff --git a/pkg/roachpb/metadata.pb.go b/pkg/roachpb/metadata.pb.go
index a47508898042..788bc379630f 100644
--- a/pkg/roachpb/metadata.pb.go
+++ b/pkg/roachpb/metadata.pb.go
@@ -110,7 +110,7 @@ func (x *ReplicaType) UnmarshalJSON(data []byte) error {
return nil
}
func (ReplicaType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{0}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{0}
}
// Attributes specifies a list of arbitrary strings describing
@@ -122,7 +122,7 @@ type Attributes struct {
func (m *Attributes) Reset() { *m = Attributes{} }
func (*Attributes) ProtoMessage() {}
func (*Attributes) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{0}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{0}
}
func (m *Attributes) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -156,7 +156,7 @@ type ReplicationTarget struct {
func (m *ReplicationTarget) Reset() { *m = ReplicationTarget{} }
func (*ReplicationTarget) ProtoMessage() {}
func (*ReplicationTarget) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{1}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{1}
}
func (m *ReplicationTarget) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -201,7 +201,7 @@ type ReplicaDescriptor struct {
func (m *ReplicaDescriptor) Reset() { *m = ReplicaDescriptor{} }
func (*ReplicaDescriptor) ProtoMessage() {}
func (*ReplicaDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{2}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{2}
}
func (m *ReplicaDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -236,7 +236,7 @@ func (m *ReplicaIdent) Reset() { *m = ReplicaIdent{} }
func (m *ReplicaIdent) String() string { return proto.CompactTextString(m) }
func (*ReplicaIdent) ProtoMessage() {}
func (*ReplicaIdent) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{3}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{3}
}
func (m *ReplicaIdent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -380,7 +380,7 @@ type RangeDescriptor struct {
func (m *RangeDescriptor) Reset() { *m = RangeDescriptor{} }
func (*RangeDescriptor) ProtoMessage() {}
func (*RangeDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{4}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{4}
}
func (m *RangeDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -419,7 +419,7 @@ type Percentiles struct {
func (m *Percentiles) Reset() { *m = Percentiles{} }
func (*Percentiles) ProtoMessage() {}
func (*Percentiles) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{5}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{5}
}
func (m *Percentiles) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -481,7 +481,7 @@ type StoreCapacity struct {
func (m *StoreCapacity) Reset() { *m = StoreCapacity{} }
func (*StoreCapacity) ProtoMessage() {}
func (*StoreCapacity) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{6}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{6}
}
func (m *StoreCapacity) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -526,7 +526,7 @@ func (m *NodeDescriptor) Reset() { *m = NodeDescriptor{} }
func (m *NodeDescriptor) String() string { return proto.CompactTextString(m) }
func (*NodeDescriptor) ProtoMessage() {}
func (*NodeDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{7}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{7}
}
func (m *NodeDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -562,7 +562,7 @@ func (m *LocalityAddress) Reset() { *m = LocalityAddress{} }
func (m *LocalityAddress) String() string { return proto.CompactTextString(m) }
func (*LocalityAddress) ProtoMessage() {}
func (*LocalityAddress) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{8}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{8}
}
func (m *LocalityAddress) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -600,7 +600,7 @@ func (m *StoreDescriptor) Reset() { *m = StoreDescriptor{} }
func (m *StoreDescriptor) String() string { return proto.CompactTextString(m) }
func (*StoreDescriptor) ProtoMessage() {}
func (*StoreDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{9}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{9}
}
func (m *StoreDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -637,7 +637,7 @@ func (m *StoreDeadReplicas) Reset() { *m = StoreDeadReplicas{} }
func (m *StoreDeadReplicas) String() string { return proto.CompactTextString(m) }
func (*StoreDeadReplicas) ProtoMessage() {}
func (*StoreDeadReplicas) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{10}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{10}
}
func (m *StoreDeadReplicas) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -671,7 +671,7 @@ type Locality struct {
func (m *Locality) Reset() { *m = Locality{} }
func (*Locality) ProtoMessage() {}
func (*Locality) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{11}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{11}
}
func (m *Locality) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -707,7 +707,7 @@ type Tier struct {
func (m *Tier) Reset() { *m = Tier{} }
func (*Tier) ProtoMessage() {}
func (*Tier) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{12}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{12}
}
func (m *Tier) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -740,13 +740,17 @@ type Version struct {
// The unstable version is used to migrate during development.
// Users of stable, public releases will only use binaries
// with unstable set to 0.
+ //
+ // TODO(irfansharif): We'll now use `unstable` to tack on long running
+ // migrations. Should we rename this to `intermediate` or something similar?
+ // We should at least motivate the purpose of this field a bit better.
Unstable int32 `protobuf:"varint,4,opt,name=unstable" json:"unstable"`
}
func (m *Version) Reset() { *m = Version{} }
func (*Version) ProtoMessage() {}
func (*Version) Descriptor() ([]byte, []int) {
- return fileDescriptor_metadata_0c98cdbced5f2e8b, []int{13}
+ return fileDescriptor_metadata_14f19853bcbb1128, []int{13}
}
func (m *Version) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4157,9 +4161,9 @@ var (
ErrIntOverflowMetadata = fmt.Errorf("proto: integer overflow")
)
-func init() { proto.RegisterFile("roachpb/metadata.proto", fileDescriptor_metadata_0c98cdbced5f2e8b) }
+func init() { proto.RegisterFile("roachpb/metadata.proto", fileDescriptor_metadata_14f19853bcbb1128) }
-var fileDescriptor_metadata_0c98cdbced5f2e8b = []byte{
+var fileDescriptor_metadata_14f19853bcbb1128 = []byte{
// 1427 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xcd, 0x6f, 0x1b, 0x45,
0x14, 0xf7, 0xda, 0xeb, 0xd8, 0x7e, 0xce, 0x87, 0x3d, 0x82, 0xd6, 0x32, 0xc2, 0x76, 0x0d, 0x15,
diff --git a/pkg/roachpb/metadata.proto b/pkg/roachpb/metadata.proto
index bf883bd9db90..1ce98a3de116 100644
--- a/pkg/roachpb/metadata.proto
+++ b/pkg/roachpb/metadata.proto
@@ -382,5 +382,9 @@ message Version {
// The unstable version is used to migrate during development.
// Users of stable, public releases will only use binaries
// with unstable set to 0.
+ //
+ // TODO(irfansharif): We'll now use `unstable` to tack on long running
+ // migrations. Should we rename this to `intermediate` or something similar?
+ // We should at least motivate the purpose of this field a bit better.
optional int32 unstable = 4 [(gogoproto.nullable) = false];
}
diff --git a/pkg/roachpb/method.go b/pkg/roachpb/method.go
index baaeb32cf080..b4ad0c37e274 100644
--- a/pkg/roachpb/method.go
+++ b/pkg/roachpb/method.go
@@ -158,6 +158,9 @@ const (
// VerifyProtectedTimestamp determines whether the specified protection record
// will be respected by this Range.
AdminVerifyProtectedTimestamp
+ // Migrate proactively forces a range to transition out of any legacy
+ // modes of operation.
+ Migrate
// NumMethods represents the total number of API methods.
NumMethods
)
diff --git a/pkg/roachpb/method_string.go b/pkg/roachpb/method_string.go
index 67c7b3157110..402d2d7e595a 100644
--- a/pkg/roachpb/method_string.go
+++ b/pkg/roachpb/method_string.go
@@ -52,12 +52,13 @@ func _() {
_ = x[Subsume-41]
_ = x[RangeStats-42]
_ = x[AdminVerifyProtectedTimestamp-43]
- _ = x[NumMethods-44]
+ _ = x[Migrate-44]
+ _ = x[NumMethods-45]
}
-const _Method_name = "GetPutConditionalPutIncrementDeleteDeleteRangeClearRangeRevertRangeScanReverseScanEndTxnAdminSplitAdminUnsplitAdminMergeAdminTransferLeaseAdminChangeReplicasAdminRelocateRangeHeartbeatTxnGCPushTxnRecoverTxnQueryTxnQueryIntentResolveIntentResolveIntentRangeMergeTruncateLogRequestLeaseTransferLeaseLeaseInfoComputeChecksumCheckConsistencyInitPutWriteBatchExportImportAdminScatterAddSSTableRecomputeStatsRefreshRefreshRangeSubsumeRangeStatsAdminVerifyProtectedTimestampNumMethods"
+const _Method_name = "GetPutConditionalPutIncrementDeleteDeleteRangeClearRangeRevertRangeScanReverseScanEndTxnAdminSplitAdminUnsplitAdminMergeAdminTransferLeaseAdminChangeReplicasAdminRelocateRangeHeartbeatTxnGCPushTxnRecoverTxnQueryTxnQueryIntentResolveIntentResolveIntentRangeMergeTruncateLogRequestLeaseTransferLeaseLeaseInfoComputeChecksumCheckConsistencyInitPutWriteBatchExportImportAdminScatterAddSSTableRecomputeStatsRefreshRefreshRangeSubsumeRangeStatsAdminVerifyProtectedTimestampMigrateNumMethods"
-var _Method_index = [...]uint16{0, 3, 6, 20, 29, 35, 46, 56, 67, 71, 82, 88, 98, 110, 120, 138, 157, 175, 187, 189, 196, 206, 214, 225, 238, 256, 261, 272, 284, 297, 306, 321, 337, 344, 354, 360, 366, 378, 388, 402, 409, 421, 428, 438, 467, 477}
+var _Method_index = [...]uint16{0, 3, 6, 20, 29, 35, 46, 56, 67, 71, 82, 88, 98, 110, 120, 138, 157, 175, 187, 189, 196, 206, 214, 225, 238, 256, 261, 272, 284, 297, 306, 321, 337, 344, 354, 360, 366, 378, 388, 402, 409, 421, 428, 438, 467, 474, 484}
func (i Method) String() string {
if i < 0 || i >= Method(len(_Method_index)-1) {
diff --git a/pkg/server/BUILD.bazel b/pkg/server/BUILD.bazel
index 02e6da7193df..42f9f631d6eb 100644
--- a/pkg/server/BUILD.bazel
+++ b/pkg/server/BUILD.bazel
@@ -66,6 +66,7 @@ go_library(
"//pkg/kv/kvserver/protectedts/ptprovider",
"//pkg/kv/kvserver/protectedts/ptreconcile",
"//pkg/kv/kvserver/reports",
+ "//pkg/migration",
"//pkg/roachpb",
"//pkg/rpc",
"//pkg/rpc/nodedialer",
diff --git a/pkg/server/admin.go b/pkg/server/admin.go
index 668724b7f0a4..43efde88d86f 100644
--- a/pkg/server/admin.go
+++ b/pkg/server/admin.go
@@ -24,6 +24,7 @@ import (
"github.com/cockroachdb/apd/v2"
"github.com/cockroachdb/cockroach/pkg/base"
+ "github.com/cockroachdb/cockroach/pkg/clusterversion"
"github.com/cockroachdb/cockroach/pkg/config/zonepb"
"github.com/cockroachdb/cockroach/pkg/jobs/jobspb"
"github.com/cockroachdb/cockroach/pkg/keys"
@@ -51,8 +52,11 @@ import (
"github.com/cockroachdb/cockroach/pkg/util/log"
"github.com/cockroachdb/cockroach/pkg/util/mon"
"github.com/cockroachdb/cockroach/pkg/util/protoutil"
+ "github.com/cockroachdb/cockroach/pkg/util/syncutil"
"github.com/cockroachdb/cockroach/pkg/util/uuid"
"github.com/cockroachdb/errors"
+ "github.com/cockroachdb/logtags"
+ "github.com/cockroachdb/redact"
gwruntime "github.com/grpc-ecosystem/grpc-gateway/runtime"
gwutil "github.com/grpc-ecosystem/grpc-gateway/utilities"
"google.golang.org/grpc"
@@ -95,6 +99,8 @@ type adminServer struct {
*adminPrivilegeChecker
server *Server
memMonitor *mon.BytesMonitor
+
+ everyNodeMu syncutil.Mutex
}
// noteworthyAdminMemoryUsageBytes is the minimum size tracked by the
@@ -1747,6 +1753,103 @@ func (s *adminServer) Decommission(
return s.DecommissionStatus(ctx, &serverpb.DecommissionStatusRequest{NodeIDs: nodeIDs})
}
+// EveryNode is an RPC that powers the long running migrations infrastructure,
+// and lets callers define and execute arbitrary commands across every node in
+// the cluster.
+func (s *adminServer) EveryNode(
+ ctx context.Context, req *serverpb.EveryNodeRequest,
+) (*serverpb.EveryNodeResponse, error) {
+ op := req.Request.GetInner()
+ ctx = logtags.AddTag(ctx, "every-node", redact.Safe(op.Op()))
+
+ switch op.(type) {
+ case *serverpb.ValidateTargetClusterVersionRequest:
+ valReq := req.Request.GetValidateTargetVersion()
+ targetVersion := *valReq.Version
+ versionSetting := s.server.ClusterSettings().Version
+
+ // We're validating the following:
+ //
+ // node's minimum supported version <= target version <= node's binary version
+ if targetVersion.Less(versionSetting.BinaryMinSupportedVersion()) {
+ msg := fmt.Sprintf("target version %s less than binary's min supported version %s",
+ targetVersion, versionSetting.BinaryMinSupportedVersion())
+ log.Warningf(ctx, "%s", msg)
+ return nil, errors.Newf("%s", redact.Safe(msg))
+ }
+
+ if versionSetting.BinaryVersion().Less(targetVersion) {
+ msg := fmt.Sprintf("binary version %s less than target version %s",
+ versionSetting.BinaryVersion(), targetVersion)
+ log.Warningf(ctx, "%s", msg)
+ return nil, errors.Newf("%s", redact.Safe(msg))
+ }
+
+ valResp := &serverpb.ValidateTargetClusterVersionResponse{}
+ resp := &serverpb.EveryNodeResponse{}
+ resp.Response.SetInner(valResp)
+ return resp, nil
+ case *serverpb.AckClusterVersionRequest:
+ versionSetting := s.server.ClusterSettings().Version
+ prevCV, err := kvserver.SynthesizeClusterVersionFromEngines(
+ ctx, s.server.engines, versionSetting.BinaryVersion(),
+ versionSetting.BinaryMinSupportedVersion(),
+ )
+ if err != nil {
+ return nil, err
+ }
+
+ ackReq := req.Request.GetAckClusterVersion()
+ newCV := clusterversion.ClusterVersion{Version: *ackReq.Version}
+ log.Infof(ctx, "received args=%s, prev=%s", newCV, prevCV)
+
+ if err := func() error {
+ if !prevCV.Version.Less(*ackReq.Version) {
+ // Nothing to do.
+ return nil
+ }
+
+ s.everyNodeMu.Lock()
+ defer s.everyNodeMu.Unlock()
+
+ // TODO(irfansharif): We should probably capture this pattern of
+ // "persist the cluster version first" and only then bump the
+ // version setting in a better way.
+
+ // Whenever the version changes, we want to persist that update to
+ // wherever the CRDB process retrieved the initial version from
+ // (typically a collection of storage.Engines).
+ if err := kvserver.WriteClusterVersionToEngines(ctx, s.server.engines, newCV); err != nil {
+ return err
+ }
+
+ // We bump the local version gate here.
+ //
+ // NB: On 21.1 nodes we no longer use gossip to propagate cluster
+ // version bumps. We'll still disseminate it through gossip, but the
+ // actual (local) setting update happens here.
+ //
+ // TODO(irfansharif): We should stop disseminating cluster version
+ // bumps through gossip after 21.1 is cut. There will be no one
+ // listening in on it.
+ if err := s.server.ClusterSettings().Version.SetActiveVersion(ctx, newCV); err != nil {
+ return err
+ }
+ log.Infof(ctx, "active cluster version setting is now %s (up from %s)", newCV, prevCV)
+ return nil
+ }(); err != nil {
+ return nil, err
+ }
+
+ ackResp := &serverpb.AckClusterVersionResponse{}
+ resp := &serverpb.EveryNodeResponse{}
+ resp.Response.SetInner(ackResp)
+ return resp, nil
+ default:
+ return nil, errors.Newf("unrecognized op=%s", op.Op())
+ }
+}
+
// DataDistribution returns a count of replicas on each node for each table.
func (s *adminServer) DataDistribution(
ctx context.Context, req *serverpb.DataDistributionRequest,
diff --git a/pkg/server/init.go b/pkg/server/init.go
index f915b81f7657..b702d664bbaa 100644
--- a/pkg/server/init.go
+++ b/pkg/server/init.go
@@ -251,11 +251,15 @@ func (s *initServer) ServeAndWait(
// version will be the bootstrap version (aka the binary version[1]),
// but the version setting does not know yet (it was initialized as
// BinaryMinSupportedVersion because the engines were all
- // uninitialized). We *could* just let the server start, and it
- // would populate system.settings, which is then gossiped, and then
- // the callback would update the version, but we take this shortcut
- // to avoid having every freshly bootstrapped cluster spend time at
- // an old cluster version.
+ // uninitialized). Given that the bootstrap version was persisted to
+ // all the engines, it's now safe for us to bump the version setting
+ // itself and start operating at the latest cluster version.
+ //
+ // TODO(irfansharif): We're calling Initialize a second time here.
+ // There's no real reason to anymore, we can use
+ // SetActiveClusterVersion instead. This will let us make
+ // `Initialize` a bit stricter, which is a nice simplification to
+ // have.
//
// [1]: See the top-level comment in pkg/clusterversion to make
// sense of the many versions of ...versions.
@@ -265,6 +269,7 @@ func (s *initServer) ServeAndWait(
log.Infof(ctx, "cluster %s has been created", state.clusterID)
log.Infof(ctx, "allocated node ID: n%d (for self)", state.nodeID)
+ log.Infof(ctx, "active cluster version: %s", state.clusterVersion)
s.mu.Lock()
s.mu.inspectState.clusterID = state.clusterID
@@ -303,13 +308,9 @@ func (s *initServer) ServeAndWait(
state := result.state
- // TODO(irfansharif): We can try and initialize the the version
- // setting to the active cluster version, in the same way we do when
- // bootstrapping. We'd need to persis the cluster version to the
- // engines here if we're looking to do so.
-
log.Infof(ctx, "joined cluster %s through join rpc", state.clusterID)
log.Infof(ctx, "received node ID %d", state.nodeID)
+ log.Infof(ctx, "active cluster version: %s", state.clusterVersion)
s.mu.Lock()
s.mu.inspectState.clusterID = state.clusterID
diff --git a/pkg/server/server.go b/pkg/server/server.go
index 16a6c6bd30d4..335294dd0493 100644
--- a/pkg/server/server.go
+++ b/pkg/server/server.go
@@ -76,7 +76,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/util/protoutil"
"github.com/cockroachdb/cockroach/pkg/util/retry"
"github.com/cockroachdb/cockroach/pkg/util/stop"
- "github.com/cockroachdb/cockroach/pkg/util/syncutil"
"github.com/cockroachdb/cockroach/pkg/util/timeutil"
"github.com/cockroachdb/cockroach/pkg/util/tracing"
"github.com/cockroachdb/cockroach/pkg/util/uuid"
@@ -1136,81 +1135,48 @@ func (s *Server) PreStart(ctx context.Context) error {
}
}
+ initialDiskClusterVersion := initServer.DiskClusterVersion()
{
- // Set up the callback that persists gossiped version bumps to the
- // engines. The invariant we uphold here is that the bump needs to be
+ // The invariant we uphold here is that any version bump needs to be
// persisted on all engines before it becomes "visible" to the version
- // setting. To this end,
+ // setting. To this end, we:
//
- // a) make sure Gossip is not started yet, and
- // b) set up the BeforeChange callback on the version setting to persist
- // incoming updates to all engines.
- // c) write back the disk-loaded cluster version to all engines,
- // d) initialize the version setting (with the disk-loaded version).
+ // a) write back the disk-loaded cluster version to all engines,
+ // b) initialize the version setting (using the disk-loaded version).
//
// Note that "all engines" means "all engines", not "all initialized
// engines". We cannot initialize engines this early in the boot
// sequence.
- s.gossip.AssertNotStarted(ctx)
-
- // Serialize the callback through a mutex to make sure we're not
- // clobbering the disk state if callback gets fired off concurrently.
- var mu syncutil.Mutex
- cb := func(ctx context.Context, newCV clusterversion.ClusterVersion) {
- mu.Lock()
- defer mu.Unlock()
- v := s.cfg.Settings.Version
- prevCV, err := kvserver.SynthesizeClusterVersionFromEngines(
- ctx, s.engines, v.BinaryVersion(), v.BinaryMinSupportedVersion(),
- )
- if err != nil {
- log.Fatalf(ctx, "%v", err)
- }
- if !prevCV.Version.Less(newCV.Version) {
- // If nothing needs to be updated, don't do anything. The
- // callbacks fire async (or at least we want to assume the worst
- // case in which they do) and so an old update might happen
- // after a new one.
- return
- }
- if err := kvserver.WriteClusterVersionToEngines(ctx, s.engines, newCV); err != nil {
- log.Fatalf(ctx, "%v", err)
- }
- log.Infof(ctx, "active cluster version is now %s (up from %s)", newCV, prevCV)
- }
- clusterversion.SetBeforeChange(ctx, &s.cfg.Settings.SV, cb)
-
- diskClusterVersion := initServer.DiskClusterVersion()
+ //
// The version setting loaded from disk is the maximum cluster version
// seen on any engine. If new stores are being added to the server right
// now, or if the process crashed earlier half-way through the callback,
// that version won't be on all engines. For that reason, we backfill
// once.
if err := kvserver.WriteClusterVersionToEngines(
- ctx, s.engines, diskClusterVersion,
+ ctx, s.engines, initialDiskClusterVersion,
); err != nil {
return err
}
- // NB: if we bootstrap a new server (in initServer.ServeAndWait below)
- // we will call Initialize a second time, to eagerly move it to the
- // bootstrap version (from the min supported version). Initialize()
- // tolerates that. Note that in that case we know that the callback
- // has not fired yet, since Gossip won't connect (to itself) until
- // the server starts and so the callback will never fire prior to
- // that second Initialize() call. Note also that at this point in
- // the code we don't know if we'll bootstrap or join an existing
- // cluster, so we have to conservatively go with the version from
- // disk, which in the case of no initialized engines is the binary
- // min supported version.
- if err := clusterversion.Initialize(ctx, diskClusterVersion.Version, &s.cfg.Settings.SV); err != nil {
+ // Note that at this point in the code we don't know if we'll bootstrap
+ // or join an existing cluster, so we have to conservatively go with the
+ // version from disk. If there are no initialized engines, this is the
+ // binary min supported version.
+ if err := clusterversion.Initialize(ctx, initialDiskClusterVersion.Version, &s.cfg.Settings.SV); err != nil {
return err
}
// At this point, we've established the invariant: all engines hold the
- // version currently visible to the setting. And we have the callback in
- // place that will persist an incoming updated version on all engines
- // before making it visible to the setting.
+ // version currently visible to the setting. Going forward whenever we
+ // set an active cluster version (`SetActiveClusterVersion`), we'll
+ // persist it to all the engines first (`WriteClusterVersionToEngines`).
+ // This happens at two places:
+ //
+ // - Right below, if we learn that we're the bootstrapping node, given
+ // we'll be setting the active cluster version as the binary version.
+ // - Within the EveryNode RPC, when we're informed by another node what
+ // our new active cluster version should be.
}
serverpb.RegisterInitServer(s.grpc.Server, initServer)
@@ -1415,6 +1381,27 @@ func (s *Server) PreStart(ctx context.Context) error {
return errors.Wrap(err, "during init")
}
+ if state.clusterVersion != initialDiskClusterVersion {
+ // We just learned about a cluster version different from the one we
+ // found on/synthesized from disk. This indicates that we're either the
+ // bootstrapping node (and are using the binary version as the cluster
+ // version), or we're joining an existing cluster that just informed us
+ // to activate the given cluster version.
+ //
+ // Either way, we'll do so by first persisting the cluster version
+ // itself, and then informing the version setting about it (an invariant
+ // we must up hold whenever setting a new active version).
+ if err := kvserver.WriteClusterVersionToEngines(
+ ctx, s.engines, state.clusterVersion,
+ ); err != nil {
+ return err
+ }
+
+ if err := s.ClusterSettings().Version.SetActiveVersion(ctx, state.clusterVersion); err != nil {
+ return err
+ }
+ }
+
s.rpcContext.ClusterID.Set(ctx, state.clusterID)
// If there's no NodeID here, then we didn't just bootstrap. The Node will
// read its ID from the stores or request a new one via KV.
@@ -1566,6 +1553,7 @@ func (s *Server) PreStart(ctx context.Context) error {
}
s.replicationReporter.Start(ctx, s.stopper)
+ // Listen in on the gossip for changes to cluster settings.
s.refreshSettings()
sentry.ConfigureScope(func(scope *sentry.Scope) {
diff --git a/pkg/server/server_sql.go b/pkg/server/server_sql.go
index 6a9d39378cab..dafb9cfbf1a6 100644
--- a/pkg/server/server_sql.go
+++ b/pkg/server/server_sql.go
@@ -32,6 +32,7 @@ import (
"github.com/cockroachdb/cockroach/pkg/kv/kvclient/kvtenant"
"github.com/cockroachdb/cockroach/pkg/kv/kvserver/kvserverbase"
"github.com/cockroachdb/cockroach/pkg/kv/kvserver/protectedts"
+ "github.com/cockroachdb/cockroach/pkg/migration"
"github.com/cockroachdb/cockroach/pkg/roachpb"
"github.com/cockroachdb/cockroach/pkg/rpc"
"github.com/cockroachdb/cockroach/pkg/rpc/nodedialer"
@@ -110,7 +111,8 @@ type sqlServer struct {
type sqlServerOptionalKVArgs struct {
// nodesStatusServer gives access to the NodesStatus service.
nodesStatusServer serverpb.OptionalNodesStatusServer
- // Narrowed down version of *NodeLiveness. Used by jobs and DistSQLPlanner
+ // Narrowed down version of *NodeLiveness. Used by jobs, DistSQLPlanner, and
+ // migration manager.
nodeLiveness optionalnodeliveness.Container
// Gossip is relied upon by distSQLCfg (execinfra.ServerConfig), the executor
// config, the DistSQL planner, the table statistics cache, the statements
@@ -424,8 +426,9 @@ func newSQLServer(ctx context.Context, cfg sqlServerArgs) (*sqlServer, error) {
}
var isLive func(roachpb.NodeID) (bool, error)
- if nl, ok := cfg.nodeLiveness.Optional(47900); ok {
- isLive = nl.IsLive
+ nodeLiveness, ok := cfg.nodeLiveness.Optional(47900)
+ if ok {
+ isLive = nodeLiveness.IsLive
} else {
// We're on a SQL tenant, so this is the only node DistSQL will ever
// schedule on - always returning true is fine.
@@ -460,7 +463,6 @@ func newSQLServer(ctx context.Context, cfg sqlServerArgs) (*sqlServer, error) {
RangeDescriptorCache: cfg.distSender.RangeDescriptorCache(),
RoleMemberCache: &sql.MembershipCache{},
TestingKnobs: sqlExecutorTestingKnobs,
-
DistSQLPlanner: sql.NewDistSQLPlanner(
ctx,
execinfra.Version,
@@ -628,6 +630,28 @@ func newSQLServer(ctx context.Context, cfg sqlServerArgs) (*sqlServer, error) {
)
execCfg.StmtDiagnosticsRecorder = stmtDiagnosticsRegistry
+ // TODO(irfansharif): There surely must be a better way to figure out if
+ // we're a SQL server running as part of a KV node.
+ //
+ // TODO(irfansharif): We're introducing a new usage of NodeLiveness in the
+ // SQL layer here. Looks like we've soured on doing so as of #48795. Given
+ // we're only expecting to be using this in system tenant servers, is this
+ // still appropriate?
+ if nodeLiveness != nil {
+ // We only need to attach a version upgrade hook if we're the system
+ // tenant. Regular tenants are disallowed from changing cluster
+ // versions.
+ migrationMgr := migration.NewManager(
+ cfg.nodeDialer,
+ nodeLiveness,
+ cfg.circularInternalExecutor,
+ cfg.db,
+ )
+ execCfg.VersionUpgradeHook = func(ctx context.Context, targetV roachpb.Version) error {
+ return migrationMgr.MigrateTo(ctx, targetV)
+ }
+ }
+
temporaryObjectCleaner := sql.NewTemporaryObjectCleaner(
cfg.Settings,
cfg.db,
@@ -770,7 +794,7 @@ func (s *sqlServer) preStart(
return errors.Wrap(err, "ensuring SQL migrations")
}
- log.Infof(ctx, "done ensuring all necessary migrations have run")
+ log.Infof(ctx, "done ensuring all necessary startup migrations have run")
// Start the sqlLivenessProvider after we've run the SQL migrations that it
// relies on. Jobs used by sqlmigrations can't rely on having the
diff --git a/pkg/server/serverpb/BUILD.bazel b/pkg/server/serverpb/BUILD.bazel
index d16f33ebb0aa..363323fa7547 100644
--- a/pkg/server/serverpb/BUILD.bazel
+++ b/pkg/server/serverpb/BUILD.bazel
@@ -8,6 +8,8 @@ go_library(
"admin.pb.gw.go",
"authentication.pb.go",
"authentication.pb.gw.go",
+ "everynode.go",
+ "everynode_generated.go",
"init.pb.go",
"status.go",
"status.pb.go",
diff --git a/pkg/server/serverpb/admin.pb.go b/pkg/server/serverpb/admin.pb.go
index 2f08d8bf7509..8f2d19054013 100644
--- a/pkg/server/serverpb/admin.pb.go
+++ b/pkg/server/serverpb/admin.pb.go
@@ -9,6 +9,7 @@ import math "math"
import zonepb "github.com/cockroachdb/cockroach/pkg/config/zonepb"
import jobspb "github.com/cockroachdb/cockroach/pkg/jobs/jobspb"
import kvserverpb "github.com/cockroachdb/cockroach/pkg/kv/kvserver/kvserverpb"
+import roachpb "github.com/cockroachdb/cockroach/pkg/roachpb"
import enginepb "github.com/cockroachdb/cockroach/pkg/storage/enginepb"
import catalog "github.com/cockroachdb/cockroach/pkg/ts/catalog"
import metric "github.com/cockroachdb/cockroach/pkg/util/metric"
@@ -73,7 +74,7 @@ func (x ZoneConfigurationLevel) String() string {
return proto.EnumName(ZoneConfigurationLevel_name, int32(x))
}
func (ZoneConfigurationLevel) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{0}
}
// DatabasesRequest requests a list of databases.
@@ -84,7 +85,7 @@ func (m *DatabasesRequest) Reset() { *m = DatabasesRequest{} }
func (m *DatabasesRequest) String() string { return proto.CompactTextString(m) }
func (*DatabasesRequest) ProtoMessage() {}
func (*DatabasesRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{0}
}
func (m *DatabasesRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -118,7 +119,7 @@ func (m *DatabasesResponse) Reset() { *m = DatabasesResponse{} }
func (m *DatabasesResponse) String() string { return proto.CompactTextString(m) }
func (*DatabasesResponse) ProtoMessage() {}
func (*DatabasesResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{1}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{1}
}
func (m *DatabasesResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -154,7 +155,7 @@ func (m *DatabaseDetailsRequest) Reset() { *m = DatabaseDetailsRequest{}
func (m *DatabaseDetailsRequest) String() string { return proto.CompactTextString(m) }
func (*DatabaseDetailsRequest) ProtoMessage() {}
func (*DatabaseDetailsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{2}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{2}
}
func (m *DatabaseDetailsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -203,7 +204,7 @@ func (m *DatabaseDetailsResponse) Reset() { *m = DatabaseDetailsResponse
func (m *DatabaseDetailsResponse) String() string { return proto.CompactTextString(m) }
func (*DatabaseDetailsResponse) ProtoMessage() {}
func (*DatabaseDetailsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{3}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{3}
}
func (m *DatabaseDetailsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -239,7 +240,7 @@ func (m *DatabaseDetailsResponse_Grant) Reset() { *m = DatabaseDetailsRe
func (m *DatabaseDetailsResponse_Grant) String() string { return proto.CompactTextString(m) }
func (*DatabaseDetailsResponse_Grant) ProtoMessage() {}
func (*DatabaseDetailsResponse_Grant) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{3, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{3, 0}
}
func (m *DatabaseDetailsResponse_Grant) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -279,7 +280,7 @@ func (m *TableDetailsRequest) Reset() { *m = TableDetailsRequest{} }
func (m *TableDetailsRequest) String() string { return proto.CompactTextString(m) }
func (*TableDetailsRequest) ProtoMessage() {}
func (*TableDetailsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{4}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{4}
}
func (m *TableDetailsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -336,7 +337,7 @@ func (m *TableDetailsResponse) Reset() { *m = TableDetailsResponse{} }
func (m *TableDetailsResponse) String() string { return proto.CompactTextString(m) }
func (*TableDetailsResponse) ProtoMessage() {}
func (*TableDetailsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{5}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{5}
}
func (m *TableDetailsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -373,7 +374,7 @@ func (m *TableDetailsResponse_Grant) Reset() { *m = TableDetailsResponse
func (m *TableDetailsResponse_Grant) String() string { return proto.CompactTextString(m) }
func (*TableDetailsResponse_Grant) ProtoMessage() {}
func (*TableDetailsResponse_Grant) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{5, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{5, 0}
}
func (m *TableDetailsResponse_Grant) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -417,7 +418,7 @@ func (m *TableDetailsResponse_Column) Reset() { *m = TableDetailsRespons
func (m *TableDetailsResponse_Column) String() string { return proto.CompactTextString(m) }
func (*TableDetailsResponse_Column) ProtoMessage() {}
func (*TableDetailsResponse_Column) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{5, 1}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{5, 1}
}
func (m *TableDetailsResponse_Column) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -463,7 +464,7 @@ func (m *TableDetailsResponse_Index) Reset() { *m = TableDetailsResponse
func (m *TableDetailsResponse_Index) String() string { return proto.CompactTextString(m) }
func (*TableDetailsResponse_Index) ProtoMessage() {}
func (*TableDetailsResponse_Index) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{5, 2}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{5, 2}
}
func (m *TableDetailsResponse_Index) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -504,7 +505,7 @@ func (m *TableStatsRequest) Reset() { *m = TableStatsRequest{} }
func (m *TableStatsRequest) String() string { return proto.CompactTextString(m) }
func (*TableStatsRequest) ProtoMessage() {}
func (*TableStatsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{6}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{6}
}
func (m *TableStatsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -558,7 +559,7 @@ func (m *TableStatsResponse) Reset() { *m = TableStatsResponse{} }
func (m *TableStatsResponse) String() string { return proto.CompactTextString(m) }
func (*TableStatsResponse) ProtoMessage() {}
func (*TableStatsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{7}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{7}
}
func (m *TableStatsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -596,7 +597,7 @@ func (m *TableStatsResponse_MissingNode) Reset() { *m = TableStatsRespon
func (m *TableStatsResponse_MissingNode) String() string { return proto.CompactTextString(m) }
func (*TableStatsResponse_MissingNode) ProtoMessage() {}
func (*TableStatsResponse_MissingNode) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{7, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{7, 0}
}
func (m *TableStatsResponse_MissingNode) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -630,7 +631,7 @@ func (m *NonTableStatsRequest) Reset() { *m = NonTableStatsRequest{} }
func (m *NonTableStatsRequest) String() string { return proto.CompactTextString(m) }
func (*NonTableStatsRequest) ProtoMessage() {}
func (*NonTableStatsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{8}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{8}
}
func (m *NonTableStatsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -669,7 +670,7 @@ func (m *NonTableStatsResponse) Reset() { *m = NonTableStatsResponse{} }
func (m *NonTableStatsResponse) String() string { return proto.CompactTextString(m) }
func (*NonTableStatsResponse) ProtoMessage() {}
func (*NonTableStatsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{9}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{9}
}
func (m *NonTableStatsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -702,7 +703,7 @@ func (m *UsersRequest) Reset() { *m = UsersRequest{} }
func (m *UsersRequest) String() string { return proto.CompactTextString(m) }
func (*UsersRequest) ProtoMessage() {}
func (*UsersRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{10}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{10}
}
func (m *UsersRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -737,7 +738,7 @@ func (m *UsersResponse) Reset() { *m = UsersResponse{} }
func (m *UsersResponse) String() string { return proto.CompactTextString(m) }
func (*UsersResponse) ProtoMessage() {}
func (*UsersResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{11}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{11}
}
func (m *UsersResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -771,7 +772,7 @@ func (m *UsersResponse_User) Reset() { *m = UsersResponse_User{} }
func (m *UsersResponse_User) String() string { return proto.CompactTextString(m) }
func (*UsersResponse_User) ProtoMessage() {}
func (*UsersResponse_User) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{11, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{11, 0}
}
func (m *UsersResponse_User) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -818,7 +819,7 @@ func (m *EventsRequest) Reset() { *m = EventsRequest{} }
func (m *EventsRequest) String() string { return proto.CompactTextString(m) }
func (*EventsRequest) ProtoMessage() {}
func (*EventsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{12}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{12}
}
func (m *EventsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -853,7 +854,7 @@ func (m *EventsResponse) Reset() { *m = EventsResponse{} }
func (m *EventsResponse) String() string { return proto.CompactTextString(m) }
func (*EventsResponse) ProtoMessage() {}
func (*EventsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{13}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{13}
}
func (m *EventsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -898,7 +899,7 @@ func (m *EventsResponse_Event) Reset() { *m = EventsResponse_Event{} }
func (m *EventsResponse_Event) String() string { return proto.CompactTextString(m) }
func (*EventsResponse_Event) ProtoMessage() {}
func (*EventsResponse_Event) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{13, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{13, 0}
}
func (m *EventsResponse_Event) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -934,7 +935,7 @@ func (m *SetUIDataRequest) Reset() { *m = SetUIDataRequest{} }
func (m *SetUIDataRequest) String() string { return proto.CompactTextString(m) }
func (*SetUIDataRequest) ProtoMessage() {}
func (*SetUIDataRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{14}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{14}
}
func (m *SetUIDataRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -967,7 +968,7 @@ func (m *SetUIDataResponse) Reset() { *m = SetUIDataResponse{} }
func (m *SetUIDataResponse) String() string { return proto.CompactTextString(m) }
func (*SetUIDataResponse) ProtoMessage() {}
func (*SetUIDataResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{15}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{15}
}
func (m *SetUIDataResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1002,7 +1003,7 @@ func (m *GetUIDataRequest) Reset() { *m = GetUIDataRequest{} }
func (m *GetUIDataRequest) String() string { return proto.CompactTextString(m) }
func (*GetUIDataRequest) ProtoMessage() {}
func (*GetUIDataRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{16}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{16}
}
func (m *GetUIDataRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1039,7 +1040,7 @@ func (m *GetUIDataResponse) Reset() { *m = GetUIDataResponse{} }
func (m *GetUIDataResponse) String() string { return proto.CompactTextString(m) }
func (*GetUIDataResponse) ProtoMessage() {}
func (*GetUIDataResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{17}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{17}
}
func (m *GetUIDataResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1075,7 +1076,7 @@ func (m *GetUIDataResponse_Value) Reset() { *m = GetUIDataResponse_Value
func (m *GetUIDataResponse_Value) String() string { return proto.CompactTextString(m) }
func (*GetUIDataResponse_Value) ProtoMessage() {}
func (*GetUIDataResponse_Value) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{17, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{17, 0}
}
func (m *GetUIDataResponse_Value) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1108,7 +1109,7 @@ func (m *ClusterRequest) Reset() { *m = ClusterRequest{} }
func (m *ClusterRequest) String() string { return proto.CompactTextString(m) }
func (*ClusterRequest) ProtoMessage() {}
func (*ClusterRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{18}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{18}
}
func (m *ClusterRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1147,7 +1148,7 @@ func (m *ClusterResponse) Reset() { *m = ClusterResponse{} }
func (m *ClusterResponse) String() string { return proto.CompactTextString(m) }
func (*ClusterResponse) ProtoMessage() {}
func (*ClusterResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{19}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{19}
}
func (m *ClusterResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1195,7 +1196,7 @@ func (m *DrainRequest) Reset() { *m = DrainRequest{} }
func (m *DrainRequest) String() string { return proto.CompactTextString(m) }
func (*DrainRequest) ProtoMessage() {}
func (*DrainRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{20}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{20}
}
func (m *DrainRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1280,7 +1281,7 @@ func (m *DrainResponse) Reset() { *m = DrainResponse{} }
func (m *DrainResponse) String() string { return proto.CompactTextString(m) }
func (*DrainResponse) ProtoMessage() {}
func (*DrainResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{21}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{21}
}
func (m *DrainResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1315,7 +1316,7 @@ func (m *DecommissionStatusRequest) Reset() { *m = DecommissionStatusReq
func (m *DecommissionStatusRequest) String() string { return proto.CompactTextString(m) }
func (*DecommissionStatusRequest) ProtoMessage() {}
func (*DecommissionStatusRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{22}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{22}
}
func (m *DecommissionStatusRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1353,7 +1354,7 @@ func (m *DecommissionRequest) Reset() { *m = DecommissionRequest{} }
func (m *DecommissionRequest) String() string { return proto.CompactTextString(m) }
func (*DecommissionRequest) ProtoMessage() {}
func (*DecommissionRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{23}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{23}
}
func (m *DecommissionRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1388,7 +1389,7 @@ func (m *DecommissionStatusResponse) Reset() { *m = DecommissionStatusRe
func (m *DecommissionStatusResponse) String() string { return proto.CompactTextString(m) }
func (*DecommissionStatusResponse) ProtoMessage() {}
func (*DecommissionStatusResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{24}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{24}
}
func (m *DecommissionStatusResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1427,7 +1428,7 @@ func (m *DecommissionStatusResponse_Status) Reset() { *m = DecommissionS
func (m *DecommissionStatusResponse_Status) String() string { return proto.CompactTextString(m) }
func (*DecommissionStatusResponse_Status) ProtoMessage() {}
func (*DecommissionStatusResponse_Status) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{24, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{24, 0}
}
func (m *DecommissionStatusResponse_Status) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1452,6 +1453,522 @@ func (m *DecommissionStatusResponse_Status) XXX_DiscardUnknown() {
var xxx_messageInfo_DecommissionStatusResponse_Status proto.InternalMessageInfo
+// AckClusterVersionRequest is used to inform the target node of a cluster
+// version bump. The target node is responsible for durably persisting the
+// message and enabling the corresponding version gates.
+type AckClusterVersionRequest struct {
+ Version *roachpb.Version `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+}
+
+func (m *AckClusterVersionRequest) Reset() { *m = AckClusterVersionRequest{} }
+func (m *AckClusterVersionRequest) String() string { return proto.CompactTextString(m) }
+func (*AckClusterVersionRequest) ProtoMessage() {}
+func (*AckClusterVersionRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{25}
+}
+func (m *AckClusterVersionRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *AckClusterVersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ b = b[:cap(b)]
+ n, err := m.MarshalTo(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+}
+func (dst *AckClusterVersionRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AckClusterVersionRequest.Merge(dst, src)
+}
+func (m *AckClusterVersionRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *AckClusterVersionRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_AckClusterVersionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AckClusterVersionRequest proto.InternalMessageInfo
+
+// AckClusterVersionResponse is the response to an AckClusterVersionRequest.
+type AckClusterVersionResponse struct {
+}
+
+func (m *AckClusterVersionResponse) Reset() { *m = AckClusterVersionResponse{} }
+func (m *AckClusterVersionResponse) String() string { return proto.CompactTextString(m) }
+func (*AckClusterVersionResponse) ProtoMessage() {}
+func (*AckClusterVersionResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{26}
+}
+func (m *AckClusterVersionResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *AckClusterVersionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ b = b[:cap(b)]
+ n, err := m.MarshalTo(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+}
+func (dst *AckClusterVersionResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AckClusterVersionResponse.Merge(dst, src)
+}
+func (m *AckClusterVersionResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *AckClusterVersionResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_AckClusterVersionResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AckClusterVersionResponse proto.InternalMessageInfo
+
+// ValidateTargetClusterVersionRequest is used to verify that the target node is
+// running a binary that's able to support the specified cluster version.
+// Specifically:
+//
+// node's minimum supported version <= version <= node's binary version
+type ValidateTargetClusterVersionRequest struct {
+ Version *roachpb.Version `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+}
+
+func (m *ValidateTargetClusterVersionRequest) Reset() { *m = ValidateTargetClusterVersionRequest{} }
+func (m *ValidateTargetClusterVersionRequest) String() string { return proto.CompactTextString(m) }
+func (*ValidateTargetClusterVersionRequest) ProtoMessage() {}
+func (*ValidateTargetClusterVersionRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{27}
+}
+func (m *ValidateTargetClusterVersionRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *ValidateTargetClusterVersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ b = b[:cap(b)]
+ n, err := m.MarshalTo(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+}
+func (dst *ValidateTargetClusterVersionRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ValidateTargetClusterVersionRequest.Merge(dst, src)
+}
+func (m *ValidateTargetClusterVersionRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *ValidateTargetClusterVersionRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_ValidateTargetClusterVersionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ValidateTargetClusterVersionRequest proto.InternalMessageInfo
+
+// ValidateTargetClusterVersionResponse is the response to an
+// ValidateTargetClusterVersionRequest.
+type ValidateTargetClusterVersionResponse struct {
+}
+
+func (m *ValidateTargetClusterVersionResponse) Reset() { *m = ValidateTargetClusterVersionResponse{} }
+func (m *ValidateTargetClusterVersionResponse) String() string { return proto.CompactTextString(m) }
+func (*ValidateTargetClusterVersionResponse) ProtoMessage() {}
+func (*ValidateTargetClusterVersionResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{28}
+}
+func (m *ValidateTargetClusterVersionResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *ValidateTargetClusterVersionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ b = b[:cap(b)]
+ n, err := m.MarshalTo(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+}
+func (dst *ValidateTargetClusterVersionResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ValidateTargetClusterVersionResponse.Merge(dst, src)
+}
+func (m *ValidateTargetClusterVersionResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *ValidateTargetClusterVersionResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_ValidateTargetClusterVersionResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ValidateTargetClusterVersionResponse proto.InternalMessageInfo
+
+// An EveryNodeRequestUnion contains exactly one of the requests. The values
+// added here must match those in EveryNodeResponseUnion.
+type EveryNodeRequestUnion struct {
+ // Types that are valid to be assigned to Value:
+ // *EveryNodeRequestUnion_AckClusterVersion
+ // *EveryNodeRequestUnion_ValidateTargetVersion
+ Value isEveryNodeRequestUnion_Value `protobuf_oneof:"value"`
+}
+
+func (m *EveryNodeRequestUnion) Reset() { *m = EveryNodeRequestUnion{} }
+func (m *EveryNodeRequestUnion) String() string { return proto.CompactTextString(m) }
+func (*EveryNodeRequestUnion) ProtoMessage() {}
+func (*EveryNodeRequestUnion) Descriptor() ([]byte, []int) {
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{29}
+}
+func (m *EveryNodeRequestUnion) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *EveryNodeRequestUnion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ b = b[:cap(b)]
+ n, err := m.MarshalTo(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+}
+func (dst *EveryNodeRequestUnion) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_EveryNodeRequestUnion.Merge(dst, src)
+}
+func (m *EveryNodeRequestUnion) XXX_Size() int {
+ return m.Size()
+}
+func (m *EveryNodeRequestUnion) XXX_DiscardUnknown() {
+ xxx_messageInfo_EveryNodeRequestUnion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EveryNodeRequestUnion proto.InternalMessageInfo
+
+type isEveryNodeRequestUnion_Value interface {
+ isEveryNodeRequestUnion_Value()
+ MarshalTo([]byte) (int, error)
+ Size() int
+}
+
+type EveryNodeRequestUnion_AckClusterVersion struct {
+ AckClusterVersion *AckClusterVersionRequest `protobuf:"bytes,1,opt,name=ack_cluster_version,json=ackClusterVersion,proto3,oneof"`
+}
+type EveryNodeRequestUnion_ValidateTargetVersion struct {
+ ValidateTargetVersion *ValidateTargetClusterVersionRequest `protobuf:"bytes,2,opt,name=validate_target_version,json=validateTargetVersion,proto3,oneof"`
+}
+
+func (*EveryNodeRequestUnion_AckClusterVersion) isEveryNodeRequestUnion_Value() {}
+func (*EveryNodeRequestUnion_ValidateTargetVersion) isEveryNodeRequestUnion_Value() {}
+
+func (m *EveryNodeRequestUnion) GetValue() isEveryNodeRequestUnion_Value {
+ if m != nil {
+ return m.Value
+ }
+ return nil
+}
+
+func (m *EveryNodeRequestUnion) GetAckClusterVersion() *AckClusterVersionRequest {
+ if x, ok := m.GetValue().(*EveryNodeRequestUnion_AckClusterVersion); ok {
+ return x.AckClusterVersion
+ }
+ return nil
+}
+
+func (m *EveryNodeRequestUnion) GetValidateTargetVersion() *ValidateTargetClusterVersionRequest {
+ if x, ok := m.GetValue().(*EveryNodeRequestUnion_ValidateTargetVersion); ok {
+ return x.ValidateTargetVersion
+ }
+ return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*EveryNodeRequestUnion) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+ return _EveryNodeRequestUnion_OneofMarshaler, _EveryNodeRequestUnion_OneofUnmarshaler, _EveryNodeRequestUnion_OneofSizer, []interface{}{
+ (*EveryNodeRequestUnion_AckClusterVersion)(nil),
+ (*EveryNodeRequestUnion_ValidateTargetVersion)(nil),
+ }
+}
+
+func _EveryNodeRequestUnion_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+ m := msg.(*EveryNodeRequestUnion)
+ // value
+ switch x := m.Value.(type) {
+ case *EveryNodeRequestUnion_AckClusterVersion:
+ _ = b.EncodeVarint(1<<3 | proto.WireBytes)
+ if err := b.EncodeMessage(x.AckClusterVersion); err != nil {
+ return err
+ }
+ case *EveryNodeRequestUnion_ValidateTargetVersion:
+ _ = b.EncodeVarint(2<<3 | proto.WireBytes)
+ if err := b.EncodeMessage(x.ValidateTargetVersion); err != nil {
+ return err
+ }
+ case nil:
+ default:
+ return fmt.Errorf("EveryNodeRequestUnion.Value has unexpected type %T", x)
+ }
+ return nil
+}
+
+func _EveryNodeRequestUnion_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+ m := msg.(*EveryNodeRequestUnion)
+ switch tag {
+ case 1: // value.ack_cluster_version
+ if wire != proto.WireBytes {
+ return true, proto.ErrInternalBadWireType
+ }
+ msg := new(AckClusterVersionRequest)
+ err := b.DecodeMessage(msg)
+ m.Value = &EveryNodeRequestUnion_AckClusterVersion{msg}
+ return true, err
+ case 2: // value.validate_target_version
+ if wire != proto.WireBytes {
+ return true, proto.ErrInternalBadWireType
+ }
+ msg := new(ValidateTargetClusterVersionRequest)
+ err := b.DecodeMessage(msg)
+ m.Value = &EveryNodeRequestUnion_ValidateTargetVersion{msg}
+ return true, err
+ default:
+ return false, nil
+ }
+}
+
+func _EveryNodeRequestUnion_OneofSizer(msg proto.Message) (n int) {
+ m := msg.(*EveryNodeRequestUnion)
+ // value
+ switch x := m.Value.(type) {
+ case *EveryNodeRequestUnion_AckClusterVersion:
+ s := proto.Size(x.AckClusterVersion)
+ n += 1 // tag and wire
+ n += proto.SizeVarint(uint64(s))
+ n += s
+ case *EveryNodeRequestUnion_ValidateTargetVersion:
+ s := proto.Size(x.ValidateTargetVersion)
+ n += 1 // tag and wire
+ n += proto.SizeVarint(uint64(s))
+ n += s
+ case nil:
+ default:
+ panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+ }
+ return n
+}
+
+// An EveryNodeResponseUnion contains exactly one of the responses. The values
+// added here must match those in EveryNodeRequestUnion.
+type EveryNodeResponseUnion struct {
+ // Types that are valid to be assigned to Value:
+ // *EveryNodeResponseUnion_AckClusterVersion
+ // *EveryNodeResponseUnion_ValidateTargetVersion
+ Value isEveryNodeResponseUnion_Value `protobuf_oneof:"value"`
+}
+
+func (m *EveryNodeResponseUnion) Reset() { *m = EveryNodeResponseUnion{} }
+func (m *EveryNodeResponseUnion) String() string { return proto.CompactTextString(m) }
+func (*EveryNodeResponseUnion) ProtoMessage() {}
+func (*EveryNodeResponseUnion) Descriptor() ([]byte, []int) {
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{30}
+}
+func (m *EveryNodeResponseUnion) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *EveryNodeResponseUnion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ b = b[:cap(b)]
+ n, err := m.MarshalTo(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+}
+func (dst *EveryNodeResponseUnion) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_EveryNodeResponseUnion.Merge(dst, src)
+}
+func (m *EveryNodeResponseUnion) XXX_Size() int {
+ return m.Size()
+}
+func (m *EveryNodeResponseUnion) XXX_DiscardUnknown() {
+ xxx_messageInfo_EveryNodeResponseUnion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EveryNodeResponseUnion proto.InternalMessageInfo
+
+type isEveryNodeResponseUnion_Value interface {
+ isEveryNodeResponseUnion_Value()
+ MarshalTo([]byte) (int, error)
+ Size() int
+}
+
+type EveryNodeResponseUnion_AckClusterVersion struct {
+ AckClusterVersion *AckClusterVersionResponse `protobuf:"bytes,1,opt,name=ack_cluster_version,json=ackClusterVersion,proto3,oneof"`
+}
+type EveryNodeResponseUnion_ValidateTargetVersion struct {
+ ValidateTargetVersion *ValidateTargetClusterVersionResponse `protobuf:"bytes,2,opt,name=validate_target_version,json=validateTargetVersion,proto3,oneof"`
+}
+
+func (*EveryNodeResponseUnion_AckClusterVersion) isEveryNodeResponseUnion_Value() {}
+func (*EveryNodeResponseUnion_ValidateTargetVersion) isEveryNodeResponseUnion_Value() {}
+
+func (m *EveryNodeResponseUnion) GetValue() isEveryNodeResponseUnion_Value {
+ if m != nil {
+ return m.Value
+ }
+ return nil
+}
+
+func (m *EveryNodeResponseUnion) GetAckClusterVersion() *AckClusterVersionResponse {
+ if x, ok := m.GetValue().(*EveryNodeResponseUnion_AckClusterVersion); ok {
+ return x.AckClusterVersion
+ }
+ return nil
+}
+
+func (m *EveryNodeResponseUnion) GetValidateTargetVersion() *ValidateTargetClusterVersionResponse {
+ if x, ok := m.GetValue().(*EveryNodeResponseUnion_ValidateTargetVersion); ok {
+ return x.ValidateTargetVersion
+ }
+ return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*EveryNodeResponseUnion) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+ return _EveryNodeResponseUnion_OneofMarshaler, _EveryNodeResponseUnion_OneofUnmarshaler, _EveryNodeResponseUnion_OneofSizer, []interface{}{
+ (*EveryNodeResponseUnion_AckClusterVersion)(nil),
+ (*EveryNodeResponseUnion_ValidateTargetVersion)(nil),
+ }
+}
+
+func _EveryNodeResponseUnion_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+ m := msg.(*EveryNodeResponseUnion)
+ // value
+ switch x := m.Value.(type) {
+ case *EveryNodeResponseUnion_AckClusterVersion:
+ _ = b.EncodeVarint(1<<3 | proto.WireBytes)
+ if err := b.EncodeMessage(x.AckClusterVersion); err != nil {
+ return err
+ }
+ case *EveryNodeResponseUnion_ValidateTargetVersion:
+ _ = b.EncodeVarint(2<<3 | proto.WireBytes)
+ if err := b.EncodeMessage(x.ValidateTargetVersion); err != nil {
+ return err
+ }
+ case nil:
+ default:
+ return fmt.Errorf("EveryNodeResponseUnion.Value has unexpected type %T", x)
+ }
+ return nil
+}
+
+func _EveryNodeResponseUnion_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+ m := msg.(*EveryNodeResponseUnion)
+ switch tag {
+ case 1: // value.ack_cluster_version
+ if wire != proto.WireBytes {
+ return true, proto.ErrInternalBadWireType
+ }
+ msg := new(AckClusterVersionResponse)
+ err := b.DecodeMessage(msg)
+ m.Value = &EveryNodeResponseUnion_AckClusterVersion{msg}
+ return true, err
+ case 2: // value.validate_target_version
+ if wire != proto.WireBytes {
+ return true, proto.ErrInternalBadWireType
+ }
+ msg := new(ValidateTargetClusterVersionResponse)
+ err := b.DecodeMessage(msg)
+ m.Value = &EveryNodeResponseUnion_ValidateTargetVersion{msg}
+ return true, err
+ default:
+ return false, nil
+ }
+}
+
+func _EveryNodeResponseUnion_OneofSizer(msg proto.Message) (n int) {
+ m := msg.(*EveryNodeResponseUnion)
+ // value
+ switch x := m.Value.(type) {
+ case *EveryNodeResponseUnion_AckClusterVersion:
+ s := proto.Size(x.AckClusterVersion)
+ n += 1 // tag and wire
+ n += proto.SizeVarint(uint64(s))
+ n += s
+ case *EveryNodeResponseUnion_ValidateTargetVersion:
+ s := proto.Size(x.ValidateTargetVersion)
+ n += 1 // tag and wire
+ n += proto.SizeVarint(uint64(s))
+ n += s
+ case nil:
+ default:
+ panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+ }
+ return n
+}
+
+// An EveryNodeRequest contains a single request from the list defined in
+// EveryNodeRequestUnion. These requests will power the long running migrations
+// process where the orchestrator of these long running migrations may need to
+// run arbitrary operations across every node in the cluster (depending on the
+// specific migration being executed). One such example is the orchestrator
+// wanting to inform every node in the cluster that a certain cluster version is
+// now active, and that each node should enable the relevant version gates
+// corresponding to said version.
+//
+// TODO(irfansharif): Actually use these as outlined above.
+type EveryNodeRequest struct {
+ Request EveryNodeRequestUnion `protobuf:"bytes,1,opt,name=request,proto3" json:"request"`
+}
+
+func (m *EveryNodeRequest) Reset() { *m = EveryNodeRequest{} }
+func (m *EveryNodeRequest) String() string { return proto.CompactTextString(m) }
+func (*EveryNodeRequest) ProtoMessage() {}
+func (*EveryNodeRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{31}
+}
+func (m *EveryNodeRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *EveryNodeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ b = b[:cap(b)]
+ n, err := m.MarshalTo(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+}
+func (dst *EveryNodeRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_EveryNodeRequest.Merge(dst, src)
+}
+func (m *EveryNodeRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *EveryNodeRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_EveryNodeRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EveryNodeRequest proto.InternalMessageInfo
+
+// EveryNodeResponse is the response to an EveryNodeRequest.
+type EveryNodeResponse struct {
+ Response EveryNodeResponseUnion `protobuf:"bytes,1,opt,name=response,proto3" json:"response"`
+}
+
+func (m *EveryNodeResponse) Reset() { *m = EveryNodeResponse{} }
+func (m *EveryNodeResponse) String() string { return proto.CompactTextString(m) }
+func (*EveryNodeResponse) ProtoMessage() {}
+func (*EveryNodeResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{32}
+}
+func (m *EveryNodeResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *EveryNodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ b = b[:cap(b)]
+ n, err := m.MarshalTo(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+}
+func (dst *EveryNodeResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_EveryNodeResponse.Merge(dst, src)
+}
+func (m *EveryNodeResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *EveryNodeResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_EveryNodeResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EveryNodeResponse proto.InternalMessageInfo
+
// SettingsRequest inquires what are the current settings in the cluster.
type SettingsRequest struct {
// The array of setting names to retrieve.
@@ -1469,7 +1986,7 @@ func (m *SettingsRequest) Reset() { *m = SettingsRequest{} }
func (m *SettingsRequest) String() string { return proto.CompactTextString(m) }
func (*SettingsRequest) ProtoMessage() {}
func (*SettingsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{25}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{33}
}
func (m *SettingsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1503,7 +2020,7 @@ func (m *SettingsResponse) Reset() { *m = SettingsResponse{} }
func (m *SettingsResponse) String() string { return proto.CompactTextString(m) }
func (*SettingsResponse) ProtoMessage() {}
func (*SettingsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{26}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{34}
}
func (m *SettingsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1539,7 +2056,7 @@ func (m *SettingsResponse_Value) Reset() { *m = SettingsResponse_Value{}
func (m *SettingsResponse_Value) String() string { return proto.CompactTextString(m) }
func (*SettingsResponse_Value) ProtoMessage() {}
func (*SettingsResponse_Value) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{26, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{34, 0}
}
func (m *SettingsResponse_Value) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1592,7 +2109,7 @@ func (m *HealthRequest) Reset() { *m = HealthRequest{} }
func (m *HealthRequest) String() string { return proto.CompactTextString(m) }
func (*HealthRequest) ProtoMessage() {}
func (*HealthRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{27}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{35}
}
func (m *HealthRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1626,7 +2143,7 @@ func (m *HealthResponse) Reset() { *m = HealthResponse{} }
func (m *HealthResponse) String() string { return proto.CompactTextString(m) }
func (*HealthResponse) ProtoMessage() {}
func (*HealthResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{28}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{36}
}
func (m *HealthResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1659,7 +2176,7 @@ func (m *LivenessRequest) Reset() { *m = LivenessRequest{} }
func (m *LivenessRequest) String() string { return proto.CompactTextString(m) }
func (*LivenessRequest) ProtoMessage() {}
func (*LivenessRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{29}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{37}
}
func (m *LivenessRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1694,7 +2211,7 @@ func (m *LivenessResponse) Reset() { *m = LivenessResponse{} }
func (m *LivenessResponse) String() string { return proto.CompactTextString(m) }
func (*LivenessResponse) ProtoMessage() {}
func (*LivenessResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{30}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{38}
}
func (m *LivenessResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1730,7 +2247,7 @@ func (m *JobsRequest) Reset() { *m = JobsRequest{} }
func (m *JobsRequest) String() string { return proto.CompactTextString(m) }
func (*JobsRequest) ProtoMessage() {}
func (*JobsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{31}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{39}
}
func (m *JobsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1764,7 +2281,7 @@ func (m *JobsResponse) Reset() { *m = JobsResponse{} }
func (m *JobsResponse) String() string { return proto.CompactTextString(m) }
func (*JobsResponse) ProtoMessage() {}
func (*JobsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{32}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{40}
}
func (m *JobsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1817,7 +2334,7 @@ func (m *JobsResponse_Job) Reset() { *m = JobsResponse_Job{} }
func (m *JobsResponse_Job) String() string { return proto.CompactTextString(m) }
func (*JobsResponse_Job) ProtoMessage() {}
func (*JobsResponse_Job) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{32, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{40, 0}
}
func (m *JobsResponse_Job) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1850,7 +2367,7 @@ func (m *LocationsRequest) Reset() { *m = LocationsRequest{} }
func (m *LocationsRequest) String() string { return proto.CompactTextString(m) }
func (*LocationsRequest) ProtoMessage() {}
func (*LocationsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{33}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{41}
}
func (m *LocationsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1884,7 +2401,7 @@ func (m *LocationsResponse) Reset() { *m = LocationsResponse{} }
func (m *LocationsResponse) String() string { return proto.CompactTextString(m) }
func (*LocationsResponse) ProtoMessage() {}
func (*LocationsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{34}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{42}
}
func (m *LocationsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1920,7 +2437,7 @@ func (m *LocationsResponse_Location) Reset() { *m = LocationsResponse_Lo
func (m *LocationsResponse_Location) String() string { return proto.CompactTextString(m) }
func (*LocationsResponse_Location) ProtoMessage() {}
func (*LocationsResponse_Location) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{34, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{42, 0}
}
func (m *LocationsResponse_Location) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1962,7 +2479,7 @@ func (m *RangeLogRequest) Reset() { *m = RangeLogRequest{} }
func (m *RangeLogRequest) String() string { return proto.CompactTextString(m) }
func (*RangeLogRequest) ProtoMessage() {}
func (*RangeLogRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{35}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{43}
}
func (m *RangeLogRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1996,7 +2513,7 @@ func (m *RangeLogResponse) Reset() { *m = RangeLogResponse{} }
func (m *RangeLogResponse) String() string { return proto.CompactTextString(m) }
func (*RangeLogResponse) ProtoMessage() {}
func (*RangeLogResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{36}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{44}
}
func (m *RangeLogResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2036,7 +2553,7 @@ func (m *RangeLogResponse_PrettyInfo) Reset() { *m = RangeLogResponse_Pr
func (m *RangeLogResponse_PrettyInfo) String() string { return proto.CompactTextString(m) }
func (*RangeLogResponse_PrettyInfo) ProtoMessage() {}
func (*RangeLogResponse_PrettyInfo) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{36, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{44, 0}
}
func (m *RangeLogResponse_PrettyInfo) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2070,7 +2587,7 @@ func (m *RangeLogResponse_Event) Reset() { *m = RangeLogResponse_Event{}
func (m *RangeLogResponse_Event) String() string { return proto.CompactTextString(m) }
func (*RangeLogResponse_Event) ProtoMessage() {}
func (*RangeLogResponse_Event) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{36, 1}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{44, 1}
}
func (m *RangeLogResponse_Event) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2105,7 +2622,7 @@ func (m *QueryPlanRequest) Reset() { *m = QueryPlanRequest{} }
func (m *QueryPlanRequest) String() string { return proto.CompactTextString(m) }
func (*QueryPlanRequest) ProtoMessage() {}
func (*QueryPlanRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{37}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{45}
}
func (m *QueryPlanRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2140,7 +2657,7 @@ func (m *QueryPlanResponse) Reset() { *m = QueryPlanResponse{} }
func (m *QueryPlanResponse) String() string { return proto.CompactTextString(m) }
func (*QueryPlanResponse) ProtoMessage() {}
func (*QueryPlanResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{38}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{46}
}
func (m *QueryPlanResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2172,7 +2689,7 @@ func (m *DataDistributionRequest) Reset() { *m = DataDistributionRequest
func (m *DataDistributionRequest) String() string { return proto.CompactTextString(m) }
func (*DataDistributionRequest) ProtoMessage() {}
func (*DataDistributionRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{39}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{47}
}
func (m *DataDistributionRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2208,7 +2725,7 @@ func (m *DataDistributionResponse) Reset() { *m = DataDistributionRespon
func (m *DataDistributionResponse) String() string { return proto.CompactTextString(m) }
func (*DataDistributionResponse) ProtoMessage() {}
func (*DataDistributionResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{40}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{48}
}
func (m *DataDistributionResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2246,7 +2763,7 @@ func (m *DataDistributionResponse_ZoneConfig) Reset() { *m = DataDistrib
func (m *DataDistributionResponse_ZoneConfig) String() string { return proto.CompactTextString(m) }
func (*DataDistributionResponse_ZoneConfig) ProtoMessage() {}
func (*DataDistributionResponse_ZoneConfig) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{40, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{48, 0}
}
func (m *DataDistributionResponse_ZoneConfig) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2281,7 +2798,7 @@ func (m *DataDistributionResponse_TableInfo) Reset() { *m = DataDistribu
func (m *DataDistributionResponse_TableInfo) String() string { return proto.CompactTextString(m) }
func (*DataDistributionResponse_TableInfo) ProtoMessage() {}
func (*DataDistributionResponse_TableInfo) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{40, 1}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{48, 1}
}
func (m *DataDistributionResponse_TableInfo) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2315,7 +2832,7 @@ func (m *DataDistributionResponse_DatabaseInfo) Reset() { *m = DataDistr
func (m *DataDistributionResponse_DatabaseInfo) String() string { return proto.CompactTextString(m) }
func (*DataDistributionResponse_DatabaseInfo) ProtoMessage() {}
func (*DataDistributionResponse_DatabaseInfo) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{40, 2}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{48, 2}
}
func (m *DataDistributionResponse_DatabaseInfo) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2348,7 +2865,7 @@ func (m *MetricMetadataRequest) Reset() { *m = MetricMetadataRequest{} }
func (m *MetricMetadataRequest) String() string { return proto.CompactTextString(m) }
func (*MetricMetadataRequest) ProtoMessage() {}
func (*MetricMetadataRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{41}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{49}
}
func (m *MetricMetadataRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2382,7 +2899,7 @@ func (m *MetricMetadataResponse) Reset() { *m = MetricMetadataResponse{}
func (m *MetricMetadataResponse) String() string { return proto.CompactTextString(m) }
func (*MetricMetadataResponse) ProtoMessage() {}
func (*MetricMetadataResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{42}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{50}
}
func (m *MetricMetadataResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2425,7 +2942,7 @@ func (m *EnqueueRangeRequest) Reset() { *m = EnqueueRangeRequest{} }
func (m *EnqueueRangeRequest) String() string { return proto.CompactTextString(m) }
func (*EnqueueRangeRequest) ProtoMessage() {}
func (*EnqueueRangeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{43}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{51}
}
func (m *EnqueueRangeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2458,7 +2975,7 @@ func (m *EnqueueRangeResponse) Reset() { *m = EnqueueRangeResponse{} }
func (m *EnqueueRangeResponse) String() string { return proto.CompactTextString(m) }
func (*EnqueueRangeResponse) ProtoMessage() {}
func (*EnqueueRangeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{44}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{52}
}
func (m *EnqueueRangeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2495,7 +3012,7 @@ func (m *EnqueueRangeResponse_Details) Reset() { *m = EnqueueRangeRespon
func (m *EnqueueRangeResponse_Details) String() string { return proto.CompactTextString(m) }
func (*EnqueueRangeResponse_Details) ProtoMessage() {}
func (*EnqueueRangeResponse_Details) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{44, 0}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{52, 0}
}
func (m *EnqueueRangeResponse_Details) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2528,7 +3045,7 @@ func (m *ChartCatalogRequest) Reset() { *m = ChartCatalogRequest{} }
func (m *ChartCatalogRequest) String() string { return proto.CompactTextString(m) }
func (*ChartCatalogRequest) ProtoMessage() {}
func (*ChartCatalogRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{45}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{53}
}
func (m *ChartCatalogRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2562,7 +3079,7 @@ func (m *ChartCatalogResponse) Reset() { *m = ChartCatalogResponse{} }
func (m *ChartCatalogResponse) String() string { return proto.CompactTextString(m) }
func (*ChartCatalogResponse) ProtoMessage() {}
func (*ChartCatalogResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_admin_d35ae12d295a7e1d, []int{46}
+ return fileDescriptor_admin_504d7e693eb0ea14, []int{54}
}
func (m *ChartCatalogResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2624,6 +3141,14 @@ func init() {
proto.RegisterType((*DecommissionRequest)(nil), "cockroach.server.serverpb.DecommissionRequest")
proto.RegisterType((*DecommissionStatusResponse)(nil), "cockroach.server.serverpb.DecommissionStatusResponse")
proto.RegisterType((*DecommissionStatusResponse_Status)(nil), "cockroach.server.serverpb.DecommissionStatusResponse.Status")
+ proto.RegisterType((*AckClusterVersionRequest)(nil), "cockroach.server.serverpb.AckClusterVersionRequest")
+ proto.RegisterType((*AckClusterVersionResponse)(nil), "cockroach.server.serverpb.AckClusterVersionResponse")
+ proto.RegisterType((*ValidateTargetClusterVersionRequest)(nil), "cockroach.server.serverpb.ValidateTargetClusterVersionRequest")
+ proto.RegisterType((*ValidateTargetClusterVersionResponse)(nil), "cockroach.server.serverpb.ValidateTargetClusterVersionResponse")
+ proto.RegisterType((*EveryNodeRequestUnion)(nil), "cockroach.server.serverpb.EveryNodeRequestUnion")
+ proto.RegisterType((*EveryNodeResponseUnion)(nil), "cockroach.server.serverpb.EveryNodeResponseUnion")
+ proto.RegisterType((*EveryNodeRequest)(nil), "cockroach.server.serverpb.EveryNodeRequest")
+ proto.RegisterType((*EveryNodeResponse)(nil), "cockroach.server.serverpb.EveryNodeResponse")
proto.RegisterType((*SettingsRequest)(nil), "cockroach.server.serverpb.SettingsRequest")
proto.RegisterType((*SettingsResponse)(nil), "cockroach.server.serverpb.SettingsResponse")
proto.RegisterMapType((map[string]SettingsResponse_Value)(nil), "cockroach.server.serverpb.SettingsResponse.KeyValuesEntry")
@@ -2746,6 +3271,10 @@ type AdminClient interface {
// If this ever becomes exposed via HTTP, ensure that it performs
// authorization. See #42567.
Decommission(ctx context.Context, in *DecommissionRequest, opts ...grpc.CallOption) (*DecommissionStatusResponse, error)
+ // EveryNode is an RPC that powers the long running migrations infrastructure,
+ // and lets callers define and execute arbitrary commands across every node in
+ // the cluster. See comments above EveryNodeRequest for additional details.
+ EveryNode(ctx context.Context, in *EveryNodeRequest, opts ...grpc.CallOption) (*EveryNodeResponse, error)
// DecommissionStatus retrieves the decommissioning status of the specified nodes.
// If this ever becomes exposed via HTTP, ensure that it performs
// authorization. See #42567.
@@ -2966,6 +3495,15 @@ func (c *adminClient) Decommission(ctx context.Context, in *DecommissionRequest,
return out, nil
}
+func (c *adminClient) EveryNode(ctx context.Context, in *EveryNodeRequest, opts ...grpc.CallOption) (*EveryNodeResponse, error) {
+ out := new(EveryNodeResponse)
+ err := c.cc.Invoke(ctx, "/cockroach.server.serverpb.Admin/EveryNode", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *adminClient) DecommissionStatus(ctx context.Context, in *DecommissionStatusRequest, opts ...grpc.CallOption) (*DecommissionStatusResponse, error) {
out := new(DecommissionStatusResponse)
err := c.cc.Invoke(ctx, "/cockroach.server.serverpb.Admin/DecommissionStatus", in, out, opts...)
@@ -3091,6 +3629,10 @@ type AdminServer interface {
// If this ever becomes exposed via HTTP, ensure that it performs
// authorization. See #42567.
Decommission(context.Context, *DecommissionRequest) (*DecommissionStatusResponse, error)
+ // EveryNode is an RPC that powers the long running migrations infrastructure,
+ // and lets callers define and execute arbitrary commands across every node in
+ // the cluster. See comments above EveryNodeRequest for additional details.
+ EveryNode(context.Context, *EveryNodeRequest) (*EveryNodeResponse, error)
// DecommissionStatus retrieves the decommissioning status of the specified nodes.
// If this ever becomes exposed via HTTP, ensure that it performs
// authorization. See #42567.
@@ -3449,6 +3991,24 @@ func _Admin_Decommission_Handler(srv interface{}, ctx context.Context, dec func(
return interceptor(ctx, in, info, handler)
}
+func _Admin_EveryNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(EveryNodeRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(AdminServer).EveryNode(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cockroach.server.serverpb.Admin/EveryNode",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(AdminServer).EveryNode(ctx, req.(*EveryNodeRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _Admin_DecommissionStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DecommissionStatusRequest)
if err := dec(in); err != nil {
@@ -3629,6 +4189,10 @@ var _Admin_serviceDesc = grpc.ServiceDesc{
MethodName: "Decommission",
Handler: _Admin_Decommission_Handler,
},
+ {
+ MethodName: "EveryNode",
+ Handler: _Admin_EveryNode_Handler,
+ },
{
MethodName: "DecommissionStatus",
Handler: _Admin_DecommissionStatus_Handler,
@@ -4995,7 +5559,7 @@ func (m *DecommissionStatusResponse_Status) MarshalTo(dAtA []byte) (int, error)
return i, nil
}
-func (m *SettingsRequest) Marshal() (dAtA []byte, err error) {
+func (m *AckClusterVersionRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
@@ -5005,35 +5569,285 @@ func (m *SettingsRequest) Marshal() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *SettingsRequest) MarshalTo(dAtA []byte) (int, error) {
+func (m *AckClusterVersionRequest) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
- if len(m.Keys) > 0 {
- for _, s := range m.Keys {
- dAtA[i] = 0xa
- i++
- l = len(s)
- for l >= 1<<7 {
- dAtA[i] = uint8(uint64(l)&0x7f | 0x80)
- l >>= 7
- i++
- }
- dAtA[i] = uint8(l)
- i++
- i += copy(dAtA[i:], s)
- }
- }
- if m.UnredactedValues {
- dAtA[i] = 0x10
+ if m.Version != nil {
+ dAtA[i] = 0xa
i++
- if m.UnredactedValues {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
+ i = encodeVarintAdmin(dAtA, i, uint64(m.Version.Size()))
+ n15, err := m.Version.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
}
- i++
+ i += n15
+ }
+ return i, nil
+}
+
+func (m *AckClusterVersionResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *AckClusterVersionResponse) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ return i, nil
+}
+
+func (m *ValidateTargetClusterVersionRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *ValidateTargetClusterVersionRequest) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ if m.Version != nil {
+ dAtA[i] = 0xa
+ i++
+ i = encodeVarintAdmin(dAtA, i, uint64(m.Version.Size()))
+ n16, err := m.Version.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n16
+ }
+ return i, nil
+}
+
+func (m *ValidateTargetClusterVersionResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *ValidateTargetClusterVersionResponse) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ return i, nil
+}
+
+func (m *EveryNodeRequestUnion) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *EveryNodeRequestUnion) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ if m.Value != nil {
+ nn17, err := m.Value.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += nn17
+ }
+ return i, nil
+}
+
+func (m *EveryNodeRequestUnion_AckClusterVersion) MarshalTo(dAtA []byte) (int, error) {
+ i := 0
+ if m.AckClusterVersion != nil {
+ dAtA[i] = 0xa
+ i++
+ i = encodeVarintAdmin(dAtA, i, uint64(m.AckClusterVersion.Size()))
+ n18, err := m.AckClusterVersion.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n18
+ }
+ return i, nil
+}
+func (m *EveryNodeRequestUnion_ValidateTargetVersion) MarshalTo(dAtA []byte) (int, error) {
+ i := 0
+ if m.ValidateTargetVersion != nil {
+ dAtA[i] = 0x12
+ i++
+ i = encodeVarintAdmin(dAtA, i, uint64(m.ValidateTargetVersion.Size()))
+ n19, err := m.ValidateTargetVersion.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n19
+ }
+ return i, nil
+}
+func (m *EveryNodeResponseUnion) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *EveryNodeResponseUnion) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ if m.Value != nil {
+ nn20, err := m.Value.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += nn20
+ }
+ return i, nil
+}
+
+func (m *EveryNodeResponseUnion_AckClusterVersion) MarshalTo(dAtA []byte) (int, error) {
+ i := 0
+ if m.AckClusterVersion != nil {
+ dAtA[i] = 0xa
+ i++
+ i = encodeVarintAdmin(dAtA, i, uint64(m.AckClusterVersion.Size()))
+ n21, err := m.AckClusterVersion.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n21
+ }
+ return i, nil
+}
+func (m *EveryNodeResponseUnion_ValidateTargetVersion) MarshalTo(dAtA []byte) (int, error) {
+ i := 0
+ if m.ValidateTargetVersion != nil {
+ dAtA[i] = 0x12
+ i++
+ i = encodeVarintAdmin(dAtA, i, uint64(m.ValidateTargetVersion.Size()))
+ n22, err := m.ValidateTargetVersion.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n22
+ }
+ return i, nil
+}
+func (m *EveryNodeRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *EveryNodeRequest) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ dAtA[i] = 0xa
+ i++
+ i = encodeVarintAdmin(dAtA, i, uint64(m.Request.Size()))
+ n23, err := m.Request.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n23
+ return i, nil
+}
+
+func (m *EveryNodeResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *EveryNodeResponse) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ dAtA[i] = 0xa
+ i++
+ i = encodeVarintAdmin(dAtA, i, uint64(m.Response.Size()))
+ n24, err := m.Response.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n24
+ return i, nil
+}
+
+func (m *SettingsRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *SettingsRequest) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ if len(m.Keys) > 0 {
+ for _, s := range m.Keys {
+ dAtA[i] = 0xa
+ i++
+ l = len(s)
+ for l >= 1<<7 {
+ dAtA[i] = uint8(uint64(l)&0x7f | 0x80)
+ l >>= 7
+ i++
+ }
+ dAtA[i] = uint8(l)
+ i++
+ i += copy(dAtA[i:], s)
+ }
+ }
+ if m.UnredactedValues {
+ dAtA[i] = 0x10
+ i++
+ if m.UnredactedValues {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i++
}
return i, nil
}
@@ -5077,11 +5891,11 @@ func (m *SettingsResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintAdmin(dAtA, i, uint64((&v).Size()))
- n15, err := (&v).MarshalTo(dAtA[i:])
+ n25, err := (&v).MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n15
+ i += n25
}
}
return i, nil
@@ -5350,21 +6164,21 @@ func (m *JobsResponse_Job) MarshalTo(dAtA []byte) (int, error) {
i += copy(dAtA[i:], m.Username)
}
if len(m.DescriptorIDs) > 0 {
- dAtA17 := make([]byte, len(m.DescriptorIDs)*10)
- var j16 int
+ dAtA27 := make([]byte, len(m.DescriptorIDs)*10)
+ var j26 int
for _, num := range m.DescriptorIDs {
for num >= 1<<7 {
- dAtA17[j16] = uint8(uint64(num)&0x7f | 0x80)
+ dAtA27[j26] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
- j16++
+ j26++
}
- dAtA17[j16] = uint8(num)
- j16++
+ dAtA27[j26] = uint8(num)
+ j26++
}
dAtA[i] = 0x2a
i++
- i = encodeVarintAdmin(dAtA, i, uint64(j16))
- i += copy(dAtA[i:], dAtA17[:j16])
+ i = encodeVarintAdmin(dAtA, i, uint64(j26))
+ i += copy(dAtA[i:], dAtA27[:j26])
}
if len(m.Status) > 0 {
dAtA[i] = 0x32
@@ -5376,41 +6190,41 @@ func (m *JobsResponse_Job) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x3a
i++
i = encodeVarintAdmin(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.Created)))
- n18, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Created, dAtA[i:])
+ n28, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Created, dAtA[i:])
if err != nil {
return 0, err
}
- i += n18
+ i += n28
}
if m.Started != nil {
dAtA[i] = 0x42
i++
i = encodeVarintAdmin(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.Started)))
- n19, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Started, dAtA[i:])
+ n29, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Started, dAtA[i:])
if err != nil {
return 0, err
}
- i += n19
+ i += n29
}
if m.Finished != nil {
dAtA[i] = 0x4a
i++
i = encodeVarintAdmin(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.Finished)))
- n20, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Finished, dAtA[i:])
+ n30, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Finished, dAtA[i:])
if err != nil {
return 0, err
}
- i += n20
+ i += n30
}
if m.Modified != nil {
dAtA[i] = 0x52
i++
i = encodeVarintAdmin(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.Modified)))
- n21, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Modified, dAtA[i:])
+ n31, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Modified, dAtA[i:])
if err != nil {
return 0, err
}
- i += n21
+ i += n31
}
if m.FractionCompleted != 0 {
dAtA[i] = 0x5d
@@ -5428,11 +6242,11 @@ func (m *JobsResponse_Job) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x6a
i++
i = encodeVarintAdmin(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.HighwaterTimestamp)))
- n22, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.HighwaterTimestamp, dAtA[i:])
+ n32, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.HighwaterTimestamp, dAtA[i:])
if err != nil {
return 0, err
}
- i += n22
+ i += n32
}
if len(m.HighwaterDecimal) > 0 {
dAtA[i] = 0x72
@@ -5677,19 +6491,19 @@ func (m *RangeLogResponse_Event) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintAdmin(dAtA, i, uint64(m.Event.Size()))
- n23, err := m.Event.MarshalTo(dAtA[i:])
+ n33, err := m.Event.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n23
+ i += n33
dAtA[i] = 0x12
i++
i = encodeVarintAdmin(dAtA, i, uint64(m.PrettyInfo.Size()))
- n24, err := m.PrettyInfo.MarshalTo(dAtA[i:])
+ n34, err := m.PrettyInfo.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n24
+ i += n34
return i, nil
}
@@ -5798,11 +6612,11 @@ func (m *DataDistributionResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintAdmin(dAtA, i, uint64((&v).Size()))
- n25, err := (&v).MarshalTo(dAtA[i:])
+ n35, err := (&v).MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n25
+ i += n35
}
}
if len(m.ZoneConfigs) > 0 {
@@ -5829,11 +6643,11 @@ func (m *DataDistributionResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintAdmin(dAtA, i, uint64((&v).Size()))
- n26, err := (&v).MarshalTo(dAtA[i:])
+ n36, err := (&v).MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n26
+ i += n36
}
}
return i, nil
@@ -5863,11 +6677,11 @@ func (m *DataDistributionResponse_ZoneConfig) MarshalTo(dAtA []byte) (int, error
dAtA[i] = 0x12
i++
i = encodeVarintAdmin(dAtA, i, uint64(m.Config.Size()))
- n27, err := m.Config.MarshalTo(dAtA[i:])
+ n37, err := m.Config.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n27
+ i += n37
if len(m.ConfigSQL) > 0 {
dAtA[i] = 0x22
i++
@@ -5921,11 +6735,11 @@ func (m *DataDistributionResponse_TableInfo) MarshalTo(dAtA []byte) (int, error)
dAtA[i] = 0x1a
i++
i = encodeVarintAdmin(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.DroppedAt)))
- n28, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.DroppedAt, dAtA[i:])
+ n38, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.DroppedAt, dAtA[i:])
if err != nil {
return 0, err
}
- i += n28
+ i += n38
}
return i, nil
}
@@ -5969,11 +6783,11 @@ func (m *DataDistributionResponse_DatabaseInfo) MarshalTo(dAtA []byte) (int, err
dAtA[i] = 0x12
i++
i = encodeVarintAdmin(dAtA, i, uint64((&v).Size()))
- n29, err := (&v).MarshalTo(dAtA[i:])
+ n39, err := (&v).MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n29
+ i += n39
}
}
return i, nil
@@ -6036,11 +6850,11 @@ func (m *MetricMetadataResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintAdmin(dAtA, i, uint64((&v).Size()))
- n30, err := (&v).MarshalTo(dAtA[i:])
+ n40, err := (&v).MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n30
+ i += n40
}
}
return i, nil
@@ -6858,54 +7672,192 @@ func (m *DecommissionStatusResponse_Status) Size() (n int) {
return n
}
-func (m *SettingsRequest) Size() (n int) {
+func (m *AckClusterVersionRequest) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
- if len(m.Keys) > 0 {
- for _, s := range m.Keys {
- l = len(s)
- n += 1 + l + sovAdmin(uint64(l))
- }
- }
- if m.UnredactedValues {
- n += 2
+ if m.Version != nil {
+ l = m.Version.Size()
+ n += 1 + l + sovAdmin(uint64(l))
}
return n
}
-func (m *SettingsResponse) Size() (n int) {
+func (m *AckClusterVersionResponse) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
- if len(m.KeyValues) > 0 {
- for k, v := range m.KeyValues {
- _ = k
- _ = v
- l = v.Size()
- mapEntrySize := 1 + len(k) + sovAdmin(uint64(len(k))) + 1 + l + sovAdmin(uint64(l))
- n += mapEntrySize + 1 + sovAdmin(uint64(mapEntrySize))
- }
- }
return n
}
-func (m *SettingsResponse_Value) Size() (n int) {
+func (m *ValidateTargetClusterVersionRequest) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
- l = len(m.Value)
- if l > 0 {
- n += 1 + l + sovAdmin(uint64(l))
- }
- l = len(m.Type)
- if l > 0 {
+ if m.Version != nil {
+ l = m.Version.Size()
+ n += 1 + l + sovAdmin(uint64(l))
+ }
+ return n
+}
+
+func (m *ValidateTargetClusterVersionResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *EveryNodeRequestUnion) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Value != nil {
+ n += m.Value.Size()
+ }
+ return n
+}
+
+func (m *EveryNodeRequestUnion_AckClusterVersion) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.AckClusterVersion != nil {
+ l = m.AckClusterVersion.Size()
+ n += 1 + l + sovAdmin(uint64(l))
+ }
+ return n
+}
+func (m *EveryNodeRequestUnion_ValidateTargetVersion) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.ValidateTargetVersion != nil {
+ l = m.ValidateTargetVersion.Size()
+ n += 1 + l + sovAdmin(uint64(l))
+ }
+ return n
+}
+func (m *EveryNodeResponseUnion) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Value != nil {
+ n += m.Value.Size()
+ }
+ return n
+}
+
+func (m *EveryNodeResponseUnion_AckClusterVersion) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.AckClusterVersion != nil {
+ l = m.AckClusterVersion.Size()
+ n += 1 + l + sovAdmin(uint64(l))
+ }
+ return n
+}
+func (m *EveryNodeResponseUnion_ValidateTargetVersion) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.ValidateTargetVersion != nil {
+ l = m.ValidateTargetVersion.Size()
+ n += 1 + l + sovAdmin(uint64(l))
+ }
+ return n
+}
+func (m *EveryNodeRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Request.Size()
+ n += 1 + l + sovAdmin(uint64(l))
+ return n
+}
+
+func (m *EveryNodeResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Response.Size()
+ n += 1 + l + sovAdmin(uint64(l))
+ return n
+}
+
+func (m *SettingsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.Keys) > 0 {
+ for _, s := range m.Keys {
+ l = len(s)
+ n += 1 + l + sovAdmin(uint64(l))
+ }
+ }
+ if m.UnredactedValues {
+ n += 2
+ }
+ return n
+}
+
+func (m *SettingsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.KeyValues) > 0 {
+ for k, v := range m.KeyValues {
+ _ = k
+ _ = v
+ l = v.Size()
+ mapEntrySize := 1 + len(k) + sovAdmin(uint64(len(k))) + 1 + l + sovAdmin(uint64(l))
+ n += mapEntrySize + 1 + sovAdmin(uint64(mapEntrySize))
+ }
+ }
+ return n
+}
+
+func (m *SettingsResponse_Value) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Value)
+ if l > 0 {
+ n += 1 + l + sovAdmin(uint64(l))
+ }
+ l = len(m.Type)
+ if l > 0 {
n += 1 + l + sovAdmin(uint64(l))
}
l = len(m.Description)
@@ -11568,6 +12520,660 @@ func (m *DecommissionStatusResponse_Status) Unmarshal(dAtA []byte) error {
}
return nil
}
+func (m *AckClusterVersionRequest) Unmarshal(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 ErrIntOverflowAdmin
+ }
+ 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: AckClusterVersionRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: AckClusterVersionRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowAdmin
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Version == nil {
+ m.Version = &roachpb.Version{}
+ }
+ if err := m.Version.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipAdmin(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *AckClusterVersionResponse) Unmarshal(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 ErrIntOverflowAdmin
+ }
+ 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: AckClusterVersionResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: AckClusterVersionResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipAdmin(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ValidateTargetClusterVersionRequest) Unmarshal(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 ErrIntOverflowAdmin
+ }
+ 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: ValidateTargetClusterVersionRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ValidateTargetClusterVersionRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowAdmin
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Version == nil {
+ m.Version = &roachpb.Version{}
+ }
+ if err := m.Version.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipAdmin(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ValidateTargetClusterVersionResponse) Unmarshal(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 ErrIntOverflowAdmin
+ }
+ 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: ValidateTargetClusterVersionResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ValidateTargetClusterVersionResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipAdmin(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *EveryNodeRequestUnion) Unmarshal(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 ErrIntOverflowAdmin
+ }
+ 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: EveryNodeRequestUnion: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: EveryNodeRequestUnion: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AckClusterVersion", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowAdmin
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &AckClusterVersionRequest{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Value = &EveryNodeRequestUnion_AckClusterVersion{v}
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidateTargetVersion", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowAdmin
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &ValidateTargetClusterVersionRequest{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Value = &EveryNodeRequestUnion_ValidateTargetVersion{v}
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipAdmin(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *EveryNodeResponseUnion) Unmarshal(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 ErrIntOverflowAdmin
+ }
+ 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: EveryNodeResponseUnion: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: EveryNodeResponseUnion: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AckClusterVersion", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowAdmin
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &AckClusterVersionResponse{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Value = &EveryNodeResponseUnion_AckClusterVersion{v}
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidateTargetVersion", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowAdmin
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &ValidateTargetClusterVersionResponse{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Value = &EveryNodeResponseUnion_ValidateTargetVersion{v}
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipAdmin(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *EveryNodeRequest) Unmarshal(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 ErrIntOverflowAdmin
+ }
+ 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: EveryNodeRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: EveryNodeRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowAdmin
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.Request.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipAdmin(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *EveryNodeResponse) Unmarshal(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 ErrIntOverflowAdmin
+ }
+ 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: EveryNodeResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: EveryNodeResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Response", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowAdmin
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.Response.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipAdmin(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthAdmin
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func (m *SettingsRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@@ -15675,268 +17281,284 @@ var (
ErrIntOverflowAdmin = fmt.Errorf("proto: integer overflow")
)
-func init() { proto.RegisterFile("server/serverpb/admin.proto", fileDescriptor_admin_d35ae12d295a7e1d) }
-
-var fileDescriptor_admin_d35ae12d295a7e1d = []byte{
- // 4157 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3a, 0xcf, 0x73, 0x1b, 0xd7,
- 0x79, 0x5a, 0x80, 0xf8, 0xf5, 0x11, 0x20, 0xc1, 0x27, 0x8a, 0x02, 0x21, 0x85, 0xa0, 0x57, 0x51,
- 0x4c, 0xcb, 0x0e, 0x20, 0x51, 0xb2, 0x9d, 0xca, 0x76, 0x52, 0x82, 0xe0, 0x28, 0x90, 0x25, 0xd9,
- 0x5a, 0x4a, 0xf2, 0x44, 0xa9, 0xbd, 0x5d, 0x60, 0x9f, 0xc0, 0x0d, 0x17, 0xbb, 0xcb, 0xdd, 0x05,
- 0x65, 0xda, 0x4d, 0xa6, 0x49, 0xda, 0x4e, 0x0f, 0x9d, 0x8e, 0x9b, 0xf4, 0xe6, 0x53, 0x7b, 0x68,
- 0x0f, 0xbd, 0xd4, 0x39, 0xf6, 0xd0, 0xb3, 0xa7, 0x97, 0xa4, 0xd3, 0x76, 0x26, 0xbd, 0x30, 0x2d,
- 0xdd, 0x53, 0xfa, 0x1f, 0x74, 0xa6, 0xd3, 0xce, 0xfb, 0xb5, 0xfb, 0x00, 0x42, 0x4b, 0x80, 0x8a,
- 0x73, 0x01, 0xf6, 0x7d, 0xdf, 0x7b, 0xdf, 0xfb, 0xde, 0xf7, 0xbe, 0xf7, 0xfd, 0x7a, 0x0f, 0x2e,
- 0x04, 0xd8, 0xdf, 0xc7, 0x7e, 0x83, 0xfd, 0x79, 0x9d, 0x86, 0x61, 0xf6, 0x2d, 0xa7, 0xee, 0xf9,
- 0x6e, 0xe8, 0xa2, 0xe5, 0xae, 0xdb, 0xdd, 0xf5, 0x5d, 0xa3, 0xbb, 0x53, 0x67, 0xf8, 0xba, 0xe8,
- 0x56, 0xad, 0x74, 0x5d, 0xe7, 0x89, 0xd5, 0x6b, 0x7c, 0xe4, 0x3a, 0xd8, 0xeb, 0xd0, 0x3f, 0x36,
- 0xa8, 0xba, 0xf4, 0x3d, 0xb7, 0x13, 0x34, 0xc8, 0x8f, 0xd7, 0xa1, 0x7f, 0x1c, 0x7e, 0x71, 0x74,
- 0xa6, 0x20, 0x34, 0xc2, 0x81, 0xc0, 0x5e, 0x08, 0x42, 0xd7, 0x37, 0x7a, 0xb8, 0x81, 0x9d, 0x9e,
- 0x45, 0x49, 0xf6, 0xf7, 0xbb, 0x5d, 0x8e, 0xbc, 0xbc, 0xbb, 0xdf, 0xd8, 0xdd, 0xe7, 0xe3, 0xc5,
- 0x87, 0xd7, 0x69, 0xd8, 0xd6, 0x3e, 0x76, 0x70, 0x20, 0x68, 0xac, 0x3e, 0xab, 0x9b, 0xdb, 0xe3,
- 0x3d, 0x56, 0xc2, 0xa0, 0xd1, 0x35, 0x42, 0xc3, 0x76, 0x7b, 0x8d, 0xee, 0x8e, 0xe1, 0x87, 0x3a,
- 0x6f, 0x71, 0x7c, 0x65, 0x10, 0x5a, 0x76, 0xa3, 0x8f, 0x43, 0xdf, 0xea, 0xf2, 0x3f, 0x8e, 0x59,
- 0xec, 0xb9, 0x3d, 0x97, 0x7e, 0x36, 0xc8, 0x97, 0x58, 0x53, 0xcf, 0x75, 0x7b, 0x36, 0x6e, 0x18,
- 0x9e, 0xd5, 0x30, 0x1c, 0xc7, 0x0d, 0x8d, 0xd0, 0x72, 0x1d, 0xc1, 0x4f, 0x8d, 0x63, 0x69, 0xab,
- 0x33, 0x78, 0xd2, 0x08, 0xad, 0x3e, 0x0e, 0x42, 0xa3, 0xef, 0xb1, 0x0e, 0x2a, 0x82, 0x72, 0xcb,
- 0x08, 0x8d, 0x8e, 0x11, 0xe0, 0x40, 0xc3, 0x7b, 0x03, 0x1c, 0x84, 0xea, 0x35, 0x58, 0x90, 0x60,
- 0x81, 0xe7, 0x3a, 0x01, 0x46, 0x17, 0xa1, 0x60, 0x0a, 0x60, 0x45, 0x59, 0x4d, 0xaf, 0x15, 0xb4,
- 0x18, 0xa0, 0xde, 0x80, 0x25, 0x31, 0xa4, 0x85, 0x43, 0xc3, 0xb2, 0x05, 0x31, 0x54, 0x85, 0xbc,
- 0xe8, 0x56, 0x51, 0x56, 0x95, 0xb5, 0x82, 0x16, 0xb5, 0xd5, 0xcf, 0xd2, 0x70, 0xfe, 0xd8, 0x30,
- 0x3e, 0xdf, 0x23, 0xc8, 0xf6, 0x7c, 0xc3, 0x09, 0xd9, 0x64, 0xb3, 0xeb, 0xdf, 0xa8, 0x3f, 0x53,
- 0x13, 0xea, 0xcf, 0xa0, 0x51, 0xbf, 0x45, 0x08, 0x34, 0x67, 0x3e, 0x3f, 0xac, 0x9d, 0xd1, 0x38,
- 0x35, 0x54, 0x83, 0xd9, 0xd0, 0xe8, 0xd8, 0x58, 0x77, 0x8c, 0x3e, 0x0e, 0x2a, 0x29, 0xba, 0x12,
- 0xa0, 0xa0, 0x7b, 0x04, 0x82, 0x5e, 0x85, 0x92, 0x89, 0x83, 0xae, 0x6f, 0x79, 0xa1, 0xeb, 0xeb,
- 0x96, 0x59, 0x49, 0xaf, 0x2a, 0x6b, 0xe9, 0x66, 0xf9, 0xe8, 0xb0, 0x56, 0x6c, 0x45, 0x88, 0x76,
- 0x4b, 0x2b, 0xc6, 0xdd, 0xda, 0x26, 0xba, 0x0d, 0xb3, 0x44, 0x03, 0x75, 0xa6, 0x94, 0x95, 0x99,
- 0x55, 0x65, 0x6d, 0x76, 0xfd, 0x92, 0xc4, 0x34, 0x43, 0xd4, 0x99, 0xb6, 0xd6, 0x1f, 0xbb, 0x0e,
- 0xde, 0xa4, 0x10, 0xce, 0x1f, 0x7c, 0x14, 0x41, 0xd0, 0xfb, 0xb0, 0x20, 0xd1, 0xd2, 0x6d, 0xbc,
- 0x8f, 0xed, 0x4a, 0x66, 0x55, 0x59, 0x9b, 0x5b, 0xbf, 0x96, 0x20, 0x86, 0x98, 0xe6, 0xc0, 0xa7,
- 0x5a, 0x70, 0x87, 0x0c, 0xd4, 0xe6, 0x63, 0xca, 0x14, 0x50, 0x7d, 0x03, 0x32, 0x54, 0x32, 0x08,
- 0xc1, 0xcc, 0x20, 0xc0, 0x3e, 0xdf, 0x17, 0xfa, 0x8d, 0x56, 0x00, 0x3c, 0xdf, 0xda, 0xb7, 0x6c,
- 0xdc, 0x8b, 0xc5, 0x13, 0x43, 0xd4, 0x5b, 0x70, 0xf6, 0x01, 0x11, 0xd6, 0xe4, 0xdb, 0x8c, 0x16,
- 0x21, 0x43, 0xe5, 0x5b, 0x49, 0x51, 0x04, 0x6b, 0xa8, 0x7f, 0x9c, 0x87, 0xc5, 0x61, 0x4a, 0x7c,
- 0xe7, 0xb7, 0x47, 0x76, 0xfe, 0xd5, 0x84, 0x25, 0x8f, 0x23, 0x30, 0x76, 0xdb, 0x1f, 0x41, 0xae,
- 0xeb, 0xda, 0x83, 0xbe, 0xc3, 0xd6, 0x34, 0xbb, 0xfe, 0xda, 0xb4, 0x54, 0x37, 0xe9, 0x70, 0x4e,
- 0x56, 0x10, 0x43, 0x0f, 0x21, 0x67, 0x39, 0x26, 0xfe, 0x10, 0x07, 0x95, 0xf4, 0xe9, 0xb8, 0x6d,
- 0x93, 0xe1, 0x82, 0x2c, 0xa7, 0x45, 0xb4, 0xd4, 0x37, 0x9c, 0x1e, 0x51, 0x81, 0x81, 0x13, 0x52,
- 0x6d, 0x4a, 0x6b, 0x40, 0x41, 0x9b, 0x04, 0x82, 0x6e, 0xc0, 0x52, 0xd7, 0xc7, 0x46, 0x88, 0x75,
- 0xa6, 0xcd, 0xc4, 0x92, 0xe1, 0x3e, 0x76, 0x42, 0xaa, 0x27, 0x05, 0x6d, 0x91, 0x61, 0xe9, 0x8c,
- 0xdb, 0x02, 0x37, 0xaa, 0xa4, 0xd9, 0xdf, 0xb8, 0x92, 0xe6, 0x7e, 0x53, 0x4a, 0x7a, 0xfc, 0x18,
- 0xe6, 0x27, 0x39, 0x86, 0xcf, 0xa5, 0xdb, 0xd5, 0x7f, 0x54, 0x20, 0xcb, 0xb6, 0x99, 0x0c, 0x27,
- 0x06, 0x42, 0x0c, 0x27, 0xdf, 0x04, 0x16, 0x1e, 0x78, 0x42, 0x8d, 0xe9, 0x37, 0xd1, 0x7b, 0x67,
- 0x60, 0xdb, 0x54, 0xbd, 0x89, 0xa1, 0xc8, 0x6b, 0x51, 0x1b, 0x5d, 0x22, 0x4b, 0x78, 0x62, 0x0c,
- 0xec, 0x50, 0xdf, 0x37, 0xec, 0x01, 0xa6, 0xdb, 0x58, 0x20, 0x0c, 0x53, 0xe0, 0x23, 0x02, 0x43,
- 0xd7, 0xe1, 0x5c, 0x0f, 0x3b, 0x98, 0xc9, 0x42, 0xc7, 0x1f, 0x7a, 0x3e, 0x0e, 0x02, 0xcb, 0x75,
- 0xc4, 0x3e, 0xc6, 0xc8, 0xad, 0x08, 0x87, 0x96, 0x20, 0xbb, 0x63, 0x99, 0x26, 0x76, 0xe8, 0x16,
- 0xe6, 0x35, 0xde, 0xaa, 0x7e, 0xa6, 0x40, 0x86, 0xea, 0xd3, 0x58, 0xfe, 0x97, 0x20, 0x3b, 0x70,
- 0xac, 0xbd, 0x01, 0x5b, 0x41, 0x5e, 0xe3, 0x2d, 0x54, 0x86, 0x74, 0x80, 0xf7, 0x98, 0x9d, 0xd3,
- 0xc8, 0x27, 0xe9, 0xc9, 0x14, 0x9c, 0xb3, 0xcc, 0x5b, 0xd4, 0x09, 0x58, 0x3e, 0xee, 0x86, 0x31,
- 0x83, 0x31, 0x00, 0x55, 0x20, 0x47, 0x5c, 0xa8, 0xe5, 0xf4, 0x38, 0x5b, 0xa2, 0x49, 0xa4, 0x64,
- 0xf5, 0x3d, 0xdb, 0xea, 0x5a, 0x21, 0x55, 0x91, 0xbc, 0x16, 0xb5, 0xd5, 0x2d, 0x58, 0x88, 0xb4,
- 0xf4, 0x39, 0xcc, 0xc9, 0x67, 0x69, 0x40, 0x32, 0x1d, 0x6e, 0x4c, 0x46, 0x0e, 0x92, 0x72, 0xec,
- 0x20, 0x5d, 0x82, 0x92, 0x8f, 0x09, 0x2b, 0x06, 0xef, 0x92, 0xa2, 0x5d, 0x8a, 0x1c, 0xc8, 0x3a,
- 0x7d, 0x05, 0xc0, 0x71, 0x4d, 0x41, 0x84, 0x09, 0xaa, 0x40, 0x20, 0x0c, 0xbd, 0x01, 0x19, 0x72,
- 0xfe, 0x02, 0x6e, 0xf5, 0x2f, 0xcb, 0xea, 0xcf, 0x62, 0x8a, 0xba, 0x88, 0x29, 0xea, 0x77, 0x1f,
- 0x6d, 0x6e, 0x52, 0x16, 0xf9, 0x91, 0x62, 0x23, 0x91, 0x09, 0xa5, 0xbe, 0x15, 0x04, 0x96, 0xd3,
- 0xd3, 0x09, 0xdd, 0xa0, 0x92, 0xa1, 0xd6, 0xe4, 0x77, 0x4e, 0xb2, 0x26, 0x43, 0xab, 0xad, 0xdf,
- 0x65, 0x24, 0xee, 0xb9, 0x26, 0xe6, 0xe4, 0x8b, 0xfd, 0x18, 0x14, 0x10, 0xab, 0x61, 0x78, 0x9e,
- 0xef, 0x7e, 0x68, 0xf5, 0x89, 0xe9, 0x30, 0xad, 0x60, 0x57, 0xef, 0x1c, 0x84, 0x38, 0xa0, 0x1b,
- 0x36, 0xa3, 0x2d, 0x4a, 0xd8, 0x96, 0x15, 0xec, 0x36, 0x09, 0xae, 0xfa, 0x1e, 0xcc, 0x4a, 0x84,
- 0xd1, 0x25, 0xc8, 0x51, 0x61, 0x58, 0x26, 0xdb, 0x9a, 0x26, 0x1c, 0x1d, 0xd6, 0xb2, 0x04, 0xd5,
- 0x6e, 0x69, 0x59, 0x82, 0x6a, 0x9b, 0x44, 0xac, 0xd8, 0xf7, 0x5d, 0x5f, 0xef, 0xe3, 0x20, 0x30,
- 0x7a, 0x62, 0xb3, 0x8a, 0x14, 0x78, 0x97, 0xc1, 0xd4, 0x25, 0x58, 0xbc, 0xe7, 0x3a, 0xc7, 0x76,
- 0x5f, 0xfd, 0xb9, 0x02, 0xe7, 0x46, 0x10, 0x7c, 0x3b, 0xbf, 0x03, 0x0b, 0x24, 0x82, 0xd1, 0x03,
- 0xec, 0x5b, 0x38, 0xd0, 0x99, 0xd4, 0x15, 0x2a, 0xf5, 0xaf, 0x4f, 0x25, 0x2a, 0x6d, 0x9e, 0xd0,
- 0xd9, 0xa6, 0x64, 0x28, 0x02, 0x7d, 0x17, 0x90, 0xe5, 0x84, 0xd8, 0x77, 0x0c, 0x5b, 0x1f, 0x04,
- 0x98, 0xd3, 0x4e, 0x9d, 0x86, 0x76, 0x59, 0x10, 0x7a, 0x18, 0x30, 0x8c, 0x3a, 0x07, 0xc5, 0x87,
- 0x01, 0xf6, 0xa3, 0x15, 0xfe, 0x00, 0x4a, 0xbc, 0xcd, 0x17, 0xd6, 0x86, 0x0c, 0x31, 0x51, 0xc2,
- 0xe7, 0x25, 0x4d, 0x38, 0x34, 0x90, 0xb6, 0x84, 0x2a, 0x51, 0x0a, 0x55, 0x15, 0x66, 0x08, 0x90,
- 0x9c, 0x21, 0x02, 0x90, 0xcc, 0x40, 0xd4, 0x56, 0x7f, 0xac, 0x40, 0x69, 0x6b, 0x1f, 0x3b, 0xf1,
- 0x89, 0x13, 0xc6, 0x4d, 0x91, 0x8c, 0xdb, 0x05, 0x28, 0x84, 0x86, 0xdf, 0xc3, 0x21, 0xd9, 0x6b,
- 0x76, 0x2e, 0xf2, 0x0c, 0xd0, 0x36, 0xc9, 0x31, 0xb4, 0xad, 0xbe, 0xc5, 0x8e, 0x43, 0x46, 0x63,
- 0x0d, 0xf4, 0x32, 0x2c, 0x0c, 0x1c, 0x1f, 0x9b, 0x46, 0x37, 0xc4, 0xa6, 0x8e, 0xe9, 0x14, 0xf4,
- 0x58, 0xe4, 0xb5, 0x72, 0x8c, 0x60, 0x53, 0xab, 0xbf, 0x4e, 0xc1, 0x9c, 0xe0, 0x82, 0xcb, 0xe1,
- 0x2e, 0x64, 0xf9, 0x20, 0x26, 0x88, 0x46, 0x82, 0x20, 0x86, 0x87, 0xb2, 0xa6, 0x70, 0xfb, 0x8c,
- 0x48, 0xf5, 0x4f, 0x53, 0x90, 0xa1, 0x70, 0xd4, 0x84, 0x42, 0x14, 0xfb, 0x72, 0x8d, 0xa9, 0xd6,
- 0x59, 0x74, 0x5c, 0x17, 0xd1, 0x71, 0xfd, 0x81, 0xe8, 0xd1, 0xcc, 0x13, 0x32, 0x9f, 0xfc, 0xaa,
- 0xa6, 0x68, 0xf1, 0x30, 0x62, 0x06, 0x28, 0x5d, 0x5d, 0x72, 0x03, 0x05, 0x0a, 0x79, 0x40, 0xc4,
- 0xf5, 0x92, 0x2c, 0x2e, 0x16, 0x35, 0x16, 0x8f, 0x0e, 0x6b, 0xf9, 0x07, 0x4c, 0x64, 0x2d, 0x49,
- 0x78, 0xeb, 0x40, 0x0c, 0x8c, 0xeb, 0x87, 0xe4, 0xc0, 0x5b, 0x26, 0x73, 0xf0, 0xcd, 0xf9, 0xa3,
- 0xc3, 0xda, 0xac, 0x26, 0xe0, 0xed, 0x96, 0x36, 0x1b, 0x75, 0x6a, 0x9b, 0x64, 0x87, 0x2c, 0xe7,
- 0x89, 0xcb, 0xed, 0x2e, 0xfd, 0x26, 0x53, 0x32, 0x23, 0x4e, 0x88, 0x90, 0x33, 0x5c, 0x64, 0x53,
- 0x3e, 0xa4, 0x40, 0x32, 0x25, 0x43, 0xb7, 0x4d, 0xf5, 0xef, 0x14, 0x28, 0x6f, 0xe3, 0xf0, 0x61,
- 0x9b, 0x44, 0xcb, 0x62, 0xd7, 0xbf, 0x03, 0xb0, 0x8b, 0x0f, 0x98, 0x7b, 0x12, 0x22, 0xbf, 0x99,
- 0x20, 0xf2, 0x51, 0x02, 0xf5, 0xb7, 0xf1, 0x01, 0xf5, 0x63, 0xc1, 0x96, 0x13, 0xfa, 0x07, 0x5a,
- 0x61, 0x57, 0xb4, 0xab, 0x6f, 0xc2, 0xdc, 0x30, 0x92, 0xf8, 0x99, 0x5d, 0x7c, 0xc0, 0x35, 0x8c,
- 0x7c, 0x12, 0x1d, 0x62, 0x9e, 0x91, 0xc8, 0xb2, 0xa8, 0xb1, 0xc6, 0xcd, 0xd4, 0x37, 0x14, 0xf5,
- 0x2c, 0x2c, 0x48, 0x73, 0xb1, 0x1d, 0x56, 0xbf, 0x06, 0xe5, 0x5b, 0xa3, 0x2b, 0x40, 0x30, 0xb3,
- 0x8b, 0x0f, 0x44, 0x4a, 0x42, 0xbf, 0xd5, 0x9f, 0xa7, 0x60, 0xe1, 0xd6, 0xe8, 0x68, 0xf4, 0xfb,
- 0x63, 0xd6, 0xfa, 0x46, 0xc2, 0x5a, 0x8f, 0x51, 0x18, 0x59, 0x2c, 0x57, 0x35, 0x69, 0xc9, 0x4f,
- 0x20, 0xc3, 0x9c, 0x7a, 0xb4, 0x2e, 0x45, 0x5a, 0x17, 0xba, 0x05, 0x45, 0xdb, 0x08, 0x42, 0x7d,
- 0xe0, 0x99, 0x46, 0x88, 0x4d, 0x6e, 0x5b, 0x26, 0xd3, 0xc2, 0x59, 0x32, 0xf2, 0x21, 0x1b, 0x58,
- 0xf5, 0x26, 0x10, 0xed, 0xb7, 0x65, 0xd1, 0xce, 0xae, 0xaf, 0x4f, 0xb5, 0x50, 0x4a, 0x5a, 0xde,
- 0x8e, 0x32, 0xcc, 0x6d, 0xda, 0x83, 0x20, 0xc4, 0xbe, 0xb0, 0x60, 0x9f, 0x2a, 0x30, 0x1f, 0x81,
- 0xb8, 0x84, 0x5f, 0x01, 0xe8, 0x32, 0x50, 0xec, 0x1c, 0x4a, 0x47, 0x87, 0xb5, 0x02, 0xef, 0xd8,
- 0x6e, 0x69, 0x05, 0xde, 0xa1, 0x6d, 0x12, 0x53, 0x11, 0x9f, 0x01, 0xec, 0x10, 0x33, 0x6a, 0xf2,
- 0xc8, 0xa4, 0x1c, 0x21, 0xb6, 0x18, 0x1c, 0x7d, 0x1d, 0x10, 0x26, 0x46, 0xd5, 0xf3, 0xad, 0x00,
- 0x47, 0xbd, 0x59, 0xc4, 0xb5, 0x10, 0x63, 0x78, 0x77, 0xd5, 0x83, 0x62, 0xcb, 0x37, 0x2c, 0x47,
- 0x68, 0xc9, 0x25, 0x28, 0x79, 0x3e, 0x5e, 0xbf, 0x7a, 0x4d, 0xef, 0x1b, 0xfe, 0x2e, 0x0d, 0x0b,
- 0xd3, 0x6b, 0x19, 0xad, 0xc8, 0x80, 0x77, 0x29, 0x8c, 0x18, 0xcc, 0x60, 0x67, 0x10, 0x9a, 0xee,
- 0x53, 0x47, 0xc4, 0x72, 0xa2, 0x8d, 0x96, 0x21, 0x6f, 0xba, 0xba, 0x49, 0x68, 0x72, 0x73, 0x96,
- 0x33, 0x5d, 0x3a, 0xc5, 0xed, 0x99, 0x7c, 0xaa, 0x9c, 0x56, 0x7f, 0xa6, 0x40, 0x89, 0x4f, 0x19,
- 0x87, 0x1e, 0x56, 0xc0, 0x86, 0x90, 0x90, 0x88, 0xad, 0x0c, 0xac, 0xa0, 0xc5, 0x21, 0xe8, 0x26,
- 0x2c, 0x53, 0xac, 0xee, 0xe3, 0x3e, 0x03, 0xe9, 0x96, 0x63, 0x5a, 0x5d, 0x23, 0x74, 0x7d, 0xca,
- 0xc0, 0x8c, 0x76, 0xde, 0x64, 0x24, 0x39, 0xbe, 0x2d, 0xd0, 0xe8, 0x9b, 0x70, 0x61, 0x74, 0xac,
- 0x88, 0x83, 0x49, 0x6c, 0xc6, 0xc2, 0xb6, 0xe5, 0xe1, 0xd1, 0xad, 0xb8, 0xc3, 0xed, 0x99, 0xbc,
- 0x52, 0x4e, 0xa9, 0x1f, 0xc1, 0x72, 0x0b, 0x77, 0xdd, 0x3e, 0x0d, 0x12, 0x5c, 0x67, 0x9b, 0x96,
- 0x43, 0x84, 0xcc, 0xde, 0x87, 0x3c, 0xf7, 0xf3, 0xec, 0xb4, 0x64, 0x9a, 0xcd, 0xa3, 0xc3, 0x5a,
- 0x8e, 0x39, 0xfa, 0xe0, 0x7f, 0x0e, 0x6b, 0xd7, 0x7b, 0x56, 0xb8, 0x33, 0xe8, 0xd4, 0xbb, 0x6e,
- 0xbf, 0x11, 0x69, 0x97, 0xd9, 0x89, 0xbf, 0x1b, 0xde, 0x6e, 0xaf, 0x41, 0xbf, 0xbc, 0x4e, 0x9d,
- 0x07, 0x08, 0x39, 0x16, 0x20, 0x04, 0xea, 0xbf, 0x2a, 0x70, 0x56, 0x9e, 0xfc, 0xb7, 0x33, 0x2d,
- 0xfa, 0x00, 0x16, 0xb8, 0x91, 0xee, 0xe3, 0x7e, 0x07, 0xfb, 0xc1, 0x8e, 0xe5, 0xd1, 0xbd, 0x19,
- 0x4e, 0x5b, 0x76, 0xf7, 0xeb, 0xa2, 0x7c, 0x23, 0x62, 0x38, 0x12, 0xbc, 0x45, 0x43, 0xb8, 0xa8,
- 0xca, 0x8c, 0x56, 0x0c, 0x57, 0xff, 0x2c, 0x0d, 0xd5, 0x71, 0x32, 0xe5, 0x4a, 0xf1, 0x18, 0xb2,
- 0xac, 0xe8, 0xc4, 0xd3, 0xd0, 0x37, 0x93, 0xca, 0x1a, 0xcf, 0x24, 0x53, 0x67, 0x4d, 0xe1, 0xec,
- 0x18, 0xc5, 0xea, 0x5f, 0xa4, 0x20, 0xcb, 0x10, 0xe8, 0xf1, 0x70, 0x8c, 0x96, 0x69, 0x6e, 0xc4,
- 0x31, 0xda, 0x69, 0x45, 0x28, 0x42, 0xbb, 0xf3, 0x90, 0xb3, 0x02, 0xdd, 0xb6, 0xf6, 0xa3, 0x3c,
- 0xc2, 0x0a, 0xee, 0x58, 0xfb, 0xf8, 0x78, 0x28, 0x9d, 0x1e, 0x13, 0x4a, 0xdf, 0x07, 0x90, 0x04,
- 0x3f, 0x73, 0x5a, 0xc1, 0x4b, 0x44, 0x68, 0xb2, 0x20, 0x4e, 0x59, 0x86, 0x9d, 0x5b, 0xd1, 0x56,
- 0x35, 0x98, 0xdf, 0xc6, 0x21, 0xb1, 0x24, 0x41, 0x82, 0xc7, 0x18, 0x09, 0x5b, 0xb8, 0x8b, 0x48,
- 0x8d, 0x86, 0x2d, 0xcc, 0xe2, 0xaa, 0xff, 0x9c, 0xa2, 0x9e, 0x94, 0x13, 0xe5, 0x1b, 0xab, 0x4f,
- 0xef, 0x49, 0x87, 0x08, 0x9c, 0xe8, 0x5c, 0x76, 0xc7, 0x3a, 0x97, 0x82, 0x70, 0x2e, 0xe3, 0x92,
- 0xd3, 0x55, 0x98, 0x95, 0x8d, 0x42, 0x9a, 0xa2, 0x64, 0x10, 0x49, 0xf4, 0xbc, 0x41, 0xc7, 0xb6,
- 0xba, 0xdc, 0xa8, 0xf1, 0x56, 0xd5, 0x9d, 0xc0, 0xc3, 0xdc, 0x1a, 0xf6, 0x30, 0xd7, 0xa6, 0x59,
- 0xec, 0x31, 0x07, 0x73, 0x19, 0x4a, 0xdf, 0xc6, 0x86, 0x1d, 0xee, 0x88, 0x5d, 0x5a, 0x84, 0x8c,
- 0x8f, 0x0d, 0x93, 0xcd, 0x98, 0xd7, 0x58, 0x83, 0xf8, 0x21, 0xd1, 0x8d, 0xc7, 0x04, 0x0b, 0x30,
- 0x7f, 0x87, 0xd7, 0x60, 0x85, 0x6b, 0xfa, 0x75, 0x0a, 0xca, 0x31, 0x8c, 0xef, 0xcf, 0x3b, 0x00,
- 0xa2, 0x56, 0x1b, 0xed, 0xcf, 0x4b, 0x27, 0xea, 0x9d, 0x20, 0x23, 0xea, 0x1f, 0x31, 0x09, 0xf4,
- 0x13, 0x05, 0xf2, 0xec, 0xe0, 0x61, 0x71, 0x98, 0x93, 0xb2, 0xb5, 0x51, 0x86, 0xf8, 0x11, 0x16,
- 0xdb, 0xfd, 0x06, 0xa1, 0xff, 0xa3, 0x5f, 0x9d, 0xee, 0x64, 0x46, 0x7c, 0x54, 0x3d, 0x28, 0x0d,
- 0xd1, 0x95, 0xb7, 0x2d, 0xc3, 0xb6, 0xad, 0x2d, 0x6f, 0xdb, 0xdc, 0xfa, 0xf5, 0x13, 0x65, 0x40,
- 0x26, 0x11, 0xdc, 0xf3, 0xd3, 0x27, 0x6d, 0x9c, 0x07, 0xb3, 0xb7, 0xdd, 0x4e, 0x20, 0x6d, 0x1b,
- 0xcb, 0x0a, 0x14, 0x39, 0x2b, 0x58, 0x92, 0xac, 0x1e, 0xad, 0x27, 0xb0, 0x16, 0xba, 0xce, 0x95,
- 0x36, 0x4d, 0x59, 0xa9, 0xc9, 0xe2, 0xdb, 0xb3, 0xeb, 0xb4, 0x72, 0xcf, 0xaa, 0xf8, 0x75, 0x12,
- 0x60, 0x33, 0xad, 0x56, 0xff, 0x2d, 0x0b, 0x45, 0x36, 0x25, 0xdf, 0xda, 0x2d, 0x98, 0x21, 0xbd,
- 0xf8, 0xa6, 0xbe, 0x9c, 0xb0, 0x09, 0xf2, 0x30, 0xd2, 0xe0, 0xdb, 0x4a, 0x87, 0x57, 0xff, 0x37,
- 0x03, 0xe9, 0xdb, 0x6e, 0x07, 0x2d, 0x41, 0x8a, 0x9b, 0xcd, 0x74, 0x33, 0x7b, 0x74, 0x58, 0x4b,
- 0xb5, 0x5b, 0x5a, 0xca, 0x32, 0x4f, 0x79, 0xc2, 0xe4, 0x2c, 0x6c, 0x66, 0x38, 0x0b, 0x43, 0xfb,
- 0x30, 0x37, 0x54, 0xe3, 0x62, 0x59, 0x7f, 0xa9, 0xf9, 0xce, 0xd1, 0x61, 0xad, 0x24, 0x17, 0xb9,
- 0x88, 0xdb, 0xbb, 0x39, 0x91, 0x66, 0x04, 0x7b, 0x76, 0x74, 0xbd, 0x40, 0x68, 0x7b, 0x9d, 0x7a,
- 0xbb, 0xa5, 0x95, 0xe4, 0x1a, 0x59, 0x20, 0x6d, 0x47, 0x76, 0x68, 0x3b, 0x6e, 0x42, 0x8e, 0x95,
- 0x0d, 0x4d, 0x5a, 0xa5, 0x49, 0x8e, 0x4d, 0x67, 0x68, 0x5c, 0x2a, 0x06, 0x90, 0xb1, 0x41, 0x68,
- 0xf8, 0x64, 0x6c, 0x7e, 0xd2, 0xb1, 0x7c, 0x00, 0x7a, 0x13, 0xf2, 0x4f, 0x2c, 0xc7, 0x0a, 0x76,
- 0xb0, 0x59, 0x29, 0x4c, 0x38, 0x38, 0x1a, 0x41, 0x46, 0xf7, 0x5d, 0xd3, 0x7a, 0x62, 0x61, 0xb3,
- 0x02, 0x93, 0x8e, 0x16, 0x23, 0x48, 0x60, 0xf9, 0xc4, 0x37, 0x68, 0x01, 0x4b, 0xef, 0xba, 0x7d,
- 0xcf, 0xc6, 0x64, 0x09, 0xb3, 0xab, 0xca, 0x5a, 0x4a, 0x5b, 0x10, 0x98, 0x4d, 0x81, 0x20, 0xfa,
- 0x4d, 0x4b, 0x18, 0x95, 0x22, 0x33, 0xbe, 0xb4, 0x81, 0xee, 0xc3, 0xd9, 0x1d, 0xab, 0xb7, 0xf3,
- 0xd4, 0x20, 0xa1, 0x6f, 0x9c, 0x66, 0x96, 0x26, 0xe4, 0x06, 0x45, 0x83, 0x23, 0x0c, 0xf1, 0x48,
- 0x31, 0x49, 0x13, 0x77, 0xad, 0xbe, 0x61, 0x57, 0xe6, 0xe8, 0xa4, 0xe5, 0x08, 0xd1, 0x62, 0x70,
- 0x74, 0x19, 0xe6, 0xfc, 0x81, 0x43, 0xa3, 0x40, 0xbe, 0xb1, 0xf3, 0xb4, 0x67, 0x89, 0x43, 0x79,
- 0x54, 0x70, 0x11, 0x0a, 0x71, 0x9d, 0xb8, 0xcc, 0xd2, 0xd7, 0x08, 0xa0, 0x22, 0x28, 0xdf, 0x71,
- 0xbb, 0xec, 0xfa, 0x48, 0x98, 0xd2, 0xff, 0x53, 0x60, 0x41, 0x02, 0x46, 0x55, 0x98, 0x82, 0x2d,
- 0x80, 0x13, 0x14, 0xe9, 0x8f, 0x11, 0x88, 0x20, 0xc2, 0xcb, 0x45, 0xd4, 0xaa, 0x7f, 0xae, 0x40,
- 0x5e, 0x60, 0xd1, 0x0b, 0x50, 0x24, 0x18, 0xdb, 0x0a, 0x0f, 0xf4, 0xd8, 0xf9, 0xcc, 0x0a, 0xd8,
- 0xdb, 0xf8, 0x80, 0xac, 0x3c, 0xea, 0x12, 0x9b, 0xb5, 0x82, 0x56, 0x12, 0x50, 0xe6, 0x33, 0xab,
- 0x90, 0xb7, 0x8d, 0xd0, 0x0a, 0x07, 0x26, 0x33, 0x36, 0x8a, 0x16, 0xb5, 0x89, 0x54, 0x6c, 0xd7,
- 0xe9, 0x31, 0xe4, 0x0c, 0x45, 0xc6, 0x00, 0xb5, 0x09, 0xf3, 0x9a, 0xe1, 0xf4, 0xf0, 0x1d, 0xb7,
- 0x27, 0x6c, 0xdc, 0x32, 0xe4, 0x59, 0x4d, 0x51, 0x98, 0x09, 0x2d, 0x47, 0xdb, 0x72, 0x51, 0x24,
- 0x25, 0x99, 0x3f, 0xf5, 0xbf, 0xd3, 0x50, 0x8e, 0x89, 0x44, 0x0e, 0x49, 0x54, 0x3a, 0x98, 0xf3,
- 0x48, 0xf2, 0x9f, 0xa3, 0x83, 0xc7, 0xd6, 0x3a, 0xfe, 0x49, 0x01, 0x78, 0xd7, 0xc7, 0x61, 0x78,
- 0xd0, 0x76, 0x9e, 0xb8, 0x44, 0x78, 0x3c, 0xd1, 0xa4, 0x99, 0x81, 0x10, 0x1e, 0x87, 0x11, 0xeb,
- 0x42, 0x16, 0xe2, 0xe0, 0xa7, 0x0c, 0xcd, 0xc4, 0x96, 0x73, 0xf0, 0x53, 0x8a, 0xba, 0x04, 0x25,
- 0xc3, 0x34, 0xb1, 0xa9, 0xf3, 0xe0, 0x8d, 0x9b, 0xb6, 0x22, 0x05, 0x6a, 0x0c, 0x86, 0x5e, 0x84,
- 0x79, 0x1f, 0xf7, 0xdd, 0x7d, 0xa9, 0x1b, 0x33, 0x71, 0x73, 0x1c, 0x2c, 0x3a, 0x2e, 0x41, 0xd6,
- 0xc7, 0x46, 0x10, 0x15, 0x8d, 0x79, 0x0b, 0x55, 0x20, 0x67, 0xb2, 0xeb, 0x10, 0x6e, 0x89, 0x44,
- 0xb3, 0xfa, 0x33, 0x45, 0x14, 0x6e, 0x6e, 0x43, 0x86, 0x2e, 0x90, 0x17, 0x6d, 0xea, 0x27, 0xfa,
- 0x2b, 0x21, 0x2c, 0x59, 0x46, 0x8c, 0x04, 0x7a, 0x1f, 0x66, 0x3d, 0x2a, 0x21, 0x9d, 0x56, 0x52,
- 0x58, 0xe0, 0xf2, 0xda, 0x34, 0x82, 0x8f, 0x05, 0x2c, 0x42, 0x02, 0x2f, 0x82, 0xf0, 0xa4, 0x6a,
- 0x0d, 0xca, 0xf7, 0x07, 0xd8, 0x3f, 0x78, 0xd7, 0x36, 0x1c, 0xc9, 0x2d, 0xee, 0x11, 0x98, 0x88,
- 0xd9, 0x68, 0x43, 0xf5, 0x60, 0x41, 0xea, 0xc9, 0xf5, 0xe2, 0xbb, 0x70, 0xc1, 0xb4, 0x82, 0x30,
- 0xd8, 0xb3, 0x75, 0x6f, 0xe7, 0x20, 0xb0, 0xba, 0x86, 0xad, 0xd3, 0xee, 0xba, 0x67, 0x1b, 0x0e,
- 0xcf, 0xaa, 0x2f, 0x1e, 0x1d, 0xd6, 0x2a, 0x2d, 0x2b, 0x08, 0xb7, 0xef, 0xdf, 0x79, 0x97, 0xf7,
- 0x8a, 0x49, 0x55, 0x38, 0x81, 0x63, 0x18, 0x75, 0x99, 0x5d, 0xb8, 0x92, 0x91, 0xbe, 0xd5, 0x19,
- 0x84, 0x71, 0xde, 0xa5, 0xfe, 0x3d, 0x40, 0xe5, 0x38, 0x8e, 0x33, 0xe5, 0x41, 0x49, 0xd4, 0xdf,
- 0x99, 0xe8, 0xd8, 0xa9, 0xdf, 0x3a, 0xe1, 0x52, 0x76, 0x1c, 0xad, 0xe8, 0xb6, 0x96, 0x88, 0x4c,
- 0x8e, 0x75, 0x8b, 0xa6, 0x84, 0x40, 0x7d, 0x28, 0x4a, 0xd7, 0x4b, 0xe2, 0x76, 0xad, 0x75, 0x9a,
- 0x09, 0xe3, 0x2b, 0xa7, 0xa1, 0xd8, 0x7a, 0x36, 0xbe, 0x72, 0x0a, 0xaa, 0x9f, 0x2a, 0x00, 0x71,
- 0x3f, 0xa2, 0xb0, 0x2c, 0xb3, 0xe3, 0x1b, 0xc6, 0x5b, 0x68, 0x03, 0xb2, 0xfc, 0xee, 0x2c, 0x35,
- 0xed, 0xdd, 0x19, 0x1f, 0x48, 0x8b, 0x24, 0xec, 0xca, 0x2c, 0xd8, 0xb3, 0xd9, 0x79, 0xe1, 0x45,
- 0x12, 0x0a, 0xdd, 0xbe, 0x7f, 0x47, 0x2b, 0xb0, 0x0e, 0xdb, 0x7b, 0xf6, 0xed, 0x99, 0x7c, 0xba,
- 0x3c, 0x53, 0xfd, 0x93, 0x34, 0x14, 0x68, 0x9d, 0x99, 0x8a, 0xe6, 0x73, 0x05, 0x2a, 0x43, 0x89,
- 0x96, 0xde, 0x39, 0xd0, 0xe3, 0x74, 0x8f, 0xc8, 0xe9, 0xbd, 0xd3, 0xc8, 0x29, 0x9a, 0xa1, 0xae,
- 0x49, 0x19, 0x5b, 0xf3, 0x80, 0x46, 0x99, 0x26, 0x13, 0xdd, 0xeb, 0xa7, 0x8d, 0x51, 0x17, 0xfd,
- 0x31, 0x34, 0xd1, 0x57, 0x61, 0x4e, 0xbe, 0x44, 0x8c, 0xca, 0xcc, 0xc5, 0x78, 0x6f, 0xda, 0x26,
- 0xfa, 0x16, 0x80, 0xe9, 0xbb, 0x9e, 0x87, 0x4d, 0xdd, 0x60, 0x59, 0xe5, 0x24, 0x5e, 0xb5, 0xc0,
- 0xc7, 0x6c, 0x84, 0xd5, 0x5b, 0xb0, 0xfc, 0xcc, 0x25, 0x8d, 0x09, 0x91, 0x87, 0xca, 0x92, 0x69,
- 0x29, 0xda, 0xad, 0xfe, 0x30, 0x05, 0x45, 0x59, 0x7f, 0x51, 0x08, 0xec, 0xed, 0x80, 0x7c, 0x2a,
- 0xde, 0x79, 0xde, 0x53, 0x11, 0xef, 0xc4, 0x50, 0x2e, 0x18, 0x0a, 0x68, 0xf5, 0x63, 0x98, 0x1b,
- 0xee, 0x32, 0x26, 0x3d, 0xdb, 0x1e, 0x4e, 0xcf, 0xde, 0x7a, 0x2e, 0x8d, 0x18, 0x92, 0x81, 0x12,
- 0xbf, 0x0f, 0x49, 0x62, 0xe0, 0xd1, 0x30, 0x03, 0xbf, 0xfb, 0xbc, 0x52, 0x91, 0x79, 0xf8, 0x01,
- 0x94, 0x47, 0x4f, 0xf5, 0x18, 0x0e, 0x1e, 0x0c, 0x73, 0xf0, 0xcd, 0xe7, 0x33, 0x1e, 0xd2, 0xfc,
- 0xbc, 0xe6, 0x77, 0x1e, 0xce, 0xdd, 0xa5, 0x2f, 0x74, 0xee, 0xe2, 0xd0, 0x30, 0xe3, 0xa2, 0xb4,
- 0xfa, 0xef, 0x0a, 0x2c, 0x8d, 0x62, 0xb8, 0x25, 0x35, 0x20, 0xdf, 0xe7, 0x30, 0xae, 0x2e, 0xdf,
- 0x4a, 0x60, 0x6b, 0x3c, 0x91, 0xba, 0x00, 0xc8, 0xea, 0x11, 0x91, 0xad, 0xfe, 0x1e, 0x94, 0x86,
- 0x3a, 0x8c, 0x91, 0xcc, 0xab, 0xc3, 0x92, 0x91, 0x33, 0xaf, 0x41, 0x68, 0xd9, 0x75, 0xfe, 0xf0,
- 0x28, 0x9a, 0x58, 0x4a, 0xf8, 0x7e, 0x9a, 0x82, 0xb3, 0x5b, 0xce, 0xde, 0x00, 0x0f, 0x30, 0xf5,
- 0x8e, 0xc2, 0xc5, 0x7d, 0x99, 0x25, 0x27, 0xe6, 0x3e, 0xa3, 0xe0, 0x8e, 0x35, 0xd0, 0x07, 0x52,
- 0x1c, 0x46, 0x2f, 0xa1, 0x9a, 0x9b, 0x47, 0x87, 0xb5, 0x1c, 0xe5, 0x8a, 0xce, 0x79, 0x63, 0xaa,
- 0x39, 0xf9, 0xb8, 0x38, 0x98, 0xbb, 0x02, 0x0b, 0xc1, 0xae, 0xe5, 0xe9, 0xc1, 0x8e, 0x3b, 0xb0,
- 0x4d, 0x9d, 0x71, 0xc0, 0xea, 0x24, 0xf3, 0x04, 0xb1, 0x4d, 0xe1, 0xf7, 0x09, 0x58, 0xfd, 0x9b,
- 0x14, 0x2c, 0x0e, 0x4b, 0x85, 0xef, 0xf7, 0xfd, 0x38, 0xc4, 0x61, 0xdb, 0xfd, 0x7a, 0xd2, 0x8d,
- 0xd6, 0x18, 0x0a, 0x75, 0xf1, 0x60, 0x24, 0x8a, 0x8d, 0xfe, 0x41, 0x81, 0x1c, 0x07, 0x7e, 0xa9,
- 0x52, 0x7f, 0x6b, 0x24, 0x42, 0xbd, 0x9c, 0x74, 0x0b, 0xea, 0x1b, 0x5d, 0x4c, 0x23, 0x2e, 0x11,
- 0x8f, 0xc6, 0xa9, 0x52, 0x5a, 0x4a, 0x95, 0xd4, 0x73, 0x70, 0x76, 0x73, 0xc7, 0xf0, 0xc3, 0x4d,
- 0x96, 0xa4, 0x8a, 0x13, 0xf3, 0x18, 0x16, 0x87, 0xc1, 0x5c, 0x7c, 0x4d, 0xc8, 0xf1, 0x74, 0x96,
- 0x8b, 0x4f, 0x95, 0x98, 0x08, 0x83, 0xba, 0x78, 0x3c, 0x47, 0x07, 0x6f, 0xb3, 0x87, 0x08, 0xd1,
- 0x1b, 0x1d, 0x86, 0xbb, 0xf2, 0x36, 0x2c, 0x8d, 0x7f, 0x75, 0x82, 0x66, 0x21, 0xf7, 0xf0, 0xde,
- 0xdb, 0xf7, 0xde, 0x79, 0xef, 0x5e, 0xf9, 0x0c, 0x69, 0x6c, 0xde, 0x79, 0xb8, 0xfd, 0x60, 0x4b,
- 0x2b, 0x2b, 0xa8, 0x08, 0xf9, 0xd6, 0xc6, 0x83, 0x8d, 0xe6, 0xc6, 0xf6, 0x56, 0x39, 0x85, 0x0a,
- 0x90, 0x79, 0xb0, 0xd1, 0xbc, 0xb3, 0x55, 0x4e, 0xaf, 0xff, 0xa4, 0x0a, 0x99, 0x0d, 0xb3, 0x6f,
- 0x39, 0x28, 0x84, 0x0c, 0xbd, 0x8a, 0x45, 0x2f, 0x9e, 0x7c, 0x59, 0x4b, 0x17, 0x59, 0x5d, 0x9b,
- 0xf4, 0x56, 0x57, 0xad, 0xfc, 0xe8, 0x5f, 0xfe, 0xeb, 0xa7, 0x29, 0x84, 0xca, 0x0d, 0x9d, 0xbe,
- 0x86, 0x6c, 0xec, 0x5f, 0x6b, 0xd0, 0xdb, 0x5d, 0xf4, 0x47, 0x0a, 0x14, 0xa2, 0xd7, 0x79, 0xe8,
- 0xe5, 0x09, 0x5e, 0xc5, 0x45, 0xd3, 0xbf, 0x32, 0x59, 0x67, 0xce, 0xc2, 0x45, 0xca, 0xc2, 0x12,
- 0x5a, 0x94, 0x58, 0x88, 0x1e, 0xfc, 0xa1, 0xbf, 0x52, 0x60, 0x7e, 0xe4, 0xd9, 0x1d, 0xba, 0x36,
- 0xcd, 0x13, 0x3d, 0xc6, 0xd2, 0xfa, 0xf4, 0xaf, 0xfa, 0xd4, 0x17, 0x29, 0x63, 0x2f, 0xa0, 0xda,
- 0x38, 0xc6, 0x1a, 0x1f, 0x8b, 0xcf, 0xef, 0xa3, 0xbf, 0x55, 0xa0, 0x28, 0x3f, 0xb9, 0x42, 0xf5,
- 0x89, 0xdf, 0x66, 0x31, 0xee, 0x1a, 0x53, 0xbe, 0xe5, 0x52, 0x5f, 0xa3, 0xac, 0x5d, 0x45, 0xf5,
- 0x13, 0x58, 0x6b, 0x50, 0x57, 0x1e, 0x34, 0x3e, 0xa6, 0xff, 0x94, 0x53, 0x88, 0xdf, 0x11, 0xa0,
- 0x57, 0x26, 0x7c, 0x6e, 0xc0, 0xb8, 0x9c, 0xee, 0x71, 0x82, 0xfa, 0x26, 0xe5, 0xf1, 0x35, 0x74,
- 0x63, 0x3a, 0x1e, 0x1b, 0xec, 0x9d, 0xca, 0x5f, 0x2a, 0x50, 0x1a, 0x7a, 0x9a, 0x81, 0x92, 0x84,
- 0x34, 0xee, 0x75, 0x47, 0xf5, 0xea, 0xe4, 0x03, 0x38, 0xcb, 0xab, 0x94, 0xe5, 0x2a, 0xaa, 0x48,
- 0x2c, 0x3b, 0xae, 0xc3, 0x18, 0xa4, 0x4c, 0x7c, 0x08, 0x59, 0xf6, 0x1a, 0x00, 0xad, 0x4d, 0xf0,
- 0x60, 0x80, 0xf1, 0xf1, 0xd2, 0xc4, 0x4f, 0x0b, 0xd4, 0x65, 0xca, 0xc0, 0x59, 0xb4, 0x20, 0x31,
- 0xc0, 0xad, 0x1c, 0x39, 0x8f, 0xd1, 0x4d, 0x75, 0xe2, 0x79, 0x1c, 0xbd, 0x3b, 0x4f, 0x3c, 0x8f,
- 0xc7, 0x2f, 0xbf, 0xf9, 0x79, 0x54, 0x65, 0x1e, 0x06, 0x16, 0xd9, 0xae, 0x9b, 0xca, 0x15, 0xf4,
- 0x43, 0x05, 0x0a, 0xb7, 0x26, 0x62, 0xe3, 0xd6, 0x34, 0x6c, 0x1c, 0xbb, 0x1a, 0x1e, 0x2b, 0x0a,
- 0xc6, 0x06, 0xfa, 0x03, 0xc8, 0xf1, 0x8b, 0x5e, 0x94, 0x24, 0xdb, 0xe1, 0x8b, 0xe4, 0xea, 0x95,
- 0x49, 0xba, 0xf2, 0xc9, 0xab, 0x74, 0xf2, 0x45, 0x84, 0xa4, 0xc9, 0xf9, 0x85, 0x32, 0xfa, 0x43,
- 0x05, 0xf2, 0xe2, 0x9e, 0x01, 0x5d, 0x99, 0xe8, 0x32, 0x82, 0x31, 0xf0, 0xf2, 0x14, 0x17, 0x17,
- 0xea, 0x05, 0xca, 0xc1, 0x39, 0x74, 0x56, 0xe2, 0x20, 0x10, 0xb3, 0xfe, 0x58, 0x81, 0x2c, 0xbb,
- 0x9e, 0x48, 0x54, 0xc3, 0xa1, 0x8b, 0x8e, 0x44, 0x35, 0x1c, 0xb9, 0xeb, 0xf8, 0x2a, 0x9d, 0x7c,
- 0x65, 0x48, 0xf6, 0x3b, 0xb4, 0xcb, 0xe3, 0x02, 0xca, 0xf1, 0x4f, 0x2a, 0x08, 0x51, 0xaf, 0x4f,
- 0x14, 0xc4, 0xc8, 0xbd, 0x49, 0xa2, 0x20, 0x46, 0xaf, 0x2f, 0xc6, 0x0a, 0x42, 0xdc, 0x8e, 0x20,
- 0x0f, 0x66, 0x6e, 0xbb, 0x9d, 0x00, 0x7d, 0xed, 0xc4, 0x5a, 0x3c, 0x9b, 0xf9, 0xc5, 0x09, 0x6b,
- 0xf6, 0xea, 0x79, 0x3a, 0xeb, 0x02, 0x9a, 0x97, 0x66, 0xfd, 0x1e, 0x99, 0x89, 0x1c, 0xc3, 0xa8,
- 0xce, 0x98, 0xa8, 0xff, 0xa3, 0x35, 0xce, 0x44, 0xfd, 0x3f, 0x56, 0xba, 0x1c, 0xeb, 0x16, 0xa3,
- 0xf2, 0x25, 0x65, 0x23, 0xaa, 0xb6, 0x24, 0xb2, 0x31, 0x5a, 0x22, 0x4a, 0x64, 0xe3, 0x58, 0x95,
- 0x68, 0x2c, 0x1b, 0xb4, 0x4a, 0xe4, 0x91, 0x89, 0x3f, 0x80, 0x0c, 0x7d, 0x65, 0x90, 0x18, 0x9a,
- 0xc8, 0x0f, 0x24, 0x12, 0x43, 0x93, 0xa1, 0x67, 0x0d, 0xea, 0x99, 0xab, 0x0a, 0x7a, 0x0a, 0x45,
- 0xf9, 0x72, 0x3a, 0xd1, 0xb1, 0x8e, 0xb9, 0xe3, 0xaf, 0xbe, 0x7a, 0xaa, 0x5b, 0x6f, 0xf5, 0x0c,
- 0x39, 0x61, 0xe8, 0x78, 0x07, 0x74, 0x63, 0x4a, 0x7a, 0xcf, 0xc9, 0xc5, 0x5f, 0x2b, 0x90, 0x17,
- 0x95, 0xc1, 0xc4, 0x13, 0x36, 0x52, 0x39, 0x4e, 0x3c, 0x61, 0xa3, 0xa5, 0x46, 0xf5, 0x2d, 0xba,
- 0xc5, 0xaf, 0x0f, 0x9d, 0x30, 0x9a, 0x9a, 0xd8, 0x6e, 0xef, 0xf1, 0x2a, 0x5a, 0x19, 0x03, 0x6e,
- 0x7c, 0x2c, 0x12, 0xa2, 0xef, 0x93, 0x08, 0xad, 0x3c, 0x9a, 0xd5, 0xa2, 0xf5, 0xa9, 0x52, 0x60,
- 0xc6, 0xf4, 0xf5, 0x53, 0xa4, 0xcd, 0x91, 0xa9, 0xba, 0x38, 0x12, 0x65, 0xe8, 0xa6, 0xcc, 0xce,
- 0xa7, 0x0a, 0x2c, 0x6c, 0xd8, 0xf6, 0x70, 0x96, 0x8b, 0xae, 0x4e, 0x91, 0x10, 0x33, 0x16, 0xaf,
- 0x4d, 0x9d, 0x42, 0xab, 0x2f, 0x50, 0x06, 0x2f, 0xa0, 0x65, 0x89, 0x41, 0x96, 0xf5, 0x8a, 0x3c,
- 0x1a, 0x7d, 0xa2, 0x40, 0x51, 0x4e, 0x4a, 0x12, 0xd5, 0x7c, 0x4c, 0x52, 0x93, 0x18, 0x3f, 0x8e,
- 0xcb, 0x76, 0xd4, 0x1a, 0x65, 0x6a, 0x19, 0x9d, 0x97, 0xfd, 0x1b, 0xe9, 0xc8, 0x53, 0x19, 0x12,
- 0x7e, 0x15, 0xe5, 0x24, 0x31, 0x91, 0xa5, 0x31, 0x59, 0x7a, 0x22, 0x4b, 0xe3, 0xb2, 0x4f, 0xf5,
- 0x12, 0x65, 0xe9, 0x2b, 0xaa, 0x1c, 0x7b, 0x61, 0xd6, 0x51, 0xa7, 0xca, 0x76, 0x53, 0xb9, 0xd2,
- 0xbc, 0xf2, 0xf9, 0x7f, 0xae, 0x9c, 0xf9, 0xfc, 0x68, 0x45, 0xf9, 0xc5, 0xd1, 0x8a, 0xf2, 0xcb,
- 0xa3, 0x15, 0xe5, 0x3f, 0x8e, 0x56, 0x94, 0x4f, 0xbe, 0x58, 0x39, 0xf3, 0x8b, 0x2f, 0x56, 0xce,
- 0xfc, 0xf2, 0x8b, 0x95, 0x33, 0x8f, 0xf3, 0x62, 0x96, 0x4e, 0x96, 0x16, 0xec, 0xae, 0xff, 0x7f,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0x81, 0x85, 0xbd, 0x83, 0xf7, 0x35, 0x00, 0x00,
+func init() { proto.RegisterFile("server/serverpb/admin.proto", fileDescriptor_admin_504d7e693eb0ea14) }
+
+var fileDescriptor_admin_504d7e693eb0ea14 = []byte{
+ // 4402 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3a, 0x4d, 0x73, 0x1b, 0x47,
+ 0x76, 0x1c, 0x80, 0x20, 0x80, 0x47, 0x80, 0x04, 0x5b, 0x14, 0x05, 0x42, 0x5a, 0x92, 0x1e, 0xf9,
+ 0x83, 0x96, 0xbd, 0x80, 0x44, 0xc9, 0xf6, 0x46, 0xfe, 0xd8, 0x10, 0x24, 0x4b, 0x86, 0x2c, 0xc9,
+ 0xd2, 0x50, 0x92, 0x6b, 0xe5, 0xd8, 0x93, 0x01, 0xa6, 0x09, 0xce, 0x72, 0x30, 0x33, 0x9c, 0x19,
+ 0x40, 0xa2, 0x9d, 0xdd, 0x8a, 0x77, 0x37, 0xa9, 0x1c, 0x52, 0x29, 0x27, 0x9b, 0x9b, 0x4f, 0xc9,
+ 0x21, 0x39, 0xe4, 0x12, 0xef, 0x31, 0x87, 0x9c, 0x5d, 0xb9, 0xec, 0xa6, 0x92, 0x54, 0x6d, 0x2e,
+ 0xdc, 0x84, 0xce, 0x69, 0xf3, 0x0f, 0x52, 0x49, 0x25, 0xd5, 0x5f, 0x33, 0x0d, 0x10, 0x1a, 0x02,
+ 0x94, 0x37, 0x17, 0x60, 0xfa, 0xbd, 0xee, 0xd7, 0xaf, 0x5f, 0xbf, 0x7e, 0xfd, 0xde, 0xeb, 0x07,
+ 0xe7, 0x03, 0xec, 0xf7, 0xb0, 0x5f, 0x63, 0x7f, 0x5e, 0xb3, 0x66, 0x98, 0x1d, 0xcb, 0xa9, 0x7a,
+ 0xbe, 0x1b, 0xba, 0x68, 0xb1, 0xe5, 0xb6, 0xf6, 0x7c, 0xd7, 0x68, 0xed, 0x56, 0x19, 0xbe, 0x2a,
+ 0xba, 0x55, 0xca, 0x2d, 0xd7, 0xd9, 0xb1, 0xda, 0xb5, 0x4f, 0x5c, 0x07, 0x7b, 0x4d, 0xfa, 0xc7,
+ 0x06, 0x55, 0x16, 0xbe, 0xef, 0x36, 0x83, 0x1a, 0xf9, 0xf1, 0x9a, 0xf4, 0x4f, 0xc0, 0x29, 0x21,
+ 0xaf, 0x59, 0xeb, 0xe0, 0xd0, 0x30, 0x8d, 0xd0, 0xe0, 0xf0, 0x0b, 0x83, 0x1c, 0x04, 0xa1, 0x11,
+ 0x76, 0xc5, 0xa8, 0xf3, 0x41, 0xe8, 0xfa, 0x46, 0x1b, 0xd7, 0xb0, 0xd3, 0xb6, 0xe8, 0x54, 0x9d,
+ 0x5e, 0xab, 0xc5, 0x91, 0x2f, 0xec, 0xf5, 0x6a, 0x7b, 0x3d, 0x3e, 0x5e, 0x7c, 0x78, 0xcd, 0x9a,
+ 0x6d, 0xf5, 0xb0, 0x83, 0x03, 0x41, 0x63, 0xe5, 0x69, 0xdd, 0xdc, 0x36, 0xef, 0xb1, 0x14, 0x06,
+ 0xb5, 0x96, 0x11, 0x1a, 0xb6, 0xdb, 0xae, 0xb5, 0x76, 0x0d, 0x3f, 0xd4, 0x79, 0x8b, 0xe3, 0xcb,
+ 0xdd, 0xd0, 0xb2, 0x09, 0xe3, 0xbe, 0xd5, 0xe2, 0x7f, 0x1c, 0x33, 0xdf, 0x76, 0xdb, 0x2e, 0xfd,
+ 0xac, 0x91, 0x2f, 0xb1, 0xa6, 0xb6, 0xeb, 0xb6, 0x6d, 0x5c, 0x33, 0x3c, 0xab, 0x66, 0x38, 0x8e,
+ 0x1b, 0x1a, 0xa1, 0xe5, 0x3a, 0x82, 0x9f, 0x65, 0x8e, 0xa5, 0xad, 0x66, 0x77, 0xa7, 0x16, 0x5a,
+ 0x1d, 0x1c, 0x84, 0x46, 0xc7, 0x63, 0x1d, 0x54, 0x04, 0xa5, 0x4d, 0x23, 0x34, 0x9a, 0x46, 0x80,
+ 0x03, 0x0d, 0xef, 0x77, 0x71, 0x10, 0xaa, 0x57, 0x60, 0x4e, 0x82, 0x05, 0x9e, 0xeb, 0x04, 0x18,
+ 0x5d, 0x80, 0xbc, 0x29, 0x80, 0x65, 0x65, 0x25, 0xbd, 0x9a, 0xd7, 0x62, 0x80, 0x7a, 0x0d, 0x16,
+ 0xc4, 0x90, 0x4d, 0x1c, 0x1a, 0x96, 0x2d, 0x88, 0xa1, 0x0a, 0xe4, 0x44, 0xb7, 0xb2, 0xb2, 0xa2,
+ 0xac, 0xe6, 0xb5, 0xa8, 0xad, 0x7e, 0x99, 0x86, 0x73, 0xc7, 0x86, 0xf1, 0xf9, 0x1e, 0xc2, 0x54,
+ 0xdb, 0x37, 0x9c, 0x90, 0x4d, 0x36, 0xbd, 0xf6, 0x9d, 0xea, 0x53, 0x35, 0xa4, 0xfa, 0x14, 0x1a,
+ 0xd5, 0x1b, 0x84, 0x40, 0x7d, 0xf2, 0xab, 0xc3, 0xe5, 0x09, 0x8d, 0x53, 0x43, 0xcb, 0x30, 0x1d,
+ 0x1a, 0x4d, 0x1b, 0xeb, 0x8e, 0xd1, 0xc1, 0x41, 0x39, 0x45, 0x57, 0x02, 0x14, 0x74, 0x87, 0x40,
+ 0xd0, 0x6b, 0x50, 0x34, 0x71, 0xd0, 0xf2, 0x2d, 0x2f, 0x74, 0x7d, 0xdd, 0x32, 0xcb, 0xe9, 0x15,
+ 0x65, 0x35, 0x5d, 0x2f, 0x1d, 0x1d, 0x2e, 0x17, 0x36, 0x23, 0x44, 0x63, 0x53, 0x2b, 0xc4, 0xdd,
+ 0x1a, 0x26, 0xba, 0x09, 0xd3, 0x44, 0x33, 0x75, 0xa6, 0xac, 0xe5, 0xc9, 0x15, 0x65, 0x75, 0x7a,
+ 0xed, 0xa2, 0xc4, 0x34, 0x43, 0x54, 0x99, 0x16, 0x57, 0x1f, 0xb9, 0x0e, 0xde, 0xa0, 0x10, 0xce,
+ 0x1f, 0x7c, 0x12, 0x41, 0xd0, 0x47, 0x30, 0x27, 0xd1, 0xd2, 0x6d, 0xdc, 0xc3, 0x76, 0x39, 0xb3,
+ 0xa2, 0xac, 0xce, 0xac, 0x5d, 0x49, 0x10, 0x43, 0x4c, 0xb3, 0xeb, 0x53, 0x2d, 0xb8, 0x45, 0x06,
+ 0x6a, 0xb3, 0x31, 0x65, 0x0a, 0xa8, 0xbc, 0x09, 0x19, 0x2a, 0x19, 0x84, 0x60, 0xb2, 0x1b, 0x60,
+ 0x9f, 0xef, 0x0b, 0xfd, 0x46, 0x4b, 0x00, 0x9e, 0x6f, 0xf5, 0x2c, 0x1b, 0xb7, 0x63, 0xf1, 0xc4,
+ 0x10, 0xf5, 0x06, 0x9c, 0xb9, 0x4f, 0x84, 0x35, 0xfa, 0x36, 0xa3, 0x79, 0xc8, 0x50, 0xf9, 0x96,
+ 0x53, 0x14, 0xc1, 0x1a, 0xea, 0x1f, 0xe4, 0x60, 0xbe, 0x9f, 0x12, 0xdf, 0xf9, 0xed, 0x81, 0x9d,
+ 0x7f, 0x2d, 0x61, 0xc9, 0xc3, 0x08, 0x0c, 0xdd, 0xf6, 0x87, 0x90, 0x6d, 0xb9, 0x76, 0xb7, 0xe3,
+ 0xb0, 0x35, 0x4d, 0xaf, 0xbd, 0x3e, 0x2e, 0xd5, 0x0d, 0x3a, 0x9c, 0x93, 0x15, 0xc4, 0xd0, 0x03,
+ 0xc8, 0x5a, 0x8e, 0x89, 0x9f, 0xe0, 0xa0, 0x9c, 0x3e, 0x1d, 0xb7, 0x0d, 0x32, 0x5c, 0x90, 0xe5,
+ 0xb4, 0x88, 0x96, 0xfa, 0x86, 0xd3, 0x26, 0x2a, 0xd0, 0x75, 0x42, 0xaa, 0x4d, 0x69, 0x0d, 0x28,
+ 0x68, 0x83, 0x40, 0xd0, 0x35, 0x58, 0x68, 0xf9, 0xd8, 0x08, 0xb1, 0xce, 0xb4, 0x99, 0x58, 0x32,
+ 0xdc, 0xc1, 0x4e, 0x48, 0xf5, 0x24, 0xaf, 0xcd, 0x33, 0x2c, 0x9d, 0x71, 0x5b, 0xe0, 0x06, 0x95,
+ 0x74, 0xea, 0x1b, 0x57, 0xd2, 0xec, 0x37, 0xa5, 0xa4, 0xc7, 0x8f, 0x61, 0x6e, 0x94, 0x63, 0xf8,
+ 0x4c, 0xba, 0x5d, 0xf9, 0x7b, 0x05, 0xa6, 0xd8, 0x36, 0x93, 0xe1, 0xc4, 0x40, 0x88, 0xe1, 0xe4,
+ 0x9b, 0xc0, 0xc2, 0x03, 0x4f, 0xa8, 0x31, 0xfd, 0x26, 0x7a, 0xef, 0x74, 0x6d, 0x9b, 0xaa, 0x37,
+ 0x31, 0x14, 0x39, 0x2d, 0x6a, 0xa3, 0x8b, 0x64, 0x09, 0x3b, 0x46, 0xd7, 0x0e, 0xf5, 0x9e, 0x61,
+ 0x77, 0x31, 0xdd, 0xc6, 0x3c, 0x61, 0x98, 0x02, 0x1f, 0x12, 0x18, 0xba, 0x0a, 0x67, 0xdb, 0xd8,
+ 0xc1, 0x4c, 0x16, 0x3a, 0x7e, 0xe2, 0xf9, 0x38, 0x08, 0x2c, 0xd7, 0x11, 0xfb, 0x18, 0x23, 0xb7,
+ 0x22, 0x1c, 0x5a, 0x80, 0xa9, 0x5d, 0xcb, 0x34, 0xb1, 0x43, 0xb7, 0x30, 0xa7, 0xf1, 0x56, 0xe5,
+ 0x4b, 0x05, 0x32, 0x54, 0x9f, 0x86, 0xf2, 0xbf, 0x00, 0x53, 0x5d, 0xc7, 0xda, 0xef, 0xb2, 0x15,
+ 0xe4, 0x34, 0xde, 0x42, 0x25, 0x48, 0x07, 0x78, 0x9f, 0xd9, 0x39, 0x8d, 0x7c, 0x92, 0x9e, 0x4c,
+ 0xc1, 0x39, 0xcb, 0xbc, 0x45, 0x2f, 0x01, 0xcb, 0xc7, 0xad, 0x30, 0x66, 0x30, 0x06, 0xa0, 0x32,
+ 0x64, 0xc9, 0x15, 0x6a, 0x39, 0x6d, 0xce, 0x96, 0x68, 0x12, 0x29, 0x59, 0x1d, 0xcf, 0xb6, 0x5a,
+ 0x56, 0x48, 0x55, 0x24, 0xa7, 0x45, 0x6d, 0x75, 0x0b, 0xe6, 0x22, 0x2d, 0x7d, 0x06, 0x73, 0xf2,
+ 0x65, 0x1a, 0x90, 0x4c, 0x87, 0x1b, 0x93, 0x81, 0x83, 0xa4, 0x1c, 0x3b, 0x48, 0x17, 0xa1, 0xe8,
+ 0x63, 0xc2, 0x8a, 0xc1, 0xbb, 0xa4, 0x68, 0x97, 0x02, 0x07, 0xb2, 0x4e, 0xdf, 0x02, 0x70, 0x5c,
+ 0x53, 0x10, 0x61, 0x82, 0xca, 0x13, 0x08, 0x43, 0xaf, 0x43, 0x86, 0x9c, 0xbf, 0x80, 0x5b, 0xfd,
+ 0x17, 0x64, 0xf5, 0x67, 0x3e, 0x45, 0x55, 0xf8, 0x14, 0xd5, 0xdb, 0x0f, 0x37, 0x36, 0x28, 0x8b,
+ 0xfc, 0x48, 0xb1, 0x91, 0xc8, 0x84, 0x62, 0xc7, 0x0a, 0x02, 0xcb, 0x69, 0xeb, 0x84, 0x6e, 0x50,
+ 0xce, 0x50, 0x6b, 0xf2, 0x5b, 0x27, 0x59, 0x93, 0xbe, 0xd5, 0x56, 0x6f, 0x33, 0x12, 0x77, 0x5c,
+ 0x13, 0x73, 0xf2, 0x85, 0x4e, 0x0c, 0x0a, 0x88, 0xd5, 0x30, 0x3c, 0xcf, 0x77, 0x9f, 0x58, 0x1d,
+ 0x62, 0x3a, 0x4c, 0x2b, 0xd8, 0xd3, 0x9b, 0x07, 0x21, 0x0e, 0xe8, 0x86, 0x4d, 0x6a, 0xf3, 0x12,
+ 0x76, 0xd3, 0x0a, 0xf6, 0xea, 0x04, 0x57, 0xf9, 0x00, 0xa6, 0x25, 0xc2, 0xe8, 0x22, 0x64, 0xa9,
+ 0x30, 0x2c, 0x93, 0x6d, 0x4d, 0x1d, 0x8e, 0x0e, 0x97, 0xa7, 0x08, 0xaa, 0xb1, 0xa9, 0x4d, 0x11,
+ 0x54, 0xc3, 0x24, 0x62, 0xc5, 0xbe, 0xef, 0xfa, 0x7a, 0x07, 0x07, 0x81, 0xd1, 0x16, 0x9b, 0x55,
+ 0xa0, 0xc0, 0xdb, 0x0c, 0xa6, 0x2e, 0xc0, 0xfc, 0x1d, 0xd7, 0x39, 0xb6, 0xfb, 0xea, 0xcf, 0x15,
+ 0x38, 0x3b, 0x80, 0xe0, 0xdb, 0xf9, 0x3d, 0x98, 0x23, 0x1e, 0x8c, 0x1e, 0x60, 0xdf, 0xc2, 0x81,
+ 0xce, 0xa4, 0xae, 0x50, 0xa9, 0x7f, 0x7b, 0x2c, 0x51, 0x69, 0xb3, 0x84, 0xce, 0x36, 0x25, 0x43,
+ 0x11, 0xe8, 0x43, 0x40, 0x96, 0x13, 0x62, 0xdf, 0x31, 0x6c, 0xbd, 0x1b, 0x60, 0x4e, 0x3b, 0x75,
+ 0x1a, 0xda, 0x25, 0x41, 0xe8, 0x41, 0xc0, 0x30, 0xea, 0x0c, 0x14, 0x1e, 0x04, 0xd8, 0x8f, 0x56,
+ 0xf8, 0x43, 0x28, 0xf2, 0x36, 0x5f, 0x58, 0x03, 0x32, 0xc4, 0x44, 0x89, 0x3b, 0x2f, 0x69, 0xc2,
+ 0xbe, 0x81, 0xb4, 0x25, 0x54, 0x89, 0x52, 0xa8, 0xa8, 0x30, 0x49, 0x80, 0xe4, 0x0c, 0x11, 0x80,
+ 0x64, 0x06, 0xa2, 0xb6, 0xfa, 0x63, 0x05, 0x8a, 0x5b, 0x3d, 0xec, 0xc4, 0x27, 0x4e, 0x18, 0x37,
+ 0x45, 0x32, 0x6e, 0xe7, 0x21, 0x1f, 0x1a, 0x7e, 0x1b, 0x87, 0x64, 0xaf, 0xd9, 0xb9, 0xc8, 0x31,
+ 0x40, 0xc3, 0x24, 0xc7, 0xd0, 0xb6, 0x3a, 0x16, 0x3b, 0x0e, 0x19, 0x8d, 0x35, 0xd0, 0x2b, 0x30,
+ 0xd7, 0x75, 0x7c, 0x6c, 0x1a, 0xad, 0x10, 0x9b, 0x3a, 0xa6, 0x53, 0xd0, 0x63, 0x91, 0xd3, 0x4a,
+ 0x31, 0x82, 0x4d, 0xad, 0xfe, 0x3a, 0x05, 0x33, 0x82, 0x0b, 0x2e, 0x87, 0xdb, 0x30, 0xc5, 0x07,
+ 0x31, 0x41, 0xd4, 0x12, 0x04, 0xd1, 0x3f, 0x94, 0x35, 0xc5, 0xb5, 0xcf, 0x88, 0x54, 0xfe, 0x28,
+ 0x05, 0x19, 0x0a, 0x47, 0x75, 0xc8, 0x47, 0xbe, 0x2f, 0xd7, 0x98, 0x4a, 0x95, 0x79, 0xc7, 0x55,
+ 0xe1, 0x1d, 0x57, 0xef, 0x8b, 0x1e, 0xf5, 0x1c, 0x21, 0xf3, 0xf9, 0xaf, 0x96, 0x15, 0x2d, 0x1e,
+ 0x46, 0xcc, 0x00, 0xa5, 0xab, 0x4b, 0xd7, 0x40, 0x9e, 0x42, 0xee, 0x13, 0x71, 0xbd, 0x2c, 0x8b,
+ 0x8b, 0x79, 0x8d, 0x85, 0xa3, 0xc3, 0xe5, 0xdc, 0x7d, 0x26, 0xb2, 0x4d, 0x49, 0x78, 0x6b, 0x40,
+ 0x0c, 0x8c, 0xeb, 0x87, 0xe4, 0xc0, 0x5b, 0x26, 0xbb, 0xe0, 0xeb, 0xb3, 0x47, 0x87, 0xcb, 0xd3,
+ 0x9a, 0x80, 0x37, 0x36, 0xb5, 0xe9, 0xa8, 0x53, 0xc3, 0x24, 0x3b, 0x64, 0x39, 0x3b, 0x2e, 0xb7,
+ 0xbb, 0xf4, 0x9b, 0x4c, 0xc9, 0x8c, 0x38, 0x21, 0x42, 0xce, 0x70, 0x81, 0x4d, 0xf9, 0x80, 0x02,
+ 0xc9, 0x94, 0x0c, 0xdd, 0x30, 0xd5, 0xbf, 0x51, 0xa0, 0xb4, 0x8d, 0xc3, 0x07, 0x0d, 0xe2, 0x2d,
+ 0x8b, 0x5d, 0xff, 0x1e, 0xc0, 0x1e, 0x3e, 0x60, 0xd7, 0x93, 0x10, 0xf9, 0xf5, 0x04, 0x91, 0x0f,
+ 0x12, 0xa8, 0xbe, 0x87, 0x0f, 0xe8, 0x3d, 0x16, 0x6c, 0x39, 0xa1, 0x7f, 0xa0, 0xe5, 0xf7, 0x44,
+ 0xbb, 0xf2, 0x16, 0xcc, 0xf4, 0x23, 0xc9, 0x3d, 0xb3, 0x87, 0x0f, 0xb8, 0x86, 0x91, 0x4f, 0xa2,
+ 0x43, 0xec, 0x66, 0x24, 0xb2, 0x2c, 0x68, 0xac, 0x71, 0x3d, 0xf5, 0x1d, 0x45, 0x3d, 0x03, 0x73,
+ 0xd2, 0x5c, 0x6c, 0x87, 0xd5, 0x17, 0xa1, 0x74, 0x63, 0x70, 0x05, 0x08, 0x26, 0xf7, 0xf0, 0x81,
+ 0x08, 0x49, 0xe8, 0xb7, 0xfa, 0xf3, 0x14, 0xcc, 0xdd, 0x18, 0x1c, 0x8d, 0x7e, 0x77, 0xc8, 0x5a,
+ 0xdf, 0x4c, 0x58, 0xeb, 0x31, 0x0a, 0x03, 0x8b, 0xe5, 0xaa, 0x26, 0x2d, 0x79, 0x07, 0x32, 0xec,
+ 0x52, 0x8f, 0xd6, 0xa5, 0x48, 0xeb, 0x42, 0x37, 0xa0, 0x60, 0x1b, 0x41, 0xa8, 0x77, 0x3d, 0xd3,
+ 0x08, 0xb1, 0xc9, 0x6d, 0xcb, 0x68, 0x5a, 0x38, 0x4d, 0x46, 0x3e, 0x60, 0x03, 0x2b, 0xde, 0x08,
+ 0xa2, 0x7d, 0x57, 0x16, 0xed, 0xf4, 0xda, 0xda, 0x58, 0x0b, 0xa5, 0xa4, 0xe5, 0xed, 0x28, 0xc1,
+ 0xcc, 0x86, 0xdd, 0x0d, 0x42, 0xec, 0x0b, 0x0b, 0xf6, 0x85, 0x02, 0xb3, 0x11, 0x88, 0x4b, 0xf8,
+ 0x55, 0x80, 0x16, 0x03, 0xc5, 0x97, 0x43, 0xf1, 0xe8, 0x70, 0x39, 0xcf, 0x3b, 0x36, 0x36, 0xb5,
+ 0x3c, 0xef, 0xd0, 0x30, 0x89, 0xa9, 0x88, 0xcf, 0x00, 0x76, 0x88, 0x19, 0x35, 0xb9, 0x67, 0x52,
+ 0x8a, 0x10, 0x5b, 0x0c, 0x8e, 0xbe, 0x0d, 0x08, 0x13, 0xa3, 0xea, 0xf9, 0x56, 0x80, 0xa3, 0xde,
+ 0xcc, 0xe3, 0x9a, 0x8b, 0x31, 0xbc, 0xbb, 0xea, 0x41, 0x61, 0xd3, 0x37, 0x2c, 0x47, 0x68, 0xc9,
+ 0x45, 0x28, 0x7a, 0x3e, 0x5e, 0xbb, 0x7c, 0x45, 0xef, 0x18, 0xfe, 0x1e, 0x75, 0x0b, 0xd3, 0xab,
+ 0x19, 0xad, 0xc0, 0x80, 0xb7, 0x29, 0x8c, 0x18, 0xcc, 0x60, 0xb7, 0x1b, 0x9a, 0xee, 0x63, 0x47,
+ 0xf8, 0x72, 0xa2, 0x8d, 0x16, 0x21, 0x67, 0xba, 0xba, 0x49, 0x68, 0x72, 0x73, 0x96, 0x35, 0x5d,
+ 0x3a, 0xc5, 0xcd, 0xc9, 0x5c, 0xaa, 0x94, 0x56, 0x7f, 0xa6, 0x40, 0x91, 0x4f, 0x19, 0xbb, 0x1e,
+ 0x56, 0xc0, 0x86, 0x10, 0x97, 0x88, 0xad, 0x0c, 0xac, 0x60, 0x93, 0x43, 0xd0, 0x75, 0x58, 0xa4,
+ 0x58, 0xdd, 0xc7, 0x1d, 0x06, 0xd2, 0x2d, 0xc7, 0xb4, 0x5a, 0x46, 0xe8, 0xfa, 0x94, 0x81, 0x49,
+ 0xed, 0x9c, 0xc9, 0x48, 0x72, 0x7c, 0x43, 0xa0, 0xd1, 0x3b, 0x70, 0x7e, 0x70, 0xac, 0xf0, 0x83,
+ 0x89, 0x6f, 0xc6, 0xdc, 0xb6, 0xc5, 0xfe, 0xd1, 0x9b, 0x71, 0x87, 0x9b, 0x93, 0x39, 0xa5, 0x94,
+ 0x52, 0x3f, 0x81, 0xc5, 0x4d, 0xdc, 0x72, 0x3b, 0xd4, 0x49, 0x70, 0x9d, 0x6d, 0x9a, 0x0e, 0x11,
+ 0x32, 0xfb, 0x08, 0x72, 0xfc, 0x9e, 0x67, 0xa7, 0x25, 0x53, 0xaf, 0x1f, 0x1d, 0x2e, 0x67, 0xd9,
+ 0x45, 0x1f, 0xfc, 0xd7, 0xe1, 0xf2, 0xd5, 0xb6, 0x15, 0xee, 0x76, 0x9b, 0xd5, 0x96, 0xdb, 0xa9,
+ 0x45, 0xda, 0x65, 0x36, 0xe3, 0xef, 0x9a, 0xb7, 0xd7, 0xae, 0xf1, 0x5c, 0x4c, 0x95, 0x3b, 0x08,
+ 0x59, 0xe6, 0x20, 0x04, 0xea, 0x3f, 0x2b, 0x70, 0x46, 0x9e, 0xfc, 0xff, 0x67, 0x5a, 0xf4, 0x31,
+ 0xcc, 0x71, 0x23, 0xdd, 0xc1, 0x9d, 0x26, 0xf6, 0x83, 0x5d, 0xcb, 0xa3, 0x7b, 0xd3, 0x1f, 0xb6,
+ 0xec, 0xf5, 0xaa, 0x22, 0x7d, 0x23, 0x7c, 0x38, 0xe2, 0xbc, 0x45, 0x43, 0xb8, 0xa8, 0x4a, 0x8c,
+ 0x56, 0x0c, 0x57, 0xff, 0x38, 0x0d, 0x95, 0x61, 0x32, 0xe5, 0x4a, 0xf1, 0x08, 0xa6, 0x58, 0xd2,
+ 0x89, 0x87, 0xa1, 0x6f, 0x25, 0xa5, 0x35, 0x9e, 0x4a, 0xa6, 0xca, 0x9a, 0xe2, 0xb2, 0x63, 0x14,
+ 0x2b, 0x7f, 0x9a, 0x82, 0x29, 0x86, 0x40, 0x8f, 0xfa, 0x7d, 0xb4, 0x4c, 0x7d, 0x3d, 0xf6, 0xd1,
+ 0x4e, 0x2b, 0x42, 0xe1, 0xda, 0x9d, 0x83, 0xac, 0x15, 0xe8, 0xb6, 0xd5, 0x8b, 0xe2, 0x08, 0x2b,
+ 0xb8, 0x65, 0xf5, 0xf0, 0x71, 0x57, 0x3a, 0x3d, 0xc4, 0x95, 0xbe, 0x07, 0x20, 0x09, 0x7e, 0xf2,
+ 0xb4, 0x82, 0x97, 0x88, 0xd0, 0x60, 0x41, 0x9c, 0xb2, 0x0c, 0x3b, 0xb7, 0xa2, 0xad, 0xde, 0x85,
+ 0xf2, 0x7a, 0x6b, 0x8f, 0xdb, 0x9f, 0x87, 0xd8, 0x97, 0x35, 0xed, 0x1a, 0x64, 0x7b, 0x0c, 0x12,
+ 0x39, 0x04, 0x31, 0x1f, 0x62, 0xf1, 0x62, 0x8c, 0xe8, 0xaa, 0x9e, 0x87, 0xc5, 0x21, 0x14, 0xf9,
+ 0x0d, 0xf5, 0x21, 0x5c, 0x7c, 0x68, 0xd8, 0x96, 0x49, 0x43, 0x6f, 0xa2, 0x19, 0xdf, 0xe4, 0xcc,
+ 0x2f, 0xc2, 0xf3, 0xc9, 0xc4, 0x39, 0x13, 0x9f, 0xa5, 0xe0, 0xec, 0x56, 0x0f, 0xfb, 0x07, 0x64,
+ 0xe3, 0xf8, 0x94, 0x0f, 0x1c, 0x12, 0xa1, 0x61, 0x38, 0x63, 0xb4, 0xf6, 0x74, 0x61, 0xa4, 0xfb,
+ 0x79, 0xb8, 0x9a, 0xa0, 0x8a, 0x4f, 0x93, 0xe1, 0xbb, 0x13, 0xda, 0x9c, 0x31, 0x88, 0x43, 0x4f,
+ 0xe0, 0x5c, 0x8f, 0x33, 0xaa, 0xf3, 0xc3, 0x26, 0xa6, 0x62, 0xb7, 0xd1, 0x3b, 0x09, 0x53, 0x8d,
+ 0x20, 0xbf, 0x77, 0x27, 0xb4, 0xb3, 0xbd, 0xbe, 0x6e, 0x1c, 0x5f, 0xcf, 0xf2, 0x5b, 0x4f, 0xfd,
+ 0x49, 0x0a, 0x16, 0x24, 0x19, 0x30, 0xc9, 0x30, 0x21, 0xec, 0x24, 0x09, 0xe1, 0xda, 0x78, 0x42,
+ 0x60, 0x74, 0x87, 0x4b, 0xe1, 0xe0, 0x24, 0x29, 0x7c, 0xf7, 0xd4, 0x52, 0x88, 0xa6, 0x3d, 0x49,
+ 0x0c, 0x26, 0x94, 0x06, 0x35, 0x01, 0xdd, 0x85, 0xac, 0xcf, 0x3e, 0xf9, 0x9a, 0x2f, 0x27, 0xfb,
+ 0xd8, 0xc7, 0xf5, 0x48, 0x64, 0xab, 0x38, 0x19, 0x75, 0x17, 0xe6, 0x8e, 0xc9, 0x1a, 0x6d, 0x43,
+ 0xce, 0xe7, 0xdf, 0x7c, 0x9e, 0x2b, 0xa3, 0xcd, 0x23, 0xed, 0x15, 0x9f, 0x28, 0x22, 0xa4, 0x6a,
+ 0x30, 0xbb, 0x8d, 0x43, 0xe2, 0x18, 0x04, 0x09, 0x0e, 0xe0, 0x40, 0x14, 0xc2, 0x3d, 0xbe, 0xd4,
+ 0x60, 0x14, 0xc2, 0x1c, 0x28, 0xf5, 0x1f, 0x53, 0xd4, 0x31, 0xe6, 0x44, 0x39, 0xf7, 0xfa, 0xf8,
+ 0x8e, 0x71, 0x1f, 0x81, 0x13, 0x7d, 0xc5, 0xbd, 0xa1, 0xbe, 0x62, 0x5e, 0xf8, 0x8a, 0xc3, 0x72,
+ 0x4d, 0x2b, 0x30, 0x2d, 0xdf, 0xf1, 0x69, 0x8a, 0x92, 0x41, 0x68, 0x01, 0xa6, 0xbc, 0x6e, 0xd3,
+ 0xb6, 0x5a, 0xdc, 0x47, 0xe1, 0xad, 0x8a, 0x3b, 0x82, 0xc3, 0x78, 0xa3, 0xdf, 0x61, 0xbc, 0x32,
+ 0xce, 0x62, 0x8f, 0xf9, 0x8b, 0x2f, 0x40, 0xf1, 0x5d, 0x6c, 0xd8, 0xe1, 0xae, 0xd8, 0xa5, 0x79,
+ 0xc8, 0xf8, 0xd8, 0x30, 0xd9, 0x8c, 0x39, 0x8d, 0x35, 0x88, 0x5b, 0x29, 0xba, 0xf1, 0x0d, 0x9e,
+ 0x83, 0xd9, 0x5b, 0xfc, 0x49, 0x45, 0x78, 0x9a, 0xbf, 0x4e, 0x41, 0x29, 0x86, 0xf1, 0xfd, 0x79,
+ 0x1f, 0x40, 0x3c, 0xbd, 0x44, 0xfb, 0xf3, 0xf2, 0x89, 0xd7, 0x88, 0x20, 0x23, 0xd2, 0x99, 0x31,
+ 0x09, 0xf4, 0x67, 0x0a, 0xe4, 0xd8, 0x3d, 0x8a, 0xc5, 0xdd, 0x9c, 0x94, 0x7c, 0x19, 0x64, 0x88,
+ 0xdf, 0xc8, 0x62, 0xbb, 0xdf, 0x24, 0xf4, 0x7f, 0xf4, 0xab, 0xd3, 0x5d, 0xb4, 0x11, 0x1f, 0x15,
+ 0x0f, 0x8a, 0x7d, 0x74, 0xe5, 0x6d, 0xcb, 0xb0, 0x6d, 0x6b, 0xc8, 0xdb, 0x36, 0xd3, 0x67, 0xc4,
+ 0x87, 0xcb, 0x80, 0x4c, 0x22, 0xb8, 0xe7, 0x97, 0xa9, 0xb4, 0x71, 0x1e, 0x4c, 0xdf, 0x74, 0x9b,
+ 0x81, 0xb4, 0x6d, 0x2c, 0xc8, 0x57, 0xe4, 0x20, 0x7f, 0x41, 0x72, 0x62, 0x68, 0x7a, 0x90, 0xb5,
+ 0xd0, 0x55, 0xae, 0xb4, 0x69, 0xca, 0xca, 0xb2, 0x2c, 0xbe, 0x7d, 0xbb, 0x4a, 0x1f, 0xe8, 0xd8,
+ 0x63, 0x5d, 0x95, 0xc4, 0xcb, 0x4c, 0xab, 0xd5, 0x7f, 0x99, 0x82, 0x02, 0x9b, 0x92, 0x6f, 0xed,
+ 0x16, 0x4c, 0x92, 0x5e, 0x7c, 0x53, 0x5f, 0x49, 0xd8, 0x04, 0x79, 0x18, 0x69, 0xf0, 0x6d, 0xa5,
+ 0xc3, 0x2b, 0xff, 0x93, 0x81, 0xf4, 0x4d, 0xb7, 0x89, 0x16, 0x20, 0xc5, 0xbd, 0xa0, 0x74, 0x7d,
+ 0xea, 0xe8, 0x70, 0x39, 0xd5, 0xd8, 0xd4, 0x52, 0x96, 0x79, 0xca, 0x13, 0x26, 0x27, 0x55, 0x26,
+ 0xfb, 0x93, 0x2a, 0xa8, 0x07, 0x33, 0x7d, 0x29, 0x6b, 0x96, 0xc4, 0x2b, 0xd6, 0xdf, 0x3f, 0x3a,
+ 0x5c, 0x2e, 0xca, 0x39, 0x6b, 0xe2, 0xc5, 0x5e, 0x1f, 0x49, 0x33, 0x82, 0x7d, 0x3b, 0x7a, 0x2d,
+ 0x24, 0xb4, 0xbd, 0x66, 0xb5, 0xb1, 0xa9, 0x15, 0xe5, 0x94, 0x77, 0x20, 0x6d, 0xc7, 0x54, 0xdf,
+ 0x76, 0x5c, 0x87, 0x2c, 0x7b, 0x05, 0x30, 0x69, 0xd2, 0x35, 0x39, 0xd4, 0x9c, 0xa4, 0x61, 0xa6,
+ 0x18, 0x40, 0xc6, 0x06, 0xa1, 0xe1, 0x93, 0xb1, 0xb9, 0x51, 0xc7, 0xf2, 0x01, 0xe8, 0x2d, 0xc8,
+ 0xed, 0x58, 0x8e, 0x15, 0xec, 0x62, 0xb3, 0x9c, 0x1f, 0x71, 0x70, 0x34, 0x82, 0x8c, 0xee, 0xb8,
+ 0xa6, 0xb5, 0x63, 0x61, 0xb3, 0x0c, 0xa3, 0x8e, 0x16, 0x23, 0x48, 0x9c, 0xb8, 0xe3, 0x1b, 0x34,
+ 0x1f, 0xad, 0xb7, 0xdc, 0x8e, 0x67, 0x63, 0xb2, 0x84, 0xe9, 0x15, 0x65, 0x35, 0xa5, 0xcd, 0x09,
+ 0xcc, 0x86, 0x40, 0x10, 0xfd, 0xa6, 0x19, 0xc9, 0x72, 0x81, 0x19, 0x5f, 0xda, 0x40, 0xf7, 0xe0,
+ 0xcc, 0xae, 0xd5, 0xde, 0x7d, 0x6c, 0x10, 0xff, 0x20, 0xce, 0x1a, 0x15, 0x47, 0xe4, 0x06, 0x45,
+ 0x83, 0x23, 0x0c, 0xb9, 0x91, 0x62, 0x92, 0x26, 0x6e, 0x59, 0x1d, 0xc3, 0x2e, 0xcf, 0xd0, 0x49,
+ 0x4b, 0x11, 0x62, 0x93, 0xc1, 0xd1, 0x0b, 0x30, 0xe3, 0x77, 0x1d, 0x1a, 0xd4, 0xf1, 0x8d, 0x9d,
+ 0xa5, 0x3d, 0x8b, 0x1c, 0xca, 0x9d, 0xfc, 0x0b, 0x90, 0x8f, 0x9f, 0x7d, 0x4a, 0x2c, 0x1b, 0x15,
+ 0x01, 0x54, 0x04, 0xa5, 0x5b, 0x6e, 0x8b, 0xbd, 0x06, 0x0b, 0x53, 0xfa, 0xbf, 0x0a, 0xcc, 0x49,
+ 0xc0, 0x28, 0xa9, 0x9a, 0xb7, 0x05, 0x70, 0x84, 0x37, 0xb7, 0x63, 0x04, 0x22, 0x88, 0xb8, 0xe5,
+ 0x22, 0x6a, 0x95, 0x3f, 0x51, 0x20, 0x27, 0xb0, 0xe8, 0x39, 0x28, 0x10, 0x8c, 0x6d, 0x85, 0x07,
+ 0x7a, 0x7c, 0xf9, 0x4c, 0x0b, 0xd8, 0x7b, 0xf8, 0x80, 0xac, 0x3c, 0xea, 0x12, 0x9b, 0xb5, 0xbc,
+ 0x56, 0x14, 0x50, 0x76, 0x67, 0x56, 0x20, 0x67, 0x1b, 0xa1, 0x15, 0x76, 0x4d, 0x66, 0x6c, 0x14,
+ 0x2d, 0x6a, 0x13, 0xa9, 0xd8, 0xae, 0xd3, 0x66, 0xc8, 0x49, 0x8a, 0x8c, 0x01, 0x6a, 0x1d, 0x66,
+ 0x35, 0xc3, 0x69, 0xe3, 0x5b, 0x6e, 0x5b, 0xd8, 0xb8, 0x45, 0xc8, 0xb1, 0x27, 0x02, 0x61, 0x26,
+ 0xb4, 0x2c, 0x6d, 0xcb, 0x39, 0xce, 0x94, 0x64, 0xfe, 0xd4, 0xff, 0x4c, 0x43, 0x29, 0x26, 0x12,
+ 0x5d, 0x48, 0x22, 0x71, 0xc9, 0x2e, 0x8f, 0xa4, 0xfb, 0x73, 0x70, 0xf0, 0xd0, 0xd4, 0xe5, 0x3f,
+ 0x28, 0x00, 0x77, 0x7d, 0x1c, 0x86, 0x07, 0x0d, 0x67, 0xc7, 0x25, 0xc2, 0xe3, 0x79, 0x23, 0x1a,
+ 0xe8, 0x0b, 0xe1, 0x71, 0x18, 0xb1, 0x2e, 0x64, 0x21, 0x0e, 0x7e, 0xcc, 0xd0, 0x4c, 0x6c, 0x59,
+ 0x07, 0x3f, 0xa6, 0xa8, 0x8b, 0x50, 0x34, 0x4c, 0x13, 0x9b, 0x3a, 0x8f, 0xc5, 0xb8, 0x69, 0x2b,
+ 0x50, 0xa0, 0xc6, 0x60, 0xe8, 0x25, 0x98, 0xf5, 0x71, 0xc7, 0xed, 0x49, 0xdd, 0x98, 0x89, 0x9b,
+ 0xe1, 0x60, 0xd1, 0x71, 0x01, 0xa6, 0x7c, 0x6c, 0x04, 0xd1, 0x1b, 0x10, 0x6f, 0xa1, 0x32, 0x64,
+ 0x4d, 0xf6, 0xba, 0xc9, 0x2d, 0x91, 0x68, 0x56, 0x7e, 0xa6, 0x88, 0x3c, 0xec, 0x4d, 0xc8, 0xd0,
+ 0x05, 0x72, 0x9f, 0xb0, 0x7a, 0xe2, 0x7d, 0x25, 0x84, 0x25, 0xcb, 0x88, 0x91, 0x40, 0x1f, 0xc1,
+ 0xb4, 0x47, 0x25, 0xa4, 0xd3, 0xc4, 0x28, 0x73, 0x5c, 0x5e, 0x1f, 0x47, 0xf0, 0xb1, 0x80, 0x85,
+ 0x4b, 0xe0, 0x45, 0x10, 0x9e, 0x23, 0x59, 0x85, 0xd2, 0xbd, 0x2e, 0xf6, 0x0f, 0xee, 0xda, 0x86,
+ 0x23, 0x5d, 0x8b, 0xfb, 0x04, 0x26, 0x7c, 0x36, 0xda, 0x50, 0x3d, 0x98, 0x93, 0x7a, 0x72, 0xbd,
+ 0xf8, 0x10, 0xce, 0x9b, 0x56, 0x10, 0x06, 0xfb, 0xb6, 0xee, 0xed, 0x1e, 0x04, 0x56, 0xcb, 0xb0,
+ 0x75, 0xda, 0x5d, 0xf7, 0x6c, 0xc3, 0xe1, 0x49, 0xb2, 0x0b, 0x47, 0x87, 0xcb, 0xe5, 0x4d, 0x2b,
+ 0x08, 0xb7, 0xef, 0xdd, 0xba, 0xcb, 0x7b, 0xc5, 0xa4, 0xca, 0x9c, 0xc0, 0x31, 0x8c, 0xba, 0xc8,
+ 0xea, 0x27, 0xc8, 0x48, 0xdf, 0x6a, 0x76, 0xc3, 0x38, 0x44, 0x52, 0xff, 0x16, 0xa0, 0x7c, 0x1c,
+ 0xc7, 0x99, 0xf2, 0xa0, 0x28, 0x9e, 0xd3, 0x98, 0xe8, 0xd8, 0xa9, 0xdf, 0x3a, 0xa1, 0xc6, 0x62,
+ 0x18, 0xad, 0xa8, 0xf8, 0x82, 0x88, 0x4c, 0xf6, 0x75, 0x0b, 0xa6, 0x84, 0x40, 0x1d, 0x28, 0x48,
+ 0xaf, 0xc5, 0xe2, 0xb1, 0x7c, 0xf3, 0x34, 0x13, 0xc6, 0x2f, 0xc8, 0x7d, 0xbe, 0xf5, 0x74, 0xfc,
+ 0x82, 0x1c, 0x54, 0xbe, 0x50, 0x00, 0xe2, 0x7e, 0x44, 0x61, 0x59, 0x04, 0xc6, 0x37, 0x8c, 0xb7,
+ 0xd0, 0x3a, 0x4c, 0xf1, 0xa7, 0xf0, 0xd4, 0xb8, 0x4f, 0xe1, 0x7c, 0x20, 0xcd, 0x79, 0xb2, 0x17,
+ 0xf0, 0x60, 0xdf, 0x66, 0xe7, 0x85, 0xe7, 0x3c, 0x29, 0x74, 0xfb, 0xde, 0x2d, 0x2d, 0xcf, 0x3a,
+ 0x6c, 0xef, 0xdb, 0x37, 0x27, 0x73, 0xe9, 0xd2, 0x64, 0xe5, 0x0f, 0xd3, 0x90, 0xa7, 0xcf, 0x46,
+ 0x54, 0x34, 0x5f, 0x29, 0x50, 0xee, 0xcb, 0x9b, 0xe8, 0xcd, 0x03, 0x3d, 0xce, 0xde, 0x10, 0x39,
+ 0x7d, 0x70, 0x1a, 0x39, 0x45, 0x33, 0x54, 0x35, 0x29, 0x01, 0x53, 0xa7, 0x51, 0x56, 0xc3, 0x64,
+ 0xa2, 0x7b, 0xe3, 0xb4, 0x3e, 0xea, 0xbc, 0x3f, 0x84, 0x26, 0x7a, 0x1e, 0x66, 0xe4, 0x9a, 0x80,
+ 0xe8, 0xd5, 0xa8, 0x10, 0xef, 0x4d, 0xc3, 0x44, 0xdf, 0x05, 0x30, 0x7d, 0xd7, 0xf3, 0xb0, 0xa9,
+ 0x1b, 0x2c, 0x49, 0x34, 0xca, 0xad, 0x9a, 0xe7, 0x63, 0xd6, 0xc3, 0xca, 0x0d, 0x58, 0x7c, 0xea,
+ 0x92, 0x86, 0xb8, 0xc8, 0x7d, 0xaf, 0x0c, 0x69, 0xc9, 0xdb, 0xad, 0x7c, 0x96, 0x82, 0x82, 0xac,
+ 0xbf, 0x28, 0x04, 0x56, 0x0a, 0x24, 0x9f, 0x8a, 0xf7, 0x9f, 0xf5, 0x54, 0xc4, 0x3b, 0xd1, 0x17,
+ 0x0b, 0x86, 0x02, 0x5a, 0xf9, 0x14, 0x66, 0xfa, 0xbb, 0x0c, 0x09, 0xcf, 0xb6, 0xfb, 0xc3, 0xb3,
+ 0xb7, 0x9f, 0x49, 0x23, 0xfa, 0x64, 0xa0, 0xc4, 0xe5, 0x5e, 0x49, 0x0c, 0x3c, 0xec, 0x67, 0xe0,
+ 0xb7, 0x9f, 0x55, 0x2a, 0x32, 0x0f, 0x3f, 0x84, 0xd2, 0xe0, 0xa9, 0x1e, 0xc2, 0xc1, 0xfd, 0x7e,
+ 0x0e, 0xde, 0x79, 0x36, 0xe3, 0x21, 0xcd, 0xcf, 0x53, 0xf8, 0xe7, 0xe0, 0xec, 0x6d, 0x5a, 0x70,
+ 0x77, 0x9b, 0x97, 0x0d, 0x0a, 0x5b, 0xfa, 0xaf, 0x0a, 0x2c, 0x0c, 0x62, 0xb8, 0x25, 0x35, 0x20,
+ 0x27, 0x8a, 0x0c, 0xb9, 0xba, 0x24, 0x65, 0x75, 0x86, 0x13, 0xa9, 0x0a, 0x80, 0xac, 0x1e, 0x11,
+ 0xd9, 0xca, 0xef, 0x40, 0xb1, 0xaf, 0xc3, 0x10, 0xc9, 0xbc, 0xd6, 0x2f, 0x19, 0x39, 0xf2, 0xea,
+ 0x86, 0x96, 0x5d, 0xe5, 0x75, 0x84, 0xd1, 0xc4, 0x52, 0xc0, 0xf7, 0xd3, 0x14, 0x9c, 0xd9, 0x72,
+ 0xf6, 0xbb, 0xb8, 0x8b, 0xe9, 0xed, 0x28, 0xae, 0xb8, 0xdf, 0x64, 0x06, 0x99, 0x5d, 0x9f, 0x91,
+ 0x73, 0xc7, 0x1a, 0xe8, 0x63, 0xc9, 0x0f, 0xa3, 0x6f, 0xca, 0xf5, 0x8d, 0xa3, 0xc3, 0xe5, 0x2c,
+ 0xe5, 0x8a, 0xce, 0x79, 0x6d, 0xac, 0x39, 0xf9, 0xb8, 0xd8, 0x99, 0xbb, 0x04, 0x73, 0xc1, 0x9e,
+ 0xe5, 0xe9, 0xc1, 0xae, 0xdb, 0xb5, 0x4d, 0x9d, 0x71, 0xc0, 0xf2, 0x24, 0xb3, 0x04, 0xb1, 0x4d,
+ 0xe1, 0xf7, 0x08, 0x58, 0xfd, 0xab, 0x14, 0xcc, 0xf7, 0x4b, 0x85, 0xef, 0xf7, 0xbd, 0xd8, 0xc5,
+ 0x61, 0xdb, 0xfd, 0x46, 0x52, 0x52, 0x6b, 0x08, 0x85, 0xaa, 0xa8, 0xff, 0x8a, 0x7c, 0xa3, 0xbf,
+ 0x53, 0x20, 0xcb, 0x81, 0xbf, 0x51, 0xa9, 0xbf, 0x3d, 0xe0, 0xa1, 0xbe, 0x90, 0x54, 0xd4, 0xe0,
+ 0x1b, 0x2d, 0x4c, 0x3d, 0x2e, 0xe1, 0x8f, 0xc6, 0xa1, 0x52, 0x5a, 0x0a, 0x95, 0xd4, 0xb3, 0x70,
+ 0x66, 0x63, 0xd7, 0xf0, 0xc3, 0x0d, 0x16, 0xa4, 0x8a, 0x13, 0xf3, 0x08, 0xe6, 0xfb, 0xc1, 0x5c,
+ 0x7c, 0x75, 0xc8, 0xf2, 0x70, 0x96, 0x8b, 0x4f, 0x95, 0x98, 0x08, 0x83, 0xaa, 0xa8, 0x85, 0xa5,
+ 0x83, 0xb7, 0x59, 0x5d, 0x51, 0x54, 0x72, 0xc7, 0x70, 0x97, 0xde, 0x83, 0x85, 0xe1, 0x45, 0x64,
+ 0x68, 0x1a, 0xb2, 0x0f, 0xee, 0xbc, 0x77, 0xe7, 0xfd, 0x0f, 0xee, 0x94, 0x26, 0x48, 0x63, 0xe3,
+ 0xd6, 0x83, 0xed, 0xfb, 0x5b, 0x5a, 0x49, 0x41, 0x05, 0xc8, 0x6d, 0xae, 0xdf, 0x5f, 0xaf, 0xaf,
+ 0x6f, 0x6f, 0x95, 0x52, 0x28, 0x0f, 0x99, 0xfb, 0xeb, 0xf5, 0x5b, 0x5b, 0xa5, 0xf4, 0xda, 0x7f,
+ 0x57, 0x20, 0xb3, 0x6e, 0x76, 0x2c, 0x07, 0x85, 0x90, 0xa1, 0x95, 0x15, 0xe8, 0xa5, 0x93, 0x6b,
+ 0x2f, 0xe8, 0x22, 0x2b, 0xab, 0xa3, 0x16, 0x69, 0xa8, 0xe5, 0x1f, 0xfd, 0xd3, 0x7f, 0xfc, 0x34,
+ 0x85, 0x50, 0xa9, 0xa6, 0xd3, 0xa2, 0xe7, 0x5a, 0xef, 0x4a, 0x8d, 0x16, 0x6b, 0xa0, 0x9f, 0x28,
+ 0x90, 0x8f, 0x8a, 0x6d, 0xd1, 0x2b, 0x23, 0x14, 0xb9, 0x46, 0xd3, 0xbf, 0x3a, 0x5a, 0x67, 0xce,
+ 0xc2, 0x05, 0xca, 0xc2, 0x02, 0x9a, 0x97, 0x58, 0x88, 0xea, 0x77, 0xd1, 0x5f, 0x28, 0x30, 0x3b,
+ 0x50, 0x45, 0x8b, 0xae, 0x8c, 0x53, 0x71, 0xcb, 0x58, 0x5a, 0x1b, 0xbf, 0x48, 0x57, 0x7d, 0x89,
+ 0x32, 0xf6, 0x1c, 0x5a, 0x1e, 0xc6, 0x58, 0xed, 0x53, 0xf1, 0xf9, 0x03, 0xf4, 0xd7, 0x0a, 0x14,
+ 0xe4, 0x0a, 0x4a, 0x54, 0x1d, 0xb9, 0xd4, 0x92, 0x71, 0x57, 0x1b, 0xb3, 0x34, 0x53, 0x7d, 0x9d,
+ 0xb2, 0x76, 0x19, 0x55, 0x4f, 0x60, 0xad, 0x46, 0xaf, 0xf2, 0xa0, 0xf6, 0x29, 0xfd, 0xa7, 0x9c,
+ 0x42, 0x5c, 0x16, 0x84, 0x5e, 0x1d, 0xb1, 0x7a, 0x88, 0x71, 0x39, 0x5e, 0xad, 0x91, 0xfa, 0x16,
+ 0xe5, 0xf1, 0x75, 0x74, 0x6d, 0x3c, 0x1e, 0x6b, 0xac, 0xec, 0xec, 0xcf, 0x15, 0x28, 0xf6, 0x55,
+ 0x5a, 0xa1, 0x24, 0x21, 0x0d, 0x2b, 0xd6, 0xaa, 0x5c, 0x1e, 0x7d, 0x00, 0x67, 0x79, 0x85, 0xb2,
+ 0x5c, 0x41, 0x65, 0x89, 0x65, 0xc7, 0x75, 0x18, 0x83, 0x94, 0x89, 0x27, 0x30, 0xc5, 0x8a, 0x7b,
+ 0xd0, 0xea, 0x08, 0xf5, 0x3f, 0x8c, 0x8f, 0x97, 0x47, 0xae, 0x14, 0x52, 0x17, 0x29, 0x03, 0x67,
+ 0xd0, 0x9c, 0xc4, 0x00, 0xb7, 0x72, 0xe4, 0x3c, 0x46, 0x85, 0x27, 0x89, 0xe7, 0x71, 0xb0, 0x14,
+ 0x26, 0xf1, 0x3c, 0x1e, 0xaf, 0x65, 0xe1, 0xe7, 0x51, 0x95, 0x79, 0xe8, 0x5a, 0x64, 0xbb, 0xae,
+ 0x2b, 0x97, 0xd0, 0x67, 0x0a, 0xe4, 0x6f, 0x8c, 0xc4, 0xc6, 0x8d, 0x71, 0xd8, 0x38, 0x56, 0xe9,
+ 0x31, 0x54, 0x14, 0x8c, 0x0d, 0xf4, 0x7b, 0x90, 0xe5, 0xef, 0x4e, 0x28, 0x49, 0xb6, 0xfd, 0x75,
+ 0x21, 0x95, 0x4b, 0xa3, 0x74, 0xe5, 0x93, 0x57, 0xe8, 0xe4, 0xf3, 0x08, 0x49, 0x93, 0xf3, 0x67,
+ 0x39, 0xf4, 0xfb, 0x0a, 0xe4, 0xc4, 0x3b, 0x03, 0xba, 0x34, 0xd2, 0x63, 0x04, 0x63, 0xe0, 0x95,
+ 0x31, 0x1e, 0x2e, 0xd4, 0xf3, 0x94, 0x83, 0xb3, 0xe8, 0x8c, 0xc4, 0x41, 0x20, 0x66, 0xfd, 0xb1,
+ 0x02, 0x53, 0xec, 0x79, 0x22, 0x51, 0x0d, 0xfb, 0x1e, 0x3a, 0x12, 0xd5, 0x70, 0xe0, 0xad, 0xe3,
+ 0x79, 0x3a, 0xf9, 0x52, 0x9f, 0xec, 0x77, 0x69, 0x97, 0x47, 0x79, 0x94, 0xe5, 0x9f, 0x54, 0x10,
+ 0x22, 0x5f, 0x9f, 0x28, 0x88, 0x81, 0x77, 0x93, 0x44, 0x41, 0x0c, 0x3e, 0x5f, 0x0c, 0x15, 0x84,
+ 0x78, 0x1d, 0x41, 0x1e, 0x4c, 0xde, 0x74, 0x9b, 0x01, 0x7a, 0xf1, 0xc4, 0x5c, 0x3c, 0x9b, 0xf9,
+ 0xa5, 0x11, 0x73, 0xf6, 0xea, 0x39, 0x3a, 0xeb, 0x1c, 0x9a, 0x95, 0x66, 0xfd, 0x3e, 0x99, 0x89,
+ 0x1c, 0xc3, 0x28, 0xcf, 0x98, 0xa8, 0xff, 0x83, 0x39, 0xce, 0x44, 0xfd, 0x3f, 0x96, 0xba, 0x1c,
+ 0x7a, 0x2d, 0x46, 0xe9, 0x4b, 0xca, 0x46, 0x94, 0x6d, 0x49, 0x64, 0x63, 0x30, 0x45, 0x94, 0xc8,
+ 0xc6, 0xb1, 0x2c, 0xd1, 0x50, 0x36, 0x68, 0x96, 0xc8, 0x23, 0x13, 0x7f, 0x0c, 0x19, 0x5a, 0x34,
+ 0x94, 0xe8, 0x9a, 0xc8, 0xf5, 0x4e, 0x89, 0xae, 0x49, 0x5f, 0x95, 0x92, 0x3a, 0x71, 0x59, 0x41,
+ 0x8f, 0xa1, 0x20, 0xd7, 0x9a, 0x24, 0x5e, 0xac, 0x43, 0x4a, 0x76, 0x2a, 0xaf, 0x9d, 0xaa, 0x88,
+ 0x45, 0x9d, 0x40, 0xbb, 0x90, 0x8f, 0x1e, 0x7e, 0x13, 0xc5, 0x3b, 0xf8, 0x0c, 0x9d, 0x28, 0xde,
+ 0x63, 0x6f, 0xc9, 0xea, 0x04, 0x39, 0xcb, 0xe8, 0x38, 0x2b, 0xe8, 0xda, 0x98, 0x9c, 0x3f, 0xe3,
+ 0x7a, 0xff, 0x52, 0x81, 0x9c, 0xc8, 0x41, 0x26, 0x9e, 0xe5, 0x81, 0x1c, 0x75, 0xe2, 0x59, 0x1e,
+ 0x4c, 0x6a, 0xaa, 0x6f, 0x53, 0x65, 0x7a, 0xa3, 0xef, 0x2c, 0xd3, 0x20, 0xc8, 0x76, 0xdb, 0x8f,
+ 0x56, 0xd0, 0xd2, 0x10, 0x70, 0xed, 0x53, 0x11, 0x7a, 0xfd, 0x80, 0xf8, 0x82, 0xa5, 0xc1, 0xf8,
+ 0x19, 0xad, 0x8d, 0x15, 0x6c, 0x33, 0xa6, 0xaf, 0x9e, 0x22, 0x40, 0x8f, 0x8c, 0xe2, 0x85, 0x01,
+ 0x7f, 0x46, 0x37, 0x65, 0x76, 0xbe, 0x50, 0x60, 0x6e, 0xdd, 0xb6, 0xfb, 0xe3, 0x69, 0x74, 0x79,
+ 0x8c, 0xd0, 0x9b, 0xb1, 0x78, 0x65, 0xec, 0x60, 0x5d, 0x7d, 0x8e, 0x32, 0x78, 0x1e, 0x2d, 0x4a,
+ 0x0c, 0xb2, 0xf8, 0x5a, 0x44, 0xec, 0xe8, 0x73, 0x05, 0x0a, 0x72, 0xf8, 0x93, 0x78, 0xa0, 0x86,
+ 0x84, 0x4f, 0x89, 0x9e, 0xea, 0xb0, 0xb8, 0x4a, 0x5d, 0xa6, 0x4c, 0x2d, 0xa2, 0x73, 0xf2, 0x4d,
+ 0x4a, 0x3a, 0xf2, 0xa0, 0x89, 0x38, 0x7a, 0x05, 0x39, 0x1c, 0x4d, 0x64, 0x69, 0x48, 0x3e, 0x20,
+ 0x91, 0xa5, 0x61, 0x71, 0xae, 0x7a, 0x91, 0xb2, 0xf4, 0x2d, 0x55, 0xf6, 0xf2, 0x30, 0xeb, 0xa8,
+ 0x53, 0x65, 0xbb, 0xae, 0x5c, 0xaa, 0x5f, 0xfa, 0xea, 0xdf, 0x97, 0x26, 0xbe, 0x3a, 0x5a, 0x52,
+ 0x7e, 0x71, 0xb4, 0xa4, 0xfc, 0xf2, 0x68, 0x49, 0xf9, 0xb7, 0xa3, 0x25, 0xe5, 0xf3, 0xaf, 0x97,
+ 0x26, 0x7e, 0xf1, 0xf5, 0xd2, 0xc4, 0x2f, 0xbf, 0x5e, 0x9a, 0x78, 0x94, 0x13, 0xb3, 0x34, 0xa7,
+ 0x68, 0x6a, 0xf0, 0xea, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x23, 0xe5, 0xc1, 0x31, 0x48, 0x3a,
+ 0x00, 0x00,
}
diff --git a/pkg/server/serverpb/admin.proto b/pkg/server/serverpb/admin.proto
index c74026c14bf0..a499cfc99f67 100644
--- a/pkg/server/serverpb/admin.proto
+++ b/pkg/server/serverpb/admin.proto
@@ -14,6 +14,7 @@ option go_package = "serverpb";
import "config/zonepb/zone.proto";
import "jobs/jobspb/jobs.proto";
+import "roachpb/metadata.proto";
import "server/serverpb/status.proto";
import "storage/enginepb/mvcc.proto";
import "kv/kvserver/kvserverpb/liveness.proto";
@@ -455,6 +456,73 @@ message DecommissionStatusResponse {
repeated Status status = 2 [(gogoproto.nullable) = false];
}
+// TODO(irfansharif): Should all these definitions for the orchestrator process
+// sit in a new server entirely? They're pretty self contained. We've only
+// dumped them into the admin server out of laziness.
+//
+// TODO(irfansharif): Implement custom stringer method for these.
+
+// AckClusterVersionRequest is used to inform the target node of a cluster
+// version bump. The target node is responsible for durably persisting the
+// message and enabling the corresponding version gates.
+message AckClusterVersionRequest {
+ roachpb.Version version = 1;
+}
+
+// AckClusterVersionResponse is the response to an AckClusterVersionRequest.
+message AckClusterVersionResponse { }
+
+// ValidateTargetClusterVersionRequest is used to verify that the target node is
+// running a binary that's able to support the specified cluster version.
+// Specifically:
+//
+// node's minimum supported version <= version <= node's binary version
+message ValidateTargetClusterVersionRequest {
+ roachpb.Version version = 1;
+}
+
+// ValidateTargetClusterVersionResponse is the response to an
+// ValidateTargetClusterVersionRequest.
+message ValidateTargetClusterVersionResponse {
+}
+
+// An EveryNodeRequestUnion contains exactly one of the requests. The values
+// added here must match those in EveryNodeResponseUnion.
+message EveryNodeRequestUnion {
+ oneof value {
+ AckClusterVersionRequest ack_cluster_version = 1;
+ ValidateTargetClusterVersionRequest validate_target_version = 2;
+ }
+}
+
+// An EveryNodeResponseUnion contains exactly one of the responses. The values
+// added here must match those in EveryNodeRequestUnion.
+message EveryNodeResponseUnion {
+ oneof value {
+ AckClusterVersionResponse ack_cluster_version = 1;
+ ValidateTargetClusterVersionResponse validate_target_version = 2;
+ }
+}
+
+// An EveryNodeRequest contains a single request from the list defined in
+// EveryNodeRequestUnion. These requests will power the long running migrations
+// process where the orchestrator of these long running migrations may need to
+// run arbitrary operations across every node in the cluster (depending on the
+// specific migration being executed). One such example is the orchestrator
+// wanting to inform every node in the cluster that a certain cluster version is
+// now active, and that each node should enable the relevant version gates
+// corresponding to said version.
+//
+// TODO(irfansharif): Actually use these as outlined above.
+message EveryNodeRequest {
+ EveryNodeRequestUnion request = 1 [(gogoproto.nullable) = false];
+}
+
+// EveryNodeResponse is the response to an EveryNodeRequest.
+message EveryNodeResponse {
+ EveryNodeResponseUnion response = 1 [(gogoproto.nullable) = false];
+}
+
// SettingsRequest inquires what are the current settings in the cluster.
message SettingsRequest {
// The array of setting names to retrieve.
@@ -864,6 +932,12 @@ service Admin {
rpc Decommission(DecommissionRequest) returns (DecommissionStatusResponse) {
}
+ // EveryNode is an RPC that powers the long running migrations infrastructure,
+ // and lets callers define and execute arbitrary commands across every node in
+ // the cluster. See comments above EveryNodeRequest for additional details.
+ rpc EveryNode(EveryNodeRequest) returns (EveryNodeResponse) {
+ }
+
// DecommissionStatus retrieves the decommissioning status of the specified nodes.
// If this ever becomes exposed via HTTP, ensure that it performs
// authorization. See #42567.
diff --git a/pkg/server/serverpb/everynode.go b/pkg/server/serverpb/everynode.go
new file mode 100644
index 000000000000..8419a6db4ad8
--- /dev/null
+++ b/pkg/server/serverpb/everynode.go
@@ -0,0 +1,35 @@
+// Copyright 2018 The Cockroach Authors.
+//
+// Use of this software is governed by the Business Source License
+// included in the file licenses/BSL.txt.
+//
+// As of the Change Date specified in that file, in accordance with
+// the Business Source License, use of this software will be governed
+// by the Apache License, Version 2.0, included in the file
+// licenses/APL.txt.
+
+package serverpb
+
+//go:generate go run -tags gen-everynode gen_everynode.go
+
+// EveryNodeOp is an interface satisfied by all allowable EveryNode requests.
+type EveryNodeOp interface {
+ Op() string
+}
+
+// EveryNodeOpResp is an interface satisfied by all allowable EveryNode responses.
+type EveryNodeOpResp interface {
+ everyNodeOpResp()
+}
+
+// Op implements the EveryNodeOp interface.
+func (a *AckClusterVersionRequest) Op() string { return "ack-cluster-version" }
+
+// everyNodeOpResp implements the EveryNodeOpResp interface.
+func (a *AckClusterVersionResponse) everyNodeOpResp() {}
+
+// Op implements the EveryNodeOp interface.
+func (a *ValidateTargetClusterVersionRequest) Op() string { return "validate-target-cluster-version" }
+
+// everyNodeOpResp implements the EveryNodeOpResp interface.
+func (a *ValidateTargetClusterVersionResponse) everyNodeOpResp() {}
diff --git a/pkg/server/serverpb/everynode_generated.go b/pkg/server/serverpb/everynode_generated.go
new file mode 100644
index 000000000000..09dbd37c326b
--- /dev/null
+++ b/pkg/server/serverpb/everynode_generated.go
@@ -0,0 +1,59 @@
+// Code generated by gen_batch.go; DO NOT EDIT.
+// GENERATED FILE DO NOT EDIT
+
+package serverpb
+
+
+// GetInner returns the EveryNodeOp contained in the union.
+func (ru EveryNodeRequestUnion) GetInner() EveryNodeOp {
+ switch t := ru.GetValue().(type) {
+ case *EveryNodeRequestUnion_AckClusterVersion:
+ return t.AckClusterVersion
+ case *EveryNodeRequestUnion_ValidateTargetVersion:
+ return t.ValidateTargetVersion
+ default:
+ return nil
+ }
+}
+
+// GetInner returns the EveryNodeOpResp contained in the union.
+func (ru EveryNodeResponseUnion) GetInner() EveryNodeOpResp {
+ switch t := ru.GetValue().(type) {
+ case *EveryNodeResponseUnion_AckClusterVersion:
+ return t.AckClusterVersion
+ case *EveryNodeResponseUnion_ValidateTargetVersion:
+ return t.ValidateTargetVersion
+ default:
+ return nil
+ }
+}
+
+// SetInner sets the EveryNodeOp in the union.
+func (ru *EveryNodeRequestUnion) SetInner(r EveryNodeOp) bool {
+ var union isEveryNodeRequestUnion_Value
+ switch t := r.(type) {
+ case *AckClusterVersionRequest:
+ union = &EveryNodeRequestUnion_AckClusterVersion{t}
+ case *ValidateTargetClusterVersionRequest:
+ union = &EveryNodeRequestUnion_ValidateTargetVersion{t}
+ default:
+ return false
+ }
+ ru.Value = union
+ return true
+}
+
+// SetInner sets the EveryNodeOpResp in the union.
+func (ru *EveryNodeResponseUnion) SetInner(r EveryNodeOpResp) bool {
+ var union isEveryNodeResponseUnion_Value
+ switch t := r.(type) {
+ case *AckClusterVersionResponse:
+ union = &EveryNodeResponseUnion_AckClusterVersion{t}
+ case *ValidateTargetClusterVersionResponse:
+ union = &EveryNodeResponseUnion_ValidateTargetVersion{t}
+ default:
+ return false
+ }
+ ru.Value = union
+ return true
+}
diff --git a/pkg/server/serverpb/gen_everynode.go b/pkg/server/serverpb/gen_everynode.go
new file mode 100644
index 000000000000..a385aa8b124e
--- /dev/null
+++ b/pkg/server/serverpb/gen_everynode.go
@@ -0,0 +1,154 @@
+// Copyright 2020 The Cockroach Authors.
+//
+// Use of this software is governed by the Business Source License
+// included in the file licenses/BSL.txt.
+//
+// As of the Change Date specified in that file, in accordance with
+// the Business Source License, use of this software will be governed
+// by the Apache License, Version 2.0, included in the file
+// licenses/APL.txt.
+
+// This file generates batch_generated.go. It can be run via:
+// go run -tags gen-everynode gen_everynode.go
+//
+// It was mostly cargo culted from pkg/roachpb/gen_batch.go
+
+// +build gen-everynode
+
+package main
+
+import (
+ "fmt"
+ "io"
+ "os"
+ "reflect"
+
+ "github.com/cockroachdb/cockroach/pkg/server/serverpb"
+)
+
+type variantInfo struct {
+ // variantType is the name of the variant type that implements
+ // the union interface (isEveryNodeRequestUnion_Value,isEveryNodeResponseUnion_Value).
+ variantType string
+ // variantName is the unique suffix of variantType. It is also
+ // the name of the single field in this type.
+ variantName string
+ // msgType is the name of the variant's corresponding Request/Response
+ // type.
+ msgType string
+}
+
+var errVariants []variantInfo
+var reqVariants []variantInfo
+var resVariants []variantInfo
+var reqResVariantMapping map[variantInfo]variantInfo
+
+func initVariant(varInstance interface{}) variantInfo {
+ t := reflect.TypeOf(varInstance)
+ f := t.Elem().Field(0) // variants always have 1 field
+ return variantInfo{
+ variantType: t.Elem().Name(),
+ variantName: f.Name,
+ msgType: f.Type.Elem().Name(),
+ }
+}
+
+func initVariants() {
+ _, _, _, resVars := (&serverpb.EveryNodeResponseUnion{}).XXX_OneofFuncs()
+ resVarInfos := make(map[string]variantInfo, len(resVars))
+ for _, v := range resVars {
+ resInfo := initVariant(v)
+ resVariants = append(resVariants, resInfo)
+ resVarInfos[resInfo.variantName] = resInfo
+ }
+
+ _, _, _, reqVars := (&serverpb.EveryNodeRequestUnion{}).XXX_OneofFuncs()
+ reqResVariantMapping = make(map[variantInfo]variantInfo, len(reqVars))
+ for _, v := range reqVars {
+ reqInfo := initVariant(v)
+ reqVariants = append(reqVariants, reqInfo)
+
+ resName := reqInfo.variantName
+ resInfo, ok := resVarInfos[resName]
+ if !ok {
+ panic(fmt.Sprintf("unknown response variant %q", resName))
+ }
+ reqResVariantMapping[reqInfo] = resInfo
+ }
+}
+
+func genGetInner(w io.Writer, unionName, variantName string, variants []variantInfo) {
+ fmt.Fprintf(w, `
+// GetInner returns the %[2]s contained in the union.
+func (ru %[1]s) GetInner() %[2]s {
+ switch t := ru.GetValue().(type) {
+`, unionName, variantName)
+
+ for _, v := range variants {
+ fmt.Fprintf(w, ` case *%s:
+ return t.%s
+`, v.variantType, v.variantName)
+ }
+
+ fmt.Fprint(w, ` default:
+ return nil
+ }
+}
+`)
+}
+
+func genSetInner(w io.Writer, unionName, variantName string, variants []variantInfo) {
+ fmt.Fprintf(w, `
+// SetInner sets the %[2]s in the union.
+func (ru *%[1]s) SetInner(r %[2]s) bool {
+ var union is%[1]s_Value
+ switch t := r.(type) {
+`, unionName, variantName)
+
+ for _, v := range variants {
+ fmt.Fprintf(w, ` case *%s:
+ union = &%s{t}
+`, v.msgType, v.variantType)
+ }
+
+ fmt.Fprint(w, ` default:
+ return false
+ }
+ ru.Value = union
+ return true
+}
+`)
+}
+
+func main() {
+ initVariants()
+
+ f, err := os.Create("everynode_generated.go")
+ if err != nil {
+ fmt.Fprintln(os.Stderr, "Error opening file: ", err)
+ os.Exit(1)
+ }
+
+ // First comment for github/Go; second for reviewable.
+ // https://github.com/golang/go/issues/13560#issuecomment-277804473
+ // https://github.com/Reviewable/Reviewable/wiki/FAQ#how-do-i-tell-reviewable-that-a-file-is-generated-and-should-not-be-reviewed
+ fmt.Fprint(f, `// Code generated by gen_batch.go; DO NOT EDIT.
+// GENERATED FILE DO NOT EDIT
+
+package serverpb
+
+`)
+
+ // Generate GetInner methods.
+ genGetInner(f, "EveryNodeRequestUnion", "EveryNodeOp", reqVariants)
+ genGetInner(f, "EveryNodeResponseUnion", "EveryNodeOpResp", resVariants)
+
+ // Generate SetInner methods.
+ genSetInner(f, "EveryNodeRequestUnion", "EveryNodeOp", reqVariants)
+ genSetInner(f, "EveryNodeResponseUnion", "EveryNodeOpResp", resVariants)
+
+ if err := f.Close(); err != nil {
+ fmt.Fprintln(os.Stderr, "Error closing file: ", err)
+ os.Exit(1)
+ }
+}
diff --git a/pkg/server/version_cluster_test.go b/pkg/server/version_cluster_test.go
index 2cb72647bbe1..d2e1f72b71eb 100644
--- a/pkg/server/version_cluster_test.go
+++ b/pkg/server/version_cluster_test.go
@@ -68,13 +68,6 @@ func (th *testClusterWithHelpers) setVersion(i int, version string) error {
return err
}
-func (th *testClusterWithHelpers) mustSetVersion(i int, version string) {
- th.Helper()
- if err := th.setVersion(i, version); err != nil {
- th.Fatalf("%d: %s", i, err)
- }
-}
-
func (th *testClusterWithHelpers) setDowngrade(i int, version string) error {
_, err := th.ServerConn(i).Exec("SET CLUSTER SETTING cluster.preserve_downgrade_option = $1", version)
return err
@@ -85,11 +78,11 @@ func (th *testClusterWithHelpers) resetDowngrade(i int) error {
return err
}
-// Set up a mixed cluster with the given initial bootstrap version and
-// len(versions) servers that each run at binary version == v[0] and
-// minimum supported version == v[1] (i.e. they identify as a binary that can
-// run with at least a v[1] mixed cluster and is itself v[0]). A directory can
-// optionally be passed in.
+// Set up a mixed cluster with the following setup:
+// - len(versions) servers
+// - server[i] runs at binary version `versions[i][0]`
+// - server[i] runs with minimum supported version `versions[i][1]`
+// A directory can optionally be passed in.
func setupMixedCluster(
t *testing.T, knobs base.TestingKnobs, versions [][2]string, dir string,
) testClusterWithHelpers {
@@ -378,8 +371,8 @@ func TestAllVersionsAgree(t *testing.T) {
}
// Returns two versions v0 and v1 which correspond to adjacent releases. v1 will
-// equal the TestingBinaryMinSupportedVersion to avoid rot in tests using this (as we retire
-// old versions).
+// equal the TestingBinaryMinSupportedVersion to avoid rot in tests using this
+// (as we retire old versions).
func v0v1() (roachpb.Version, roachpb.Version) {
v1 := clusterversion.TestingBinaryMinSupportedVersion
v0 := clusterversion.TestingBinaryMinSupportedVersion
@@ -391,6 +384,9 @@ func v0v1() (roachpb.Version, roachpb.Version) {
return v0, v1
}
+// TestClusterVersionMixedVersionTooOld verifies that we're unable to bump a
+// cluster version in a mixed node cluster where one of the nodes is running a
+// binary that cannot support the targeted cluster version.
func TestClusterVersionMixedVersionTooOld(t *testing.T) {
defer leaktest.AfterTest(t)()
defer log.Scope(t).Close(t)
@@ -427,28 +423,30 @@ func TestClusterVersionMixedVersionTooOld(t *testing.T) {
tc := setupMixedCluster(t, knobs, versions, "")
defer tc.Stopper().Stop(ctx)
- exp := v1s
-
// The last node refuses to perform an upgrade that would risk its own life.
- if err := tc.setVersion(len(versions)-1, exp); !testutils.IsError(err,
+ if err := tc.setVersion(len(versions)-1, v1s); !testutils.IsError(err,
fmt.Sprintf("cannot upgrade to %s: node running %s", v1s, v0s),
) {
t.Fatal(err)
}
- // The other nodes are less careful.
- tc.mustSetVersion(0, exp)
-
- <-exits // wait for fourth node to die
+ // The other nodes are just as careful.
+ for i := 0; i < len(versions)-2; i++ {
+ if err := tc.setVersion(i, v1s); !testutils.IsError(err,
+ fmt.Sprintf("binary version %s less than target version %s", v0s, v1s),
+ ) {
+ t.Fatal(i, err)
+ }
+ }
// Check that we can still talk to the first three nodes.
for i := 0; i < tc.NumServers()-1; i++ {
testutils.SucceedsSoon(tc, func() error {
- if version := tc.Servers[i].ClusterSettings().Version.ActiveVersion(ctx).String(); version != exp {
- return errors.Errorf("%d: incorrect version %s (wanted %s)", i, version, exp)
+ if version := tc.Servers[i].ClusterSettings().Version.ActiveVersion(ctx).String(); version != v0s {
+ return errors.Errorf("%d: incorrect version %s (wanted %s)", i, version, v0s)
}
- if version := tc.getVersionFromShow(i); version != exp {
- return errors.Errorf("%d: incorrect version %s (wanted %s)", i, version, exp)
+ if version := tc.getVersionFromShow(i); version != v0s {
+ return errors.Errorf("%d: incorrect version %s (wanted %s)", i, version, v0s)
}
return nil
})
diff --git a/pkg/settings/cluster/cluster_settings.go b/pkg/settings/cluster/cluster_settings.go
index ac9239196f37..c1e96a86f948 100644
--- a/pkg/settings/cluster/cluster_settings.go
+++ b/pkg/settings/cluster/cluster_settings.go
@@ -46,8 +46,10 @@ type Settings struct {
// is useful.
cpuProfiling int32 // atomic
- // Version provides a read-only view to the active cluster version and this
- // binary's version details.
+ // Version provides the interface through which which callers read/write to
+ // the active cluster version, and access this binary's version details.
+ // Setting the active cluster version has a very specific, intended usage
+ // pattern. Look towards the interface itself for more commentary.
Version clusterversion.Handle
}
diff --git a/pkg/settings/settings_test.go b/pkg/settings/settings_test.go
index a5244e2d2191..befdf7de69fa 100644
--- a/pkg/settings/settings_test.go
+++ b/pkg/settings/settings_test.go
@@ -124,13 +124,6 @@ func (d *dummyVersionSettingImpl) SettingsListDefault() string {
panic("unimplemented")
}
-// BeforeChange is part of the VersionSettingImpl interface.
-func (d *dummyVersionSettingImpl) BeforeChange(
- ctx context.Context, encodedVal []byte, sv *settings.Values,
-) {
- // No-op.
-}
-
const mb = int64(1024 * 1024)
var changes = struct {
@@ -142,7 +135,6 @@ var changes = struct {
duA int
eA int
byteSize int
- mA int
}{}
var boolTA = settings.RegisterBoolSetting("bool.t", "desc", true)
@@ -222,7 +214,6 @@ func TestCache(t *testing.T) {
duA.SetOnChange(sv, func() { changes.duA++ })
eA.SetOnChange(sv, func() { changes.eA++ })
byteSize.SetOnChange(sv, func() { changes.byteSize++ })
- mA.SetOnChange(sv, func() { changes.mA++ })
t.Run("VersionSetting", func(t *testing.T) {
ctx := context.Background()
@@ -230,7 +221,8 @@ func TestCache(t *testing.T) {
mB := settings.TestingRegisterVersionSetting("local.m", "foo", &dummyVersionSettingImpl{})
// Version settings don't have defaults, so we need to start by setting
// it to something.
- if err := u.Set("local.m", "default.X", "v"); err != nil {
+ defaultDummyV := dummyVersion{msg1: "default", growsbyone: "X"}
+ if err := setDummyVersion(defaultDummyV, mB, sv); err != nil {
t.Fatal(err)
}
@@ -265,7 +257,9 @@ func TestCache(t *testing.T) {
if _, err := mB.Validate(ctx, sv, []byte("takes.precedence"), precedenceX); err != nil {
t.Fatal(err)
}
- if err := u.Set("local.m", "default.XX", "v"); err != nil {
+
+ newDummyV := dummyVersion{msg1: "default", growsbyone: "XX"}
+ if err := setDummyVersion(newDummyV, mB, sv); err != nil {
t.Fatal(err)
}
u.ResetRemaining()
@@ -434,15 +428,6 @@ func TestCache(t *testing.T) {
if err := u.Set("byteSize.Val", settings.EncodeInt(mb*5), "z"); err != nil {
t.Fatal(err)
}
- if expected, actual := 0, changes.mA; expected != actual {
- t.Fatalf("expected %d, got %d", expected, actual)
- }
- if err := u.Set("v.1", "default.AB", "v"); err != nil {
- t.Fatal(err)
- }
- if expected, actual := 1, changes.mA; expected != actual {
- t.Fatalf("expected %d, got %d", expected, actual)
- }
if expected, actual := 0, changes.eA; expected != actual {
t.Fatalf("expected %d, got %d", expected, actual)
}
@@ -456,6 +441,10 @@ func TestCache(t *testing.T) {
u.Set("e", "notAValidValue", "e"); !testutils.IsError(err, expected) {
t.Fatalf("expected '%s' != actual error '%s'", expected, err)
}
+ defaultDummyV := dummyVersion{msg1: "default", growsbyone: "AB"}
+ if err := setDummyVersion(defaultDummyV, mA, sv); err != nil {
+ t.Fatal(err)
+ }
u.ResetRemaining()
if expected, actual := false, boolTA.Get(sv); expected != actual {
@@ -668,20 +657,6 @@ func TestCache(t *testing.T) {
if expected, actual := beforeIVal, iVal.Get(sv); expected != actual {
t.Fatalf("expected %v, got %v", expected, actual)
}
-
- beforeMarsh := mA.Get(sv)
- {
- u := settings.NewUpdater(sv)
- if err := u.Set("v.1", "too.many.dots", "v"); !testutils.IsError(err,
- "expected two parts",
- ) {
- t.Fatal(err)
- }
- u.ResetRemaining()
- }
- if expected, actual := beforeMarsh, mA.Get(sv); expected != actual {
- t.Fatalf("expected %v, got %v", expected, actual)
- }
})
}
@@ -795,3 +770,15 @@ func TestOverride(t *testing.T) {
u.ResetRemaining()
require.Equal(t, 42.0, overrideFloat.Get(sv))
}
+
+func setDummyVersion(dv dummyVersion, vs *settings.VersionSetting, sv *settings.Values) error {
+ // This is a bit round about because the VersionSetting doesn't get updated
+ // through the updater, like most other settings. In order to set it, we set
+ // the internal encoded state by hand.
+ encoded, err := protoutil.Marshal(&dv)
+ if err != nil {
+ return err
+ }
+ vs.SetInternal(sv, encoded)
+ return nil
+}
diff --git a/pkg/settings/updater.go b/pkg/settings/updater.go
index a60c7ec00a45..3c66fb5cf830 100644
--- a/pkg/settings/updater.go
+++ b/pkg/settings/updater.go
@@ -83,7 +83,15 @@ func (u updater) Set(key, rawValue string, vt string) error {
u.m[key] = struct{}{}
- if expected := d.Typ(); vt != expected {
+ // TODO(irfansharif): Looks like we introduced a regression in #55994. In
+ // mixed-version clusters, when the 21.1 node attempts to refresh setting,
+ // it expects to find a type "v" for the version setting, but finds "m"
+ // already present in 20.2. We just so happen to be adding dedicated
+ // functionality for the version setting update process (not doing it
+ // through updater, as here, but instead using a dedicated RPC for it).
+ // Still, this is a bit unfortunate, and maybe merits reverting the type
+ // annotation diff.
+ if expected := d.Typ(); expected != "v" && vt != expected {
return errors.Errorf("setting '%s' defined as type %s, not %s", key, expected, vt)
}
@@ -122,7 +130,12 @@ func (u updater) Set(key, rawValue string, vt string) error {
}
return setting.set(u.sv, d)
case *VersionSetting:
- return setting.set(u.sv, []byte(rawValue))
+ // We intentionally avoid updating the setting through this code path.
+ // The specific setting backed by VersionSetting is the cluster version
+ // setting, changes to which are propagated through direct RPCs to each
+ // node in the cluster instead of gossip. This is done using the
+ // EveryNode(op=AckClusterVersion) RPC.
+ return nil
}
return nil
}
diff --git a/pkg/settings/version.go b/pkg/settings/version.go
index 1c8e3a9e201b..b084a0a4545a 100644
--- a/pkg/settings/version.go
+++ b/pkg/settings/version.go
@@ -11,7 +11,6 @@
package settings
import (
- "bytes"
"context"
"fmt"
)
@@ -25,6 +24,10 @@ import (
// VersionSetting itself is then just the tiny shim that lets us hook into the
// rest of the settings machinery (by interfacing with Values, to load and store
// cluster versions).
+//
+// TODO(irfansharif): If the cluster version is no longer backed by gossip,
+// maybe we should stop pretending it's a regular gossip-backed cluster setting.
+// We could introduce new syntax here to motivate this shift.
type VersionSetting struct {
impl VersionSettingImpl
common
@@ -57,10 +60,6 @@ type VersionSettingImpl interface {
// SettingsListDefault returns the value that should be presented by
// `./cockroach gen settings-list`
SettingsListDefault() string
-
- // BeforeChange is called before an updated value for this setting is about
- // to be set in the Values container.
- BeforeChange(ctx context.Context, encodedVal []byte, sv *Values)
}
// ClusterVersionImpl is used to stub out the dependency on the ClusterVersion
@@ -155,30 +154,6 @@ func (v *VersionSetting) SetInternal(sv *Values, newVal interface{}) {
sv.setGeneric(v.getSlotIdx(), newVal)
}
-// set lets the updater process set the provided value as the current version.
-//
-// TODO(irfansharif): This should really be folded into one of the Setting
-// interfaces. All writable settings satisfy it.
-func (v *VersionSetting) set(sv *Values, encodedVal []byte) error {
- // We use ValidateBinaryVersions here since we're receiving this value from
- // another node (that has already done the full validation elsewhere).
- if err := v.impl.ValidateBinaryVersions(context.TODO(), sv, encodedVal); err != nil {
- return err
- }
-
- curVal := v.GetInternal(sv)
- if curVal != nil && bytes.Equal(curVal.([]byte), encodedVal) {
- // We're already at the right version, there's nothing to do.
- return nil
- }
-
- // Invoke the registered callback, if any.
- v.impl.BeforeChange(context.TODO(), encodedVal, sv)
-
- v.SetInternal(sv, encodedVal)
- return nil
-}
-
// setToDefault is part of the extendingSetting interface. This is a no-op for
// VersionSetting. They don't have defaults that they can go back to at any
// time.
@@ -200,3 +175,15 @@ func TestingRegisterVersionSetting(key, desc string, impl VersionSettingImpl) *V
register(key, desc, &setting)
return &setting
}
+
+// SetOnChange is part of the Setting interface, and is discouraged for use in
+// VersionSetting (we're implementing it here to not fall back on the embedded
+// `common` type definition).
+//
+// NB: VersionSetting is unique in more ways than one, and we might want to move
+// it out of the settings package before long (see TODO on the type itself). In
+// our current usage we don't rely on attaching pre-change triggers, so let's
+// not add it needlessly.
+func (v *VersionSetting) SetOnChange(_ *Values, _ func()) {
+ panic("unimplemented")
+}
diff --git a/pkg/sql/catalog/bootstrap/metadata.go b/pkg/sql/catalog/bootstrap/metadata.go
index 6ecf2c285127..b18438b7a651 100644
--- a/pkg/sql/catalog/bootstrap/metadata.go
+++ b/pkg/sql/catalog/bootstrap/metadata.go
@@ -342,6 +342,9 @@ func addSystemDescriptorsToSchema(target *MetadataSchema) {
target.AddDescriptor(keys.SystemDatabaseID, systemschema.ScheduledJobsTable)
target.AddDescriptor(keys.SystemDatabaseID, systemschema.SqllivenessTable)
+
+ // Tables introduced in 21.1
+ target.AddDescriptor(keys.SystemDatabaseID, systemschema.MigrationsTable)
}
// addSplitIDs adds a split point for each of the PseudoTableIDs to the supplied
diff --git a/pkg/sql/catalog/descpb/privilege.go b/pkg/sql/catalog/descpb/privilege.go
index f59406574fca..c128985acbf2 100644
--- a/pkg/sql/catalog/descpb/privilege.go
+++ b/pkg/sql/catalog/descpb/privilege.go
@@ -435,6 +435,7 @@ var SystemAllowedPrivileges = map[ID]privilege.List{
keys.StatementDiagnosticsTableID: privilege.ReadWriteData,
keys.ScheduledJobsTableID: privilege.ReadWriteData,
keys.SqllivenessID: privilege.ReadWriteData,
+ keys.MigrationsID: privilege.ReadWriteData,
}
// SetOwner sets the owner of the privilege descriptor to the provided string.
diff --git a/pkg/sql/catalog/systemschema/system.go b/pkg/sql/catalog/systemschema/system.go
index e845dcb0a0f6..41e4601cd855 100644
--- a/pkg/sql/catalog/systemschema/system.go
+++ b/pkg/sql/catalog/systemschema/system.go
@@ -342,6 +342,17 @@ CREATE TABLE system.sqlliveness (
expiration DECIMAL NOT NULL,
FAMILY fam0_session_id_expiration (session_id, expiration)
)`
+
+ MigrationsTableSchema = `
+CREATE TABLE system.migrations (
+ id INT8 NOT NULL DEFAULT unique_rowid(),
+ metadata STRING NOT NULL,
+ started TIMESTAMP NOT NULL DEFAULT now():::TIMESTAMP,
+ progress BYTES NULL,
+ CONSTRAINT "primary" PRIMARY KEY (id ASC),
+ FAMILY "primary" (id, metadata, started),
+ FAMILY progress (progress)
+)`
)
func pk(name string) descpb.IndexDescriptor {
@@ -599,6 +610,34 @@ var (
NextMutationID: 1,
})
+ // MigrationsTable is the descriptor for the migrations table. It contains
+ // details for all past and ongoing migrations.
+ MigrationsTable = tabledesc.NewImmutable(descpb.TableDescriptor{
+ Name: "migrations",
+ ID: keys.MigrationsID,
+ ParentID: keys.SystemDatabaseID,
+ UnexposedParentSchemaID: keys.PublicSchemaID,
+ Version: 1,
+ Columns: []descpb.ColumnDescriptor{
+ {Name: "id", ID: 1, Type: types.Int, DefaultExpr: &uniqueRowIDString},
+ {Name: "metadata", ID: 2, Type: types.String},
+ {Name: "started", ID: 3, Type: types.Timestamp, DefaultExpr: &nowString},
+ {Name: "progress", ID: 4, Type: types.Bytes, Nullable: true},
+ },
+ NextColumnID: 5,
+ Families: []descpb.ColumnFamilyDescriptor{
+ {Name: "primary", ID: 0, ColumnNames: []string{"id", "metadata", "started"}, ColumnIDs: []descpb.ColumnID{1, 2, 3}},
+ {Name: "progress", ID: 1, ColumnNames: []string{"progress"}, ColumnIDs: []descpb.ColumnID{4}, DefaultColumnID: 4},
+ },
+ NextFamilyID: 2,
+ PrimaryIndex: pk("id"),
+ NextIndexID: 2,
+ Privileges: descpb.NewCustomSuperuserPrivilegeDescriptor(
+ descpb.SystemAllowedPrivileges[keys.MigrationsID], security.NodeUserName()),
+ FormatVersion: descpb.InterleavedFormatVersion,
+ NextMutationID: 1,
+ })
+
// DescIDSequence is the descriptor for the descriptor ID sequence.
DescIDSequence = tabledesc.NewImmutable(descpb.TableDescriptor{
Name: "descriptor_id_seq",
diff --git a/pkg/sql/exec_util.go b/pkg/sql/exec_util.go
index 03627663b257..9b57b725a806 100644
--- a/pkg/sql/exec_util.go
+++ b/pkg/sql/exec_util.go
@@ -728,6 +728,11 @@ type ExecutorConfig struct {
HydratedTables *hydratedtables.Cache
GCJobNotifier *gcjobnotifier.Notifier
+
+ // VersionUpgradeHook is called after validating a `SET CLUSTER SETTING
+ // version` but before executing it. It can carry out long-running
+ // migrations that allow us to eventually remove legacy code.
+ VersionUpgradeHook func(ctx context.Context, to roachpb.Version) error
}
// Organization returns the value of cluster.organization.
diff --git a/pkg/sql/logictest/testdata/logic_test/distsql_agg b/pkg/sql/logictest/testdata/logic_test/distsql_agg
index 0af19b6fc606..1706eb12a7f9 100644
--- a/pkg/sql/logictest/testdata/logic_test/distsql_agg
+++ b/pkg/sql/logictest/testdata/logic_test/distsql_agg
@@ -575,7 +575,7 @@ INSERT INTO statistics_agg_test SELECT y, y%10 FROM generate_series(1, 100) AS y
query F
SELECT corr(y, x)::decimal FROM statistics_agg_test
----
-0.045228963191363145
+0.04522896319136315
# Regression test for #37211 (incorrect ordering between aggregator stages).
statement ok
diff --git a/pkg/sql/logictest/testdata/logic_test/float b/pkg/sql/logictest/testdata/logic_test/float
index 7ec53f1b5c35..f26f6857aae9 100644
--- a/pkg/sql/logictest/testdata/logic_test/float
+++ b/pkg/sql/logictest/testdata/logic_test/float
@@ -138,4 +138,4 @@ RESET extra_float_digits
query FFF
SELECT -0.1234567890123456, 123456789012345.6, 1234567.890123456
----
--0.1234567890123457 123456789012345.7 1234567.890123457
+-0.1234567890123456 123456789012345.6 1234567.890123456
diff --git a/pkg/sql/logictest/testdata/logic_test/geospatial b/pkg/sql/logictest/testdata/logic_test/geospatial
index 9e0d60957906..331d7108970a 100644
--- a/pkg/sql/logictest/testdata/logic_test/geospatial
+++ b/pkg/sql/logictest/testdata/logic_test/geospatial
@@ -5435,7 +5435,7 @@ SELECT ST_MemSize(g) FROM ( VALUES
121
119
-subtest st_pointinsidecircle
+subtest st_pointinsidecircle
query B
SELECT ST_PointInsideCircle(point, x, y, radius) FROM ( VALUES
diff --git a/pkg/sql/logictest/testdata/logic_test/grant_table b/pkg/sql/logictest/testdata/logic_test/grant_table
index c865ee0aeea8..ded17c0f4426 100644
--- a/pkg/sql/logictest/testdata/logic_test/grant_table
+++ b/pkg/sql/logictest/testdata/logic_test/grant_table
@@ -500,13 +500,13 @@ defaultdb pg_extension geometry_columns public SELECT
defaultdb pg_extension spatial_ref_sys public SELECT
defaultdb public NULL root ALL
defaultdb public NULL admin ALL
-postgres pg_extension NULL admin ALL
postgres pg_extension NULL root ALL
+postgres pg_extension NULL admin ALL
postgres pg_extension geography_columns public SELECT
postgres pg_extension geometry_columns public SELECT
postgres pg_extension spatial_ref_sys public SELECT
-postgres public NULL admin ALL
postgres public NULL root ALL
+postgres public NULL admin ALL
system pg_extension NULL admin GRANT
system pg_extension NULL root GRANT
system pg_extension geography_columns public SELECT
@@ -514,261 +514,271 @@ system pg_extension geometry_columns public SELECT
system pg_extension spatial_ref_sys public SELECT
system public NULL root GRANT
system public NULL admin GRANT
-system public comments admin DELETE
-system public comments root SELECT
-system public comments root UPDATE
-system public comments root INSERT
-system public comments root GRANT
system public comments root DELETE
system public comments public SELECT
-system public comments admin UPDATE
system public comments admin SELECT
-system public comments admin GRANT
system public comments admin INSERT
+system public comments admin GRANT
+system public comments root GRANT
+system public comments root INSERT
+system public comments admin DELETE
+system public comments root UPDATE
+system public comments admin UPDATE
+system public comments root SELECT
system public descriptor admin GRANT
system public descriptor admin SELECT
system public descriptor root GRANT
system public descriptor root SELECT
system public eventlog admin GRANT
-system public eventlog admin UPDATE
-system public eventlog admin SELECT
+system public eventlog root SELECT
+system public eventlog root GRANT
system public eventlog root UPDATE
-system public eventlog root INSERT
system public eventlog root DELETE
-system public eventlog root SELECT
+system public eventlog root INSERT
+system public eventlog admin SELECT
system public eventlog admin INSERT
-system public eventlog root GRANT
system public eventlog admin DELETE
-system public jobs root DELETE
+system public eventlog admin UPDATE
system public jobs admin DELETE
-system public jobs root GRANT
-system public jobs admin GRANT
+system public jobs admin INSERT
+system public jobs root UPDATE
+system public jobs root SELECT
system public jobs root INSERT
system public jobs admin SELECT
+system public jobs root GRANT
+system public jobs root DELETE
system public jobs admin UPDATE
-system public jobs root UPDATE
-system public jobs root SELECT
-system public jobs admin INSERT
-system public lease admin SELECT
+system public jobs admin GRANT
+system public lease admin DELETE
system public lease root UPDATE
system public lease root INSERT
system public lease root GRANT
-system public lease root SELECT
+system public lease root DELETE
system public lease admin UPDATE
+system public lease admin SELECT
system public lease admin INSERT
+system public lease root SELECT
system public lease admin GRANT
-system public lease admin DELETE
-system public lease root DELETE
-system public locations root INSERT
-system public locations admin DELETE
system public locations admin GRANT
+system public locations root SELECT
+system public locations root GRANT
+system public locations root DELETE
+system public locations admin DELETE
system public locations admin INSERT
system public locations admin SELECT
-system public locations admin UPDATE
-system public locations root DELETE
-system public locations root GRANT
-system public locations root SELECT
system public locations root UPDATE
-system public namespace admin GRANT
-system public namespace root GRANT
+system public locations root INSERT
+system public locations admin UPDATE
+system public migrations admin GRANT
+system public migrations admin DELETE
+system public migrations admin INSERT
+system public migrations admin UPDATE
+system public migrations root DELETE
+system public migrations root GRANT
+system public migrations root INSERT
+system public migrations root UPDATE
+system public migrations admin SELECT
+system public migrations root SELECT
system public namespace root SELECT
+system public namespace admin GRANT
system public namespace admin SELECT
-system public namespace2 admin SELECT
+system public namespace root GRANT
system public namespace2 root SELECT
-system public namespace2 root GRANT
system public namespace2 admin GRANT
-system public protected_ts_meta root SELECT
+system public namespace2 admin SELECT
+system public namespace2 root GRANT
+system public protected_ts_meta root GRANT
system public protected_ts_meta admin GRANT
+system public protected_ts_meta root SELECT
system public protected_ts_meta admin SELECT
-system public protected_ts_meta root GRANT
-system public protected_ts_records root SELECT
+system public protected_ts_records root GRANT
system public protected_ts_records admin SELECT
system public protected_ts_records admin GRANT
-system public protected_ts_records root GRANT
-system public rangelog root SELECT
+system public protected_ts_records root SELECT
+system public rangelog root UPDATE
+system public rangelog root INSERT
system public rangelog admin INSERT
-system public rangelog admin UPDATE
+system public rangelog root SELECT
system public rangelog admin GRANT
-system public rangelog root DELETE
-system public rangelog root UPDATE
system public rangelog admin DELETE
-system public rangelog admin SELECT
system public rangelog root GRANT
-system public rangelog root INSERT
+system public rangelog admin SELECT
+system public rangelog admin UPDATE
+system public rangelog root DELETE
system public replication_constraint_stats root UPDATE
-system public replication_constraint_stats admin INSERT
-system public replication_constraint_stats admin SELECT
system public replication_constraint_stats admin GRANT
-system public replication_constraint_stats root DELETE
-system public replication_constraint_stats root GRANT
-system public replication_constraint_stats root INSERT
system public replication_constraint_stats root SELECT
-system public replication_constraint_stats admin DELETE
+system public replication_constraint_stats root DELETE
system public replication_constraint_stats admin UPDATE
-system public replication_critical_localities admin UPDATE
-system public replication_critical_localities admin INSERT
-system public replication_critical_localities admin SELECT
+system public replication_constraint_stats admin SELECT
+system public replication_constraint_stats admin INSERT
+system public replication_constraint_stats admin DELETE
+system public replication_constraint_stats root INSERT
+system public replication_constraint_stats root GRANT
system public replication_critical_localities admin DELETE
+system public replication_critical_localities admin UPDATE
system public replication_critical_localities root DELETE
-system public replication_critical_localities root UPDATE
-system public replication_critical_localities root SELECT
+system public replication_critical_localities root GRANT
+system public replication_critical_localities admin SELECT
system public replication_critical_localities root INSERT
+system public replication_critical_localities admin INSERT
system public replication_critical_localities admin GRANT
-system public replication_critical_localities root GRANT
-system public replication_stats root DELETE
+system public replication_critical_localities root SELECT
+system public replication_critical_localities root UPDATE
+system public replication_stats root SELECT
system public replication_stats admin INSERT
-system public replication_stats root UPDATE
-system public replication_stats admin UPDATE
system public replication_stats admin GRANT
system public replication_stats admin SELECT
-system public replication_stats root INSERT
system public replication_stats admin DELETE
-system public replication_stats root SELECT
+system public replication_stats root DELETE
system public replication_stats root GRANT
-system public reports_meta root INSERT
-system public reports_meta root SELECT
-system public reports_meta root UPDATE
+system public replication_stats root UPDATE
+system public replication_stats admin UPDATE
+system public replication_stats root INSERT
system public reports_meta admin UPDATE
-system public reports_meta admin SELECT
-system public reports_meta root GRANT
-system public reports_meta admin INSERT
-system public reports_meta admin DELETE
system public reports_meta admin GRANT
+system public reports_meta admin INSERT
+system public reports_meta root SELECT
+system public reports_meta root INSERT
+system public reports_meta root GRANT
system public reports_meta root DELETE
+system public reports_meta admin SELECT
+system public reports_meta root UPDATE
+system public reports_meta admin DELETE
+system public role_members root UPDATE
+system public role_members root SELECT
system public role_members root INSERT
system public role_members root GRANT
system public role_members root DELETE
system public role_members admin UPDATE
system public role_members admin SELECT
+system public role_members admin INSERT
system public role_members admin GRANT
system public role_members admin DELETE
-system public role_members admin INSERT
-system public role_members root SELECT
-system public role_members root UPDATE
-system public role_options root SELECT
system public role_options root UPDATE
system public role_options admin INSERT
-system public role_options admin SELECT
system public role_options admin UPDATE
-system public role_options admin GRANT
-system public role_options admin DELETE
system public role_options root DELETE
system public role_options root GRANT
system public role_options root INSERT
-system public scheduled_jobs admin GRANT
-system public scheduled_jobs root UPDATE
-system public scheduled_jobs admin DELETE
+system public role_options admin SELECT
+system public role_options admin GRANT
+system public role_options admin DELETE
+system public role_options root SELECT
system public scheduled_jobs root INSERT
+system public scheduled_jobs admin GRANT
+system public scheduled_jobs admin SELECT
+system public scheduled_jobs admin UPDATE
system public scheduled_jobs root GRANT
system public scheduled_jobs root DELETE
-system public scheduled_jobs admin UPDATE
-system public scheduled_jobs admin SELECT
system public scheduled_jobs admin INSERT
+system public scheduled_jobs root UPDATE
system public scheduled_jobs root SELECT
+system public scheduled_jobs admin DELETE
system public settings admin SELECT
+system public settings root INSERT
system public settings root SELECT
system public settings root UPDATE
-system public settings admin INSERT
system public settings root DELETE
system public settings admin DELETE
+system public settings root GRANT
system public settings admin GRANT
+system public settings admin INSERT
system public settings admin UPDATE
-system public settings root GRANT
-system public settings root INSERT
-system public sqlliveness root GRANT
-system public sqlliveness admin DELETE
system public sqlliveness admin INSERT
-system public sqlliveness admin SELECT
-system public sqlliveness root INSERT
system public sqlliveness root SELECT
-system public sqlliveness root UPDATE
-system public sqlliveness admin GRANT
-system public sqlliveness admin UPDATE
+system public sqlliveness root GRANT
system public sqlliveness root DELETE
+system public sqlliveness root INSERT
+system public sqlliveness admin UPDATE
+system public sqlliveness admin SELECT
+system public sqlliveness admin GRANT
+system public sqlliveness root UPDATE
+system public sqlliveness admin DELETE
system public statement_bundle_chunks admin DELETE
-system public statement_bundle_chunks admin GRANT
-system public statement_bundle_chunks admin INSERT
-system public statement_bundle_chunks admin UPDATE
-system public statement_bundle_chunks root DELETE
-system public statement_bundle_chunks root INSERT
system public statement_bundle_chunks root SELECT
system public statement_bundle_chunks root UPDATE
-system public statement_bundle_chunks admin SELECT
system public statement_bundle_chunks root GRANT
-system public statement_diagnostics admin GRANT
+system public statement_bundle_chunks root DELETE
+system public statement_bundle_chunks admin UPDATE
+system public statement_bundle_chunks admin SELECT
+system public statement_bundle_chunks admin INSERT
+system public statement_bundle_chunks root INSERT
+system public statement_bundle_chunks admin GRANT
system public statement_diagnostics root UPDATE
-system public statement_diagnostics root SELECT
system public statement_diagnostics root INSERT
system public statement_diagnostics root GRANT
-system public statement_diagnostics admin DELETE
system public statement_diagnostics root DELETE
system public statement_diagnostics admin UPDATE
-system public statement_diagnostics admin INSERT
system public statement_diagnostics admin SELECT
-system public statement_diagnostics_requests admin GRANT
-system public statement_diagnostics_requests root UPDATE
-system public statement_diagnostics_requests root SELECT
-system public statement_diagnostics_requests root GRANT
-system public statement_diagnostics_requests root DELETE
-system public statement_diagnostics_requests admin UPDATE
+system public statement_diagnostics admin DELETE
+system public statement_diagnostics admin INSERT
+system public statement_diagnostics admin GRANT
+system public statement_diagnostics root SELECT
+system public statement_diagnostics_requests admin DELETE
system public statement_diagnostics_requests admin INSERT
system public statement_diagnostics_requests admin SELECT
-system public statement_diagnostics_requests admin DELETE
+system public statement_diagnostics_requests admin UPDATE
+system public statement_diagnostics_requests root DELETE
+system public statement_diagnostics_requests root GRANT
system public statement_diagnostics_requests root INSERT
-system public table_statistics admin UPDATE
+system public statement_diagnostics_requests root SELECT
+system public statement_diagnostics_requests root UPDATE
+system public statement_diagnostics_requests admin GRANT
+system public table_statistics root SELECT
system public table_statistics admin SELECT
system public table_statistics admin GRANT
-system public table_statistics root SELECT
-system public table_statistics root INSERT
-system public table_statistics root GRANT
system public table_statistics admin DELETE
-system public table_statistics root DELETE
system public table_statistics admin INSERT
system public table_statistics root UPDATE
+system public table_statistics admin UPDATE
+system public table_statistics root DELETE
+system public table_statistics root INSERT
+system public table_statistics root GRANT
+system public tenants admin GRANT
system public tenants root SELECT
system public tenants root GRANT
-system public tenants admin GRANT
system public tenants admin SELECT
-system public ui admin SELECT
-system public ui root GRANT
-system public ui admin INSERT
-system public ui root DELETE
system public ui admin GRANT
-system public ui root SELECT
system public ui root UPDATE
+system public ui root SELECT
+system public ui admin INSERT
system public ui root INSERT
+system public ui root GRANT
+system public ui admin SELECT
system public ui admin UPDATE
system public ui admin DELETE
-system public users admin DELETE
+system public ui root DELETE
+system public users root UPDATE
+system public users root SELECT
system public users root INSERT
-system public users root GRANT
system public users root DELETE
-system public users root UPDATE
system public users admin UPDATE
+system public users admin SELECT
system public users admin INSERT
+system public users admin DELETE
+system public users root GRANT
system public users admin GRANT
-system public users root SELECT
-system public users admin SELECT
-system public web_sessions admin DELETE
-system public web_sessions admin SELECT
-system public web_sessions admin GRANT
-system public web_sessions admin INSERT
system public web_sessions root SELECT
+system public web_sessions admin DELETE
system public web_sessions root INSERT
-system public web_sessions root GRANT
+system public web_sessions admin INSERT
+system public web_sessions admin SELECT
+system public web_sessions admin UPDATE
system public web_sessions root DELETE
+system public web_sessions root GRANT
system public web_sessions root UPDATE
-system public web_sessions admin UPDATE
-system public zones admin SELECT
-system public zones admin DELETE
+system public web_sessions admin GRANT
+system public zones admin GRANT
system public zones admin INSERT
-system public zones admin UPDATE
+system public zones admin SELECT
system public zones root DELETE
-system public zones root UPDATE
-system public zones root INSERT
system public zones root GRANT
+system public zones root INSERT
system public zones root SELECT
-system public zones admin GRANT
+system public zones root UPDATE
+system public zones admin UPDATE
+system public zones admin DELETE
test pg_extension NULL admin ALL
test pg_extension NULL root ALL
test pg_extension geography_columns public SELECT
@@ -1128,6 +1138,11 @@ system public locations root GRA
system public locations root INSERT
system public locations root SELECT
system public locations root UPDATE
+system public migrations root DELETE
+system public migrations root GRANT
+system public migrations root INSERT
+system public migrations root SELECT
+system public migrations root UPDATE
system public namespace root GRANT
system public namespace root SELECT
system public namespace2 root GRANT
diff --git a/pkg/sql/logictest/testdata/logic_test/information_schema b/pkg/sql/logictest/testdata/logic_test/information_schema
index df07311af189..aea07ac11e5d 100644
--- a/pkg/sql/logictest/testdata/logic_test/information_schema
+++ b/pkg/sql/logictest/testdata/logic_test/information_schema
@@ -696,6 +696,7 @@ system public statement_diagnostics_requests BASE TABLE
system public statement_diagnostics BASE TABLE YES 1
system public scheduled_jobs BASE TABLE YES 1
system public sqlliveness BASE TABLE YES 1
+system public migrations BASE TABLE YES 1
statement ok
ALTER TABLE other_db.xyz ADD COLUMN j INT
@@ -780,6 +781,10 @@ system public 630200280_21_2_not_null system
system public 630200280_21_3_not_null system public locations CHECK NO NO
system public 630200280_21_4_not_null system public locations CHECK NO NO
system public primary system public locations PRIMARY KEY NO NO
+system public 630200280_40_1_not_null system public migrations CHECK NO NO
+system public 630200280_40_2_not_null system public migrations CHECK NO NO
+system public 630200280_40_3_not_null system public migrations CHECK NO NO
+system public primary system public migrations PRIMARY KEY NO NO
system public 630200280_2_1_not_null system public namespace CHECK NO NO
system public 630200280_2_2_not_null system public namespace CHECK NO NO
system public primary system public namespace PRIMARY KEY NO NO
@@ -999,6 +1004,9 @@ system public 630200280_37_9_not_null executor_type I
system public 630200280_39_1_not_null session_id IS NOT NULL
system public 630200280_39_2_not_null expiration IS NOT NULL
system public 630200280_3_1_not_null id IS NOT NULL
+system public 630200280_40_1_not_null id IS NOT NULL
+system public 630200280_40_2_not_null metadata IS NOT NULL
+system public 630200280_40_3_not_null started IS NOT NULL
system public 630200280_4_1_not_null username IS NOT NULL
system public 630200280_4_3_not_null isRole IS NOT NULL
system public 630200280_5_1_not_null id IS NOT NULL
@@ -1028,6 +1036,7 @@ system public lease nodeID sy
system public lease version system public primary
system public locations localityKey system public primary
system public locations localityValue system public primary
+system public migrations id system public primary
system public namespace name system public primary
system public namespace parentID system public primary
system public namespace2 name system public primary
@@ -1192,6 +1201,10 @@ system public locations latitude
system public locations localityKey 1
system public locations localityValue 2
system public locations longitude 4
+system public migrations id 1
+system public migrations metadata 2
+system public migrations progress 4
+system public migrations started 3
system public namespace id 3
system public namespace name 2
system public namespace parentID 1
@@ -1831,6 +1844,16 @@ NULL root system public locations
NULL root system public locations INSERT NULL NO
NULL root system public locations SELECT NULL YES
NULL root system public locations UPDATE NULL NO
+NULL admin system public migrations DELETE NULL NO
+NULL admin system public migrations GRANT NULL NO
+NULL admin system public migrations INSERT NULL NO
+NULL admin system public migrations SELECT NULL YES
+NULL admin system public migrations UPDATE NULL NO
+NULL root system public migrations DELETE NULL NO
+NULL root system public migrations GRANT NULL NO
+NULL root system public migrations INSERT NULL NO
+NULL root system public migrations SELECT NULL YES
+NULL root system public migrations UPDATE NULL NO
NULL admin system public namespace GRANT NULL NO
NULL admin system public namespace SELECT NULL YES
NULL root system public namespace GRANT NULL NO
@@ -2410,6 +2433,16 @@ NULL root system public sqlliveness
NULL root system public sqlliveness INSERT NULL NO
NULL root system public sqlliveness SELECT NULL YES
NULL root system public sqlliveness UPDATE NULL NO
+NULL admin system public migrations DELETE NULL NO
+NULL admin system public migrations GRANT NULL NO
+NULL admin system public migrations INSERT NULL NO
+NULL admin system public migrations SELECT NULL YES
+NULL admin system public migrations UPDATE NULL NO
+NULL root system public migrations DELETE NULL NO
+NULL root system public migrations GRANT NULL NO
+NULL root system public migrations INSERT NULL NO
+NULL root system public migrations SELECT NULL YES
+NULL root system public migrations UPDATE NULL NO
statement ok
CREATE TABLE other_db.xyz (i INT)
diff --git a/pkg/sql/logictest/testdata/logic_test/pg_catalog b/pkg/sql/logictest/testdata/logic_test/pg_catalog
index 8bafb8003557..2de0a6e31975 100644
--- a/pkg/sql/logictest/testdata/logic_test/pg_catalog
+++ b/pkg/sql/logictest/testdata/logic_test/pg_catalog
@@ -719,6 +719,7 @@ indexrelid indrelid indnatts indisunique indisprimary indisexclusion indim
2008917578 37 1 false false false false false true false false true false 5 0 0 2 NULL NULL
2101708905 5 1 true true false true false true false false true false 1 0 0 2 NULL NULL
2148104569 21 2 true true false true false true false false true false 1 2 3903121477 3903121477 0 0 2 2 NULL NULL
+2268653844 40 1 true true false true false true false false true false 1 0 0 2 NULL NULL
2361445172 8 1 true true false true false true false false true false 1 0 0 2 NULL NULL
2407840836 24 3 true true false true false true false false true false 1 2 3 0 0 0 0 0 0 2 2 2 NULL NULL
2621181440 15 2 false false false false false true false false true false 2 3 3903121477 0 0 0 2 2 NULL NULL
@@ -775,6 +776,7 @@ indexrelid operator_argument_type_oid operator_argument_position
2101708905 0 1
2148104569 0 1
2148104569 0 2
+2268653844 0 1
2361445172 0 1
2407840836 0 1
2407840836 0 2
diff --git a/pkg/sql/logictest/testdata/logic_test/ranges b/pkg/sql/logictest/testdata/logic_test/ranges
index 018de6407d4a..0d88ba9f18f4 100644
--- a/pkg/sql/logictest/testdata/logic_test/ranges
+++ b/pkg/sql/logictest/testdata/logic_test/ranges
@@ -309,7 +309,8 @@ start_key start_pretty end_key
[172] /Table/36 [173] /Table/37 system statement_diagnostics · {1} 1
[173] /Table/37 [174] /Table/38 system scheduled_jobs · {1} 1
[174] /Table/38 [175] /Table/39 · · · {1} 1
-[175] /Table/39 [189 137] /Table/53/1 system sqlliveness · {1} 1
+[175] /Table/39 [176] /Table/40 system sqlliveness · {1} 1
+[176] /Table/40 [189 137] /Table/53/1 system migrations · {1} 1
[189 137] /Table/53/1 [189 137 137] /Table/53/1/1 test t · {1} 1
[189 137 137] /Table/53/1/1 [189 137 141 137] /Table/53/1/5/1 test t · {3,4} 3
[189 137 141 137] /Table/53/1/5/1 [189 137 141 138] /Table/53/1/5/2 test t · {1,2,3} 1
@@ -367,7 +368,8 @@ start_key start_pretty end_key
[172] /Table/36 [173] /Table/37 system statement_diagnostics · {1} 1
[173] /Table/37 [174] /Table/38 system scheduled_jobs · {1} 1
[174] /Table/38 [175] /Table/39 · · · {1} 1
-[175] /Table/39 [189 137] /Table/53/1 system sqlliveness · {1} 1
+[175] /Table/39 [176] /Table/40 system sqlliveness · {1} 1
+[176] /Table/40 [189 137] /Table/53/1 system migrations · {1} 1
[189 137] /Table/53/1 [189 137 137] /Table/53/1/1 test t · {1} 1
[189 137 137] /Table/53/1/1 [189 137 141 137] /Table/53/1/5/1 test t · {3,4} 3
[189 137 141 137] /Table/53/1/5/1 [189 137 141 138] /Table/53/1/5/2 test t · {1,2,3} 1
diff --git a/pkg/sql/logictest/testdata/logic_test/schema b/pkg/sql/logictest/testdata/logic_test/schema
index 179339cd2871..baf3fa90e3d4 100644
--- a/pkg/sql/logictest/testdata/logic_test/schema
+++ b/pkg/sql/logictest/testdata/logic_test/schema
@@ -596,5 +596,3 @@ ALTER TABLE public_table_to_rename RENAME TO public.renamed_public_table;
statement error pq: relation "public_table_exists" already exists
ALTER TABLE renamed_public_table RENAME TO public_table_exists;
-
-
diff --git a/pkg/sql/logictest/testdata/logic_test/show_source b/pkg/sql/logictest/testdata/logic_test/show_source
index 9536917aefa8..975dd701d6dc 100644
--- a/pkg/sql/logictest/testdata/logic_test/show_source
+++ b/pkg/sql/logictest/testdata/logic_test/show_source
@@ -203,6 +203,7 @@ public jobs table NULL NULL
public web_sessions table NULL NULL
public table_statistics table NULL NULL
public locations table NULL NULL
+public migrations table NULL NULL
public role_members table NULL NULL
public comments table NULL NULL
public replication_constraint_stats table NULL NULL
@@ -237,6 +238,7 @@ public jobs table NULL NULL
public web_sessions table NULL NULL ·
public table_statistics table NULL NULL ·
public locations table NULL NULL ·
+public migrations table NULL NULL ·
public role_members table NULL NULL ·
public comments table NULL NULL ·
public replication_constraint_stats table NULL NULL ·
diff --git a/pkg/sql/logictest/testdata/logic_test/system b/pkg/sql/logictest/testdata/logic_test/system
index 7eb308cf83c4..2b36f24491aa 100644
--- a/pkg/sql/logictest/testdata/logic_test/system
+++ b/pkg/sql/logictest/testdata/logic_test/system
@@ -16,6 +16,7 @@ public eventlog table NULL NULL
public jobs table NULL NULL
public lease table NULL NULL
public locations table NULL NULL
+public migrations table NULL NULL
public namespace table NULL NULL
public namespace2 table NULL NULL
public protected_ts_meta table NULL NULL
@@ -73,6 +74,7 @@ SELECT id FROM system.descriptor
36
37
39
+40
50
51
52
@@ -241,6 +243,16 @@ system public locations root GRANT
system public locations root INSERT
system public locations root SELECT
system public locations root UPDATE
+system public migrations admin DELETE
+system public migrations admin GRANT
+system public migrations admin INSERT
+system public migrations admin SELECT
+system public migrations admin UPDATE
+system public migrations root DELETE
+system public migrations root GRANT
+system public migrations root INSERT
+system public migrations root SELECT
+system public migrations root UPDATE
system public namespace admin GRANT
system public namespace admin SELECT
system public namespace root GRANT
diff --git a/pkg/sql/logictest/testdata/logic_test/system_namespace b/pkg/sql/logictest/testdata/logic_test/system_namespace
index ce32ec8c320b..6291b9c053f3 100644
--- a/pkg/sql/logictest/testdata/logic_test/system_namespace
+++ b/pkg/sql/logictest/testdata/logic_test/system_namespace
@@ -18,6 +18,7 @@ SELECT * FROM system.namespace
1 29 jobs 15
1 29 lease 11
1 29 locations 21
+1 29 migrations 40
1 29 namespace 2
1 29 namespace2 30
1 29 protected_ts_meta 31
diff --git a/pkg/sql/opt/exec/execbuilder/testdata/autocommit b/pkg/sql/opt/exec/execbuilder/testdata/autocommit
index ac5b75d698fc..a16479527ab2 100644
--- a/pkg/sql/opt/exec/execbuilder/testdata/autocommit
+++ b/pkg/sql/opt/exec/execbuilder/testdata/autocommit
@@ -41,7 +41,7 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 1 CPut, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 CPut, 1 EndTxn to (n1,s1):1
# Multi-row insert should auto-commit.
query B
@@ -62,7 +62,7 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 2 CPut, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 2 CPut, 1 EndTxn to (n1,s1):1
# No auto-commit inside a transaction.
statement ok
@@ -86,7 +86,7 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 2 CPut to (n1,s1):1
+dist sender send r36: sending batch 2 CPut to (n1,s1):1
statement ok
ROLLBACK
@@ -110,7 +110,7 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 2 CPut, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 2 CPut, 1 EndTxn to (n1,s1):1
# TODO(radu): allow non-side-effecting projections.
query B
@@ -132,8 +132,8 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 2 CPut to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 2 CPut to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
# Insert with RETURNING statement with side-effects should not auto-commit.
# In this case division can (in principle) error out.
@@ -156,8 +156,8 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 2 CPut to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 2 CPut to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
# Another way to test the scenario above: generate an error and ensure that the
# mutation was not committed.
@@ -192,7 +192,7 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 1 Put, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 Put, 1 EndTxn to (n1,s1):1
# Multi-row upsert should auto-commit.
query B
@@ -213,7 +213,7 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 2 Put, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 2 Put, 1 EndTxn to (n1,s1):1
# No auto-commit inside a transaction.
statement ok
@@ -237,7 +237,7 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 2 Put to (n1,s1):1
+dist sender send r36: sending batch 2 Put to (n1,s1):1
statement ok
ROLLBACK
@@ -261,7 +261,7 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 2 Put, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 2 Put, 1 EndTxn to (n1,s1):1
# TODO(radu): allow non-side-effecting projections.
query B
@@ -283,8 +283,8 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 2 Put to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 2 Put to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
# Upsert with RETURNING statement with side-effects should not auto-commit.
# In this case division can (in principle) error out.
@@ -307,8 +307,8 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 2 Put to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 2 Put to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
# Another way to test the scenario above: generate an error and ensure that the
# mutation was not committed.
@@ -343,8 +343,8 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 2 Put, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 2 Put, 1 EndTxn to (n1,s1):1
# No auto-commit inside a transaction.
statement ok
@@ -368,8 +368,8 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 2 Put to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 2 Put to (n1,s1):1
statement ok
ROLLBACK
@@ -393,8 +393,8 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 2 Put, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 2 Put, 1 EndTxn to (n1,s1):1
# TODO(radu): allow non-side-effecting projections.
query B
@@ -416,9 +416,9 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 2 Put to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 2 Put to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
# Update with RETURNING statement with side-effects should not auto-commit.
# In this case division can (in principle) error out.
@@ -441,9 +441,9 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 2 Put to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 2 Put to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
# Another way to test the scenario above: generate an error and ensure that the
# mutation was not committed.
@@ -478,7 +478,7 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 1 DelRng, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 DelRng, 1 EndTxn to (n1,s1):1
# Multi-row delete should auto-commit.
query B
@@ -499,7 +499,7 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 1 DelRng, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 DelRng, 1 EndTxn to (n1,s1):1
# No auto-commit inside a transaction.
statement ok
@@ -523,7 +523,7 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 1 DelRng to (n1,s1):1
+dist sender send r36: sending batch 1 DelRng to (n1,s1):1
statement ok
ROLLBACK
@@ -547,8 +547,8 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%PushTxn%'
AND message NOT LIKE '%QueryTxn%'
----
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 2 Del, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 2 Del, 1 EndTxn to (n1,s1):1
# TODO(radu): allow non-side-effecting projections.
query B
@@ -570,9 +570,9 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 2 Del to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 2 Del to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
# Insert with RETURNING statement with side-effects should not auto-commit.
# In this case division can (in principle) error out.
@@ -595,9 +595,9 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 2 Del to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 2 Del to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
statement ok
INSERT INTO ab VALUES (12, 0);
@@ -644,9 +644,9 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 2 CPut to (n1,s1):1
-dist sender send r35: sending batch 2 Scan to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 2 CPut to (n1,s1):1
+dist sender send r36: sending batch 2 Scan to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
query B
SELECT count(*) > 0 FROM [
@@ -667,10 +667,10 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 1 Put to (n1,s1):1
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 1 Put to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
query B
SELECT count(*) > 0 FROM [
@@ -692,10 +692,10 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 1 Del to (n1,s1):1
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 1 Del to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
# Test with a single cascade, which should use autocommit.
statement ok
@@ -719,9 +719,9 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 1 DelRng to (n1,s1):1
-dist sender send r35: sending batch 1 Scan to (n1,s1):1
-dist sender send r35: sending batch 1 Del, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 DelRng to (n1,s1):1
+dist sender send r36: sending batch 1 Scan to (n1,s1):1
+dist sender send r36: sending batch 1 Del, 1 EndTxn to (n1,s1):1
# -----------------------
# Multiple mutation tests
@@ -749,9 +749,9 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 2 CPut to (n1,s1):1
-dist sender send r35: sending batch 2 CPut to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 2 CPut to (n1,s1):1
+dist sender send r36: sending batch 2 CPut to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
query B
SELECT count(*) > 0 FROM [
@@ -774,6 +774,6 @@ WHERE message LIKE '%r$rangeid: sending batch%'
AND message NOT LIKE '%QueryTxn%'
AND operation NOT LIKE '%async%'
----
-dist sender send r35: sending batch 2 CPut to (n1,s1):1
-dist sender send r35: sending batch 2 CPut to (n1,s1):1
-dist sender send r35: sending batch 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 2 CPut to (n1,s1):1
+dist sender send r36: sending batch 2 CPut to (n1,s1):1
+dist sender send r36: sending batch 1 EndTxn to (n1,s1):1
diff --git a/pkg/sql/opt/exec/execbuilder/testdata/delete b/pkg/sql/opt/exec/execbuilder/testdata/delete
index 612546d55e35..556c0f81f5db 100644
--- a/pkg/sql/opt/exec/execbuilder/testdata/delete
+++ b/pkg/sql/opt/exec/execbuilder/testdata/delete
@@ -210,9 +210,9 @@ SELECT operation, message FROM [SHOW KV TRACE FOR SESSION]
WHERE message LIKE '%DelRange%' OR message LIKE '%DelRng%'
----
flow DelRange /Table/57/1 - /Table/57/2
-dist sender send r35: sending batch 1 DelRng to (n1,s1):1
+dist sender send r36: sending batch 1 DelRng to (n1,s1):1
flow DelRange /Table/57/1/601/0 - /Table/57/2
-dist sender send r35: sending batch 1 DelRng to (n1,s1):1
+dist sender send r36: sending batch 1 DelRng to (n1,s1):1
# Ensure that DelRange requests are autocommitted when DELETE FROM happens on a
# chunk of fewer than 600 keys.
@@ -228,7 +228,7 @@ SELECT operation, message FROM [SHOW KV TRACE FOR SESSION]
WHERE message LIKE '%DelRange%' OR message LIKE '%sending batch%'
----
flow DelRange /Table/57/1/5 - /Table/57/1/5/#
-dist sender send r35: sending batch 1 DelRng, 1 EndTxn to (n1,s1):1
+dist sender send r36: sending batch 1 DelRng, 1 EndTxn to (n1,s1):1
# Test use of fast path when there are interleaved tables.
diff --git a/pkg/sql/opt/exec/execbuilder/testdata/upsert b/pkg/sql/opt/exec/execbuilder/testdata/upsert
index d42a5cfe8191..7411961199b9 100644
--- a/pkg/sql/opt/exec/execbuilder/testdata/upsert
+++ b/pkg/sql/opt/exec/execbuilder/testdata/upsert
@@ -276,7 +276,7 @@ SELECT operation, message FROM [SHOW KV TRACE FOR SESSION]
table reader Scan /Table/57/1/2{-/#}
flow CPut /Table/57/1/2/0 -> /TUPLE/2:2:Int/3
flow InitPut /Table/57/2/3/0 -> /BYTES/0x8a
-kv.DistSender: sending partial batch r35: sending batch 1 CPut, 1 EndTxn to (n1,s1):1
+kv.DistSender: sending partial batch r36: sending batch 1 CPut, 1 EndTxn to (n1,s1):1
flow fast path completed
exec stmt rows affected: 1
@@ -290,7 +290,7 @@ SELECT operation, message FROM [SHOW KV TRACE FOR SESSION]
table reader Scan /Table/57/1/1{-/#}
flow CPut /Table/57/1/1/0 -> /TUPLE/2:2:Int/2
flow InitPut /Table/57/2/2/0 -> /BYTES/0x89
-kv.DistSender: sending partial batch r35: sending batch 1 CPut, 1 EndTxn to (n1,s1):1
+kv.DistSender: sending partial batch r36: sending batch 1 CPut, 1 EndTxn to (n1,s1):1
flow fast path completed
exec stmt rows affected: 1
@@ -307,7 +307,7 @@ table reader fetched: /kv/primary/2/v -> /3
flow Put /Table/57/1/2/0 -> /TUPLE/2:2:Int/2
flow Del /Table/57/2/3/0
flow CPut /Table/57/2/2/0 -> /BYTES/0x8a (expecting does not exist)
-kv.DistSender: sending partial batch r35: sending batch 1 Put, 1 EndTxn to (n1,s1):1
+kv.DistSender: sending partial batch r36: sending batch 1 Put, 1 EndTxn to (n1,s1):1
exec stmt execution failed after 0 rows: duplicate key value (v)=(2) violates unique constraint "woo"
diff --git a/pkg/sql/optionalnodeliveness/node_liveness.go b/pkg/sql/optionalnodeliveness/node_liveness.go
index 37892a4e164a..d5bc7f050e25 100644
--- a/pkg/sql/optionalnodeliveness/node_liveness.go
+++ b/pkg/sql/optionalnodeliveness/node_liveness.go
@@ -11,6 +11,8 @@
package optionalnodeliveness
import (
+ "context"
+
"github.com/cockroachdb/cockroach/pkg/kv/kvserver/kvserverpb"
"github.com/cockroachdb/cockroach/pkg/roachpb"
"github.com/cockroachdb/cockroach/pkg/util/errorutil"
@@ -20,6 +22,7 @@ import (
type Interface interface {
Self() (kvserverpb.Liveness, bool)
GetLivenesses() []kvserverpb.Liveness
+ GetLivenessesFromKV(ctx context.Context) ([]kvserverpb.Liveness, error)
IsLive(roachpb.NodeID) (bool, error)
}
diff --git a/pkg/sql/pgwire/pgwire_test.go b/pkg/sql/pgwire/pgwire_test.go
index e1c7df60f393..5efcededf155 100644
--- a/pkg/sql/pgwire/pgwire_test.go
+++ b/pkg/sql/pgwire/pgwire_test.go
@@ -556,7 +556,7 @@ func TestPGPreparedQuery(t *testing.T) {
baseTest.Results("users", "primary", false, 1, "username", "ASC", false, false),
}},
{"SHOW TABLES FROM system", []preparedQueryTest{
- baseTest.Results("public", "comments", "table", gosql.NullString{}, gosql.NullString{}).Others(28),
+ baseTest.Results("public", "comments", "table", gosql.NullString{}, gosql.NullString{}).Others(29),
}},
{"SHOW SCHEMAS FROM system", []preparedQueryTest{
baseTest.Results("crdb_internal", gosql.NullString{}).Others(4),
diff --git a/pkg/sql/set_cluster_setting.go b/pkg/sql/set_cluster_setting.go
index b0f068d73599..571345936af4 100644
--- a/pkg/sql/set_cluster_setting.go
+++ b/pkg/sql/set_cluster_setting.go
@@ -19,6 +19,7 @@ import (
"github.com/cockroachdb/cockroach/pkg/clusterversion"
"github.com/cockroachdb/cockroach/pkg/kv"
+ "github.com/cockroachdb/cockroach/pkg/roachpb"
"github.com/cockroachdb/cockroach/pkg/security"
"github.com/cockroachdb/cockroach/pkg/server/telemetry"
"github.com/cockroachdb/cockroach/pkg/settings"
@@ -47,6 +48,10 @@ type setClusterSettingNode struct {
setting settings.WritableSetting
// If value is nil, the setting should be reset.
value tree.TypedExpr
+ // versionUpgradeHook is called after validating a `SET CLUSTER SETTING
+ // version` but before executing it. It's used to carry out migrations
+ // between version upgrades.
+ versionUpgradeHook func(ctx context.Context, to roachpb.Version) error
}
func checkPrivilegesForSetting(ctx context.Context, p *planner, name string, action string) error {
@@ -156,7 +161,11 @@ func (p *planner) SetClusterSetting(
}
}
- return &setClusterSettingNode{name: name, st: st, setting: setting, value: value}, nil
+ csNode := setClusterSettingNode{
+ name: name, st: st, setting: setting, value: value,
+ versionUpgradeHook: p.execCfg.VersionUpgradeHook,
+ }
+ return &csNode, nil
}
func (n *setClusterSettingNode) startExec(params runParams) error {
@@ -209,7 +218,8 @@ func (n *setClusterSettingNode) startExec(params runParams) error {
}
reportedValue = tree.AsStringWithFlags(value, tree.FmtBareStrings)
var prev tree.Datum
- if _, ok := n.setting.(*settings.VersionSetting); ok {
+ _, isSetVersion := n.setting.(*settings.VersionSetting)
+ if isSetVersion {
datums, err := execCfg.InternalExecutor.QueryRowEx(
ctx, "retrieve-prev-setting", txn,
sessiondata.InternalExecutorOverride{User: security.RootUserName()},
@@ -232,6 +242,17 @@ func (n *setClusterSettingNode) startExec(params runParams) error {
if err != nil {
return err
}
+
+ if isSetVersion {
+ // toSettingString already validated the input and that we are
+ // allowed to transition.
+ versionStr := string(*value.(*tree.DString))
+ targetVersion := roachpb.MustParseVersion(versionStr)
+ if err := n.versionUpgradeHook(ctx, targetVersion); err != nil {
+ return err
+ }
+ }
+
if _, err = execCfg.InternalExecutor.ExecEx(
ctx, "update-setting", txn,
sessiondata.InternalExecutorOverride{User: security.RootUserName()},
diff --git a/pkg/sql/show_cluster_setting.go b/pkg/sql/show_cluster_setting.go
index f13080a3d3de..c3acb9677ad6 100644
--- a/pkg/sql/show_cluster_setting.go
+++ b/pkg/sql/show_cluster_setting.go
@@ -37,12 +37,14 @@ func (p *planner) showVersionSetting(
ctx context.Context, st *cluster.Settings, s *settings.VersionSetting, name string,
) (string, error) {
var res string
- // For statemachine settings (at the time of writing, this is only the cluster version setting)
- // we show the value from the KV store and additionally wait for the local Gossip instance to
- // have observed the value as well. This makes sure that cluster version bumps become visible
- // immediately while at the same time guaranteeing that a node reporting a certain version has
- // also processed the corresponding Gossip update (which is important as only then does the node
- // update its persisted state; see #22796).
+ // For the version setting we show the value from the KV store and
+ // additionally wait for the local setting instance to have observed the
+ // value as well (gets updated through the `EveryNode(op=AckClusterVersion)`
+ // RPC). This makes sure that cluster version bumps become visible
+ // immediately while at the same time guaranteeing that a node reporting a
+ // certain version has also processed the corresponding version bump (which
+ // is important as only then does the node update its persisted state; see
+ // #22796).
if err := contextutil.RunWithTimeout(ctx, fmt.Sprintf("show cluster setting %s", name), 2*time.Minute,
func(ctx context.Context) error {
tBegin := timeutil.Now()
@@ -72,11 +74,11 @@ func (p *planner) showVersionSetting(
return errors.AssertionFailedf("no value found for version setting")
}
- gossipRawVal := []byte(s.Get(&st.SV))
- if !bytes.Equal(gossipRawVal, kvRawVal) {
+ localRawVal := []byte(s.Get(&st.SV))
+ if !bytes.Equal(localRawVal, kvRawVal) {
return errors.Errorf(
- "value differs between gossip (%v) and KV (%v); try again later (%v after %s)",
- gossipRawVal, kvRawVal, ctx.Err(), timeutil.Since(tBegin))
+ "value differs between local setting (%v) and KV (%v); try again later (%v after %s)",
+ localRawVal, kvRawVal, ctx.Err(), timeutil.Since(tBegin))
}
val, err := s.Decode(kvRawVal)
diff --git a/pkg/sql/tests/system_table_test.go b/pkg/sql/tests/system_table_test.go
index 98a97d1d6565..05c05e41305e 100644
--- a/pkg/sql/tests/system_table_test.go
+++ b/pkg/sql/tests/system_table_test.go
@@ -191,6 +191,7 @@ func TestSystemTableLiterals(t *testing.T) {
{keys.StatementDiagnosticsTableID, systemschema.StatementDiagnosticsTableSchema, systemschema.StatementDiagnosticsTable},
{keys.ScheduledJobsTableID, systemschema.ScheduledJobsTableSchema, systemschema.ScheduledJobsTable},
{keys.SqllivenessID, systemschema.SqllivenessTableSchema, systemschema.SqllivenessTable},
+ {keys.MigrationsID, systemschema.MigrationsTableSchema, systemschema.MigrationsTable},
} {
privs := *test.pkg.Privileges
gen, err := sql.CreateTestTableDescriptor(
diff --git a/pkg/sql/tests/testdata/initial_keys b/pkg/sql/tests/testdata/initial_keys
index 0a3eeea059ec..fede84a0c496 100644
--- a/pkg/sql/tests/testdata/initial_keys
+++ b/pkg/sql/tests/testdata/initial_keys
@@ -1,6 +1,6 @@
initial-keys tenant=system
----
-69 keys:
+71 keys:
/System/"desc-idgen"
/Table/3/1/1/2/1
/Table/3/1/2/2/1
@@ -32,6 +32,7 @@ initial-keys tenant=system
/Table/3/1/36/2/1
/Table/3/1/37/2/1
/Table/3/1/39/2/1
+ /Table/3/1/40/2/1
/Table/5/1/0/2/1
/Table/5/1/1/2/1
/Table/5/1/16/2/1
@@ -47,6 +48,7 @@ initial-keys tenant=system
/NamespaceTable/30/1/1/29/"jobs"/4/1
/NamespaceTable/30/1/1/29/"lease"/4/1
/NamespaceTable/30/1/1/29/"locations"/4/1
+ /NamespaceTable/30/1/1/29/"migrations"/4/1
/NamespaceTable/30/1/1/29/"namespace"/4/1
/NamespaceTable/30/1/1/29/"namespace2"/4/1
/NamespaceTable/30/1/1/29/"protected_ts_meta"/4/1
@@ -70,7 +72,7 @@ initial-keys tenant=system
/NamespaceTable/30/1/1/29/"users"/4/1
/NamespaceTable/30/1/1/29/"web_sessions"/4/1
/NamespaceTable/30/1/1/29/"zones"/4/1
-29 splits:
+30 splits:
/Table/11
/Table/12
/Table/13
@@ -100,10 +102,11 @@ initial-keys tenant=system
/Table/37
/Table/38
/Table/39
+ /Table/40
initial-keys tenant=5
----
-60 keys:
+62 keys:
/Tenant/5/Table/3/1/1/2/1
/Tenant/5/Table/3/1/2/2/1
/Tenant/5/Table/3/1/3/2/1
@@ -133,6 +136,7 @@ initial-keys tenant=5
/Tenant/5/Table/3/1/36/2/1
/Tenant/5/Table/3/1/37/2/1
/Tenant/5/Table/3/1/39/2/1
+ /Tenant/5/Table/3/1/40/2/1
/Tenant/5/Table/7/1/0/0
/Tenant/5/NamespaceTable/30/1/0/0/"system"/4/1
/Tenant/5/NamespaceTable/30/1/1/0/"public"/4/1
@@ -143,6 +147,7 @@ initial-keys tenant=5
/Tenant/5/NamespaceTable/30/1/1/29/"jobs"/4/1
/Tenant/5/NamespaceTable/30/1/1/29/"lease"/4/1
/Tenant/5/NamespaceTable/30/1/1/29/"locations"/4/1
+ /Tenant/5/NamespaceTable/30/1/1/29/"migrations"/4/1
/Tenant/5/NamespaceTable/30/1/1/29/"namespace"/4/1
/Tenant/5/NamespaceTable/30/1/1/29/"namespace2"/4/1
/Tenant/5/NamespaceTable/30/1/1/29/"protected_ts_meta"/4/1
@@ -169,7 +174,7 @@ initial-keys tenant=5
initial-keys tenant=999
----
-60 keys:
+62 keys:
/Tenant/999/Table/3/1/1/2/1
/Tenant/999/Table/3/1/2/2/1
/Tenant/999/Table/3/1/3/2/1
@@ -199,6 +204,7 @@ initial-keys tenant=999
/Tenant/999/Table/3/1/36/2/1
/Tenant/999/Table/3/1/37/2/1
/Tenant/999/Table/3/1/39/2/1
+ /Tenant/999/Table/3/1/40/2/1
/Tenant/999/Table/7/1/0/0
/Tenant/999/NamespaceTable/30/1/0/0/"system"/4/1
/Tenant/999/NamespaceTable/30/1/1/0/"public"/4/1
@@ -209,6 +215,7 @@ initial-keys tenant=999
/Tenant/999/NamespaceTable/30/1/1/29/"jobs"/4/1
/Tenant/999/NamespaceTable/30/1/1/29/"lease"/4/1
/Tenant/999/NamespaceTable/30/1/1/29/"locations"/4/1
+ /Tenant/999/NamespaceTable/30/1/1/29/"migrations"/4/1
/Tenant/999/NamespaceTable/30/1/1/29/"namespace"/4/1
/Tenant/999/NamespaceTable/30/1/1/29/"namespace2"/4/1
/Tenant/999/NamespaceTable/30/1/1/29/"protected_ts_meta"/4/1
diff --git a/pkg/sqlmigrations/migrations.go b/pkg/sqlmigrations/migrations.go
index 5a6a2f8b8a5e..6bf4a02a0329 100644
--- a/pkg/sqlmigrations/migrations.go
+++ b/pkg/sqlmigrations/migrations.go
@@ -373,6 +373,13 @@ var backwardCompatibleMigrations = []migrationDescriptor{
workFn: markDeprecatedSchemaChangeJobsFailed,
includedInBootstrap: clusterversion.VersionByKey(clusterversion.VersionLeasedDatabaseDescriptors),
},
+ {
+ // Introduced in v21.1.
+ name: "create new system.migrations table",
+ workFn: createMigrationTable,
+ includedInBootstrap: clusterversion.VersionByKey(clusterversion.VersionMigrationTable),
+ newDescriptorIDs: staticIDs(keys.MigrationsID),
+ },
}
func staticIDs(
@@ -1217,7 +1224,24 @@ func populateVersionSetting(ctx context.Context, r runner) error {
return err
}
- if err := r.execAsRoot(
+ // NB: We have to run with retry here due to the following "race" condition:
+ // - We're attempting to the set the cluster version at startup.
+ // - Setting the cluster version requires all nodes to be up and running, in
+ // order to push out all relevant version gates.
+ // - This list of "all nodes" is gathered by looking at all the liveness
+ // records in KV.
+ // - When starting a multi-node cluster all at once, nodes other than the
+ // one being bootstrapped join the cluster using the join RPC.
+ // - The join RPC results in the creation of a liveness record for the
+ // joining node, except it starts off in an expired state (leaving it to
+ // the joining node to heartbeat it for the very first time).
+ //
+ // Attempting to set the cluster version at startup, while there also may be
+ // other nodes trying to join, could then result in failures where the
+ // migration infrastructure find expired liveness records and gives up. To
+ // that end we'll simply retry, expecting the joining nodes to "come live"
+ // before long.
+ if err := r.execAsRootWithRetry(
ctx, "set-setting", "SET CLUSTER SETTING version = $1", v.String(),
); err != nil {
return err
@@ -1442,6 +1466,14 @@ func createTenantsTable(ctx context.Context, r runner) error {
return createSystemTable(ctx, r, systemschema.TenantsTable)
}
+func createMigrationTable(ctx context.Context, r runner) error {
+ err := createSystemTable(ctx, r, systemschema.MigrationsTable)
+ if err != nil {
+ return errors.Wrap(err, "failed to create system.migrations")
+ }
+ return nil
+}
+
func alterSystemScheduledJobsFixTableSchema(ctx context.Context, r runner) error {
setOwner := "UPDATE system.scheduled_jobs SET owner='root' WHERE owner IS NULL"
asNode := sessiondata.InternalExecutorOverride{User: security.NodeUserName()}
diff --git a/pkg/ts/catalog/chart_catalog.go b/pkg/ts/catalog/chart_catalog.go
index c7812fab7dea..d3debe0f953e 100644
--- a/pkg/ts/catalog/chart_catalog.go
+++ b/pkg/ts/catalog/chart_catalog.go
@@ -305,6 +305,7 @@ var charts = []sectionDescription{
"distsender.rpc.initput.sent",
"distsender.rpc.leaseinfo.sent",
"distsender.rpc.merge.sent",
+ "distsender.rpc.migrate.sent",
"distsender.rpc.pushtxn.sent",
"distsender.rpc.put.sent",
"distsender.rpc.queryintent.sent",