Explorar el Código

增加数据中心rpc调用

wulei hace 2 años
padre
commit
bf7532b902

+ 6 - 0
go.mod

@@ -6,10 +6,16 @@ require (
 	github.com/go-redis/redis/v8 v8.11.5
 	github.com/sirupsen/logrus v1.8.1
 	github.com/streadway/amqp v1.1.0
+	google.golang.org/grpc v1.50.1
+	google.golang.org/protobuf v1.27.1
 )
 
 require (
 	github.com/cespare/xxhash/v2 v2.1.2 // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
+	github.com/golang/protobuf v1.5.2 // indirect
+	golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 // indirect
 	golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect
+	golang.org/x/text v0.3.6 // indirect
+	google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect
 )

+ 78 - 0
go.sum

@@ -1,27 +1,105 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
 github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
 github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
 github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
 github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
 github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/streadway/amqp v1.1.0 h1:py12iX8XSyI7aN/3dUT8DFIDJazNJsVJdxNVEpnQTZM=
 github.com/streadway/amqp v1.1.0/go.mod h1:WYSrTEYHOXHd0nwFeUXAe2G2hRnQT+deZJJf88uS9Bg=
 github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0=
+golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY=
+google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

+ 29 - 0
rpc_client/datacenter/client.go

@@ -0,0 +1,29 @@
+package datacenter
+
+import (
+	"context"
+	"google.golang.org/grpc"
+	"google.golang.org/grpc/credentials/insecure"
+	"log"
+	datacenterPb "metawant.greentech.com.cn/gaoyagang/gt-common/rpc_client/datacenter/pb"
+	"time"
+)
+
+// 创建一个v1版本的数据中心rpc调用实例
+func CreateDcRpcClient(ipPort string, timeOutSecond int) datacenterPb.OrganizationClient {
+	var conn *grpc.ClientConn
+	var err error
+	if timeOutSecond == 0 {
+		// 此时即使连接不上,也不会返回超时或连接拒绝的err
+		conn, err = grpc.DialContext(context.Background(), ipPort, grpc.WithTransportCredentials(insecure.NewCredentials()))
+	} else {
+		// 此处连接超时的话会报错
+		cont, _ := context.WithTimeout(context.Background(), 5*time.Second)
+		conn, err = grpc.DialContext(cont, ipPort, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock())
+	}
+	if err != nil {
+		log.Fatalf("CreateDcRpcClient did not connect: %v", err)
+	}
+	client := datacenterPb.NewOrganizationClient(conn)
+	return client
+}

+ 802 - 0
rpc_client/datacenter/datacenter.proto

@@ -0,0 +1,802 @@
+syntax = "proto3";
+
+package pb;
+option go_package = "./pb";
+
+message Pagination {
+  uint32 current = 1;
+  uint32 pageSize = 2;
+  uint32 total = 3;
+}
+
+message DataDescribeInfo {
+  // @gotags: json:"count"
+  uint32 count = 1;
+  // @gotags: json:"min"
+  double min = 2;
+  // @gotags: json:"max"
+  double max = 3;
+  // @gotags: json:"mean"
+  double mean = 4;
+  // @gotags: json:"std_dev"
+  double std_dev = 5;
+  // @gotags: json:"var_dev"
+  double var_dev = 6;
+  // @gotags: json:"p25"
+  double p25 = 7;
+  // @gotags: json:"p50"
+  double p50 = 8;
+  // @gotags: json:"p75"
+  double p75 = 9;
+  // @gotags: json:"st"
+  string st = 10;
+  // @gotags: json:"et"
+  string et = 11;
+}
+
+message DataMinAndMaxInfo {
+  // @gotags: json:"min"
+  double min = 1;
+  // @gotags: json:"max"
+  double max = 2;
+}
+
+message RelatedItems {
+  string item = 1;
+  float coefficient = 2;
+}
+
+message DataCorrelationInfo {
+  // @gotags: json:"related_items"
+  map <string, RelatedItems> related_items = 1;
+  // @gotags: json:"st"
+  string st = 10;
+  // @gotags: json:"et"
+  string et = 11;
+}
+
+message AppInfo {
+  int64 id = 1;
+  string app_name = 2;
+  repeated int64 project_ids = 3;
+  string secret = 4;
+  int64 status = 5;
+  string expire_at = 6;
+  string c_time = 7;
+}
+
+message DcWorkingReq{
+  int64   project_id = 1;
+  string  device_code = 2;
+  string  stime = 3; // c_time的搜索
+  string  etime = 4; // c_time的搜索
+  int64 page = 5;
+  int64 page_size = 6;
+  string order = 7; // 排序字段及方向 例: id desc
+}
+
+message WorkingMf{
+  // @gotags: json:"id"
+  int64         id = 1;
+  // @gotags: json:"project_id"
+  int64         project_id = 2;
+  // @gotags: json:"device_code"
+  string        device_code = 3;
+  // @gotags: json:"water_temperature"
+  double        water_temperature = 4;  // 水温 摄氏度
+  // @gotags: json:"feed_flow"
+  double        feed_flow = 5;          // 进水流量
+  // @gotags: json:"con_flow"
+  double        con_flow = 6;           // 浓水流量
+  // @gotags: json:"product_flow"
+  double        product_flow = 7;       // 产水流量
+  // @gotags: json:"feed_pressure"
+  double        feed_pressure = 8;      // 进水压力
+  // @gotags: json:"con_pressure"
+  double        con_pressure = 9;       // 浓水压力
+  // @gotags: json:"product_pressure"
+  double        product_pressure = 10;  // 产水压力
+  // @gotags: json:"tmp"
+  double        tmp = 11;               // 跨膜压差
+  // @gotags: json:"flux"
+  double        flux = 12;              // 膜通量
+  // @gotags: json:"feed_wq_turbidity"
+  double        feed_wq_turbidity = 13; // 进水浊度
+  // @gotags: json:"feed_wq_ph"
+  int64         feed_wq_ph = 14;        // 进水 PH 值
+  // @gotags: json:"product_wq_ph"
+  int64         product_wq_ph = 15;     // 产水 PH 值
+  // @gotags: json:"feed_wq_al"
+  double        feed_wq_al = 16;        // 进水水质:铝
+  // @gotags: json:"product_wq_al"
+  double        product_wq_al = 17;     // 产水水质:铝
+  // @gotags: json:"feed_wq_fe"
+  double        feed_wq_fe = 18;        // 进水水质:铁
+  // @gotags: json:"product_wq_fe"
+  double        product_wq_fe = 19;     // 产水水质:铁
+  // @gotags: json:"feed_wq_mn"
+  double        feed_wq_mn = 20;        // 进水水质:锰
+  // @gotags: json:"product_wq_mn"
+  double        product_wq_mn = 21;     // 产水水质:锰
+  // @gotags: json:"feed_wq_sio2"
+  double        feed_wq_sio2 = 22;      // 进水水质:二氧化硅
+  // @gotags: json:"product_wq_sio2"
+  double        product_wq_sio2 = 23;   // 产水水质:二氧化硅
+  // @gotags: json:"feed_wq_cod"
+  double        feed_wq_cod = 24;       // 进水水质:COD
+  // @gotags: json:"product_wq_cod"
+  double        product_wq_cod = 25;    // 产水水质:COD
+  // @gotags: json:"feed_wq_p"
+  double        feed_wq_p = 26;         // 进水水质:磷
+  // @gotags: json:"product_wq_p"
+  double        product_wq_p = 27;      // 产水水质:磷
+  // @gotags: json:"step"
+  int64         step = 28;              // 设备当前步序值
+  // @gotags: json:"c_time"
+  string        c_time = 29;
+}
+
+message WorkingUf{
+  // @gotags: json:"id"
+  int64         id = 1;
+  // @gotags: json:"project_id"
+  int64         project_id = 2;
+  // @gotags: json:"device_code"
+  string        device_code = 3;
+  // @gotags: json:"water_temperature"
+  double        water_temperature = 4;  // 水温 摄氏度
+  // @gotags: json:"feed_flow"
+  double        feed_flow = 5;          // 进水流量
+  // @gotags: json:"con_flow"
+  double        con_flow = 6;           // 浓水流量
+  // @gotags: json:"product_flow"
+  double        product_flow = 7;       // 产水流量
+  // @gotags: json:"feed_pressure"
+  double        feed_pressure = 8;      // 进水压力
+  // @gotags: json:"con_pressure"
+  double        con_pressure = 9;       // 浓水压力
+  // @gotags: json:"product_pressure"
+  double        product_pressure = 10;  // 产水压力
+  // @gotags: json:"tmp"
+  double        tmp = 11;               // 跨膜压差
+  // @gotags: json:"flux"
+  double        flux = 12;              // 膜通量
+  // @gotags: json:"permeability"
+  double permeability = 32; // 渗透率
+  // @gotags: json:"feed_wq_turbidity"
+  double        feed_wq_turbidity = 13; // 进水浊度
+  // @gotags: json:"feed_wq_ph"
+  int64         feed_wq_ph = 14;        // 进水 PH 值
+  // @gotags: json:"product_wq_ph"
+  int64         product_wq_ph = 15;     // 产水 PH 值
+  // @gotags: json:"feed_wq_al"
+  double        feed_wq_al = 16;        // 进水水质:铝
+  // @gotags: json:"product_wq_al"
+  double        product_wq_al = 17;     // 产水水质:铝
+  // @gotags: json:"feed_wq_fe"
+  double        feed_wq_fe = 18;        // 进水水质:铁
+  // @gotags: json:"product_wq_fe"
+  double        product_wq_fe = 19;     // 产水水质:铁
+  // @gotags: json:"feed_wq_mn"
+  double        feed_wq_mn = 20;        // 进水水质:锰
+  // @gotags: json:"product_wq_mn"
+  double        product_wq_mn = 21;     // 产水水质:锰
+  // @gotags: json:"feed_wq_sio2"
+  double        feed_wq_sio2 = 22;      // 进水水质:二氧化硅
+  // @gotags: json:"product_wq_sio2"
+  double        product_wq_sio2 = 23;   // 产水水质:二氧化硅
+  // @gotags: json:"feed_wq_cod"
+  double        feed_wq_cod = 24;       // 进水水质:COD
+  // @gotags: json:"product_wq_cod"
+  double        product_wq_cod = 25;    // 产水水质:COD
+  // @gotags: json:"feed_wq_p"
+  double        feed_wq_p = 26;         // 进水水质:磷
+  // @gotags: json:"product_wq_p"
+  double        product_wq_p = 27;      // 产水水质:磷
+  // @gotags: json:"step"
+  int64         step = 28;              // 设备当前步序值
+  // @gotags: json:"filter_time"
+  double filter_time = 29;
+  // @gotags: json:"filter_cycle"
+  int64 filter_cycle = 30;
+  // @gotags: json:"c_time"
+  string        c_time = 31;
+}
+
+message WorkingNf{
+  // gotags: json:"id"
+  int64         id = 1;
+  // gotags: json:"project_id"
+  int64         project_id = 2;
+  // gotags: json:"device_code"
+  string        device_code = 3;
+  // gotags: json:"water_temperature"
+  double       water_temperature = 4;    // 水温 摄氏度
+  // gotags: json:"feed_flow_1st"
+  double       feed_flow_1st = 5;        // 一段进水流量
+  // gotags: json:"con_flow_1st"
+  double       con_flow_1st = 6;         // 一段浓水流量
+  // gotags: json:"product_flow_1st"
+  double       product_flow_1st = 7;     // 一段产水流量
+  // gotags: json:"feed_pressure_1st"
+  double       feed_pressure_1st = 8;    // 一段进水压力
+  // gotags: json:"con_pressure_1st"
+  double       con_pressure_1st = 9;     // 一段浓水压力
+  // gotags: json:"product_pressure_1st"
+  double       product_pressure_1st = 10; // 一段产水压力
+  // gotags: json:"tmp_1st"
+  double       tmp_1st = 11;              // 一段跨膜压差
+  // gotags: json:"flux_1st"
+  double       flux_1st = 12;             // 一段膜通量
+  // gotags: json:"permeability_1st"
+  double       permeability_1st = 13;     // 一段渗透率
+  // gotags: json:"feed_flow_2nd"
+  double       feed_flow_2nd = 14;        // 二段进水流量
+  // gotags: json:"con_flow_2nd"
+  double       con_flow_2nd = 15;         // 二段浓水流量
+  // gotags: json:"product_flow_2nd"
+  double       product_flow_2nd = 16;     // 二段产水流量
+  // gotags: json:"feed_pressure_2nd"
+  double       feed_pressure_2nd = 17;    // 二段进水压力
+  // gotags: json:"con_pressure_2nd"
+  double       con_pressure_2nd = 18;     // 二段浓水压力
+  // gotags: json:"product_pressure_2nd"
+  double       product_pressure_2nd = 19; // 二段产水压力
+  // gotags: json:"tmp_2nd"
+  double       tmp_2nd = 20;              // 二段压差
+  // gotags: json:"flux_2nd"
+  double       flux_2nd = 21;             // 二段通量
+  // gotags: json:"permeability_2nd"
+  double       permeability_2nd = 22;     // 二段渗透率
+  // gotags: json:"feed_flow_3th"
+  double       feed_flow_3th = 23;        // 三段进水流量
+  // gotags: json:"con_flow_3th"
+  double       con_flow_3th = 24;         // 三段浓水流量
+  // gotags: json:"product_flow_3th"
+  double       product_flow_3th = 25;     // 三段产水流量
+  // gotags: json:"feed_pressure_3th"
+  double       feed_pressure_3th = 26;    // 三段进水压力
+  // gotags: json:"con_pressure_3th"
+  double       con_pressure_3th = 27;     // 三段浓水压力
+  // gotags: json:"product_pressure_3th"
+  double       product_pressure_3th = 28; // 三段产水压力
+  // gotags: json:"tmp_3th"
+  double       tmp_3th = 29;              // 三段压差
+  // gotags: json:"flux_3th"
+  double       flux_3th = 30;             // 三段通量
+  // gotags: json:"permeability_3th"
+  double       permeability_3th = 31;     // 三段渗透率
+  // gotags: json:"feed_wq_turbidity"
+  double       feed_wq_turbidity = 32;    // 进水浊度
+  // gotags: json:"feed_wq_ph"
+  int64        feed_wq_ph = 33;           // 进水 PH 值
+  // gotags: json:"product_wq_ph"
+  int64        product_wq_ph = 34;        // 产水 PH 值
+  // gotags: json:"feed_wq_al"
+  double       feed_wq_al = 35;           // 进水水质:铝
+  // gotags: json:"product_wq_al"
+  double       product_wq_al = 36;        // 产水水质:铝
+  // gotags: json:"feed_wq_fe"
+  double       feed_wq_fe = 37;           // 进水水质:铁
+  // gotags: json:"product_wq_fe"
+  double       product_wq_fe = 38;        // 产水水质:铁
+  // gotags: json:"feed_wq_mn"
+  double       feed_wq_mn = 39;           // 进水水质:锰
+  // gotags: json:"product_wq_mn"
+  double       product_wq_mn = 40;        // 产水水质:锰
+  // gotags: json:"feed_wq_sio2"
+  double       feed_wq_sio2 = 41;         // 进水水质:二氧化硅
+  // gotags: json:"product_wq_sio2"
+  double       product_wq_sio2 = 42;      // 产水水质:二氧化硅
+  // gotags: json:"feed_wq_cod"
+  double       feed_wq_cod = 43;          // 进水水质:COD
+  // gotags: json:"product_wq_cod"
+  double       product_wq_cod = 44;       // 产水水质:COD
+  // gotags: json:"feed_wq_p"
+  double       feed_wq_p = 45;            // 进水水质:磷
+  // gotags: json:"product_wq_p"
+  double       product_wq_p = 46;         // 产水水质:磷
+  // gotags: json:"step"
+  int64        step = 47;                 // 设备当前步序值
+  // gotags: json:"c_time"
+  string       c_time = 48;
+}
+
+message WorkingRo{
+  // gotags: json:"id"
+  int64         id = 1;
+  // gotags: json:"project_id"
+  int64         project_id = 2;
+  // gotags: json:"device_code"
+  string        device_code = 3;
+  // gotags: json:"water_temperature"
+  double       water_temperature = 4;    // 水温 摄氏度
+  // gotags: json:"feed_flow_1st"
+  double       feed_flow_1st = 5;        // 一段进水流量
+  // gotags: json:"con_flow_1st"
+  double       con_flow_1st = 6;         // 一段浓水流量
+  // gotags: json:"product_flow_1st"
+  double       product_flow_1st = 7;     // 一段产水流量
+  // gotags: json:"feed_pressure_1st"
+  double       feed_pressure_1st = 8;    // 一段进水压力
+  // gotags: json:"con_pressure_1st"
+  double       con_pressure_1st = 9;     // 一段浓水压力
+  // gotags: json:"product_pressure_1st"
+  double       product_pressure_1st = 10; // 一段产水压力
+  // gotags: json:"tmp_1st"
+  double       tmp_1st = 11;              // 一段跨膜压差
+  // gotags: json:"flux_1st"
+  double       flux_1st = 12;             // 一段膜通量
+  // gotags: json:"permeability_1st"
+  double       permeability_1st = 13;     // 一段渗透率
+  // gotags: json:"feed_flow_2nd"
+  double       feed_flow_2nd = 14;        // 二段进水流量
+  // gotags: json:"con_flow_2nd"
+  double       con_flow_2nd = 15;         // 二段浓水流量
+  // gotags: json:"product_flow_2nd"
+  double       product_flow_2nd = 16;     // 二段产水流量
+  // gotags: json:"feed_pressure_2nd"
+  double       feed_pressure_2nd = 17;    // 二段进水压力
+  // gotags: json:"con_pressure_2nd"
+  double       con_pressure_2nd = 18;     // 二段浓水压力
+  // gotags: json:"product_pressure_2nd"
+  double       product_pressure_2nd = 19; // 二段产水压力
+  // gotags: json:"tmp_2nd"
+  double       tmp_2nd = 20;              // 二段压差
+  // gotags: json:"flux_2nd"
+  double       flux_2nd = 21;             // 二段通量
+  // gotags: json:"permeability_2nd"
+  double       permeability_2nd = 22;     // 二段渗透率
+  // gotags: json:"feed_flow_3th"
+  double       feed_flow_3th = 23;        // 三段进水流量
+  // gotags: json:"con_flow_3th"
+  double       con_flow_3th = 24;         // 三段浓水流量
+  // gotags: json:"product_flow_3th"
+  double       product_flow_3th = 25;     // 三段产水流量
+  // gotags: json:"feed_pressure_3th"
+  double       feed_pressure_3th = 26;    // 三段进水压力
+  // gotags: json:"con_pressure_3th"
+  double       con_pressure_3th = 27;     // 三段浓水压力
+  // gotags: json:"product_pressure_3th"
+  double       product_pressure_3th = 28; // 三段产水压力
+  // gotags: json:"tmp_3th"
+  double       tmp_3th = 29;              // 三段压差
+  // gotags: json:"flux_3th"
+  double       flux_3th = 30;             // 三段通量
+  // gotags: json:"permeability_3th"
+  double       permeability_3th = 31;     // 三段渗透率
+  // gotags: json:"feed_wq_turbidity"
+  double       feed_wq_turbidity = 32;    // 进水浊度
+  // gotags: json:"feed_wq_ph"
+  int64        feed_wq_ph = 33;           // 进水 PH 值
+  // gotags: json:"product_wq_ph"
+  int64        product_wq_ph = 34;        // 产水 PH 值
+  // gotags: json:"feed_wq_al"
+  double       feed_wq_al = 35;           // 进水水质:铝
+  // gotags: json:"product_wq_al"
+  double       product_wq_al = 36;        // 产水水质:铝
+  // gotags: json:"feed_wq_fe"
+  double       feed_wq_fe = 37;           // 进水水质:铁
+  // gotags: json:"product_wq_fe"
+  double       product_wq_fe = 38;        // 产水水质:铁
+  // gotags: json:"feed_wq_mn"
+  double       feed_wq_mn = 39;           // 进水水质:锰
+  // gotags: json:"product_wq_mn"
+  double       product_wq_mn = 40;        // 产水水质:锰
+  // gotags: json:"feed_wq_sio2"
+  double       feed_wq_sio2 = 41;         // 进水水质:二氧化硅
+  // gotags: json:"product_wq_sio2"
+  double       product_wq_sio2 = 42;      // 产水水质:二氧化硅
+  // gotags: json:"feed_wq_cod"
+  double       feed_wq_cod = 43;          // 进水水质:COD
+  // gotags: json:"product_wq_cod"
+  double       product_wq_cod = 44;       // 产水水质:COD
+  // gotags: json:"feed_wq_p"
+  double       feed_wq_p = 45;            // 进水水质:磷
+  // gotags: json:"product_wq_p"
+  double       product_wq_p = 46;         // 产水水质:磷
+  // gotags: json:"step"
+  int64        step = 47;                 // 设备当前步序值
+  // gotags: json:"c_time"
+  string       c_time = 48;
+}
+
+message WorkingChest {
+  // @gotags: json:"id"
+  int64     id = 1;
+  // @gotags: json:"project_id"
+  int64     project_id = 2;
+  // @gotags: json:"device_code"
+  string    device_code = 3;
+  // @gotags: json:"switch"
+  int64     switch = 4;                // 药箱液位开关 0: 关 1: 开
+  // @gotags: json:"level"
+  double    level = 5;                 // 液位高度
+  // @gotags: json:"agitator_status"
+  int64     agitator_status = 6;       // 搅拌器运行状态 0: 未运行 1:运行中
+  // @gotags: json:"agitator_duration"
+  int64     agitator_duration = 7;     // 搅拌器运行时长
+  // @gotags: json:"agitator_fault_status"
+  int64     agitator_fault_status = 8; // 搅拌器故障状态 0:正常 1:故障
+  // @gotags: json:"c_time"
+  string    c_time = 9;
+}
+
+message WorkingPump {
+  // @gotags: json:"id"
+  int64     id = 1;
+  // @gotags: json:"project_id"
+  int64     project_id = 2;
+  // @gotags: json:"device_code"
+  string    device_code = 3;
+  // @gotags: json:"feed_pressure"
+  double    feed_pressure = 4; // 进水压力
+  // @gotags: json:"out_pressure"
+  double    out_pressure = 5;  // 出水压力
+  // @gotags: json:"duration"
+  int64     duration = 6;      // 运行时长 单位 s
+  // @gotags: json:"current"
+  double    current = 7;       // 运行电流
+  // @gotags: json:"frequency"
+  double    frequency = 8;     // 运行频率
+  // @gotags: json:"lift"
+  double    lift = 9;          // 工作扬程
+  // @gotags: json:"efficiency"
+  double    efficiency = 10;    // 运行效率
+  // @gotags: json:"run_status"
+  int64     run_status = 11;    // 运行状态 0: 停机 1: 运行正常
+  // @gotags: json:"fault_status"
+  int64     fault_status = 12;  // 故障状态 0: 正常 1: 故障
+  // @gotags: json:"c_time"
+  string    c_time = 13;
+}
+
+message WorkingValve {
+  // @gotags: json:"id"
+  int64     id = 1;
+  // @gotags: json:"project_id"
+  int64     project_id = 2;
+  // @gotags: json:"device_code"
+  string    device_code = 3;
+  // @gotags: json:"adjust"
+  int64     adjust = 4;       // 是否为调节阀门 0: 否 1: 是
+  // @gotags: json:"opening"
+  double    opening = 5;      // 当前阀门的开度
+  // @gotags: json:"closed"
+  int64     closed = 6;       // 关到位 全关  0: 否 1: 是
+  // @gotags: json:"opened"
+  int64     opened = 7;       // 开到位 开到 设置的开度 0: 否 1: 是
+  // @gotags: json:"fault_status"
+  int64     fault_status = 8; // 是否故障 0: 否 1: 是
+  // @gotags: json:"c_time"
+  string    c_time = 9;
+}
+
+message ItemHistoryData {
+  // @gotags: json:"project_id"
+  int64     project_id = 1;
+  // @gotags: json:"item_name"
+  string    item_name = 2;
+  // @gotags: json:"val"
+  double    val = 3;
+  // @gotags: json:"h_time"
+  string    h_time = 4;
+}
+
+message MultiAddItemHistoryDataReq {
+  // @gotags: json:"project_id"
+  int64     project_id = 1;
+  // @gotags: json:"list"
+  repeated ItemHistoryData list = 2;
+}
+
+message MultiAddItemHistoryDataResp {}
+
+message ItemHistoryDataListReq {
+  // @gotags: json:"project_id"
+  int64     project_id = 1;
+  // @gotags: json:"item_name"
+  string    item_name = 2;
+  // @gotags: json:"interval"
+  string    interval = 3;     //时间单位 s,minute,h,day
+  // @gotags: json:"aggregator"
+  string    aggregator = 4;   //聚合方式 min,max,avg,sum,realtime, new
+  // @gotags: json:"stime"
+  string    stime = 5;
+  // @gotags: json:"etime"
+  string    etime = 6;
+  // @gotags: json:"size"
+  int64     size = 7;
+  // @gotags: json:"order"
+  string    order = 8;
+}
+
+message ItemHistoryDataByTimeReq {
+  // @gotags: json:"project_id"
+  int64     project_id = 1;
+  // @gotags: json:"item_name"
+  string    item_name = 2;
+  // @gotags: json:"stime"
+  string    stime = 3;
+  // @gotags: json:"etime"
+  string    etime = 4;
+  // @gotags: json:"order"
+  string    order = 5;
+}
+
+message ItemHistoryDataMaxMinResp {
+  // @gotags: json:"max_val"
+  double    max_val = 1;
+  // @gotags: json:"min_val"
+  double    min_val = 2;
+  // @gotags: json:"avg_val"
+  double    avg_val = 3;
+}
+
+message ItemHistoryDataFirstLastResp {
+  // @gotags: json:"first"
+  double    first = 1;
+  // @gotags: json:"last"
+  double    last = 2;
+}
+
+message ChangeTypeItemHistoryDataResp {
+  // @gotags: json:"value"
+  double    value = 1;
+}
+
+message ItemHistoryDataList {
+  // @gotags: json:"item_name"
+  string    item_name = 1;
+  // @gotags: json:"val"
+  double    val = 2;
+  // @gotags: json:"h_time"
+  string    h_time = 3;
+}
+
+message ItemHistoryDataForChart {
+  // @gotags: json:"name"
+  string    name = 1;
+  // @gotags: json:"val"
+  double    val = 2;
+  // @gotags: json:"htime_at"
+  string    htime_at = 3;
+}
+
+message ItemHistoryDataForChartReq {
+  // @gotags: json:"project_id"
+  int64     project_id = 1;
+  // @gotags: json:"item_name"
+  string    item_name = 2;
+  // @gotags: json:"stime"
+  string    stime = 3;
+  // @gotags: json:"etime"
+  string     etime = 4;
+  // @gotags: json:"interval"
+  string    interval = 5;
+  // @gotags: json:"size"
+  int64     size = 6;
+  // @gotags: json:"aggregator"
+  string    aggregator = 7;
+  // @gotags: json:"order"
+  string    order = 8;
+  // @gotags: json:"max_val"
+  double    max_val = 9;
+  // @gotags: json:"min_val"
+  double    min_val = 10;
+}
+
+message ItemHistoryDataForChartResp {
+  // @gotags: json:"list"
+  repeated ItemHistoryDataForChart list = 1;
+}
+
+message ItemHistoryDataListResp {
+  // @gotags: json:"list"
+  repeated ItemHistoryDataList list = 1;
+}
+
+message GetWorkingUfByCodeResp{
+  // @gotags: json:"list"
+  repeated WorkingUf list = 1;
+}
+
+message FindWorkingUfByCycleReq{
+  int64 project_id = 1;
+  string device_code = 2;
+  int64 filter_cycle = 3;
+  int64 step = 4;
+  double filter_time_start = 5;
+  double filter_time_end = 6;
+  int64 limit = 7;
+}
+
+message FindWorkingUfByCycleResp{
+  // @gotags: json:"list"
+  repeated WorkingUf list = 1;
+}
+
+message GetWorkingRoByCodeResp{
+  // @gotags: json:"list"
+  repeated WorkingRo list = 1;
+}
+
+message GetWorkingNfByCodeResp{
+  // @gotags: json:"list"
+  repeated WorkingNf list = 1;
+}
+
+message GetWorkingMfByCodeResp{
+  // @gotags: json:"list"
+  repeated WorkingMf list = 1;
+}
+
+message GetWorkingPumpByCodeResp{
+  // @gotags: json:"list"
+  repeated WorkingPump list = 1;
+}
+
+message GetWorkingValveByCodeResp{
+  // @gotags: json:"list"
+  repeated WorkingValve list = 1;
+}
+
+message GetWorkingChestByCodeResp{
+  // @gotags: json:"list"
+  repeated WorkingChest list = 1;
+}
+
+message FindAppListReq {
+  int64 page = 1;
+  int64 page_size = 2;
+  string order = 3; // 排序字段及方向 例: id desc
+}
+
+message FindAppListResp {
+  repeated AppInfo list = 1;
+  Pagination pagination = 2;
+}
+
+message GetAppInfoReq {
+  string app_name = 1;
+}
+
+message GetAppInfoResp {
+  AppInfo app_info = 1;
+}
+
+message CreateAppInfoReq {
+  string app_name = 1;
+  repeated int64 project_ids = 2;
+  int64 expire = 3;
+}
+
+message CreateAppInfoResp {
+  AppInfo app_info = 1;
+}
+
+message RemoveAppInfoReq {
+  string app_name = 1;
+}
+
+message RemoveAppInfoResp {
+  bool ok = 1;
+}
+
+message DisableAppInfoReq {
+  string app_name = 1;
+}
+
+message DisableAppInfoResp {
+  bool ok = 1;
+}
+
+message EnableAppInfoReq {
+  string app_name = 1;
+}
+
+message EnableAppInfoResp {
+  bool ok = 1;
+}
+
+message ResetAppSecretReq {
+  string app_name = 1;
+}
+
+message ResetAppSecretResp {
+  string secret = 1;
+}
+
+message ExpireAppSecretReq {
+  string app_name = 1;
+  int64 expire = 3;
+}
+
+message ExpireAppSecretResp {
+  string expire_at = 3;
+}
+
+message ResetAppProjectReq {
+  string app_name = 1;
+  repeated int64 project_ids = 2;
+}
+
+message ResetAppProjectResp {
+  repeated int64 remove_project_ids = 1;
+}
+
+message FindDataDescribeReq {
+  int64 project_id = 1;
+  repeated string items = 2;
+  string st = 3;
+  string et = 4;
+}
+
+message FindDataDescribeResp {
+  map <string, DataDescribeInfo> list = 1;
+}
+
+message FindDataCorrelationReq {
+  int64 project_id = 1;
+  repeated string items = 2;
+  string st = 3;
+  string et = 4;
+}
+
+message FindDataMinAndMaxReq {
+  int64 project_id = 1;
+  repeated string items = 2;
+  string st = 3;
+  string et = 4;
+}
+
+message FindDataMinAndMaxResp {
+  map <string, DataMinAndMaxInfo> list = 1;
+}
+
+message FindDataCorrelationResp {
+  map <string, DataCorrelationInfo> list = 1;
+}
+
+message HealthReq {
+}
+
+message HealthResp {
+  repeated string db = 1;
+  repeated string redis = 2;
+  repeated string mq = 3;
+  string msg = 4;
+}
+
+service Organization {
+  rpc GetWorkingUfByCode(DcWorkingReq) returns(GetWorkingUfByCodeResp);
+  rpc FindWorkingUfByCycle(FindWorkingUfByCycleReq) returns(FindWorkingUfByCycleResp);
+  rpc GetWorkingRoByCode(DcWorkingReq) returns(GetWorkingRoByCodeResp);
+  rpc GetWorkingChestByCode(DcWorkingReq) returns(GetWorkingChestByCodeResp);
+  rpc GetWorkingPumpByCode(DcWorkingReq) returns(GetWorkingPumpByCodeResp);
+  rpc GetWorkingValveByCode(DcWorkingReq) returns(GetWorkingValveByCodeResp);
+  rpc MultiAddItemHistoryData(MultiAddItemHistoryDataReq) returns(MultiAddItemHistoryDataResp);
+  rpc ItemHistoryDataList(ItemHistoryDataListReq) returns(ItemHistoryDataListResp);
+  rpc ItemHistoryDataByTime(ItemHistoryDataByTimeReq) returns(ItemHistoryDataListResp);
+  rpc ItemHistoryDataMaxMinByTime(ItemHistoryDataByTimeReq) returns(ItemHistoryDataMaxMinResp);
+  rpc ItemHistoryDataFirstLastByTime(ItemHistoryDataByTimeReq) returns(ItemHistoryDataFirstLastResp);
+  rpc ChangeTypeItemHistoryData(ItemHistoryDataByTimeReq) returns(ChangeTypeItemHistoryDataResp);
+  rpc ItemHistoryDataForChart(ItemHistoryDataForChartReq) returns(ItemHistoryDataForChartResp);
+
+  rpc FindAppList (FindAppListReq) returns (FindAppListResp);
+  rpc GetAppInfo (GetAppInfoReq) returns (GetAppInfoResp);
+  rpc CreateAppInfo (CreateAppInfoReq) returns (CreateAppInfoResp);
+  rpc RemoveAppInfo (RemoveAppInfoReq) returns (RemoveAppInfoResp);
+  rpc DisableAppInfo (DisableAppInfoReq) returns (DisableAppInfoResp);
+  rpc EnableAppInfo (EnableAppInfoReq) returns (EnableAppInfoResp);
+  rpc ResetAppSecret (ResetAppSecretReq) returns (ResetAppSecretResp);
+  rpc ExpireAppSecret (ExpireAppSecretReq) returns (ExpireAppSecretResp);
+  rpc ResetAppProject (ResetAppProjectReq) returns (ResetAppProjectResp);
+
+
+  rpc FindDataDescribe (FindDataDescribeReq) returns (FindDataDescribeResp);
+  rpc FindDataMinAndMax (FindDataMinAndMaxReq) returns (FindDataMinAndMaxResp);
+  rpc FindDataCorrelation (FindDataCorrelationReq) returns (FindDataCorrelationResp);
+
+  rpc Health (HealthReq) returns (HealthResp);
+}

