go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/proto/v1/changepoints.pb.go (about)

     1  // Copyright 2024 The LUCI Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  // Code generated by protoc-gen-go. DO NOT EDIT.
    16  // versions:
    17  // 	protoc-gen-go v1.32.0
    18  // 	protoc        v3.21.7
    19  // source: go.chromium.org/luci/analysis/proto/v1/changepoints.proto
    20  
    21  package analysispb
    22  
    23  import prpc "go.chromium.org/luci/grpc/prpc"
    24  
    25  import (
    26  	context "context"
    27  	grpc "google.golang.org/grpc"
    28  	codes "google.golang.org/grpc/codes"
    29  	status "google.golang.org/grpc/status"
    30  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    31  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    32  	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
    33  	reflect "reflect"
    34  	sync "sync"
    35  )
    36  
    37  const (
    38  	// Verify that this generated code is sufficiently up-to-date.
    39  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    40  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    41  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    42  )
    43  
    44  type QueryChangepointGroupSummariesRequest struct {
    45  	state         protoimpl.MessageState
    46  	sizeCache     protoimpl.SizeCache
    47  	unknownFields protoimpl.UnknownFields
    48  
    49  	// The LUCI project. Mandatory field.
    50  	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
    51  	// A filter to be applied to each changepoint in the groups.
    52  	// If all changepoints in a group are filtered out, this group will not be returned.
    53  	Predicate *ChangepointPredicate `protobuf:"bytes,2,opt,name=predicate,proto3" json:"predicate,omitempty"`
    54  }
    55  
    56  func (x *QueryChangepointGroupSummariesRequest) Reset() {
    57  	*x = QueryChangepointGroupSummariesRequest{}
    58  	if protoimpl.UnsafeEnabled {
    59  		mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[0]
    60  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
    61  		ms.StoreMessageInfo(mi)
    62  	}
    63  }
    64  
    65  func (x *QueryChangepointGroupSummariesRequest) String() string {
    66  	return protoimpl.X.MessageStringOf(x)
    67  }
    68  
    69  func (*QueryChangepointGroupSummariesRequest) ProtoMessage() {}
    70  
    71  func (x *QueryChangepointGroupSummariesRequest) ProtoReflect() protoreflect.Message {
    72  	mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[0]
    73  	if protoimpl.UnsafeEnabled && x != nil {
    74  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
    75  		if ms.LoadMessageInfo() == nil {
    76  			ms.StoreMessageInfo(mi)
    77  		}
    78  		return ms
    79  	}
    80  	return mi.MessageOf(x)
    81  }
    82  
    83  // Deprecated: Use QueryChangepointGroupSummariesRequest.ProtoReflect.Descriptor instead.
    84  func (*QueryChangepointGroupSummariesRequest) Descriptor() ([]byte, []int) {
    85  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{0}
    86  }
    87  
    88  func (x *QueryChangepointGroupSummariesRequest) GetProject() string {
    89  	if x != nil {
    90  		return x.Project
    91  	}
    92  	return ""
    93  }
    94  
    95  func (x *QueryChangepointGroupSummariesRequest) GetPredicate() *ChangepointPredicate {
    96  	if x != nil {
    97  		return x.Predicate
    98  	}
    99  	return nil
   100  }
   101  
   102  // Represent a function Changepoint -> bool
   103  type ChangepointPredicate struct {
   104  	state         protoimpl.MessageState
   105  	sizeCache     protoimpl.SizeCache
   106  	unknownFields protoimpl.UnknownFields
   107  
   108  	// The test id of this changepoint matches this prefix.
   109  	TestIdPrefix string `protobuf:"bytes,1,opt,name=test_id_prefix,json=testIdPrefix,proto3" json:"test_id_prefix,omitempty"`
   110  	// Specify a range. The unexpected verdict rate change on this changepoint needs to fall into this range.
   111  	// Unexpected verdict rate change is calculated by (unexpected verdict rate after changepoint - unexpected verdict rate before changepoint). Negative number means unexpected verdict rate decreases, positive number means increases.
   112  	// eg. {lower_bound:0.1, upper_bound:0.9} means keep changepoint which has a unexpected verdict rate increase >= 10% and <= 90%.
   113  	UnexpectedVerdictRateChangeRange *NumericRange `protobuf:"bytes,2,opt,name=unexpected_verdict_rate_change_range,json=unexpectedVerdictRateChangeRange,proto3" json:"unexpected_verdict_rate_change_range,omitempty"`
   114  }
   115  
   116  func (x *ChangepointPredicate) Reset() {
   117  	*x = ChangepointPredicate{}
   118  	if protoimpl.UnsafeEnabled {
   119  		mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[1]
   120  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   121  		ms.StoreMessageInfo(mi)
   122  	}
   123  }
   124  
   125  func (x *ChangepointPredicate) String() string {
   126  	return protoimpl.X.MessageStringOf(x)
   127  }
   128  
   129  func (*ChangepointPredicate) ProtoMessage() {}
   130  
   131  func (x *ChangepointPredicate) ProtoReflect() protoreflect.Message {
   132  	mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[1]
   133  	if protoimpl.UnsafeEnabled && x != nil {
   134  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   135  		if ms.LoadMessageInfo() == nil {
   136  			ms.StoreMessageInfo(mi)
   137  		}
   138  		return ms
   139  	}
   140  	return mi.MessageOf(x)
   141  }
   142  
   143  // Deprecated: Use ChangepointPredicate.ProtoReflect.Descriptor instead.
   144  func (*ChangepointPredicate) Descriptor() ([]byte, []int) {
   145  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{1}
   146  }
   147  
   148  func (x *ChangepointPredicate) GetTestIdPrefix() string {
   149  	if x != nil {
   150  		return x.TestIdPrefix
   151  	}
   152  	return ""
   153  }
   154  
   155  func (x *ChangepointPredicate) GetUnexpectedVerdictRateChangeRange() *NumericRange {
   156  	if x != nil {
   157  		return x.UnexpectedVerdictRateChangeRange
   158  	}
   159  	return nil
   160  }
   161  
   162  type QueryChangepointGroupSummariesResponse struct {
   163  	state         protoimpl.MessageState
   164  	sizeCache     protoimpl.SizeCache
   165  	unknownFields protoimpl.UnknownFields
   166  
   167  	// A list of changepoint group summaries.
   168  	GroupSummaries []*ChangepointGroupSummary `protobuf:"bytes,1,rep,name=group_summaries,json=groupSummaries,proto3" json:"group_summaries,omitempty"`
   169  }
   170  
   171  func (x *QueryChangepointGroupSummariesResponse) Reset() {
   172  	*x = QueryChangepointGroupSummariesResponse{}
   173  	if protoimpl.UnsafeEnabled {
   174  		mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[2]
   175  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   176  		ms.StoreMessageInfo(mi)
   177  	}
   178  }
   179  
   180  func (x *QueryChangepointGroupSummariesResponse) String() string {
   181  	return protoimpl.X.MessageStringOf(x)
   182  }
   183  
   184  func (*QueryChangepointGroupSummariesResponse) ProtoMessage() {}
   185  
   186  func (x *QueryChangepointGroupSummariesResponse) ProtoReflect() protoreflect.Message {
   187  	mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[2]
   188  	if protoimpl.UnsafeEnabled && x != nil {
   189  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   190  		if ms.LoadMessageInfo() == nil {
   191  			ms.StoreMessageInfo(mi)
   192  		}
   193  		return ms
   194  	}
   195  	return mi.MessageOf(x)
   196  }
   197  
   198  // Deprecated: Use QueryChangepointGroupSummariesResponse.ProtoReflect.Descriptor instead.
   199  func (*QueryChangepointGroupSummariesResponse) Descriptor() ([]byte, []int) {
   200  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{2}
   201  }
   202  
   203  func (x *QueryChangepointGroupSummariesResponse) GetGroupSummaries() []*ChangepointGroupSummary {
   204  	if x != nil {
   205  		return x.GroupSummaries
   206  	}
   207  	return nil
   208  }
   209  
   210  // Represent the summary of a changepoint group.
   211  type ChangepointGroupSummary struct {
   212  	state         protoimpl.MessageState
   213  	sizeCache     protoimpl.SizeCache
   214  	unknownFields protoimpl.UnknownFields
   215  
   216  	// The canonical changepoint in the group. This is the changepoint with minimum (test_id, variant_hash, ref_hash, nominal_start_position) combination.
   217  	CanonicalChangepoint *Changepoint `protobuf:"bytes,1,opt,name=canonical_changepoint,json=canonicalChangepoint,proto3" json:"canonical_changepoint,omitempty"`
   218  	// Statistics of this group.
   219  	Statistics *ChangepointGroupStatistics `protobuf:"bytes,2,opt,name=statistics,proto3" json:"statistics,omitempty"`
   220  }
   221  
   222  func (x *ChangepointGroupSummary) Reset() {
   223  	*x = ChangepointGroupSummary{}
   224  	if protoimpl.UnsafeEnabled {
   225  		mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[3]
   226  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   227  		ms.StoreMessageInfo(mi)
   228  	}
   229  }
   230  
   231  func (x *ChangepointGroupSummary) String() string {
   232  	return protoimpl.X.MessageStringOf(x)
   233  }
   234  
   235  func (*ChangepointGroupSummary) ProtoMessage() {}
   236  
   237  func (x *ChangepointGroupSummary) ProtoReflect() protoreflect.Message {
   238  	mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[3]
   239  	if protoimpl.UnsafeEnabled && x != nil {
   240  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   241  		if ms.LoadMessageInfo() == nil {
   242  			ms.StoreMessageInfo(mi)
   243  		}
   244  		return ms
   245  	}
   246  	return mi.MessageOf(x)
   247  }
   248  
   249  // Deprecated: Use ChangepointGroupSummary.ProtoReflect.Descriptor instead.
   250  func (*ChangepointGroupSummary) Descriptor() ([]byte, []int) {
   251  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{3}
   252  }
   253  
   254  func (x *ChangepointGroupSummary) GetCanonicalChangepoint() *Changepoint {
   255  	if x != nil {
   256  		return x.CanonicalChangepoint
   257  	}
   258  	return nil
   259  }
   260  
   261  func (x *ChangepointGroupSummary) GetStatistics() *ChangepointGroupStatistics {
   262  	if x != nil {
   263  		return x.Statistics
   264  	}
   265  	return nil
   266  }
   267  
   268  type ChangepointGroupStatistics struct {
   269  	state         protoimpl.MessageState
   270  	sizeCache     protoimpl.SizeCache
   271  	unknownFields protoimpl.UnknownFields
   272  
   273  	// The number of test variant branches in this group.
   274  	Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"`
   275  	// Unexpected verdict rate before the changepoint.
   276  	// The per test variant branch, unexpected verdict rate is calculated as (count of unexpected verdict/count of all verdicts).
   277  	UnexpectedVerdictRateBefore *ChangepointGroupStatistics_RateDistribution `protobuf:"bytes,2,opt,name=unexpected_verdict_rate_before,json=unexpectedVerdictRateBefore,proto3" json:"unexpected_verdict_rate_before,omitempty"`
   278  	// Unexpected verdict rate after the changepoint.
   279  	UnexpectedVerdictRateAfter *ChangepointGroupStatistics_RateDistribution `protobuf:"bytes,3,opt,name=unexpected_verdict_rate_after,json=unexpectedVerdictRateAfter,proto3" json:"unexpected_verdict_rate_after,omitempty"`
   280  	// The current unexpected verdict rate.
   281  	UnexpectedVerdictRateCurrent *ChangepointGroupStatistics_RateDistribution `protobuf:"bytes,4,opt,name=unexpected_verdict_rate_current,json=unexpectedVerdictRateCurrent,proto3" json:"unexpected_verdict_rate_current,omitempty"`
   282  	// The amount of change in unexpected verdict rate before and after the changepoint.
   283  	UnexpectedVerdictRateChange *ChangepointGroupStatistics_RateChangeBuckets `protobuf:"bytes,5,opt,name=unexpected_verdict_rate_change,json=unexpectedVerdictRateChange,proto3" json:"unexpected_verdict_rate_change,omitempty"`
   284  }
   285  
   286  func (x *ChangepointGroupStatistics) Reset() {
   287  	*x = ChangepointGroupStatistics{}
   288  	if protoimpl.UnsafeEnabled {
   289  		mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[4]
   290  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   291  		ms.StoreMessageInfo(mi)
   292  	}
   293  }
   294  
   295  func (x *ChangepointGroupStatistics) String() string {
   296  	return protoimpl.X.MessageStringOf(x)
   297  }
   298  
   299  func (*ChangepointGroupStatistics) ProtoMessage() {}
   300  
   301  func (x *ChangepointGroupStatistics) ProtoReflect() protoreflect.Message {
   302  	mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[4]
   303  	if protoimpl.UnsafeEnabled && x != nil {
   304  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   305  		if ms.LoadMessageInfo() == nil {
   306  			ms.StoreMessageInfo(mi)
   307  		}
   308  		return ms
   309  	}
   310  	return mi.MessageOf(x)
   311  }
   312  
   313  // Deprecated: Use ChangepointGroupStatistics.ProtoReflect.Descriptor instead.
   314  func (*ChangepointGroupStatistics) Descriptor() ([]byte, []int) {
   315  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{4}
   316  }
   317  
   318  func (x *ChangepointGroupStatistics) GetCount() int32 {
   319  	if x != nil {
   320  		return x.Count
   321  	}
   322  	return 0
   323  }
   324  
   325  func (x *ChangepointGroupStatistics) GetUnexpectedVerdictRateBefore() *ChangepointGroupStatistics_RateDistribution {
   326  	if x != nil {
   327  		return x.UnexpectedVerdictRateBefore
   328  	}
   329  	return nil
   330  }
   331  
   332  func (x *ChangepointGroupStatistics) GetUnexpectedVerdictRateAfter() *ChangepointGroupStatistics_RateDistribution {
   333  	if x != nil {
   334  		return x.UnexpectedVerdictRateAfter
   335  	}
   336  	return nil
   337  }
   338  
   339  func (x *ChangepointGroupStatistics) GetUnexpectedVerdictRateCurrent() *ChangepointGroupStatistics_RateDistribution {
   340  	if x != nil {
   341  		return x.UnexpectedVerdictRateCurrent
   342  	}
   343  	return nil
   344  }
   345  
   346  func (x *ChangepointGroupStatistics) GetUnexpectedVerdictRateChange() *ChangepointGroupStatistics_RateChangeBuckets {
   347  	if x != nil {
   348  		return x.UnexpectedVerdictRateChange
   349  	}
   350  	return nil
   351  }
   352  
   353  type QueryChangepointsInGroupRequest struct {
   354  	state         protoimpl.MessageState
   355  	sizeCache     protoimpl.SizeCache
   356  	unknownFields protoimpl.UnknownFields
   357  
   358  	// The LUCI project. Mandatory field.
   359  	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
   360  	// Identify a group with this changepoint. Mandatory field.
   361  	GroupKey *QueryChangepointsInGroupRequest_ChangepointIdentifier `protobuf:"bytes,2,opt,name=group_key,json=groupKey,proto3" json:"group_key,omitempty"`
   362  	// A filter to be applied to each changepoint.
   363  	Predicate *ChangepointPredicate `protobuf:"bytes,3,opt,name=predicate,proto3" json:"predicate,omitempty"`
   364  }
   365  
   366  func (x *QueryChangepointsInGroupRequest) Reset() {
   367  	*x = QueryChangepointsInGroupRequest{}
   368  	if protoimpl.UnsafeEnabled {
   369  		mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[5]
   370  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   371  		ms.StoreMessageInfo(mi)
   372  	}
   373  }
   374  
   375  func (x *QueryChangepointsInGroupRequest) String() string {
   376  	return protoimpl.X.MessageStringOf(x)
   377  }
   378  
   379  func (*QueryChangepointsInGroupRequest) ProtoMessage() {}
   380  
   381  func (x *QueryChangepointsInGroupRequest) ProtoReflect() protoreflect.Message {
   382  	mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[5]
   383  	if protoimpl.UnsafeEnabled && x != nil {
   384  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   385  		if ms.LoadMessageInfo() == nil {
   386  			ms.StoreMessageInfo(mi)
   387  		}
   388  		return ms
   389  	}
   390  	return mi.MessageOf(x)
   391  }
   392  
   393  // Deprecated: Use QueryChangepointsInGroupRequest.ProtoReflect.Descriptor instead.
   394  func (*QueryChangepointsInGroupRequest) Descriptor() ([]byte, []int) {
   395  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{5}
   396  }
   397  
   398  func (x *QueryChangepointsInGroupRequest) GetProject() string {
   399  	if x != nil {
   400  		return x.Project
   401  	}
   402  	return ""
   403  }
   404  
   405  func (x *QueryChangepointsInGroupRequest) GetGroupKey() *QueryChangepointsInGroupRequest_ChangepointIdentifier {
   406  	if x != nil {
   407  		return x.GroupKey
   408  	}
   409  	return nil
   410  }
   411  
   412  func (x *QueryChangepointsInGroupRequest) GetPredicate() *ChangepointPredicate {
   413  	if x != nil {
   414  		return x.Predicate
   415  	}
   416  	return nil
   417  }
   418  
   419  // TODO: Implement pagination, currently just return at most 1000 changepoints.
   420  type QueryChangepointsInGroupResponse struct {
   421  	state         protoimpl.MessageState
   422  	sizeCache     protoimpl.SizeCache
   423  	unknownFields protoimpl.UnknownFields
   424  
   425  	// A list of changepoints in a group.
   426  	Changepoints []*Changepoint `protobuf:"bytes,1,rep,name=changepoints,proto3" json:"changepoints,omitempty"`
   427  }
   428  
   429  func (x *QueryChangepointsInGroupResponse) Reset() {
   430  	*x = QueryChangepointsInGroupResponse{}
   431  	if protoimpl.UnsafeEnabled {
   432  		mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[6]
   433  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   434  		ms.StoreMessageInfo(mi)
   435  	}
   436  }
   437  
   438  func (x *QueryChangepointsInGroupResponse) String() string {
   439  	return protoimpl.X.MessageStringOf(x)
   440  }
   441  
   442  func (*QueryChangepointsInGroupResponse) ProtoMessage() {}
   443  
   444  func (x *QueryChangepointsInGroupResponse) ProtoReflect() protoreflect.Message {
   445  	mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[6]
   446  	if protoimpl.UnsafeEnabled && x != nil {
   447  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   448  		if ms.LoadMessageInfo() == nil {
   449  			ms.StoreMessageInfo(mi)
   450  		}
   451  		return ms
   452  	}
   453  	return mi.MessageOf(x)
   454  }
   455  
   456  // Deprecated: Use QueryChangepointsInGroupResponse.ProtoReflect.Descriptor instead.
   457  func (*QueryChangepointsInGroupResponse) Descriptor() ([]byte, []int) {
   458  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{6}
   459  }
   460  
   461  func (x *QueryChangepointsInGroupResponse) GetChangepoints() []*Changepoint {
   462  	if x != nil {
   463  		return x.Changepoints
   464  	}
   465  	return nil
   466  }
   467  
   468  // Represent a changepoint of a test variant branch.
   469  // Next ID: 15.
   470  type Changepoint struct {
   471  	state         protoimpl.MessageState
   472  	sizeCache     protoimpl.SizeCache
   473  	unknownFields protoimpl.UnknownFields
   474  
   475  	// The LUCI Project. E.g. "chromium".
   476  	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
   477  	// The identity of the test.
   478  	TestId string `protobuf:"bytes,2,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"`
   479  	// Hash of the variant, as 16 lowercase hexadecimal characters.
   480  	// E.g. "96c68dc946ab4068".
   481  	VariantHash string `protobuf:"bytes,3,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"`
   482  	// key:value pairs to specify the way of running a particular test.
   483  	// e.g. a specific bucket, builder and a test suite.
   484  	Variant *Variant `protobuf:"bytes,14,opt,name=variant,proto3" json:"variant,omitempty"`
   485  	// Hash of the source branch, as 16 lowercase hexadecimal characters.
   486  	RefHash string `protobuf:"bytes,4,opt,name=ref_hash,json=refHash,proto3" json:"ref_hash,omitempty"`
   487  	// The branch in source control.
   488  	Ref *SourceRef `protobuf:"bytes,5,opt,name=ref,proto3" json:"ref,omitempty"`
   489  	// The nominal start hour of this changepoint.
   490  	StartHour *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=start_hour,json=startHour,proto3" json:"start_hour,omitempty"`
   491  	// The lower bound of the starting changepoint position in a 99% two-tailed
   492  	// confidence interval. Inclusive.
   493  	StartPositionLowerBound_99Th int64 `protobuf:"varint,10,opt,name=start_position_lower_bound_99th,json=startPositionLowerBound99th,proto3" json:"start_position_lower_bound_99th,omitempty"`
   494  	// The upper bound of the starting changepoint position in a 99% two-tailed
   495  	// confidence interval. Inclusive.
   496  	StartPositionUpperBound_99Th int64 `protobuf:"varint,11,opt,name=start_position_upper_bound_99th,json=startPositionUpperBound99th,proto3" json:"start_position_upper_bound_99th,omitempty"`
   497  	// The nominal commit position at which the segment starts (inclusive).
   498  	NominalStartPosition int64 `protobuf:"varint,12,opt,name=nominal_start_position,json=nominalStartPosition,proto3" json:"nominal_start_position,omitempty"`
   499  	// The nominal commit position at which the previous segment ends (inclusive).
   500  	PreviousSegmentNominalEndPosition int64 `protobuf:"varint,13,opt,name=previous_segment_nominal_end_position,json=previousSegmentNominalEndPosition,proto3" json:"previous_segment_nominal_end_position,omitempty"`
   501  }
   502  
   503  func (x *Changepoint) Reset() {
   504  	*x = Changepoint{}
   505  	if protoimpl.UnsafeEnabled {
   506  		mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[7]
   507  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   508  		ms.StoreMessageInfo(mi)
   509  	}
   510  }
   511  
   512  func (x *Changepoint) String() string {
   513  	return protoimpl.X.MessageStringOf(x)
   514  }
   515  
   516  func (*Changepoint) ProtoMessage() {}
   517  
   518  func (x *Changepoint) ProtoReflect() protoreflect.Message {
   519  	mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[7]
   520  	if protoimpl.UnsafeEnabled && x != nil {
   521  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   522  		if ms.LoadMessageInfo() == nil {
   523  			ms.StoreMessageInfo(mi)
   524  		}
   525  		return ms
   526  	}
   527  	return mi.MessageOf(x)
   528  }
   529  
   530  // Deprecated: Use Changepoint.ProtoReflect.Descriptor instead.
   531  func (*Changepoint) Descriptor() ([]byte, []int) {
   532  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{7}
   533  }
   534  
   535  func (x *Changepoint) GetProject() string {
   536  	if x != nil {
   537  		return x.Project
   538  	}
   539  	return ""
   540  }
   541  
   542  func (x *Changepoint) GetTestId() string {
   543  	if x != nil {
   544  		return x.TestId
   545  	}
   546  	return ""
   547  }
   548  
   549  func (x *Changepoint) GetVariantHash() string {
   550  	if x != nil {
   551  		return x.VariantHash
   552  	}
   553  	return ""
   554  }
   555  
   556  func (x *Changepoint) GetVariant() *Variant {
   557  	if x != nil {
   558  		return x.Variant
   559  	}
   560  	return nil
   561  }
   562  
   563  func (x *Changepoint) GetRefHash() string {
   564  	if x != nil {
   565  		return x.RefHash
   566  	}
   567  	return ""
   568  }
   569  
   570  func (x *Changepoint) GetRef() *SourceRef {
   571  	if x != nil {
   572  		return x.Ref
   573  	}
   574  	return nil
   575  }
   576  
   577  func (x *Changepoint) GetStartHour() *timestamppb.Timestamp {
   578  	if x != nil {
   579  		return x.StartHour
   580  	}
   581  	return nil
   582  }
   583  
   584  func (x *Changepoint) GetStartPositionLowerBound_99Th() int64 {
   585  	if x != nil {
   586  		return x.StartPositionLowerBound_99Th
   587  	}
   588  	return 0
   589  }
   590  
   591  func (x *Changepoint) GetStartPositionUpperBound_99Th() int64 {
   592  	if x != nil {
   593  		return x.StartPositionUpperBound_99Th
   594  	}
   595  	return 0
   596  }
   597  
   598  func (x *Changepoint) GetNominalStartPosition() int64 {
   599  	if x != nil {
   600  		return x.NominalStartPosition
   601  	}
   602  	return 0
   603  }
   604  
   605  func (x *Changepoint) GetPreviousSegmentNominalEndPosition() int64 {
   606  	if x != nil {
   607  		return x.PreviousSegmentNominalEndPosition
   608  	}
   609  	return 0
   610  }
   611  
   612  type ChangepointGroupStatistics_RateDistribution struct {
   613  	state         protoimpl.MessageState
   614  	sizeCache     protoimpl.SizeCache
   615  	unknownFields protoimpl.UnknownFields
   616  
   617  	// Average unexpected verdict rate of all test variant branches in the group. This is a value between 0.0 and 1.0.
   618  	// Consequently, this is an ‘average of averages’.
   619  	Average float32 `protobuf:"fixed32,1,opt,name=average,proto3" json:"average,omitempty"`
   620  	// Count the number of changepoint that fall into each rate bucket.
   621  	Buckets *ChangepointGroupStatistics_RateDistribution_RateBuckets `protobuf:"bytes,2,opt,name=buckets,proto3" json:"buckets,omitempty"`
   622  }
   623  
   624  func (x *ChangepointGroupStatistics_RateDistribution) Reset() {
   625  	*x = ChangepointGroupStatistics_RateDistribution{}
   626  	if protoimpl.UnsafeEnabled {
   627  		mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[8]
   628  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   629  		ms.StoreMessageInfo(mi)
   630  	}
   631  }
   632  
   633  func (x *ChangepointGroupStatistics_RateDistribution) String() string {
   634  	return protoimpl.X.MessageStringOf(x)
   635  }
   636  
   637  func (*ChangepointGroupStatistics_RateDistribution) ProtoMessage() {}
   638  
   639  func (x *ChangepointGroupStatistics_RateDistribution) ProtoReflect() protoreflect.Message {
   640  	mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[8]
   641  	if protoimpl.UnsafeEnabled && x != nil {
   642  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   643  		if ms.LoadMessageInfo() == nil {
   644  			ms.StoreMessageInfo(mi)
   645  		}
   646  		return ms
   647  	}
   648  	return mi.MessageOf(x)
   649  }
   650  
   651  // Deprecated: Use ChangepointGroupStatistics_RateDistribution.ProtoReflect.Descriptor instead.
   652  func (*ChangepointGroupStatistics_RateDistribution) Descriptor() ([]byte, []int) {
   653  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{4, 0}
   654  }
   655  
   656  func (x *ChangepointGroupStatistics_RateDistribution) GetAverage() float32 {
   657  	if x != nil {
   658  		return x.Average
   659  	}
   660  	return 0
   661  }
   662  
   663  func (x *ChangepointGroupStatistics_RateDistribution) GetBuckets() *ChangepointGroupStatistics_RateDistribution_RateBuckets {
   664  	if x != nil {
   665  		return x.Buckets
   666  	}
   667  	return nil
   668  }
   669  
   670  // Unexpected verdict rate change is calculated by (unexpected verdict rate after changepoint - unexpected verdict rate before changepoint).
   671  // TODO: we need to add buckets for unexpected verdict rate decrease when we support grouping fixes. Unexpected verdict rate decrease will be represented as negative number.
   672  type ChangepointGroupStatistics_RateChangeBuckets struct {
   673  	state         protoimpl.MessageState
   674  	sizeCache     protoimpl.SizeCache
   675  	unknownFields protoimpl.UnknownFields
   676  
   677  	// Counts the number of test variant branches which saw their unexpected verdict rate increase by between 0% (inclusive) and 20% (exclusive).
   678  	CountIncreased_0To_20Percent int32 `protobuf:"varint,1,opt,name=count_increased_0_to_20_percent,json=countIncreased0To20Percent,proto3" json:"count_increased_0_to_20_percent,omitempty"`
   679  	// Counts the number of test variant branches which saw their unexpected verdict rate increase by between 20% (inclusive) and 50% (exclusive).
   680  	CountIncreased_20To_50Percent int32 `protobuf:"varint,2,opt,name=count_increased_20_to_50_percent,json=countIncreased20To50Percent,proto3" json:"count_increased_20_to_50_percent,omitempty"`
   681  	// Counts the number of test variant branches which saw their unexpected verdict rate increase by between 50% (inclusive) or more.
   682  	CountIncreased_50To_100Percent int32 `protobuf:"varint,3,opt,name=count_increased_50_to_100_percent,json=countIncreased50To100Percent,proto3" json:"count_increased_50_to_100_percent,omitempty"`
   683  }
   684  
   685  func (x *ChangepointGroupStatistics_RateChangeBuckets) Reset() {
   686  	*x = ChangepointGroupStatistics_RateChangeBuckets{}
   687  	if protoimpl.UnsafeEnabled {
   688  		mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[9]
   689  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   690  		ms.StoreMessageInfo(mi)
   691  	}
   692  }
   693  
   694  func (x *ChangepointGroupStatistics_RateChangeBuckets) String() string {
   695  	return protoimpl.X.MessageStringOf(x)
   696  }
   697  
   698  func (*ChangepointGroupStatistics_RateChangeBuckets) ProtoMessage() {}
   699  
   700  func (x *ChangepointGroupStatistics_RateChangeBuckets) ProtoReflect() protoreflect.Message {
   701  	mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[9]
   702  	if protoimpl.UnsafeEnabled && x != nil {
   703  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   704  		if ms.LoadMessageInfo() == nil {
   705  			ms.StoreMessageInfo(mi)
   706  		}
   707  		return ms
   708  	}
   709  	return mi.MessageOf(x)
   710  }
   711  
   712  // Deprecated: Use ChangepointGroupStatistics_RateChangeBuckets.ProtoReflect.Descriptor instead.
   713  func (*ChangepointGroupStatistics_RateChangeBuckets) Descriptor() ([]byte, []int) {
   714  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{4, 1}
   715  }
   716  
   717  func (x *ChangepointGroupStatistics_RateChangeBuckets) GetCountIncreased_0To_20Percent() int32 {
   718  	if x != nil {
   719  		return x.CountIncreased_0To_20Percent
   720  	}
   721  	return 0
   722  }
   723  
   724  func (x *ChangepointGroupStatistics_RateChangeBuckets) GetCountIncreased_20To_50Percent() int32 {
   725  	if x != nil {
   726  		return x.CountIncreased_20To_50Percent
   727  	}
   728  	return 0
   729  }
   730  
   731  func (x *ChangepointGroupStatistics_RateChangeBuckets) GetCountIncreased_50To_100Percent() int32 {
   732  	if x != nil {
   733  		return x.CountIncreased_50To_100Percent
   734  	}
   735  	return 0
   736  }
   737  
   738  type ChangepointGroupStatistics_RateDistribution_RateBuckets struct {
   739  	state         protoimpl.MessageState
   740  	sizeCache     protoimpl.SizeCache
   741  	unknownFields protoimpl.UnknownFields
   742  
   743  	// Counts the number of test variant branches with a unexpected verdict rate less than 5% (exclusive).
   744  	CountLess_5Percent int32 `protobuf:"varint,1,opt,name=count_less_5_percent,json=countLess5Percent,proto3" json:"count_less_5_percent,omitempty"`
   745  	// Counts the number of test variant branches with a unexpected verdict rate greater than or equal to 5%, but less than 95%.
   746  	CountAbove_5LessThan_95Percent int32 `protobuf:"varint,2,opt,name=count_above_5_less_than_95_percent,json=countAbove5LessThan95Percent,proto3" json:"count_above_5_less_than_95_percent,omitempty"`
   747  	// Counts the number of test variant branches with a unexpected verdict rate equal to or greater than 95%.
   748  	CountAbove_95Percent int32 `protobuf:"varint,3,opt,name=count_above_95_percent,json=countAbove95Percent,proto3" json:"count_above_95_percent,omitempty"`
   749  }
   750  
   751  func (x *ChangepointGroupStatistics_RateDistribution_RateBuckets) Reset() {
   752  	*x = ChangepointGroupStatistics_RateDistribution_RateBuckets{}
   753  	if protoimpl.UnsafeEnabled {
   754  		mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[10]
   755  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   756  		ms.StoreMessageInfo(mi)
   757  	}
   758  }
   759  
   760  func (x *ChangepointGroupStatistics_RateDistribution_RateBuckets) String() string {
   761  	return protoimpl.X.MessageStringOf(x)
   762  }
   763  
   764  func (*ChangepointGroupStatistics_RateDistribution_RateBuckets) ProtoMessage() {}
   765  
   766  func (x *ChangepointGroupStatistics_RateDistribution_RateBuckets) ProtoReflect() protoreflect.Message {
   767  	mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[10]
   768  	if protoimpl.UnsafeEnabled && x != nil {
   769  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   770  		if ms.LoadMessageInfo() == nil {
   771  			ms.StoreMessageInfo(mi)
   772  		}
   773  		return ms
   774  	}
   775  	return mi.MessageOf(x)
   776  }
   777  
   778  // Deprecated: Use ChangepointGroupStatistics_RateDistribution_RateBuckets.ProtoReflect.Descriptor instead.
   779  func (*ChangepointGroupStatistics_RateDistribution_RateBuckets) Descriptor() ([]byte, []int) {
   780  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{4, 0, 0}
   781  }
   782  
   783  func (x *ChangepointGroupStatistics_RateDistribution_RateBuckets) GetCountLess_5Percent() int32 {
   784  	if x != nil {
   785  		return x.CountLess_5Percent
   786  	}
   787  	return 0
   788  }
   789  
   790  func (x *ChangepointGroupStatistics_RateDistribution_RateBuckets) GetCountAbove_5LessThan_95Percent() int32 {
   791  	if x != nil {
   792  		return x.CountAbove_5LessThan_95Percent
   793  	}
   794  	return 0
   795  }
   796  
   797  func (x *ChangepointGroupStatistics_RateDistribution_RateBuckets) GetCountAbove_95Percent() int32 {
   798  	if x != nil {
   799  		return x.CountAbove_95Percent
   800  	}
   801  	return 0
   802  }
   803  
   804  // We consider two changepoints matches if
   805  //   - their test_id, variant_hash, ref_hash are exactly the same,
   806  //     AND
   807  //   - nominal_start_position is within the other changepoint's 99% confidence interval (inclusive).
   808  //
   809  // Most of the time there should be only one matching changepoint.
   810  // However, in rare cases adjacent segments can have an overlapping 99% confidence interval.
   811  // It makes it possible that more than one changepoint matches. In this case, we select the one with the closest nominal start position.
   812  type QueryChangepointsInGroupRequest_ChangepointIdentifier struct {
   813  	state         protoimpl.MessageState
   814  	sizeCache     protoimpl.SizeCache
   815  	unknownFields protoimpl.UnknownFields
   816  
   817  	TestId               string `protobuf:"bytes,1,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"`
   818  	VariantHash          string `protobuf:"bytes,2,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"`
   819  	RefHash              string `protobuf:"bytes,3,opt,name=ref_hash,json=refHash,proto3" json:"ref_hash,omitempty"`
   820  	NominalStartPosition int64  `protobuf:"varint,4,opt,name=nominal_start_position,json=nominalStartPosition,proto3" json:"nominal_start_position,omitempty"`
   821  	// The nominal start hour of this changepoint in UTC.
   822  	// This is used to locate a week in UTC (Saturday to Sunday) to generate changepoint groups.
   823  	StartHour *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=start_hour,json=startHour,proto3" json:"start_hour,omitempty"`
   824  }
   825  
   826  func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) Reset() {
   827  	*x = QueryChangepointsInGroupRequest_ChangepointIdentifier{}
   828  	if protoimpl.UnsafeEnabled {
   829  		mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[11]
   830  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   831  		ms.StoreMessageInfo(mi)
   832  	}
   833  }
   834  
   835  func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) String() string {
   836  	return protoimpl.X.MessageStringOf(x)
   837  }
   838  
   839  func (*QueryChangepointsInGroupRequest_ChangepointIdentifier) ProtoMessage() {}
   840  
   841  func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) ProtoReflect() protoreflect.Message {
   842  	mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[11]
   843  	if protoimpl.UnsafeEnabled && x != nil {
   844  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   845  		if ms.LoadMessageInfo() == nil {
   846  			ms.StoreMessageInfo(mi)
   847  		}
   848  		return ms
   849  	}
   850  	return mi.MessageOf(x)
   851  }
   852  
   853  // Deprecated: Use QueryChangepointsInGroupRequest_ChangepointIdentifier.ProtoReflect.Descriptor instead.
   854  func (*QueryChangepointsInGroupRequest_ChangepointIdentifier) Descriptor() ([]byte, []int) {
   855  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{5, 0}
   856  }
   857  
   858  func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) GetTestId() string {
   859  	if x != nil {
   860  		return x.TestId
   861  	}
   862  	return ""
   863  }
   864  
   865  func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) GetVariantHash() string {
   866  	if x != nil {
   867  		return x.VariantHash
   868  	}
   869  	return ""
   870  }
   871  
   872  func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) GetRefHash() string {
   873  	if x != nil {
   874  		return x.RefHash
   875  	}
   876  	return ""
   877  }
   878  
   879  func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) GetNominalStartPosition() int64 {
   880  	if x != nil {
   881  		return x.NominalStartPosition
   882  	}
   883  	return 0
   884  }
   885  
   886  func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) GetStartHour() *timestamppb.Timestamp {
   887  	if x != nil {
   888  		return x.StartHour
   889  	}
   890  	return nil
   891  }
   892  
   893  var File_go_chromium_org_luci_analysis_proto_v1_changepoints_proto protoreflect.FileDescriptor
   894  
   895  var file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDesc = []byte{
   896  	0x0a, 0x39, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
   897  	0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f,
   898  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70,
   899  	0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x6c, 0x75, 0x63,
   900  	0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67,
   901  	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74,
   902  	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34,
   903  	0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
   904  	0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72,
   905  	0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x70,
   906  	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x33, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
   907  	0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79,
   908  	0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d,
   909  	0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x87, 0x01, 0x0a, 0x25, 0x51, 0x75,
   910  	0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72,
   911  	0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
   912  	0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01,
   913  	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x44, 0x0a,
   914  	0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
   915  	0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73,
   916  	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x50,
   917  	0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63,
   918  	0x61, 0x74, 0x65, 0x22, 0xac, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f,
   919  	0x69, 0x6e, 0x74, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e,
   920  	0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01,
   921  	0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64, 0x50, 0x72, 0x65, 0x66,
   922  	0x69, 0x78, 0x12, 0x6e, 0x0a, 0x24, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64,
   923  	0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68,
   924  	0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
   925  	0x32, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73,
   926  	0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x52, 0x61, 0x6e, 0x67, 0x65,
   927  	0x52, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x65, 0x72, 0x64,
   928  	0x69, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x61, 0x6e,
   929  	0x67, 0x65, 0x22, 0x7c, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67,
   930  	0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61,
   931  	0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0f,
   932  	0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18,
   933  	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61,
   934  	0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70,
   935  	0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79,
   936  	0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73,
   937  	0x22, 0xbb, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74,
   938  	0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x15,
   939  	0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
   940  	0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75,
   941  	0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43,
   942  	0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x14, 0x63, 0x61, 0x6e, 0x6f,
   943  	0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74,
   944  	0x12, 0x4c, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02,
   945  	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c,
   946  	0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f,
   947  	0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69,
   948  	0x63, 0x73, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x86,
   949  	0x09, 0x0a, 0x1a, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72,
   950  	0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x14, 0x0a,
   951  	0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f,
   952  	0x75, 0x6e, 0x74, 0x12, 0x82, 0x01, 0x0a, 0x1e, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74,
   953  	0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f,
   954  	0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6c,
   955  	0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e,
   956  	0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70,
   957  	0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44,
   958  	0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1b, 0x75, 0x6e, 0x65,
   959  	0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, 0x61,
   960  	0x74, 0x65, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x1d, 0x75, 0x6e, 0x65,
   961  	0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x5f,
   962  	0x72, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
   963  	0x32, 0x3d, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73,
   964  	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47,
   965  	0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x52,
   966  	0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52,
   967  	0x1a, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x65, 0x72, 0x64, 0x69,
   968  	0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x84, 0x01, 0x0a, 0x1f,
   969  	0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69,
   970  	0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18,
   971  	0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61,
   972  	0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70,
   973  	0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74,
   974  	0x69, 0x63, 0x73, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75,
   975  	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64,
   976  	0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65,
   977  	0x6e, 0x74, 0x12, 0x83, 0x01, 0x0a, 0x1e, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65,
   978  	0x64, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63,
   979  	0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x6c, 0x75,
   980  	0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43,
   981  	0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53,
   982  	0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x43, 0x68,
   983  	0x61, 0x6e, 0x67, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x1b, 0x75, 0x6e, 0x65,
   984  	0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, 0x61,
   985  	0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0xd1, 0x02, 0x0a, 0x10, 0x52, 0x61, 0x74,
   986  	0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a,
   987  	0x07, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07,
   988  	0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x12, 0x63, 0x0a, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65,
   989  	0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e,
   990  	0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e,
   991  	0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74,
   992  	0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72,
   993  	0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b,
   994  	0x65, 0x74, 0x73, 0x52, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x1a, 0xbd, 0x01, 0x0a,
   995  	0x0b, 0x52, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x14,
   996  	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x35, 0x5f, 0x70, 0x65, 0x72,
   997  	0x63, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x63, 0x6f, 0x75, 0x6e,
   998  	0x74, 0x4c, 0x65, 0x73, 0x73, 0x35, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a,
   999  	0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x35, 0x5f, 0x6c,
  1000  	0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x5f, 0x39, 0x35, 0x5f, 0x70, 0x65, 0x72, 0x63,
  1001  	0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1c, 0x63, 0x6f, 0x75, 0x6e, 0x74,
  1002  	0x41, 0x62, 0x6f, 0x76, 0x65, 0x35, 0x4c, 0x65, 0x73, 0x73, 0x54, 0x68, 0x61, 0x6e, 0x39, 0x35,
  1003  	0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x75, 0x6e, 0x74,
  1004  	0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x39, 0x35, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e,
  1005  	0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x62,
  1006  	0x6f, 0x76, 0x65, 0x39, 0x35, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x1a, 0xe8, 0x01, 0x0a,
  1007  	0x11, 0x52, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65,
  1008  	0x74, 0x73, 0x12, 0x43, 0x0a, 0x1f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x63, 0x72,
  1009  	0x65, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x30, 0x5f, 0x74, 0x6f, 0x5f, 0x32, 0x30, 0x5f, 0x70, 0x65,
  1010  	0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1a, 0x63, 0x6f, 0x75,
  1011  	0x6e, 0x74, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x64, 0x30, 0x54, 0x6f, 0x32, 0x30,
  1012  	0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74,
  1013  	0x5f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x32, 0x30, 0x5f, 0x74, 0x6f,
  1014  	0x5f, 0x35, 0x30, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
  1015  	0x05, 0x52, 0x1b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65,
  1016  	0x64, 0x32, 0x30, 0x54, 0x6f, 0x35, 0x30, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x47,
  1017  	0x0a, 0x21, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65,
  1018  	0x64, 0x5f, 0x35, 0x30, 0x5f, 0x74, 0x6f, 0x5f, 0x31, 0x30, 0x30, 0x5f, 0x70, 0x65, 0x72, 0x63,
  1019  	0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1c, 0x63, 0x6f, 0x75, 0x6e, 0x74,
  1020  	0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x64, 0x35, 0x30, 0x54, 0x6f, 0x31, 0x30, 0x30,
  1021  	0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0xc9, 0x03, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72,
  1022  	0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x47,
  1023  	0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70,
  1024  	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72,
  1025  	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x64, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6b,
  1026  	0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e,
  1027  	0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72,
  1028  	0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x47,
  1029  	0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e,
  1030  	0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
  1031  	0x72, 0x52, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x09, 0x70,
  1032  	0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26,
  1033  	0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76,
  1034  	0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x65,
  1035  	0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74,
  1036  	0x65, 0x1a, 0xdf, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e,
  1037  	0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74,
  1038  	0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65,
  1039  	0x73, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f,
  1040  	0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69,
  1041  	0x61, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x5f, 0x68,
  1042  	0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x66, 0x48, 0x61,
  1043  	0x73, 0x68, 0x12, 0x34, 0x0a, 0x16, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74,
  1044  	0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
  1045  	0x28, 0x03, 0x52, 0x14, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74,
  1046  	0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72,
  1047  	0x74, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
  1048  	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
  1049  	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48,
  1050  	0x6f, 0x75, 0x72, 0x22, 0x65, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e,
  1051  	0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
  1052  	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x67,
  1053  	0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e,
  1054  	0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31,
  1055  	0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0c, 0x63, 0x68,
  1056  	0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0xb1, 0x04, 0x0a, 0x0b, 0x43,
  1057  	0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72,
  1058  	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f,
  1059  	0x6a, 0x65, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18,
  1060  	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a,
  1061  	0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20,
  1062  	0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68,
  1063  	0x12, 0x33, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28,
  1064  	0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69,
  1065  	0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x52, 0x07, 0x76, 0x61,
  1066  	0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x5f, 0x68, 0x61, 0x73,
  1067  	0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x66, 0x48, 0x61, 0x73, 0x68,
  1068  	0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
  1069  	0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31,
  1070  	0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12,
  1071  	0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x09, 0x20,
  1072  	0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
  1073  	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52,
  1074  	0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x44, 0x0a, 0x1f, 0x73, 0x74,
  1075  	0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x77,
  1076  	0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x39, 0x39, 0x74, 0x68, 0x18, 0x0a, 0x20,
  1077  	0x01, 0x28, 0x03, 0x52, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69,
  1078  	0x6f, 0x6e, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x39, 0x39, 0x74, 0x68,
  1079  	0x12, 0x44, 0x0a, 0x1f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
  1080  	0x6f, 0x6e, 0x5f, 0x75, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x39,
  1081  	0x39, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x74,
  1082  	0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x75,
  1083  	0x6e, 0x64, 0x39, 0x39, 0x74, 0x68, 0x12, 0x34, 0x0a, 0x16, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61,
  1084  	0x6c, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
  1085  	0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x53,
  1086  	0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x25,
  1087  	0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74,
  1088  	0x5f, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x6f, 0x73,
  1089  	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x21, 0x70, 0x72, 0x65,
  1090  	0x76, 0x69, 0x6f, 0x75, 0x73, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x6d, 0x69,
  1091  	0x6e, 0x61, 0x6c, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0xac,
  1092  	0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12,
  1093  	0x95, 0x01, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70,
  1094  	0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69,
  1095  	0x65, 0x73, 0x12, 0x37, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73,
  1096  	0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67,
  1097  	0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61,
  1098  	0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x6c, 0x75,
  1099  	0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51,
  1100  	0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47,
  1101  	0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73,
  1102  	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72,
  1103  	0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x47,
  1104  	0x72, 0x6f, 0x75, 0x70, 0x12, 0x31, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c,
  1105  	0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61,
  1106  	0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70,
  1107  	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61,
  1108  	0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
  1109  	0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x47, 0x72,
  1110  	0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x33, 0x5a,
  1111  	0x31, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67,
  1112  	0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70,
  1113  	0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73,
  1114  	0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
  1115  }
  1116  
  1117  var (
  1118  	file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescOnce sync.Once
  1119  	file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescData = file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDesc
  1120  )
  1121  
  1122  func file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP() []byte {
  1123  	file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescOnce.Do(func() {
  1124  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescData)
  1125  	})
  1126  	return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescData
  1127  }
  1128  
  1129  var file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
  1130  var file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_goTypes = []interface{}{
  1131  	(*QueryChangepointGroupSummariesRequest)(nil),                   // 0: luci.analysis.v1.QueryChangepointGroupSummariesRequest
  1132  	(*ChangepointPredicate)(nil),                                    // 1: luci.analysis.v1.ChangepointPredicate
  1133  	(*QueryChangepointGroupSummariesResponse)(nil),                  // 2: luci.analysis.v1.QueryChangepointGroupSummariesResponse
  1134  	(*ChangepointGroupSummary)(nil),                                 // 3: luci.analysis.v1.ChangepointGroupSummary
  1135  	(*ChangepointGroupStatistics)(nil),                              // 4: luci.analysis.v1.ChangepointGroupStatistics
  1136  	(*QueryChangepointsInGroupRequest)(nil),                         // 5: luci.analysis.v1.QueryChangepointsInGroupRequest
  1137  	(*QueryChangepointsInGroupResponse)(nil),                        // 6: luci.analysis.v1.QueryChangepointsInGroupResponse
  1138  	(*Changepoint)(nil),                                             // 7: luci.analysis.v1.Changepoint
  1139  	(*ChangepointGroupStatistics_RateDistribution)(nil),             // 8: luci.analysis.v1.ChangepointGroupStatistics.RateDistribution
  1140  	(*ChangepointGroupStatistics_RateChangeBuckets)(nil),            // 9: luci.analysis.v1.ChangepointGroupStatistics.RateChangeBuckets
  1141  	(*ChangepointGroupStatistics_RateDistribution_RateBuckets)(nil), // 10: luci.analysis.v1.ChangepointGroupStatistics.RateDistribution.RateBuckets
  1142  	(*QueryChangepointsInGroupRequest_ChangepointIdentifier)(nil),   // 11: luci.analysis.v1.QueryChangepointsInGroupRequest.ChangepointIdentifier
  1143  	(*NumericRange)(nil),                                            // 12: luci.analysis.v1.NumericRange
  1144  	(*Variant)(nil),                                                 // 13: luci.analysis.v1.Variant
  1145  	(*SourceRef)(nil),                                               // 14: luci.analysis.v1.SourceRef
  1146  	(*timestamppb.Timestamp)(nil),                                   // 15: google.protobuf.Timestamp
  1147  }
  1148  var file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_depIdxs = []int32{
  1149  	1,  // 0: luci.analysis.v1.QueryChangepointGroupSummariesRequest.predicate:type_name -> luci.analysis.v1.ChangepointPredicate
  1150  	12, // 1: luci.analysis.v1.ChangepointPredicate.unexpected_verdict_rate_change_range:type_name -> luci.analysis.v1.NumericRange
  1151  	3,  // 2: luci.analysis.v1.QueryChangepointGroupSummariesResponse.group_summaries:type_name -> luci.analysis.v1.ChangepointGroupSummary
  1152  	7,  // 3: luci.analysis.v1.ChangepointGroupSummary.canonical_changepoint:type_name -> luci.analysis.v1.Changepoint
  1153  	4,  // 4: luci.analysis.v1.ChangepointGroupSummary.statistics:type_name -> luci.analysis.v1.ChangepointGroupStatistics
  1154  	8,  // 5: luci.analysis.v1.ChangepointGroupStatistics.unexpected_verdict_rate_before:type_name -> luci.analysis.v1.ChangepointGroupStatistics.RateDistribution
  1155  	8,  // 6: luci.analysis.v1.ChangepointGroupStatistics.unexpected_verdict_rate_after:type_name -> luci.analysis.v1.ChangepointGroupStatistics.RateDistribution
  1156  	8,  // 7: luci.analysis.v1.ChangepointGroupStatistics.unexpected_verdict_rate_current:type_name -> luci.analysis.v1.ChangepointGroupStatistics.RateDistribution
  1157  	9,  // 8: luci.analysis.v1.ChangepointGroupStatistics.unexpected_verdict_rate_change:type_name -> luci.analysis.v1.ChangepointGroupStatistics.RateChangeBuckets
  1158  	11, // 9: luci.analysis.v1.QueryChangepointsInGroupRequest.group_key:type_name -> luci.analysis.v1.QueryChangepointsInGroupRequest.ChangepointIdentifier
  1159  	1,  // 10: luci.analysis.v1.QueryChangepointsInGroupRequest.predicate:type_name -> luci.analysis.v1.ChangepointPredicate
  1160  	7,  // 11: luci.analysis.v1.QueryChangepointsInGroupResponse.changepoints:type_name -> luci.analysis.v1.Changepoint
  1161  	13, // 12: luci.analysis.v1.Changepoint.variant:type_name -> luci.analysis.v1.Variant
  1162  	14, // 13: luci.analysis.v1.Changepoint.ref:type_name -> luci.analysis.v1.SourceRef
  1163  	15, // 14: luci.analysis.v1.Changepoint.start_hour:type_name -> google.protobuf.Timestamp
  1164  	10, // 15: luci.analysis.v1.ChangepointGroupStatistics.RateDistribution.buckets:type_name -> luci.analysis.v1.ChangepointGroupStatistics.RateDistribution.RateBuckets
  1165  	15, // 16: luci.analysis.v1.QueryChangepointsInGroupRequest.ChangepointIdentifier.start_hour:type_name -> google.protobuf.Timestamp
  1166  	0,  // 17: luci.analysis.v1.Changepoints.QueryChangepointGroupSummaries:input_type -> luci.analysis.v1.QueryChangepointGroupSummariesRequest
  1167  	5,  // 18: luci.analysis.v1.Changepoints.QueryChangepointsInGroup:input_type -> luci.analysis.v1.QueryChangepointsInGroupRequest
  1168  	2,  // 19: luci.analysis.v1.Changepoints.QueryChangepointGroupSummaries:output_type -> luci.analysis.v1.QueryChangepointGroupSummariesResponse
  1169  	6,  // 20: luci.analysis.v1.Changepoints.QueryChangepointsInGroup:output_type -> luci.analysis.v1.QueryChangepointsInGroupResponse
  1170  	19, // [19:21] is the sub-list for method output_type
  1171  	17, // [17:19] is the sub-list for method input_type
  1172  	17, // [17:17] is the sub-list for extension type_name
  1173  	17, // [17:17] is the sub-list for extension extendee
  1174  	0,  // [0:17] is the sub-list for field type_name
  1175  }
  1176  
  1177  func init() { file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_init() }
  1178  func file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_init() {
  1179  	if File_go_chromium_org_luci_analysis_proto_v1_changepoints_proto != nil {
  1180  		return
  1181  	}
  1182  	file_go_chromium_org_luci_analysis_proto_v1_sources_proto_init()
  1183  	file_go_chromium_org_luci_analysis_proto_v1_common_proto_init()
  1184  	if !protoimpl.UnsafeEnabled {
  1185  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
  1186  			switch v := v.(*QueryChangepointGroupSummariesRequest); i {
  1187  			case 0:
  1188  				return &v.state
  1189  			case 1:
  1190  				return &v.sizeCache
  1191  			case 2:
  1192  				return &v.unknownFields
  1193  			default:
  1194  				return nil
  1195  			}
  1196  		}
  1197  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
  1198  			switch v := v.(*ChangepointPredicate); i {
  1199  			case 0:
  1200  				return &v.state
  1201  			case 1:
  1202  				return &v.sizeCache
  1203  			case 2:
  1204  				return &v.unknownFields
  1205  			default:
  1206  				return nil
  1207  			}
  1208  		}
  1209  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
  1210  			switch v := v.(*QueryChangepointGroupSummariesResponse); i {
  1211  			case 0:
  1212  				return &v.state
  1213  			case 1:
  1214  				return &v.sizeCache
  1215  			case 2:
  1216  				return &v.unknownFields
  1217  			default:
  1218  				return nil
  1219  			}
  1220  		}
  1221  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
  1222  			switch v := v.(*ChangepointGroupSummary); i {
  1223  			case 0:
  1224  				return &v.state
  1225  			case 1:
  1226  				return &v.sizeCache
  1227  			case 2:
  1228  				return &v.unknownFields
  1229  			default:
  1230  				return nil
  1231  			}
  1232  		}
  1233  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
  1234  			switch v := v.(*ChangepointGroupStatistics); i {
  1235  			case 0:
  1236  				return &v.state
  1237  			case 1:
  1238  				return &v.sizeCache
  1239  			case 2:
  1240  				return &v.unknownFields
  1241  			default:
  1242  				return nil
  1243  			}
  1244  		}
  1245  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
  1246  			switch v := v.(*QueryChangepointsInGroupRequest); i {
  1247  			case 0:
  1248  				return &v.state
  1249  			case 1:
  1250  				return &v.sizeCache
  1251  			case 2:
  1252  				return &v.unknownFields
  1253  			default:
  1254  				return nil
  1255  			}
  1256  		}
  1257  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
  1258  			switch v := v.(*QueryChangepointsInGroupResponse); i {
  1259  			case 0:
  1260  				return &v.state
  1261  			case 1:
  1262  				return &v.sizeCache
  1263  			case 2:
  1264  				return &v.unknownFields
  1265  			default:
  1266  				return nil
  1267  			}
  1268  		}
  1269  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
  1270  			switch v := v.(*Changepoint); i {
  1271  			case 0:
  1272  				return &v.state
  1273  			case 1:
  1274  				return &v.sizeCache
  1275  			case 2:
  1276  				return &v.unknownFields
  1277  			default:
  1278  				return nil
  1279  			}
  1280  		}
  1281  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
  1282  			switch v := v.(*ChangepointGroupStatistics_RateDistribution); i {
  1283  			case 0:
  1284  				return &v.state
  1285  			case 1:
  1286  				return &v.sizeCache
  1287  			case 2:
  1288  				return &v.unknownFields
  1289  			default:
  1290  				return nil
  1291  			}
  1292  		}
  1293  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
  1294  			switch v := v.(*ChangepointGroupStatistics_RateChangeBuckets); i {
  1295  			case 0:
  1296  				return &v.state
  1297  			case 1:
  1298  				return &v.sizeCache
  1299  			case 2:
  1300  				return &v.unknownFields
  1301  			default:
  1302  				return nil
  1303  			}
  1304  		}
  1305  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
  1306  			switch v := v.(*ChangepointGroupStatistics_RateDistribution_RateBuckets); i {
  1307  			case 0:
  1308  				return &v.state
  1309  			case 1:
  1310  				return &v.sizeCache
  1311  			case 2:
  1312  				return &v.unknownFields
  1313  			default:
  1314  				return nil
  1315  			}
  1316  		}
  1317  		file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
  1318  			switch v := v.(*QueryChangepointsInGroupRequest_ChangepointIdentifier); i {
  1319  			case 0:
  1320  				return &v.state
  1321  			case 1:
  1322  				return &v.sizeCache
  1323  			case 2:
  1324  				return &v.unknownFields
  1325  			default:
  1326  				return nil
  1327  			}
  1328  		}
  1329  	}
  1330  	type x struct{}
  1331  	out := protoimpl.TypeBuilder{
  1332  		File: protoimpl.DescBuilder{
  1333  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
  1334  			RawDescriptor: file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDesc,
  1335  			NumEnums:      0,
  1336  			NumMessages:   12,
  1337  			NumExtensions: 0,
  1338  			NumServices:   1,
  1339  		},
  1340  		GoTypes:           file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_goTypes,
  1341  		DependencyIndexes: file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_depIdxs,
  1342  		MessageInfos:      file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes,
  1343  	}.Build()
  1344  	File_go_chromium_org_luci_analysis_proto_v1_changepoints_proto = out.File
  1345  	file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDesc = nil
  1346  	file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_goTypes = nil
  1347  	file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_depIdxs = nil
  1348  }
  1349  
  1350  // Reference imports to suppress errors if they are not otherwise used.
  1351  var _ context.Context
  1352  var _ grpc.ClientConnInterface
  1353  
  1354  // This is a compile-time assertion to ensure that this generated file
  1355  // is compatible with the grpc package it is being compiled against.
  1356  const _ = grpc.SupportPackageIsVersion6
  1357  
  1358  // ChangepointsClient is the client API for Changepoints service.
  1359  //
  1360  // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
  1361  type ChangepointsClient interface {
  1362  	// Query the changepoint group summaries.
  1363  	// Currently this RPC only returns at most 1000 changepoint groups starting at the current week.
  1364  	// TODO: Add pagination to this RPC so that more changepoint history can be seen.
  1365  	QueryChangepointGroupSummaries(ctx context.Context, in *QueryChangepointGroupSummariesRequest, opts ...grpc.CallOption) (*QueryChangepointGroupSummariesResponse, error)
  1366  	// Query the changepoints in a particular group.
  1367  	// TODO: Implement pagination, currently just return at most 1000 changepoints.
  1368  	QueryChangepointsInGroup(ctx context.Context, in *QueryChangepointsInGroupRequest, opts ...grpc.CallOption) (*QueryChangepointsInGroupResponse, error)
  1369  }
  1370  type changepointsPRPCClient struct {
  1371  	client *prpc.Client
  1372  }
  1373  
  1374  func NewChangepointsPRPCClient(client *prpc.Client) ChangepointsClient {
  1375  	return &changepointsPRPCClient{client}
  1376  }
  1377  
  1378  func (c *changepointsPRPCClient) QueryChangepointGroupSummaries(ctx context.Context, in *QueryChangepointGroupSummariesRequest, opts ...grpc.CallOption) (*QueryChangepointGroupSummariesResponse, error) {
  1379  	out := new(QueryChangepointGroupSummariesResponse)
  1380  	err := c.client.Call(ctx, "luci.analysis.v1.Changepoints", "QueryChangepointGroupSummaries", in, out, opts...)
  1381  	if err != nil {
  1382  		return nil, err
  1383  	}
  1384  	return out, nil
  1385  }
  1386  
  1387  func (c *changepointsPRPCClient) QueryChangepointsInGroup(ctx context.Context, in *QueryChangepointsInGroupRequest, opts ...grpc.CallOption) (*QueryChangepointsInGroupResponse, error) {
  1388  	out := new(QueryChangepointsInGroupResponse)
  1389  	err := c.client.Call(ctx, "luci.analysis.v1.Changepoints", "QueryChangepointsInGroup", in, out, opts...)
  1390  	if err != nil {
  1391  		return nil, err
  1392  	}
  1393  	return out, nil
  1394  }
  1395  
  1396  type changepointsClient struct {
  1397  	cc grpc.ClientConnInterface
  1398  }
  1399  
  1400  func NewChangepointsClient(cc grpc.ClientConnInterface) ChangepointsClient {
  1401  	return &changepointsClient{cc}
  1402  }
  1403  
  1404  func (c *changepointsClient) QueryChangepointGroupSummaries(ctx context.Context, in *QueryChangepointGroupSummariesRequest, opts ...grpc.CallOption) (*QueryChangepointGroupSummariesResponse, error) {
  1405  	out := new(QueryChangepointGroupSummariesResponse)
  1406  	err := c.cc.Invoke(ctx, "/luci.analysis.v1.Changepoints/QueryChangepointGroupSummaries", in, out, opts...)
  1407  	if err != nil {
  1408  		return nil, err
  1409  	}
  1410  	return out, nil
  1411  }
  1412  
  1413  func (c *changepointsClient) QueryChangepointsInGroup(ctx context.Context, in *QueryChangepointsInGroupRequest, opts ...grpc.CallOption) (*QueryChangepointsInGroupResponse, error) {
  1414  	out := new(QueryChangepointsInGroupResponse)
  1415  	err := c.cc.Invoke(ctx, "/luci.analysis.v1.Changepoints/QueryChangepointsInGroup", in, out, opts...)
  1416  	if err != nil {
  1417  		return nil, err
  1418  	}
  1419  	return out, nil
  1420  }
  1421  
  1422  // ChangepointsServer is the server API for Changepoints service.
  1423  type ChangepointsServer interface {
  1424  	// Query the changepoint group summaries.
  1425  	// Currently this RPC only returns at most 1000 changepoint groups starting at the current week.
  1426  	// TODO: Add pagination to this RPC so that more changepoint history can be seen.
  1427  	QueryChangepointGroupSummaries(context.Context, *QueryChangepointGroupSummariesRequest) (*QueryChangepointGroupSummariesResponse, error)
  1428  	// Query the changepoints in a particular group.
  1429  	// TODO: Implement pagination, currently just return at most 1000 changepoints.
  1430  	QueryChangepointsInGroup(context.Context, *QueryChangepointsInGroupRequest) (*QueryChangepointsInGroupResponse, error)
  1431  }
  1432  
  1433  // UnimplementedChangepointsServer can be embedded to have forward compatible implementations.
  1434  type UnimplementedChangepointsServer struct {
  1435  }
  1436  
  1437  func (*UnimplementedChangepointsServer) QueryChangepointGroupSummaries(context.Context, *QueryChangepointGroupSummariesRequest) (*QueryChangepointGroupSummariesResponse, error) {
  1438  	return nil, status.Errorf(codes.Unimplemented, "method QueryChangepointGroupSummaries not implemented")
  1439  }
  1440  func (*UnimplementedChangepointsServer) QueryChangepointsInGroup(context.Context, *QueryChangepointsInGroupRequest) (*QueryChangepointsInGroupResponse, error) {
  1441  	return nil, status.Errorf(codes.Unimplemented, "method QueryChangepointsInGroup not implemented")
  1442  }
  1443  
  1444  func RegisterChangepointsServer(s prpc.Registrar, srv ChangepointsServer) {
  1445  	s.RegisterService(&_Changepoints_serviceDesc, srv)
  1446  }
  1447  
  1448  func _Changepoints_QueryChangepointGroupSummaries_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
  1449  	in := new(QueryChangepointGroupSummariesRequest)
  1450  	if err := dec(in); err != nil {
  1451  		return nil, err
  1452  	}
  1453  	if interceptor == nil {
  1454  		return srv.(ChangepointsServer).QueryChangepointGroupSummaries(ctx, in)
  1455  	}
  1456  	info := &grpc.UnaryServerInfo{
  1457  		Server:     srv,
  1458  		FullMethod: "/luci.analysis.v1.Changepoints/QueryChangepointGroupSummaries",
  1459  	}
  1460  	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
  1461  		return srv.(ChangepointsServer).QueryChangepointGroupSummaries(ctx, req.(*QueryChangepointGroupSummariesRequest))
  1462  	}
  1463  	return interceptor(ctx, in, info, handler)
  1464  }
  1465  
  1466  func _Changepoints_QueryChangepointsInGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
  1467  	in := new(QueryChangepointsInGroupRequest)
  1468  	if err := dec(in); err != nil {
  1469  		return nil, err
  1470  	}
  1471  	if interceptor == nil {
  1472  		return srv.(ChangepointsServer).QueryChangepointsInGroup(ctx, in)
  1473  	}
  1474  	info := &grpc.UnaryServerInfo{
  1475  		Server:     srv,
  1476  		FullMethod: "/luci.analysis.v1.Changepoints/QueryChangepointsInGroup",
  1477  	}
  1478  	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
  1479  		return srv.(ChangepointsServer).QueryChangepointsInGroup(ctx, req.(*QueryChangepointsInGroupRequest))
  1480  	}
  1481  	return interceptor(ctx, in, info, handler)
  1482  }
  1483  
  1484  var _Changepoints_serviceDesc = grpc.ServiceDesc{
  1485  	ServiceName: "luci.analysis.v1.Changepoints",
  1486  	HandlerType: (*ChangepointsServer)(nil),
  1487  	Methods: []grpc.MethodDesc{
  1488  		{
  1489  			MethodName: "QueryChangepointGroupSummaries",
  1490  			Handler:    _Changepoints_QueryChangepointGroupSummaries_Handler,
  1491  		},
  1492  		{
  1493  			MethodName: "QueryChangepointsInGroup",
  1494  			Handler:    _Changepoints_QueryChangepointsInGroup_Handler,
  1495  		},
  1496  	},
  1497  	Streams:  []grpc.StreamDesc{},
  1498  	Metadata: "go.chromium.org/luci/analysis/proto/v1/changepoints.proto",
  1499  }