+ 7085 - 0
rpc_client/datacenter/pb/datacenter.pb.go

@@ -0,0 +1,7085 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.33.0
+// 	protoc        v3.21.11
+// source: datacenter.proto
+
+package pb
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type Pagination struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Current  uint32 `protobuf:"varint,1,opt,name=current,proto3" json:"current,omitempty"`
+	PageSize uint32 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
+	Total    uint32 `protobuf:"varint,3,opt,name=total,proto3" json:"total,omitempty"`
+}
+
+func (x *Pagination) Reset() {
+	*x = Pagination{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Pagination) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Pagination) ProtoMessage() {}
+
+func (x *Pagination) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Pagination.ProtoReflect.Descriptor instead.
+func (*Pagination) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Pagination) GetCurrent() uint32 {
+	if x != nil {
+		return x.Current
+	}
+	return 0
+}
+
+func (x *Pagination) GetPageSize() uint32 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *Pagination) GetTotal() uint32 {
+	if x != nil {
+		return x.Total
+	}
+	return 0
+}
+
+type DataDescribeInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"count"
+	Count uint32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"`
+	// @gotags: json:"min"
+	Min float64 `protobuf:"fixed64,2,opt,name=min,proto3" json:"min,omitempty"`
+	// @gotags: json:"max"
+	Max float64 `protobuf:"fixed64,3,opt,name=max,proto3" json:"max,omitempty"`
+	// @gotags: json:"mean"
+	Mean float64 `protobuf:"fixed64,4,opt,name=mean,proto3" json:"mean,omitempty"`
+	// @gotags: json:"std_dev"
+	StdDev float64 `protobuf:"fixed64,5,opt,name=std_dev,json=stdDev,proto3" json:"std_dev,omitempty"`
+	// @gotags: json:"var_dev"
+	VarDev float64 `protobuf:"fixed64,6,opt,name=var_dev,json=varDev,proto3" json:"var_dev,omitempty"`
+	// @gotags: json:"p25"
+	P25 float64 `protobuf:"fixed64,7,opt,name=p25,proto3" json:"p25,omitempty"`
+	// @gotags: json:"p50"
+	P50 float64 `protobuf:"fixed64,8,opt,name=p50,proto3" json:"p50,omitempty"`
+	// @gotags: json:"p75"
+	P75 float64 `protobuf:"fixed64,9,opt,name=p75,proto3" json:"p75,omitempty"`
+	// @gotags: json:"st"
+	St string `protobuf:"bytes,10,opt,name=st,proto3" json:"st,omitempty"`
+	// @gotags: json:"et"
+	Et string `protobuf:"bytes,11,opt,name=et,proto3" json:"et,omitempty"`
+}
+
+func (x *DataDescribeInfo) Reset() {
+	*x = DataDescribeInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DataDescribeInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DataDescribeInfo) ProtoMessage() {}
+
+func (x *DataDescribeInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DataDescribeInfo.ProtoReflect.Descriptor instead.
+func (*DataDescribeInfo) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *DataDescribeInfo) GetCount() uint32 {
+	if x != nil {
+		return x.Count
+	}
+	return 0
+}
+
+func (x *DataDescribeInfo) GetMin() float64 {
+	if x != nil {
+		return x.Min
+	}
+	return 0
+}
+
+func (x *DataDescribeInfo) GetMax() float64 {
+	if x != nil {
+		return x.Max
+	}
+	return 0
+}
+
+func (x *DataDescribeInfo) GetMean() float64 {
+	if x != nil {
+		return x.Mean
+	}
+	return 0
+}
+
+func (x *DataDescribeInfo) GetStdDev() float64 {
+	if x != nil {
+		return x.StdDev
+	}
+	return 0
+}
+
+func (x *DataDescribeInfo) GetVarDev() float64 {
+	if x != nil {
+		return x.VarDev
+	}
+	return 0
+}
+
+func (x *DataDescribeInfo) GetP25() float64 {
+	if x != nil {
+		return x.P25
+	}
+	return 0
+}
+
+func (x *DataDescribeInfo) GetP50() float64 {
+	if x != nil {
+		return x.P50
+	}
+	return 0
+}
+
+func (x *DataDescribeInfo) GetP75() float64 {
+	if x != nil {
+		return x.P75
+	}
+	return 0
+}
+
+func (x *DataDescribeInfo) GetSt() string {
+	if x != nil {
+		return x.St
+	}
+	return ""
+}
+
+func (x *DataDescribeInfo) GetEt() string {
+	if x != nil {
+		return x.Et
+	}
+	return ""
+}
+
+type DataMinAndMaxInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"min"
+	Min float64 `protobuf:"fixed64,1,opt,name=min,proto3" json:"min,omitempty"`
+	// @gotags: json:"max"
+	Max float64 `protobuf:"fixed64,2,opt,name=max,proto3" json:"max,omitempty"`
+}
+
+func (x *DataMinAndMaxInfo) Reset() {
+	*x = DataMinAndMaxInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DataMinAndMaxInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DataMinAndMaxInfo) ProtoMessage() {}
+
+func (x *DataMinAndMaxInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DataMinAndMaxInfo.ProtoReflect.Descriptor instead.
+func (*DataMinAndMaxInfo) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *DataMinAndMaxInfo) GetMin() float64 {
+	if x != nil {
+		return x.Min
+	}
+	return 0
+}
+
+func (x *DataMinAndMaxInfo) GetMax() float64 {
+	if x != nil {
+		return x.Max
+	}
+	return 0
+}
+
+type RelatedItems struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Item        string  `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"`
+	Coefficient float32 `protobuf:"fixed32,2,opt,name=coefficient,proto3" json:"coefficient,omitempty"`
+}
+
+func (x *RelatedItems) Reset() {
+	*x = RelatedItems{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *RelatedItems) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RelatedItems) ProtoMessage() {}
+
+func (x *RelatedItems) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use RelatedItems.ProtoReflect.Descriptor instead.
+func (*RelatedItems) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *RelatedItems) GetItem() string {
+	if x != nil {
+		return x.Item
+	}
+	return ""
+}
+
+func (x *RelatedItems) GetCoefficient() float32 {
+	if x != nil {
+		return x.Coefficient
+	}
+	return 0
+}
+
+type DataCorrelationInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"related_items"
+	RelatedItems map[string]*RelatedItems `protobuf:"bytes,1,rep,name=related_items,json=relatedItems,proto3" json:"related_items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	// @gotags: json:"st"
+	St string `protobuf:"bytes,10,opt,name=st,proto3" json:"st,omitempty"`
+	// @gotags: json:"et"
+	Et string `protobuf:"bytes,11,opt,name=et,proto3" json:"et,omitempty"`
+}
+
+func (x *DataCorrelationInfo) Reset() {
+	*x = DataCorrelationInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DataCorrelationInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DataCorrelationInfo) ProtoMessage() {}
+
+func (x *DataCorrelationInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DataCorrelationInfo.ProtoReflect.Descriptor instead.
+func (*DataCorrelationInfo) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *DataCorrelationInfo) GetRelatedItems() map[string]*RelatedItems {
+	if x != nil {
+		return x.RelatedItems
+	}
+	return nil
+}
+
+func (x *DataCorrelationInfo) GetSt() string {
+	if x != nil {
+		return x.St
+	}
+	return ""
+}
+
+func (x *DataCorrelationInfo) GetEt() string {
+	if x != nil {
+		return x.Et
+	}
+	return ""
+}
+
+type AppInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id         int64   `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	AppName    string  `protobuf:"bytes,2,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"`
+	ProjectIds []int64 `protobuf:"varint,3,rep,packed,name=project_ids,json=projectIds,proto3" json:"project_ids,omitempty"`
+	Secret     string  `protobuf:"bytes,4,opt,name=secret,proto3" json:"secret,omitempty"`
+	Status     int64   `protobuf:"varint,5,opt,name=status,proto3" json:"status,omitempty"`
+	ExpireAt   string  `protobuf:"bytes,6,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"`
+	CTime      string  `protobuf:"bytes,7,opt,name=c_time,json=cTime,proto3" json:"c_time,omitempty"`
+}
+
+func (x *AppInfo) Reset() {
+	*x = AppInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AppInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AppInfo) ProtoMessage() {}
+
+func (x *AppInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AppInfo.ProtoReflect.Descriptor instead.
+func (*AppInfo) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *AppInfo) GetId() int64 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *AppInfo) GetAppName() string {
+	if x != nil {
+		return x.AppName
+	}
+	return ""
+}
+
+func (x *AppInfo) GetProjectIds() []int64 {
+	if x != nil {
+		return x.ProjectIds
+	}
+	return nil
+}
+
+func (x *AppInfo) GetSecret() string {
+	if x != nil {
+		return x.Secret
+	}
+	return ""
+}
+
+func (x *AppInfo) GetStatus() int64 {
+	if x != nil {
+		return x.Status
+	}
+	return 0
+}
+
+func (x *AppInfo) GetExpireAt() string {
+	if x != nil {
+		return x.ExpireAt
+	}
+	return ""
+}
+
+func (x *AppInfo) GetCTime() string {
+	if x != nil {
+		return x.CTime
+	}
+	return ""
+}
+
+type DcWorkingReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ProjectId  int64  `protobuf:"varint,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	DeviceCode string `protobuf:"bytes,2,opt,name=device_code,json=deviceCode,proto3" json:"device_code,omitempty"`
+	Stime      string `protobuf:"bytes,3,opt,name=stime,proto3" json:"stime,omitempty"` // c_time的搜索
+	Etime      string `protobuf:"bytes,4,opt,name=etime,proto3" json:"etime,omitempty"` // c_time的搜索
+	Page       int64  `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"`
+	PageSize   int64  `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	Order      string `protobuf:"bytes,7,opt,name=order,proto3" json:"order,omitempty"` // 排序字段及方向 例: id desc
+}
+
+func (x *DcWorkingReq) Reset() {
+	*x = DcWorkingReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DcWorkingReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DcWorkingReq) ProtoMessage() {}
+
+func (x *DcWorkingReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DcWorkingReq.ProtoReflect.Descriptor instead.
+func (*DcWorkingReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *DcWorkingReq) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *DcWorkingReq) GetDeviceCode() string {
+	if x != nil {
+		return x.DeviceCode
+	}
+	return ""
+}
+
+func (x *DcWorkingReq) GetStime() string {
+	if x != nil {
+		return x.Stime
+	}
+	return ""
+}
+
+func (x *DcWorkingReq) GetEtime() string {
+	if x != nil {
+		return x.Etime
+	}
+	return ""
+}
+
+func (x *DcWorkingReq) GetPage() int64 {
+	if x != nil {
+		return x.Page
+	}
+	return 0
+}
+
+func (x *DcWorkingReq) GetPageSize() int64 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *DcWorkingReq) GetOrder() string {
+	if x != nil {
+		return x.Order
+	}
+	return ""
+}
+
+type WorkingMf struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"id"
+	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	// @gotags: json:"project_id"
+	ProjectId int64 `protobuf:"varint,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	// @gotags: json:"device_code"
+	DeviceCode string `protobuf:"bytes,3,opt,name=device_code,json=deviceCode,proto3" json:"device_code,omitempty"`
+	// @gotags: json:"water_temperature"
+	WaterTemperature float64 `protobuf:"fixed64,4,opt,name=water_temperature,json=waterTemperature,proto3" json:"water_temperature,omitempty"` // 水温 摄氏度
+	// @gotags: json:"feed_flow"
+	FeedFlow float64 `protobuf:"fixed64,5,opt,name=feed_flow,json=feedFlow,proto3" json:"feed_flow,omitempty"` // 进水流量
+	// @gotags: json:"con_flow"
+	ConFlow float64 `protobuf:"fixed64,6,opt,name=con_flow,json=conFlow,proto3" json:"con_flow,omitempty"` // 浓水流量
+	// @gotags: json:"product_flow"
+	ProductFlow float64 `protobuf:"fixed64,7,opt,name=product_flow,json=productFlow,proto3" json:"product_flow,omitempty"` // 产水流量
+	// @gotags: json:"feed_pressure"
+	FeedPressure float64 `protobuf:"fixed64,8,opt,name=feed_pressure,json=feedPressure,proto3" json:"feed_pressure,omitempty"` // 进水压力
+	// @gotags: json:"con_pressure"
+	ConPressure float64 `protobuf:"fixed64,9,opt,name=con_pressure,json=conPressure,proto3" json:"con_pressure,omitempty"` // 浓水压力
+	// @gotags: json:"product_pressure"
+	ProductPressure float64 `protobuf:"fixed64,10,opt,name=product_pressure,json=productPressure,proto3" json:"product_pressure,omitempty"` // 产水压力
+	// @gotags: json:"tmp"
+	Tmp float64 `protobuf:"fixed64,11,opt,name=tmp,proto3" json:"tmp,omitempty"` // 跨膜压差
+	// @gotags: json:"flux"
+	Flux float64 `protobuf:"fixed64,12,opt,name=flux,proto3" json:"flux,omitempty"` // 膜通量
+	// @gotags: json:"feed_wq_turbidity"
+	FeedWqTurbidity float64 `protobuf:"fixed64,13,opt,name=feed_wq_turbidity,json=feedWqTurbidity,proto3" json:"feed_wq_turbidity,omitempty"` // 进水浊度
+	// @gotags: json:"feed_wq_ph"
+	FeedWqPh int64 `protobuf:"varint,14,opt,name=feed_wq_ph,json=feedWqPh,proto3" json:"feed_wq_ph,omitempty"` // 进水 PH 值
+	// @gotags: json:"product_wq_ph"
+	ProductWqPh int64 `protobuf:"varint,15,opt,name=product_wq_ph,json=productWqPh,proto3" json:"product_wq_ph,omitempty"` // 产水 PH 值
+	// @gotags: json:"feed_wq_al"
+	FeedWqAl float64 `protobuf:"fixed64,16,opt,name=feed_wq_al,json=feedWqAl,proto3" json:"feed_wq_al,omitempty"` // 进水水质:铝
+	// @gotags: json:"product_wq_al"
+	ProductWqAl float64 `protobuf:"fixed64,17,opt,name=product_wq_al,json=productWqAl,proto3" json:"product_wq_al,omitempty"` // 产水水质:铝
+	// @gotags: json:"feed_wq_fe"
+	FeedWqFe float64 `protobuf:"fixed64,18,opt,name=feed_wq_fe,json=feedWqFe,proto3" json:"feed_wq_fe,omitempty"` // 进水水质:铁
+	// @gotags: json:"product_wq_fe"
+	ProductWqFe float64 `protobuf:"fixed64,19,opt,name=product_wq_fe,json=productWqFe,proto3" json:"product_wq_fe,omitempty"` // 产水水质:铁
+	// @gotags: json:"feed_wq_mn"
+	FeedWqMn float64 `protobuf:"fixed64,20,opt,name=feed_wq_mn,json=feedWqMn,proto3" json:"feed_wq_mn,omitempty"` // 进水水质:锰
+	// @gotags: json:"product_wq_mn"
+	ProductWqMn float64 `protobuf:"fixed64,21,opt,name=product_wq_mn,json=productWqMn,proto3" json:"product_wq_mn,omitempty"` // 产水水质:锰
+	// @gotags: json:"feed_wq_sio2"
+	FeedWqSio2 float64 `protobuf:"fixed64,22,opt,name=feed_wq_sio2,json=feedWqSio2,proto3" json:"feed_wq_sio2,omitempty"` // 进水水质:二氧化硅
+	// @gotags: json:"product_wq_sio2"
+	ProductWqSio2 float64 `protobuf:"fixed64,23,opt,name=product_wq_sio2,json=productWqSio2,proto3" json:"product_wq_sio2,omitempty"` // 产水水质:二氧化硅
+	// @gotags: json:"feed_wq_cod"
+	FeedWqCod float64 `protobuf:"fixed64,24,opt,name=feed_wq_cod,json=feedWqCod,proto3" json:"feed_wq_cod,omitempty"` // 进水水质:COD
+	// @gotags: json:"product_wq_cod"
+	ProductWqCod float64 `protobuf:"fixed64,25,opt,name=product_wq_cod,json=productWqCod,proto3" json:"product_wq_cod,omitempty"` // 产水水质:COD
+	// @gotags: json:"feed_wq_p"
+	FeedWqP float64 `protobuf:"fixed64,26,opt,name=feed_wq_p,json=feedWqP,proto3" json:"feed_wq_p,omitempty"` // 进水水质:磷
+	// @gotags: json:"product_wq_p"
+	ProductWqP float64 `protobuf:"fixed64,27,opt,name=product_wq_p,json=productWqP,proto3" json:"product_wq_p,omitempty"` // 产水水质:磷
+	// @gotags: json:"step"
+	Step int64 `protobuf:"varint,28,opt,name=step,proto3" json:"step,omitempty"` // 设备当前步序值
+	// @gotags: json:"c_time"
+	CTime string `protobuf:"bytes,29,opt,name=c_time,json=cTime,proto3" json:"c_time,omitempty"`
+}
+
+func (x *WorkingMf) Reset() {
+	*x = WorkingMf{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WorkingMf) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WorkingMf) ProtoMessage() {}
+
+func (x *WorkingMf) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WorkingMf.ProtoReflect.Descriptor instead.
+func (*WorkingMf) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *WorkingMf) GetId() int64 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetDeviceCode() string {
+	if x != nil {
+		return x.DeviceCode
+	}
+	return ""
+}
+
+func (x *WorkingMf) GetWaterTemperature() float64 {
+	if x != nil {
+		return x.WaterTemperature
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetFeedFlow() float64 {
+	if x != nil {
+		return x.FeedFlow
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetConFlow() float64 {
+	if x != nil {
+		return x.ConFlow
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetProductFlow() float64 {
+	if x != nil {
+		return x.ProductFlow
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetFeedPressure() float64 {
+	if x != nil {
+		return x.FeedPressure
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetConPressure() float64 {
+	if x != nil {
+		return x.ConPressure
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetProductPressure() float64 {
+	if x != nil {
+		return x.ProductPressure
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetTmp() float64 {
+	if x != nil {
+		return x.Tmp
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetFlux() float64 {
+	if x != nil {
+		return x.Flux
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetFeedWqTurbidity() float64 {
+	if x != nil {
+		return x.FeedWqTurbidity
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetFeedWqPh() int64 {
+	if x != nil {
+		return x.FeedWqPh
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetProductWqPh() int64 {
+	if x != nil {
+		return x.ProductWqPh
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetFeedWqAl() float64 {
+	if x != nil {
+		return x.FeedWqAl
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetProductWqAl() float64 {
+	if x != nil {
+		return x.ProductWqAl
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetFeedWqFe() float64 {
+	if x != nil {
+		return x.FeedWqFe
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetProductWqFe() float64 {
+	if x != nil {
+		return x.ProductWqFe
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetFeedWqMn() float64 {
+	if x != nil {
+		return x.FeedWqMn
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetProductWqMn() float64 {
+	if x != nil {
+		return x.ProductWqMn
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetFeedWqSio2() float64 {
+	if x != nil {
+		return x.FeedWqSio2
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetProductWqSio2() float64 {
+	if x != nil {
+		return x.ProductWqSio2
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetFeedWqCod() float64 {
+	if x != nil {
+		return x.FeedWqCod
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetProductWqCod() float64 {
+	if x != nil {
+		return x.ProductWqCod
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetFeedWqP() float64 {
+	if x != nil {
+		return x.FeedWqP
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetProductWqP() float64 {
+	if x != nil {
+		return x.ProductWqP
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetStep() int64 {
+	if x != nil {
+		return x.Step
+	}
+	return 0
+}
+
+func (x *WorkingMf) GetCTime() string {
+	if x != nil {
+		return x.CTime
+	}
+	return ""
+}
+
+type WorkingUf struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"id"
+	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	// @gotags: json:"project_id"
+	ProjectId int64 `protobuf:"varint,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	// @gotags: json:"device_code"
+	DeviceCode string `protobuf:"bytes,3,opt,name=device_code,json=deviceCode,proto3" json:"device_code,omitempty"`
+	// @gotags: json:"water_temperature"
+	WaterTemperature float64 `protobuf:"fixed64,4,opt,name=water_temperature,json=waterTemperature,proto3" json:"water_temperature,omitempty"` // 水温 摄氏度
+	// @gotags: json:"feed_flow"
+	FeedFlow float64 `protobuf:"fixed64,5,opt,name=feed_flow,json=feedFlow,proto3" json:"feed_flow,omitempty"` // 进水流量
+	// @gotags: json:"con_flow"
+	ConFlow float64 `protobuf:"fixed64,6,opt,name=con_flow,json=conFlow,proto3" json:"con_flow,omitempty"` // 浓水流量
+	// @gotags: json:"product_flow"
+	ProductFlow float64 `protobuf:"fixed64,7,opt,name=product_flow,json=productFlow,proto3" json:"product_flow,omitempty"` // 产水流量
+	// @gotags: json:"feed_pressure"
+	FeedPressure float64 `protobuf:"fixed64,8,opt,name=feed_pressure,json=feedPressure,proto3" json:"feed_pressure,omitempty"` // 进水压力
+	// @gotags: json:"con_pressure"
+	ConPressure float64 `protobuf:"fixed64,9,opt,name=con_pressure,json=conPressure,proto3" json:"con_pressure,omitempty"` // 浓水压力
+	// @gotags: json:"product_pressure"
+	ProductPressure float64 `protobuf:"fixed64,10,opt,name=product_pressure,json=productPressure,proto3" json:"product_pressure,omitempty"` // 产水压力
+	// @gotags: json:"tmp"
+	Tmp float64 `protobuf:"fixed64,11,opt,name=tmp,proto3" json:"tmp,omitempty"` // 跨膜压差
+	// @gotags: json:"flux"
+	Flux float64 `protobuf:"fixed64,12,opt,name=flux,proto3" json:"flux,omitempty"` // 膜通量
+	// @gotags: json:"permeability"
+	Permeability float64 `protobuf:"fixed64,32,opt,name=permeability,proto3" json:"permeability,omitempty"` // 渗透率
+	// @gotags: json:"feed_wq_turbidity"
+	FeedWqTurbidity float64 `protobuf:"fixed64,13,opt,name=feed_wq_turbidity,json=feedWqTurbidity,proto3" json:"feed_wq_turbidity,omitempty"` // 进水浊度
+	// @gotags: json:"feed_wq_ph"
+	FeedWqPh int64 `protobuf:"varint,14,opt,name=feed_wq_ph,json=feedWqPh,proto3" json:"feed_wq_ph,omitempty"` // 进水 PH 值
+	// @gotags: json:"product_wq_ph"
+	ProductWqPh int64 `protobuf:"varint,15,opt,name=product_wq_ph,json=productWqPh,proto3" json:"product_wq_ph,omitempty"` // 产水 PH 值
+	// @gotags: json:"feed_wq_al"
+	FeedWqAl float64 `protobuf:"fixed64,16,opt,name=feed_wq_al,json=feedWqAl,proto3" json:"feed_wq_al,omitempty"` // 进水水质:铝
+	// @gotags: json:"product_wq_al"
+	ProductWqAl float64 `protobuf:"fixed64,17,opt,name=product_wq_al,json=productWqAl,proto3" json:"product_wq_al,omitempty"` // 产水水质:铝
+	// @gotags: json:"feed_wq_fe"
+	FeedWqFe float64 `protobuf:"fixed64,18,opt,name=feed_wq_fe,json=feedWqFe,proto3" json:"feed_wq_fe,omitempty"` // 进水水质:铁
+	// @gotags: json:"product_wq_fe"
+	ProductWqFe float64 `protobuf:"fixed64,19,opt,name=product_wq_fe,json=productWqFe,proto3" json:"product_wq_fe,omitempty"` // 产水水质:铁
+	// @gotags: json:"feed_wq_mn"
+	FeedWqMn float64 `protobuf:"fixed64,20,opt,name=feed_wq_mn,json=feedWqMn,proto3" json:"feed_wq_mn,omitempty"` // 进水水质:锰
+	// @gotags: json:"product_wq_mn"
+	ProductWqMn float64 `protobuf:"fixed64,21,opt,name=product_wq_mn,json=productWqMn,proto3" json:"product_wq_mn,omitempty"` // 产水水质:锰
+	// @gotags: json:"feed_wq_sio2"
+	FeedWqSio2 float64 `protobuf:"fixed64,22,opt,name=feed_wq_sio2,json=feedWqSio2,proto3" json:"feed_wq_sio2,omitempty"` // 进水水质:二氧化硅
+	// @gotags: json:"product_wq_sio2"
+	ProductWqSio2 float64 `protobuf:"fixed64,23,opt,name=product_wq_sio2,json=productWqSio2,proto3" json:"product_wq_sio2,omitempty"` // 产水水质:二氧化硅
+	// @gotags: json:"feed_wq_cod"
+	FeedWqCod float64 `protobuf:"fixed64,24,opt,name=feed_wq_cod,json=feedWqCod,proto3" json:"feed_wq_cod,omitempty"` // 进水水质:COD
+	// @gotags: json:"product_wq_cod"
+	ProductWqCod float64 `protobuf:"fixed64,25,opt,name=product_wq_cod,json=productWqCod,proto3" json:"product_wq_cod,omitempty"` // 产水水质:COD
+	// @gotags: json:"feed_wq_p"
+	FeedWqP float64 `protobuf:"fixed64,26,opt,name=feed_wq_p,json=feedWqP,proto3" json:"feed_wq_p,omitempty"` // 进水水质:磷
+	// @gotags: json:"product_wq_p"
+	ProductWqP float64 `protobuf:"fixed64,27,opt,name=product_wq_p,json=productWqP,proto3" json:"product_wq_p,omitempty"` // 产水水质:磷
+	// @gotags: json:"step"
+	Step int64 `protobuf:"varint,28,opt,name=step,proto3" json:"step,omitempty"` // 设备当前步序值
+	// @gotags: json:"filter_time"
+	FilterTime float64 `protobuf:"fixed64,29,opt,name=filter_time,json=filterTime,proto3" json:"filter_time,omitempty"`
+	// @gotags: json:"filter_cycle"
+	FilterCycle int64 `protobuf:"varint,30,opt,name=filter_cycle,json=filterCycle,proto3" json:"filter_cycle,omitempty"`
+	// @gotags: json:"c_time"
+	CTime string `protobuf:"bytes,31,opt,name=c_time,json=cTime,proto3" json:"c_time,omitempty"`
+}
+
+func (x *WorkingUf) Reset() {
+	*x = WorkingUf{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WorkingUf) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WorkingUf) ProtoMessage() {}
+
+func (x *WorkingUf) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WorkingUf.ProtoReflect.Descriptor instead.
+func (*WorkingUf) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *WorkingUf) GetId() int64 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetDeviceCode() string {
+	if x != nil {
+		return x.DeviceCode
+	}
+	return ""
+}
+
+func (x *WorkingUf) GetWaterTemperature() float64 {
+	if x != nil {
+		return x.WaterTemperature
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFeedFlow() float64 {
+	if x != nil {
+		return x.FeedFlow
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetConFlow() float64 {
+	if x != nil {
+		return x.ConFlow
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetProductFlow() float64 {
+	if x != nil {
+		return x.ProductFlow
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFeedPressure() float64 {
+	if x != nil {
+		return x.FeedPressure
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetConPressure() float64 {
+	if x != nil {
+		return x.ConPressure
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetProductPressure() float64 {
+	if x != nil {
+		return x.ProductPressure
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetTmp() float64 {
+	if x != nil {
+		return x.Tmp
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFlux() float64 {
+	if x != nil {
+		return x.Flux
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetPermeability() float64 {
+	if x != nil {
+		return x.Permeability
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFeedWqTurbidity() float64 {
+	if x != nil {
+		return x.FeedWqTurbidity
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFeedWqPh() int64 {
+	if x != nil {
+		return x.FeedWqPh
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetProductWqPh() int64 {
+	if x != nil {
+		return x.ProductWqPh
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFeedWqAl() float64 {
+	if x != nil {
+		return x.FeedWqAl
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetProductWqAl() float64 {
+	if x != nil {
+		return x.ProductWqAl
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFeedWqFe() float64 {
+	if x != nil {
+		return x.FeedWqFe
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetProductWqFe() float64 {
+	if x != nil {
+		return x.ProductWqFe
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFeedWqMn() float64 {
+	if x != nil {
+		return x.FeedWqMn
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetProductWqMn() float64 {
+	if x != nil {
+		return x.ProductWqMn
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFeedWqSio2() float64 {
+	if x != nil {
+		return x.FeedWqSio2
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetProductWqSio2() float64 {
+	if x != nil {
+		return x.ProductWqSio2
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFeedWqCod() float64 {
+	if x != nil {
+		return x.FeedWqCod
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetProductWqCod() float64 {
+	if x != nil {
+		return x.ProductWqCod
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFeedWqP() float64 {
+	if x != nil {
+		return x.FeedWqP
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetProductWqP() float64 {
+	if x != nil {
+		return x.ProductWqP
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetStep() int64 {
+	if x != nil {
+		return x.Step
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFilterTime() float64 {
+	if x != nil {
+		return x.FilterTime
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetFilterCycle() int64 {
+	if x != nil {
+		return x.FilterCycle
+	}
+	return 0
+}
+
+func (x *WorkingUf) GetCTime() string {
+	if x != nil {
+		return x.CTime
+	}
+	return ""
+}
+
+type WorkingNf struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// gotags: json:"id"
+	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	// gotags: json:"project_id"
+	ProjectId int64 `protobuf:"varint,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	// gotags: json:"device_code"
+	DeviceCode string `protobuf:"bytes,3,opt,name=device_code,json=deviceCode,proto3" json:"device_code,omitempty"`
+	// gotags: json:"water_temperature"
+	WaterTemperature float64 `protobuf:"fixed64,4,opt,name=water_temperature,json=waterTemperature,proto3" json:"water_temperature,omitempty"` // 水温 摄氏度
+	// gotags: json:"feed_flow_1st"
+	FeedFlow_1St float64 `protobuf:"fixed64,5,opt,name=feed_flow_1st,json=feedFlow1st,proto3" json:"feed_flow_1st,omitempty"` // 一段进水流量
+	// gotags: json:"con_flow_1st"
+	ConFlow_1St float64 `protobuf:"fixed64,6,opt,name=con_flow_1st,json=conFlow1st,proto3" json:"con_flow_1st,omitempty"` // 一段浓水流量
+	// gotags: json:"product_flow_1st"
+	ProductFlow_1St float64 `protobuf:"fixed64,7,opt,name=product_flow_1st,json=productFlow1st,proto3" json:"product_flow_1st,omitempty"` // 一段产水流量
+	// gotags: json:"feed_pressure_1st"
+	FeedPressure_1St float64 `protobuf:"fixed64,8,opt,name=feed_pressure_1st,json=feedPressure1st,proto3" json:"feed_pressure_1st,omitempty"` // 一段进水压力
+	// gotags: json:"con_pressure_1st"
+	ConPressure_1St float64 `protobuf:"fixed64,9,opt,name=con_pressure_1st,json=conPressure1st,proto3" json:"con_pressure_1st,omitempty"` // 一段浓水压力
+	// gotags: json:"product_pressure_1st"
+	ProductPressure_1St float64 `protobuf:"fixed64,10,opt,name=product_pressure_1st,json=productPressure1st,proto3" json:"product_pressure_1st,omitempty"` // 一段产水压力
+	// gotags: json:"tmp_1st"
+	Tmp_1St float64 `protobuf:"fixed64,11,opt,name=tmp_1st,json=tmp1st,proto3" json:"tmp_1st,omitempty"` // 一段跨膜压差
+	// gotags: json:"flux_1st"
+	Flux_1St float64 `protobuf:"fixed64,12,opt,name=flux_1st,json=flux1st,proto3" json:"flux_1st,omitempty"` // 一段膜通量
+	// gotags: json:"permeability_1st"
+	Permeability_1St float64 `protobuf:"fixed64,13,opt,name=permeability_1st,json=permeability1st,proto3" json:"permeability_1st,omitempty"` // 一段渗透率
+	// gotags: json:"feed_flow_2nd"
+	FeedFlow_2Nd float64 `protobuf:"fixed64,14,opt,name=feed_flow_2nd,json=feedFlow2nd,proto3" json:"feed_flow_2nd,omitempty"` // 二段进水流量
+	// gotags: json:"con_flow_2nd"
+	ConFlow_2Nd float64 `protobuf:"fixed64,15,opt,name=con_flow_2nd,json=conFlow2nd,proto3" json:"con_flow_2nd,omitempty"` // 二段浓水流量
+	// gotags: json:"product_flow_2nd"
+	ProductFlow_2Nd float64 `protobuf:"fixed64,16,opt,name=product_flow_2nd,json=productFlow2nd,proto3" json:"product_flow_2nd,omitempty"` // 二段产水流量
+	// gotags: json:"feed_pressure_2nd"
+	FeedPressure_2Nd float64 `protobuf:"fixed64,17,opt,name=feed_pressure_2nd,json=feedPressure2nd,proto3" json:"feed_pressure_2nd,omitempty"` // 二段进水压力
+	// gotags: json:"con_pressure_2nd"
+	ConPressure_2Nd float64 `protobuf:"fixed64,18,opt,name=con_pressure_2nd,json=conPressure2nd,proto3" json:"con_pressure_2nd,omitempty"` // 二段浓水压力
+	// gotags: json:"product_pressure_2nd"
+	ProductPressure_2Nd float64 `protobuf:"fixed64,19,opt,name=product_pressure_2nd,json=productPressure2nd,proto3" json:"product_pressure_2nd,omitempty"` // 二段产水压力
+	// gotags: json:"tmp_2nd"
+	Tmp_2Nd float64 `protobuf:"fixed64,20,opt,name=tmp_2nd,json=tmp2nd,proto3" json:"tmp_2nd,omitempty"` // 二段压差
+	// gotags: json:"flux_2nd"
+	Flux_2Nd float64 `protobuf:"fixed64,21,opt,name=flux_2nd,json=flux2nd,proto3" json:"flux_2nd,omitempty"` // 二段通量
+	// gotags: json:"permeability_2nd"
+	Permeability_2Nd float64 `protobuf:"fixed64,22,opt,name=permeability_2nd,json=permeability2nd,proto3" json:"permeability_2nd,omitempty"` // 二段渗透率
+	// gotags: json:"feed_flow_3th"
+	FeedFlow_3Th float64 `protobuf:"fixed64,23,opt,name=feed_flow_3th,json=feedFlow3th,proto3" json:"feed_flow_3th,omitempty"` // 三段进水流量
+	// gotags: json:"con_flow_3th"
+	ConFlow_3Th float64 `protobuf:"fixed64,24,opt,name=con_flow_3th,json=conFlow3th,proto3" json:"con_flow_3th,omitempty"` // 三段浓水流量
+	// gotags: json:"product_flow_3th"
+	ProductFlow_3Th float64 `protobuf:"fixed64,25,opt,name=product_flow_3th,json=productFlow3th,proto3" json:"product_flow_3th,omitempty"` // 三段产水流量
+	// gotags: json:"feed_pressure_3th"
+	FeedPressure_3Th float64 `protobuf:"fixed64,26,opt,name=feed_pressure_3th,json=feedPressure3th,proto3" json:"feed_pressure_3th,omitempty"` // 三段进水压力
+	// gotags: json:"con_pressure_3th"
+	ConPressure_3Th float64 `protobuf:"fixed64,27,opt,name=con_pressure_3th,json=conPressure3th,proto3" json:"con_pressure_3th,omitempty"` // 三段浓水压力
+	// gotags: json:"product_pressure_3th"
+	ProductPressure_3Th float64 `protobuf:"fixed64,28,opt,name=product_pressure_3th,json=productPressure3th,proto3" json:"product_pressure_3th,omitempty"` // 三段产水压力
+	// gotags: json:"tmp_3th"
+	Tmp_3Th float64 `protobuf:"fixed64,29,opt,name=tmp_3th,json=tmp3th,proto3" json:"tmp_3th,omitempty"` // 三段压差
+	// gotags: json:"flux_3th"
+	Flux_3Th float64 `protobuf:"fixed64,30,opt,name=flux_3th,json=flux3th,proto3" json:"flux_3th,omitempty"` // 三段通量
+	// gotags: json:"permeability_3th"
+	Permeability_3Th float64 `protobuf:"fixed64,31,opt,name=permeability_3th,json=permeability3th,proto3" json:"permeability_3th,omitempty"` // 三段渗透率
+	// gotags: json:"feed_wq_turbidity"
+	FeedWqTurbidity float64 `protobuf:"fixed64,32,opt,name=feed_wq_turbidity,json=feedWqTurbidity,proto3" json:"feed_wq_turbidity,omitempty"` // 进水浊度
+	// gotags: json:"feed_wq_ph"
+	FeedWqPh int64 `protobuf:"varint,33,opt,name=feed_wq_ph,json=feedWqPh,proto3" json:"feed_wq_ph,omitempty"` // 进水 PH 值
+	// gotags: json:"product_wq_ph"
+	ProductWqPh int64 `protobuf:"varint,34,opt,name=product_wq_ph,json=productWqPh,proto3" json:"product_wq_ph,omitempty"` // 产水 PH 值
+	// gotags: json:"feed_wq_al"
+	FeedWqAl float64 `protobuf:"fixed64,35,opt,name=feed_wq_al,json=feedWqAl,proto3" json:"feed_wq_al,omitempty"` // 进水水质:铝
+	// gotags: json:"product_wq_al"
+	ProductWqAl float64 `protobuf:"fixed64,36,opt,name=product_wq_al,json=productWqAl,proto3" json:"product_wq_al,omitempty"` // 产水水质:铝
+	// gotags: json:"feed_wq_fe"
+	FeedWqFe float64 `protobuf:"fixed64,37,opt,name=feed_wq_fe,json=feedWqFe,proto3" json:"feed_wq_fe,omitempty"` // 进水水质:铁
+	// gotags: json:"product_wq_fe"
+	ProductWqFe float64 `protobuf:"fixed64,38,opt,name=product_wq_fe,json=productWqFe,proto3" json:"product_wq_fe,omitempty"` // 产水水质:铁
+	// gotags: json:"feed_wq_mn"
+	FeedWqMn float64 `protobuf:"fixed64,39,opt,name=feed_wq_mn,json=feedWqMn,proto3" json:"feed_wq_mn,omitempty"` // 进水水质:锰
+	// gotags: json:"product_wq_mn"
+	ProductWqMn float64 `protobuf:"fixed64,40,opt,name=product_wq_mn,json=productWqMn,proto3" json:"product_wq_mn,omitempty"` // 产水水质:锰
+	// gotags: json:"feed_wq_sio2"
+	FeedWqSio2 float64 `protobuf:"fixed64,41,opt,name=feed_wq_sio2,json=feedWqSio2,proto3" json:"feed_wq_sio2,omitempty"` // 进水水质:二氧化硅
+	// gotags: json:"product_wq_sio2"
+	ProductWqSio2 float64 `protobuf:"fixed64,42,opt,name=product_wq_sio2,json=productWqSio2,proto3" json:"product_wq_sio2,omitempty"` // 产水水质:二氧化硅
+	// gotags: json:"feed_wq_cod"
+	FeedWqCod float64 `protobuf:"fixed64,43,opt,name=feed_wq_cod,json=feedWqCod,proto3" json:"feed_wq_cod,omitempty"` // 进水水质:COD
+	// gotags: json:"product_wq_cod"
+	ProductWqCod float64 `protobuf:"fixed64,44,opt,name=product_wq_cod,json=productWqCod,proto3" json:"product_wq_cod,omitempty"` // 产水水质:COD
+	// gotags: json:"feed_wq_p"
+	FeedWqP float64 `protobuf:"fixed64,45,opt,name=feed_wq_p,json=feedWqP,proto3" json:"feed_wq_p,omitempty"` // 进水水质:磷
+	// gotags: json:"product_wq_p"
+	ProductWqP float64 `protobuf:"fixed64,46,opt,name=product_wq_p,json=productWqP,proto3" json:"product_wq_p,omitempty"` // 产水水质:磷
+	// gotags: json:"step"
+	Step int64 `protobuf:"varint,47,opt,name=step,proto3" json:"step,omitempty"` // 设备当前步序值
+	// gotags: json:"c_time"
+	CTime string `protobuf:"bytes,48,opt,name=c_time,json=cTime,proto3" json:"c_time,omitempty"`
+}
+
+func (x *WorkingNf) Reset() {
+	*x = WorkingNf{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WorkingNf) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WorkingNf) ProtoMessage() {}
+
+func (x *WorkingNf) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[9]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WorkingNf.ProtoReflect.Descriptor instead.
+func (*WorkingNf) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *WorkingNf) GetId() int64 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetDeviceCode() string {
+	if x != nil {
+		return x.DeviceCode
+	}
+	return ""
+}
+
+func (x *WorkingNf) GetWaterTemperature() float64 {
+	if x != nil {
+		return x.WaterTemperature
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedFlow_1St() float64 {
+	if x != nil {
+		return x.FeedFlow_1St
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetConFlow_1St() float64 {
+	if x != nil {
+		return x.ConFlow_1St
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductFlow_1St() float64 {
+	if x != nil {
+		return x.ProductFlow_1St
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedPressure_1St() float64 {
+	if x != nil {
+		return x.FeedPressure_1St
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetConPressure_1St() float64 {
+	if x != nil {
+		return x.ConPressure_1St
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductPressure_1St() float64 {
+	if x != nil {
+		return x.ProductPressure_1St
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetTmp_1St() float64 {
+	if x != nil {
+		return x.Tmp_1St
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFlux_1St() float64 {
+	if x != nil {
+		return x.Flux_1St
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetPermeability_1St() float64 {
+	if x != nil {
+		return x.Permeability_1St
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedFlow_2Nd() float64 {
+	if x != nil {
+		return x.FeedFlow_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetConFlow_2Nd() float64 {
+	if x != nil {
+		return x.ConFlow_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductFlow_2Nd() float64 {
+	if x != nil {
+		return x.ProductFlow_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedPressure_2Nd() float64 {
+	if x != nil {
+		return x.FeedPressure_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetConPressure_2Nd() float64 {
+	if x != nil {
+		return x.ConPressure_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductPressure_2Nd() float64 {
+	if x != nil {
+		return x.ProductPressure_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetTmp_2Nd() float64 {
+	if x != nil {
+		return x.Tmp_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFlux_2Nd() float64 {
+	if x != nil {
+		return x.Flux_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetPermeability_2Nd() float64 {
+	if x != nil {
+		return x.Permeability_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedFlow_3Th() float64 {
+	if x != nil {
+		return x.FeedFlow_3Th
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetConFlow_3Th() float64 {
+	if x != nil {
+		return x.ConFlow_3Th
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductFlow_3Th() float64 {
+	if x != nil {
+		return x.ProductFlow_3Th
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedPressure_3Th() float64 {
+	if x != nil {
+		return x.FeedPressure_3Th
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetConPressure_3Th() float64 {
+	if x != nil {
+		return x.ConPressure_3Th
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductPressure_3Th() float64 {
+	if x != nil {
+		return x.ProductPressure_3Th
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetTmp_3Th() float64 {
+	if x != nil {
+		return x.Tmp_3Th
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFlux_3Th() float64 {
+	if x != nil {
+		return x.Flux_3Th
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetPermeability_3Th() float64 {
+	if x != nil {
+		return x.Permeability_3Th
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedWqTurbidity() float64 {
+	if x != nil {
+		return x.FeedWqTurbidity
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedWqPh() int64 {
+	if x != nil {
+		return x.FeedWqPh
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductWqPh() int64 {
+	if x != nil {
+		return x.ProductWqPh
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedWqAl() float64 {
+	if x != nil {
+		return x.FeedWqAl
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductWqAl() float64 {
+	if x != nil {
+		return x.ProductWqAl
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedWqFe() float64 {
+	if x != nil {
+		return x.FeedWqFe
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductWqFe() float64 {
+	if x != nil {
+		return x.ProductWqFe
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedWqMn() float64 {
+	if x != nil {
+		return x.FeedWqMn
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductWqMn() float64 {
+	if x != nil {
+		return x.ProductWqMn
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedWqSio2() float64 {
+	if x != nil {
+		return x.FeedWqSio2
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductWqSio2() float64 {
+	if x != nil {
+		return x.ProductWqSio2
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedWqCod() float64 {
+	if x != nil {
+		return x.FeedWqCod
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductWqCod() float64 {
+	if x != nil {
+		return x.ProductWqCod
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetFeedWqP() float64 {
+	if x != nil {
+		return x.FeedWqP
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetProductWqP() float64 {
+	if x != nil {
+		return x.ProductWqP
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetStep() int64 {
+	if x != nil {
+		return x.Step
+	}
+	return 0
+}
+
+func (x *WorkingNf) GetCTime() string {
+	if x != nil {
+		return x.CTime
+	}
+	return ""
+}
+
+type WorkingRo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// gotags: json:"id"
+	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	// gotags: json:"project_id"
+	ProjectId int64 `protobuf:"varint,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	// gotags: json:"device_code"
+	DeviceCode string `protobuf:"bytes,3,opt,name=device_code,json=deviceCode,proto3" json:"device_code,omitempty"`
+	// gotags: json:"water_temperature"
+	WaterTemperature float64 `protobuf:"fixed64,4,opt,name=water_temperature,json=waterTemperature,proto3" json:"water_temperature,omitempty"` // 水温 摄氏度
+	// gotags: json:"feed_flow_1st"
+	FeedFlow_1St float64 `protobuf:"fixed64,5,opt,name=feed_flow_1st,json=feedFlow1st,proto3" json:"feed_flow_1st,omitempty"` // 一段进水流量
+	// gotags: json:"con_flow_1st"
+	ConFlow_1St float64 `protobuf:"fixed64,6,opt,name=con_flow_1st,json=conFlow1st,proto3" json:"con_flow_1st,omitempty"` // 一段浓水流量
+	// gotags: json:"product_flow_1st"
+	ProductFlow_1St float64 `protobuf:"fixed64,7,opt,name=product_flow_1st,json=productFlow1st,proto3" json:"product_flow_1st,omitempty"` // 一段产水流量
+	// gotags: json:"feed_pressure_1st"
+	FeedPressure_1St float64 `protobuf:"fixed64,8,opt,name=feed_pressure_1st,json=feedPressure1st,proto3" json:"feed_pressure_1st,omitempty"` // 一段进水压力
+	// gotags: json:"con_pressure_1st"
+	ConPressure_1St float64 `protobuf:"fixed64,9,opt,name=con_pressure_1st,json=conPressure1st,proto3" json:"con_pressure_1st,omitempty"` // 一段浓水压力
+	// gotags: json:"product_pressure_1st"
+	ProductPressure_1St float64 `protobuf:"fixed64,10,opt,name=product_pressure_1st,json=productPressure1st,proto3" json:"product_pressure_1st,omitempty"` // 一段产水压力
+	// gotags: json:"tmp_1st"
+	Tmp_1St float64 `protobuf:"fixed64,11,opt,name=tmp_1st,json=tmp1st,proto3" json:"tmp_1st,omitempty"` // 一段跨膜压差
+	// gotags: json:"flux_1st"
+	Flux_1St float64 `protobuf:"fixed64,12,opt,name=flux_1st,json=flux1st,proto3" json:"flux_1st,omitempty"` // 一段膜通量
+	// gotags: json:"permeability_1st"
+	Permeability_1St float64 `protobuf:"fixed64,13,opt,name=permeability_1st,json=permeability1st,proto3" json:"permeability_1st,omitempty"` // 一段渗透率
+	// gotags: json:"feed_flow_2nd"
+	FeedFlow_2Nd float64 `protobuf:"fixed64,14,opt,name=feed_flow_2nd,json=feedFlow2nd,proto3" json:"feed_flow_2nd,omitempty"` // 二段进水流量
+	// gotags: json:"con_flow_2nd"
+	ConFlow_2Nd float64 `protobuf:"fixed64,15,opt,name=con_flow_2nd,json=conFlow2nd,proto3" json:"con_flow_2nd,omitempty"` // 二段浓水流量
+	// gotags: json:"product_flow_2nd"
+	ProductFlow_2Nd float64 `protobuf:"fixed64,16,opt,name=product_flow_2nd,json=productFlow2nd,proto3" json:"product_flow_2nd,omitempty"` // 二段产水流量
+	// gotags: json:"feed_pressure_2nd"
+	FeedPressure_2Nd float64 `protobuf:"fixed64,17,opt,name=feed_pressure_2nd,json=feedPressure2nd,proto3" json:"feed_pressure_2nd,omitempty"` // 二段进水压力
+	// gotags: json:"con_pressure_2nd"
+	ConPressure_2Nd float64 `protobuf:"fixed64,18,opt,name=con_pressure_2nd,json=conPressure2nd,proto3" json:"con_pressure_2nd,omitempty"` // 二段浓水压力
+	// gotags: json:"product_pressure_2nd"
+	ProductPressure_2Nd float64 `protobuf:"fixed64,19,opt,name=product_pressure_2nd,json=productPressure2nd,proto3" json:"product_pressure_2nd,omitempty"` // 二段产水压力
+	// gotags: json:"tmp_2nd"
+	Tmp_2Nd float64 `protobuf:"fixed64,20,opt,name=tmp_2nd,json=tmp2nd,proto3" json:"tmp_2nd,omitempty"` // 二段压差
+	// gotags: json:"flux_2nd"
+	Flux_2Nd float64 `protobuf:"fixed64,21,opt,name=flux_2nd,json=flux2nd,proto3" json:"flux_2nd,omitempty"` // 二段通量
+	// gotags: json:"permeability_2nd"
+	Permeability_2Nd float64 `protobuf:"fixed64,22,opt,name=permeability_2nd,json=permeability2nd,proto3" json:"permeability_2nd,omitempty"` // 二段渗透率
+	// gotags: json:"feed_flow_3th"
+	FeedFlow_3Th float64 `protobuf:"fixed64,23,opt,name=feed_flow_3th,json=feedFlow3th,proto3" json:"feed_flow_3th,omitempty"` // 三段进水流量
+	// gotags: json:"con_flow_3th"
+	ConFlow_3Th float64 `protobuf:"fixed64,24,opt,name=con_flow_3th,json=conFlow3th,proto3" json:"con_flow_3th,omitempty"` // 三段浓水流量
+	// gotags: json:"product_flow_3th"
+	ProductFlow_3Th float64 `protobuf:"fixed64,25,opt,name=product_flow_3th,json=productFlow3th,proto3" json:"product_flow_3th,omitempty"` // 三段产水流量
+	// gotags: json:"feed_pressure_3th"
+	FeedPressure_3Th float64 `protobuf:"fixed64,26,opt,name=feed_pressure_3th,json=feedPressure3th,proto3" json:"feed_pressure_3th,omitempty"` // 三段进水压力
+	// gotags: json:"con_pressure_3th"
+	ConPressure_3Th float64 `protobuf:"fixed64,27,opt,name=con_pressure_3th,json=conPressure3th,proto3" json:"con_pressure_3th,omitempty"` // 三段浓水压力
+	// gotags: json:"product_pressure_3th"
+	ProductPressure_3Th float64 `protobuf:"fixed64,28,opt,name=product_pressure_3th,json=productPressure3th,proto3" json:"product_pressure_3th,omitempty"` // 三段产水压力
+	// gotags: json:"tmp_3th"
+	Tmp_3Th float64 `protobuf:"fixed64,29,opt,name=tmp_3th,json=tmp3th,proto3" json:"tmp_3th,omitempty"` // 三段压差
+	// gotags: json:"flux_3th"
+	Flux_3Th float64 `protobuf:"fixed64,30,opt,name=flux_3th,json=flux3th,proto3" json:"flux_3th,omitempty"` // 三段通量
+	// gotags: json:"permeability_3th"
+	Permeability_3Th float64 `protobuf:"fixed64,31,opt,name=permeability_3th,json=permeability3th,proto3" json:"permeability_3th,omitempty"` // 三段渗透率
+	// gotags: json:"feed_wq_turbidity"
+	FeedWqTurbidity float64 `protobuf:"fixed64,32,opt,name=feed_wq_turbidity,json=feedWqTurbidity,proto3" json:"feed_wq_turbidity,omitempty"` // 进水浊度
+	// gotags: json:"feed_wq_ph"
+	FeedWqPh int64 `protobuf:"varint,33,opt,name=feed_wq_ph,json=feedWqPh,proto3" json:"feed_wq_ph,omitempty"` // 进水 PH 值
+	// gotags: json:"product_wq_ph"
+	ProductWqPh int64 `protobuf:"varint,34,opt,name=product_wq_ph,json=productWqPh,proto3" json:"product_wq_ph,omitempty"` // 产水 PH 值
+	// gotags: json:"feed_wq_al"
+	FeedWqAl float64 `protobuf:"fixed64,35,opt,name=feed_wq_al,json=feedWqAl,proto3" json:"feed_wq_al,omitempty"` // 进水水质:铝
+	// gotags: json:"product_wq_al"
+	ProductWqAl float64 `protobuf:"fixed64,36,opt,name=product_wq_al,json=productWqAl,proto3" json:"product_wq_al,omitempty"` // 产水水质:铝
+	// gotags: json:"feed_wq_fe"
+	FeedWqFe float64 `protobuf:"fixed64,37,opt,name=feed_wq_fe,json=feedWqFe,proto3" json:"feed_wq_fe,omitempty"` // 进水水质:铁
+	// gotags: json:"product_wq_fe"
+	ProductWqFe float64 `protobuf:"fixed64,38,opt,name=product_wq_fe,json=productWqFe,proto3" json:"product_wq_fe,omitempty"` // 产水水质:铁
+	// gotags: json:"feed_wq_mn"
+	FeedWqMn float64 `protobuf:"fixed64,39,opt,name=feed_wq_mn,json=feedWqMn,proto3" json:"feed_wq_mn,omitempty"` // 进水水质:锰
+	// gotags: json:"product_wq_mn"
+	ProductWqMn float64 `protobuf:"fixed64,40,opt,name=product_wq_mn,json=productWqMn,proto3" json:"product_wq_mn,omitempty"` // 产水水质:锰
+	// gotags: json:"feed_wq_sio2"
+	FeedWqSio2 float64 `protobuf:"fixed64,41,opt,name=feed_wq_sio2,json=feedWqSio2,proto3" json:"feed_wq_sio2,omitempty"` // 进水水质:二氧化硅
+	// gotags: json:"product_wq_sio2"
+	ProductWqSio2 float64 `protobuf:"fixed64,42,opt,name=product_wq_sio2,json=productWqSio2,proto3" json:"product_wq_sio2,omitempty"` // 产水水质:二氧化硅
+	// gotags: json:"feed_wq_cod"
+	FeedWqCod float64 `protobuf:"fixed64,43,opt,name=feed_wq_cod,json=feedWqCod,proto3" json:"feed_wq_cod,omitempty"` // 进水水质:COD
+	// gotags: json:"product_wq_cod"
+	ProductWqCod float64 `protobuf:"fixed64,44,opt,name=product_wq_cod,json=productWqCod,proto3" json:"product_wq_cod,omitempty"` // 产水水质:COD
+	// gotags: json:"feed_wq_p"
+	FeedWqP float64 `protobuf:"fixed64,45,opt,name=feed_wq_p,json=feedWqP,proto3" json:"feed_wq_p,omitempty"` // 进水水质:磷
+	// gotags: json:"product_wq_p"
+	ProductWqP float64 `protobuf:"fixed64,46,opt,name=product_wq_p,json=productWqP,proto3" json:"product_wq_p,omitempty"` // 产水水质:磷
+	// gotags: json:"step"
+	Step int64 `protobuf:"varint,47,opt,name=step,proto3" json:"step,omitempty"` // 设备当前步序值
+	// gotags: json:"c_time"
+	CTime string `protobuf:"bytes,48,opt,name=c_time,json=cTime,proto3" json:"c_time,omitempty"`
+}
+
+func (x *WorkingRo) Reset() {
+	*x = WorkingRo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WorkingRo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WorkingRo) ProtoMessage() {}
+
+func (x *WorkingRo) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WorkingRo.ProtoReflect.Descriptor instead.
+func (*WorkingRo) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *WorkingRo) GetId() int64 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetDeviceCode() string {
+	if x != nil {
+		return x.DeviceCode
+	}
+	return ""
+}
+
+func (x *WorkingRo) GetWaterTemperature() float64 {
+	if x != nil {
+		return x.WaterTemperature
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedFlow_1St() float64 {
+	if x != nil {
+		return x.FeedFlow_1St
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetConFlow_1St() float64 {
+	if x != nil {
+		return x.ConFlow_1St
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductFlow_1St() float64 {
+	if x != nil {
+		return x.ProductFlow_1St
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedPressure_1St() float64 {
+	if x != nil {
+		return x.FeedPressure_1St
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetConPressure_1St() float64 {
+	if x != nil {
+		return x.ConPressure_1St
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductPressure_1St() float64 {
+	if x != nil {
+		return x.ProductPressure_1St
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetTmp_1St() float64 {
+	if x != nil {
+		return x.Tmp_1St
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFlux_1St() float64 {
+	if x != nil {
+		return x.Flux_1St
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetPermeability_1St() float64 {
+	if x != nil {
+		return x.Permeability_1St
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedFlow_2Nd() float64 {
+	if x != nil {
+		return x.FeedFlow_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetConFlow_2Nd() float64 {
+	if x != nil {
+		return x.ConFlow_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductFlow_2Nd() float64 {
+	if x != nil {
+		return x.ProductFlow_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedPressure_2Nd() float64 {
+	if x != nil {
+		return x.FeedPressure_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetConPressure_2Nd() float64 {
+	if x != nil {
+		return x.ConPressure_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductPressure_2Nd() float64 {
+	if x != nil {
+		return x.ProductPressure_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetTmp_2Nd() float64 {
+	if x != nil {
+		return x.Tmp_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFlux_2Nd() float64 {
+	if x != nil {
+		return x.Flux_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetPermeability_2Nd() float64 {
+	if x != nil {
+		return x.Permeability_2Nd
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedFlow_3Th() float64 {
+	if x != nil {
+		return x.FeedFlow_3Th
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetConFlow_3Th() float64 {
+	if x != nil {
+		return x.ConFlow_3Th
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductFlow_3Th() float64 {
+	if x != nil {
+		return x.ProductFlow_3Th
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedPressure_3Th() float64 {
+	if x != nil {
+		return x.FeedPressure_3Th
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetConPressure_3Th() float64 {
+	if x != nil {
+		return x.ConPressure_3Th
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductPressure_3Th() float64 {
+	if x != nil {
+		return x.ProductPressure_3Th
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetTmp_3Th() float64 {
+	if x != nil {
+		return x.Tmp_3Th
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFlux_3Th() float64 {
+	if x != nil {
+		return x.Flux_3Th
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetPermeability_3Th() float64 {
+	if x != nil {
+		return x.Permeability_3Th
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedWqTurbidity() float64 {
+	if x != nil {
+		return x.FeedWqTurbidity
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedWqPh() int64 {
+	if x != nil {
+		return x.FeedWqPh
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductWqPh() int64 {
+	if x != nil {
+		return x.ProductWqPh
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedWqAl() float64 {
+	if x != nil {
+		return x.FeedWqAl
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductWqAl() float64 {
+	if x != nil {
+		return x.ProductWqAl
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedWqFe() float64 {
+	if x != nil {
+		return x.FeedWqFe
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductWqFe() float64 {
+	if x != nil {
+		return x.ProductWqFe
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedWqMn() float64 {
+	if x != nil {
+		return x.FeedWqMn
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductWqMn() float64 {
+	if x != nil {
+		return x.ProductWqMn
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedWqSio2() float64 {
+	if x != nil {
+		return x.FeedWqSio2
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductWqSio2() float64 {
+	if x != nil {
+		return x.ProductWqSio2
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedWqCod() float64 {
+	if x != nil {
+		return x.FeedWqCod
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductWqCod() float64 {
+	if x != nil {
+		return x.ProductWqCod
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetFeedWqP() float64 {
+	if x != nil {
+		return x.FeedWqP
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetProductWqP() float64 {
+	if x != nil {
+		return x.ProductWqP
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetStep() int64 {
+	if x != nil {
+		return x.Step
+	}
+	return 0
+}
+
+func (x *WorkingRo) GetCTime() string {
+	if x != nil {
+		return x.CTime
+	}
+	return ""
+}
+
+type WorkingChest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"id"
+	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	// @gotags: json:"project_id"
+	ProjectId int64 `protobuf:"varint,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	// @gotags: json:"device_code"
+	DeviceCode string `protobuf:"bytes,3,opt,name=device_code,json=deviceCode,proto3" json:"device_code,omitempty"`
+	// @gotags: json:"switch"
+	Switch int64 `protobuf:"varint,4,opt,name=switch,proto3" json:"switch,omitempty"` // 药箱液位开关 0: 关 1: 开
+	// @gotags: json:"level"
+	Level float64 `protobuf:"fixed64,5,opt,name=level,proto3" json:"level,omitempty"` // 液位高度
+	// @gotags: json:"agitator_status"
+	AgitatorStatus int64 `protobuf:"varint,6,opt,name=agitator_status,json=agitatorStatus,proto3" json:"agitator_status,omitempty"` // 搅拌器运行状态 0: 未运行 1:运行中
+	// @gotags: json:"agitator_duration"
+	AgitatorDuration int64 `protobuf:"varint,7,opt,name=agitator_duration,json=agitatorDuration,proto3" json:"agitator_duration,omitempty"` // 搅拌器运行时长
+	// @gotags: json:"agitator_fault_status"
+	AgitatorFaultStatus int64 `protobuf:"varint,8,opt,name=agitator_fault_status,json=agitatorFaultStatus,proto3" json:"agitator_fault_status,omitempty"` // 搅拌器故障状态 0:正常 1:故障
+	// @gotags: json:"c_time"
+	CTime string `protobuf:"bytes,9,opt,name=c_time,json=cTime,proto3" json:"c_time,omitempty"`
+}
+
+func (x *WorkingChest) Reset() {
+	*x = WorkingChest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WorkingChest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WorkingChest) ProtoMessage() {}
+
+func (x *WorkingChest) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[11]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WorkingChest.ProtoReflect.Descriptor instead.
+func (*WorkingChest) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *WorkingChest) GetId() int64 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *WorkingChest) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *WorkingChest) GetDeviceCode() string {
+	if x != nil {
+		return x.DeviceCode
+	}
+	return ""
+}
+
+func (x *WorkingChest) GetSwitch() int64 {
+	if x != nil {
+		return x.Switch
+	}
+	return 0
+}
+
+func (x *WorkingChest) GetLevel() float64 {
+	if x != nil {
+		return x.Level
+	}
+	return 0
+}
+
+func (x *WorkingChest) GetAgitatorStatus() int64 {
+	if x != nil {
+		return x.AgitatorStatus
+	}
+	return 0
+}
+
+func (x *WorkingChest) GetAgitatorDuration() int64 {
+	if x != nil {
+		return x.AgitatorDuration
+	}
+	return 0
+}
+
+func (x *WorkingChest) GetAgitatorFaultStatus() int64 {
+	if x != nil {
+		return x.AgitatorFaultStatus
+	}
+	return 0
+}
+
+func (x *WorkingChest) GetCTime() string {
+	if x != nil {
+		return x.CTime
+	}
+	return ""
+}
+
+type WorkingPump struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"id"
+	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	// @gotags: json:"project_id"
+	ProjectId int64 `protobuf:"varint,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	// @gotags: json:"device_code"
+	DeviceCode string `protobuf:"bytes,3,opt,name=device_code,json=deviceCode,proto3" json:"device_code,omitempty"`
+	// @gotags: json:"feed_pressure"
+	FeedPressure float64 `protobuf:"fixed64,4,opt,name=feed_pressure,json=feedPressure,proto3" json:"feed_pressure,omitempty"` // 进水压力
+	// @gotags: json:"out_pressure"
+	OutPressure float64 `protobuf:"fixed64,5,opt,name=out_pressure,json=outPressure,proto3" json:"out_pressure,omitempty"` // 出水压力
+	// @gotags: json:"duration"
+	Duration int64 `protobuf:"varint,6,opt,name=duration,proto3" json:"duration,omitempty"` // 运行时长 单位 s
+	// @gotags: json:"current"
+	Current float64 `protobuf:"fixed64,7,opt,name=current,proto3" json:"current,omitempty"` // 运行电流
+	// @gotags: json:"frequency"
+	Frequency float64 `protobuf:"fixed64,8,opt,name=frequency,proto3" json:"frequency,omitempty"` // 运行频率
+	// @gotags: json:"lift"
+	Lift float64 `protobuf:"fixed64,9,opt,name=lift,proto3" json:"lift,omitempty"` // 工作扬程
+	// @gotags: json:"efficiency"
+	Efficiency float64 `protobuf:"fixed64,10,opt,name=efficiency,proto3" json:"efficiency,omitempty"` // 运行效率
+	// @gotags: json:"run_status"
+	RunStatus int64 `protobuf:"varint,11,opt,name=run_status,json=runStatus,proto3" json:"run_status,omitempty"` // 运行状态 0: 停机 1: 运行正常
+	// @gotags: json:"fault_status"
+	FaultStatus int64 `protobuf:"varint,12,opt,name=fault_status,json=faultStatus,proto3" json:"fault_status,omitempty"` // 故障状态 0: 正常 1: 故障
+	// @gotags: json:"c_time"
+	CTime string `protobuf:"bytes,13,opt,name=c_time,json=cTime,proto3" json:"c_time,omitempty"`
+}
+
+func (x *WorkingPump) Reset() {
+	*x = WorkingPump{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WorkingPump) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WorkingPump) ProtoMessage() {}
+
+func (x *WorkingPump) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[12]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WorkingPump.ProtoReflect.Descriptor instead.
+func (*WorkingPump) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *WorkingPump) GetId() int64 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *WorkingPump) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *WorkingPump) GetDeviceCode() string {
+	if x != nil {
+		return x.DeviceCode
+	}
+	return ""
+}
+
+func (x *WorkingPump) GetFeedPressure() float64 {
+	if x != nil {
+		return x.FeedPressure
+	}
+	return 0
+}
+
+func (x *WorkingPump) GetOutPressure() float64 {
+	if x != nil {
+		return x.OutPressure
+	}
+	return 0
+}
+
+func (x *WorkingPump) GetDuration() int64 {
+	if x != nil {
+		return x.Duration
+	}
+	return 0
+}
+
+func (x *WorkingPump) GetCurrent() float64 {
+	if x != nil {
+		return x.Current
+	}
+	return 0
+}
+
+func (x *WorkingPump) GetFrequency() float64 {
+	if x != nil {
+		return x.Frequency
+	}
+	return 0
+}
+
+func (x *WorkingPump) GetLift() float64 {
+	if x != nil {
+		return x.Lift
+	}
+	return 0
+}
+
+func (x *WorkingPump) GetEfficiency() float64 {
+	if x != nil {
+		return x.Efficiency
+	}
+	return 0
+}
+
+func (x *WorkingPump) GetRunStatus() int64 {
+	if x != nil {
+		return x.RunStatus
+	}
+	return 0
+}
+
+func (x *WorkingPump) GetFaultStatus() int64 {
+	if x != nil {
+		return x.FaultStatus
+	}
+	return 0
+}
+
+func (x *WorkingPump) GetCTime() string {
+	if x != nil {
+		return x.CTime
+	}
+	return ""
+}
+
+type WorkingValve struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"id"
+	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	// @gotags: json:"project_id"
+	ProjectId int64 `protobuf:"varint,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	// @gotags: json:"device_code"
+	DeviceCode string `protobuf:"bytes,3,opt,name=device_code,json=deviceCode,proto3" json:"device_code,omitempty"`
+	// @gotags: json:"adjust"
+	Adjust int64 `protobuf:"varint,4,opt,name=adjust,proto3" json:"adjust,omitempty"` // 是否为调节阀门 0: 否 1: 是
+	// @gotags: json:"opening"
+	Opening float64 `protobuf:"fixed64,5,opt,name=opening,proto3" json:"opening,omitempty"` // 当前阀门的开度
+	// @gotags: json:"closed"
+	Closed int64 `protobuf:"varint,6,opt,name=closed,proto3" json:"closed,omitempty"` // 关到位 全关  0: 否 1: 是
+	// @gotags: json:"opened"
+	Opened int64 `protobuf:"varint,7,opt,name=opened,proto3" json:"opened,omitempty"` // 开到位 开到 设置的开度 0: 否 1: 是
+	// @gotags: json:"fault_status"
+	FaultStatus int64 `protobuf:"varint,8,opt,name=fault_status,json=faultStatus,proto3" json:"fault_status,omitempty"` // 是否故障 0: 否 1: 是
+	// @gotags: json:"c_time"
+	CTime string `protobuf:"bytes,9,opt,name=c_time,json=cTime,proto3" json:"c_time,omitempty"`
+}
+
+func (x *WorkingValve) Reset() {
+	*x = WorkingValve{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WorkingValve) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WorkingValve) ProtoMessage() {}
+
+func (x *WorkingValve) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[13]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WorkingValve.ProtoReflect.Descriptor instead.
+func (*WorkingValve) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *WorkingValve) GetId() int64 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *WorkingValve) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *WorkingValve) GetDeviceCode() string {
+	if x != nil {
+		return x.DeviceCode
+	}
+	return ""
+}
+
+func (x *WorkingValve) GetAdjust() int64 {
+	if x != nil {
+		return x.Adjust
+	}
+	return 0
+}
+
+func (x *WorkingValve) GetOpening() float64 {
+	if x != nil {
+		return x.Opening
+	}
+	return 0
+}
+
+func (x *WorkingValve) GetClosed() int64 {
+	if x != nil {
+		return x.Closed
+	}
+	return 0
+}
+
+func (x *WorkingValve) GetOpened() int64 {
+	if x != nil {
+		return x.Opened
+	}
+	return 0
+}
+
+func (x *WorkingValve) GetFaultStatus() int64 {
+	if x != nil {
+		return x.FaultStatus
+	}
+	return 0
+}
+
+func (x *WorkingValve) GetCTime() string {
+	if x != nil {
+		return x.CTime
+	}
+	return ""
+}
+
+type ItemHistoryData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"project_id"
+	ProjectId int64 `protobuf:"varint,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	// @gotags: json:"item_name"
+	ItemName string `protobuf:"bytes,2,opt,name=item_name,json=itemName,proto3" json:"item_name,omitempty"`
+	// @gotags: json:"val"
+	Val float64 `protobuf:"fixed64,3,opt,name=val,proto3" json:"val,omitempty"`
+	// @gotags: json:"h_time"
+	HTime string `protobuf:"bytes,4,opt,name=h_time,json=hTime,proto3" json:"h_time,omitempty"`
+}
+
+func (x *ItemHistoryData) Reset() {
+	*x = ItemHistoryData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ItemHistoryData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ItemHistoryData) ProtoMessage() {}
+
+func (x *ItemHistoryData) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[14]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ItemHistoryData.ProtoReflect.Descriptor instead.
+func (*ItemHistoryData) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *ItemHistoryData) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *ItemHistoryData) GetItemName() string {
+	if x != nil {
+		return x.ItemName
+	}
+	return ""
+}
+
+func (x *ItemHistoryData) GetVal() float64 {
+	if x != nil {
+		return x.Val
+	}
+	return 0
+}
+
+func (x *ItemHistoryData) GetHTime() string {
+	if x != nil {
+		return x.HTime
+	}
+	return ""
+}
+
+type MultiAddItemHistoryDataReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"project_id"
+	ProjectId int64 `protobuf:"varint,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	// @gotags: json:"list"
+	List []*ItemHistoryData `protobuf:"bytes,2,rep,name=list,proto3" json:"list,omitempty"`
+}
+
+func (x *MultiAddItemHistoryDataReq) Reset() {
+	*x = MultiAddItemHistoryDataReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *MultiAddItemHistoryDataReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MultiAddItemHistoryDataReq) ProtoMessage() {}
+
+func (x *MultiAddItemHistoryDataReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[15]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use MultiAddItemHistoryDataReq.ProtoReflect.Descriptor instead.
+func (*MultiAddItemHistoryDataReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *MultiAddItemHistoryDataReq) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *MultiAddItemHistoryDataReq) GetList() []*ItemHistoryData {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type MultiAddItemHistoryDataResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *MultiAddItemHistoryDataResp) Reset() {
+	*x = MultiAddItemHistoryDataResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *MultiAddItemHistoryDataResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MultiAddItemHistoryDataResp) ProtoMessage() {}
+
+func (x *MultiAddItemHistoryDataResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use MultiAddItemHistoryDataResp.ProtoReflect.Descriptor instead.
+func (*MultiAddItemHistoryDataResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{16}
+}
+
+type ItemHistoryDataListReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"project_id"
+	ProjectId int64 `protobuf:"varint,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	// @gotags: json:"item_name"
+	ItemName string `protobuf:"bytes,2,opt,name=item_name,json=itemName,proto3" json:"item_name,omitempty"`
+	// @gotags: json:"interval"
+	Interval string `protobuf:"bytes,3,opt,name=interval,proto3" json:"interval,omitempty"` //时间单位 s,minute,h,day
+	// @gotags: json:"aggregator"
+	Aggregator string `protobuf:"bytes,4,opt,name=aggregator,proto3" json:"aggregator,omitempty"` //聚合方式 min,max,avg,sum,realtime, new
+	// @gotags: json:"stime"
+	Stime string `protobuf:"bytes,5,opt,name=stime,proto3" json:"stime,omitempty"`
+	// @gotags: json:"etime"
+	Etime string `protobuf:"bytes,6,opt,name=etime,proto3" json:"etime,omitempty"`
+	// @gotags: json:"size"
+	Size int64 `protobuf:"varint,7,opt,name=size,proto3" json:"size,omitempty"`
+	// @gotags: json:"order"
+	Order string `protobuf:"bytes,8,opt,name=order,proto3" json:"order,omitempty"`
+}
+
+func (x *ItemHistoryDataListReq) Reset() {
+	*x = ItemHistoryDataListReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ItemHistoryDataListReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ItemHistoryDataListReq) ProtoMessage() {}
+
+func (x *ItemHistoryDataListReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ItemHistoryDataListReq.ProtoReflect.Descriptor instead.
+func (*ItemHistoryDataListReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *ItemHistoryDataListReq) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *ItemHistoryDataListReq) GetItemName() string {
+	if x != nil {
+		return x.ItemName
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataListReq) GetInterval() string {
+	if x != nil {
+		return x.Interval
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataListReq) GetAggregator() string {
+	if x != nil {
+		return x.Aggregator
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataListReq) GetStime() string {
+	if x != nil {
+		return x.Stime
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataListReq) GetEtime() string {
+	if x != nil {
+		return x.Etime
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataListReq) GetSize() int64 {
+	if x != nil {
+		return x.Size
+	}
+	return 0
+}
+
+func (x *ItemHistoryDataListReq) GetOrder() string {
+	if x != nil {
+		return x.Order
+	}
+	return ""
+}
+
+type ItemHistoryDataByTimeReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"project_id"
+	ProjectId int64 `protobuf:"varint,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	// @gotags: json:"item_name"
+	ItemName string `protobuf:"bytes,2,opt,name=item_name,json=itemName,proto3" json:"item_name,omitempty"`
+	// @gotags: json:"stime"
+	Stime string `protobuf:"bytes,3,opt,name=stime,proto3" json:"stime,omitempty"`
+	// @gotags: json:"etime"
+	Etime string `protobuf:"bytes,4,opt,name=etime,proto3" json:"etime,omitempty"`
+	// @gotags: json:"order"
+	Order string `protobuf:"bytes,5,opt,name=order,proto3" json:"order,omitempty"`
+}
+
+func (x *ItemHistoryDataByTimeReq) Reset() {
+	*x = ItemHistoryDataByTimeReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ItemHistoryDataByTimeReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ItemHistoryDataByTimeReq) ProtoMessage() {}
+
+func (x *ItemHistoryDataByTimeReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[18]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ItemHistoryDataByTimeReq.ProtoReflect.Descriptor instead.
+func (*ItemHistoryDataByTimeReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *ItemHistoryDataByTimeReq) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *ItemHistoryDataByTimeReq) GetItemName() string {
+	if x != nil {
+		return x.ItemName
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataByTimeReq) GetStime() string {
+	if x != nil {
+		return x.Stime
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataByTimeReq) GetEtime() string {
+	if x != nil {
+		return x.Etime
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataByTimeReq) GetOrder() string {
+	if x != nil {
+		return x.Order
+	}
+	return ""
+}
+
+type ItemHistoryDataMaxMinResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"max_val"
+	MaxVal float64 `protobuf:"fixed64,1,opt,name=max_val,json=maxVal,proto3" json:"max_val,omitempty"`
+	// @gotags: json:"min_val"
+	MinVal float64 `protobuf:"fixed64,2,opt,name=min_val,json=minVal,proto3" json:"min_val,omitempty"`
+	// @gotags: json:"avg_val"
+	AvgVal float64 `protobuf:"fixed64,3,opt,name=avg_val,json=avgVal,proto3" json:"avg_val,omitempty"`
+}
+
+func (x *ItemHistoryDataMaxMinResp) Reset() {
+	*x = ItemHistoryDataMaxMinResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ItemHistoryDataMaxMinResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ItemHistoryDataMaxMinResp) ProtoMessage() {}
+
+func (x *ItemHistoryDataMaxMinResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ItemHistoryDataMaxMinResp.ProtoReflect.Descriptor instead.
+func (*ItemHistoryDataMaxMinResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *ItemHistoryDataMaxMinResp) GetMaxVal() float64 {
+	if x != nil {
+		return x.MaxVal
+	}
+	return 0
+}
+
+func (x *ItemHistoryDataMaxMinResp) GetMinVal() float64 {
+	if x != nil {
+		return x.MinVal
+	}
+	return 0
+}
+
+func (x *ItemHistoryDataMaxMinResp) GetAvgVal() float64 {
+	if x != nil {
+		return x.AvgVal
+	}
+	return 0
+}
+
+type ItemHistoryDataFirstLastResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"first"
+	First float64 `protobuf:"fixed64,1,opt,name=first,proto3" json:"first,omitempty"`
+	// @gotags: json:"last"
+	Last float64 `protobuf:"fixed64,2,opt,name=last,proto3" json:"last,omitempty"`
+}
+
+func (x *ItemHistoryDataFirstLastResp) Reset() {
+	*x = ItemHistoryDataFirstLastResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ItemHistoryDataFirstLastResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ItemHistoryDataFirstLastResp) ProtoMessage() {}
+
+func (x *ItemHistoryDataFirstLastResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[20]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ItemHistoryDataFirstLastResp.ProtoReflect.Descriptor instead.
+func (*ItemHistoryDataFirstLastResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *ItemHistoryDataFirstLastResp) GetFirst() float64 {
+	if x != nil {
+		return x.First
+	}
+	return 0
+}
+
+func (x *ItemHistoryDataFirstLastResp) GetLast() float64 {
+	if x != nil {
+		return x.Last
+	}
+	return 0
+}
+
+type ChangeTypeItemHistoryDataResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"value"
+	Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *ChangeTypeItemHistoryDataResp) Reset() {
+	*x = ChangeTypeItemHistoryDataResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ChangeTypeItemHistoryDataResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChangeTypeItemHistoryDataResp) ProtoMessage() {}
+
+func (x *ChangeTypeItemHistoryDataResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[21]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChangeTypeItemHistoryDataResp.ProtoReflect.Descriptor instead.
+func (*ChangeTypeItemHistoryDataResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *ChangeTypeItemHistoryDataResp) GetValue() float64 {
+	if x != nil {
+		return x.Value
+	}
+	return 0
+}
+
+type ItemHistoryDataList struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"item_name"
+	ItemName string `protobuf:"bytes,1,opt,name=item_name,json=itemName,proto3" json:"item_name,omitempty"`
+	// @gotags: json:"val"
+	Val float64 `protobuf:"fixed64,2,opt,name=val,proto3" json:"val,omitempty"`
+	// @gotags: json:"h_time"
+	HTime string `protobuf:"bytes,3,opt,name=h_time,json=hTime,proto3" json:"h_time,omitempty"`
+}
+
+func (x *ItemHistoryDataList) Reset() {
+	*x = ItemHistoryDataList{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ItemHistoryDataList) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ItemHistoryDataList) ProtoMessage() {}
+
+func (x *ItemHistoryDataList) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[22]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ItemHistoryDataList.ProtoReflect.Descriptor instead.
+func (*ItemHistoryDataList) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *ItemHistoryDataList) GetItemName() string {
+	if x != nil {
+		return x.ItemName
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataList) GetVal() float64 {
+	if x != nil {
+		return x.Val
+	}
+	return 0
+}
+
+func (x *ItemHistoryDataList) GetHTime() string {
+	if x != nil {
+		return x.HTime
+	}
+	return ""
+}
+
+type ItemHistoryDataForChart struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"name"
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// @gotags: json:"val"
+	Val float64 `protobuf:"fixed64,2,opt,name=val,proto3" json:"val,omitempty"`
+	// @gotags: json:"htime_at"
+	HtimeAt string `protobuf:"bytes,3,opt,name=htime_at,json=htimeAt,proto3" json:"htime_at,omitempty"`
+}
+
+func (x *ItemHistoryDataForChart) Reset() {
+	*x = ItemHistoryDataForChart{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ItemHistoryDataForChart) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ItemHistoryDataForChart) ProtoMessage() {}
+
+func (x *ItemHistoryDataForChart) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[23]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ItemHistoryDataForChart.ProtoReflect.Descriptor instead.
+func (*ItemHistoryDataForChart) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{23}
+}
+
+func (x *ItemHistoryDataForChart) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataForChart) GetVal() float64 {
+	if x != nil {
+		return x.Val
+	}
+	return 0
+}
+
+func (x *ItemHistoryDataForChart) GetHtimeAt() string {
+	if x != nil {
+		return x.HtimeAt
+	}
+	return ""
+}
+
+type ItemHistoryDataForChartReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"project_id"
+	ProjectId int64 `protobuf:"varint,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	// @gotags: json:"item_name"
+	ItemName string `protobuf:"bytes,2,opt,name=item_name,json=itemName,proto3" json:"item_name,omitempty"`
+	// @gotags: json:"stime"
+	Stime string `protobuf:"bytes,3,opt,name=stime,proto3" json:"stime,omitempty"`
+	// @gotags: json:"etime"
+	Etime string `protobuf:"bytes,4,opt,name=etime,proto3" json:"etime,omitempty"`
+	// @gotags: json:"interval"
+	Interval string `protobuf:"bytes,5,opt,name=interval,proto3" json:"interval,omitempty"`
+	// @gotags: json:"size"
+	Size int64 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"`
+	// @gotags: json:"aggregator"
+	Aggregator string `protobuf:"bytes,7,opt,name=aggregator,proto3" json:"aggregator,omitempty"`
+	// @gotags: json:"order"
+	Order string `protobuf:"bytes,8,opt,name=order,proto3" json:"order,omitempty"`
+	// @gotags: json:"max_val"
+	MaxVal float64 `protobuf:"fixed64,9,opt,name=max_val,json=maxVal,proto3" json:"max_val,omitempty"`
+	// @gotags: json:"min_val"
+	MinVal float64 `protobuf:"fixed64,10,opt,name=min_val,json=minVal,proto3" json:"min_val,omitempty"`
+}
+
+func (x *ItemHistoryDataForChartReq) Reset() {
+	*x = ItemHistoryDataForChartReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ItemHistoryDataForChartReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ItemHistoryDataForChartReq) ProtoMessage() {}
+
+func (x *ItemHistoryDataForChartReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[24]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ItemHistoryDataForChartReq.ProtoReflect.Descriptor instead.
+func (*ItemHistoryDataForChartReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{24}
+}
+
+func (x *ItemHistoryDataForChartReq) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *ItemHistoryDataForChartReq) GetItemName() string {
+	if x != nil {
+		return x.ItemName
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataForChartReq) GetStime() string {
+	if x != nil {
+		return x.Stime
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataForChartReq) GetEtime() string {
+	if x != nil {
+		return x.Etime
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataForChartReq) GetInterval() string {
+	if x != nil {
+		return x.Interval
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataForChartReq) GetSize() int64 {
+	if x != nil {
+		return x.Size
+	}
+	return 0
+}
+
+func (x *ItemHistoryDataForChartReq) GetAggregator() string {
+	if x != nil {
+		return x.Aggregator
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataForChartReq) GetOrder() string {
+	if x != nil {
+		return x.Order
+	}
+	return ""
+}
+
+func (x *ItemHistoryDataForChartReq) GetMaxVal() float64 {
+	if x != nil {
+		return x.MaxVal
+	}
+	return 0
+}
+
+func (x *ItemHistoryDataForChartReq) GetMinVal() float64 {
+	if x != nil {
+		return x.MinVal
+	}
+	return 0
+}
+
+type ItemHistoryDataForChartResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"list"
+	List []*ItemHistoryDataForChart `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
+}
+
+func (x *ItemHistoryDataForChartResp) Reset() {
+	*x = ItemHistoryDataForChartResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ItemHistoryDataForChartResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ItemHistoryDataForChartResp) ProtoMessage() {}
+
+func (x *ItemHistoryDataForChartResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[25]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ItemHistoryDataForChartResp.ProtoReflect.Descriptor instead.
+func (*ItemHistoryDataForChartResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{25}
+}
+
+func (x *ItemHistoryDataForChartResp) GetList() []*ItemHistoryDataForChart {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type ItemHistoryDataListResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"list"
+	List []*ItemHistoryDataList `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
+}
+
+func (x *ItemHistoryDataListResp) Reset() {
+	*x = ItemHistoryDataListResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ItemHistoryDataListResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ItemHistoryDataListResp) ProtoMessage() {}
+
+func (x *ItemHistoryDataListResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[26]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ItemHistoryDataListResp.ProtoReflect.Descriptor instead.
+func (*ItemHistoryDataListResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{26}
+}
+
+func (x *ItemHistoryDataListResp) GetList() []*ItemHistoryDataList {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type GetWorkingUfByCodeResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"list"
+	List []*WorkingUf `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
+}
+
+func (x *GetWorkingUfByCodeResp) Reset() {
+	*x = GetWorkingUfByCodeResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetWorkingUfByCodeResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetWorkingUfByCodeResp) ProtoMessage() {}
+
+func (x *GetWorkingUfByCodeResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[27]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetWorkingUfByCodeResp.ProtoReflect.Descriptor instead.
+func (*GetWorkingUfByCodeResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{27}
+}
+
+func (x *GetWorkingUfByCodeResp) GetList() []*WorkingUf {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type FindWorkingUfByCycleReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ProjectId       int64   `protobuf:"varint,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	DeviceCode      string  `protobuf:"bytes,2,opt,name=device_code,json=deviceCode,proto3" json:"device_code,omitempty"`
+	FilterCycle     int64   `protobuf:"varint,3,opt,name=filter_cycle,json=filterCycle,proto3" json:"filter_cycle,omitempty"`
+	Step            int64   `protobuf:"varint,4,opt,name=step,proto3" json:"step,omitempty"`
+	FilterTimeStart float64 `protobuf:"fixed64,5,opt,name=filter_time_start,json=filterTimeStart,proto3" json:"filter_time_start,omitempty"`
+	FilterTimeEnd   float64 `protobuf:"fixed64,6,opt,name=filter_time_end,json=filterTimeEnd,proto3" json:"filter_time_end,omitempty"`
+	Limit           int64   `protobuf:"varint,7,opt,name=limit,proto3" json:"limit,omitempty"`
+}
+
+func (x *FindWorkingUfByCycleReq) Reset() {
+	*x = FindWorkingUfByCycleReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FindWorkingUfByCycleReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindWorkingUfByCycleReq) ProtoMessage() {}
+
+func (x *FindWorkingUfByCycleReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[28]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindWorkingUfByCycleReq.ProtoReflect.Descriptor instead.
+func (*FindWorkingUfByCycleReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{28}
+}
+
+func (x *FindWorkingUfByCycleReq) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *FindWorkingUfByCycleReq) GetDeviceCode() string {
+	if x != nil {
+		return x.DeviceCode
+	}
+	return ""
+}
+
+func (x *FindWorkingUfByCycleReq) GetFilterCycle() int64 {
+	if x != nil {
+		return x.FilterCycle
+	}
+	return 0
+}
+
+func (x *FindWorkingUfByCycleReq) GetStep() int64 {
+	if x != nil {
+		return x.Step
+	}
+	return 0
+}
+
+func (x *FindWorkingUfByCycleReq) GetFilterTimeStart() float64 {
+	if x != nil {
+		return x.FilterTimeStart
+	}
+	return 0
+}
+
+func (x *FindWorkingUfByCycleReq) GetFilterTimeEnd() float64 {
+	if x != nil {
+		return x.FilterTimeEnd
+	}
+	return 0
+}
+
+func (x *FindWorkingUfByCycleReq) GetLimit() int64 {
+	if x != nil {
+		return x.Limit
+	}
+	return 0
+}
+
+type FindWorkingUfByCycleResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"list"
+	List []*WorkingUf `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
+}
+
+func (x *FindWorkingUfByCycleResp) Reset() {
+	*x = FindWorkingUfByCycleResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FindWorkingUfByCycleResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindWorkingUfByCycleResp) ProtoMessage() {}
+
+func (x *FindWorkingUfByCycleResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[29]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindWorkingUfByCycleResp.ProtoReflect.Descriptor instead.
+func (*FindWorkingUfByCycleResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{29}
+}
+
+func (x *FindWorkingUfByCycleResp) GetList() []*WorkingUf {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type GetWorkingRoByCodeResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"list"
+	List []*WorkingRo `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
+}
+
+func (x *GetWorkingRoByCodeResp) Reset() {
+	*x = GetWorkingRoByCodeResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetWorkingRoByCodeResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetWorkingRoByCodeResp) ProtoMessage() {}
+
+func (x *GetWorkingRoByCodeResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[30]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetWorkingRoByCodeResp.ProtoReflect.Descriptor instead.
+func (*GetWorkingRoByCodeResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{30}
+}
+
+func (x *GetWorkingRoByCodeResp) GetList() []*WorkingRo {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type GetWorkingNfByCodeResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"list"
+	List []*WorkingNf `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
+}
+
+func (x *GetWorkingNfByCodeResp) Reset() {
+	*x = GetWorkingNfByCodeResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetWorkingNfByCodeResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetWorkingNfByCodeResp) ProtoMessage() {}
+
+func (x *GetWorkingNfByCodeResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[31]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetWorkingNfByCodeResp.ProtoReflect.Descriptor instead.
+func (*GetWorkingNfByCodeResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{31}
+}
+
+func (x *GetWorkingNfByCodeResp) GetList() []*WorkingNf {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type GetWorkingMfByCodeResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"list"
+	List []*WorkingMf `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
+}
+
+func (x *GetWorkingMfByCodeResp) Reset() {
+	*x = GetWorkingMfByCodeResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetWorkingMfByCodeResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetWorkingMfByCodeResp) ProtoMessage() {}
+
+func (x *GetWorkingMfByCodeResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[32]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetWorkingMfByCodeResp.ProtoReflect.Descriptor instead.
+func (*GetWorkingMfByCodeResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{32}
+}
+
+func (x *GetWorkingMfByCodeResp) GetList() []*WorkingMf {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type GetWorkingPumpByCodeResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"list"
+	List []*WorkingPump `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
+}
+
+func (x *GetWorkingPumpByCodeResp) Reset() {
+	*x = GetWorkingPumpByCodeResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetWorkingPumpByCodeResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetWorkingPumpByCodeResp) ProtoMessage() {}
+
+func (x *GetWorkingPumpByCodeResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[33]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetWorkingPumpByCodeResp.ProtoReflect.Descriptor instead.
+func (*GetWorkingPumpByCodeResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{33}
+}
+
+func (x *GetWorkingPumpByCodeResp) GetList() []*WorkingPump {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type GetWorkingValveByCodeResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"list"
+	List []*WorkingValve `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
+}
+
+func (x *GetWorkingValveByCodeResp) Reset() {
+	*x = GetWorkingValveByCodeResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetWorkingValveByCodeResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetWorkingValveByCodeResp) ProtoMessage() {}
+
+func (x *GetWorkingValveByCodeResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[34]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetWorkingValveByCodeResp.ProtoReflect.Descriptor instead.
+func (*GetWorkingValveByCodeResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{34}
+}
+
+func (x *GetWorkingValveByCodeResp) GetList() []*WorkingValve {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type GetWorkingChestByCodeResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// @gotags: json:"list"
+	List []*WorkingChest `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
+}
+
+func (x *GetWorkingChestByCodeResp) Reset() {
+	*x = GetWorkingChestByCodeResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetWorkingChestByCodeResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetWorkingChestByCodeResp) ProtoMessage() {}
+
+func (x *GetWorkingChestByCodeResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[35]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetWorkingChestByCodeResp.ProtoReflect.Descriptor instead.
+func (*GetWorkingChestByCodeResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{35}
+}
+
+func (x *GetWorkingChestByCodeResp) GetList() []*WorkingChest {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type FindAppListReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Page     int64  `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"`
+	PageSize int64  `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	Order    string `protobuf:"bytes,3,opt,name=order,proto3" json:"order,omitempty"` // 排序字段及方向 例: id desc
+}
+
+func (x *FindAppListReq) Reset() {
+	*x = FindAppListReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FindAppListReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindAppListReq) ProtoMessage() {}
+
+func (x *FindAppListReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[36]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindAppListReq.ProtoReflect.Descriptor instead.
+func (*FindAppListReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{36}
+}
+
+func (x *FindAppListReq) GetPage() int64 {
+	if x != nil {
+		return x.Page
+	}
+	return 0
+}
+
+func (x *FindAppListReq) GetPageSize() int64 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *FindAppListReq) GetOrder() string {
+	if x != nil {
+		return x.Order
+	}
+	return ""
+}
+
+type FindAppListResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	List       []*AppInfo  `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
+	Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"`
+}
+
+func (x *FindAppListResp) Reset() {
+	*x = FindAppListResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[37]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FindAppListResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindAppListResp) ProtoMessage() {}
+
+func (x *FindAppListResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[37]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindAppListResp.ProtoReflect.Descriptor instead.
+func (*FindAppListResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{37}
+}
+
+func (x *FindAppListResp) GetList() []*AppInfo {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+func (x *FindAppListResp) GetPagination() *Pagination {
+	if x != nil {
+		return x.Pagination
+	}
+	return nil
+}
+
+type GetAppInfoReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppName string `protobuf:"bytes,1,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"`
+}
+
+func (x *GetAppInfoReq) Reset() {
+	*x = GetAppInfoReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[38]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetAppInfoReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetAppInfoReq) ProtoMessage() {}
+
+func (x *GetAppInfoReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[38]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetAppInfoReq.ProtoReflect.Descriptor instead.
+func (*GetAppInfoReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{38}
+}
+
+func (x *GetAppInfoReq) GetAppName() string {
+	if x != nil {
+		return x.AppName
+	}
+	return ""
+}
+
+type GetAppInfoResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppInfo *AppInfo `protobuf:"bytes,1,opt,name=app_info,json=appInfo,proto3" json:"app_info,omitempty"`
+}
+
+func (x *GetAppInfoResp) Reset() {
+	*x = GetAppInfoResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetAppInfoResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetAppInfoResp) ProtoMessage() {}
+
+func (x *GetAppInfoResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[39]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetAppInfoResp.ProtoReflect.Descriptor instead.
+func (*GetAppInfoResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{39}
+}
+
+func (x *GetAppInfoResp) GetAppInfo() *AppInfo {
+	if x != nil {
+		return x.AppInfo
+	}
+	return nil
+}
+
+type CreateAppInfoReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppName    string  `protobuf:"bytes,1,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"`
+	ProjectIds []int64 `protobuf:"varint,2,rep,packed,name=project_ids,json=projectIds,proto3" json:"project_ids,omitempty"`
+	Expire     int64   `protobuf:"varint,3,opt,name=expire,proto3" json:"expire,omitempty"`
+}
+
+func (x *CreateAppInfoReq) Reset() {
+	*x = CreateAppInfoReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CreateAppInfoReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateAppInfoReq) ProtoMessage() {}
+
+func (x *CreateAppInfoReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[40]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CreateAppInfoReq.ProtoReflect.Descriptor instead.
+func (*CreateAppInfoReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{40}
+}
+
+func (x *CreateAppInfoReq) GetAppName() string {
+	if x != nil {
+		return x.AppName
+	}
+	return ""
+}
+
+func (x *CreateAppInfoReq) GetProjectIds() []int64 {
+	if x != nil {
+		return x.ProjectIds
+	}
+	return nil
+}
+
+func (x *CreateAppInfoReq) GetExpire() int64 {
+	if x != nil {
+		return x.Expire
+	}
+	return 0
+}
+
+type CreateAppInfoResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppInfo *AppInfo `protobuf:"bytes,1,opt,name=app_info,json=appInfo,proto3" json:"app_info,omitempty"`
+}
+
+func (x *CreateAppInfoResp) Reset() {
+	*x = CreateAppInfoResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[41]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CreateAppInfoResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateAppInfoResp) ProtoMessage() {}
+
+func (x *CreateAppInfoResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[41]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CreateAppInfoResp.ProtoReflect.Descriptor instead.
+func (*CreateAppInfoResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{41}
+}
+
+func (x *CreateAppInfoResp) GetAppInfo() *AppInfo {
+	if x != nil {
+		return x.AppInfo
+	}
+	return nil
+}
+
+type RemoveAppInfoReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppName string `protobuf:"bytes,1,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"`
+}
+
+func (x *RemoveAppInfoReq) Reset() {
+	*x = RemoveAppInfoReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[42]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *RemoveAppInfoReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RemoveAppInfoReq) ProtoMessage() {}
+
+func (x *RemoveAppInfoReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[42]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use RemoveAppInfoReq.ProtoReflect.Descriptor instead.
+func (*RemoveAppInfoReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{42}
+}
+
+func (x *RemoveAppInfoReq) GetAppName() string {
+	if x != nil {
+		return x.AppName
+	}
+	return ""
+}
+
+type RemoveAppInfoResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"`
+}
+
+func (x *RemoveAppInfoResp) Reset() {
+	*x = RemoveAppInfoResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[43]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *RemoveAppInfoResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RemoveAppInfoResp) ProtoMessage() {}
+
+func (x *RemoveAppInfoResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[43]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use RemoveAppInfoResp.ProtoReflect.Descriptor instead.
+func (*RemoveAppInfoResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{43}
+}
+
+func (x *RemoveAppInfoResp) GetOk() bool {
+	if x != nil {
+		return x.Ok
+	}
+	return false
+}
+
+type DisableAppInfoReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppName string `protobuf:"bytes,1,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"`
+}
+
+func (x *DisableAppInfoReq) Reset() {
+	*x = DisableAppInfoReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[44]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DisableAppInfoReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DisableAppInfoReq) ProtoMessage() {}
+
+func (x *DisableAppInfoReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[44]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DisableAppInfoReq.ProtoReflect.Descriptor instead.
+func (*DisableAppInfoReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{44}
+}
+
+func (x *DisableAppInfoReq) GetAppName() string {
+	if x != nil {
+		return x.AppName
+	}
+	return ""
+}
+
+type DisableAppInfoResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"`
+}
+
+func (x *DisableAppInfoResp) Reset() {
+	*x = DisableAppInfoResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[45]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DisableAppInfoResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DisableAppInfoResp) ProtoMessage() {}
+
+func (x *DisableAppInfoResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[45]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DisableAppInfoResp.ProtoReflect.Descriptor instead.
+func (*DisableAppInfoResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{45}
+}
+
+func (x *DisableAppInfoResp) GetOk() bool {
+	if x != nil {
+		return x.Ok
+	}
+	return false
+}
+
+type EnableAppInfoReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppName string `protobuf:"bytes,1,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"`
+}
+
+func (x *EnableAppInfoReq) Reset() {
+	*x = EnableAppInfoReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[46]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *EnableAppInfoReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EnableAppInfoReq) ProtoMessage() {}
+
+func (x *EnableAppInfoReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[46]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use EnableAppInfoReq.ProtoReflect.Descriptor instead.
+func (*EnableAppInfoReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{46}
+}
+
+func (x *EnableAppInfoReq) GetAppName() string {
+	if x != nil {
+		return x.AppName
+	}
+	return ""
+}
+
+type EnableAppInfoResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"`
+}
+
+func (x *EnableAppInfoResp) Reset() {
+	*x = EnableAppInfoResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[47]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *EnableAppInfoResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EnableAppInfoResp) ProtoMessage() {}
+
+func (x *EnableAppInfoResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[47]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use EnableAppInfoResp.ProtoReflect.Descriptor instead.
+func (*EnableAppInfoResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{47}
+}
+
+func (x *EnableAppInfoResp) GetOk() bool {
+	if x != nil {
+		return x.Ok
+	}
+	return false
+}
+
+type ResetAppSecretReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppName string `protobuf:"bytes,1,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"`
+}
+
+func (x *ResetAppSecretReq) Reset() {
+	*x = ResetAppSecretReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[48]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ResetAppSecretReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ResetAppSecretReq) ProtoMessage() {}
+
+func (x *ResetAppSecretReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[48]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ResetAppSecretReq.ProtoReflect.Descriptor instead.
+func (*ResetAppSecretReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{48}
+}
+
+func (x *ResetAppSecretReq) GetAppName() string {
+	if x != nil {
+		return x.AppName
+	}
+	return ""
+}
+
+type ResetAppSecretResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Secret string `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"`
+}
+
+func (x *ResetAppSecretResp) Reset() {
+	*x = ResetAppSecretResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[49]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ResetAppSecretResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ResetAppSecretResp) ProtoMessage() {}
+
+func (x *ResetAppSecretResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[49]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ResetAppSecretResp.ProtoReflect.Descriptor instead.
+func (*ResetAppSecretResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{49}
+}
+
+func (x *ResetAppSecretResp) GetSecret() string {
+	if x != nil {
+		return x.Secret
+	}
+	return ""
+}
+
+type ExpireAppSecretReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppName string `protobuf:"bytes,1,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"`
+	Expire  int64  `protobuf:"varint,3,opt,name=expire,proto3" json:"expire,omitempty"`
+}
+
+func (x *ExpireAppSecretReq) Reset() {
+	*x = ExpireAppSecretReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[50]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExpireAppSecretReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExpireAppSecretReq) ProtoMessage() {}
+
+func (x *ExpireAppSecretReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[50]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ExpireAppSecretReq.ProtoReflect.Descriptor instead.
+func (*ExpireAppSecretReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{50}
+}
+
+func (x *ExpireAppSecretReq) GetAppName() string {
+	if x != nil {
+		return x.AppName
+	}
+	return ""
+}
+
+func (x *ExpireAppSecretReq) GetExpire() int64 {
+	if x != nil {
+		return x.Expire
+	}
+	return 0
+}
+
+type ExpireAppSecretResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ExpireAt string `protobuf:"bytes,3,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"`
+}
+
+func (x *ExpireAppSecretResp) Reset() {
+	*x = ExpireAppSecretResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[51]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExpireAppSecretResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExpireAppSecretResp) ProtoMessage() {}
+
+func (x *ExpireAppSecretResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[51]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ExpireAppSecretResp.ProtoReflect.Descriptor instead.
+func (*ExpireAppSecretResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{51}
+}
+
+func (x *ExpireAppSecretResp) GetExpireAt() string {
+	if x != nil {
+		return x.ExpireAt
+	}
+	return ""
+}
+
+type ResetAppProjectReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppName    string  `protobuf:"bytes,1,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"`
+	ProjectIds []int64 `protobuf:"varint,2,rep,packed,name=project_ids,json=projectIds,proto3" json:"project_ids,omitempty"`
+}
+
+func (x *ResetAppProjectReq) Reset() {
+	*x = ResetAppProjectReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[52]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ResetAppProjectReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ResetAppProjectReq) ProtoMessage() {}
+
+func (x *ResetAppProjectReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[52]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ResetAppProjectReq.ProtoReflect.Descriptor instead.
+func (*ResetAppProjectReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{52}
+}
+
+func (x *ResetAppProjectReq) GetAppName() string {
+	if x != nil {
+		return x.AppName
+	}
+	return ""
+}
+
+func (x *ResetAppProjectReq) GetProjectIds() []int64 {
+	if x != nil {
+		return x.ProjectIds
+	}
+	return nil
+}
+
+type ResetAppProjectResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	RemoveProjectIds []int64 `protobuf:"varint,1,rep,packed,name=remove_project_ids,json=removeProjectIds,proto3" json:"remove_project_ids,omitempty"`
+}
+
+func (x *ResetAppProjectResp) Reset() {
+	*x = ResetAppProjectResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[53]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ResetAppProjectResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ResetAppProjectResp) ProtoMessage() {}
+
+func (x *ResetAppProjectResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[53]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ResetAppProjectResp.ProtoReflect.Descriptor instead.
+func (*ResetAppProjectResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{53}
+}
+
+func (x *ResetAppProjectResp) GetRemoveProjectIds() []int64 {
+	if x != nil {
+		return x.RemoveProjectIds
+	}
+	return nil
+}
+
+type FindDataDescribeReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ProjectId int64    `protobuf:"varint,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	Items     []string `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"`
+	St        string   `protobuf:"bytes,3,opt,name=st,proto3" json:"st,omitempty"`
+	Et        string   `protobuf:"bytes,4,opt,name=et,proto3" json:"et,omitempty"`
+}
+
+func (x *FindDataDescribeReq) Reset() {
+	*x = FindDataDescribeReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[54]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FindDataDescribeReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindDataDescribeReq) ProtoMessage() {}
+
+func (x *FindDataDescribeReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[54]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindDataDescribeReq.ProtoReflect.Descriptor instead.
+func (*FindDataDescribeReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{54}
+}
+
+func (x *FindDataDescribeReq) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *FindDataDescribeReq) GetItems() []string {
+	if x != nil {
+		return x.Items
+	}
+	return nil
+}
+
+func (x *FindDataDescribeReq) GetSt() string {
+	if x != nil {
+		return x.St
+	}
+	return ""
+}
+
+func (x *FindDataDescribeReq) GetEt() string {
+	if x != nil {
+		return x.Et
+	}
+	return ""
+}
+
+type FindDataDescribeResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	List map[string]*DataDescribeInfo `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *FindDataDescribeResp) Reset() {
+	*x = FindDataDescribeResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[55]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FindDataDescribeResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindDataDescribeResp) ProtoMessage() {}
+
+func (x *FindDataDescribeResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[55]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindDataDescribeResp.ProtoReflect.Descriptor instead.
+func (*FindDataDescribeResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{55}
+}
+
+func (x *FindDataDescribeResp) GetList() map[string]*DataDescribeInfo {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type FindDataCorrelationReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ProjectId int64    `protobuf:"varint,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	Items     []string `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"`
+	St        string   `protobuf:"bytes,3,opt,name=st,proto3" json:"st,omitempty"`
+	Et        string   `protobuf:"bytes,4,opt,name=et,proto3" json:"et,omitempty"`
+}
+
+func (x *FindDataCorrelationReq) Reset() {
+	*x = FindDataCorrelationReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[56]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FindDataCorrelationReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindDataCorrelationReq) ProtoMessage() {}
+
+func (x *FindDataCorrelationReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[56]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindDataCorrelationReq.ProtoReflect.Descriptor instead.
+func (*FindDataCorrelationReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{56}
+}
+
+func (x *FindDataCorrelationReq) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *FindDataCorrelationReq) GetItems() []string {
+	if x != nil {
+		return x.Items
+	}
+	return nil
+}
+
+func (x *FindDataCorrelationReq) GetSt() string {
+	if x != nil {
+		return x.St
+	}
+	return ""
+}
+
+func (x *FindDataCorrelationReq) GetEt() string {
+	if x != nil {
+		return x.Et
+	}
+	return ""
+}
+
+type FindDataMinAndMaxReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ProjectId int64    `protobuf:"varint,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
+	Items     []string `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"`
+	St        string   `protobuf:"bytes,3,opt,name=st,proto3" json:"st,omitempty"`
+	Et        string   `protobuf:"bytes,4,opt,name=et,proto3" json:"et,omitempty"`
+}
+
+func (x *FindDataMinAndMaxReq) Reset() {
+	*x = FindDataMinAndMaxReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[57]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FindDataMinAndMaxReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindDataMinAndMaxReq) ProtoMessage() {}
+
+func (x *FindDataMinAndMaxReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[57]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindDataMinAndMaxReq.ProtoReflect.Descriptor instead.
+func (*FindDataMinAndMaxReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{57}
+}
+
+func (x *FindDataMinAndMaxReq) GetProjectId() int64 {
+	if x != nil {
+		return x.ProjectId
+	}
+	return 0
+}
+
+func (x *FindDataMinAndMaxReq) GetItems() []string {
+	if x != nil {
+		return x.Items
+	}
+	return nil
+}
+
+func (x *FindDataMinAndMaxReq) GetSt() string {
+	if x != nil {
+		return x.St
+	}
+	return ""
+}
+
+func (x *FindDataMinAndMaxReq) GetEt() string {
+	if x != nil {
+		return x.Et
+	}
+	return ""
+}
+
+type FindDataMinAndMaxResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	List map[string]*DataMinAndMaxInfo `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *FindDataMinAndMaxResp) Reset() {
+	*x = FindDataMinAndMaxResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[58]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FindDataMinAndMaxResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindDataMinAndMaxResp) ProtoMessage() {}
+
+func (x *FindDataMinAndMaxResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[58]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindDataMinAndMaxResp.ProtoReflect.Descriptor instead.
+func (*FindDataMinAndMaxResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{58}
+}
+
+func (x *FindDataMinAndMaxResp) GetList() map[string]*DataMinAndMaxInfo {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type FindDataCorrelationResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	List map[string]*DataCorrelationInfo `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *FindDataCorrelationResp) Reset() {
+	*x = FindDataCorrelationResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[59]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FindDataCorrelationResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindDataCorrelationResp) ProtoMessage() {}
+
+func (x *FindDataCorrelationResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[59]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindDataCorrelationResp.ProtoReflect.Descriptor instead.
+func (*FindDataCorrelationResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{59}
+}
+
+func (x *FindDataCorrelationResp) GetList() map[string]*DataCorrelationInfo {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type HealthReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *HealthReq) Reset() {
+	*x = HealthReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[60]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *HealthReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HealthReq) ProtoMessage() {}
+
+func (x *HealthReq) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[60]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use HealthReq.ProtoReflect.Descriptor instead.
+func (*HealthReq) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{60}
+}
+
+type HealthResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Db    []string `protobuf:"bytes,1,rep,name=db,proto3" json:"db,omitempty"`
+	Redis []string `protobuf:"bytes,2,rep,name=redis,proto3" json:"redis,omitempty"`
+	Mq    []string `protobuf:"bytes,3,rep,name=mq,proto3" json:"mq,omitempty"`
+	Msg   string   `protobuf:"bytes,4,opt,name=msg,proto3" json:"msg,omitempty"`
+}
+
+func (x *HealthResp) Reset() {
+	*x = HealthResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_datacenter_proto_msgTypes[61]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *HealthResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HealthResp) ProtoMessage() {}
+
+func (x *HealthResp) ProtoReflect() protoreflect.Message {
+	mi := &file_datacenter_proto_msgTypes[61]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use HealthResp.ProtoReflect.Descriptor instead.
+func (*HealthResp) Descriptor() ([]byte, []int) {
+	return file_datacenter_proto_rawDescGZIP(), []int{61}
+}
+
+func (x *HealthResp) GetDb() []string {
+	if x != nil {
+		return x.Db
+	}
+	return nil
+}
+
+func (x *HealthResp) GetRedis() []string {
+	if x != nil {
+		return x.Redis
+	}
+	return nil
+}
+
+func (x *HealthResp) GetMq() []string {
+	if x != nil {
+		return x.Mq
+	}
+	return nil
+}
+
+func (x *HealthResp) GetMsg() string {
+	if x != nil {
+		return x.Msg
+	}
+	return ""
+}
+
+var File_datacenter_proto protoreflect.FileDescriptor
+
+var file_datacenter_proto_rawDesc = []byte{
+	0x0a, 0x10, 0x64, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x22, 0x58, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a,
+	0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d,
+	0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f,
+	0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c,
+	0x22, 0xe8, 0x01, 0x0a, 0x10, 0x44, 0x61, 0x74, 0x61, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62,
+	0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d,
+	0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a,
+	0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12,
+	0x12, 0x0a, 0x04, 0x6d, 0x65, 0x61, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x6d,
+	0x65, 0x61, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x73, 0x74, 0x64, 0x44, 0x65, 0x76, 0x12, 0x17, 0x0a, 0x07,
+	0x76, 0x61, 0x72, 0x5f, 0x64, 0x65, 0x76, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x76,
+	0x61, 0x72, 0x44, 0x65, 0x76, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x32, 0x35, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x03, 0x70, 0x32, 0x35, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x35, 0x30, 0x18, 0x08,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x70, 0x35, 0x30, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x37, 0x35,
+	0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x70, 0x37, 0x35, 0x12, 0x0e, 0x0a, 0x02, 0x73,
+	0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x65,
+	0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x65, 0x74, 0x22, 0x37, 0x0a, 0x11, 0x44,
+	0x61, 0x74, 0x61, 0x4d, 0x69, 0x6e, 0x41, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x49, 0x6e, 0x66, 0x6f,
+	0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6d,
+	0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x03, 0x6d, 0x61, 0x78, 0x22, 0x44, 0x0a, 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49,
+	0x74, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x65, 0x66,
+	0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, 0x63,
+	0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x22, 0xd8, 0x01, 0x0a, 0x13, 0x44,
+	0x61, 0x74, 0x61, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x4e, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x74,
+	0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x62, 0x2e, 0x44,
+	0x61, 0x74, 0x61, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e,
+	0x66, 0x6f, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x74, 0x65,
+	0x6d, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+	0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+	0x65, 0x74, 0x1a, 0x51, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x74, 0x65,
+	0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65,
+	0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb9, 0x01, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66,
+	0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69,
+	0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
+	0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
+	0x03, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x73, 0x12, 0x16, 0x0a,
+	0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73,
+	0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a,
+	0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x08, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x63, 0x5f,
+	0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x54, 0x69, 0x6d,
+	0x65, 0x22, 0xc1, 0x01, 0x0a, 0x0c, 0x44, 0x63, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x52,
+	0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49,
+	0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f,
+	0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x74, 0x69, 0x6d,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12,
+	0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x61,
+	0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12,
+	0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0xa9, 0x07, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e,
+	0x67, 0x4d, 0x66, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
+	0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43,
+	0x6f, 0x64, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x77, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6d,
+	0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10,
+	0x77, 0x61, 0x74, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65,
+	0x12, 0x1b, 0x0a, 0x09, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x19, 0x0a,
+	0x08, 0x63, 0x6f, 0x6e, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x07, 0x63, 0x6f, 0x6e, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64,
+	0x75, 0x63, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b,
+	0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x23, 0x0a, 0x0d, 0x66,
+	0x65, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x64, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65,
+	0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65,
+	0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x73, 0x73,
+	0x75, 0x72, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x70,
+	0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x70,
+	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x12, 0x10,
+	0x0a, 0x03, 0x74, 0x6d, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x74, 0x6d, 0x70,
+	0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x75, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04,
+	0x66, 0x6c, 0x75, 0x78, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f,
+	0x74, 0x75, 0x72, 0x62, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x0f, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x54, 0x75, 0x72, 0x62, 0x69, 0x64, 0x69, 0x74, 0x79,
+	0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x70, 0x68, 0x18, 0x0e,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x50, 0x68, 0x12, 0x22,
+	0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x70, 0x68, 0x18,
+	0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x57, 0x71,
+	0x50, 0x68, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x61, 0x6c,
+	0x18, 0x10, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x41, 0x6c,
+	0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x61,
+	0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
+	0x57, 0x71, 0x41, 0x6c, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f,
+	0x66, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71,
+	0x46, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71,
+	0x5f, 0x66, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75,
+	0x63, 0x74, 0x57, 0x71, 0x46, 0x65, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77,
+	0x71, 0x5f, 0x6d, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64,
+	0x57, 0x71, 0x4d, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f,
+	0x77, 0x71, 0x5f, 0x6d, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f,
+	0x64, 0x75, 0x63, 0x74, 0x57, 0x71, 0x4d, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x66, 0x65, 0x65, 0x64,
+	0x5f, 0x77, 0x71, 0x5f, 0x73, 0x69, 0x6f, 0x32, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a,
+	0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x53, 0x69, 0x6f, 0x32, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72,
+	0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x73, 0x69, 0x6f, 0x32, 0x18, 0x17, 0x20,
+	0x01, 0x28, 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x57, 0x71, 0x53, 0x69,
+	0x6f, 0x32, 0x12, 0x1e, 0x0a, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x63, 0x6f,
+	0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x43,
+	0x6f, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71,
+	0x5f, 0x63, 0x6f, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64,
+	0x75, 0x63, 0x74, 0x57, 0x71, 0x43, 0x6f, 0x64, 0x12, 0x1a, 0x0a, 0x09, 0x66, 0x65, 0x65, 0x64,
+	0x5f, 0x77, 0x71, 0x5f, 0x70, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x66, 0x65, 0x65,
+	0x64, 0x57, 0x71, 0x50, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f,
+	0x77, 0x71, 0x5f, 0x70, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x64,
+	0x75, 0x63, 0x74, 0x57, 0x71, 0x50, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x1c,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x12, 0x15, 0x0a, 0x06, 0x63, 0x5f,
+	0x74, 0x69, 0x6d, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x54, 0x69, 0x6d,
+	0x65, 0x22, 0x91, 0x08, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x55, 0x66, 0x12,
+	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12,
+	0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f,
+	0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12,
+	0x2b, 0x0a, 0x11, 0x77, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61,
+	0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x77, 0x61, 0x74, 0x65,
+	0x72, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09,
+	0x66, 0x65, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x08, 0x66, 0x65, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6f, 0x6e,
+	0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e,
+	0x46, 0x6c, 0x6f, 0x77, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f,
+	0x66, 0x6c, 0x6f, 0x77, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64,
+	0x75, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x64, 0x5f,
+	0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c,
+	0x66, 0x65, 0x65, 0x64, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x12, 0x21, 0x0a, 0x0c,
+	0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x12,
+	0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73,
+	0x75, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x64, 0x75,
+	0x63, 0x74, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x6d,
+	0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x74, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04,
+	0x66, 0x6c, 0x75, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x66, 0x6c, 0x75, 0x78,
+	0x12, 0x22, 0x0a, 0x0c, 0x70, 0x65, 0x72, 0x6d, 0x65, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
+	0x18, 0x20, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x70, 0x65, 0x72, 0x6d, 0x65, 0x61, 0x62, 0x69,
+	0x6c, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f,
+	0x74, 0x75, 0x72, 0x62, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x0f, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x54, 0x75, 0x72, 0x62, 0x69, 0x64, 0x69, 0x74, 0x79,
+	0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x70, 0x68, 0x18, 0x0e,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x50, 0x68, 0x12, 0x22,
+	0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x70, 0x68, 0x18,
+	0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x57, 0x71,
+	0x50, 0x68, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x61, 0x6c,
+	0x18, 0x10, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x41, 0x6c,
+	0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x61,
+	0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
+	0x57, 0x71, 0x41, 0x6c, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f,
+	0x66, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71,
+	0x46, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71,
+	0x5f, 0x66, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75,
+	0x63, 0x74, 0x57, 0x71, 0x46, 0x65, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77,
+	0x71, 0x5f, 0x6d, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64,
+	0x57, 0x71, 0x4d, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f,
+	0x77, 0x71, 0x5f, 0x6d, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f,
+	0x64, 0x75, 0x63, 0x74, 0x57, 0x71, 0x4d, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x66, 0x65, 0x65, 0x64,
+	0x5f, 0x77, 0x71, 0x5f, 0x73, 0x69, 0x6f, 0x32, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a,
+	0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x53, 0x69, 0x6f, 0x32, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72,
+	0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x73, 0x69, 0x6f, 0x32, 0x18, 0x17, 0x20,
+	0x01, 0x28, 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x57, 0x71, 0x53, 0x69,
+	0x6f, 0x32, 0x12, 0x1e, 0x0a, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x63, 0x6f,
+	0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x43,
+	0x6f, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71,
+	0x5f, 0x63, 0x6f, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64,
+	0x75, 0x63, 0x74, 0x57, 0x71, 0x43, 0x6f, 0x64, 0x12, 0x1a, 0x0a, 0x09, 0x66, 0x65, 0x65, 0x64,
+	0x5f, 0x77, 0x71, 0x5f, 0x70, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x66, 0x65, 0x65,
+	0x64, 0x57, 0x71, 0x50, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f,
+	0x77, 0x71, 0x5f, 0x70, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x64,
+	0x75, 0x63, 0x74, 0x57, 0x71, 0x50, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x1c,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x69,
+	0x6c, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x0a, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x66,
+	0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x0b, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x15,
+	0x0a, 0x06, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x63, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xba, 0x0d, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e,
+	0x67, 0x4e, 0x66, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
+	0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43,
+	0x6f, 0x64, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x77, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6d,
+	0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10,
+	0x77, 0x61, 0x74, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65,
+	0x12, 0x22, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x31, 0x73,
+	0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x46, 0x6c, 0x6f,
+	0x77, 0x31, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x5f, 0x66, 0x6c, 0x6f, 0x77,
+	0x5f, 0x31, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x46,
+	0x6c, 0x6f, 0x77, 0x31, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
+	0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x31, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01,
+	0x52, 0x0e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x77, 0x31, 0x73, 0x74,
+	0x12, 0x2a, 0x0a, 0x11, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72,
+	0x65, 0x5f, 0x31, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x66, 0x65, 0x65,
+	0x64, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x31, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10,
+	0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x31, 0x73, 0x74,
+	0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x73, 0x73,
+	0x75, 0x72, 0x65, 0x31, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
+	0x74, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x31, 0x73, 0x74, 0x18, 0x0a,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x50, 0x72, 0x65,
+	0x73, 0x73, 0x75, 0x72, 0x65, 0x31, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6d, 0x70, 0x5f,
+	0x31, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x74, 0x6d, 0x70, 0x31, 0x73,
+	0x74, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x6c, 0x75, 0x78, 0x5f, 0x31, 0x73, 0x74, 0x18, 0x0c, 0x20,
+	0x01, 0x28, 0x01, 0x52, 0x07, 0x66, 0x6c, 0x75, 0x78, 0x31, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10,
+	0x70, 0x65, 0x72, 0x6d, 0x65, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x31, 0x73, 0x74,
+	0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x6d, 0x65, 0x61, 0x62, 0x69,
+	0x6c, 0x69, 0x74, 0x79, 0x31, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x64, 0x5f,
+	0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x32, 0x6e, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b,
+	0x66, 0x65, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x77, 0x32, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x63,
+	0x6f, 0x6e, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x32, 0x6e, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x46, 0x6c, 0x6f, 0x77, 0x32, 0x6e, 0x64, 0x12, 0x28, 0x0a,
+	0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x32, 0x6e,
+	0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
+	0x46, 0x6c, 0x6f, 0x77, 0x32, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x65, 0x65, 0x64, 0x5f,
+	0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x32, 0x6e, 0x64, 0x18, 0x11, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x0f, 0x66, 0x65, 0x65, 0x64, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65,
+	0x32, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73,
+	0x75, 0x72, 0x65, 0x5f, 0x32, 0x6e, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x63,
+	0x6f, 0x6e, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x32, 0x6e, 0x64, 0x12, 0x30, 0x0a,
+	0x14, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72,
+	0x65, 0x5f, 0x32, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x70, 0x72, 0x6f,
+	0x64, 0x75, 0x63, 0x74, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x32, 0x6e, 0x64, 0x12,
+	0x17, 0x0a, 0x07, 0x74, 0x6d, 0x70, 0x5f, 0x32, 0x6e, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x01,
+	0x52, 0x06, 0x74, 0x6d, 0x70, 0x32, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x6c, 0x75, 0x78,
+	0x5f, 0x32, 0x6e, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x66, 0x6c, 0x75, 0x78,
+	0x32, 0x6e, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x65, 0x72, 0x6d, 0x65, 0x61, 0x62, 0x69, 0x6c,
+	0x69, 0x74, 0x79, 0x5f, 0x32, 0x6e, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x70,
+	0x65, 0x72, 0x6d, 0x65, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x32, 0x6e, 0x64, 0x12, 0x22,
+	0x0a, 0x0d, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x33, 0x74, 0x68, 0x18,
+	0x17, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x77, 0x33,
+	0x74, 0x68, 0x12, 0x20, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x33,
+	0x74, 0x68, 0x18, 0x18, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x46, 0x6c, 0x6f,
+	0x77, 0x33, 0x74, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f,
+	0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x33, 0x74, 0x68, 0x18, 0x19, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e,
+	0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x77, 0x33, 0x74, 0x68, 0x12, 0x2a,
+	0x0a, 0x11, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x5f,
+	0x33, 0x74, 0x68, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x66, 0x65, 0x65, 0x64, 0x50,
+	0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x33, 0x74, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f,
+	0x6e, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x33, 0x74, 0x68, 0x18, 0x1b,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72,
+	0x65, 0x33, 0x74, 0x68, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f,
+	0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x33, 0x74, 0x68, 0x18, 0x1c, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x50, 0x72, 0x65, 0x73, 0x73,
+	0x75, 0x72, 0x65, 0x33, 0x74, 0x68, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6d, 0x70, 0x5f, 0x33, 0x74,
+	0x68, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x74, 0x6d, 0x70, 0x33, 0x74, 0x68, 0x12,
+	0x19, 0x0a, 0x08, 0x66, 0x6c, 0x75, 0x78, 0x5f, 0x33, 0x74, 0x68, 0x18, 0x1e, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x07, 0x66, 0x6c, 0x75, 0x78, 0x33, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x65,
+	0x72, 0x6d, 0x65, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x33, 0x74, 0x68, 0x18, 0x1f,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x6d, 0x65, 0x61, 0x62, 0x69, 0x6c, 0x69,
+	0x74, 0x79, 0x33, 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71,
+	0x5f, 0x74, 0x75, 0x72, 0x62, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x20, 0x20, 0x01, 0x28, 0x01,
+	0x52, 0x0f, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x54, 0x75, 0x72, 0x62, 0x69, 0x64, 0x69, 0x74,
+	0x79, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x70, 0x68, 0x18,
+	0x21, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x50, 0x68, 0x12,
+	0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x70, 0x68,
+	0x18, 0x22, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x57,
+	0x71, 0x50, 0x68, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x61,
+	0x6c, 0x18, 0x23, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x41,
+	0x6c, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f,
+	0x61, 0x6c, 0x18, 0x24, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
+	0x74, 0x57, 0x71, 0x41, 0x6c, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71,
+	0x5f, 0x66, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57,
+	0x71, 0x46, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77,
+	0x71, 0x5f, 0x66, 0x65, 0x18, 0x26, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64,
+	0x75, 0x63, 0x74, 0x57, 0x71, 0x46, 0x65, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f,
+	0x77, 0x71, 0x5f, 0x6d, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65,
+	0x64, 0x57, 0x71, 0x4d, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
+	0x5f, 0x77, 0x71, 0x5f, 0x6d, 0x6e, 0x18, 0x28, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72,
+	0x6f, 0x64, 0x75, 0x63, 0x74, 0x57, 0x71, 0x4d, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x66, 0x65, 0x65,
+	0x64, 0x5f, 0x77, 0x71, 0x5f, 0x73, 0x69, 0x6f, 0x32, 0x18, 0x29, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x0a, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x53, 0x69, 0x6f, 0x32, 0x12, 0x26, 0x0a, 0x0f, 0x70,
+	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x73, 0x69, 0x6f, 0x32, 0x18, 0x2a,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x57, 0x71, 0x53,
+	0x69, 0x6f, 0x32, 0x12, 0x1e, 0x0a, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x63,
+	0x6f, 0x64, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71,
+	0x43, 0x6f, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77,
+	0x71, 0x5f, 0x63, 0x6f, 0x64, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x6f,
+	0x64, 0x75, 0x63, 0x74, 0x57, 0x71, 0x43, 0x6f, 0x64, 0x12, 0x1a, 0x0a, 0x09, 0x66, 0x65, 0x65,
+	0x64, 0x5f, 0x77, 0x71, 0x5f, 0x70, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x66, 0x65,
+	0x65, 0x64, 0x57, 0x71, 0x50, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
+	0x5f, 0x77, 0x71, 0x5f, 0x70, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x70, 0x72, 0x6f,
+	0x64, 0x75, 0x63, 0x74, 0x57, 0x71, 0x50, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18,
+	0x2f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x12, 0x15, 0x0a, 0x06, 0x63,
+	0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x30, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x54, 0x69,
+	0x6d, 0x65, 0x22, 0xba, 0x0d, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x52, 0x6f,
+	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64,
+	0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12,
+	0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65,
+	0x12, 0x2b, 0x0a, 0x11, 0x77, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72,
+	0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x77, 0x61, 0x74,
+	0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x22, 0x0a,
+	0x0d, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x31, 0x73, 0x74, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x77, 0x31, 0x73,
+	0x74, 0x12, 0x20, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x31, 0x73,
+	0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x46, 0x6c, 0x6f, 0x77,
+	0x31, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x66,
+	0x6c, 0x6f, 0x77, 0x5f, 0x31, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x70,
+	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x77, 0x31, 0x73, 0x74, 0x12, 0x2a, 0x0a,
+	0x11, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x31,
+	0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x66, 0x65, 0x65, 0x64, 0x50, 0x72,
+	0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x31, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e,
+	0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x31, 0x73, 0x74, 0x18, 0x09, 0x20,
+	0x01, 0x28, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65,
+	0x31, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x70,
+	0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x31, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75,
+	0x72, 0x65, 0x31, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6d, 0x70, 0x5f, 0x31, 0x73, 0x74,
+	0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x74, 0x6d, 0x70, 0x31, 0x73, 0x74, 0x12, 0x19,
+	0x0a, 0x08, 0x66, 0x6c, 0x75, 0x78, 0x5f, 0x31, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01,
+	0x52, 0x07, 0x66, 0x6c, 0x75, 0x78, 0x31, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x65, 0x72,
+	0x6d, 0x65, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x31, 0x73, 0x74, 0x18, 0x0d, 0x20,
+	0x01, 0x28, 0x01, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x6d, 0x65, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74,
+	0x79, 0x31, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f,
+	0x77, 0x5f, 0x32, 0x6e, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x66, 0x65, 0x65,
+	0x64, 0x46, 0x6c, 0x6f, 0x77, 0x32, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x5f,
+	0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x32, 0x6e, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a,
+	0x63, 0x6f, 0x6e, 0x46, 0x6c, 0x6f, 0x77, 0x32, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72,
+	0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x32, 0x6e, 0x64, 0x18, 0x10,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x46, 0x6c, 0x6f,
+	0x77, 0x32, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65,
+	0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x32, 0x6e, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x0f, 0x66, 0x65, 0x65, 0x64, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x32, 0x6e, 0x64,
+	0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65,
+	0x5f, 0x32, 0x6e, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x50,
+	0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x32, 0x6e, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x72,
+	0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x32,
+	0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
+	0x74, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x32, 0x6e, 0x64, 0x12, 0x17, 0x0a, 0x07,
+	0x74, 0x6d, 0x70, 0x5f, 0x32, 0x6e, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x74,
+	0x6d, 0x70, 0x32, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x6c, 0x75, 0x78, 0x5f, 0x32, 0x6e,
+	0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x66, 0x6c, 0x75, 0x78, 0x32, 0x6e, 0x64,
+	0x12, 0x29, 0x0a, 0x10, 0x70, 0x65, 0x72, 0x6d, 0x65, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
+	0x5f, 0x32, 0x6e, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x6d,
+	0x65, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x32, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x66,
+	0x65, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x33, 0x74, 0x68, 0x18, 0x17, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x77, 0x33, 0x74, 0x68, 0x12,
+	0x20, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x33, 0x74, 0x68, 0x18,
+	0x18, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x46, 0x6c, 0x6f, 0x77, 0x33, 0x74,
+	0x68, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x66, 0x6c, 0x6f,
+	0x77, 0x5f, 0x33, 0x74, 0x68, 0x18, 0x19, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x70, 0x72, 0x6f,
+	0x64, 0x75, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x77, 0x33, 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x66,
+	0x65, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x33, 0x74, 0x68,
+	0x18, 0x1a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x66, 0x65, 0x65, 0x64, 0x50, 0x72, 0x65, 0x73,
+	0x73, 0x75, 0x72, 0x65, 0x33, 0x74, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x5f, 0x70,
+	0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x33, 0x74, 0x68, 0x18, 0x1b, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x33, 0x74,
+	0x68, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x70, 0x72, 0x65,
+	0x73, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x33, 0x74, 0x68, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65,
+	0x33, 0x74, 0x68, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6d, 0x70, 0x5f, 0x33, 0x74, 0x68, 0x18, 0x1d,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x74, 0x6d, 0x70, 0x33, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x08,
+	0x66, 0x6c, 0x75, 0x78, 0x5f, 0x33, 0x74, 0x68, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07,
+	0x66, 0x6c, 0x75, 0x78, 0x33, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x65, 0x72, 0x6d, 0x65,
+	0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x33, 0x74, 0x68, 0x18, 0x1f, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x6d, 0x65, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x33,
+	0x74, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x74, 0x75,
+	0x72, 0x62, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x20, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x66,
+	0x65, 0x65, 0x64, 0x57, 0x71, 0x54, 0x75, 0x72, 0x62, 0x69, 0x64, 0x69, 0x74, 0x79, 0x12, 0x1c,
+	0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x70, 0x68, 0x18, 0x21, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x50, 0x68, 0x12, 0x22, 0x0a, 0x0d,
+	0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x70, 0x68, 0x18, 0x22, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x57, 0x71, 0x50, 0x68,
+	0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x61, 0x6c, 0x18, 0x23,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x41, 0x6c, 0x12, 0x22,
+	0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x61, 0x6c, 0x18,
+	0x24, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x57, 0x71,
+	0x41, 0x6c, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x66, 0x65,
+	0x18, 0x25, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x46, 0x65,
+	0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x66,
+	0x65, 0x18, 0x26, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
+	0x57, 0x71, 0x46, 0x65, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f,
+	0x6d, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71,
+	0x4d, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71,
+	0x5f, 0x6d, 0x6e, 0x18, 0x28, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75,
+	0x63, 0x74, 0x57, 0x71, 0x4d, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77,
+	0x71, 0x5f, 0x73, 0x69, 0x6f, 0x32, 0x18, 0x29, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x66, 0x65,
+	0x65, 0x64, 0x57, 0x71, 0x53, 0x69, 0x6f, 0x32, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x64,
+	0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x73, 0x69, 0x6f, 0x32, 0x18, 0x2a, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x57, 0x71, 0x53, 0x69, 0x6f, 0x32,
+	0x12, 0x1e, 0x0a, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77, 0x71, 0x5f, 0x63, 0x6f, 0x64, 0x18,
+	0x2b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x66, 0x65, 0x65, 0x64, 0x57, 0x71, 0x43, 0x6f, 0x64,
+	0x12, 0x24, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71, 0x5f, 0x63,
+	0x6f, 0x64, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
+	0x74, 0x57, 0x71, 0x43, 0x6f, 0x64, 0x12, 0x1a, 0x0a, 0x09, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x77,
+	0x71, 0x5f, 0x70, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x66, 0x65, 0x65, 0x64, 0x57,
+	0x71, 0x50, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x77, 0x71,
+	0x5f, 0x70, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
+	0x74, 0x57, 0x71, 0x50, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x2f, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x12, 0x15, 0x0a, 0x06, 0x63, 0x5f, 0x74, 0x69,
+	0x6d, 0x65, 0x18, 0x30, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x22,
+	0xad, 0x02, 0x0a, 0x0c, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x73, 0x74,
+	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64,
+	0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12,
+	0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65,
+	0x12, 0x16, 0x0a, 0x06, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x06, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65,
+	0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x27,
+	0x0a, 0x0f, 0x61, 0x67, 0x69, 0x74, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x61, 0x67, 0x69, 0x74, 0x61, 0x74, 0x6f,
+	0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x67, 0x69, 0x74, 0x61,
+	0x74, 0x6f, 0x72, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x10, 0x61, 0x67, 0x69, 0x74, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x75, 0x72, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x67, 0x69, 0x74, 0x61, 0x74, 0x6f, 0x72,
+	0x5f, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x13, 0x61, 0x67, 0x69, 0x74, 0x61, 0x74, 0x6f, 0x72, 0x46, 0x61, 0x75,
+	0x6c, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x63, 0x5f, 0x74, 0x69,
+	0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x22,
+	0x86, 0x03, 0x0a, 0x0b, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x6d, 0x70, 0x12,
+	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12,
+	0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f,
+	0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12,
+	0x23, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x64, 0x50, 0x72, 0x65, 0x73,
+	0x73, 0x75, 0x72, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x73,
+	0x73, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x50,
+	0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a,
+	0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01,
+	0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6c,
+	0x69, 0x66, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x6c, 0x69, 0x66, 0x74, 0x12,
+	0x1e, 0x0a, 0x0a, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0a, 0x20,
+	0x01, 0x28, 0x01, 0x52, 0x0a, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x79, 0x12,
+	0x1d, 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21,
+	0x0a, 0x0c, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x12, 0x15, 0x0a, 0x06, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xfa, 0x01, 0x0a, 0x0c, 0x57, 0x6f, 0x72,
+	0x6b, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f,
+	0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70,
+	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x64, 0x6a,
+	0x75, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x64, 0x6a, 0x75, 0x73,
+	0x74, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x07, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x63,
+	0x6c, 0x6f, 0x73, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6c, 0x6f,
+	0x73, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x18, 0x07, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x66,
+	0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x0b, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15,
+	0x0a, 0x06, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x63, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x76, 0x0a, 0x0f, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73,
+	0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a,
+	0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72,
+	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x5f,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x12, 0x15, 0x0a, 0x06, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x64, 0x0a,
+	0x1a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73,
+	0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x70,
+	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x04, 0x6c, 0x69,
+	0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x74,
+	0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x6c,
+	0x69, 0x73, 0x74, 0x22, 0x1d, 0x0a, 0x1b, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x41, 0x64, 0x64, 0x49,
+	0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65,
+	0x73, 0x70, 0x22, 0xe6, 0x01, 0x0a, 0x16, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f,
+	0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a,
+	0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09,
+	0x69, 0x74, 0x65, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74,
+	0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x74,
+	0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61,
+	0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x67, 0x67, 0x72, 0x65,
+	0x67, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65,
+	0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x74, 0x69, 0x6d,
+	0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x08,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x98, 0x01, 0x0a, 0x18,
+	0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x42,
+	0x79, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a,
+	0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72,
+	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x5f,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x74,
+	0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65,
+	0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x66, 0x0a, 0x19, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69,
+	0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x61, 0x78, 0x4d, 0x69, 0x6e, 0x52,
+	0x65, 0x73, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x61, 0x6c, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x12, 0x17, 0x0a, 0x07,
+	0x6d, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x6d,
+	0x69, 0x6e, 0x56, 0x61, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x76, 0x67, 0x5f, 0x76, 0x61, 0x6c,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x61, 0x76, 0x67, 0x56, 0x61, 0x6c, 0x22, 0x48,
+	0x0a, 0x1c, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74,
+	0x61, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14,
+	0x0a, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x66,
+	0x69, 0x72, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x22, 0x35, 0x0a, 0x1d, 0x43, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
+	0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22,
+	0x5b, 0x0a, 0x13, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61,
+	0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x6e,
+	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, 0x4e,
+	0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01,
+	0x52, 0x03, 0x76, 0x61, 0x6c, 0x12, 0x15, 0x0a, 0x06, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x17,
+	0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x46,
+	0x6f, 0x72, 0x43, 0x68, 0x61, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x76,
+	0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x12, 0x19, 0x0a,
+	0x08, 0x68, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x07, 0x68, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x74, 0x22, 0x9c, 0x02, 0x0a, 0x1a, 0x49, 0x74, 0x65,
+	0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x43,
+	0x68, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65,
+	0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f,
+	0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x6e,
+	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, 0x4e,
+	0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x74, 0x69,
+	0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x12,
+	0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73,
+	0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12,
+	0x1e, 0x0a, 0x0a, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x07, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x12,
+	0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x61, 0x6c,
+	0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x12, 0x17,
+	0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x06, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x22, 0x4e, 0x0a, 0x1b, 0x49, 0x74, 0x65, 0x6d, 0x48,
+	0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x43, 0x68, 0x61,
+	0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2f, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69,
+	0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x72,
+	0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x17, 0x49, 0x74, 0x65, 0x6d, 0x48,
+	0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x2b, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
+	0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22,
+	0x3b, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x55, 0x66, 0x42,
+	0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x21, 0x0a, 0x04, 0x6c, 0x69, 0x73,
+	0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72,
+	0x6b, 0x69, 0x6e, 0x67, 0x55, 0x66, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0xfa, 0x01, 0x0a,
+	0x17, 0x46, 0x69, 0x6e, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x55, 0x66, 0x42, 0x79,
+	0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a,
+	0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72,
+	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x74,
+	0x65, 0x72, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
+	0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73,
+	0x74, 0x65, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x12,
+	0x2a, 0x0a, 0x11, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73,
+	0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x66, 0x69, 0x6c, 0x74,
+	0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x66,
+	0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65,
+	0x45, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x3d, 0x0a, 0x18, 0x46, 0x69, 0x6e,
+	0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x55, 0x66, 0x42, 0x79, 0x43, 0x79, 0x63, 0x6c,
+	0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x21, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67,
+	0x55, 0x66, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x3b, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x57,
+	0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x21, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x52,
+	0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x3b, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b,
+	0x69, 0x6e, 0x67, 0x4e, 0x66, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12,
+	0x21, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e,
+	0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x4e, 0x66, 0x52, 0x04, 0x6c, 0x69,
+	0x73, 0x74, 0x22, 0x3b, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67,
+	0x4d, 0x66, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x21, 0x0a, 0x04,
+	0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e,
+	0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x4d, 0x66, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22,
+	0x3f, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x6d,
+	0x70, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x23, 0x0a, 0x04, 0x6c,
+	0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x57,
+	0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x6d, 0x70, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74,
+	0x22, 0x41, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x56, 0x61,
+	0x6c, 0x76, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x24, 0x0a,
+	0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62,
+	0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x52, 0x04, 0x6c,
+	0x69, 0x73, 0x74, 0x22, 0x41, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e,
+	0x67, 0x43, 0x68, 0x65, 0x73, 0x74, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70,
+	0x12, 0x24, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10,
+	0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x73, 0x74,
+	0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x57, 0x0a, 0x0e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x70,
+	0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09,
+	0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64,
+	0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22,
+	0x62, 0x0a, 0x0f, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x1f, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x6c,
+	0x69, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x61, 0x67,
+	0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x22, 0x2a, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66,
+	0x6f, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22,
+	0x38, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
+	0x70, 0x12, 0x26, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f,
+	0x52, 0x07, 0x61, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a,
+	0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a,
+	0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x70,
+	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70,
+	0x69, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72,
+	0x65, 0x22, 0x3b, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e,
+	0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x26, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x6e,
+	0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x70,
+	0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x61, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x2d,
+	0x0a, 0x10, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+	0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x23, 0x0a,
+	0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02,
+	0x6f, 0x6b, 0x22, 0x2e, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x70,
+	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e,
+	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61,
+	0x6d, 0x65, 0x22, 0x24, 0x0a, 0x12, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x70,
+	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x2d, 0x0a, 0x10, 0x45, 0x6e, 0x61, 0x62,
+	0x6c, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08,
+	0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
+	0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x23, 0x0a, 0x11, 0x45, 0x6e, 0x61, 0x62, 0x6c,
+	0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02,
+	0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x2e, 0x0a, 0x11,
+	0x52, 0x65, 0x73, 0x65, 0x74, 0x41, 0x70, 0x70, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65,
+	0x71, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2c, 0x0a, 0x12,
+	0x52, 0x65, 0x73, 0x65, 0x74, 0x41, 0x70, 0x70, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x47, 0x0a, 0x12, 0x45, 0x78,
+	0x70, 0x69, 0x72, 0x65, 0x41, 0x70, 0x70, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71,
+	0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65,
+	0x78, 0x70, 0x69, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x65, 0x78, 0x70,
+	0x69, 0x72, 0x65, 0x22, 0x32, 0x0a, 0x13, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x70, 0x70,
+	0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78,
+	0x70, 0x69, 0x72, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65,
+	0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x74, 0x22, 0x50, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x65, 0x74,
+	0x41, 0x70, 0x70, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a,
+	0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a,
+	0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x70,
+	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x73, 0x22, 0x43, 0x0a, 0x13, 0x52, 0x65, 0x73,
+	0x65, 0x74, 0x41, 0x70, 0x70, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70,
+	0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65,
+	0x63, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65,
+	0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x73, 0x22, 0x6a,
+	0x0a, 0x13, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
+	0x62, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
+	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65,
+	0x63, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20,
+	0x03, 0x28, 0x09, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x73, 0x74,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x74,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x65, 0x74, 0x22, 0x9d, 0x01, 0x0a, 0x14, 0x46,
+	0x69, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x44,
+	0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x4d, 0x0a, 0x09, 0x4c,
+	0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x44,
+	0x61, 0x74, 0x61, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6d, 0x0a, 0x16, 0x46, 0x69,
+	0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f,
+	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63,
+	0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x73, 0x74, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x74, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x65, 0x74, 0x22, 0x6b, 0x0a, 0x14, 0x46, 0x69, 0x6e,
+	0x64, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x69, 0x6e, 0x41, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x52, 0x65,
+	0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64,
+	0x12, 0x14, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
+	0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x02, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x02, 0x65, 0x74, 0x22, 0xa0, 0x01, 0x0a, 0x15, 0x46, 0x69, 0x6e, 0x64, 0x44,
+	0x61, 0x74, 0x61, 0x4d, 0x69, 0x6e, 0x41, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x70,
+	0x12, 0x37, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23,
+	0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x69, 0x6e, 0x41,
+	0x6e, 0x64, 0x4d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x4e, 0x0a, 0x09, 0x4c, 0x69, 0x73,
+	0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x61, 0x74,
+	0x61, 0x4d, 0x69, 0x6e, 0x41, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05,
+	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa6, 0x01, 0x0a, 0x17, 0x46, 0x69,
+	0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x61, 0x74,
+	0x61, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
+	0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74,
+	0x1a, 0x50, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+	0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+	0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
+	0x2e, 0x70, 0x62, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
+	0x38, 0x01, 0x22, 0x0b, 0x0a, 0x09, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x22,
+	0x54, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a,
+	0x02, 0x64, 0x62, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x64, 0x62, 0x12, 0x14, 0x0a,
+	0x05, 0x72, 0x65, 0x64, 0x69, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65,
+	0x64, 0x69, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x6d, 0x71, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52,
+	0x02, 0x6d, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x03, 0x6d, 0x73, 0x67, 0x32, 0xf8, 0x0e, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69,
+	0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72,
+	0x6b, 0x69, 0x6e, 0x67, 0x55, 0x66, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x2e, 0x70,
+	0x62, 0x2e, 0x44, 0x63, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1a,
+	0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x55, 0x66,
+	0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x51, 0x0a, 0x14, 0x46, 0x69,
+	0x6e, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x55, 0x66, 0x42, 0x79, 0x43, 0x79, 0x63,
+	0x6c, 0x65, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x57, 0x6f, 0x72, 0x6b,
+	0x69, 0x6e, 0x67, 0x55, 0x66, 0x42, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a,
+	0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67,
+	0x55, 0x66, 0x42, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a,
+	0x12, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x42, 0x79, 0x43,
+	0x6f, 0x64, 0x65, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x63, 0x57, 0x6f, 0x72, 0x6b, 0x69,
+	0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f,
+	0x72, 0x6b, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x12, 0x48, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x43,
+	0x68, 0x65, 0x73, 0x74, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e,
+	0x44, 0x63, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70,
+	0x62, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x73,
+	0x74, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x14, 0x47,
+	0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x6d, 0x70, 0x42, 0x79, 0x43,
+	0x6f, 0x64, 0x65, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x63, 0x57, 0x6f, 0x72, 0x6b, 0x69,
+	0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f,
+	0x72, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x6d, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x12, 0x48, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e,
+	0x67, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x2e, 0x70,
+	0x62, 0x2e, 0x44, 0x63, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1d,
+	0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x56, 0x61,
+	0x6c, 0x76, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5a, 0x0a,
+	0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73,
+	0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x75,
+	0x6c, 0x74, 0x69, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
+	0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x75,
+	0x6c, 0x74, 0x69, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
+	0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4e, 0x0a, 0x13, 0x49, 0x74, 0x65,
+	0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74,
+	0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
+	0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70,
+	0x62, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74,
+	0x61, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x15, 0x49, 0x74, 0x65,
+	0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x42, 0x79, 0x54, 0x69,
+	0x6d, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74,
+	0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x42, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71,
+	0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
+	0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5a, 0x0a,
+	0x1b, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61,
+	0x4d, 0x61, 0x78, 0x4d, 0x69, 0x6e, 0x42, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x2e, 0x70,
+	0x62, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74,
+	0x61, 0x42, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x2e,
+	0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4d,
+	0x61, 0x78, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x60, 0x0a, 0x1e, 0x49, 0x74, 0x65,
+	0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x46, 0x69, 0x72, 0x73,
+	0x74, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62,
+	0x2e, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61,
+	0x42, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x49,
+	0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x46, 0x69,
+	0x72, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5c, 0x0a, 0x19, 0x43,
+	0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73,
+	0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x74,
+	0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x42, 0x79, 0x54,
+	0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
+	0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5a, 0x0a, 0x17, 0x49, 0x74, 0x65,
+	0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x43,
+	0x68, 0x61, 0x72, 0x74, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69,
+	0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x72,
+	0x74, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x69,
+	0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x72,
+	0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x70, 0x70,
+	0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x70,
+	0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69,
+	0x6e, 0x64, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x33, 0x0a,
+	0x0a, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x11, 0x2e, 0x70, 0x62,
+	0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x12,
+	0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x49,
+	0x6e, 0x66, 0x6f, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41,
+	0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x43,
+	0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70,
+	0x12, 0x3c, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66,
+	0x6f, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70,
+	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d,
+	0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3f,
+	0x0a, 0x0e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f,
+	0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x70,
+	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x69, 0x73,
+	0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12,
+	0x3c, 0x0a, 0x0d, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f,
+	0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x70, 0x49,
+	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x61, 0x62,
+	0x6c, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3f, 0x0a,
+	0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x41, 0x70, 0x70, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12,
+	0x15, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x41, 0x70, 0x70, 0x53, 0x65, 0x63,
+	0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x65,
+	0x74, 0x41, 0x70, 0x70, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42,
+	0x0a, 0x0f, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x70, 0x70, 0x53, 0x65, 0x63, 0x72, 0x65,
+	0x74, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x70, 0x70,
+	0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x45,
+	0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x70, 0x70, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x42, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x65, 0x74, 0x41, 0x70, 0x70, 0x50, 0x72,
+	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74,
+	0x41, 0x70, 0x70, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e,
+	0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x41, 0x70, 0x70, 0x50, 0x72, 0x6f, 0x6a, 0x65,
+	0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x45, 0x0a, 0x10, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x61,
+	0x74, 0x61, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e,
+	0x46, 0x69, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
+	0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x61, 0x74,
+	0x61, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x48, 0x0a,
+	0x11, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x69, 0x6e, 0x41, 0x6e, 0x64, 0x4d,
+	0x61, 0x78, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61,
+	0x4d, 0x69, 0x6e, 0x41, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70,
+	0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x69, 0x6e, 0x41, 0x6e, 0x64,
+	0x4d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4e, 0x0a, 0x13, 0x46, 0x69, 0x6e, 0x64, 0x44,
+	0x61, 0x74, 0x61, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a,
+	0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x72, 0x72,
+	0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x2e,
+	0x46, 0x69, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x27, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74,
+	0x68, 0x12, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71,
+	0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70,
+	0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_datacenter_proto_rawDescOnce sync.Once
+	file_datacenter_proto_rawDescData = file_datacenter_proto_rawDesc
+)
+
+func file_datacenter_proto_rawDescGZIP() []byte {
+	file_datacenter_proto_rawDescOnce.Do(func() {
+		file_datacenter_proto_rawDescData = protoimpl.X.CompressGZIP(file_datacenter_proto_rawDescData)
+	})
+	return file_datacenter_proto_rawDescData
+}
+
+var file_datacenter_proto_msgTypes = make([]protoimpl.MessageInfo, 66)
+var file_datacenter_proto_goTypes = []interface{}{
+	(*Pagination)(nil),                    // 0: pb.Pagination
+	(*DataDescribeInfo)(nil),              // 1: pb.DataDescribeInfo
+	(*DataMinAndMaxInfo)(nil),             // 2: pb.DataMinAndMaxInfo
+	(*RelatedItems)(nil),                  // 3: pb.RelatedItems
+	(*DataCorrelationInfo)(nil),           // 4: pb.DataCorrelationInfo
+	(*AppInfo)(nil),                       // 5: pb.AppInfo
+	(*DcWorkingReq)(nil),                  // 6: pb.DcWorkingReq
+	(*WorkingMf)(nil),                     // 7: pb.WorkingMf
+	(*WorkingUf)(nil),                     // 8: pb.WorkingUf
+	(*WorkingNf)(nil),                     // 9: pb.WorkingNf
+	(*WorkingRo)(nil),                     // 10: pb.WorkingRo
+	(*WorkingChest)(nil),                  // 11: pb.WorkingChest
+	(*WorkingPump)(nil),                   // 12: pb.WorkingPump
+	(*WorkingValve)(nil),                  // 13: pb.WorkingValve
+	(*ItemHistoryData)(nil),               // 14: pb.ItemHistoryData
+	(*MultiAddItemHistoryDataReq)(nil),    // 15: pb.MultiAddItemHistoryDataReq
+	(*MultiAddItemHistoryDataResp)(nil),   // 16: pb.MultiAddItemHistoryDataResp
+	(*ItemHistoryDataListReq)(nil),        // 17: pb.ItemHistoryDataListReq
+	(*ItemHistoryDataByTimeReq)(nil),      // 18: pb.ItemHistoryDataByTimeReq
+	(*ItemHistoryDataMaxMinResp)(nil),     // 19: pb.ItemHistoryDataMaxMinResp
+	(*ItemHistoryDataFirstLastResp)(nil),  // 20: pb.ItemHistoryDataFirstLastResp
+	(*ChangeTypeItemHistoryDataResp)(nil), // 21: pb.ChangeTypeItemHistoryDataResp
+	(*ItemHistoryDataList)(nil),           // 22: pb.ItemHistoryDataList
+	(*ItemHistoryDataForChart)(nil),       // 23: pb.ItemHistoryDataForChart
+	(*ItemHistoryDataForChartReq)(nil),    // 24: pb.ItemHistoryDataForChartReq
+	(*ItemHistoryDataForChartResp)(nil),   // 25: pb.ItemHistoryDataForChartResp
+	(*ItemHistoryDataListResp)(nil),       // 26: pb.ItemHistoryDataListResp
+	(*GetWorkingUfByCodeResp)(nil),        // 27: pb.GetWorkingUfByCodeResp
+	(*FindWorkingUfByCycleReq)(nil),       // 28: pb.FindWorkingUfByCycleReq
+	(*FindWorkingUfByCycleResp)(nil),      // 29: pb.FindWorkingUfByCycleResp
+	(*GetWorkingRoByCodeResp)(nil),        // 30: pb.GetWorkingRoByCodeResp
+	(*GetWorkingNfByCodeResp)(nil),        // 31: pb.GetWorkingNfByCodeResp
+	(*GetWorkingMfByCodeResp)(nil),        // 32: pb.GetWorkingMfByCodeResp
+	(*GetWorkingPumpByCodeResp)(nil),      // 33: pb.GetWorkingPumpByCodeResp
+	(*GetWorkingValveByCodeResp)(nil),     // 34: pb.GetWorkingValveByCodeResp
+	(*GetWorkingChestByCodeResp)(nil),     // 35: pb.GetWorkingChestByCodeResp
+	(*FindAppListReq)(nil),                // 36: pb.FindAppListReq
+	(*FindAppListResp)(nil),               // 37: pb.FindAppListResp
+	(*GetAppInfoReq)(nil),                 // 38: pb.GetAppInfoReq
+	(*GetAppInfoResp)(nil),                // 39: pb.GetAppInfoResp
+	(*CreateAppInfoReq)(nil),              // 40: pb.CreateAppInfoReq
+	(*CreateAppInfoResp)(nil),             // 41: pb.CreateAppInfoResp
+	(*RemoveAppInfoReq)(nil),              // 42: pb.RemoveAppInfoReq
+	(*RemoveAppInfoResp)(nil),             // 43: pb.RemoveAppInfoResp
+	(*DisableAppInfoReq)(nil),             // 44: pb.DisableAppInfoReq
+	(*DisableAppInfoResp)(nil),            // 45: pb.DisableAppInfoResp
+	(*EnableAppInfoReq)(nil),              // 46: pb.EnableAppInfoReq
+	(*EnableAppInfoResp)(nil),             // 47: pb.EnableAppInfoResp
+	(*ResetAppSecretReq)(nil),             // 48: pb.ResetAppSecretReq
+	(*ResetAppSecretResp)(nil),            // 49: pb.ResetAppSecretResp
+	(*ExpireAppSecretReq)(nil),            // 50: pb.ExpireAppSecretReq
+	(*ExpireAppSecretResp)(nil),           // 51: pb.ExpireAppSecretResp
+	(*ResetAppProjectReq)(nil),            // 52: pb.ResetAppProjectReq
+	(*ResetAppProjectResp)(nil),           // 53: pb.ResetAppProjectResp
+	(*FindDataDescribeReq)(nil),           // 54: pb.FindDataDescribeReq
+	(*FindDataDescribeResp)(nil),          // 55: pb.FindDataDescribeResp
+	(*FindDataCorrelationReq)(nil),        // 56: pb.FindDataCorrelationReq
+	(*FindDataMinAndMaxReq)(nil),          // 57: pb.FindDataMinAndMaxReq
+	(*FindDataMinAndMaxResp)(nil),         // 58: pb.FindDataMinAndMaxResp
+	(*FindDataCorrelationResp)(nil),       // 59: pb.FindDataCorrelationResp
+	(*HealthReq)(nil),                     // 60: pb.HealthReq
+	(*HealthResp)(nil),                    // 61: pb.HealthResp
+	nil,                                   // 62: pb.DataCorrelationInfo.RelatedItemsEntry
+	nil,                                   // 63: pb.FindDataDescribeResp.ListEntry
+	nil,                                   // 64: pb.FindDataMinAndMaxResp.ListEntry
+	nil,                                   // 65: pb.FindDataCorrelationResp.ListEntry
+}
+var file_datacenter_proto_depIdxs = []int32{
+	62, // 0: pb.DataCorrelationInfo.related_items:type_name -> pb.DataCorrelationInfo.RelatedItemsEntry
+	14, // 1: pb.MultiAddItemHistoryDataReq.list:type_name -> pb.ItemHistoryData
+	23, // 2: pb.ItemHistoryDataForChartResp.list:type_name -> pb.ItemHistoryDataForChart
+	22, // 3: pb.ItemHistoryDataListResp.list:type_name -> pb.ItemHistoryDataList
+	8,  // 4: pb.GetWorkingUfByCodeResp.list:type_name -> pb.WorkingUf
+	8,  // 5: pb.FindWorkingUfByCycleResp.list:type_name -> pb.WorkingUf
+	10, // 6: pb.GetWorkingRoByCodeResp.list:type_name -> pb.WorkingRo
+	9,  // 7: pb.GetWorkingNfByCodeResp.list:type_name -> pb.WorkingNf
+	7,  // 8: pb.GetWorkingMfByCodeResp.list:type_name -> pb.WorkingMf
+	12, // 9: pb.GetWorkingPumpByCodeResp.list:type_name -> pb.WorkingPump
+	13, // 10: pb.GetWorkingValveByCodeResp.list:type_name -> pb.WorkingValve
+	11, // 11: pb.GetWorkingChestByCodeResp.list:type_name -> pb.WorkingChest
+	5,  // 12: pb.FindAppListResp.list:type_name -> pb.AppInfo
+	0,  // 13: pb.FindAppListResp.pagination:type_name -> pb.Pagination
+	5,  // 14: pb.GetAppInfoResp.app_info:type_name -> pb.AppInfo
+	5,  // 15: pb.CreateAppInfoResp.app_info:type_name -> pb.AppInfo
+	63, // 16: pb.FindDataDescribeResp.list:type_name -> pb.FindDataDescribeResp.ListEntry
+	64, // 17: pb.FindDataMinAndMaxResp.list:type_name -> pb.FindDataMinAndMaxResp.ListEntry
+	65, // 18: pb.FindDataCorrelationResp.list:type_name -> pb.FindDataCorrelationResp.ListEntry
+	3,  // 19: pb.DataCorrelationInfo.RelatedItemsEntry.value:type_name -> pb.RelatedItems
+	1,  // 20: pb.FindDataDescribeResp.ListEntry.value:type_name -> pb.DataDescribeInfo
+	2,  // 21: pb.FindDataMinAndMaxResp.ListEntry.value:type_name -> pb.DataMinAndMaxInfo
+	4,  // 22: pb.FindDataCorrelationResp.ListEntry.value:type_name -> pb.DataCorrelationInfo
+	6,  // 23: pb.Organization.GetWorkingUfByCode:input_type -> pb.DcWorkingReq
+	28, // 24: pb.Organization.FindWorkingUfByCycle:input_type -> pb.FindWorkingUfByCycleReq
+	6,  // 25: pb.Organization.GetWorkingRoByCode:input_type -> pb.DcWorkingReq
+	6,  // 26: pb.Organization.GetWorkingChestByCode:input_type -> pb.DcWorkingReq
+	6,  // 27: pb.Organization.GetWorkingPumpByCode:input_type -> pb.DcWorkingReq
+	6,  // 28: pb.Organization.GetWorkingValveByCode:input_type -> pb.DcWorkingReq
+	15, // 29: pb.Organization.MultiAddItemHistoryData:input_type -> pb.MultiAddItemHistoryDataReq
+	17, // 30: pb.Organization.ItemHistoryDataList:input_type -> pb.ItemHistoryDataListReq
+	18, // 31: pb.Organization.ItemHistoryDataByTime:input_type -> pb.ItemHistoryDataByTimeReq
+	18, // 32: pb.Organization.ItemHistoryDataMaxMinByTime:input_type -> pb.ItemHistoryDataByTimeReq
+	18, // 33: pb.Organization.ItemHistoryDataFirstLastByTime:input_type -> pb.ItemHistoryDataByTimeReq
+	18, // 34: pb.Organization.ChangeTypeItemHistoryData:input_type -> pb.ItemHistoryDataByTimeReq
+	24, // 35: pb.Organization.ItemHistoryDataForChart:input_type -> pb.ItemHistoryDataForChartReq
+	36, // 36: pb.Organization.FindAppList:input_type -> pb.FindAppListReq
+	38, // 37: pb.Organization.GetAppInfo:input_type -> pb.GetAppInfoReq
+	40, // 38: pb.Organization.CreateAppInfo:input_type -> pb.CreateAppInfoReq
+	42, // 39: pb.Organization.RemoveAppInfo:input_type -> pb.RemoveAppInfoReq
+	44, // 40: pb.Organization.DisableAppInfo:input_type -> pb.DisableAppInfoReq
+	46, // 41: pb.Organization.EnableAppInfo:input_type -> pb.EnableAppInfoReq
+	48, // 42: pb.Organization.ResetAppSecret:input_type -> pb.ResetAppSecretReq
+	50, // 43: pb.Organization.ExpireAppSecret:input_type -> pb.ExpireAppSecretReq
+	52, // 44: pb.Organization.ResetAppProject:input_type -> pb.ResetAppProjectReq
+	54, // 45: pb.Organization.FindDataDescribe:input_type -> pb.FindDataDescribeReq
+	57, // 46: pb.Organization.FindDataMinAndMax:input_type -> pb.FindDataMinAndMaxReq
+	56, // 47: pb.Organization.FindDataCorrelation:input_type -> pb.FindDataCorrelationReq
+	60, // 48: pb.Organization.Health:input_type -> pb.HealthReq
+	27, // 49: pb.Organization.GetWorkingUfByCode:output_type -> pb.GetWorkingUfByCodeResp
+	29, // 50: pb.Organization.FindWorkingUfByCycle:output_type -> pb.FindWorkingUfByCycleResp
+	30, // 51: pb.Organization.GetWorkingRoByCode:output_type -> pb.GetWorkingRoByCodeResp
+	35, // 52: pb.Organization.GetWorkingChestByCode:output_type -> pb.GetWorkingChestByCodeResp
+	33, // 53: pb.Organization.GetWorkingPumpByCode:output_type -> pb.GetWorkingPumpByCodeResp
+	34, // 54: pb.Organization.GetWorkingValveByCode:output_type -> pb.GetWorkingValveByCodeResp
+	16, // 55: pb.Organization.MultiAddItemHistoryData:output_type -> pb.MultiAddItemHistoryDataResp
+	26, // 56: pb.Organization.ItemHistoryDataList:output_type -> pb.ItemHistoryDataListResp
+	26, // 57: pb.Organization.ItemHistoryDataByTime:output_type -> pb.ItemHistoryDataListResp
+	19, // 58: pb.Organization.ItemHistoryDataMaxMinByTime:output_type -> pb.ItemHistoryDataMaxMinResp
+	20, // 59: pb.Organization.ItemHistoryDataFirstLastByTime:output_type -> pb.ItemHistoryDataFirstLastResp
+	21, // 60: pb.Organization.ChangeTypeItemHistoryData:output_type -> pb.ChangeTypeItemHistoryDataResp
+	25, // 61: pb.Organization.ItemHistoryDataForChart:output_type -> pb.ItemHistoryDataForChartResp
+	37, // 62: pb.Organization.FindAppList:output_type -> pb.FindAppListResp
+	39, // 63: pb.Organization.GetAppInfo:output_type -> pb.GetAppInfoResp
+	41, // 64: pb.Organization.CreateAppInfo:output_type -> pb.CreateAppInfoResp
+	43, // 65: pb.Organization.RemoveAppInfo:output_type -> pb.RemoveAppInfoResp
+	45, // 66: pb.Organization.DisableAppInfo:output_type -> pb.DisableAppInfoResp
+	47, // 67: pb.Organization.EnableAppInfo:output_type -> pb.EnableAppInfoResp
+	49, // 68: pb.Organization.ResetAppSecret:output_type -> pb.ResetAppSecretResp
+	51, // 69: pb.Organization.ExpireAppSecret:output_type -> pb.ExpireAppSecretResp
+	53, // 70: pb.Organization.ResetAppProject:output_type -> pb.ResetAppProjectResp
+	55, // 71: pb.Organization.FindDataDescribe:output_type -> pb.FindDataDescribeResp
+	58, // 72: pb.Organization.FindDataMinAndMax:output_type -> pb.FindDataMinAndMaxResp
+	59, // 73: pb.Organization.FindDataCorrelation:output_type -> pb.FindDataCorrelationResp
+	61, // 74: pb.Organization.Health:output_type -> pb.HealthResp
+	49, // [49:75] is the sub-list for method output_type
+	23, // [23:49] is the sub-list for method input_type
+	23, // [23:23] is the sub-list for extension type_name
+	23, // [23:23] is the sub-list for extension extendee
+	0,  // [0:23] is the sub-list for field type_name
+}
+
+func init() { file_datacenter_proto_init() }
+func file_datacenter_proto_init() {
+	if File_datacenter_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_datacenter_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Pagination); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DataDescribeInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DataMinAndMaxInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*RelatedItems); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DataCorrelationInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AppInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DcWorkingReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WorkingMf); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WorkingUf); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WorkingNf); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WorkingRo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WorkingChest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WorkingPump); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WorkingValve); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ItemHistoryData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*MultiAddItemHistoryDataReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*MultiAddItemHistoryDataResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ItemHistoryDataListReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ItemHistoryDataByTimeReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ItemHistoryDataMaxMinResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ItemHistoryDataFirstLastResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ChangeTypeItemHistoryDataResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ItemHistoryDataList); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ItemHistoryDataForChart); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ItemHistoryDataForChartReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ItemHistoryDataForChartResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ItemHistoryDataListResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetWorkingUfByCodeResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FindWorkingUfByCycleReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FindWorkingUfByCycleResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetWorkingRoByCodeResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetWorkingNfByCodeResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetWorkingMfByCodeResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetWorkingPumpByCodeResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetWorkingValveByCodeResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetWorkingChestByCodeResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FindAppListReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FindAppListResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetAppInfoReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetAppInfoResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CreateAppInfoReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CreateAppInfoResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*RemoveAppInfoReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*RemoveAppInfoResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DisableAppInfoReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DisableAppInfoResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*EnableAppInfoReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*EnableAppInfoResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ResetAppSecretReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ResetAppSecretResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ExpireAppSecretReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ExpireAppSecretResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ResetAppProjectReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ResetAppProjectResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FindDataDescribeReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FindDataDescribeResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FindDataCorrelationReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FindDataMinAndMaxReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FindDataMinAndMaxResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FindDataCorrelationResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*HealthReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_datacenter_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*HealthResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_datacenter_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   66,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_datacenter_proto_goTypes,
+		DependencyIndexes: file_datacenter_proto_depIdxs,
+		MessageInfos:      file_datacenter_proto_msgTypes,
+	}.Build()
+	File_datacenter_proto = out.File
+	file_datacenter_proto_rawDesc = nil
+	file_datacenter_proto_goTypes = nil
+	file_datacenter_proto_depIdxs = nil
+}

+ 1034 - 0
rpc_client/datacenter/pb/datacenter_grpc.pb.go

@@ -0,0 +1,1034 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.3.0
+// - protoc             v3.21.11
+// source: datacenter.proto
+
+package pb
+
+import (
+	context "context"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+const (
+	Organization_GetWorkingUfByCode_FullMethodName             = "/pb.Organization/GetWorkingUfByCode"
+	Organization_FindWorkingUfByCycle_FullMethodName           = "/pb.Organization/FindWorkingUfByCycle"
+	Organization_GetWorkingRoByCode_FullMethodName             = "/pb.Organization/GetWorkingRoByCode"
+	Organization_GetWorkingChestByCode_FullMethodName          = "/pb.Organization/GetWorkingChestByCode"
+	Organization_GetWorkingPumpByCode_FullMethodName           = "/pb.Organization/GetWorkingPumpByCode"
+	Organization_GetWorkingValveByCode_FullMethodName          = "/pb.Organization/GetWorkingValveByCode"
+	Organization_MultiAddItemHistoryData_FullMethodName        = "/pb.Organization/MultiAddItemHistoryData"
+	Organization_ItemHistoryDataList_FullMethodName            = "/pb.Organization/ItemHistoryDataList"
+	Organization_ItemHistoryDataByTime_FullMethodName          = "/pb.Organization/ItemHistoryDataByTime"
+	Organization_ItemHistoryDataMaxMinByTime_FullMethodName    = "/pb.Organization/ItemHistoryDataMaxMinByTime"
+	Organization_ItemHistoryDataFirstLastByTime_FullMethodName = "/pb.Organization/ItemHistoryDataFirstLastByTime"
+	Organization_ChangeTypeItemHistoryData_FullMethodName      = "/pb.Organization/ChangeTypeItemHistoryData"
+	Organization_ItemHistoryDataForChart_FullMethodName        = "/pb.Organization/ItemHistoryDataForChart"
+	Organization_FindAppList_FullMethodName                    = "/pb.Organization/FindAppList"
+	Organization_GetAppInfo_FullMethodName                     = "/pb.Organization/GetAppInfo"
+	Organization_CreateAppInfo_FullMethodName                  = "/pb.Organization/CreateAppInfo"
+	Organization_RemoveAppInfo_FullMethodName                  = "/pb.Organization/RemoveAppInfo"
+	Organization_DisableAppInfo_FullMethodName                 = "/pb.Organization/DisableAppInfo"
+	Organization_EnableAppInfo_FullMethodName                  = "/pb.Organization/EnableAppInfo"
+	Organization_ResetAppSecret_FullMethodName                 = "/pb.Organization/ResetAppSecret"
+	Organization_ExpireAppSecret_FullMethodName                = "/pb.Organization/ExpireAppSecret"
+	Organization_ResetAppProject_FullMethodName                = "/pb.Organization/ResetAppProject"
+	Organization_FindDataDescribe_FullMethodName               = "/pb.Organization/FindDataDescribe"
+	Organization_FindDataMinAndMax_FullMethodName              = "/pb.Organization/FindDataMinAndMax"
+	Organization_FindDataCorrelation_FullMethodName            = "/pb.Organization/FindDataCorrelation"
+	Organization_Health_FullMethodName                         = "/pb.Organization/Health"
+)
+
+// OrganizationClient is the client API for Organization v1.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type OrganizationClient interface {
+	GetWorkingUfByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingUfByCodeResp, error)
+	FindWorkingUfByCycle(ctx context.Context, in *FindWorkingUfByCycleReq, opts ...grpc.CallOption) (*FindWorkingUfByCycleResp, error)
+	GetWorkingRoByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingRoByCodeResp, error)
+	GetWorkingChestByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingChestByCodeResp, error)
+	GetWorkingPumpByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingPumpByCodeResp, error)
+	GetWorkingValveByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingValveByCodeResp, error)
+	MultiAddItemHistoryData(ctx context.Context, in *MultiAddItemHistoryDataReq, opts ...grpc.CallOption) (*MultiAddItemHistoryDataResp, error)
+	ItemHistoryDataList(ctx context.Context, in *ItemHistoryDataListReq, opts ...grpc.CallOption) (*ItemHistoryDataListResp, error)
+	ItemHistoryDataByTime(ctx context.Context, in *ItemHistoryDataByTimeReq, opts ...grpc.CallOption) (*ItemHistoryDataListResp, error)
+	ItemHistoryDataMaxMinByTime(ctx context.Context, in *ItemHistoryDataByTimeReq, opts ...grpc.CallOption) (*ItemHistoryDataMaxMinResp, error)
+	ItemHistoryDataFirstLastByTime(ctx context.Context, in *ItemHistoryDataByTimeReq, opts ...grpc.CallOption) (*ItemHistoryDataFirstLastResp, error)
+	ChangeTypeItemHistoryData(ctx context.Context, in *ItemHistoryDataByTimeReq, opts ...grpc.CallOption) (*ChangeTypeItemHistoryDataResp, error)
+	ItemHistoryDataForChart(ctx context.Context, in *ItemHistoryDataForChartReq, opts ...grpc.CallOption) (*ItemHistoryDataForChartResp, error)
+	FindAppList(ctx context.Context, in *FindAppListReq, opts ...grpc.CallOption) (*FindAppListResp, error)
+	GetAppInfo(ctx context.Context, in *GetAppInfoReq, opts ...grpc.CallOption) (*GetAppInfoResp, error)
+	CreateAppInfo(ctx context.Context, in *CreateAppInfoReq, opts ...grpc.CallOption) (*CreateAppInfoResp, error)
+	RemoveAppInfo(ctx context.Context, in *RemoveAppInfoReq, opts ...grpc.CallOption) (*RemoveAppInfoResp, error)
+	DisableAppInfo(ctx context.Context, in *DisableAppInfoReq, opts ...grpc.CallOption) (*DisableAppInfoResp, error)
+	EnableAppInfo(ctx context.Context, in *EnableAppInfoReq, opts ...grpc.CallOption) (*EnableAppInfoResp, error)
+	ResetAppSecret(ctx context.Context, in *ResetAppSecretReq, opts ...grpc.CallOption) (*ResetAppSecretResp, error)
+	ExpireAppSecret(ctx context.Context, in *ExpireAppSecretReq, opts ...grpc.CallOption) (*ExpireAppSecretResp, error)
+	ResetAppProject(ctx context.Context, in *ResetAppProjectReq, opts ...grpc.CallOption) (*ResetAppProjectResp, error)
+	FindDataDescribe(ctx context.Context, in *FindDataDescribeReq, opts ...grpc.CallOption) (*FindDataDescribeResp, error)
+	FindDataMinAndMax(ctx context.Context, in *FindDataMinAndMaxReq, opts ...grpc.CallOption) (*FindDataMinAndMaxResp, error)
+	FindDataCorrelation(ctx context.Context, in *FindDataCorrelationReq, opts ...grpc.CallOption) (*FindDataCorrelationResp, error)
+	Health(ctx context.Context, in *HealthReq, opts ...grpc.CallOption) (*HealthResp, error)
+}
+
+type organizationClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewOrganizationClient(cc grpc.ClientConnInterface) OrganizationClient {
+	return &organizationClient{cc}
+}
+
+func (c *organizationClient) GetWorkingUfByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingUfByCodeResp, error) {
+	out := new(GetWorkingUfByCodeResp)
+	err := c.cc.Invoke(ctx, Organization_GetWorkingUfByCode_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) FindWorkingUfByCycle(ctx context.Context, in *FindWorkingUfByCycleReq, opts ...grpc.CallOption) (*FindWorkingUfByCycleResp, error) {
+	out := new(FindWorkingUfByCycleResp)
+	err := c.cc.Invoke(ctx, Organization_FindWorkingUfByCycle_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) GetWorkingRoByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingRoByCodeResp, error) {
+	out := new(GetWorkingRoByCodeResp)
+	err := c.cc.Invoke(ctx, Organization_GetWorkingRoByCode_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) GetWorkingChestByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingChestByCodeResp, error) {
+	out := new(GetWorkingChestByCodeResp)
+	err := c.cc.Invoke(ctx, Organization_GetWorkingChestByCode_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) GetWorkingPumpByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingPumpByCodeResp, error) {
+	out := new(GetWorkingPumpByCodeResp)
+	err := c.cc.Invoke(ctx, Organization_GetWorkingPumpByCode_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) GetWorkingValveByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingValveByCodeResp, error) {
+	out := new(GetWorkingValveByCodeResp)
+	err := c.cc.Invoke(ctx, Organization_GetWorkingValveByCode_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) MultiAddItemHistoryData(ctx context.Context, in *MultiAddItemHistoryDataReq, opts ...grpc.CallOption) (*MultiAddItemHistoryDataResp, error) {
+	out := new(MultiAddItemHistoryDataResp)
+	err := c.cc.Invoke(ctx, Organization_MultiAddItemHistoryData_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) ItemHistoryDataList(ctx context.Context, in *ItemHistoryDataListReq, opts ...grpc.CallOption) (*ItemHistoryDataListResp, error) {
+	out := new(ItemHistoryDataListResp)
+	err := c.cc.Invoke(ctx, Organization_ItemHistoryDataList_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) ItemHistoryDataByTime(ctx context.Context, in *ItemHistoryDataByTimeReq, opts ...grpc.CallOption) (*ItemHistoryDataListResp, error) {
+	out := new(ItemHistoryDataListResp)
+	err := c.cc.Invoke(ctx, Organization_ItemHistoryDataByTime_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) ItemHistoryDataMaxMinByTime(ctx context.Context, in *ItemHistoryDataByTimeReq, opts ...grpc.CallOption) (*ItemHistoryDataMaxMinResp, error) {
+	out := new(ItemHistoryDataMaxMinResp)
+	err := c.cc.Invoke(ctx, Organization_ItemHistoryDataMaxMinByTime_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) ItemHistoryDataFirstLastByTime(ctx context.Context, in *ItemHistoryDataByTimeReq, opts ...grpc.CallOption) (*ItemHistoryDataFirstLastResp, error) {
+	out := new(ItemHistoryDataFirstLastResp)
+	err := c.cc.Invoke(ctx, Organization_ItemHistoryDataFirstLastByTime_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) ChangeTypeItemHistoryData(ctx context.Context, in *ItemHistoryDataByTimeReq, opts ...grpc.CallOption) (*ChangeTypeItemHistoryDataResp, error) {
+	out := new(ChangeTypeItemHistoryDataResp)
+	err := c.cc.Invoke(ctx, Organization_ChangeTypeItemHistoryData_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) ItemHistoryDataForChart(ctx context.Context, in *ItemHistoryDataForChartReq, opts ...grpc.CallOption) (*ItemHistoryDataForChartResp, error) {
+	out := new(ItemHistoryDataForChartResp)
+	err := c.cc.Invoke(ctx, Organization_ItemHistoryDataForChart_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) FindAppList(ctx context.Context, in *FindAppListReq, opts ...grpc.CallOption) (*FindAppListResp, error) {
+	out := new(FindAppListResp)
+	err := c.cc.Invoke(ctx, Organization_FindAppList_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) GetAppInfo(ctx context.Context, in *GetAppInfoReq, opts ...grpc.CallOption) (*GetAppInfoResp, error) {
+	out := new(GetAppInfoResp)
+	err := c.cc.Invoke(ctx, Organization_GetAppInfo_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) CreateAppInfo(ctx context.Context, in *CreateAppInfoReq, opts ...grpc.CallOption) (*CreateAppInfoResp, error) {
+	out := new(CreateAppInfoResp)
+	err := c.cc.Invoke(ctx, Organization_CreateAppInfo_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) RemoveAppInfo(ctx context.Context, in *RemoveAppInfoReq, opts ...grpc.CallOption) (*RemoveAppInfoResp, error) {
+	out := new(RemoveAppInfoResp)
+	err := c.cc.Invoke(ctx, Organization_RemoveAppInfo_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) DisableAppInfo(ctx context.Context, in *DisableAppInfoReq, opts ...grpc.CallOption) (*DisableAppInfoResp, error) {
+	out := new(DisableAppInfoResp)
+	err := c.cc.Invoke(ctx, Organization_DisableAppInfo_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) EnableAppInfo(ctx context.Context, in *EnableAppInfoReq, opts ...grpc.CallOption) (*EnableAppInfoResp, error) {
+	out := new(EnableAppInfoResp)
+	err := c.cc.Invoke(ctx, Organization_EnableAppInfo_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) ResetAppSecret(ctx context.Context, in *ResetAppSecretReq, opts ...grpc.CallOption) (*ResetAppSecretResp, error) {
+	out := new(ResetAppSecretResp)
+	err := c.cc.Invoke(ctx, Organization_ResetAppSecret_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) ExpireAppSecret(ctx context.Context, in *ExpireAppSecretReq, opts ...grpc.CallOption) (*ExpireAppSecretResp, error) {
+	out := new(ExpireAppSecretResp)
+	err := c.cc.Invoke(ctx, Organization_ExpireAppSecret_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) ResetAppProject(ctx context.Context, in *ResetAppProjectReq, opts ...grpc.CallOption) (*ResetAppProjectResp, error) {
+	out := new(ResetAppProjectResp)
+	err := c.cc.Invoke(ctx, Organization_ResetAppProject_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) FindDataDescribe(ctx context.Context, in *FindDataDescribeReq, opts ...grpc.CallOption) (*FindDataDescribeResp, error) {
+	out := new(FindDataDescribeResp)
+	err := c.cc.Invoke(ctx, Organization_FindDataDescribe_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) FindDataMinAndMax(ctx context.Context, in *FindDataMinAndMaxReq, opts ...grpc.CallOption) (*FindDataMinAndMaxResp, error) {
+	out := new(FindDataMinAndMaxResp)
+	err := c.cc.Invoke(ctx, Organization_FindDataMinAndMax_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) FindDataCorrelation(ctx context.Context, in *FindDataCorrelationReq, opts ...grpc.CallOption) (*FindDataCorrelationResp, error) {
+	out := new(FindDataCorrelationResp)
+	err := c.cc.Invoke(ctx, Organization_FindDataCorrelation_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *organizationClient) Health(ctx context.Context, in *HealthReq, opts ...grpc.CallOption) (*HealthResp, error) {
+	out := new(HealthResp)
+	err := c.cc.Invoke(ctx, Organization_Health_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// OrganizationServer is the server API for Organization v1.
+// All implementations must embed UnimplementedOrganizationServer
+// for forward compatibility
+type OrganizationServer interface {
+	GetWorkingUfByCode(context.Context, *DcWorkingReq) (*GetWorkingUfByCodeResp, error)
+	FindWorkingUfByCycle(context.Context, *FindWorkingUfByCycleReq) (*FindWorkingUfByCycleResp, error)
+	GetWorkingRoByCode(context.Context, *DcWorkingReq) (*GetWorkingRoByCodeResp, error)
+	GetWorkingChestByCode(context.Context, *DcWorkingReq) (*GetWorkingChestByCodeResp, error)
+	GetWorkingPumpByCode(context.Context, *DcWorkingReq) (*GetWorkingPumpByCodeResp, error)
+	GetWorkingValveByCode(context.Context, *DcWorkingReq) (*GetWorkingValveByCodeResp, error)
+	MultiAddItemHistoryData(context.Context, *MultiAddItemHistoryDataReq) (*MultiAddItemHistoryDataResp, error)
+	ItemHistoryDataList(context.Context, *ItemHistoryDataListReq) (*ItemHistoryDataListResp, error)
+	ItemHistoryDataByTime(context.Context, *ItemHistoryDataByTimeReq) (*ItemHistoryDataListResp, error)
+	ItemHistoryDataMaxMinByTime(context.Context, *ItemHistoryDataByTimeReq) (*ItemHistoryDataMaxMinResp, error)
+	ItemHistoryDataFirstLastByTime(context.Context, *ItemHistoryDataByTimeReq) (*ItemHistoryDataFirstLastResp, error)
+	ChangeTypeItemHistoryData(context.Context, *ItemHistoryDataByTimeReq) (*ChangeTypeItemHistoryDataResp, error)
+	ItemHistoryDataForChart(context.Context, *ItemHistoryDataForChartReq) (*ItemHistoryDataForChartResp, error)
+	FindAppList(context.Context, *FindAppListReq) (*FindAppListResp, error)
+	GetAppInfo(context.Context, *GetAppInfoReq) (*GetAppInfoResp, error)
+	CreateAppInfo(context.Context, *CreateAppInfoReq) (*CreateAppInfoResp, error)
+	RemoveAppInfo(context.Context, *RemoveAppInfoReq) (*RemoveAppInfoResp, error)
+	DisableAppInfo(context.Context, *DisableAppInfoReq) (*DisableAppInfoResp, error)
+	EnableAppInfo(context.Context, *EnableAppInfoReq) (*EnableAppInfoResp, error)
+	ResetAppSecret(context.Context, *ResetAppSecretReq) (*ResetAppSecretResp, error)
+	ExpireAppSecret(context.Context, *ExpireAppSecretReq) (*ExpireAppSecretResp, error)
+	ResetAppProject(context.Context, *ResetAppProjectReq) (*ResetAppProjectResp, error)
+	FindDataDescribe(context.Context, *FindDataDescribeReq) (*FindDataDescribeResp, error)
+	FindDataMinAndMax(context.Context, *FindDataMinAndMaxReq) (*FindDataMinAndMaxResp, error)
+	FindDataCorrelation(context.Context, *FindDataCorrelationReq) (*FindDataCorrelationResp, error)
+	Health(context.Context, *HealthReq) (*HealthResp, error)
+	mustEmbedUnimplementedOrganizationServer()
+}
+
+// UnimplementedOrganizationServer must be embedded to have forward compatible implementations.
+type UnimplementedOrganizationServer struct {
+}
+
+func (UnimplementedOrganizationServer) GetWorkingUfByCode(context.Context, *DcWorkingReq) (*GetWorkingUfByCodeResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetWorkingUfByCode not implemented")
+}
+func (UnimplementedOrganizationServer) FindWorkingUfByCycle(context.Context, *FindWorkingUfByCycleReq) (*FindWorkingUfByCycleResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindWorkingUfByCycle not implemented")
+}
+func (UnimplementedOrganizationServer) GetWorkingRoByCode(context.Context, *DcWorkingReq) (*GetWorkingRoByCodeResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetWorkingRoByCode not implemented")
+}
+func (UnimplementedOrganizationServer) GetWorkingChestByCode(context.Context, *DcWorkingReq) (*GetWorkingChestByCodeResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetWorkingChestByCode not implemented")
+}
+func (UnimplementedOrganizationServer) GetWorkingPumpByCode(context.Context, *DcWorkingReq) (*GetWorkingPumpByCodeResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetWorkingPumpByCode not implemented")
+}
+func (UnimplementedOrganizationServer) GetWorkingValveByCode(context.Context, *DcWorkingReq) (*GetWorkingValveByCodeResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetWorkingValveByCode not implemented")
+}
+func (UnimplementedOrganizationServer) MultiAddItemHistoryData(context.Context, *MultiAddItemHistoryDataReq) (*MultiAddItemHistoryDataResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MultiAddItemHistoryData not implemented")
+}
+func (UnimplementedOrganizationServer) ItemHistoryDataList(context.Context, *ItemHistoryDataListReq) (*ItemHistoryDataListResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ItemHistoryDataList not implemented")
+}
+func (UnimplementedOrganizationServer) ItemHistoryDataByTime(context.Context, *ItemHistoryDataByTimeReq) (*ItemHistoryDataListResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ItemHistoryDataByTime not implemented")
+}
+func (UnimplementedOrganizationServer) ItemHistoryDataMaxMinByTime(context.Context, *ItemHistoryDataByTimeReq) (*ItemHistoryDataMaxMinResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ItemHistoryDataMaxMinByTime not implemented")
+}
+func (UnimplementedOrganizationServer) ItemHistoryDataFirstLastByTime(context.Context, *ItemHistoryDataByTimeReq) (*ItemHistoryDataFirstLastResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ItemHistoryDataFirstLastByTime not implemented")
+}
+func (UnimplementedOrganizationServer) ChangeTypeItemHistoryData(context.Context, *ItemHistoryDataByTimeReq) (*ChangeTypeItemHistoryDataResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ChangeTypeItemHistoryData not implemented")
+}
+func (UnimplementedOrganizationServer) ItemHistoryDataForChart(context.Context, *ItemHistoryDataForChartReq) (*ItemHistoryDataForChartResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ItemHistoryDataForChart not implemented")
+}
+func (UnimplementedOrganizationServer) FindAppList(context.Context, *FindAppListReq) (*FindAppListResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindAppList not implemented")
+}
+func (UnimplementedOrganizationServer) GetAppInfo(context.Context, *GetAppInfoReq) (*GetAppInfoResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAppInfo not implemented")
+}
+func (UnimplementedOrganizationServer) CreateAppInfo(context.Context, *CreateAppInfoReq) (*CreateAppInfoResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateAppInfo not implemented")
+}
+func (UnimplementedOrganizationServer) RemoveAppInfo(context.Context, *RemoveAppInfoReq) (*RemoveAppInfoResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method RemoveAppInfo not implemented")
+}
+func (UnimplementedOrganizationServer) DisableAppInfo(context.Context, *DisableAppInfoReq) (*DisableAppInfoResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DisableAppInfo not implemented")
+}
+func (UnimplementedOrganizationServer) EnableAppInfo(context.Context, *EnableAppInfoReq) (*EnableAppInfoResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method EnableAppInfo not implemented")
+}
+func (UnimplementedOrganizationServer) ResetAppSecret(context.Context, *ResetAppSecretReq) (*ResetAppSecretResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ResetAppSecret not implemented")
+}
+func (UnimplementedOrganizationServer) ExpireAppSecret(context.Context, *ExpireAppSecretReq) (*ExpireAppSecretResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ExpireAppSecret not implemented")
+}
+func (UnimplementedOrganizationServer) ResetAppProject(context.Context, *ResetAppProjectReq) (*ResetAppProjectResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ResetAppProject not implemented")
+}
+func (UnimplementedOrganizationServer) FindDataDescribe(context.Context, *FindDataDescribeReq) (*FindDataDescribeResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindDataDescribe not implemented")
+}
+func (UnimplementedOrganizationServer) FindDataMinAndMax(context.Context, *FindDataMinAndMaxReq) (*FindDataMinAndMaxResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindDataMinAndMax not implemented")
+}
+func (UnimplementedOrganizationServer) FindDataCorrelation(context.Context, *FindDataCorrelationReq) (*FindDataCorrelationResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindDataCorrelation not implemented")
+}
+func (UnimplementedOrganizationServer) Health(context.Context, *HealthReq) (*HealthResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Health not implemented")
+}
+func (UnimplementedOrganizationServer) mustEmbedUnimplementedOrganizationServer() {}
+
+// UnsafeOrganizationServer may be embedded to opt out of forward compatibility for this v1.
+// Use of this interface is not recommended, as added methods to OrganizationServer will
+// result in compilation errors.
+type UnsafeOrganizationServer interface {
+	mustEmbedUnimplementedOrganizationServer()
+}
+
+func RegisterOrganizationServer(s grpc.ServiceRegistrar, srv OrganizationServer) {
+	s.RegisterService(&Organization_ServiceDesc, srv)
+}
+
+func _Organization_GetWorkingUfByCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DcWorkingReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).GetWorkingUfByCode(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_GetWorkingUfByCode_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).GetWorkingUfByCode(ctx, req.(*DcWorkingReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_FindWorkingUfByCycle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(FindWorkingUfByCycleReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).FindWorkingUfByCycle(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_FindWorkingUfByCycle_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).FindWorkingUfByCycle(ctx, req.(*FindWorkingUfByCycleReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_GetWorkingRoByCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DcWorkingReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).GetWorkingRoByCode(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_GetWorkingRoByCode_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).GetWorkingRoByCode(ctx, req.(*DcWorkingReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_GetWorkingChestByCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DcWorkingReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).GetWorkingChestByCode(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_GetWorkingChestByCode_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).GetWorkingChestByCode(ctx, req.(*DcWorkingReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_GetWorkingPumpByCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DcWorkingReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).GetWorkingPumpByCode(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_GetWorkingPumpByCode_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).GetWorkingPumpByCode(ctx, req.(*DcWorkingReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_GetWorkingValveByCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DcWorkingReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).GetWorkingValveByCode(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_GetWorkingValveByCode_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).GetWorkingValveByCode(ctx, req.(*DcWorkingReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_MultiAddItemHistoryData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MultiAddItemHistoryDataReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).MultiAddItemHistoryData(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_MultiAddItemHistoryData_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).MultiAddItemHistoryData(ctx, req.(*MultiAddItemHistoryDataReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_ItemHistoryDataList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ItemHistoryDataListReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).ItemHistoryDataList(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_ItemHistoryDataList_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).ItemHistoryDataList(ctx, req.(*ItemHistoryDataListReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_ItemHistoryDataByTime_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ItemHistoryDataByTimeReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).ItemHistoryDataByTime(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_ItemHistoryDataByTime_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).ItemHistoryDataByTime(ctx, req.(*ItemHistoryDataByTimeReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_ItemHistoryDataMaxMinByTime_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ItemHistoryDataByTimeReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).ItemHistoryDataMaxMinByTime(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_ItemHistoryDataMaxMinByTime_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).ItemHistoryDataMaxMinByTime(ctx, req.(*ItemHistoryDataByTimeReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_ItemHistoryDataFirstLastByTime_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ItemHistoryDataByTimeReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).ItemHistoryDataFirstLastByTime(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_ItemHistoryDataFirstLastByTime_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).ItemHistoryDataFirstLastByTime(ctx, req.(*ItemHistoryDataByTimeReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_ChangeTypeItemHistoryData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ItemHistoryDataByTimeReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).ChangeTypeItemHistoryData(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_ChangeTypeItemHistoryData_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).ChangeTypeItemHistoryData(ctx, req.(*ItemHistoryDataByTimeReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_ItemHistoryDataForChart_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ItemHistoryDataForChartReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).ItemHistoryDataForChart(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_ItemHistoryDataForChart_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).ItemHistoryDataForChart(ctx, req.(*ItemHistoryDataForChartReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_FindAppList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(FindAppListReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).FindAppList(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_FindAppList_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).FindAppList(ctx, req.(*FindAppListReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_GetAppInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAppInfoReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).GetAppInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_GetAppInfo_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).GetAppInfo(ctx, req.(*GetAppInfoReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_CreateAppInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateAppInfoReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).CreateAppInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_CreateAppInfo_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).CreateAppInfo(ctx, req.(*CreateAppInfoReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_RemoveAppInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(RemoveAppInfoReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).RemoveAppInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_RemoveAppInfo_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).RemoveAppInfo(ctx, req.(*RemoveAppInfoReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_DisableAppInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DisableAppInfoReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).DisableAppInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_DisableAppInfo_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).DisableAppInfo(ctx, req.(*DisableAppInfoReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_EnableAppInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(EnableAppInfoReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).EnableAppInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_EnableAppInfo_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).EnableAppInfo(ctx, req.(*EnableAppInfoReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_ResetAppSecret_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ResetAppSecretReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).ResetAppSecret(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_ResetAppSecret_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).ResetAppSecret(ctx, req.(*ResetAppSecretReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_ExpireAppSecret_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ExpireAppSecretReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).ExpireAppSecret(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_ExpireAppSecret_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).ExpireAppSecret(ctx, req.(*ExpireAppSecretReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_ResetAppProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ResetAppProjectReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).ResetAppProject(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_ResetAppProject_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).ResetAppProject(ctx, req.(*ResetAppProjectReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_FindDataDescribe_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(FindDataDescribeReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).FindDataDescribe(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_FindDataDescribe_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).FindDataDescribe(ctx, req.(*FindDataDescribeReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_FindDataMinAndMax_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(FindDataMinAndMaxReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).FindDataMinAndMax(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_FindDataMinAndMax_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).FindDataMinAndMax(ctx, req.(*FindDataMinAndMaxReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_FindDataCorrelation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(FindDataCorrelationReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).FindDataCorrelation(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_FindDataCorrelation_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).FindDataCorrelation(ctx, req.(*FindDataCorrelationReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Organization_Health_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(HealthReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).Health(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_Health_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).Health(ctx, req.(*HealthReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// Organization_ServiceDesc is the grpc.ServiceDesc for Organization v1.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var Organization_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "pb.Organization",
+	HandlerType: (*OrganizationServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetWorkingUfByCode",
+			Handler:    _Organization_GetWorkingUfByCode_Handler,
+		},
+		{
+			MethodName: "FindWorkingUfByCycle",
+			Handler:    _Organization_FindWorkingUfByCycle_Handler,
+		},
+		{
+			MethodName: "GetWorkingRoByCode",
+			Handler:    _Organization_GetWorkingRoByCode_Handler,
+		},
+		{
+			MethodName: "GetWorkingChestByCode",
+			Handler:    _Organization_GetWorkingChestByCode_Handler,
+		},
+		{
+			MethodName: "GetWorkingPumpByCode",
+			Handler:    _Organization_GetWorkingPumpByCode_Handler,
+		},
+		{
+			MethodName: "GetWorkingValveByCode",
+			Handler:    _Organization_GetWorkingValveByCode_Handler,
+		},
+		{
+			MethodName: "MultiAddItemHistoryData",
+			Handler:    _Organization_MultiAddItemHistoryData_Handler,
+		},
+		{
+			MethodName: "ItemHistoryDataList",
+			Handler:    _Organization_ItemHistoryDataList_Handler,
+		},
+		{
+			MethodName: "ItemHistoryDataByTime",
+			Handler:    _Organization_ItemHistoryDataByTime_Handler,
+		},
+		{
+			MethodName: "ItemHistoryDataMaxMinByTime",
+			Handler:    _Organization_ItemHistoryDataMaxMinByTime_Handler,
+		},
+		{
+			MethodName: "ItemHistoryDataFirstLastByTime",
+			Handler:    _Organization_ItemHistoryDataFirstLastByTime_Handler,
+		},
+		{
+			MethodName: "ChangeTypeItemHistoryData",
+			Handler:    _Organization_ChangeTypeItemHistoryData_Handler,
+		},
+		{
+			MethodName: "ItemHistoryDataForChart",
+			Handler:    _Organization_ItemHistoryDataForChart_Handler,
+		},
+		{
+			MethodName: "FindAppList",
+			Handler:    _Organization_FindAppList_Handler,
+		},
+		{
+			MethodName: "GetAppInfo",
+			Handler:    _Organization_GetAppInfo_Handler,
+		},
+		{
+			MethodName: "CreateAppInfo",
+			Handler:    _Organization_CreateAppInfo_Handler,
+		},
+		{
+			MethodName: "RemoveAppInfo",
+			Handler:    _Organization_RemoveAppInfo_Handler,
+		},
+		{
+			MethodName: "DisableAppInfo",
+			Handler:    _Organization_DisableAppInfo_Handler,
+		},
+		{
+			MethodName: "EnableAppInfo",
+			Handler:    _Organization_EnableAppInfo_Handler,
+		},
+		{
+			MethodName: "ResetAppSecret",
+			Handler:    _Organization_ResetAppSecret_Handler,
+		},
+		{
+			MethodName: "ExpireAppSecret",
+			Handler:    _Organization_ExpireAppSecret_Handler,
+		},
+		{
+			MethodName: "ResetAppProject",
+			Handler:    _Organization_ResetAppProject_Handler,
+		},
+		{
+			MethodName: "FindDataDescribe",
+			Handler:    _Organization_FindDataDescribe_Handler,
+		},
+		{
+			MethodName: "FindDataMinAndMax",
+			Handler:    _Organization_FindDataMinAndMax_Handler,
+		},
+		{
+			MethodName: "FindDataCorrelation",
+			Handler:    _Organization_FindDataCorrelation_Handler,
+		},
+		{
+			MethodName: "Health",
+			Handler:    _Organization_Health_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "datacenter.proto",
+}